La puissance de JSDoc pour compenser le manque de typage

Il est 22h15 lorsque je découvre que passer la souris au-dessus d’une fonction JS dans VSCode (Visual Studio Code pour les intimes) indique les paramètres avec un any peu clair.

Dans un programme que je rédige, j’utilise deux Map(), sorte de tableau associatif, mais dont l’usage dans les fonctions n’est pas clair :

  • La classe VMBmodule pour les modules
  • La classe VMBsubmodule pour les sous-parties des VMBModules

Explications Velbus

Je ne sais pas comment Velbus en est arrivé à cette architecture, mais en gros, on peut interroger un VMBmodule pour avoir le type de module, sa date de conception (version) et quelques états des sous-modules, mais la plupart des messages reçus sur le bus concerneront les sous-modules.

Par exemple, chaque lampe de la maison est contrôlée par un relais (donc, un sous-module) et un module VMB4RY contient 4 relais (donc 4 sous-modules). Ma clé est alors l’adresse du module suivi de la partie concernée, par exemple : $05-1, $05-2, $05-3 et $05-4.

Explication JavaScript

Bref, j’ai deux classes et deux listes de ces objets : une liste pour les VMBmodule et une liste pour les VMBsubmodule, mais quand je récupère des éléments d’un de ces objets, impossible de savoir quels attributs il a, c’est tout mélangé (quand j’écris le code suivant, VSCode me propose de compléter mon code avec tous les attributs qu’il trouve dans le programme) :

let newModule = new VMBsubmodule()
console.log(newModule.

Le pire est qu’en passant la souris au-dessus de newModule, je ne sais pas quel objet il contient (any s’affiche).

Magie JSDoc

C’est ici que la magie de la documentation de code opère : en commentant avec /** juste au-dessus de l’initialisation de mes maps, mon stagiaire ClaudeAI, répond à ma question : « Voici comment vous pouvez spécifier les types pour vos Map »

Sincèrement, je connais l’utilisation magique de JSDoc au-dessus d’une fonction (et c’est vraiment génial), mais là, je n’ai pas trouvé aisément d’information sur comment faire, et mon stagiaire IA me donne une réponse que j’ai adaptée et qui marche :

Quand je passe la souris sur subModTmp (variable temporaire de type VMBsubmodule) ou sur un attribut de cet objet, VSCode m’affiche la bonne information et quand j’ajoute un . après le nom de l’objet, VSCode affiche correctement les membres disponibles.

Conclusion

Oui, il existe TypeScript pour faire des programmes typés (mais en fait, il y a un transpiler qui va convertir mon code TS en Javascript : l’idéal serait alors de faire du deno, le « concurrent » de Node, conçu par le même auteur).

Finalement, une grande aide consiste à faire une bonne documentation : cela participe à fiabiliser le programme et je vais maintenant prendre plus de temps à créer correctement la documentation en JSDoc.

Enfin un moyen de trouver rapidement un cours ?

J’ai demandé à mon stagiaire préféré (celui qui travaille 24h/24 sans se plaindre) de me proposer un moteur de recherche pour la page principale de mes cours.

Après une petite discussion sur la recherche récursive dans les sous-répertoires, nous sommes tombés d’accord et en quelques minutes, j’avais un moteur opérationnel, mais mal intégré dans la page. Je n’ai eu qu’à modifier le CSS pour obtenir le résultat approximativement voulu.

Par contre, l’outil fonctionne uniquement sur les fichiers de type PDF ou MP4 (c’est mon cahier des charges, n’essayez pas d’obtenir un passwd ou .htaccess 😉) et n’est disponible que sur la première page : http://david.roumanet.free.fr/BTS-SIO.

Le résultat est quand même sympa… et le travail du stagiaire, bluffant ! Je me demande si un jour, il ne cherchera pas à me remplacer ?

Arvel, gestion domotique

J’ai dans mes projets, un projet complexe que je n’aborde qu’une fois par an, parfois un peu plus : ArVel… je ne sais plus ce que cela veut signifier, mais Vel correspond à Velbus.

On n’imagine même pas le nombre de lignes de code NodeJS, pour lire :

  • Sur un port TCP les trames Velbus brutes
  • Sur un port UDP, les trames de TeleInfo, à peine mise en forme en Python
  • Sur un port UDP, les trames ModBus de la VMC, envoyées par un script Python
  • D’écrire sur un port TCP pour une sorte d’API

Le résultat reste intéressant, mais très imbriqué et toujours complexe à déboguer… surtout quand on n’y met le nez aussi peu souvent que moi : les cours et les projets pour les étudiants consomment énormément de temps (même le weekend, les soirs et les vacances)

Bref, cet après-midi, à l’aide d’une IA, j’ai pu créer rapidement un parser de fichier, pour pouvoir commander plus facilement mon programme et ainsi, lancer des actions automatisées. Mon ancien programme en PureBasic permettait cela, mais la ré-écriture en NodeJS et la perte du serveur initial m’obligent à repartir en mode dégradé.

Qui sait, grâce à l’IA, j’arriverai plus facilement à avancer mon programme ?

Captain’s log

Date stellaire [-3] 2303.1

Je viens d’installer un énième WordPress 4.9 sur le site des pages perso de free, qui sont limitées à PHP 5.6 et SQL 5.0.83.

L’installation ne permet pas le copier/coller d’image comme le permet l’éditeur Gutenberg, mais il est ici, impossible de l’installer, le téléchargement générant une erreur qui réinitialise la connexion.

J’ai fini par trouver une édition de TinyMCE advanced compatible avec ma version de WordPress, mais évidemment, impossible de faire le fameux copier/coller d’une image bitmap : pourtant cette fonctionnalité existe depuis longtemps, en convertissant l’image du presse-papier en texte encodé en Base64.

En dernier ressort, j’ai réussi à trouver une extension appelée The-Paste et disponible en version 1.1.0 (compatible PHP 5.6). Il semble que cela fonctionne, si l’image ci-dessous apparaît 😉