Je continue Ă me former Ă l’utilisation des outils IA (voir L’IA change mon travail et ChatGPT, dis-moi comment utiliser Copilot?). En fait, je passe tout mon temps libre Ă faire ça… Et le reste du temps, j’essaye de dĂ©gager du temps dans mon agenda pour me rĂ©server des moments d’apprentissage de l’IA. Parfois je dors aussi, mais, maintenant, je rĂȘve d’IA et je me lĂšve Ă 6h du matin pour continuer!… Je deviens un peu fou…
Le dernier exemple dont j’avais parlĂ© dans ce blog est l’amĂ©lioration du code “particle in cell (PiC)” que je dĂ©veloppe parallĂšlement Ă mes Ă©tudiants. Pour rappel, j’avais demandĂ© Ă Copilot d’ajouter un solveur “gradient conjuguĂ©” au code et il m’avait mĂȘme trouvĂ© un bug d’indices dans mon calcul de gradient de pression… c’Ă©tait dĂ©jĂ super bluffant, mais ce n’Ă©tait que le dĂ©but: j’allais encore tomber plusieurs fois de ma chaise!
On s’attaque Ă fossils
Comme terrain de jeu suivant, je me suis attaquĂ© Ă fossils, le code de simulation de morsures de dinosaures que je dĂ©veloppe en partenariat avec les palĂ©ontologues de l’UniversitĂ© (voir ce post ). Les fonctionnalitĂ©s du code Ă©taient dĂ©jĂ trĂšs satisfaisantes mais il y avait quelques amĂ©liorations Ă faire pour le rendre vraiment intĂ©ressant face Ă l’utilisation de Metafor notre gros code Ă©lĂ©ment fini (bien que fossils soit open-source et Metafor pas):
- fossils utilise Gmsh pour afficher les rĂ©sultats qui n’est pas vraiment conçu pour afficher des trĂšs gros maillages (on parle de plusieurs millions de mailles). L’interface met Ă jour l’affichage Ă chaque changement d’option d’affichage et ça devient vite inutilisable.
- le post-processing de fossils (plus prĂ©cisĂ©ment le calcul des contraintes et des dĂ©formations une fois que le dĂ©placement des noeuds est calculĂ©) Ă©tait assez lent. La partie “rĂ©solution Ă©lĂ©ments-finis” prenait finalement trĂšs peu de temps (quelques secondes) en comparaison aux phases de maillage, de post-traitement et d’affichage des rĂ©sultats.
J’ai donc lancĂ© GitHub Copilot dans mon VS Code et je lui ai demandĂ© de coder une exportation VTK des rĂ©sultats pour les afficher dans ParaView. Il ne s’agit plus ici de faire une modification mineure du code: il est nĂ©cessaire que Copilot comprenne toute la structure des donnĂ©es en mĂ©moire et recode une exportation Ă partir de rien (en effet, mĂȘme lui m’a immĂ©diatement dĂ©conseillĂ© de linker le code aux bibliothĂšques VTK).
Le rĂ©sultat a Ă©tĂ© fabuleux đ€©, avec, une nouvelle fois une belle claque dans a figure: sans aucune intervention de ma part, il a codĂ© immĂ©diatement un export fonctionnel au format texte “legacy” (.vtk). AprĂšs quelques prompts, j’ai obtenu ensuite une version binaire comprimĂ©e au format XML plus moderne (.vtu). En parallĂšle Ă tout ça, il a mis en place une sĂ©rie de tests (il appelle ça des “smoke tests”) pour vĂ©rifier son travail. J’ai seulement dĂ» itĂ©rer 1x avec lui pour lui transmettre une erreur qu’il avait faire dans le format le plus complexe (a posteriori, je pense que j’aurais pu plutĂŽt lui donner accĂšs Ă Paraview et lui demander de tester lui-mĂȘme!). En lui donnant un simple copiĂ©/collĂ© de l’erreur qui s’affichait dans Paraview, il a compris d’oĂč ça venait et il a tout corrigĂ©.
AprĂšs ce succĂšs, je lui ai demandĂ© d’optimiser le code. Et sans rentrer trop dans les dĂ©tails:
- Il m’a parallĂ©lisĂ© le post-traitement (calcul des contraintes et dĂ©formations). Ce n’Ă©tait pas Ă©vident car ce calcul nĂ©cessite des moyennes aux nĆuds qui sont partagĂ©s par plusieurs Ă©lĂ©ments finis. Il a bien sur fait ça de maniĂšre experte sans aucune section sĂ©quentielle (
omp critical)! - Il a supprimĂ© toutes les sections critiques dans l’assemblage parallĂšle de la matrice de raideur. Ca c’est trĂšs fort… On ne l’a mĂȘme pas fait dans Metafor. Les gains en temps de calcul sont vraiment visibles!
- Il a retravaillĂ© la sortie Gmsh et plus prĂ©cisĂ©ment l’Ă©criture des options d’affichage pour Ă©viter que Gmsh ne soit tentĂ© de recalculer des choses lors de la relecture des rĂ©sultats. Le gain de temps est Ă©norme (plusieurs minutes sur des trĂšs gros tests).
- Enfin, il a retravaillĂ© la gestion mĂ©moire du code pour utiliser partout des “smart pointers” (sans casser l’interface python du code).

Ci-dessus, Copilot lance une sĂ©rie de “tasks” pour réécrire toute la gestion mĂ©moire du code et faire du propre avec des smart pointers, tout en restant compatible avec l’interface python gĂ©nĂ©rĂ©e par SWIG.
Je ne peux mĂȘme pas estimer correctement le nombre d’heures qu’il m’aurait fallu pour faire ce travail (plusieurs semaines? plusieurs mois?). C’est de la folie! đ€Ș
Et surtout, tout ceci a Ă©tĂ© fait d’une seule traite, je veux dire “en une seule sĂ©ance de travail”) En effet, la grosse difficultĂ© que j’ai pour coder aujourd’hui, vu mon poste et mes obligations Ă l’univ, est le fait que je n’arrive pas Ă dĂ©gager des moments assez longs et rapprochĂ©s qui me permettent de terminer ce que j’envisage de faire. J’ai souvent quelques heures de libre devant moi et ce n’est pas suffisant pour se replonger dans un code, mĂȘme “aussi petit” que fossils. Le temps que je me sente Ă l’aise Ă nouveau, je dois changer d’activitĂ©… Et donc je n’avance pas… C’est trĂšs frustant.
Ici, c’est tout l’inverse. J’ai l’impression de pouvoir Ă nouveau reconsidĂ©rer ma vieille “todo list” et m’attaquer Ă certaines tĂąches en quelques heures! Evidemment, le rĂ©sultat n’est pas de moi, mais au moins la tĂąche est faite, mon esprit s’Ă©claircit, la frustration disparait. Et je dois dire qu’observer Codex ou Copilot travailler est vraiment intĂ©ressant. On a l’impression d’apprendre des tas de choses, tout en se permettant d’oublier des tĂąches un peu rĂ©barbatives.
La fin de cette histoire est que j’ai donnĂ© le rĂ©sultat aux palĂ©ontologues et qu’ils sont devenus fous eux-aussi: ils veulent maintenant utiliser fossils et non plus Metafor. C’est magnifique.
đĄA partir de ce moment, je me suis dit qu’il fallait que j’arrĂȘte tout ce que je fais de non-indispensable et que je ne fasse plus qu’apprendre Ă utiliser ces outils! (c’est pas une blague)
Eqnplotter - traceur de fonction par Codex
Et donc Ă partir de lĂ , mon but Ă©tait d’apprendre un maximum en variant les outils et en variant les projets. J’avais bien vu que le code fossils Ă©tait dĂ©jĂ un peu gros pour apprendre Ă utiliser un agent IA: il y a beaucoup de choses dans le repo: un code C++, une interface python, de l’intĂ©gration continue, des donnĂ©es (des maillages de dinos), les tests du code C++, les tests du modĂšle biomĂ©canique, … et mĂȘme des fichiers qui ne servent Ă rien (le modĂšle Ă©quivalent Metafor et des fichiers matlab dont je me suis inspirĂ© pour le code). MalgrĂ© tout j’y Ă©tais arrivĂ© prĂ©cĂ©demment, mais je voyais bien que j’avais du mal Ă guider l’IA.
Je me suis dit: “Pourquoi ne pas dĂ©marrer sur un projet vide et construire incrĂ©mentalement l’environnement IA Ă partir de rien”? Et pour ce faire, j’appliquerais bien sĂ»r la technique que j’ai apprise Ă mes cours d’IA: si tu ne sais pas comment faire, demande Ă une (autre) IA!
J’ai donc demandĂ© Ă ChatGPT de me coacher dans mon apprentissage du “vibe-coding” (parce que c’est bien de ça qu’on parle finalement - moi, je ne suis pas gĂȘnĂ© de le dire, Ă©tant confiant dans mes capacitĂ©s de “codage sans IA”).
Comme outil, je me suis tournĂ© sur Codex au lieu de Copilot. J’ai un abonnement Codex dans mon abonnement Pro Ă ChatGPT et je ne l’ai pour ainsi dire quasiment jamais utilisĂ©.
Et comme projet, pourquoi ne pas faire ce que je faisais chaque fois que j’apprenais un nouveau langage quand j’Ă©tais petit (BASIC, AMOS, C, C++, python)? Un traceur de fonctions! Ca me plonge dans une ambiance “nostalgie” trĂšs agrĂ©able.
Donc “ChatGPT, je veux crĂ©er une application graphique en python, basĂ© sur PyQt qui va me permettre de tracer des fonctions ; j’aimerais profiter de ce projet pour apprendre Ă utiliser Codex et j’aimerais donc que tu me guides dans les interactions que je vais avoir avec Codex, l’outil IA que j’ai choisi pour effectuer le travail”… Et hop, c’est parti! J’ai un expert Codex Ă mes cotĂ©s pour apprendre Ă utiliser cet outil!
Je vais passer tous les dĂ©tails de la conception de cette application sur laquelle j’ai travaillĂ© (je devrais dire: Codex, ChatGPT et moi avons travaillĂ©…) toute la journĂ©e du vendredi.

Ma rĂ©action: “Mais c’est de la folie!”… Et, en plus, cette capture ne reflĂšte pas l’interactivitĂ© qu’on peut avoir avec la fenĂȘtre graphique (zoom / pan).
L’application créée est incroyable et 10x au dessus de mes espĂ©rances. Evidemment, il y a eu beaucoup d’itĂ©rations pour guider le dĂ©veloppement, mais je me suis forcĂ© Ă ne pas regarder en dĂ©tail le code gĂ©nĂ©rĂ© avant la fin. Du vrai vibe-coding!
Je me suis attardĂ© Ă la crĂ©ation d’un installeur via PyInstaller et Inno Setup. Ceci pour “prĂ©parer” un travail similaire dans un futur proche sur fossils. Codex m’a tout créé correctement. J’ai donc un installeur windows fonctionnel avec les icones qui vont bien (un problĂšme que je n’avais pas pu rĂ©soudre dans fossils oĂč l’icone du programme n’apparaissait pas dans la liste des programmes installĂ©s sur la machine).
In-croy-able! Faut-il dire que je n’ai pas dormi entre le vendredi et le samedi…
Voici le repo sur Github: rboman/eqnplot
Minestorm - un jeu retro C++ publié sur le web
Samedi matin, je me lance dans un nouveau projet avec la contrainte arbitraire de le terminer le jour mĂȘme. La seule chose qui peut me ralentir ce sont mes idĂ©es: elles se bousculent dans ma tĂȘte qui va exploser! đ€Ż Restons calme….inspire, expire…
Bon, le samedi je code un jeu avec Codex. On va faire du C++ cette fois. Et ce sera un jeu qui utilise PixelGameEngine (ou “PGE” en version courte), la bibliothĂšque minimaliste que j’essaye d’apprendre lors de mes temps libres. C’est une bibliothĂšque qui a du succĂšs mais qui reste tout de mĂȘme assez confidentielle. C’est vraiment du bas niveau: elle permet de tracer des pixels un peu de texte, des images et c’est Ă peu prĂšs tout. J’ai d’ailleurs fait plusieurs fois des recherches sur le web pour analyser des projets qui auraient pu me servir d’exemples pour apprendre Ă mieux utiliser la bibliothĂšque mais il y en a trĂšs peu… ou, du mois, j’en ai trouvĂ© trĂšs peu. Spoiler: en fait, ça ne va pas ĂȘtre un problĂšme parce que Codex va lire tout le code source de PGE (qui tient dans 1 seul fichier) et va en dĂ©duire comment l’utiliser tout seul! C’Ă©tait donc inutile de se tracasser…
Quel type de jeu? Un jeu auquel j’aurais un peu envie de jouer et qui reste simple et qui ne nĂ©cessite pas d’assets ni de scrolling compliquĂ© (on programme ça pour le prochain projet!)… En fouillant dans ma mĂ©moire, j’ai pensĂ© Ă Mine Storm, le jeu hardcodĂ© dans la console retro “Vectrex” (le jeu dĂ©marrait quand on n’insĂ©rait pas de cartouche). Dans ce jeu, une fusĂ©e dĂ©pose des mines sur l’Ă©cran en dĂ©but de niveau et on doit les dĂ©truire avec un petit vaisseau spatial. Les mines bougent et se fragmentent en dĂ©bris qui bougent plus vite quand on les touche avec nos missiles.
Allez hop, mĂȘme procĂ©dure: “ChatGPT, gĂ©nĂšre moi le prompt Codex qui va bien pour dĂ©marrer ce genre de jeu” (aprĂšs un petit brainstorming sur le projet voulu); et c’est parti.
LĂ , Ă nouveau, en quelques minutes, un jeu fonctionnel est gĂ©nĂ©rĂ©. Le reste de la journĂ©e n’est finalement que du polish autour de cette base. Tout au long de la journĂ©e, j’ai donc dĂ©pensĂ© mes crĂ©dits Codex jusqu’Ă les Ă©puiser Ă 0% avant la limite de temps oĂč ils se rechargent (1h plus tard - ça n’aurait donc pas Ă©tĂ© un problĂšme de continuer le jour-mĂȘme en faisant juste une petite pause)!
Le rĂ©sultat est Ă nouveau magnifique. J’ai pu ajouter de la musique, des bruitages, des effets spĂ©ciaux (particules, powerups - armes spĂ©ciales), des Ă©crans de configuration, de dĂ©marrage, de game-over, …
Ca allait tellement vite qu’au milieu de l’aprĂšs-midi, je me suis dit que j’allais lui demander de compiler le projet en WebAssembly et le publier sur le web sur GitHub Pages. Pour l’aider (Ă©tait-ce utile? - je n’en sais rien), je lui ai donnĂ© le projet dĂ©mo PGE+webassembly que j’avais créé pour mes cours git (relire mon ancien post), en lui donnant la consigne de transposer le pipeline “GitLab CI” en “Github actions”… Faut-il dire que ça a Ă©tĂ© tout seul? Et oui, c’est fou… đ€Ș
Ca donne ça: Minestorm (déployé sur Github Pages)

Ci dessous la petite video de gameplay faite pour itch.io
En postant le lien du jeu en ligne Ă l’auteur de la musique que j’avais prise sur le web sur OpenGameArt.org, j’ai vu que d’autres personnes le remerciait aussi en lui donnant un lien vers une page itch.io. Il me restait encore un peu de temps pour publier mon jeu sur cette plateforme (et tant pis pour la cuisson de mes lĂ©gumes de la semaine, je ferais ça le lendemain). Le rĂ©sultat est magnifique (je me rĂ©pĂšte, je sais):
Voici le lien itch.io : Minestorm by rboman
Il ne restait plus qu’Ă en faire la promo. J’ai donc postĂ© le lien partout (X, Mastodon, Bluesky, Threads, Facebook et LinkedIn). Et c’est le post LinkedIn qui aura le plus de succĂšs!
La suite de mes aventures trĂšs bientĂŽt!
