Greboca  

DLFP - Dépêches  -  Inishell: générateur d'interfaces graphiques

 -  Janvier 2022 - 

Inishell est un générateur d’interfaces graphiques sous licence GPLv3 pour la configuration de logiciels utilisant des fichiers de configuration au format INI, écrit en C++ / Qt.

Sommaire

Pourquoi?

Nous avons développé une première version il y a presque dix ans de cela pour la configuration de nos modèles numériques du manteau neigeux (eux aussi en GPL ou LGPL version 3). En effet, l’une des difficultés principales des utilisateurs de modèles numériques scientifique est le choix des options de configuration qui peut avoir un impact très important sur leurs performances. Ces modèles requièrent un très grand nombre de paramètres de configuration (plus de 350 paramètres pour notre modèle Snowpack et son pré-processeur MeteoIO) qui doivent être choisis en toute connaissance de cause. Ceci se traduit directement par un grand nombre de demandes d’aide nous parvenant, leur traitement représentant de l’ordre de 75% d’un temps plein alors que notre équipe de développement atteint au maximum trois temps pleins.

Évidement, l’idéal serait que les utilisateurs lisent la documentation détaillée que nous fournissons avec nos modèles. Ce n’est malheureusement en général pas le cas, et la complexité de configuration des modèles numériques signifie que même des utilisateurs habituels vont générer des configurations moins performantes qu’attendu. La solution réside dans l’élaboration d’une interface graphique, afin d’accompagner les utilisateurs dans la configuration du modèle, de leur fournir des liens directs vers les pages de documentation et d’offrir une vue d’ensemble des fonctionnalités et capacités du modèle.

Malheureusement, créer et maintenir une interface graphique pour un très grand nombre d’options de configuration (qui plus est pouvant changer assez souvent, des options étant renommées et de nouvelles options ajoutées) représente une charge de travail inaccessible à une équipe de développement déjà insuffisante. Enfin, les compétences requises pour une telle tâche sont en général différentes des compétences des développeurs de modèles numériques…

Approche

Approche retenue

L’approche choisie par Inishell est basée sur quelque chose comme les modèles d’interface déclarative, en simplifiant énormément le concept du fait du scénario d’usage choisi : pas de mise en page complexe, peu de diversité des éléments graphiques (il s’agit principalement d’entrer un choix parmi une liste, un chemin ou nom de fichier, une valeur numérique entière ou réelle). L’accent est mis sur le type d’entrée attendu de la part de l’utilisateur, qui générera un widget graphique (boite de saisie, boite déroulante, etc) qui lui-même émettra le bon code dans le fichier INI. La spécification des paramètres attendus de la part de l’utilisateur est faite via un fichier XML qui donne la clef de configuration, le type de donnée, quelques conditions permettant de valider l’entrée et un texte d’aide (pouvant contenir des hyperliens cliquables).

Vue d’ensemble d’Inishell

Il est donc possible d’avoir autant de fichiers XML que souhaité, et autant de modèles numériques que souhaité. Évidement, il est aussi possible de l’utiliser de la même façon pour générer des fichiers INI pour d’autres types de logiciels (par exemple, pour générer un php.ini). À l’ouverture d’Inishell, l’utilisateur doit choisir pour quelle application générer un fichier de configuration (zone 1 sur la capture d’écran). Ceci déclenche la lecture du fichier XML et la génération des widgets dans la zone 2, ou l’utilisateur peut ensuite entrer sa configuration. Celle-ci sera ensuite enregistrée dans un fichier INI, qui peut bien évidement être relue par Inishell (toute clef de configuration non reconnue, ainsi que les commentaires, sera conservée même si elle ne sera pas affichée).

Exemple de deux zones d’entrées et une frame
À titre d’exemple, la capture d’écran montre le contenu du fichier XML permettant de générer une frame avec deux zones de saisie (un chiffre réel et un fichier). La validation des entrées utilisateur se fait via le type de donnée, les limites min/max ainsi que des expressions régulières. Il est enfin possible de lancer une application « consommant » ce fichier INI directement depuis Inishell (ou des options en ligne de commande seront aussi fournies et la sortie terminale capturée et affichée dans Inishell).
Entrée des options en ligne de commande d’une application tierce qui sera lancée depuis Inishell

Conclusion

La version d’il y a dix ans (en Java) commençait doucement à avoir fait son temps : Java est de moins en moins disponible par défaut sur les machines de nos utilisateurs (voire vient avec ses propres bugs), il n’était pas possible de lancer des applications en ligne de commande depuis et le code n’avait jamais eu l’attention qu’il aurait dû avoir (suite à l’accident de ski de la stagiaire de l’époque!). Une réécriture complète, native et autosuffisante s’imposait donc.

Nous sommes très satisfaits de cette nouvelle version en Qt, qui nous a permis de corriger tous les défauts de l’ancienne version. Inishell est maintenant agréable d’utilisation, correctement intégrée dans les environnements des utilisateurs et pouvoir lancer les modèles directement depuis l’interface graphique est un vrai plus (ceci évite d’avoir la tentation de repasser par un éditeur de texte pour modifier le fichier INI). Nous l’utilisons maintenant quasi exclusivement (aux dépens de la console) et nos utilisateurs se laissent aussi convaincre.

Il reste malgré tout des choses en chantier : quelques bugs mineurs mais tout de même embêtants (dans certains widgets, le curseur d’édition se replace en fin de ligne après chaque appui de touche) et quelques questions plus fondamentales : les fichiers XML sont pour l’instant distribués avec Inishell, alors qu’il faudrait les distribuer avec les modèles utilisateurs. Mais dans ce cas, quelle est la bonne stratégie pour retrouver tous les fichiers XML à lire (ainsi que des fichiers XML qui appellent via un « include » le fichier XML d’un autre outil numérique). Une évolution probable sera le support de formats autres qu’INI et que d’autres outils se basent eux aussi sur Inishell!

Commentaires : voir le flux Atom ouvrir dans le navigateur

par Mathias Bavay, palm123, Benoît Sibaud

DLFP - Dépêches

LinuxFr.org

Tribune April : Techsoup et Solidatech, instruments d'influence

 -  27 mars - 

Après une première position sur Solidatech en 2020, l'April a passé à nouveau du temps pour étudier et comprendre la place des structures Solidatech (...)


TuxRun et le noyau Linux

 -  27 mars - 

Il y a quelques années, je vous avais présenté TuxMake, un utilitaire pour faciliter la (cross-)compilation du noyau Linux supportant une grande (...)


Retour d’expérience sur l’utilisation de GrapheneOS (ROM Android libre)

 -  18 mars - 

Suite à la dépêche Comparatif : GrapheneOS vs LineageOS, je souhaitais faire part d’un retour d’expérience sur l’utilisation de GrapheneOS sur un (...)


Ubix Linux, le datalab de poche

 -  16 mars - 

Ubix Linux est une distribution Linux libre et open-source dérivée de Debian.Le nom « Ubix » est la forme contractée de « Ubics », acronyme issu de (...)


Open Food Facts : récit d’un contributeur

 -  15 mars - 

Récit de mon aventure en tant que contributeur pour le projet Open Food Facts, la base de donnée alimentaire ouverte et collaborative, où je suis (...)