This repository has been archived by the owner on Dec 21, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
794 lines (694 loc) · 176 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[MADEC]]></title>
<subtitle><![CDATA[Visualisation d'information structurée en rapport]]></subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://madec-project.github.io/"/>
<updated>2015-10-09T16:02:47.000Z</updated>
<id>http://madec-project.github.io/</id>
<author>
<name><![CDATA[MADEC]]></name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title><![CDATA[Sprint Review #15W38: peaufinage]]></title>
<link href="http://madec-project.github.io/2015/10/12/Sprint-Review-15W38-peaufinage/"/>
<id>http://madec-project.github.io/2015/10/12/Sprint-Review-15W38-peaufinage/</id>
<published>2015-10-12T14:00:00.000Z</published>
<updated>2015-10-09T16:02:47.000Z</updated>
<content type="html"><![CDATA[<p>Pour ce quinzième et dernier sprint, nous devions terminer, polir, affiner, régler, en un mot <em>peaufiner</em> l’application ezVIS.</p>
<h1 id="Tâches">Tâches</h1><ul>
<li>19 tâches prévues</li>
<li>17 tâches terminées</li>
<li>plus de 43 points de complexité prévus</li>
<li>30 points de complexité effectués</li>
</ul>
<p>D’une manière générale, nous nous sommes concentrés sur la stabilité de l’application, et donc sur la réduction de la dette technique.</p>
<p>Nous avons aussi rencontré des problèmes sur ezMaster, qui ne pouvaient apparaître qu’après suffisamment d’utilisation, et résolu un bug dont la présence était aléatoire.</p>
<h1 id="Dette_technique">Dette technique</h1><p>La <a href="https://fr.wikipedia.org/wiki/Dette_technique" target="_blank" rel="external">dette technique</a> est la distance à parcourir, en termes de développement, pour parvenir au programme le plus cohérent et le plus à facile maintenir.</p>
<p>Les actions suivantes ont réduit cette dette.</p>
<h3 id="Correction_de_connexionURI_en_connectionURI">Correction de connexionURI en connectionURI</h3><p>Le programme et ses options étant intégralement en anglais, il nous semblait incohérent de laisser une option avec une orthographe française: <code>connexionURI</code>.</p>
<p>GitHub : <a href="https://github.com/madec-project/ezvis/issues/79" target="_blank" rel="external">#79</a></p>
<h2 id="Préparer_ezvis_à_une_évolution_de_castor-core">Préparer ezvis à une évolution de castor-core</h2><p>Le cœur d’ezVIS est un module nommé <code>castor-core</code> dont nous savons qu’il va évoluer (notamment les URL utilisés par ezVIS). Les routes (ou URL) fournies par <code>castor-core</code> version 2 seront encore disponibles dans sa version 3, mais préfixées par <code>/-/v2</code>.<br>Nous avons donc changé tous les appels à ces URL dans ezVIS.</p>
<p>GitHub : <a href="https://github.com/madec-project/ezvis/issues/81" target="_blank" rel="external">#81</a></p>
<h2 id="Figer_les_dépendances_ou_pas?">Figer les dépendances ou pas?</h2><p>Pour éviter des surprises lors des futures installations d’ezVIS, au cas où un des modules dont il dépend ne respecterait pas le <a href="http://semver.org/" target="_blank" rel="external"><em>semantic versioning</em></a>, nous avons pensé qu’il serait utile de figer les numéros de version de ces dépendances.</p>
<p>Il existe justement une commande du gestionnaire de modules de node qui le permet: <a href="https://docs.npmjs.com/cli/shrinkwrap" target="_blank" rel="external"><code>npm shrinkwrap</code></a>.<br>Malheureusement, celle-ci ne distingue <a href="https://github.com/npm/npm/issues/2679#issuecomment-137893324" target="_blank" rel="external">pas encore</a> les modules optionnels des modules obligatoires, et il se trouve qu’un module optionnel n’est pas utile ailleurs que sur Mac, mais que de plus il ne s’y installe pas, cassant ainsi l’installation d’<code>ezvis</code> dès qu’on utilise <em>shrinkwrap</em> (le rendant ainsi obligatoire).<br>La <a href="https://github.com/npm/npm/wiki/Roadmap-area-of-focus%3A-bundling" target="_blank" rel="external">feuille de route de npm</a> laisse à penser que d’ici un an, ce problème n’existera plus. D’ici là, nous compterons sur la gestion sémantique de version des modules. S’ils la pratiquaient tous, moins de problèmes seraient à craindre.</p>
<p>GitHub : <a href="https://github.com/madec-project/ezvis/issues/82" target="_blank" rel="external">#82</a> <a href="https://github.com/madec-project/ezvis/issues/85" target="_blank" rel="external">#85</a></p>
<h1 id="Interface">Interface</h1><h2 id="Icones_enlevées">Icones enlevées</h2><p>Plusieurs icones étaient présentes dans l’entête d’ezVIS: celle des alertes (qui avertissait quand une synchronisation avait eu lieu, mais nous nous sommes aperçus que personne ne s’en servait), et celle de l’utilisateur (qui n’a jamais été fonctionnelle).</p>
<img src="/2015/10/12/Sprint-Review-15W38-peaufinage/ezvis-top-right-icons.png">
<p>Nous avons donc supprimé ces icones de la page.</p>
<p>GitHub : <a href="https://github.com/madec-project/ezvis/issues/69" target="_blank" rel="external">#69</a></p>
<h2 id="Couleur_des_graphes_superposés">Couleur des graphes superposés</h2><p>Jusqu’à présent, le <a href="/2015/06/23/Sprint-Review-15W23-calculs-complexes/#Graphes_superposés">graphe superposé</a> avait une couleur fixe : le jaune.</p>
<p><img src="/2015/06/23/Sprint-Review-15W23-calculs-complexes/ezvis-overlay-6.7.2.png" alt="Le graphe superposé jaune"></p>
<p>Si cette couleur convient la plupart du temps, nous avons souhaité donner le choix au gestionnaire en ajoutant l’option <code>color</code> à la partie <a href="https://ezvis.readthedocs.org/en/latest/Histogram/#overlay" target="_blank" rel="external"><code>overlay</code></a> de la configuration :</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"overlay"</span>: {</span><br><span class="line"> <span class="string">"label"</span>: <span class="string">"Taux de citation normalisé"</span>,</span><br><span class="line"> <span class="string">"flying"</span>: [<span class="string">"normalizeCitationRatio"</span>],</span><br><span class="line"> <span class="string">"color"</span>: <span class="string">"red"</span></span><br><span class="line">},</span><br></pre></td></tr></table></figure>
<img src="/2015/10/12/Sprint-Review-15W38-peaufinage/ezvis-overlay-red.png">
<p>GitHub : <a href="https://github.com/madec-project/ezvis/issues/73" target="_blank" rel="external">#73</a></p>
<h1 id="Corriger_l’authentification_derrière_un_reverse_proxy">Corriger l’authentification derrière un reverse proxy</h1><p>ezVIS peut être configuré pour n’<a href="/2015/05/04/Sprint-Review-15W14-ressources-externes/#login/password">autoriser l’accès</a> qu’à un utilisateur particulier.<br>Dans notre établissement, les instances d’ezVIS sont derrière un reverse proxy (ou <a href="https://fr.wikipedia.org/wiki/Proxy_inverse" target="_blank" rel="external">proxy inverse</a>) dont le comportement n’a pas été cohérent: l’adresse IP du visiteur était soit l’adresse de ce proxy (comportement attendu), soit une adresse locale (127.0.0.1), autorisant alors l’accès à l’instance.<br>Nous avons donc corrigé ezVIS pour qu’il tienne compte de l’entête HTTP <code>x-forwarded-for</code> qui, elle, contient bien l’adresse IP du visiteur (pas celle du proxy).</p>
<p>GitHub : <a href="https://github.com/madec-project/ezvis/commit/cd94d07423e5d7cc460ee949d024193b2cda63e8" target="_blank" rel="external">cd94d07</a></p>
<h1 id="Installation_automatique_avec_SCCM_sous_Windows">Installation automatique avec SCCM sous Windows</h1><p>Nous voulions pouvoir installer automatiquement, via le logiciel <a href="https://fr.wikipedia.org/wiki/System_Center_Configuration_Manager" target="_blank" rel="external">SCCM</a>, ezVIS sur plusieurs postes Windows à la fois, dans les services de notre établissement.<br>Malheureusement, SCCM prenant l’identité de l’administrateur de la machine pour installer, il n’a pas de répertoire utilisateur. Ce répertoire utilisateur étant indispensable à l’installeur Windows de node pour fonctionner, nous avons dû renoncer à ce projet.</p>
<p>Malgré tout, l’installation manuelle de node est très simple, nous avons donc opté pour un compromis en automatisant uniquement l’installation de MongoDB, ce qui simplifie tout de même la procédure d’installation à l’INIST.</p>
<h1 id="ezMaster">ezMaster</h1><h2 id="Remplacement_de_SlickGrid_par_un_tableau_HTML">Remplacement de SlickGrid par un tableau HTML</h2><img src="/2015/10/12/Sprint-Review-15W38-peaufinage/ezmaster-11-instances.png">
<p>En dépassant 13 instances dans ezMaster, nous avons rencontré une limite: l’ascenseur disparait au-delà de 13 instances, empêchant toute action sur les dernières (configuration, ajout de données, suppression, …) :</p>
<img src="/2015/10/12/Sprint-Review-15W38-peaufinage/ezmaster-14-instances.png">
<p>La technologie utilisée, <a href="https://github.com/mleibman/SlickGrid/wiki" target="_blank" rel="external">SlickGrid</a>, est complexe et inutile pour le nombre d’instances que nous gérons: nous l’avons remplacée par un simple tableau HTML sans pagination, ni filtre, ni tri.</p>
<img src="/2015/10/12/Sprint-Review-15W38-peaufinage/ezmaster-html.png">
<p>GitHub : <a href="https://github.com/madec-project/ezmaster/issues/2" target="_blank" rel="external">ezmaster#2</a></p>
<h2 id="Remplacer_le___par_un_-_dans_l’URL_publique">Remplacer le _ par un - dans l’URL publique</h2><img src="/2015/10/12/Sprint-Review-15W38-peaufinage/ezmaster-url.png">
<p>Jusqu’à présent, le nom technique d’une instance est composé du nom du projet, de l’étude, et optionnellement d’une version, le tout séparé par des soulignés.<br>Dorénavant, et pour mieux satisfaire les normes sur les URL, ces séparateurs seront des tirets.</p>
<p>GitHub : <a href="https://github.com/madec-project/ezvis/issues/80" target="_blank" rel="external">#80</a></p>
<h1 id="Profitez!">Profitez!</h1><p>Pour profiter des améliorations présentées:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install --production -g ezvis</span><br></pre></td></tr></table></figure>
]]></content>
<summary type="html">
<![CDATA[<p>Pour ce quinzième et dernier sprint, nous devions terminer, polir, affiner, régler, en un mot <em>peaufiner</em> l’application ezVIS.</p>]]>
</summary>
<category term="bugs" scheme="http://madec-project.github.io/tags/bugs/"/>
<category term="configuration" scheme="http://madec-project.github.io/tags/configuration/"/>
<category term="ezmaster" scheme="http://madec-project.github.io/tags/ezmaster/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="login" scheme="http://madec-project.github.io/tags/login/"/>
<category term="sccm" scheme="http://madec-project.github.io/tags/sccm/"/>
</entry>
<entry>
<title><![CDATA[Sprint Review #15W30: gestion des erreurs]]></title>
<link href="http://madec-project.github.io/2015/09/14/Sprint-Review-15W30-gestion-des-erreurs/"/>
<id>http://madec-project.github.io/2015/09/14/Sprint-Review-15W30-gestion-des-erreurs/</id>
<published>2015-09-14T12:00:00.000Z</published>
<updated>2015-09-15T13:43:26.000Z</updated>
<content type="html"><![CDATA[<p>Ce quatorzième et avant-dernier sprint avait pour thème <em>la gestion des erreurs</em>.<br>Nous avons apporté quelques modifications concernant la gestion des erreurs et leur signalement, ajouté une visualisation du chargement des données à <code>ezvis</code> et quelques moyens de valider ce chargement.<br>Pendant la chasse au bug que comporte tout sprint, nous avons écrit une commande permettant de mieux situer d’où viennent certaines erreurs: <code>csv-string</code>.<br>Au passage, nous avons ajouté des fonctionnalités à JBJ (dans l’optique de faciliter l’utilisation de ressources externes).</p>
<h2 id="Tâches">Tâches</h2><ul>
<li>9 tâches prévues</li>
<li>6 tâches terminées</li>
<li>plus de 21,5 points de complexité prévus</li>
<li>32 points de complexité effectués</li>
</ul>
<p>Comme <a href="/2015/07/23/Sprint-Review-15W26-consolidation/#Tâches">la dernière fois</a>, nous étions en présence d’un bug, par essence d’estimation difficile tant qu’on n’a pas entamé son analyse.</p>
<h2 id="Gestion_des_erreurs">Gestion des erreurs</h2><p>Les erreurs de chargement sont maintenant sauvegardées dans un fichier <code>instance_errors.log</code> (où <code>instance</code> est le nom de l’instance, c’est-à-dire le nom du répertoire où se trouvent les données).</p>
<p>Lorsque la variable d’environnement <code>NODE_ENV</code> ne vaut pas <code>production</code>, ces erreurs sont aussi affichées dans la sortie standard d’erreur.<br>En clair, cela signifie que si on utilise ezvis via un terminal on peut voir ces erreurs (sauf si la variable en question a été créée/modifiée), mais que pour l’instant, l’utilisation exclusive d’ezmaster ne le permet pas.</p>
<p>Voir sur GitHub : <a href="https://github.com/madec-project/ezvis/issues/66" target="_blank" rel="external">#66</a> <a href="https://github.com/madec-project/ezvis/issues/67" target="_blank" rel="external">#67</a></p>
<h2 id="Visualisation_du_chargement">Visualisation du chargement</h2><p>Lors du chargement des données (par exemple au démarrage d’ezvis), au lieu de laisser l’administrateur d’une instance dans l’expectative, à ne pas savoir où en est le chargement, on affiche maintenant la progression du chargement en direct:</p>
<p><script type="text/javascript" src="https://asciinema.org/a/8xu5zzhclccty0sahnstip58z.js" id="asciicast-8xu5zzhclccty0sahnstip58z" async></script><br>Voir sur GitHub : <a href="https://github.com/madec-project/ezvis/issues/63" target="_blank" rel="external">#63</a></p>
<h2 id="Validation_du_chargement">Validation du chargement</h2><p>À la fin d’un chargement, un fichier <code>instance_load.log</code> existe avec des informations sur les opérations de synchronisation qui ont eu lieu:</p>
<figure class="highlight asciidoc"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ cat data15<span class="emphasis">_load.log</span><br><span class="line">/Lorraine_</span>WOS<span class="emphasis">_Moselle_</span>publis2007-2012<span class="emphasis">_SansLorraineSansMoselle_</span>UTF8.csv : 3449</span><br><span class="line">Total : 3449 documents</span><br><span class="line"><span class="header">Fri Sep 11 2015 17:47:55 GMT+0200 (CEST)</span><br><span class="line">---------------------------------</span></span><br></pre></td></tr></table></figure>
<p>Voir sur GitHub : <a href="https://github.com/madec-project/ezvis/issues/68" target="_blank" rel="external">#68</a></p>
<h2 id="Amélioration_des_messages_d’erreurs_de_JBJ">Amélioration des messages d’erreurs de JBJ</h2><p>Jusqu’à présent, les erreurs de JBJ (le langage utilisé pour la configuration d’ezvis) étaient traitées de manière hétérogène.<br>Dorénavant, elles sont toutes traitées de la même manière, et affichées lors du chargement.<br>On ajoute, derrière le message d’erreur qui peut encore être abscons (c’est un message d’erreur javascript), le nom de l’action qui a provoqué cette erreur (mais pas le nom de ses alias).</p>
<p>Voir sur GitHub : <a href="https://github.com/madec-project/ezvis/issues/64" target="_blank" rel="external">#64</a></p>
<h2 id="csv-string">csv-string</h2><p>Lors de la mise au point d’une instance, on peut rencontrer une erreur JBJ concernant une action <code>parseCSV</code> ou <code>parseCVSFile</code>.<br>Sachant que ces actions JBJ utilisent une bibliothèque appelée <a href="https://www.npmjs.com/package/csv-string" target="_blank" rel="external">csv-string</a>, il est pratique de pouvoir reproduire (puis éliminer) ces erreurs en dehors du processus ezvis (qui peut être long, si le nombre de documents est élevé).<br>C’est pourquoi j’ai écrit une <a href="https://github.com/parmentf/csv-string-command" target="_blank" rel="external">commande <code>csv-string</code></a> qui applique l’analyse d’un CSV avec les options par défaut en utilisant la même bibliothèque qu’ezvis: csv-string.</p>
<p>Son installation est similaire à celle d’ezvis:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install -g csv-string-command</span><br></pre></td></tr></table></figure>
<p>Cette commande lit l’entrée standard et écrit sur la sortie standard (et éventuellement la sortie standard d’erreur).</p>
<h2 id="Chargement_de_ressources_externes_en_CSV">Chargement de ressources externes en CSV</h2><p>Lors d’un test d’utilisation de <a href="/2015/05/04/Sprint-Review-15W14-ressources-externes/#Accès_aux_ressources_externes">ressources externes</a>, nous nous sommes rendus compte qu’il était bien plus facile d’accéder à des ressources au format JSON, qu’à des ressources au format CSV.</p>
<ol>
<li>l’action <a href="https://github.com/castorjs/node-jbj/blob/master/README.md#parsecsv-separator" target="_blank" rel="external"><code>parseCSV</code></a> est faite pour analyser une chaîne de caractère représentant un <em>champ</em> (une colonne), et non un fichier CSV complet. Elle renvoie uniquement la première ligne d’un fichier CSV.</li>
<li><p>l’action <a href="https://github.com/castorjs/node-jbj/blob/master/README.md#parsecsvfile-separator" target="_blank" rel="external"><code>parseCSVFile</code></a> que nous avons ajoutée pallie le problème précédent, mais ne permet pas d’obtenir un objet directement utilisable (équivalent à un tableau associatif), mais un tableau de tableaux:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line"> [</span><br><span class="line"> <span class="string">"Afghanistan"</span>,</span><br><span class="line"> <span class="string">"AFG"</span></span><br><span class="line"> ],</span><br><span class="line"> [</span><br><span class="line"> <span class="string">"Aland Islands"</span>,</span><br><span class="line"> <span class="string">"ALA"</span></span><br><span class="line"> ]</span><br><span class="line">]</span><br></pre></td></tr></table></figure>
<p> nous avons donc crée une nouvelle action, <a href="https://github.com/castorjs/node-jbj/blob/master/README.md#arrays2objects-key-value" target="_blank" rel="external"><code>arrays2objects</code></a>, qui permet de modifier ce tableau (transformer les tableaux internes en objets) qui pourront ensuite être utilisés par l’action <a href="https://github.com/castorjs/node-jbj/blob/master/README.md#array2object-key-value" target="_blank" rel="external"><code>array2object</code></a> pré-existante (que l’on utilisait déjà avec le fichier JSON externe).</p>
</li>
</ol>
<p>Avant:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"$TCMonde"</span>: {</span><br><span class="line"> <span class="string">"$?"</span>: <span class="string">"http://localhost:35000/ESI_AllFields_20150407.json"</span>,</span><br><span class="line"> <span class="string">"parseJSON"</span>: <span class="literal">true</span>,</span><br><span class="line"> <span class="string">"array2object"</span>: <span class="literal">true</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Maintenant:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"$TCMonde"</span>: {</span><br><span class="line"> <span class="string">"$?"</span>: <span class="string">"http://localhost:35000/ESI_AllFields_20150407.tsv"</span>,</span><br><span class="line"> <span class="string">"parseCSVFile"</span>: <span class="string">"\t"</span>,</span><br><span class="line"> <span class="string">"arrays2objects"</span>: <span class="literal">true</span>,</span><br><span class="line"> <span class="string">"array2object"</span>: <span class="literal">true</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Voir sur GitHub : <a href="https://github.com/madec-project/ezvis/issues/65" target="_blank" rel="external">#65</a></p>
]]></content>
<summary type="html">
<![CDATA[<p>Ce quatorzième et avant-dernier sprint avait pour thème <em>la gestion des erreurs</em>.<br>Nous avons apporté quelques modifications con]]>
</summary>
<category term="bugs" scheme="http://madec-project.github.io/tags/bugs/"/>
<category term="chargement" scheme="http://madec-project.github.io/tags/chargement/"/>
<category term="csv-string" scheme="http://madec-project.github.io/tags/csv-string/"/>
<category term="erreurs" scheme="http://madec-project.github.io/tags/erreurs/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="jbj" scheme="http://madec-project.github.io/tags/jbj/"/>
<category term="log" scheme="http://madec-project.github.io/tags/log/"/>
<category term="validation" scheme="http://madec-project.github.io/tags/validation/"/>
</entry>
<entry>
<title><![CDATA[Sprint Review #15W26: consolidation]]></title>
<link href="http://madec-project.github.io/2015/07/23/Sprint-Review-15W26-consolidation/"/>
<id>http://madec-project.github.io/2015/07/23/Sprint-Review-15W26-consolidation/</id>
<published>2015-07-23T12:00:00.000Z</published>
<updated>2015-07-23T09:00:07.000Z</updated>
<content type="html"><![CDATA[<p>Ce <em>sprint</em> n°13 a été consacré à la consolidation de l’outil ezVIS.<br>Nous avons principalement modifié la documentation et corrigé des bugs.</p>
<h1 id="Tâches">Tâches</h1><ul>
<li>20 tâches prévues</li>
<li>18 tâches effectuées (dont 15 avaient été prévues)</li>
<li>24 tâches au total</li>
<li>plus de 24 points de complexité prévus</li>
<li>37,5 points de complexité effectués</li>
</ul>
<p>Le nombre de points de complexité prévus était très peu précis, car nous avions plusieurs bugs.<br>Les bugs sont par définition difficile à estimer.<br>N’ont pas été comptabilisés ici les travaux de déclaration des bugs par les documentalistes/utilisateurs.</p>
<h1 id="Production">Production</h1><h2 id="Basculements_des_URL_publics">Basculements des URL publics</h2><p>Les URL publics des rapports du service Appui au Pilotage de l’Inist pointent maintenant sur la machine de production dont la mise au point a été finalisée (via puppet).<br>Au passage, les instances ont été copiées de la machine d’intégration vers la machine de production (et vérifiées par les gestionnaires de ces instances).</p>
<h2 id="Augmentation_de_l’espace_disque">Augmentation de l’espace disque</h2><p>À cause de la manière dont ezVIS gère le cache des requêtes qu’il utilise, la place utilisée par une de ses instances dans la base de données augmente à mesure que ses utilisateurs en font des usages variés.</p>
<p>C’est pourquoi nous avons fait augmenter par le service Ingénierie de Production l’espace disque disponible sur la machine de production (c’était 10 Go au total sur la machine d’intégration, c’est 200 Go sur la machine de production).</p>
<h1 id="Bugs">Bugs</h1><h2 id="Déclaration_des_bugs_par_les_gestionnaires">Déclaration des bugs par les gestionnaires</h2><p>Ce sprint ayant été dédié à la consolidation d’ezVIS, nous avons demandé aux gestionnaires des instances déjà existantes de faire une déclaration formelle des bugs qu’ils ont rencontré.<br>De plus, ils ont dû faire en faire qu’on puisse reproduire ces bugs.<br>Nous avons donc utilisé l’application ezREF présente sur la machine d’intégration, et fait utiliser l’interface de dépôt de fichiers sur ce serveur pour y mettre:</p>
<ul>
<li>la description du dysfonctionnement (dans un fichier <code>*README.txt</code>)</li>
<li>la configuration de l’instance (dans un fichier <code>*.json</code>)</li>
<li>le(s) corpus dans un ou plusieurs fichier(s) dont préfixe était commun à tous les fichiers concernant ce bug.</li>
</ul>
<p>Tout le monde a parfaitement joué le jeu et nous avons obtenu la description de 5 bugs:</p>
<figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">(-rw-rw-r--) <span class="number">3.6</span>M Bibliotep_XML_14_08_corpus_final_NCT<span class="class">.xml</span></span><br><span class="line">(-rw-rw-r--) <span class="number">4.2</span>M Bibliotep_XML_14_10_corpus_final_NCT<span class="class">.xml</span></span><br><span class="line">(-rw-rw-r--) <span class="number">438</span>B Bibliotep_XML_bibliotep<span class="class">.README</span><span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">25.4</span>k Bibliotep_XML_bibliotep<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">1.1</span>k bibliotep_entier_pertes<span class="class">.README</span><span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">6.0</span>k bibliotep_entier_pertes<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">1.7</span>M bibliotep_entier_pertes_2005-<span class="number">2006</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.5</span>M bibliotep_entier_pertes_2006-<span class="number">2007</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.7</span>M bibliotep_entier_pertes_2007-<span class="number">2008</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.7</span>M bibliotep_entier_pertes_2008-<span class="number">2009</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.8</span>M bibliotep_entier_pertes_2009_2010<span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.6</span>M bibliotep_entier_pertes_2010-<span class="number">2011</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.7</span>M bibliotep_entier_pertes_2011-<span class="number">2012</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.7</span>M bibliotep_entier_pertes_2012-<span class="number">2013</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.2</span>M bibliotep_entier_pertes_2013-<span class="number">2014</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.7</span>M bibliotep_entier_pertes_2014-<span class="number">2015</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">6.3</span>k jsoncorpus_istex<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">498</span>B jsoncorpus_istex_README<span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">30.7</span>M jsoncorpus_istex_data<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">25.2</span>k maj_config-corpus_ezpaarse_CONFIG-ancienneconfig<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">25.9</span>k maj_config-corpus_ezpaarse_CONFIG-nouvelleconfig<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">5.2</span>M maj_config-corpus_ezpaarse_CORPUS-<span class="attribute">initial</span><span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">5.2</span>M maj_config-corpus_ezpaarse_CORPUS-modifie<span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">995</span>B maj_config-corpus_ezpaarse_README<span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">5.7</span>k wos_france_lux_csv<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">2.9</span>M wos_france_lux_csv_CORPUS<span class="class">.csv</span></span><br><span class="line">(-rw-rw-r--) <span class="number">1.1</span>k wos_france_lux_tsv-csv_README<span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">5.8</span>k wos_france_lux_tsv<span class="class">.json</span></span><br><span class="line">(-rw-rw-r--) <span class="number">1.5</span>M wos_france_lux_tsv_CORPUS-SansGuillemet_1-<span class="number">500</span>Ref<span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">1.4</span>M wos_france_lux_tsv_CORPUS-SansGuillemet_501-<span class="number">999</span>Ref<span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">1.5</span>M wos_france_lux_tsv_CORPUS_1-<span class="number">500</span>Ref<span class="class">.txt</span></span><br><span class="line">(-rw-rw-r--) <span class="number">1.4</span>M wos_france_lux_tsv_CORPUS_501-<span class="number">999</span>Ref.txt</span><br></pre></td></tr></table></figure>
<h2 id="Correction_du_chargement_incomplet">Correction du chargement incomplet</h2><p>Dans plusieurs des bugs déclarés, lors du chargement des données au premier lancement, ezVIS ne rendait pas la main: la déclaration <code>Files and Database are synchronised.</code> n’arrivait pas (même quand tous les documents avaient été chargés), et donc encore moins le calcul des <code>corpusFields</code> (les métriques sur le corpus).<br>Souvent d’ailleurs, on pouvait contourner ce problème en relançant simplement l’instance (ezVIS détectait alors que le(s) fichier(s) n’avaient pas changés, et passait directement à l’étape suivante: le calcul des métriques).</p>
<p>Il s’est avéré que ce cas arrivait quand une erreur survenait lors du chargement (soit un problème de <em>parsing</em> du fichier, soit un problème JBJ lors du calcul des <code>documentFields</code>).<br>L’analyse a révélé que lors du chargement, les erreurs étaient complètement ignorées, et qu’ezVIS essayait quand même de traiter les données, sans même afficher l’erreur.</p>
<p>Dorénavant, l’erreur est affichée, accompagnée du nom du fichier et du numéro du document, dans ce fichier, pour lequel l’erreur s’est produite.</p>
<p>Exemple:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">$ ezvis bibliotep_entier_pertes</span><br><span class="line">Core version : <span class="number">2.5</span>.<span class="number">0</span></span><br><span class="line">Configuration : /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes.json</span><br><span class="line">Theme : /home/parmentf/dev/castorjs/ezvis</span><br><span class="line">App : ezvis <span class="number">6.7</span>.<span class="number">3</span></span><br><span class="line">Source : /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes</span><br><span class="line">Server is listening on port <span class="number">3000</span>: http://localhost:<span class="number">3000</span></span><br><span class="line">Index field : annee/annee_1</span><br><span class="line">Index field : titre/titre_1</span><br><span class="line">Index field : wid/wid_1</span><br><span class="line">Index field : neoplasms/neoplasms_1</span><br><span class="line">Index field : techniques/techniques_1</span><br><span class="line">Index field : pays/pays_1</span><br><span class="line">Index field : auteurs/auteurs_1</span><br><span class="line">Index field : vpmid/vpmid_1</span><br><span class="line">Index field : elements/elements_1</span><br><span class="line">Index field : pmid/pmid_1</span><br><span class="line">Index field : anatomical/anatomical_1</span><br><span class="line">Index field : isotopes/isotopes_1</span><br><span class="line">Index field : <span class="built_in">source</span>/<span class="built_in">source</span>_1</span><br><span class="line">Index field : text/text_text</span><br><span class="line"> error [TypeError: Cannot call method <span class="string">'slice'</span> of undefined] <span class="keyword">in</span> file /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes/bibliotep_entier_pertes_2014-<span class="number">2015</span>.csv document <span class="comment"># 3431</span></span><br><span class="line"> error [TypeError: Cannot call method <span class="string">'slice'</span> of undefined] <span class="keyword">in</span> file /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes/bibliotep_entier_pertes_2014-<span class="number">2015</span>.csv document <span class="comment"># 3643</span></span><br><span class="line"> error [TypeError: Cannot call method <span class="string">'slice'</span> of undefined] <span class="keyword">in</span> file /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes/bibliotep_entier_pertes_2014-<span class="number">2015</span>.csv document <span class="comment"># 3645</span></span><br><span class="line"> error [TypeError: Cannot call method <span class="string">'slice'</span> of undefined] <span class="keyword">in</span> file /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes/bibliotep_entier_pertes_2014-<span class="number">2015</span>.csv document <span class="comment"># 3738</span></span><br><span class="line"> error [TypeError: Cannot call method <span class="string">'slice'</span> of undefined] <span class="keyword">in</span> file /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes/bibliotep_entier_pertes_2014-<span class="number">2015</span>.csv document <span class="comment"># 3855</span></span><br><span class="line"> error [TypeError: Cannot call method <span class="string">'slice'</span> of undefined] <span class="keyword">in</span> file /home/parmentf/dev/castorjs/bugs/bibliotep_entier_pertes/bibliotep_entier_pertes_2014-<span class="number">2015</span>.csv document <span class="comment"># 3895</span></span><br><span class="line">Files and Database are synchronised.</span><br><span class="line"><span class="number">127.0</span>.<span class="number">0.1</span> - - [<span class="number">20</span>/Jul/<span class="number">2015</span>:<span class="number">15</span>:<span class="number">41</span>:<span class="number">03</span> +<span class="number">0000</span>] <span class="string">"GET /compute.json?operator=count&field=wid HTTP/1.1"</span> <span class="number">200</span> - <span class="string">"-"</span> <span class="string">"-"</span></span><br><span class="line"><span class="number">127.0</span>.<span class="number">0.1</span> - - [<span class="number">20</span>/Jul/<span class="number">2015</span>:<span class="number">15</span>:<span class="number">41</span>:<span class="number">03</span> +<span class="number">0000</span>] <span class="string">"GET /compute.json?operator=distinct&field=annee HTTP/1.1"</span> <span class="number">200</span> - <span class="string">"-"</span> <span class="string">"-"</span></span><br><span class="line"><span class="number">127.0</span>.<span class="number">0.1</span> - - [<span class="number">20</span>/Jul/<span class="number">2015</span>:<span class="number">15</span>:<span class="number">41</span>:<span class="number">03</span> +<span class="number">0000</span>] <span class="string">"GET /compute.json?operator=distinct&field=isotopes HTTP/1.1"</span> <span class="number">200</span> - <span class="string">"-"</span> <span class="string">"-"</span></span><br><span class="line">Corpus fields computed.</span><br></pre></td></tr></table></figure>
<p>Cette correction a modifier le comportement d’ezVIS sur plusieurs des bugs déclarés, révélant alors que c’était plutôt les fichiers d’origine qui ne respectaient pas le format demandé (CVS et l’échappement des guillemets, par exemple).</p>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/46" target="_blank" rel="external">#46</a>.</p>
<h2 id="Correction:_mettre_à_jour_l’instance_quand_la_configuration_est_modifiée">Correction: mettre à jour l’instance quand la configuration est modifiée</h2><p>Un comportement pratique d’ezVIS a cessé de fonctionner il y a déjà quelques sprints: quand on modifie la configuration d’une instance et qu’on la relance <em>sans modifier les données</em>, les documents ne prennent pas en compte les modifications de la configuration.<br>En particulier, quand un gestionnaire modifie les <code>documentFields</code>, ces nouveaux champs ne sont calculés que pour les nouveaux documents (ou pour aucun). C’est très handicapant quand on met au point une configuration car on est alors contraint, quand on passe par ezMaster, de supprimer l’instance et de la recréer (ce qui implique de recharger les données).</p>
<p>Ce comportement a été rétabli: quand on modifie une configuration, si les documents sont plus anciens que le fichier de configuration, ezVIS les mets à jour en prenant en compte la nouvelle configuration.</p>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/49" target="_blank" rel="external">#49</a>.</p>
<h2 id="Correction:_mettre_à_jour_l’instance_quand_les_fichiers_sont_modifiés">Correction: mettre à jour l’instance quand les fichiers sont modifiés</h2><p>Quand un fichier déjà chargé dans l’instance est remplacé par un fichier du même nom mais contenant des lignes en moins, les lignes ne disparaissaient pas.</p>
<p>Après une enquête approfondie (merci à <a href="https://github.com/nojhamster" target="_blank" rel="external">Yannick</a> pour son aide), nous avons trouvé et corrigé le bug.</p>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/50" target="_blank" rel="external">#50</a>.</p>
<p><strong>ATTENTION :</strong> il est possible que des métriques faisant un comptage des documents ne soient pas mises à jour immédiatement. Dans ce cas, il est nécessaire de redémarrer l’instance (ou de la mettre en pause de la relancer, via ezMaster) pour bénéficier d’un calcul à jour.</p>
<h1 id="Nouvelle_documentation">Nouvelle documentation</h1><p>Il commençait à être difficile de s’y retrouver dans <a href="https://github.com/madec-project/ezvis/blob/356d3dc4b49e2e30c3c7684b087212f29537ef51/README.md" target="_blank" rel="external">l’ancienne documentation d’ezVIS</a>, qui tenait sur une page, mais était dépourvue de table des matières (et souvent faisait référence à la documentation d’autres projets).</p>
<p>Il a donc été décidé d’utiliser un système dédié à la documentation de projets informatiques, qui se base sur le même format que l’ancienne documentation (Markdown): <a href="https://readthedocs.org/" target="_blank" rel="external">ReadTheDocs</a>.</p>
<p>La nouvelle documentation, divisée en pages plus courtes, et agrémentée d’illustrations, est donc disponible sur <a href="http://ezvis.readthedocs.org/" target="_blank" rel="external">http://ezvis.readthedocs.org/</a> ou <a href="http://ezvis.rtfd.org/" target="_blank" rel="external">http://ezvis.rtfd.org/</a>.<br>Elle est mise à jour à chaque mise à jour du dépôt GitHub, et <em>responsive</em> (lisible sur un téléphone mobile).<br>Au besoin, on pourrait même en garder des versions différentes (une pour la version 6.*, et une pour la version suivante, par exemple).</p>
<img src="/2015/07/23/Sprint-Review-15W26-consolidation/ezvis-readthedocs.png">
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/51" target="_blank" rel="external">#51</a>.</p>
<h1 id="Meilleurs_messages_d’erreur">Meilleurs messages d’erreur</h1><h2 id="oubli_de_lancer_MongoDB">oubli de lancer MongoDB</h2><p>Quand on a oublié MongoDB avant de lancer ezVIS, il y a maintenant un message d’erreur:</p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">failed to connect to [localhost:27017]</span><br></pre></td></tr></table></figure>
<p>Il est certes sibyllin, mais il est difficile de faire mieux (principalement en raison du fait qu’ezVIS n’établit la connexion à MongoDB que lorsqu’il en a besoin).</p>
<h2 id="oubli_du_paramètre">oubli du paramètre</h2><p>ezVIS a un paramètre obligatoire: le chemin du répertoire où se trouvent les fichiers contenant les données.<br>Auparavant, le message était très technique, et même les programmeurs avaient besoin de toute leur expérience pour le comprendre.</p>
<p>Maintenant c’est celui ci:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ ezvis</span><br><span class="line">Usage:</span><br><span class="line"> ezvis data</span><br><span class="line"> data being a directory path, and data.json the settings file.</span><br><span class="line"> See https://github.com/madec-project/ezvis <span class="keyword">for</span> more details.</span><br></pre></td></tr></table></figure>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/52" target="_blank" rel="external">#52</a>.</p>
<h2 id="Erreurs_JBJ">Erreurs JBJ</h2><p>Afin de pouvoir afficher les erreurs JBJ (dues à la configuration des <code>documentFields</code>, <code>corpusFields</code> et <code>flyingFields</code>), nous avons mené une opération d’homogénéisation du traitement des erreurs dans JBJ.<br>Il sont maintenant traités comme n’importe quelle erreur dans ezVIS (en particulier lors du chargement des données).</p>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/56" target="_blank" rel="external">#56</a>.</p>
<h1 id="Camemberts:_position_des_légendes_lorsque_des_labels_sont_précisés">Camemberts: position des légendes lorsque des labels sont précisés</h1><p>Dans un <code>pie</code>, quand on déclare des <code>labels</code>, la position de la légende n’était pas prise en compte (voir image ci-dessous).</p>
<p>Ex:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">field</span>": <span class="value"><span class="string">"Prf"</span></span>,</span><br><span class="line"> "<span class="attribute">type</span>": <span class="value"><span class="string">"pie"</span></span>,</span><br><span class="line"> "<span class="attribute">title</span>": <span class="value"><span class="string">"Projets de recherche fédératifs (PRF) - PRF avec labels ds chart"</span></span>,</span><br><span class="line"> "<span class="attribute">legend</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">position</span>": <span class="value"><span class="string">"right"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">labels</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">ESU</span>": <span class="value"><span class="string">"ESU - Environnement sonore urbain"</span></span>,</span><br><span class="line"> "<span class="attribute">Eval-PDU</span>": <span class="value"><span class="string">"Eval-PDU - Evaluation environnementale des plans de déplacements urbains"</span></span>,</span><br><span class="line"> "<span class="attribute">GEOCONURB</span>": <span class="value"><span class="string">"GEOCONURB - Géo-connaissances urbaines"</span></span>,</span><br><span class="line"> "<span class="attribute">MUE</span>": <span class="value"><span class="string">"MUE - Microclimat urbain et énergie"</span></span>,</span><br><span class="line"> "<span class="attribute">ONEVU</span>": <span class="value"><span class="string">"ONEVU - Observatoire nantais des environnements urbains"</span></span>,</span><br><span class="line"> "<span class="attribute">PUD</span>": <span class="value"><span class="string">"PUD - Projet urbain durable"</span></span>,</span><br><span class="line"> "<span class="attribute">SOLURB</span>": <span class="value"><span class="string">"SOLURB - Sols urbains"</span></span>,</span><br><span class="line"> "<span class="attribute">V&I</span>": <span class="value"><span class="string">"V&I - Ville et image"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">removeLabels</span>": <span class="value"><span class="string">"true"</span></span>,</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<img src="/2015/07/23/Sprint-Review-15W26-consolidation/IRSTV_PRF_LabelsDsChart.png">
<p>C’est maintenant fonctionnel.</p>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/55" target="_blank" rel="external">#55</a>.</p>
<h1 id="JBJ">JBJ</h1><h2 id="Nouveaux_alias:_getIndex_&_getIndexVar">Nouveaux alias: <code>getIndex</code> & <code>getIndexVar</code></h2><p>Quand <a href="http://jbj.rtfd.org/#getproperty" target="_blank" rel="external"><code>getProperty</code></a> et <a href="http://jbj.rtfd.org/#getpropertyvar" target="_blank" rel="external"><code>getPropertyVar</code></a> sont appliqués à un tableau, il est plus naturel d’utiliser <code>getIndex</code> et <code>getIndexVar</code> (cliquez sur les liens pour voir des exemples dans la documentation de JBJ version ReadTheDocs).</p>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/60" target="_blank" rel="external">#60</a>.</p>
<h2 id="JBJ_Playground"><a href="http://castorjs.github.io/node-jbj/" target="_blank" rel="external">JBJ Playground</a></h2><p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/61" target="_blank" rel="external">#61</a>.</p>
<h3 id="Recherche_dans_les_exemples">Recherche dans les exemples</h3><p>Nous avions déjà une recherche dans les actions, mais pas dans les exemples.<br>C’est fait.</p>
<img src="/2015/07/23/Sprint-Review-15W26-consolidation/jbj-plgrnd-examples-search.png">
<p>Voir sur GitHub: <a href="https://github.com/castorjs/node-jbj/commit/f8cde749693fbd6ff59642a5f23f8e7d93cacf1a" target="_blank" rel="external">f8cde74</a>.</p>
<h3 id="Agrandissement_des_éditeurs">Agrandissement des éditeurs</h3><p>La taille des <code>INPUT</code>, <code>STYLESHEET</code> et <code>RESULT</code> était fixe. Elle est maintenant dépendante de la largeur de la fenêtre du navigateur.</p>
<img src="/2015/07/23/Sprint-Review-15W26-consolidation/jbj-plgrnd-textareas.png">
<p>Voir sur GitHub: <a href="https://github.com/castorjs/node-jbj/pull/12" target="_blank" rel="external">PR 12</a>.</p>
<h3 id="Supprimer_les_préfixes_des_exemples_(Basic:_find)">Supprimer les préfixes des exemples (<code>Basic: find</code>)</h3><p>Les exemples étaient initialement classés par sujet, et partageaient leur <code>input</code>.<br>Nous avons supprimé le premier niveau (sujet).<br>Nous en avons aussi profité pour supprimer un effet de bord gênant: quand une feuille de style modifiait l’<code>input</code>, elle le modifiait aussi pour les autres exemples du même sujet. Chaque exemple est maintenant indépendant.</p>
<p>Voir sur GitHub: <a href="https://github.com/castorjs/node-jbj/commit/e3915c3f9cb280ca4366f13d27eeb64ba881b1d3" target="_blank" rel="external">e3915c3</a>.</p>
<h3 id="Ajouter_un_champ_URL">Ajouter un champ URL</h3><p>Nous avons ajouté un champ <code>URL</code> sous l’<code>input</code> pour pouvoir remplir cet éditeur avec la réponse d’une requête renvoyant du JSON.</p>
<img src="/2015/07/23/Sprint-Review-15W26-consolidation/jbj-plgrnd-url-input.png">
<img src="/2015/07/23/Sprint-Review-15W26-consolidation/jbj-plgrnd-url-json.png">
<p>Voir sur GitHub: <a href="https://github.com/castorjs/node-jbj/commit/8174aae0d8fd3a7c8c5c57f0548ff40747363406" target="_blank" rel="external">8174aae</a>.</p>
<h3 id="ezVIS:_ajouter_des_boutons_vers_le_JBJ_Playground">ezVIS: ajouter des boutons vers le JBJ Playground</h3><p>Quand on ajoute dans la configuration d’ezVIS une propriété <code>addlinkstojbj</code> à <code>true</code>, on ajoute un lien vers le JBJ Playground :</p>
<ul>
<li>dans la page d’affichage d’une notice (<code>/display/</code>) <a href="https://github.com/madec-project/ezvis/commit/7f514271584bc032f94eab1f6b1a18a0da5cd900" target="_blank" rel="external">7f51427</a> <img src="/2015/07/23/Sprint-Review-15W26-consolidation/ezvis-display-jbj.png"></li>
<li>dans la liste des documents (<code>/documents.html</code>) <a href="https://github.com/madec-project/ezvis/commit/25f64c3549542dc42a343bd47629c6d0192eea9a" target="_blank" rel="external">25f64c3</a> <img src="/2015/07/23/Sprint-Review-15W26-consolidation/ezvis-documents-jbj.png"></li>
<li>dans les graphiques (<code>/chart.html</code>) <a href="https://github.com/madec-project/ezvis/commit/c0dad222e63b7473dad342778ffa9437adf12a32" target="_blank" rel="external">c0dad22</a> <img src="/2015/07/23/Sprint-Review-15W26-consolidation/ezvis-chart-jbj.png">
</li>
</ul>
<p>Voir dans la documentation, <a href="http://ezvis.readthedocs.org/en/latest/JBJ/" target="_blank" rel="external">l’annexe sur JBJ</a>.</p>
<p>Voir sur GitHub: <a href="https://github.com/madec-project/ezvis/issues/62" target="_blank" rel="external">#62</a>.</p>
<h1 id="castor-clean:_message_explicite"><code>castor-clean</code>: message explicite</h1><p>Auparavant, <a href="https://github.com/castorjs/castor-clean/" target="_blank" rel="external"><code>castor-clean</code></a> était une commande muette: qu’elle ait accompli sa mission ou non, l’utilisateur n’en savait rien.</p>
<p>Maintenant, quand tout s’est bien passé, elle écrit <code>OK</code>.<br>Sinon, le message est:</p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Warning: no collections dropped. Either you mistyped the name, or it was already cleaned up.</span><br></pre></td></tr></table></figure>
<p>Voir sur GitHub: <a href="https://github.com/castorjs/castor-clean/commit/8229754b0b6481d5abd9ac62c690bbfe349f89e9" target="_blank" rel="external">8229754</a>.</p>
<p>Pour en profiter: <code>npm install -g castor-clean</code>. (version 1.2.0).</p>
<h1 id="ezref:_usage"><code>ezref</code>: usage</h1><p>Comme pour <a href="#oubli_du_paramètre">ezVIS</a>, quand on oublie le paramètre obligatoire d’<code>ezref</code>, on a maintenant un message indiquant l’usage normal de la commande:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ ezref</span><br><span class="line">Usage:</span><br><span class="line"> ezref public</span><br><span class="line"> public being a directory path, and public.json the settings file.</span><br><span class="line"> See https://github.com/madec-project/ezref <span class="keyword">for</span> more details.</span><br></pre></td></tr></table></figure>
<h1 id="ezvis:_mise_à_jour_de_dépendances"><code>ezvis</code>: mise à jour de dépendances</h1><p>Il existe un site qui recense la fraîcheur des dépendences de projets Node, et qui signale des trous de sécurité potentiels.</p>
<p><a href="https://david-dm.org/madec-project/ezvis" target="_blank" rel="external"><img src="https://david-dm.org/madec-project/ezvis.svg" alt="Badge des dépendances d'ezvis"></a></p>
<p>J’ai donc procédé à quelques mises à jour (<code>marked</code>, <code>sha1</code>, et <code>qs</code>).</p>
<p>Sans doute à surveiller de près.</p>
<p>Comme d’habitude, pour profiter des ajouts de ce sprint dans ezVIS :</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install --production -g ezvis</span><br></pre></td></tr></table></figure>
<p>À ce jour, c’est la version 6.8.0.</p>
]]></content>
<summary type="html">
<![CDATA[<p>Ce <em>sprint</em> n°13 a été consacré à la consolidation de l’outil ezVIS.<br>Nous avons principalement modifié la documentation et corr]]>
</summary>
<category term="bugs" scheme="http://madec-project.github.io/tags/bugs/"/>
<category term="castor-clean" scheme="http://madec-project.github.io/tags/castor-clean/"/>
<category term="corpusFields" scheme="http://madec-project.github.io/tags/corpusFields/"/>
<category term="documentFields" scheme="http://madec-project.github.io/tags/documentFields/"/>
<category term="documentation" scheme="http://madec-project.github.io/tags/documentation/"/>
<category term="ezref" scheme="http://madec-project.github.io/tags/ezref/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="jbj" scheme="http://madec-project.github.io/tags/jbj/"/>
<category term="mise à jour" scheme="http://madec-project.github.io/tags/mise-a-jour/"/>
<category term="readthedocs" scheme="http://madec-project.github.io/tags/readthedocs/"/>
<category term="usage" scheme="http://madec-project.github.io/tags/usage/"/>
</entry>
<entry>
<title><![CDATA[Sprint Review #15W23: calculs complexes]]></title>
<link href="http://madec-project.github.io/2015/06/23/Sprint-Review-15W23-calculs-complexes/"/>
<id>http://madec-project.github.io/2015/06/23/Sprint-Review-15W23-calculs-complexes/</id>
<published>2015-06-23T12:00:00.000Z</published>
<updated>2015-06-23T08:54:12.000Z</updated>
<content type="html"><![CDATA[<p>Nous voici arrivés à la <em>sprint review</em> n°12, qui concerne les <em>calculs complexes</em>.<br>Comme le dit Anne-Marie, la division est une opération complexe par rapport au simple comptage. Mais la complexité dont nous parlons réside plutôt dans l’appel des données intégrées aux calculs: ils sont externes, dans des tableaux.</p>
<h1 id="Tâches">Tâches</h1><ul>
<li>10 tâches prévues</li>
<li>10 tâches effectuées (dont 9 avaient été prévues)</li>
<li>24 tâches au total</li>
<li>plus de 25 points de complexité prévus</li>
<li>24,5 points de complexité effectués</li>
</ul>
<p>Ce ne sont là que les points pour le développement, sachant que les utilisateurs ont fait plus (notamment sur les tests).</p>
<h1 id="Calcul_d’un_taux_de_citation_normalisé">Calcul d’un taux de citation normalisé</h1><p>Nous avons identifié 4 étapes pour le calcul d’un taux de citation normalisé:</p>
<ol>
<li>calculer le nombre de publications par année</li>
<li>calculer le nombre de citations par année</li>
<li>calculer le taux de citations par année</li>
<li>normaliser ce taux par rapport à un taux de citation global</li>
</ol>
<h2 id="1-_Calculer_le_nombre_de_publications_par_année">1. Calculer le nombre de publications par année</h2><p>Ce calcul se fait sur le corpus complet, donc on peut stocker le résultat dans un <code>corpusFields</code> (appelons-le <code>publiPerYear</code>).<br>Nous avons un opérateur classique pour compter le nombre de documents par valeurs distinctes d’un champ: <a href="https://github.com/madec-project/ezvis/blob/v6.7.2/OPERATORS.md#distinct" target="_blank" rel="external"><code>distinct</code></a>.</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">corpusFields</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$publiPerYear</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$?</span>": <span class="value"><span class="string">"local:///compute.json?operator=distinct&field=Year"</span></span>,</span><br><span class="line"> "<span class="attribute">parseJSON</span>": <span class="value"><span class="literal">true</span></span>,</span><br><span class="line"> "<span class="attribute">get</span>": <span class="value"><span class="string">"data"</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Nous obtenons donc:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2007"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">5</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2008"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">3</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2009"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">4</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2010"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">1</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2011"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">1</span></span><br><span class="line"> </span>}</span><br><span class="line">]</span><br></pre></td></tr></table></figure>
<h2 id="2-_Calculer_le_nombre_de_citations_par_année">2. Calculer le nombre de citations par année</h2><p>De la même manière, ce calcul peut se faire sur tout le corpus. On le stocke dans le <code>corpusFields</code> nommé <code>citationsPerYear</code>:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">corpusFields</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$publiPerYear</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$?</span>": <span class="value"><span class="string">"local:///compute.json?operator=distinct&field=Year"</span></span>,</span><br><span class="line"> "<span class="attribute">parseJSON</span>": <span class="value"><span class="literal">true</span></span>,</span><br><span class="line"> "<span class="attribute">get</span>": <span class="value"><span class="string">"data"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">$citationsPerYear</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$?</span>": <span class="value"><span class="string">"local:///compute.json?operator=sum_field1_by_field2&field=NbCitations&field=Year"</span></span>,</span><br><span class="line"> "<span class="attribute">parseJSON</span>": <span class="value"><span class="literal">true</span></span>,</span><br><span class="line"> "<span class="attribute">get</span>": <span class="value"><span class="string">"data"</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Cette fois, nous avons utilisé l’opérateur <a href="https://github.com/madec-project/ezvis/blob/v6.7.2/OPERATORS.md#sum_field1_by_field2" target="_blank" rel="external"><code>sum_field1_by_field2</code></a> qui ramène bien ce qui nous intéresse:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2007"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">868</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2008"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">39</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2009"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">46</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2010"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">5</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2011"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">106</span></span><br><span class="line"> </span>}</span><br><span class="line">]</span><br></pre></td></tr></table></figure>
<h2 id="3-_calculer_le_taux_de_citations_par_année">3. calculer le taux de citations par année</h2><p>Calculer le taux de citations par année revient à diviser la valeur de <code>citationsPerYear</code> par celle qui correspond dans <code>publiPerYear</code> (donc, le nombre de citations pour une année par le nombre de publications pour cette année, ce qui donne bien le nombre moyen de citations par publication, ou taux de citation):</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"$citationRatioPerYear"</span>: {</span><br><span class="line"> <span class="string">"zip"</span>: [<span class="string">"publiPerYear"</span>,<span class="string">"citationsPerYear"</span>],</span><br><span class="line"> <span class="string">"foreach"</span>: {</span><br><span class="line"> <span class="string">"$value"</span>: {</span><br><span class="line"> <span class="string">"compute"</span>: <span class="string">"citationsPerYear / publiPerYear"</span></span><br><span class="line"> },</span><br><span class="line"> <span class="string">"mask"</span>: <span class="string">"_id,value"</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Ici, nous obtenons un résultat sous forme d’un tableau d’éléments structurés <code>{ _id, value }</code> qui sont nécessaires pour pouvoir dessiner un graphe.</p>
<h2 id="4-_normaliser_ce_taux_par_rapport_à_un_taux_de_citation_global">4. normaliser ce taux par rapport à un taux de citation global</h2><p>Une fois qu’on a le taux de citations par années, on peut le diviser par le taux de citations global par années (obtenu par un autre moyen).</p>
<p>Pour cela, on va stocker dans un serveur web statique (par exemple un <a href="/2015/05/04/Sprint-Review-15W14-ressources-externes/#ezref"><code>ezref</code></a>) un fichier JSON contenant cette table:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[{"<span class="attribute">_id</span>":<span class="value"><span class="number">2004</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">23.56</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2005</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">21.87</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2006</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">19.83</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2007</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">17.9</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2008</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">15.56</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2009</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">13.38</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2010</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">10.9</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2011</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">8.11</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2012</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">5.37</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2013</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">2.61</span></span>},{"<span class="attribute">_id</span>":<span class="value"><span class="number">2014</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">0.53</span></span>}]</span><br></pre></td></tr></table></figure>
<p>Puis, nous ajoutons un <code>corpusFields</code> nommé <code>globalCitationRatios</code>:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">corpusFields</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$globalCitationRatios</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$?</span>": <span class="value"><span class="string">"http://localhost:35000/ESI_AllFields_20150407.json"</span></span>,</span><br><span class="line"> "<span class="attribute">parseJSON</span>": <span class="value"><span class="literal">true</span></span>,</span><br><span class="line"> "<span class="attribute">array2object</span>": <span class="value"><span class="literal">true</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Pour obtenir un objet JSON:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">2004</span>": <span class="value"><span class="number">23.56</span></span>,</span><br><span class="line"> "<span class="attribute">2005</span>": <span class="value"><span class="number">21.87</span></span>,</span><br><span class="line"> "<span class="attribute">2006</span>": <span class="value"><span class="number">19.83</span></span>,</span><br><span class="line"> "<span class="attribute">2007</span>": <span class="value"><span class="number">17.9</span></span>,</span><br><span class="line"> "<span class="attribute">2008</span>": <span class="value"><span class="number">15.56</span></span>,</span><br><span class="line"> "<span class="attribute">2009</span>": <span class="value"><span class="number">13.38</span></span>,</span><br><span class="line"> "<span class="attribute">2010</span>": <span class="value"><span class="number">10.9</span></span>,</span><br><span class="line"> "<span class="attribute">2011</span>": <span class="value"><span class="number">8.11</span></span>,</span><br><span class="line"> "<span class="attribute">2012</span>": <span class="value"><span class="number">5.37</span></span>,</span><br><span class="line"> "<span class="attribute">2013</span>": <span class="value"><span class="number">2.61</span></span>,</span><br><span class="line"> "<span class="attribute">2014</span>": <span class="value"><span class="number">0.53</span></span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<h3 id="JBJ:_getPropertyVar_et_array2object">JBJ: getPropertyVar et array2object</h3><p>Cet objet JSON donne directement accès à un taux de citation global, en utilisant, par exemple <code>"getproperty": "2008"</code>, on récupère la valeur associée: <code>15.56</code>.</p>
<p>C’est pourquoi nous avons créé l’action <a href="https://github.com/castorjs/node-jbj/tree/v3.9.0#array2object" target="_blank" rel="external"><code>array2object</code></a>, qui transforme un tableau d’objets <code>{_id,value}</code> en objet associant les <code>_id</code> et les <code>value</code>s.</p>
<p>Malheureusement, l’action JBJ <code>getproperty</code> ne prend qu’un paramètre littéral, et s’applique sur l’environnement courant. Or, nous voulons parcourir le tableau des taux de citations pour pouvoir normaliser chaque valeur par rapport à la valeur correspondante dans le tableau global.</p>
<p>Nous avons donc créé le pendant de <code>getproperty</code> prenant des variables en paramètres: <a href="https://github.com/castorjs/node-jbj/tree/v3.9.0#getpropertyvar" target="_blank" rel="external"><code>getpropertyvar</code></a>, qui prend en paramètre un tableau de deux noms de variables: la variable contenant le tableau, et la variable contenant l’indice à aller chercher.</p>
<p>Ça a permis d’appliquer le <code>flyingFields</code> suivant au résultat de l’opérateur retournant le nombre de publication par année:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"$normalizeCitationRatioPerYear"</span>: {</span><br><span class="line"> <span class="string">"$cpy"</span>: {</span><br><span class="line"> <span class="string">"get"</span>: <span class="string">"citationsPerYear"</span>,</span><br><span class="line"> <span class="string">"array2object"</span>: <span class="literal">true</span></span><br><span class="line"> },</span><br><span class="line"> <span class="string">"$citations"</span>: {</span><br><span class="line"> <span class="string">"getpropertyvar"</span>: [<span class="string">"cpy"</span>,<span class="string">"_id"</span>]</span><br><span class="line"> },</span><br><span class="line"> <span class="string">"$globalCitation"</span>:{</span><br><span class="line"> <span class="string">"getpropertyvar"</span>: [<span class="string">"globalCitationRatios"</span>,<span class="string">"_id"</span>]</span><br><span class="line"> },</span><br><span class="line"> <span class="string">"$value"</span>: {</span><br><span class="line"> <span class="string">"compute"</span>: <span class="string">"citations / value / globalCitation"</span></span><br><span class="line"> },</span><br><span class="line"> <span class="string">"mask"</span>: <span class="string">"_id,value"</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p><em>Rappel :</em> <code>flyingFields</code> a accès à la fois aux <code>corpusFields</code> et aux variables <code>_id</code> et <code>value</code> retournées par l’opérateur (<code>distinct</code> dans ce cas), <code>citationsPerYear</code> et <code>globalCitationRatios</code> étant des <code>corpusFields</code>, ils sont accessibles aussi.</p>
<p>Ce <code>flyingFields</code> appliqué à l’opérateur <code>distinct(Year)</code> via l’URL <a href="http://localhost:3000/compute.json?o=distinct&f=Year&ff=normalizeCitationRatioPerYear" target="_blank" rel="external">http://localhost:3000/compute.json?o=distinct&f=Year&ff=normalizeCitationRatioPerYear</a> renvoie un <code>data</code> dont le contenu est prêt à être affiché dans un <code>chart</code> (soit un <code>histogram</code>, soit un <code>horizontalbars</code>, soit un <code>pie</code>):</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2007"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">9.69832402234637</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2008"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">0.8354755784061696</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2009"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">0.85949177877429</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2010"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">0.4587155963302752</span></span><br><span class="line"> </span>},</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">_id</span>": <span class="value"><span class="string">"2011"</span></span>,</span><br><span class="line"> "<span class="attribute">value</span>": <span class="value"><span class="number">13.07028360049322</span></span><br><span class="line"> </span>}</span><br><span class="line">]</span><br></pre></td></tr></table></figure>
<h1 id="Graphes_superposés">Graphes superposés</h1><p>Un taux de citation normalisé par année est intéressant à comparer à un nombre de publications par année, sur un corpus donné. Dans les versions 6.6 d’ezVIS, le seul moyen disponible était de créer un graphe avec les publications par année, puis un autre graphe avec les taux de citations pour qu’ils soient un au-dessus de l’autre dans le tableau de bord. Pas très pratique.</p>
<img src="/2015/06/23/Sprint-Review-15W23-calculs-complexes/ezvis-comparaison-graphes.png">
<p>Un autre moyen est de superposer les deux graphiques (une manière classique est d’avoir un histogramme et une ligne, comme dans <a href="http://www.amcharts.com/demos/column-and-line-mix/" target="_blank" rel="external">cette démonstration de la bibliothèque amCharts</a>).</p>
<p>Nous avons donc introduit le moyen de le faire avec ezVIS 6.7.2, en ajoutant la propriété <a href="https://github.com/madec-project/ezvis/tree/v6.7.2/#overlay" target="_blank" rel="external"><code>overlay</code></a> à un graphique de type <code>histogram</code>:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">fields</span>": <span class="value">[<span class="string">"content.json.Py"</span>]</span>,</span><br><span class="line"> "<span class="attribute">type</span>": <span class="value"><span class="string">"histogram"</span></span>,</span><br><span class="line"> "<span class="attribute">title</span>": <span class="value"><span class="string">"Années & taux de citations normalisés"</span></span>,</span><br><span class="line"> "<span class="attribute">help</span>": <span class="value"><span class="string">"Nombre total de publications et de taux de citations normalisés par année"</span></span>,</span><br><span class="line"> "<span class="attribute">overlay</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">label</span>": <span class="value"><span class="string">"Taux de citation normalisé par année:"</span></span>,</span><br><span class="line"> "<span class="attribute">flying</span>": <span class="value">[ <span class="string">"normalizeCitationRatioPerYear"</span> ]</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Un <code>overlay</code> doit contenir un label (qui s’affiche sur les points de la ligne), et un <code>flying</code> qui s’appliquera sur les <code>data</code> fournis par l’opérateur (par défaut <code>distinct</code>) et les <code>fields</code>.</p>
<p>La convention est un qu’un <code>overlay</code> se nourrit d’éléments semblables à ceux d’un <code>chart</code> normal (composé d’un <code>_id</code> et d’une <code>value</code>) auquels on ajoute une deuxième valeur <code>value2</code>.<br>Il faut donc modifier le <code>flyingFields</code> nommé <code>normalizeCitationRatioPerYear</code> exposé plus haut:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">flyingFields</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$normalizeCitationRatioPerYear</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$cpy</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">get</span>": <span class="value"><span class="string">"citationsPerYear"</span></span>,</span><br><span class="line"> "<span class="attribute">array2object</span>": <span class="value"><span class="literal">true</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">$citations</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">getpropertyvar</span>": <span class="value">[<span class="string">"cpy"</span>,<span class="string">"_id"</span>]</span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">$globalCitation</span>":<span class="value">{</span><br><span class="line"> "<span class="attribute">getpropertyvar</span>": <span class="value">[<span class="string">"globalCitationRatios"</span>,<span class="string">"_id"</span>]</span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">$value2</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">compute</span>": <span class="value"><span class="string">"citations / value / globalCitation"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">mask</span>": <span class="value"><span class="string">"_id,value,value2"</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<img src="/2015/06/23/Sprint-Review-15W23-calculs-complexes/ezvis-overlay-6.7.2.png">
<h3 id="firstOnly">firstOnly</h3><p>Quand on veut appliquer le même genre de <code>flyingFields</code> à des valeurs déjà présentes dans <code>corpusFields</code>, on est quand même obligé de passer par une route de type <code>compute</code> qui applique un opérateur retournant systématiquement un tableau de résultats (même quand il n’y en a qu’un).<br>Or le principe des <code>flyingFields</code> est de s’appliquer à tous les éléments de ce tableau <code>data</code>. On obtient donc un tableau de tableaux, qu’ezVIS n’est pas capable d’interpréter. Nous avons donc ajouté la propriété <code>firstOnly</code> qui, au lieu de renvoyer un tableau d’éléments, ne renvoie que le premier élément du tableau. Voir le ticket <a href="https://github.com/castorjs/castor-core/issues/15" target="_blank" rel="external"><em>Add a “firstOnly” parameter to the routes returning data</em></a>.</p>
<p>Ainsi, quand on veut afficher un <code>histogram</code> avec un <code>overlay</code> contenant les taux de citations par années (présents dans le <code>corpusFields</code> appelé <code>citationsPerYear</code>), il faut utiliser une configuration comme celle-là (contenant un <code>firstOnly</code>):</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">dashboard</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">charts</span>": <span class="value">[</span><br><span class="line"> {</span><br><span class="line"> "<span class="attribute">fields</span>": <span class="value">[<span class="string">"content.json.Py"</span>]</span>,</span><br><span class="line"> "<span class="attribute">type</span>": <span class="value"><span class="string">"histogram"</span></span>,</span><br><span class="line"> "<span class="attribute">title</span>": <span class="value"><span class="string">"Années & taux de citation"</span></span>,</span><br><span class="line"> "<span class="attribute">help</span>": <span class="value"><span class="string">"Nombre total de publications et de taux de citations par année"</span></span>,</span><br><span class="line"> "<span class="attribute">overlay</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">label</span>": <span class="value"><span class="string">"Taux de citation par année:"</span></span>,</span><br><span class="line"> "<span class="attribute">firstOnly</span>": <span class="value"><span class="literal">true</span></span>,</span><br><span class="line"> "<span class="attribute">flying</span>": <span class="value">[ <span class="string">"publiCitationRatioPerYear"</span> ]</span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"> ]</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>sans oublier de modifier le <code>flyingFields</code> nommé <code>publiCitationRatioPerYear</code> pour qu’il renvoie deux valeurs:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">flyingFields</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$publiCitationRatioPerYear</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">zip</span>": <span class="value">[<span class="string">"publiPerYear"</span>,<span class="string">"citationsPerYear"</span>]</span>,</span><br><span class="line"> "<span class="attribute">foreach</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$value</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">get</span>": <span class="value"><span class="string">"publiPerYear"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">$value2</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">compute</span>": <span class="value"><span class="string">"citationsPerYear / publiPerYear"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">mask</span>": <span class="value"><span class="string">"_id,value,value2"</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<img src="/2015/06/23/Sprint-Review-15W23-calculs-complexes/ezvis-overlay-6.7.1.png">
<h1 id="Tests_de_chargement_(-tsv_WoS)">Tests de chargement (.tsv WoS)</h1><p>Nous utilisons des fichiers extraits du WoS (Web of Science) au format TSV (Tabulation Separated Values), et certaines notices passaient mal.</p>
<p>Nous avons trouvé des champs contenant des guillemets (<em>double quotes</em> anglaises), non échappés (mais c’est normal, il n’y avait pas d’ambiguité), et c’est visiblement ce qui posait problème. Une correction a été apportée à la bibliothèque qui analyse les CSV: csv-string. Voir <a href="https://github.com/touv/node-csv-string/pull/19" target="_blank" rel="external">ticket 19 de csv-string</a>.</p>
<p>Mais après tests, les fichiers qui posaient problème ne passent toujours pas correctement: sur un corpus de 999 notices, seules les notices contenant des guillemets ne sont pas chargées (en enlevant les guillemets, tout passe).</p>
<h1 id="Tests_de_dépôt_de_plusieurs_fichiers_(XML_ou_CSV)">Tests de dépôt de plusieurs fichiers (XML ou CSV)</h1><p>Nous avons remarqué un comportement erronné d’ezVIS: quand on met deux fichiers XML dans le répertoire des données, on obtient des erreurs SAX, alors que séparément, les deux fichiers sont bien chargés.</p>
<p>Après test, ce comportement ne se produit pas avec des fichiers CSV.</p>
<h1 id="Test_de_la_machine_de_production_avec_plus_de_dix_rapports">Test de la machine de production avec plus de dix rapports</h1><p>13 rapports ont été créés sur la machine de production, sans aucun problème (rappel: 12 rapports étaient déjà de trop sur la machine d’intégration avant qu’ezMaster soit corrigé).</p>
<h1 id="Test_de_la_prise_en_compte_des_modifications_de_configuration_dans_ezMaster">Test de la prise en compte des modifications de configuration dans ezMaster</h1><p>Les modifications des <code>documentFields</code> dans la configuration d’une instance ne sont pas prises en compte, même après rechargement du corpus.</p>
<h1 id="Test_de_la_prise_en_compte_des_modifications_de_corpus_dans_ezMaster">Test de la prise en compte des modifications de corpus dans ezMaster</h1><p>Les modifications du corpus d’une instance (suppression de notices) ne sont pas prises en compte.<br>Par contre l’ajout d’un nouveau corpus dans la même instance est bien traité et les modifications des <code>documentFields</code> dans la configuration d’une instance sont également prises en compte pour le nouveau corpus.</p>
<h1 id="Documentation_du_protocole_HTTP_dans_les_documentFields">Documentation du protocole HTTP dans les documentFields</h1><p>L’utilisation du protocole HTTP dans les <code>documentFields</code> n’avait pas été documentée, c’est chose faite: <a href="https://github.com/madec-project/ezvis/commit/6a7147cda9bdc27dbb7e942e477ebdebd40e9495" target="_blank" rel="external">6a7147</a>.</p>
<h1 id="Modification_des_entêtes_des_exports">Modification des entêtes des exports</h1><p>Les exports de documents prennent maintenant comme noms de colonnes les labels des champs, et non plus leurs identifiants. Voir <a href="https://github.com/madec-project/ezvis/issues/48" target="_blank" rel="external">ticket 48</a>.</p>
<h1 id="Mise_à_jour_de_getting-started-with-visir">Mise à jour de getting-started-with-visir</h1><p>Le dépôt <code>getting-started-with-visir</code> a été renommé en <a href="https://github.com/madec-project/getting-started-with-ezvis" target="_blank" rel="external"><code>getting-started-with-ezvis</code></a>, la documentation adaptée à la version 6+ d’ezVIS, ainsi que l’exemple fourni.</p>
<h1 id="Explication_d’ezVIS_pour_ISTEX">Explication d’ezVIS pour ISTEX</h1><p>Kibana ne fournissant pas assez de graphiques, ISTEX s’est intéressé à ezVIS.<br>C’est l’occasion pour nous d’expérimenter le loader de corpus JSON <a href="https://github.com/castorjs/castor-load-jsoncorpus" target="_blank" rel="external">castor-load-jsoncorpus</a>.</p>
<h1 id="Mise_à_jour_/_installation_d’ezVIS">Mise à jour / installation d’ezVIS</h1><p>Pour profiter de la dernière version d’ezVIS:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install --production -g ezvis</span><br></pre></td></tr></table></figure>
<p>À ce jour, c’est la version 6.7.2.</p>
]]></content>
<summary type="html">
<![CDATA[<p>Nous voici arrivés à la <em>sprint review</em> n°12, qui concerne les <em>calculs complexes</em>.<br>Comme le dit Anne-Marie, la division]]>
</summary>
<category term="csv" scheme="http://madec-project.github.io/tags/csv/"/>
<category term="documentFields" scheme="http://madec-project.github.io/tags/documentFields/"/>
<category term="export" scheme="http://madec-project.github.io/tags/export/"/>
<category term="ezref" scheme="http://madec-project.github.io/tags/ezref/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="flyingFields" scheme="http://madec-project.github.io/tags/flyingFields/"/>
<category term="http" scheme="http://madec-project.github.io/tags/http/"/>
<category term="jbj" scheme="http://madec-project.github.io/tags/jbj/"/>
<category term="overlay" scheme="http://madec-project.github.io/tags/overlay/"/>
<category term="tsv" scheme="http://madec-project.github.io/tags/tsv/"/>
<category term="xml" scheme="http://madec-project.github.io/tags/xml/"/>
</entry>
<entry>
<title><![CDATA[Sprint Review 15W19: Exports]]></title>
<link href="http://madec-project.github.io/2015/06/01/Sprint-Review-15W19-Exports/"/>
<id>http://madec-project.github.io/2015/06/01/Sprint-Review-15W19-Exports/</id>
<published>2015-06-01T13:00:00.000Z</published>
<updated>2015-06-01T09:46:00.000Z</updated>
<content type="html"><![CDATA[<p>Voici le support de la Sprint Review n°11, concernant les <em>exports</em>.</p>
<h1 id="Tâches">Tâches</h1><ul>
<li>19 tâches prévues</li>
<li>16 tâches effectuées (dont 11 avaient été prévues)</li>
<li>24 tâches au total</li>
<li>plus de 38 points de complexité prévus</li>
<li>38 points de complexité effectués (un peu plus que la moyenne)</li>
</ul>
<h1 id="VSST_2015">VSST 2015</h1><p>ezVIS a été présenté à VSST 2015 par Anne-Marie BADOLATO, le <a href="http://atlas.irit.fr/programme.html" target="_blank" rel="external">13 mai 2015</a>.<br>À l’occasion, une instance protégée par login/mot de passe a été présentée, qui concernait une étude réelle pour l’IRSTV. Cette instance tournait sur la machine virtuelle d’intégration, car nous n’avons pas été en mesure de mettre en place la machine de production <em>et de la tester</em> dans les temps.</p>
<h2 id="forever">forever</h2><p>En effet, une des différences entre la machine de production et la machine d’intégration est que la machine de production utilise <a href="https://www.npmjs.com/package/forever" target="_blank" rel="external">forever</a> pour s’assurer qu’<code>ezmaster</code> est relancé automatiquement si jamais il plante.</p>
<p>Ce qui a retardé l’utilisation de la machine de production est qu’<code>ezmaster</code> s’est révélé incapable, quand il était lancé par <code>forever</code>, de créer des fichiers temporaires dans le répertoire courant. Ceci a donné lieu à une correction d’<code>ezmaster</code>, mais pas assez tôt pour que ce soit la machine de production qu’on utilise.</p>
<h1 id="ezMaster">ezMaster</h1><p>En plus de la correction apportée pour fonctionner avec <a href="#forever">forever</a>, ezMaster a connu plusieurs changements:</p>
<ol>
<li>une optimisation de la fonction <em>reverse-proxy</em>, ce qui a éliminé les ralentissements observés après quelques utilisations des instances qu’<code>ezmaster</code> surveillait <a href="https://github.com/madec-project/ezmaster/commit/11fba019f60f782a80d6cbdd31649c7667926a66" target="_blank" rel="external">11fba01</a>,</li>
<li>l’affichage de l’app utilisée par une instance, et de sa version <a href="https://github.com/madec-project/ezvis/issues/30" target="_blank" rel="external">#30</a><img src="/2015/06/01/Sprint-Review-15W19-Exports/ezmaster_app_version.png"></li>
<li>ajout d’une prévisualisation de l’URL que va donner le nom technique d’une instance qu’on est en train de créer <a href="https://github.com/madec-project/ezvis/issues/32" target="_blank" rel="external">#32</a></li>
<li>le numéro de version d’une instance a été rendu optionnel (dans le but de simplifier les URL résultantes) <a href="https://github.com/madec-project/ezvis/issues/18" target="_blank" rel="external">#18</a><img src="/2015/06/01/Sprint-Review-15W19-Exports/ezmaster_optional_version.gif">
</li>
</ol>
<h1 id="ezVIS">ezVIS</h1><p>La plupart des tâches de ce sprint étaient liées à <code>ezvis</code>.</p>
<h2 id="Bug">Bug</h2><p>Nous avons corrigé un bug qui se produisait dans un réseau avec des facettes: quand on cliquait sur une facette, les restrictions apportées pour la création du réseau (en particulier <code>selector</code>, mais aussi <code>maxItems</code> et <code>threshold</code>) n’étaient pas appliquées.<br>Cela posait un problème quand le nombre de liens du réseau non restreint était trop important pour que le réseau puisse s’afficher dans le navigateur, gelant ainsi le navigateur.</p>
<p>Toutefois, cette correction ne touche que <code>selector</code> car les autres restrictions, appliquées en plus de celle de la facette, mène souvent à des graphes vides, ce qui est difficilement compréhensible.</p>
<p>Voir <a href="https://github.com/madec-project/ezvis/issues/39" target="_blank" rel="external">issue #39</a>.</p>
<h2 id="Améliorations_mineures">Améliorations mineures</h2><ul>
<li><a href="https://github.com/madec-project/ezvis/issues/38" target="_blank" rel="external">#38</a>: ajout de la possibilité de rendre les labels sur les graphiques plus courts (sur le même principe que ce qui avait déjà été fait pour les <a href="https://github.com/madec-project/ezvis#horizontalbars" target="_blank" rel="external"><code>horizontalbars</code></a>), pour les <code>histogram</code>s, et pour les <code>pie</code>s. Pour ce dernier, ce ne sont pas les labels eux-mêmes qui sont raccourcis, mais leur équivalent dans la légende du camembert,<img src="/2015/06/01/Sprint-Review-15W19-Exports/ezvis_pie_shortlabels.png"></li>
<li><a href="https://github.com/madec-project/ezvis/issues/31" target="_blank" rel="external">#31</a>: la référence à amCharts qui apparaissait comme un petit lien <code>js Charts</code> en haut à gauche des graphiques a été déplacé en bas à droite des graphiques, emplacement jugé moins gênant (il est moins souvent placé sur une barre sur laquelle on clique). Rappel: cette référence est nécessaire, car l’enlever requerrait de payer la société qui produit cette bibliothèque,</li>
<li><a href="https://github.com/madec-project/ezvis/issues/28" target="_blank" rel="external">#28</a>: les labels des camemberts (qui apparaissent autour des parts du graphique) sont maintenant désactivables (pour ne plus voir que les nombres). Il faut utiliser <code>removeLabels: true</code>,</li>
<li><a href="https://github.com/madec-project/ezvis/issues/37" target="_blank" rel="external">#37</a>: nous avons ajouté un exemple de configuration <code>ezvis</code> pour des fichiers <code>.tsv</code> <a href="https://github.com/madec-project/showcase/blob/master/basis_loader_tsv/repository.json" target="_blank" rel="external">dans le showcase</a>.</li>
</ul>
<h2 id="Chargement_de_-TSV">Chargement de .TSV</h2><p>Après l’écriture de la mini-configuration de déclaration du loader pour charger des <code>.tsv</code> minimaux, nous avons voulu créer un exemple réel de chargement de fichiers tirés du WoS (Web of Science).<br>Il s’est trouvé que les fichiers tels quels ne se chargeaient pas dans <code>ezvis</code>, même après avoir utilisé des options peu courantes de <code>castor-load-csv</code>.</p>
<p>Après investigation, le nœud du problème se trouvait dans la bibliothèque <code>csv-string</code> qui analyse le TSV dans <code>castor-load-csv</code>. L’auteur de la bibliothèque l’a améliorée pour qu’elle prenne aussi en compte ces fichiers TSV (il n’y a pas vraiment de norme concernant la manière d’encoder les doubles quotes (guillemets anglais) dans ces fichiers). Voir <a href="https://github.com/touv/node-csv-string/pull/19" target="_blank" rel="external">les tests proposés</a> pour plus de détails.</p>
<h2 id="Exports">Exports</h2><p>Le thème de ce sprint était l’<em>export</em> en général. Il se spécialise en:</p>
<ul>
<li>export des images des graphiques</li>
<li>export des documents associés aux graphiques</li>
<li>export des données des graphiques (ce n’était pas demandé)</li>
</ul>
<h3 id="graphiques">graphiques</h3><h4 id="amCharts">amCharts</h4><p>Les graphiques <code>horizontalbars</code>, <code>histogram</code>, <code>pie</code> et <code>map</code> utilisent la même bibliothèque qui vient d’être <a href="http://www.amcharts.com/blog/version-3-14-released/" target="_blank" rel="external">mise à jour</a>. Surprise: le thème de cette mise à jour est l’export. Cette version améliore une fonctionnalité qui existait déjà, en l’étendant à d’autres formats et aussi aux données qui ont permis la création du graphique.</p>
<p>Ces graphiques simples sont donc désormais exportables à partir d’un menu présent en haut à droite. Ils permettent:</p>
<ul>
<li>l’annotation (dessin sur l’image, à la souris),<img src="/2015/06/01/Sprint-Review-15W19-Exports/ezvis_annotation.png"></li>
<li>la sauvegarde de l’image (avec son éventuelle annotation), aux formats JPG, PNG, SVG et même PDF,</li>
<li>la sauvegarde des données ayant permis la construction du graphique (sauf pour les cartes, que nous n’avons pas réussi à activer), aux formats CSV, XLSX et JSON.<img src="/2015/06/01/Sprint-Review-15W19-Exports/ezvis_chart_image_exports.gif">
</li>
</ul>
<p>Lors des tests, nous nous sommes aperçus que l’export CSV exportait toutes les valeurs sauf la première (en général la plus grande). La déclaration d’un problème dans leur système de support a provoqué une mise à jour dans la journée. Bravo à <a href="http://www.amcharts.com/" target="_blank" rel="external">amCharts</a>.</p>
<h4 id="cytoscape">cytoscape</h4><p>Nous avions reperé qu’il existait aussi une fonction d’export dans la bibliothèque <a href="http://js.cytoscape.org/" target="_blank" rel="external">Cytoscape</a> que nous utilisons pour la représentation graphique des réseaux. Il s’est avéré que cette fonction était beaucoup moins clé-en-main que celle d’amCharts.</p>
<p>Le menu d’export des réseaux se résume donc à un bouton qui exporte une image PNG.</p>
<img src="/2015/06/01/Sprint-Review-15W19-Exports/ezvis_export_network.png">
<p>Pour le détails des exports des graphiques, voir le <a href="https://github.com/madec-project/ezvis/issues/36" target="_blank" rel="external">ticket #36</a>.</p>
<h3 id="documents">documents</h3><p>L’export des documents était déjà présent dans <code>ezvis</code>, mais uniquement sur la page des documents, où on exporte tous les documents présents sur la page, avec une sélection basique, par filtrage.</p>
<p>Il est désormais présent aussi sur la page des graphiques, et prend aussi en compte les filtres venant du graphique et des facettes. Voir <a href="https://github.com/madec-project/ezvis/issues/20" target="_blank" rel="external">#20</a>.</p>
<img src="/2015/06/01/Sprint-Review-15W19-Exports/ezvis_chart_exports.gif">
<h2 id="http_dans_les_documentFields_/_nosave">http dans les documentFields / nosave</h2><p>Lors de <a href="/2015/05/04/Sprint-Review-15W14-ressources-externes/">la dernière Sprint Review</a>, nous avions montré un usage des <a href="/2015/05/04/Sprint-Review-15W14-ressources-externes/#flyingFields"><code>flyingFields</code></a> qui était certes visuel, mais qui s’est avéré non pertinent: nous modifiions à la volée (<em>flying</em>) les <em>identifiants</em> du graphique.<br>Ce faisant, nous avions rendu les filtres inopérants (cliquer sur un pays ne retournait plus les documents publiés dans ces pays).<br>Cela n’invalide pas l’utilité des <code>flyingFields</code>, puisque leur utilisation reste valable quand on modifie les <em>valeurs</em> projetées dans les graphiques (par exemple, pour afficher un taux de citation par année, et pas seulement un nombre de citations).</p>
<p>Mais le besoin d’externaliser des tables de références (ici, une correspondance entre les noms de pays et leur code ISO) perdure, donc nous avons implémenté l’utilisation de sources extérieures (comme dans les <code>corpusFields</code>) depuis les <code>documentFields</code>.</p>
<p>Comme nous ne voulons pas surcharger la base en dupliquant des tables dans chaque document, nous avons introduit une propriété pour ces <code>documentFields</code> que nous voulons utiliser, mais pas sauvegarder dans la base: <code>nosave</code>. Il suffit de positionner cette propriété à <code>true</code> pour que le champ ne soit pas sauvegardé mais tout de même disponible pour le calcul d’autres <code>documentFields</code>.</p>
<p>Voir <a href="https://github.com/madec-project/ezvis/issues/40" target="_blank" rel="external">#40</a>, et <a href="https://github.com/madec-project/ezvis#nosave" target="_blank" rel="external">nosave</a>.</p>
<h2 id="JBJ">JBJ</h2><h3 id="zip">zip</h3><p>Pour calculer des expressions impliquant les valeurs de deux tableaux (comme pour normaliser des valeurs par années), il nous fallait être capable de fusionner deux tableaux de même longueur.</p>
<p>Exemple:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">publiPerYear</span>": <span class="value">[</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2007"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">538</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2008"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">577</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2009"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">611</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2010"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">548</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2011"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">567</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2012"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">608</span></span>}]</span>,</span><br><span class="line"> "<span class="attribute">citationsPerYear</span>": <span class="value">[</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2007"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">7681</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2008"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">5479</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2009"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">5043</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2010"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">3698</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2011"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">2927</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2012"</span></span>,"<span class="attribute">value</span>":<span class="value"><span class="number">2049</span></span>}]</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>En divisant <code>citationsPerYear[i]</code> par <code>publiPerYear[i]</code>:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">zip</span>": <span class="value">[ <span class="string">"citationsPerYear"</span>, <span class="string">"publiPerYear"</span> ]</span>,</span><br><span class="line"> "<span class="attribute">foreach</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">compute</span>": <span class="value"><span class="string">"citationsPerYear / publiPerYear"</span></span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Dans cet exemple, <code>"zip": [ "citationsPerYear", "publiPerYear" ]</code> renvoie, en JBJ:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2007"</span></span>,"<span class="attribute">citationsPerYear</span>":<span class="value"><span class="number">7681</span></span>, "<span class="attribute">publiPerYear</span>": <span class="value"><span class="number">538</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2008"</span></span>,"<span class="attribute">citationsPerYear</span>":<span class="value"><span class="number">5479</span></span>, "<span class="attribute">publiPerYear</span>": <span class="value"><span class="number">577</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2009"</span></span>,"<span class="attribute">citationsPerYear</span>":<span class="value"><span class="number">5043</span></span>, "<span class="attribute">publiPerYear</span>": <span class="value"><span class="number">611</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2010"</span></span>,"<span class="attribute">citationsPerYear</span>":<span class="value"><span class="number">3698</span></span>, "<span class="attribute">publiPerYear</span>": <span class="value"><span class="number">548</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2011"</span></span>,"<span class="attribute">citationsPerYear</span>":<span class="value"><span class="number">2927</span></span>, "<span class="attribute">publiPerYear</span>": <span class="value"><span class="number">567</span></span>},</span><br><span class="line"> {"<span class="attribute">_id</span>":<span class="value"><span class="string">"2012"</span></span>,"<span class="attribute">citationsPerYear</span>":<span class="value"><span class="number">2049</span></span>, "<span class="attribute">publiPerYear</span>": <span class="value"><span class="number">608</span></span>}]</span><br></pre></td></tr></table></figure>
<p>Voir <a href="https://github.com/castorjs/node-jbj/issues/8" target="_blank" rel="external">JBJ#8</a></p>
<h1 id="getproperty">getproperty</h1><p>De plus, il manquait une action capable de retourner la valeur d’un tableau associatif correspondant à une clé:</p>
<p>Ex:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">set</span>": <span class="value">[ <span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span> ]</span>,</span><br><span class="line"> "<span class="attribute">getProperty</span>": <span class="value"><span class="string">"0"</span></span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>renvoie</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"a"</span></span><br></pre></td></tr></table></figure>
<p>et</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">set</span>": <span class="value">{ "<span class="attribute">a</span>": <span class="value"><span class="number">0</span></span>, "<span class="attribute">b</span>": <span class="value"><span class="number">1</span></span>, "<span class="attribute">c</span>":<span class="value"><span class="number">2</span> </span>}</span>,</span><br><span class="line"> "<span class="attribute">getProperty</span>": <span class="value"><span class="string">"b"</span></span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>renvoie</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span></span><br></pre></td></tr></table></figure>
<p>Voir <a href="https://github.com/castorjs/node-jbj/issues/9" target="_blank" rel="external">JBJ#9</a></p>
<h2 id="commande_ezref">commande ezref</h2><p>La version 1.0.0 d’<code>ezref</code> devait être lancée de manière non triviale quand ce n’était pas par <code>ezmaster</code>. Nous avons donc publié la version 1.1.0 qui ajoute une commande <code>ezref</code> quand on l’installe via:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install -g ezref</span><br></pre></td></tr></table></figure>
<h2 id="Installation_/_mise_à_jour">Installation / mise à jour</h2><p>Après l’<a href="/2015/03/30/Sprint-Review-15W09-stabilisation/#dalekjs">écriture de tests via dalekjs</a>, l’installation d’<code>ezvis</code> ramenait des modules utiles uniquement pour le développement (pour ces tests).</p>
<p>Pour éviter de grossir les fichiers d’<code>ezvis</code>, on peut l’installer en utilisant l’option <code>--production</code>:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install --production -g ezvis</span><br></pre></td></tr></table></figure>
<p>C’est la même commande qui permet de mettre à jour <code>ezvis</code> en installant la dernière version à la place de l’éventuelle version installée, quelle qu’elle soit.</p>
<p>À ce jour, c’est la version 6.6.0.</p>
]]></content>
<summary type="html">
<![CDATA[<p>Voici le support de la Sprint Review n°11, concernant les <em>exports</em>.</p>
<h1 id="Tâches">Tâches</h1><ul>
<li>19 tâches prévues</li]]>
</summary>
<category term="amcharts" scheme="http://madec-project.github.io/tags/amcharts/"/>
<category term="csv" scheme="http://madec-project.github.io/tags/csv/"/>
<category term="cytoscape" scheme="http://madec-project.github.io/tags/cytoscape/"/>
<category term="export" scheme="http://madec-project.github.io/tags/export/"/>
<category term="ezmaster" scheme="http://madec-project.github.io/tags/ezmaster/"/>
<category term="ezref" scheme="http://madec-project.github.io/tags/ezref/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="flyingFields" scheme="http://madec-project.github.io/tags/flyingFields/"/>
<category term="forever" scheme="http://madec-project.github.io/tags/forever/"/>
<category term="jbj" scheme="http://madec-project.github.io/tags/jbj/"/>
<category term="json" scheme="http://madec-project.github.io/tags/json/"/>
<category term="pdf" scheme="http://madec-project.github.io/tags/pdf/"/>
<category term="png" scheme="http://madec-project.github.io/tags/png/"/>
<category term="svg" scheme="http://madec-project.github.io/tags/svg/"/>
<category term="tsv" scheme="http://madec-project.github.io/tags/tsv/"/>
<category term="vsst" scheme="http://madec-project.github.io/tags/vsst/"/>
<category term="xlsx" scheme="http://madec-project.github.io/tags/xlsx/"/>
</entry>
<entry>
<title><![CDATA[Sprint Review #15W14: ressources externes]]></title>
<link href="http://madec-project.github.io/2015/05/04/Sprint-Review-15W14-ressources-externes/"/>
<id>http://madec-project.github.io/2015/05/04/Sprint-Review-15W14-ressources-externes/</id>
<published>2015-05-04T12:00:00.000Z</published>
<updated>2015-05-04T08:48:58.000Z</updated>
<content type="html"><![CDATA[<p>Voici venue la revue de sprint numéro 10, qui a pour thème principal <em>les ressources externes</em>.</p>
<h1 id="Tâches">Tâches</h1><ul>
<li>18 tâches prévues</li>
<li>10 tâches effectuées</li>
<li>22 tâches au total</li>
<li>plus de 46 points de complexité prévus (avec des incertitudes)</li>
<li>36,5 points de complexité résolus (avec des tâches non prévues): dans la moyenne</li>
</ul>
<h1 id="madec-project-github-io">madec-project.github.io</h1><p>J’ai créé un page pour l’organisation <code>madec-project</code> sur <a href="https://github.com" target="_blank" rel="external">GitHub</a>, celle qui contient tous les programmes liés au projet MADEC. GitHub offrant l’hébergement d’un site statique, nous avions déjà opté pour <a href="http://hexo.io" target="_blank" rel="external">Hexo</a> pour ce blog.</p>
<p>Pour obtenir une URL relativement courte (en tout cas plus courte que <a href="http://madec-project.github.io/blogfr" target="_blank" rel="external">http://madec-project.github.io/blogfr</a>), il a fallu nommer le dépôt contenant ce site <code>madec-project.github.io</code>, ce qui nous autorise une URL sans le nom du dépôt: <a href="http://madec-project.github.io/" target="_blank" rel="external">http://madec-project.github.io/</a></p>
<h1 id="Twitter">Twitter</h1><p>Un compte Twitter <a href="http://twitter.com/ezvis_project" target="_blank" rel="external">ezvis_project</a> a aussi été créé (en ces temps de communication autour d’ezVIS, ça peut servir).</p>
<img src="/2015/05/04/Sprint-Review-15W14-ressources-externes/ezVisTwitter.png">
<h1 id="vimadec_/_vpmadec_/_puppet">vimadec / vpmadec / puppet</h1><p>Le travail avec Patrice, Martial et Philippe porte ses fruits:</p>
<ul>
<li>ajout d’un script d’installation d’une app ezmaster à partir de l’URL de son <code>.tar.gz</code>,</li>
<li>mise sous surveillance du processus <code>ezmaster</code> afin de le relancer automatiquement quand il s’arrête (via <a href="https://www.npmjs.com/package/forever" target="_blank" rel="external">forever</a>),</li>
<li>création d’une machine virtuelle de production <code>vpmadec</code>,</li>
<li>création d’un accélérateur sécurisé vers cette machine virtuelle.</li>
</ul>
<h1 id="ezVIS">ezVIS</h1><h2 id="Test_sous_node_v0-12">Test sous node v0.12</h2><p>En utilisant <a href="https://github.com/creationix/nvm" target="_blank" rel="external">nvm</a>, nous avons lancé et testé à la main ezVIS, et tout a marché.</p>
<p>Il a néanmoins fallu passer par un <code>npm rebuild</code> pour recompiler/récupérer les modules binaires correspondant à cette version (principalement <code>bson</code> et <code>kerberos</code>)</p>
<h2 id="Affichage_de_la_version">Affichage de la version</h2><p>Pour faciliter les échanges avec les utilisateurs (il y en a eu avec une personne d’Orléans, par mél), on affiche la version d’ezVIS dans le navigateur:</p>
<img src="/2015/05/04/Sprint-Review-15W14-ressources-externes/ezvis-version-browser.png">
<p>mais aussi lors du lancement d’une instance ezVIS:</p>
<img src="/2015/05/04/Sprint-Review-15W14-ressources-externes/ezvis-version-cli.png">
<h2 id="login/password">login/password</h2><p>On peut maintenant limiter l’accès à un rapport ezVIS en utilisant la clé <code>access</code>, contenant un <code>login</code> et un mot de passe soit <code>plain</code>, soit <code>sha1</code>:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"access"</span>: {</span><br><span class="line"> <span class="string">"login"</span>: <span class="string">"user"</span>,</span><br><span class="line"> <span class="string">"sha1"</span> : <span class="string">"37fa265330ad83eaa879efb1e2db6380896cf639"</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Le mot de passe sous forme <code>plain</code> est simplement le mot de passe en clair.<br>Mais comme ce n’est pas une bonne pratique, on peut remplacer son usage par celui de <code>sha1</code> qui remplace un mot de passe par son <a href="http://fr.wikipedia.org/wiki/SHA-1" target="_blank" rel="external">empreinte SHA-1</a>.</p>
<p>Ainsi, on connaît l’empreinte du mot de passe, mais pas le mot de passe lui-même.</p>
<p>Pour obtenir l’empreinte SHA-1 d’un mot de passe, on peut utiliser des commandes comme <code>shasum</code> ou <code>sha1sum</code> (en n’incluant pas de passage à la ligne dans le mot de passe), ou bien des sites de génération comme <a href="http://www.sha1-online.com/" target="_blank" rel="external">SHA1 online</a>.</p>
<h2 id="Accès_aux_ressources_externes">Accès aux ressources externes</h2><h3 id="ezref">ezref</h3><p>On peut avoir besoin de ressources externes à ezvis (parce que de simples fichiers), mais avec la possibilité de remplacer ces fichiers de référence (tables de correspondance, listes, …).</p>
<p>Utiliser <code>ezref</code>, l’application pour ezMaster qui met à disposition via le protocole http des fichiers qu’ezMaster vous permet de déposer est la solution.</p>
<p>Pour pouvoir stocker les ressources: ezref (serveur web statique).</p>
<h3 id="flyingFields">flyingFields</h3><p>Les <code>flyingFields</code> sont les cousins des <code>documentFields</code> et des <code>corpusFields</code>. Ils sont un croisement, dans le sens où ils permettent l’interopérabilité des uns et des autres.</p>
<h3 id="JBJ">JBJ</h3><p>Pour pouvoir appliquer une table de correspondance présente dans les <code>corpusFields</code>, on a ajouté une action <code>mappingVar</code> à JBJ, qui fonctionne comme <code>mapping</code>, mais dont les arguments sont différents.</p>
<h3 id="Exemple:_externaliser_la_table_de_correspondance_d’une_carte_géographique">Exemple: externaliser la table de correspondance d’une carte géographique</h3><p>Pour projeter des données sur la carte du monde, jusqu’ici, on était obligé de traduire les noms des pays en codes ISO (c’est ainsi que sont identifiés les pays sur la carte):</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"$fields.country"</span> : {</span><br><span class="line"> <span class="string">"label"</span>: <span class="string">"Pays d'affiliation"</span>,</span><br><span class="line"> <span class="string">"path"</span> : <span class="string">"content.json.Pays"</span>,</span><br><span class="line"> <span class="string">"parseCSV"</span>: <span class="string">";"</span>,</span><br><span class="line"> <span class="string">"foreach"</span>: {</span><br><span class="line"> <span class="string">"mapping"</span>: {</span><br><span class="line"> <span class="string">"Albania"</span> : <span class="string">"ALB"</span>,</span><br><span class="line"> <span class="string">"Algeria"</span> : <span class="string">"DZA"</span>,</span><br><span class="line"></span><br><span class="line"> <span class="string">"Zaire"</span> : <span class="string">"COD"</span>,</span><br><span class="line"> <span class="string">"Zambia"</span> : <span class="string">"ZMB"</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Nous avons amélioré l’opérateur <code>mapping</code> de JBJ pour qu’il puisse traiter directement tout un tableau:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"$fields.country"</span> : {</span><br><span class="line"> <span class="string">"label"</span>: <span class="string">"Pays d'affiliation"</span>,</span><br><span class="line"> <span class="string">"path"</span> : <span class="string">"content.json.Pays"</span>,</span><br><span class="line"> <span class="string">"parseCSV"</span>: <span class="string">";"</span>,</span><br><span class="line"> <span class="string">"mapping"</span>: {</span><br><span class="line"> <span class="string">"Albania"</span> : <span class="string">"ALB"</span>,</span><br><span class="line"> <span class="string">"Algeria"</span> : <span class="string">"DZA"</span>,</span><br><span class="line"></span><br><span class="line"> <span class="string">"Zaire"</span> : <span class="string">"COD"</span>,</span><br><span class="line"> <span class="string">"Zambia"</span> : <span class="string">"ZMB"</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Puis, nous avons créé un opérateur similaire à <code>mapping</code> qui, au lieu de prendre en entrée l’objet courant et en paramètre la table de correspondance, permet de mettre en paramètre deux noms de variable: l’entrée et la table.<br>Il s’appelle <code>mappingVar</code> (ou <code>combine</code>).</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">set</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">arg</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">a</span>": <span class="value"><span class="string">"Aha!"</span></span>,</span><br><span class="line"> "<span class="attribute">b</span>": <span class="value"><span class="string">"Baby"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">input</span>": <span class="value"><span class="string">"a"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">mappingVar</span>": <span class="value">[</span><br><span class="line"> <span class="string">"input"</span>,</span><br><span class="line"> <span class="string">"arg"</span></span><br><span class="line"> ]</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Ceci renvoie <code>"Aha!"</code>.</p>
<p>Donc, grâce à <code>ezref</code>, on peut mettre la table de correspondance sur un serveur externe, et le charger dans un <code>corpusFields</code>, accessible comme une variable dans les <code>flyingFields</code>:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"documentFields"</span>: {</span><br><span class="line"> <span class="string">"$fields.country"</span> : {</span><br><span class="line"> <span class="string">"label"</span>: <span class="string">"Pays d'affiliation"</span>,</span><br><span class="line"> <span class="string">"path"</span> : <span class="string">"content.json.Pays"</span>,</span><br><span class="line"> <span class="string">"parseCSV"</span>: <span class="string">";"</span>,</span><br><span class="line"> <span class="string">"foreach"</span>: {</span><br><span class="line"> <span class="string">"trim"</span>: <span class="literal">true</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">},</span><br><span class="line"><span class="string">"corpusFields"</span>: {</span><br><span class="line"> <span class="string">"$country2iso"</span>: {</span><br><span class="line"> <span class="string">"$?"</span> : <span class="string">"http://localhost:35000/country2iso3.json"</span>,</span><br><span class="line"> <span class="string">"parseJSON"</span>: <span class="literal">true</span></span><br><span class="line"> }</span><br><span class="line">},</span><br><span class="line"><span class="string">"flyingFields"</span>: {</span><br><span class="line"> <span class="string">"$country2"</span>: {</span><br><span class="line"> <span class="string">"$_id"</span>: {</span><br><span class="line"> <span class="string">"combine"</span> : [<span class="string">"_id"</span>, <span class="string">"country2iso"</span>]</span><br><span class="line"> },</span><br><span class="line"> <span class="string">"mask"</span>: <span class="string">"_id,value"</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Quand on veut avoir le nombre de valeurs distinctes de <code>fields.country</code>, on peut utiliser l’URL <a href="http://localhost:3000/compute.json?operator=distinct&field=fields.country" target="_blank" rel="external">http://localhost:3000/compute.json?operator=distinct&field=fields.country</a> :</p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"></span><br><span class="line"> data: [</span><br><span class="line"> {</span><br><span class="line"> _id: "Albania",</span><br><span class="line"> value: 2</span><br><span class="line"> },</span><br><span class="line"> {</span><br><span class="line"> _id: "Algeria",</span><br><span class="line"> value: 15</span><br><span class="line"> }</span><br><span class="line"> ]</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Mais en utilisant <code>&flying=country2</code> en plus, on applique le JBJ correspondant à ce champ:<br><a href="http://localhost:3000/compute.json?operator=distinct&field=fields.country&flying=country2" target="_blank" rel="external">http://localhost:3000/compute.json?operator=distinct&field=fields.country&flying=country2</a></p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"></span><br><span class="line"> data: [</span><br><span class="line"> {</span><br><span class="line"> _id: "ALB",</span><br><span class="line"> value: 2</span><br><span class="line"> },</span><br><span class="line"> {</span><br><span class="line"> _id: "DZA",</span><br><span class="line"> value: 15</span><br><span class="line"> }</span><br><span class="line"> ]</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<summary type="html">
<![CDATA[<p>Voici venue la revue de sprint numéro 10, qui a pour thème principal <em>les ressources externes</em>.</p>
<h1 id="Tâches">Tâches</h1><ul]]>
</summary>
<category term="blog" scheme="http://madec-project.github.io/tags/blog/"/>
<category term="ezref" scheme="http://madec-project.github.io/tags/ezref/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="flyingFields" scheme="http://madec-project.github.io/tags/flyingFields/"/>
<category term="forever" scheme="http://madec-project.github.io/tags/forever/"/>
<category term="jbj" scheme="http://madec-project.github.io/tags/jbj/"/>
<category term="login" scheme="http://madec-project.github.io/tags/login/"/>
<category term="nodejs" scheme="http://madec-project.github.io/tags/nodejs/"/>
<category term="twitter" scheme="http://madec-project.github.io/tags/twitter/"/>
</entry>
<entry>
<title><![CDATA[Sprint Review #15W09: stabilisation]]></title>
<link href="http://madec-project.github.io/2015/03/30/Sprint-Review-15W09-stabilisation/"/>
<id>http://madec-project.github.io/2015/03/30/Sprint-Review-15W09-stabilisation/</id>
<published>2015-03-30T14:00:00.000Z</published>
<updated>2015-04-15T15:07:37.000Z</updated>
<content type="html"><![CDATA[<h1 id="Blog">Blog</h1><p>Afin de ne pas perdre des articles sur MADEC en général, et de pouvoir les stocker quelque part, ils sont écrits en français et en <a href="http://daringfireball.net/projects/markdown/syntax" target="_blank" rel="external">Markdown</a>, sauvegardés sur <a href="https://github.com/madec-project/blogfr" target="_blank" rel="external">GitHub</a>.</p>
<p>Nous avons choisi un générateur de site statique nommé <a href="http://hexo.io" target="_blank" rel="external">Hexo</a>.</p>
<p>J’ai <a href="2015/03/13/Presentation/">transcrit le poster</a> soumis (et accepté?) à <a href="http://atlas.irit.fr/" target="_blank" rel="external">VSST</a>.</p>
<p>J’ai aussi commencé un article sur le minimum à savoir pour <a href="/2015/03/19/Configuration/">configurer un ezVIS</a>.</p>
<p>J’en profite pour noter les sujets (et les liens) à présenter lors de cette <em>sprint review</em> numéro 9 qui expose les tâches menées à bien depuis la semaine 9 de 2015.</p>
<h1 id="machine_virtuelle">machine virtuelle</h1><p>Nous avons eu quelques soucis de requêtes répondant bizarrement sur la machine virtuelle hébergeant <code>ezmaster</code> et <code>ezVIS</code>. Nous avons d’abord cru qu’il s’agissait d’un problème de mémoire (tant le <em>swap</em> était peu utilisé).</p>
<p>La mémoire vive de la machine a donc été portée de 2Gio à 8Gio.</p>
<h1 id="ezmaster">ezmaster</h1><p>L’application <code>castor-admin</code>, qui sert à administrer des instances d’applications (ou apps) basées sur <code>castor-core</code> (comme le sont <a href="http://github.com/madec-project/ezvis" target="_blank" rel="external"><code>ezvis</code></a> et <a href="https://github.com/termith-anr/idefix" target="_blank" rel="external"><code>idefix</code></a>) a été renommée en <code>ezmaster</code>, que ce soit sur <a href="https://github.com/madec-project/ezmaster" target="_blank" rel="external">GitHub</a> ou sur <a href="https://www.npmjs.com/package/ezmaster" target="_blank" rel="external">npm</a>.</p>
<h1 id="board-inist-fr">board.inist.fr</h1><p>Nous avons configuré <code>ezmaster</code> sur la machine virtuelle pour que le nom de domaine <code>board.inist.fr</code> et ses sous-domaines puissent servir à publier une instance d’<code>ezvis</code>.</p>
<p>Ainsi, les instances mises en place pour la démonstration du projet au directeur de la DIST jeudi dernier (le 26/03/2015) sont accessibles de l’extérieur.</p>
<ul>
<li>ezPAARSE results for ST2I portal logs (march 2015): <a href="http://couperin_ezpaarseezvis640v3_3.board.inist.fr" target="_blank" rel="external">http://couperin_ezpaarseezvis640v3_3.board.inist.fr</a></li>
<li>ISTEX - Food Science & Technology: <a href="http://dist_istexfoodscitechnezvis640v1_1.board.inist.fr" target="_blank" rel="external">http://dist_istexfoodscitechnezvis640v1_1.board.inist.fr</a></li>
<li>Lorraine (Moselle) - 2007-2012: <a href="http://inist_lorraineezvis640v1_1.board.inist.fr" target="_blank" rel="external">http://inist_lorraineezvis640v1_1.board.inist.fr</a></li>
</ul>
<p>Les deux premières instances sont aussi disponibles dans le dépôt vitrine: <a href="https://github.com/madec-project/showcase" target="_blank" rel="external">showcase</a>.</p>
<p>Isabelle y a aussi ajouté une étude sur les séries télévisées.</p>
<h1 id="dalekjs">dalekjs</h1><p>J’ai commencé à mettre en place des tests, non pas unitaires, mais de comportement de l’application: en utilisant <a href="http://dalekjs.com" target="_blank" rel="external">dalekjs</a>, on peut écrire des scénarios de test de l’application.</p>
<p>Lancement du serveur à tester:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">cd</span> ~/dev/castorjs/ezvis</span><br><span class="line">$ node cli <span class="built_in">test</span>/dataset/<span class="built_in">test</span>2</span><br></pre></td></tr></table></figure></p>
<p>Lancement des tests:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">cd</span> ~/dev/castorjs/ezvis</span><br><span class="line">$ dalek <span class="built_in">test</span>/<span class="built_in">test</span>2.js</span><br></pre></td></tr></table></figure></p>
<p>Résultat espéré:<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">Running tests</span><br><span class="line">Running Browser: PhantomJS</span><br><span class="line">OS: linux unknown <span class="number">64</span>bit</span><br><span class="line">Browser Version: <span class="number">1.9</span>.<span class="number">8</span></span><br><span class="line">RUNNING TEST - <span class="string">"Has data"</span></span><br><span class="line">▶ OPEN http://localhost:<span class="number">20002</span>/documents.html</span><br><span class="line">▶ WAITFOR Interrupted by timeout</span><br><span class="line">✔ EXISTS <span class="string">"Showing 1 to 4 of 4 entries"</span></span><br><span class="line">✔ TEXT <span class="string">"Showing 1 to 4 of 4 entries"</span></span><br><span class="line">✔ TEXT <span class="string">"1906"</span> <span class="keyword">in</span> first line</span><br><span class="line">✔ TEXT <span class="string">"Kurt Gödel"</span> <span class="keyword">in</span> first line</span><br><span class="line">▶ CLICK <span class="comment">#dataTables-documents tr:nth-child(4) td:first:first-child a</span></span><br><span class="line">✔ TITLE Correct</span><br><span class="line">✔ <span class="number">5</span> Assertions run</span><br><span class="line">✔ TEST - <span class="string">"Has data"</span> SUCCEEDED</span><br><span class="line">RUNNING TEST - <span class="string">"Good display"</span></span><br><span class="line">▶ OPEN http://localhost:<span class="number">20002</span>/display/Z5OAoW.html</span><br><span class="line">✔ TITLE Correct</span><br><span class="line">✔ NUMBEROFELEMENTS <span class="number">3</span> fields displayed</span><br><span class="line">✔ TEXT Name is <span class="string">"Douglas Hofstadter"</span></span><br><span class="line">✔ <span class="number">3</span> Assertions run</span><br><span class="line">✔ TEST - <span class="string">"Good display"</span> SUCCEEDED</span><br><span class="line"> <span class="number">8</span>/<span class="number">8</span> assertions passed. Elapsed Time: <span class="number">10.11</span> sec</span><br></pre></td></tr></table></figure></p>
<h1 id="JBJ">JBJ</h1><ul>
<li>on a évité d’écrire une action <code>mapArray</code> inutile (<a href="https://github.com/castorjs/node-jbj/issues/5" target="_blank" rel="external">jbj#5</a>)</li>
<li>j’ai ajouté l’action <code>substring</code> (<a href="https://github.com/castorjs/node-jbj/issues/6" target="_blank" rel="external">jbj#6</a>), plus simple et intuitive que l’utilisation successive de <code>truncate</code> et <code>shift</code>.</li>
</ul>
<h1 id="ezVIS">ezVIS</h1><p>J’ai commencé à me servir des fonctionnalités de GitHub qui ne sont pas forcément incluses dans <code>git</code>: le système d’<em>issues</em> et de <em>milestones</em>.</p>
<p>J’ai donc placé un jalon pour ce sprint, en lui donnant une date. C’est la <a href="https://github.com/madec-project/ezvis/milestones?state=closed" target="_blank" rel="external">milestone</a> <a href="https://github.com/madec-project/ezvis/issues?q=milestone%3A%22Sprint+%2315W09%3A+stabilization%22" target="_blank" rel="external">“Sprint #15W09: stabilization” d’ezvis</a>:</p>
<ul>
<li>changer le label “Search” en “Filter” dans le page <code>/documents.html</code> <a href="https://github.com/madec-project/ezvis/issues/3" target="_blank" rel="external">#3</a></li>
<li>enlever le lien vers les champs depuis le tableau de bord <a href="https://github.com/madec-project/ezvis/issues/4" target="_blank" rel="external">#4</a></li>
<li>affecter une couleur à chaque champ d’un réseau inter-champs <a href="https://github.com/madec-project/ezvis/issues/5" target="_blank" rel="external">#5</a></li>
<li>corriger le bug d’export CSV vide de <code>/documents.html</code> <a href="https://github.com/madec-project/ezvis/issues/6" target="_blank" rel="external">#6</a></li>
<li>ajouter un seuil en-deça duquel on rassemble les valeurs dans le camembert <a href="https://github.com/madec-project/ezvis/issues/7" target="_blank" rel="external">#7</a></li>
<li>corriger les réseaux où les arcs sont dirigés <a href="https://github.com/madec-project/ezvis/issues/8" target="_blank" rel="external">#8</a></li>
<li>donner la possibilité de modifier la largeur de la colonne de gauche dans <code>/display.html</code> <a href="https://github.com/madec-project/ezvis/issues/9" target="_blank" rel="external">#9</a></li>
<li>restaurer la configuration des légendes <a href="https://github.com/madec-project/ezvis/issues/10" target="_blank" rel="external">#10</a></li>
<li>donner la possibilité d’afficher aussi les années vides dans les histogrammes <a href="https://github.com/madec-project/ezvis/issues/11" target="_blank" rel="external">#11</a></li>
<li>donner la possibilité d’afficher des labels plus courts sur les barres horizontales <a href="https://github.com/madec-project/ezvis/issues/12" target="_blank" rel="external">#12</a></li>
<li>verbaliser les codes des pays sélectionnés dans les cartes, afin de rendre les filtres plus lisibles <a href="https://github.com/madec-project/ezvis/issues/13" target="_blank" rel="external">#13</a></li>
<li>faire commencer l’axe des ordonnées à zéro dans les histogrammes <a href="https://github.com/madec-project/ezvis/issues/14" target="_blank" rel="external">#14</a></li>
<li>déterminer si on peut utiliser des chaînes de caractères sur l’axe des X pour créer des diagrammes à bulles <a href="https://github.com/madec-project/ezvis/issues/15" target="_blank" rel="external">#15</a></li>
<li>restaurer la configuration des couleurs <a href="https://github.com/madec-project/ezvis/issues/16" target="_blank" rel="external">#16</a></li>
</ul>
]]></content>
<summary type="html">
<![CDATA[<h1 id="Blog">Blog</h1><p>Afin de ne pas perdre des articles sur MADEC en général, et de pouvoir les stocker quelque part, ils sont écrits e]]>
</summary>
<category term="dalekjs" scheme="http://madec-project.github.io/tags/dalekjs/"/>
<category term="ezmaster" scheme="http://madec-project.github.io/tags/ezmaster/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="jbj" scheme="http://madec-project.github.io/tags/jbj/"/>
<category term="proxy" scheme="http://madec-project.github.io/tags/proxy/"/>
<category term="showcase" scheme="http://madec-project.github.io/tags/showcase/"/>
</entry>
<entry>
<title><![CDATA[Configuration d'ezVIS / minimum]]></title>
<link href="http://madec-project.github.io/2015/03/19/Configuration/"/>
<id>http://madec-project.github.io/2015/03/19/Configuration/</id>
<published>2015-03-19T22:38:00.000Z</published>
<updated>2015-04-15T13:35:57.000Z</updated>
<content type="html"><![CDATA[<h1 id="Introduction">Introduction</h1><p>Pour créer un rapport web avec ezVIS, il faut configurer l’application. Il y a 3 volets:</p>
<ol>
<li>connexion avec la base de données</li>
<li>intégration des données</li>
<li>ajout de graphiques</li>
</ol>
<p>Ils sont tous gérables dans le fichier de configuration du rapport, qui est au format <a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation" target="_blank" rel="external">JSON</a> (JavaScript Object Notation). Son extension est <code>.json</code>et son préfixe est obligatoirement le même que le nom du répertoire dans lequel se trouvent les fichiers de données.<br>Nous prendrons l’exemple d’un fichier <code>data.json</code> placé au même niveau que le répertoire <code>data</code>, qui contient un fichier au format CSV dont nous reparlerons plus tard.</p>
<h1 id="Connexion_avec_la_base_de_données">Connexion avec la base de données</h1><p>Le système de gestion de base de données utilisé par ezVIS est <a href="http://mongodb.org" target="_blank" rel="external">mongoDB</a>, et une connexion par défaut est utilisée, qui permet de retrouver les données liées au rapport dans la <em>database</em> appelée <code>castor</code>.<br>Si vous voulez changer cet emplacement, modifiez la clé <code>connexionURI</code>du fichier <code>data.json</code> (valeur par défaut: <code>mongodb://localhost:27017/castor/</code>).</p>
<p>À l’intérieur de <code>castor</code>, mongo range ses données dans des collections. Sans indication supplémentaire, ezVIS nomme la collection avec une clé de hachage calculée à partir du chemin du répertoire <code>data</code>. Cela donne un nom illisible pour un humain, mais quasi-unique en fonction du chemin.<br>Si vous avez l’intention de manipuler les données dans mongoDB (par exemple, simplement pour réinitialiser les données, avec <a href="https://github.com/castorjs/castor-clean" target="_blank" rel="external"><code>castor-clean</code></a>), il est prudent de renseigner la clé <code>collectionName</code>, dans notre cas avec la valeur <code>"data"</code>par exemple:</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"collectionName"</span>: <span class="string">"data"</span>,</span><br></pre></td></tr></table></figure>
<p>Tant que vous y êtes, il est prudent de renseigner aussi les clés <code>title</code>et <code>description</code>, pour vous y retrouver quand vous relirez ce fichier dans quelques mois…</p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">"title"</span>: <span class="string">"Rapport d'exemple de configuration"</span>,</span><br><span class="line"><span class="string">"description"</span>: <span class="string">"D'après l'article \"Configuration d'ezVIS / minimum\""</span>,</span><br><span class="line"><span class="string">"collectionName"</span>: <span class="string">"data"</span>,</span><br></pre></td></tr></table></figure>
<p><code>title</code> sera utilisé pour le titre du rapport (la fenêtre du navigateur) et <code>description</code> sera beaucoup plus discrètement placée dans les métadonnées HTML du rapport (visible surtout des moteurs de recherche).</p>
<p>À condition d’avoir déjà installé <code>ezvis</code>, vous pouvez d’ores et déjà le lancer avec:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ezvis data</span><br></pre></td></tr></table></figure>
<h1 id="Intégration_des_données">Intégration des données</h1><p>Après avoir lancé ezVIS, un rapport vide devrait être consultable à l’URL <a href="http://localhost:3000/" target="_blank" rel="external">http://localhost:3000/</a> (3000 étant le port par défaut, on peut le changer via la clé <code>port</code>).</p>
<p>Le menu gauche doit donner accès au <em>dashboard</em> et aux <em>documents</em>.</p>
<p>Seul un message signalant qu’aucune configuration n’existe encore apparaît sur ces deux pages.</p>
<p>Nous allons commencer par configurer simplement la liste des documents. Elle se présente sous la forme d’une table affichant, dans l’ordre où ils sont déclarés dans le fichier <code>data.json</code>, tous les champs déclarés <em>visibles</em>.</p>
<p>Prenons un exemple simple, un fichier <code>data.csv</code> qui sera placé dans le répertoire <code>data</code>:</p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">year,person 1912,Alan Turing 1927,Marvin Minsky</span><br></pre></td></tr></table></figure>
<p>C’est un fichier CSV (Comma Separated Values) qui aurait pu être exporté d’un tableur, comme Excel ou LibreOffice.<br>Pour que ces données soient affichées dans la page <a href="http://localhost:3000/documents.html" target="_blank" rel="external">http://localhost:3000/documents.html</a>, il faut que nous déclarions les champs <code>year</code>et <code>person</code> (qui sont automatiquement placés dans une clé <code>content.json</code> de chaque document dans la base, au démarrage d’ezVIS).<br>Le premier document sera placé dans la base sous forme d’un document JSON, et la partie qui nous intéresse aura cette forme:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">content</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">json</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">year</span>": <span class="value"><span class="string">"1912"</span></span>,</span><br><span class="line"> "<span class="attribute">person</span>": <span class="value"><span class="string">"Marvin Minsky"</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Pour déclarer les champs, nous utiliserons la clé <code>documentFields</code> (qui au passage créera une copie du contenu des champs mais directement à la racine du document):</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">documentFields</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">$year</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">get</span>": <span class="value"><span class="string">"content.json.year"</span></span>,</span><br><span class="line"> "<span class="attribute">visible</span>": <span class="value"><span class="literal">true</span></span>,</span><br><span class="line"> "<span class="attribute">label</span>": <span class="value"><span class="string">"Année"</span></span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">$person</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">get</span>": <span class="value"><span class="string">"content.json.person"</span></span>,</span><br><span class="line"> "<span class="attribute">visible</span>": <span class="value"><span class="literal">true</span></span>,</span><br><span class="line"> "<span class="attribute">label</span>": <span class="value"><span class="string">"Nom"</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Cette déclaration modifiera le document précédent pour donner ceci:</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "<span class="attribute">content</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">json</span>": <span class="value">{</span><br><span class="line"> "<span class="attribute">year</span>": <span class="value"><span class="string">"1912"</span></span>,</span><br><span class="line"> "<span class="attribute">person</span>": <span class="value"><span class="string">"Marvin Minsky"</span></span><br><span class="line"> </span>}</span><br><span class="line"> </span>}</span>,</span><br><span class="line"> "<span class="attribute">year</span>": <span class="value"><span class="string">"1912"</span></span>,</span><br><span class="line"> "<span class="attribute">person</span>": <span class="value"><span class="string">"Marvin Minsky"</span></span><br><span class="line"></span>}</span><br></pre></td></tr></table></figure>
<p>Cela peut paraître inutile pour l’instant, mais l’intérêt de cette redondance deviendra évident avec la manipulation de champs multivalués, par exemple.</p>
<p>Le fait d’avoir déclaré une clé <code>visible</code> avec une valeur <code>true</code> implique que le champ sera visible dans la table des documents.</p>
<p>La partie <code>label</code> de la déclaration donne le nom la colonne correspondante dans la table des documents.</p>
<h1 id="Ajout_de_graphique">Ajout de graphique</h1><p>Pour ajouter un graphique, il suffit de sélectionner un type parmi:</p>
<ol>
<li>histogramme <code>histogram</code></li>
<li>barres horizontales <code>horizontalbars</code></li>
<li>camembert <code>pie</code></li>
<li>carte géographique <code>map</code></li>
<li>réseau <code>network</code></li>
</ol>
<p>et d’y associer un champ (calculé ou non).</p>
<p>Le plus simple est un histogramme.</p>
<p>Tous les graphiques sont inclus dans le <code>dashboard</code> (tableau de bord), c’est-à-dire la page d’accueil d’ezVIS.</p>
]]></content>
<summary type="html">
<![CDATA[<h1 id="Introduction">Introduction</h1><p>Pour créer un rapport web avec ezVIS, il faut configurer l’application. Il y a 3 volets:</p>
<ol>
]]>
</summary>
<category term="configuration" scheme="http://madec-project.github.io/tags/configuration/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
</entry>
<entry>
<title><![CDATA[Présentation d'ezVIS]]></title>
<link href="http://madec-project.github.io/2015/03/13/Presentation/"/>
<id>http://madec-project.github.io/2015/03/13/Presentation/</id>
<published>2015-03-13T17:02:00.000Z</published>
<updated>2015-04-15T14:53:38.000Z</updated>
<content type="html"><![CDATA[<h1 id="Introduction">Introduction</h1><p>ezVIS est le résultat d’une réflexion menée au sein de l’Inist-CNRS sur le besoin d’un outil de mise à disposition et d’exploration de corpus en remplacement d’outil développé précédemment comme SERVIST. Dans le cadre du projet MADEC, le choix a été fait d’aborder l’exploration d’un corpus par sa description à travers un tableau de bord. Cela a conduit au développement d’un outil de réalisation de tableau de bord décrivant le corpus et y donnant accès.</p>
<h1 id="ezVIS">ezVIS</h1><p>L’Inist-CNRS propose à travers son service <em>Appui au pilotage</em> des études bibliométriques réalisées à partir de données structurées fournies par les usagers ou issues de bases de données pour assurer le suivi de la production scientifique, mettre en évidence les collaborations, etc. Ces études livrées sous forme de rapport PDF ne répondent pas à toutes les attentes des usagers (réutilisation des graphiques, accès aux données, etc.). Un outil comme <a href="https://github.com/madec-project/ezvis" target="_blank" rel="external">ezVIS</a> est la solution retenue pour satisfaire les attentes d’interactivité et de dynamisme du résultat fourni à travers un tableau de bord convivial point d’entrée du rapport en ligne.</p>
<h2 id="Configuration_des_rapports">Configuration des rapports</h2><p>Chaque rapport mis en ligne correspond à une instance configurée de façon relativement simple. Il est possible de créer autant d’instances que nécessaire en reproduisant la même configuration ou en la personnalisant. Cet aspect devrait permettre de multiplier le nombre de rapports en capitalisant et mutualisant les configurations. Ce gain de temps devrait permettre de pousser le travail de personnalisation.</p>
<p>Par ailleurs, les instances peuvent être gérées grâce à une interface à la prise en main aisée.<br>La figure 1 présente <a href="https://github.com/madec-project/ezmaster" target="_blank" rel="external">l’interface d’administration</a> qui permet créer et gérer (modification, suppression) les instances et de les configurer.</p>
<img src="/2015/03/13/Presentation/ezmaster-edit-instance.png">
<p>Figure 1 : interface d’administration et outil de paramétrage d’un rapport</p>
<p>À partir de données structurées en UTF8 et mises à disposition dans des fichiers de différents formats (csv, tsv ou XML) la configuration consiste à :</p>
<ul>
<li>sélectionner les champs à afficher ou à utiliser pour les calculs,</li>
<li>réaliser les calculs (somme, pourcentage, etc.),</li>
<li>choisir le type de graphique (histogramme, camembert, barres horizontales) et les paramétrer (couleurs, seuil, légende).</li>
<li>définir les facettes associées à chaque graphique.</li>
<li>déterminer l’affichage des notices.</li>
</ul>
<h2 id="Fonctionnalités_d’exploration">Fonctionnalités d’exploration</h2><p>À ce stade du développement, l’outil offre un rapport web constitué d’une page d’accueil présentant le tableau de bord et un index sous forme de menu à partir desquels il est possible de naviguer vers des informations plus détaillées et les notices correspondantes. Les facettes complètent les graphiques en proposant des filtres complémentaires pour mettre en évidence d’autres résultats. La figure 2 présente un des graphiques du tableau de bord avec les facettes associées et le corpus sous forme de tableau.</p>
<img src="/2015/03/13/Presentation/ezvis-dashboard.png">
<p>Figure 2 : Détail du tableau de bord</p>
<p>La suite du développement prévoit d’autres types de représentations comme des cartes, des réseaux ainsi que des fonctionnalités comme l’export ou la sécurisation de l’interface.</p>
<h1 id="Exemples_d’usages">Exemples d’usages</h1><p>Le principal besoin auquel répond ezVIS est la création de tableaux de bord mettant en évidence des informations de type bibliométrique. La facilité de création et de configuration d’une instance est l’un des avantages évidents de cet outil qui autorise la multiplication des tableaux de bord. Toujours dans le domaine des corpus de notices bibliographiques, un tel outil permet également de vérifier le contenu et la qualité des données.<br>Enfin, le fait qu’il s’agisse d’un logiciel libre autorise son appropriation au-delà de la production scientifique comme par exemple pour l’analyse de fichiers de « logs » dans le cadre du projet ezPAARSE3.</p>
<h2 id="Connaissance_de_la_production_scientifique_liée_à_une_thématique">Connaissance de la production scientifique liée à une thématique</h2><p>À partir d’un corpus constitué thématiquement, il est possible de mettre en évidence des éléments concernant la production scientifique, son évolution ainsi que la répartition en sous-thématiques, par exemple. La figure 3 illustre l’utilisation d’un graphique de type camembert qui représente la répartition thématique du corpus. Il est possible en cliquant sur une partie du graphique d’avoir accès à la liste des résultats correspondants. Il est également possible d’utiliser les facettes pour mettre à jour le graphique de manière dynamique le graphique.</p>
<img src="/2015/03/13/Presentation/ezvis-facets.png">
<p>Figure 3 : Mise en évidence de l’utilisation des facettes pour filtrer les résultats</p>
<h2 id="Exploration_du_contenu_d’un_corpus">Exploration du contenu d’un corpus</h2><p>Il peut être utile avant la mise en ligne de notices bibliographiques de vérifier la qualité des données ou leur homogénéité lorsque les origines et les formats sont différents. La figure 4 illustre l’exploration du corpus mis à disposition par un éditeur dans le cadre d’un projet.</p>
<img src="/2015/03/13/Presentation/ezvis-biblio-corpus.png">
<p>Figure 4 : Exploration d’un corpus de notice bibliographique</p>
<h2 id="Analyse_des_consultations_de_ressources_en_ligne">Analyse des consultations de ressources en ligne</h2><p>ezVIS peut être utilisé pour réaliser des comptages d’autres types d’informations structurées et le choix d’un logiciel libre favorise fortement l’élargissement de l’usage. La figure 5 illustre l’utilisation d’ezVIS pour la mise en évidence du détail des consultations.</p>
<img src="/2015/03/13/Presentation/ezvis-logs.png">
<p>Figure 5 : Détail des consultations de ressources numériques</p>
]]></content>
<summary type="html">
<![CDATA[<h1 id="Introduction">Introduction</h1><p>ezVIS est le résultat d’une réflexion menée au sein de l’Inist-CNRS sur le besoin d’un outil de mi]]>
</summary>
<category term="ezmaster" scheme="http://madec-project.github.io/tags/ezmaster/"/>
<category term="ezvis" scheme="http://madec-project.github.io/tags/ezvis/"/>
<category term="présentation" scheme="http://madec-project.github.io/tags/presentation/"/>
<category term="vsst" scheme="http://madec-project.github.io/tags/vsst/"/>
</entry>
<entry>
<title><![CDATA[Bienvenue]]></title>
<link href="http://madec-project.github.io/2015/02/10/Bienvenue/"/>
<id>http://madec-project.github.io/2015/02/10/Bienvenue/</id>
<published>2015-02-10T14:10:04.000Z</published>
<updated>2015-04-15T16:14:02.000Z</updated>
<content type="html"><![CDATA[<p>Ce blog a pour sujet le projet MADEC, et donc ses outils.</p>
<p>Ils sont tous hébergés sur <a href="https://github.com/madec-project/" target="_blank" rel="external">Github</a>.</p>
<p>Le rythme de publication n’est pas encore fixé.<br>Il dépendra surtout de nos disponibilités.</p>
<p>À bientôt, donc.</p>
]]></content>
<summary type="html">
<![CDATA[<p>Ce blog a pour sujet le projet MADEC, et donc ses outils.</p>
<p>Ils sont tous hébergés sur <a href="https://github.com/madec-project/" t]]>
</summary>
<category term="blog" scheme="http://madec-project.github.io/tags/blog/"/>
<category term="général" scheme="http://madec-project.github.io/tags/general/"/>
</entry>
</feed>