problème avec logiciel chemeq

Accueil Forums Programmation WIMS Programmation d’exercices OEF problème avec logiciel chemeq

Étiqueté : 

Vous lisez 5 fils de discussion
  • Auteur
    Messages
    • #7628
      Jérôme BAILLEUL
      Participant
      Up
      0
      Down
      ::

      Bonjour à tous,

      J’ai un problème avec l’affichage d’un exercice avec les slib chemistry/chemeq_tex , chemeq_components et chemistry/chemeq_el

      Je les utilisais dans un exercice de chimie basait sur le travail de  G. Khaznadar qui fonctionnait très bien l’an dernier

      Quelqu’un pourrait-il m’aider ?

      Voici le code :

      
      
      \title{Ajuster des demi-equations rédox}
      
      \integer{nreac=wims(recordcnt redox_mini.dat)}
      \text{index=shuffle(\nreac)}
      \integer{i1=\index[;1]}
      \text{reac1=wims (record \i1 of redox_mini.dat)}
      
      \text{vide=}
      \text{r1=\reac1[;1]}
      \text{titre1=\reac1[;3]}
      \text{r1tex=slib(chemistry/chemeq_tex \r1)}
      
      \text{r1_sep=slib(chemistry/chemeq_components \r1)}
      
      \text{oxy=\r1_sep[1;1]}
      \text{oxytex=slib(chemistry/chemeq_tex \oxy)}
      
      \text{red=\r1_sep[2;1]}
      \text{redtex=slib(chemistry/chemeq_tex \red)}
      
      \text{demi_eq_Buttons=slib(chemistry/chemeq_components \r1, htmlbuttons 5,shuffle,[extra])}
      
      \integer{oxyel=slib(chemistry/chemeq_el \r1)}
      
      \text{r1_sep2=wims (replace ; by , in \r1_sep )}
      
      \integer{posH2O=position(H2O_(l), \r1_sep2)}
      \integer{posH=position(H^+_(aq), \r1_sep2)}
      
      \integer{rep1=2}
      \integer{rep2=2}
      
      \if{\posH2O > 0}{
      \integer{rep1 = 1}}
      \if{\posH > 0}{
      \integer{rep2 = 1}}
      
      \integer{rep0=\reac1[;4]}
      
      \text{script1=<script type="text/javascript">
      function getInput(n){
      f=window.document.forms[0];
      for(i=0; i<f.elements.length; i=i+1){
      if (f.elements.name=="reply"+n) {
      return f.elements;
      }
      }
      return null;
      }
      function appendToInput(n,msg){
      var i=getInput(n);
      i.value=i.value+msg+' ';
      i.focus();
      }
      </script>
      }
      
      \steps{}
      
      \text{debug=0}
      
      \statement{
      \r1
      <br>
      \r1tex
      <br>
      \r1_sep
      <br>
      \oxy
      
      \if{\debug=1}{
      DEBUG : \debugstr
      <hr>
      }
      \script1
      <div class="avert">
      <span class="titre">AVERTISSEMENTS</span>
      <ul>
      <li>Il est indispensable de faire l'exercice sur un <b>brouillon</b> avant de répondre aux questions</li>
      <li>On sera particulièrement <b>vigilant à l'écriture des chiffres</b> sur le brouillon: certains chiffres sont
      en indice alors que d'autres resteront en taille normale. (Remarque, à la dernière question, l'ordinateur
      ne respecte pas cette notation, on sera donc d'autant plus vigilant et on pensera à regarder la solution.)</li>
      </ul>
      </div>
      
      <div class="ins">
      Voici un couple oxydant/réducteur \(\oxytex)/\(\redtex) (\titre1)
      On souhaite écrire la demi-équation de ce couple.
      </div>
      <div class="quest">
      <ol>
      <li>Les éléments chimiques différents de l'oxygène et de l'hydrogène sont-ils ajustés ?
      <br> \embed{reply 1}
      </li>
      <li>Faut-il ajouter de l'eau \(H_2O) pour ajuster cette demi-equation ?
      <br> \embed{reply 2}
      </li>
      <li>Faut-il ajouter l'ion hydrogène \(H^+) pour ajuster cette demi-equation ?
      <br> \embed{reply 3}
      </li>
      <li>Combien d'électrons faut-il ajouter pour ajuster cette demi-équation ?
      <br> \embed{reply 4}
      </li>
      <li>
      Ecrire la demi-réaction du couple oxydant-réducteur<br>
      \embed{r5,80}
      <br><span style="font-size:80%; color:grey;">Les boutons ci-dessous permettent d'écrire plus facilement la demi-équation, mais pensez aux coefficients.</span>
      <br>\demi_eq_Buttons
      </li>
      </ol>
      </div>
      }
      
      \answer{element}{\rep0; oui, non}{type = menu}
      \answer{Eau}{\rep1; oui, non}{type = menu}
      \answer{H+}{\rep2; oui, non}{type = menu}
      \answer{electrons}{\oxyel}{type = numeric}
      \answer{}{\r1}{type = chemeq}
      
      \solution{
      La demi équation du couple \(\oxytex)/\(\redtex) (\titre1) est donc :
      <br>
      <br> \(\r1tex)
      
      }
      
      
    • #7635
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      A quoi sert de mettre un texte d’exercice qui appelle des données extérieures et donc n’est pas testable ?

      Merci de mettre un exercice minimal (j’insiste, minimal, pas pour donner à des élèves)  qui montre le problème et est autosuffisant (et cela est vrai dans toutes les occasions). J’ai vérifié que les exemples des slib utilisant chemeq fonctionnent.  C’est tout ce qu’on peut faire.

      Bernadette

    • #7682
      Stéphane Mouton
      Participant
      Up
      0
      Down
      ::

      J’ai déployé et je maintiens l’instance où a eu lieu le problème et voici ce que j’ai trouvé

      Pour les plus pressés (i.e. TL;DR)

      • Le problème n’est pas lié au contenu de l’exercice : il fonctionne tel quel sur d’autres instances.
      • L’origine du problème se situe dans une mise à jour de l’instance :
        • Il n’a pas lieu sur d’autres instances avec la même version (4.24)
        • Le bug n’est pas apparu avant la mise à jour : en 4.22 (en 2022) il semble que ça fonctionnait
      • Le bug de déploiement est corrigé et les détails sont ci-après.

      Diagnostic

      Symptôme principal : Les formules chimiques ne s’expriment pas dans le module H5/chemistry/redox (« Combinaison de demi-réactions »).

      En inspectant le code HTML de la page, on s’aperçoit que la zone qui devait contenir la formule, par exemple en dessous de « Couple oxydant », est vide.

      En comparant avec d’autres instances WIMS, on déduit que cette zone de la page devrait contenir une balise < class= »wims_mathml »>

      Comme le fonctionnement de MathML est normal ailleurs dans l’instance c’est plutôt du côté de la génération de l’exercice que ça se passe. La ligne en question est la suivante :

      &lt;b&gt;Couple oxydant (\oxytitre)&lt;/b&gt; :&lt;br&gt;\(\oxytex)

      On en déduit que oxytex n’est pas convenablement généré. Un peu plus haut dans l’exercice, on trouve sa création avec la commande suivante :

      \text{oxytex=slib(chemistry/chemeq_tex \oxyr)}

      Le problème semble se poser avec la commande chemex_tex de la slib chemistry.

      À ce stade, j’examine les logs présents dans le dossier HOME_WIMS/log et je ne trouve rien :

      • Pas d’erreur avec mention de chemeq_tex (ni chemeq)
      • Pas d’erreur pour le module H5/chemistry/redox

      Que faire ?

      Dans la page de Documentation technique de WIMS (module help/wimsdoc), on peut trouver la liste des slibs installées. Notamment, il y a une page pour vérifier le bon fonctionnement de chemex_tex (module=help/wimsdoc.en&amp;+special_parm=slib&amp;+slibdet=chemistry/chemeq_tex#slib)

      Je constate que la commande ne fonctionne pas car les résultats sont vides.

      Je cherche le script chemeq_tex et il se trouve dans

      HOME_WIMS/public_html/scripts/slib/chemistry/chemeq_tex

      Le script appelle la commande chemeq avec la ligne suivante :

      slib_out=!exec chemeq $wims_read_parm

      Est-ce que chemeq fonctionne ?

      Il s’agit du script Perl dans HOME_WIMS/public_html/bin/chemeq

      Ce script fait appel à une commande chemeq dans la ligne suivante :

      my $pid = open3(\*CHLD_IN, \*CHLD_OUT, \*CHLD_ERR, « bin/$launcher ../other/bin/chemeq ») or die « open3() failed $! »;

      L’exécution du script échoue avec le message suivant, précisément sur la ligne précédente

      open3: exec of bin/wrap..exec ../other/bin/chemeq failed: No such file or directory at ./chemeq line 9.

      Le script attend une commande chemeq dans le dossier HOME_WIMS/other/bin … et cette commande est absente.

      Correction du problème

      Il existe bien une commande chemeq dans HOME_WIMS/src/Misc/chemeq , compilée lors de l’installation. Plus surprenant, cette commande est également présente dans /usr/bin

      La création du lien symbolique suivant permet de résoudre le problème :

      /usr/bin/chemeq -&gt; HOME_WIMS/other/bin/chemeq

      Il s’agit cependant d’une solution temporaire car elle n’est pas compatible avec une mise à niveau et sa compilation associée.

      Conclusion et actions

      Conclusions en tant que gestionnaire d’instance

      Que s’est-il passé lors de la mise à jour de 4.22 à 4.24 ?

      Ai-je lancé le script de compilation en tant que root, malgré l’avertissement ? L’historique des commandes semble dire que non.

      Le script de compilation comporte t-il une erreur ? Mais alors pourquoi les autres instances n’ont-elles pas ce problème ?

      Je vais enquêter en effectuant les actions suivantes :

      • Installation d’une version 4.22 de WIMS sur le même environnement
      • Exécution manuelle de la mise à jour vers 4.24
      • Analyse pour déterminer si le problème se reproduit ou pas

      Humble suggestion et question DEVOPS aux mainteneurs (DEVs) du code WIMS de la part d’un gestionnaire (OPS) d’instances

      J’ai peut-être chaussé des lunettes de bois mais jusqu’à maintenant je n’étais jamais tombé dans l’instance que je gère sur la page de documentation technique de WIMS. Je n’ai d’ailleurs qu’une version en anglais.

      Ce serait utile pour les gestionnaires d’instance d’avoir un lien vers ce module dans l’interface d’administration.

      Ce serait encore mieux d’avoir un lien vers la liste des slibs installées dans l’onglet de vérification de l’installation. De la sorte, on peut rapidement déterminer si une slib ne fonctionne pas.

      Par ailleurs, lors de mon diagnostic, je n’ai trouvé aucune information d’erreur d’exécution de la slib dans les logs. Aurais-je pu régler quelque part un niveau de log pour le voir apparaître ? Les erreurs d’exécution de slibs ne sont pas remontées dans les logs ? Veuillez accepter mes excuses par avances si la réponse était évidente.

      Quelques conseils aux rapporteurs de bug

      En premier lieu, le plus important quand on rencontre un bug, est de décrire le plus précisément les symptômes afin que d’autres puissent établir le diagnostic.

      Ce qui aide le plus c’est quand les rapporteurs de bug décrivent le plus précisément possible et avec le plus de détail le problème auquel ils sont confrontés. Il s’agit notamment de répondre aux questions suivantes.

      • Comment se traduit le problème dans la page WIMS ? Des copies d’écran sont les bienvenues.
      • Quels sont les messages d’erreur ?

      Voici également quelques sources de conseils de description de problème :

      Enfin les projets libres / open sources comme WIMS reposent en partie sur du volontariat.Leur support aux utilisateurs est néanmoins efficace parce que leur organisation (des processus) et des outils permettent de compenser de moindres ressources humaines.

      Cependant pour que ça fonctionne, il faut respecter cette organisation et ces outils.

      Concrètement, cela se traduit par le respect de quelques règles (liste non exhaustive). Tout d’abord, si un outil de suivi d’incident (bug tracker, forum dédié, …) est mis en place il faut passer exclusivement par cet outil plutôt que par les messages directs.

      En outre, il existe une hiérarchie de traitement des incidents, pour solliciter les personnes à bon escient.

      1. Il faut d’abord solliciter les gestionnaires d’instances WIMS : il y a de fortes chances que le problème soit propre à une instance.
      2. Si le premier niveau de diagnostic n’a rien donné mais que le problème est localisé, alors il est possible de contacter les développeurs de modules.
      3. Enfin, si et seulement si les précédents niveaux de support n’ont rien donné, alors on peut envisager de solliciter l’équipe qui coordonne et développe le coeur de WIMS.

      .

    • #7683
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      Dans  src/Misc/Makefile, l’exécutable chemeq est copié dans le répertoire $(wims_home)/other/bin comme tous les exécutables.  Est-ce qu’il y a eu un problème dans la génération de ce Makefile (à partir de Makefile.in) ou dans l’exécution de ./configure dans compile ?

      Bernadette

    • #7684
      Stéphane Mouton
      Participant
      Up
      0
      Down
      ::

      J’ai testé vos hypothèses et voici le résultat

      Est-ce qu’il y a eu un problème dans la génération de ce Makefile ?

      J’ai arrêté le serveur et lancé un compile : tout semble bien se passer

      Le Makefile de src/Misc/ est bien généré et le make semble bien se passer.

      Cependant chemeq n’est pas généré dans other/bin

      Est-ce qu’il y a eu un problème dans l’exécution de ./configure dans compile ?

      En examinant la sortie du configure dans compile, j’ai détecté un problème :

      Compile units-filter: yes
      Wait … flex is not available, Compile units : no
      Compile chemeq: yes
      Wait … flex is not available, Compile chemeq: no

      Donc autoconf ne trouverait pas flex ?

      J’ai alors essayé la seule compilation de chemeq dans Misc :

      ~/src/Misc$ make chemeq units-filter

      uniteslex.cc:303:10: fatal error: FlexLexer.h: Aucun fichier ou dossier de ce type

      En effet, FlexLexer.h n’est pas présent sur le système.

      Voici l’explication trouvée : sur Debian et Ubuntu récents, il faut installer un paquet supplémentaire pour pouvoir utiliser FlexLex.

      J’ai appliqué le conseil en installant le paquet suivant :

      apt install libfl-dev

      Ensuite j’ai relancé la compilation et ça fonctionne : flex est « trouvé », chemeq se compile bien et est bien installé dans other/bin

      J’en conclue que pour l’environnement de mon instance (Debian 10) et au-delà il faut ajouter libfl-dev dans les prérequis d’installation de WIMS.

      Sauf erreur de ma part, ce prérequis n’est pas à ce jour dans la procédure d’installation manuelle de WIMS.

       

       

       

       

       

       

    • #7685
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      Je vais le rajouter au moins dans le wiki pour l’instant.
      Je transmets aussi à l’auteur de chemeq et sigunits car ce sont les seuls exécutables je pense qui ont besoin de cette librairie relative à flex.

      Merci de votre rapport.

      Bernadette

      • Cette réponse a été modifiée le il y a 1 année et 1 mois par bernadette.
Vous lisez 5 fils de discussion
  • Vous devez être connecté pour répondre à ce sujet.