Sprint Review #15W38: peaufinage

Pour ce quinzième et dernier sprint, nous devions terminer, polir, affiner, régler, en un mot peaufiner l’application ezVIS.

Tâches

  • 19 tâches prévues
  • 17 tâches terminées
  • plus de 43 points de complexité prévus
  • 30 points de complexité effectués

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.

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.

Dette technique

La dette technique est la distance à parcourir, en termes de développement, pour parvenir au programme le plus cohérent et le plus à facile maintenir.

Les actions suivantes ont réduit cette dette.

Correction de connexionURI en connectionURI

Le programme et ses options étant intégralement en anglais, il nous semblait incohérent de laisser une option avec une orthographe française: connexionURI.

GitHub : #79

Préparer ezvis à une évolution de castor-core

Le cœur d’ezVIS est un module nommé castor-core dont nous savons qu’il va évoluer (notamment les URL utilisés par ezVIS). Les routes (ou URL) fournies par castor-core version 2 seront encore disponibles dans sa version 3, mais préfixées par /-/v2.
Nous avons donc changé tous les appels à ces URL dans ezVIS.

GitHub : #81

Figer les dépendances ou pas?

Pour éviter des surprises lors des futures installations d’ezVIS, au cas où un des modules dont il dépend ne respecterait pas le semantic versioning, nous avons pensé qu’il serait utile de figer les numéros de version de ces dépendances.

Il existe justement une commande du gestionnaire de modules de node qui le permet: npm shrinkwrap.
Malheureusement, celle-ci ne distingue pas encore 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’ezvis dès qu’on utilise shrinkwrap (le rendant ainsi obligatoire).
La feuille de route de npm 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.

GitHub : #82 #85

Interface

Icones enlevées

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).

Nous avons donc supprimé ces icones de la page.

GitHub : #69

Couleur des graphes superposés

Jusqu’à présent, le graphe superposé avait une couleur fixe : le jaune.

Le graphe superposé jaune

Si cette couleur convient la plupart du temps, nous avons souhaité donner le choix au gestionnaire en ajoutant l’option color à la partie overlay de la configuration :

1
2
3
4
5
"overlay": {
"label": "Taux de citation normalisé",
"flying": ["normalizeCitationRatio"],
"color": "red"
},

GitHub : #73

Corriger l’authentification derrière un reverse proxy

ezVIS peut être configuré pour n’autoriser l’accès qu’à un utilisateur particulier.
Dans notre établissement, les instances d’ezVIS sont derrière un reverse proxy (ou proxy inverse) 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.
Nous avons donc corrigé ezVIS pour qu’il tienne compte de l’entête HTTP x-forwarded-for qui, elle, contient bien l’adresse IP du visiteur (pas celle du proxy).

GitHub : cd94d07

Installation automatique avec SCCM sous Windows

Nous voulions pouvoir installer automatiquement, via le logiciel SCCM, ezVIS sur plusieurs postes Windows à la fois, dans les services de notre établissement.
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.

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.

ezMaster

Remplacement de SlickGrid par un tableau HTML

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, …) :

La technologie utilisée, SlickGrid, 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.

GitHub : ezmaster#2

Remplacer le _ par un - dans l’URL publique

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.
Dorénavant, et pour mieux satisfaire les normes sur les URL, ces séparateurs seront des tirets.

GitHub : #80

Profitez!

Pour profiter des améliorations présentées:

1
$ npm install --production -g ezvis

Sprint Review 15W19: Exports

Voici le support de la Sprint Review n°11, concernant les exports.

Tâches

  • 19 tâches prévues
  • 16 tâches effectuées (dont 11 avaient été prévues)
  • 24 tâches au total
  • plus de 38 points de complexité prévus
  • 38 points de complexité effectués (un peu plus que la moyenne)

VSST 2015

ezVIS a été présenté à VSST 2015 par Anne-Marie BADOLATO, le 13 mai 2015.
À 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 et de la tester dans les temps.

forever

En effet, une des différences entre la machine de production et la machine d’intégration est que la machine de production utilise forever pour s’assurer qu’ezmaster est relancé automatiquement si jamais il plante.

Ce qui a retardé l’utilisation de la machine de production est qu’ezmaster s’est révélé incapable, quand il était lancé par forever, de créer des fichiers temporaires dans le répertoire courant. Ceci a donné lieu à une correction d’ezmaster, mais pas assez tôt pour que ce soit la machine de production qu’on utilise.

ezMaster

En plus de la correction apportée pour fonctionner avec forever, ezMaster a connu plusieurs changements:

  1. une optimisation de la fonction reverse-proxy, ce qui a éliminé les ralentissements observés après quelques utilisations des instances qu’ezmaster surveillait 11fba01,
  2. l’affichage de l’app utilisée par une instance, et de sa version #30
  3. 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 #32
  4. le numéro de version d’une instance a été rendu optionnel (dans le but de simplifier les URL résultantes) #18

ezVIS

La plupart des tâches de ce sprint étaient liées à ezvis.

Bug

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 selector, mais aussi maxItems et threshold) n’étaient pas appliquées.
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.

Toutefois, cette correction ne touche que selector 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.

Voir issue #39.

Améliorations mineures

  • #38: 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 horizontalbars), pour les histograms, et pour les pies. Pour ce dernier, ce ne sont pas les labels eux-mêmes qui sont raccourcis, mais leur équivalent dans la légende du camembert,
  • #31: la référence à amCharts qui apparaissait comme un petit lien js Charts 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,
  • #28: 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 removeLabels: true,
  • #37: nous avons ajouté un exemple de configuration ezvis pour des fichiers .tsv dans le showcase.

Chargement de .TSV

Après l’écriture de la mini-configuration de déclaration du loader pour charger des .tsv minimaux, nous avons voulu créer un exemple réel de chargement de fichiers tirés du WoS (Web of Science).
Il s’est trouvé que les fichiers tels quels ne se chargeaient pas dans ezvis, même après avoir utilisé des options peu courantes de castor-load-csv.

Après investigation, le nœud du problème se trouvait dans la bibliothèque csv-string qui analyse le TSV dans castor-load-csv. 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 les tests proposés pour plus de détails.

Exports

Le thème de ce sprint était l’export en général. Il se spécialise en:

  • export des images des graphiques
  • export des documents associés aux graphiques
  • export des données des graphiques (ce n’était pas demandé)

graphiques

amCharts

Les graphiques horizontalbars, histogram, pie et map utilisent la même bibliothèque qui vient d’être mise à jour. 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.

Ces graphiques simples sont donc désormais exportables à partir d’un menu présent en haut à droite. Ils permettent:

  • l’annotation (dessin sur l’image, à la souris),
  • la sauvegarde de l’image (avec son éventuelle annotation), aux formats JPG, PNG, SVG et même PDF,
  • 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.

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 à amCharts.

cytoscape

Nous avions reperé qu’il existait aussi une fonction d’export dans la bibliothèque Cytoscape 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.

Le menu d’export des réseaux se résume donc à un bouton qui exporte une image PNG.

Pour le détails des exports des graphiques, voir le ticket #36.

documents

L’export des documents était déjà présent dans ezvis, 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.

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 #20.

http dans les documentFields / nosave

Lors de la dernière Sprint Review, nous avions montré un usage des flyingFields qui était certes visuel, mais qui s’est avéré non pertinent: nous modifiions à la volée (flying) les identifiants du graphique.
Ce faisant, nous avions rendu les filtres inopérants (cliquer sur un pays ne retournait plus les documents publiés dans ces pays).
Cela n’invalide pas l’utilité des flyingFields, puisque leur utilisation reste valable quand on modifie les valeurs projetées dans les graphiques (par exemple, pour afficher un taux de citation par année, et pas seulement un nombre de citations).

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 corpusFields) depuis les documentFields.

Comme nous ne voulons pas surcharger la base en dupliquant des tables dans chaque document, nous avons introduit une propriété pour ces documentFields que nous voulons utiliser, mais pas sauvegarder dans la base: nosave. Il suffit de positionner cette propriété à true pour que le champ ne soit pas sauvegardé mais tout de même disponible pour le calcul d’autres documentFields.

Voir #40, et nosave.

JBJ

zip

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.

Exemple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"publiPerYear": [
{"_id":"2007","value":538},
{"_id":"2008","value":577},
{"_id":"2009","value":611},
{"_id":"2010","value":548},
{"_id":"2011","value":567},
{"_id":"2012","value":608}],

"citationsPerYear": [
{"_id":"2007","value":7681},
{"_id":"2008","value":5479},
{"_id":"2009","value":5043},
{"_id":"2010","value":3698},
{"_id":"2011","value":2927},
{"_id":"2012","value":2049}]
}

En divisant citationsPerYear[i] par publiPerYear[i]:

1
2
3
4
5
6
{
"zip": [ "citationsPerYear", "publiPerYear" ],
"foreach": {
"compute": "citationsPerYear / publiPerYear"
}

}

Dans cet exemple, "zip": [ "citationsPerYear", "publiPerYear" ] renvoie, en JBJ:

1
2
3
4
5
6
7
[
{"_id":"2007","citationsPerYear":7681, "publiPerYear": 538},
{"_id":"2008","citationsPerYear":5479, "publiPerYear": 577},
{"_id":"2009","citationsPerYear":5043, "publiPerYear": 611},
{"_id":"2010","citationsPerYear":3698, "publiPerYear": 548},
{"_id":"2011","citationsPerYear":2927, "publiPerYear": 567},
{"_id":"2012","citationsPerYear":2049, "publiPerYear": 608}]

Voir JBJ#8

getproperty

De plus, il manquait une action capable de retourner la valeur d’un tableau associatif correspondant à une clé:

Ex:

1
2
3
4
{
"set": [ "a", "b", "c" ],
"getProperty": "0"
}

renvoie

1
"a"

et

1
2
3
4
{
"set": { "a": 0, "b": 1, "c":2 },
"getProperty": "b"
}

renvoie

1
1

Voir JBJ#9

commande ezref

La version 1.0.0 d’ezref devait être lancée de manière non triviale quand ce n’était pas par ezmaster. Nous avons donc publié la version 1.1.0 qui ajoute une commande ezref quand on l’installe via:

1
$ npm install -g ezref

Installation / mise à jour

Après l’écriture de tests via dalekjs, l’installation d’ezvis ramenait des modules utiles uniquement pour le développement (pour ces tests).

Pour éviter de grossir les fichiers d’ezvis, on peut l’installer en utilisant l’option --production:

1
$ npm install --production -g ezvis

C’est la même commande qui permet de mettre à jour ezvis en installant la dernière version à la place de l’éventuelle version installée, quelle qu’elle soit.

À ce jour, c’est la version 6.6.0.

Sprint Review #15W09: stabilisation

Blog

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 Markdown, sauvegardés sur GitHub.

Nous avons choisi un générateur de site statique nommé Hexo.

J’ai transcrit le poster soumis (et accepté?) à VSST.

J’ai aussi commencé un article sur le minimum à savoir pour configurer un ezVIS.

J’en profite pour noter les sujets (et les liens) à présenter lors de cette sprint review numéro 9 qui expose les tâches menées à bien depuis la semaine 9 de 2015.

machine virtuelle

Nous avons eu quelques soucis de requêtes répondant bizarrement sur la machine virtuelle hébergeant ezmaster et ezVIS. Nous avons d’abord cru qu’il s’agissait d’un problème de mémoire (tant le swap était peu utilisé).

La mémoire vive de la machine a donc été portée de 2Gio à 8Gio.

ezmaster

L’application castor-admin, qui sert à administrer des instances d’applications (ou apps) basées sur castor-core (comme le sont ezvis et idefix) a été renommée en ezmaster, que ce soit sur GitHub ou sur npm.

board.inist.fr

Nous avons configuré ezmaster sur la machine virtuelle pour que le nom de domaine board.inist.fr et ses sous-domaines puissent servir à publier une instance d’ezvis.

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.

Les deux premières instances sont aussi disponibles dans le dépôt vitrine: showcase.

Isabelle y a aussi ajouté une étude sur les séries télévisées.

dalekjs

J’ai commencé à mettre en place des tests, non pas unitaires, mais de comportement de l’application: en utilisant dalekjs, on peut écrire des scénarios de test de l’application.

Lancement du serveur à tester:

1
2
$ cd ~/dev/castorjs/ezvis
$ node cli test/dataset/test2

Lancement des tests:

1
2
$ cd ~/dev/castorjs/ezvis
$ dalek test/test2.js

Résultat espéré:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Running tests
Running Browser: PhantomJS
OS: linux unknown 64bit
Browser Version: 1.9.8
RUNNING TEST - "Has data"
▶ OPEN http://localhost:20002/documents.html
▶ WAITFOR Interrupted by timeout
✔ EXISTS "Showing 1 to 4 of 4 entries"
✔ TEXT "Showing 1 to 4 of 4 entries"
✔ TEXT "1906" in first line
✔ TEXT "Kurt Gödel" in first line
▶ CLICK #dataTables-documents tr:nth-child(4) td:first:first-child a
✔ TITLE Correct
5 Assertions run
✔ TEST - "Has data" SUCCEEDED
RUNNING TEST - "Good display"
▶ OPEN http://localhost:20002/display/Z5OAoW.html
✔ TITLE Correct
✔ NUMBEROFELEMENTS 3 fields displayed
✔ TEXT Name is "Douglas Hofstadter"
3 Assertions run
✔ TEST - "Good display" SUCCEEDED
8/8 assertions passed. Elapsed Time: 10.11 sec

JBJ

  • on a évité d’écrire une action mapArray inutile (jbj#5)
  • j’ai ajouté l’action substring (jbj#6), plus simple et intuitive que l’utilisation successive de truncate et shift.

ezVIS

J’ai commencé à me servir des fonctionnalités de GitHub qui ne sont pas forcément incluses dans git: le système d’issues et de milestones.

J’ai donc placé un jalon pour ce sprint, en lui donnant une date. C’est la milestone “Sprint #15W09: stabilization” d’ezvis:

  • changer le label “Search” en “Filter” dans le page /documents.html #3
  • enlever le lien vers les champs depuis le tableau de bord #4
  • affecter une couleur à chaque champ d’un réseau inter-champs #5
  • corriger le bug d’export CSV vide de /documents.html #6
  • ajouter un seuil en-deça duquel on rassemble les valeurs dans le camembert #7
  • corriger les réseaux où les arcs sont dirigés #8
  • donner la possibilité de modifier la largeur de la colonne de gauche dans /display.html #9
  • restaurer la configuration des légendes #10
  • donner la possibilité d’afficher aussi les années vides dans les histogrammes #11
  • donner la possibilité d’afficher des labels plus courts sur les barres horizontales #12
  • verbaliser les codes des pays sélectionnés dans les cartes, afin de rendre les filtres plus lisibles #13
  • faire commencer l’axe des ordonnées à zéro dans les histogrammes #14
  • déterminer si on peut utiliser des chaînes de caractères sur l’axe des X pour créer des diagrammes à bulles #15
  • restaurer la configuration des couleurs #16

Présentation d'ezVIS

Introduction

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.

ezVIS

L’Inist-CNRS propose à travers son service Appui au pilotage 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 ezVIS 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.

Configuration des rapports

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.

Par ailleurs, les instances peuvent être gérées grâce à une interface à la prise en main aisée.
La figure 1 présente l’interface d’administration qui permet créer et gérer (modification, suppression) les instances et de les configurer.

Figure 1 : interface d’administration et outil de paramétrage d’un rapport

À 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 à :

  • sélectionner les champs à afficher ou à utiliser pour les calculs,
  • réaliser les calculs (somme, pourcentage, etc.),
  • choisir le type de graphique (histogramme, camembert, barres horizontales) et les paramétrer (couleurs, seuil, légende).
  • définir les facettes associées à chaque graphique.
  • déterminer l’affichage des notices.

Fonctionnalités d’exploration

À 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.

Figure 2 : Détail du tableau de bord

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.

Exemples d’usages

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.
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.

Connaissance de la production scientifique liée à une thématique

À 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.

Figure 3 : Mise en évidence de l’utilisation des facettes pour filtrer les résultats

Exploration du contenu d’un corpus

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.

Figure 4 : Exploration d’un corpus de notice bibliographique

Analyse des consultations de ressources en ligne

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.

Figure 5 : Détail des consultations de ressources numériques