{"id":3095,"date":"2026-11-03T20:26:22","date_gmt":"2026-11-03T18:26:22","guid":{"rendered":"https:\/\/coding4phone.com\/?p=3095"},"modified":"2026-11-03T20:26:24","modified_gmt":"2026-11-03T18:26:24","slug":"mogwai-nano-0-10-la-date-et-lheure-des-ecrans-tft-plus-soignes-et-des-evenements-enfin-bien-ranges","status":"publish","type":"post","link":"https:\/\/coding4phone.com\/?p=3095","title":{"rendered":"MOGWAI NANO 0.10 : la date et l&rsquo;heure, des \u00e9crans TFT plus soign\u00e9s, et des \u00e9v\u00e9nements enfin bien rang\u00e9s"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">La version 0.10 de MOGWAI NANO est disponible. Elle apporte des nouveaut\u00e9s bien visibles : de quoi manipuler la date et l&rsquo;heure, de nouvelles possibilit\u00e9s pour les \u00e9crans TFT, un analyseur de programmes entre 5 et 10 fois plus rapide. Mais le changement le plus important de cette version est moins spectaculaire : j&rsquo;ai repris de fond en comble la fa\u00e7on dont le moteur ex\u00e9cute les \u00e9v\u00e9nements, les timers et les blocs <code>post { ... }<\/code>. Si vous \u00e9crivez des programmes qui r\u00e9agissent \u00e0 des \u00e9v\u00e9nements, c&rsquo;est la partie \u00e0 lire attentivement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La date et l&rsquo;heure arrivent sur le NANO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;\u00e9tait un manque \u00e9vident pour un runtime qui tourne sur des microcontr\u00f4leurs : la 0.10 introduit une premi\u00e8re s\u00e9rie de primitives pour travailler avec la date et l&rsquo;heure courantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le principe est simple : un instant est repr\u00e9sent\u00e9 par un nombre de ticks. Comme c&rsquo;est un nombre ordinaire, vous pouvez le stocker, le comparer ou le soustraire \u00e0 un autre exactement comme n&rsquo;importe quelle valeur.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>now<\/code> pousse la date et l&rsquo;heure courantes, sous forme de ticks.<\/li>\n\n\n\n<li><code>->date<\/code> transforme un nombre de ticks en un enregistrement avec l&rsquo;ann\u00e9e, le mois, le jour, l&rsquo;heure, les minutes, les secondes, le jour de la semaine et le jour de l&rsquo;ann\u00e9e. <code>date-><\/code> fait l&rsquo;op\u00e9ration inverse.<\/li>\n\n\n\n<li><code>->duration<\/code> transforme un nombre de ticks, par exemple la diff\u00e9rence entre deux dates, en jours, heures, minutes, secondes et millisecondes. <code>->durations<\/code> donne plut\u00f4t le total exprim\u00e9 dans chaque unit\u00e9, et <code>duration-><\/code> revient aux ticks.<\/li>\n\n\n\n<li><code>setDateTime<\/code> r\u00e8gle l&rsquo;horloge de l&rsquo;appareil \u00e0 partir d&rsquo;un enregistrement, en UTC comme tout le reste. L&rsquo;ann\u00e9e, le mois et le jour sont obligatoires ; l&rsquo;heure, les minutes et les secondes sont facultatives et valent 0 si elles sont absentes. C&rsquo;est une primitive propre au NANO : elle n&rsquo;existe pas dans le moteur MOGWAI pour le bureau.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bonne nouvelle pour la coh\u00e9rence de l&rsquo;\u00e9cosyst\u00e8me : <code>now<\/code>, <code>-&gt;date<\/code>, <code>date-&gt;<\/code>, <code>-&gt;duration<\/code>, <code>-&gt;durations<\/code> et <code>duration-&gt;<\/code> existent aussi dans le moteur MOGWAI pour le bureau et s&rsquo;y comportent de la m\u00eame fa\u00e7on. Un script qui manipule des dates n&rsquo;a donc pas \u00e0 \u00eatre r\u00e9\u00e9crit selon qu&rsquo;il tourne sur votre PC ou sur votre ESP32.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un d\u00e9tail technique qui a son importance : un nombre de ticks demande plus de pr\u00e9cision que ce qu&rsquo;un <code>float<\/code> peut offrir. Depuis la 0.10, le type <code>.number<\/code> est un <code>double<\/code>, comme dans le moteur MOGWAI pour le bureau, et ne porte plus qu&rsquo;une seule valeur. Les dates se comportent ainsi de la m\u00eame fa\u00e7on sur votre PC et sur l&rsquo;appareil, et on peut ajouter ou retrancher \u00e0 un instant avec les simples <code>+<\/code> et <code>-<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les \u00e9crans TFT : d\u00e9filement, texte liss\u00e9 et police LCD<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Trois ajouts pour les primitives <code>tft.*<\/code>, r\u00e9serv\u00e9es \u00e0 l&rsquo;ESP32.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Le d\u00e9filement.<\/strong> <code>tft.scroll<\/code> d\u00e9place le contenu d&rsquo;un rectangle du canevas, d&rsquo;un certain nombre de pixels en horizontal et en vertical, et remplit la bande lib\u00e9r\u00e9e avec la couleur de votre choix. Avec un d\u00e9calage vertical de -8, le contenu monte d&rsquo;une ligne de texte 8\u00d78 : c&rsquo;est exactement ce qu&rsquo;il faut pour construire une console qui d\u00e9file ligne par ligne. Le d\u00e9filement s&rsquo;op\u00e8re sur le canevas en m\u00e9moire ; c&rsquo;est le <code>tft.refresh<\/code> suivant qui envoie le rectangle \u00e0 l&rsquo;\u00e9cran, environ 80 ms pour un \u00e9cran 240\u00d7320 complet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Le texte liss\u00e9.<\/strong> <code>true tft.smooth<\/code> active l&rsquo;anti-cr\u00e9nelage pour le texte dessin\u00e9 en taille 2 ou plus. Seules les marches d&rsquo;escalier des bords en diagonale sont adoucies ; les bords droits et les angles restent nets. Le lissage se m\u00e9lange avec ce qui se trouve d\u00e9j\u00e0 sur le canevas, donc il fonctionne aussi avec un fond transparent. Le m\u00e9lange est calcul\u00e9 en lumi\u00e8re lin\u00e9aire (avec correction gamma) et arrondi \u00e0 la valeur la plus proche plut\u00f4t que tronqu\u00e9, ce qui donne des bords plus naturels qu&rsquo;un simple m\u00e9lange des valeurs de couleur stock\u00e9es. C&rsquo;est d\u00e9sactiv\u00e9 par d\u00e9faut.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>La police LCD.<\/strong> Une seconde police, dessin\u00e9e avec sept segments comme sur une horloge num\u00e9rique, fait son apparition \u00e0 c\u00f4t\u00e9 de la police 8\u00d78 int\u00e9gr\u00e9e. <code>1 tft.setFont<\/code> la s\u00e9lectionne, <code>0 tft.setFont<\/code> revient \u00e0 la police 8\u00d78. Elle contient les chiffres, quelques symboles (<code>-<\/code>, <code>_<\/code>, <code>=<\/code>, <code>\u00b0<\/code>, <code>:<\/code> et <code>.<\/code>) et les lettres qu&rsquo;un afficheur \u00e0 sept segments sait repr\u00e9senter. Elle s&rsquo;agrandit avec l&rsquo;argument de taille. Pour obtenir l&rsquo;aspect d&rsquo;un vrai afficheur LCD, <code>tft.setGhost<\/code> dessine les segments \u00e9teints dans la couleur de votre choix, derri\u00e8re les segments allum\u00e9s ; <code>-1 tft.setGhost<\/code> les supprime. Ces deux r\u00e9glages reviennent \u00e0 leurs valeurs par d\u00e9faut \u00e0 chaque <code>tft.init<\/code>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"1024\" data-attachment-id=\"3096\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=3096#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?fit=1324%2C2468&amp;ssl=1\" data-orig-size=\"1324,2468\" data-comments-opened=\"1\" data-image-title=\"dd52fdcc-412a-433d-a778-f7e5c5e5eff5\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?fit=549%2C1024&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?resize=549%2C1024&#038;ssl=1\" alt=\"Un chronom\u00e8tre num\u00e9rique affichant 00:00:19.20 avec des boutons &quot;reset&quot; et &quot;stop&quot;.\" class=\"wp-image-3096\" style=\"aspect-ratio:0.5366690651463996;width:280px;height:auto\" srcset=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?resize=549%2C1024&amp;ssl=1 549w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?resize=161%2C300&amp;ssl=1 161w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?resize=768%2C1432&amp;ssl=1 768w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?resize=824%2C1536&amp;ssl=1 824w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?resize=1099%2C2048&amp;ssl=1 1099w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/11\/dd52fdcc-412a-433d-a778-f7e5c5e5eff5.jpg?w=1324&amp;ssl=1 1324w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><figcaption class=\"wp-element-caption\">La police LCD<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;ensemble a \u00e9t\u00e9 essay\u00e9 sur la Waveshare ESP32-S3-Touch-LCD-2, en rotation 0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9v\u00e9nements, timers et <code>post { ... }<\/code> : une refonte en profondeur<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est le gros morceau de cette version, et il m\u00e9rite qu&rsquo;on prenne le temps de l&rsquo;expliquer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Le probl\u00e8me<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Avant chaque instruction du code en cours, le moteur v\u00e9rifie s&rsquo;il y a des \u00e9v\u00e9nements, des timers ou des blocs post\u00e9s en attente. Jusqu&rsquo;ici, il les d\u00e9marrait imm\u00e9diatement, <strong>m\u00eame quand un autre gestionnaire \u00e9tait d\u00e9j\u00e0 en cours d&rsquo;ex\u00e9cution<\/strong>. Les cons\u00e9quences \u00e9taient d\u00e9sagr\u00e9ables :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un gestionnaire pouvait \u00eatre interrompu par un autre \u00e9v\u00e9nement, un timer, un bloc <code>post { ... }<\/code>, et m\u00eame par un nouveau tick de son propre timer ;<\/li>\n\n\n\n<li>quand plusieurs gestionnaires attendaient, le dernier arriv\u00e9 s&rsquo;ex\u00e9cutait en premier : trois \u00e9v\u00e9nements mis en file dans l&rsquo;ordre A, B, C s&rsquo;ex\u00e9cutaient dans l&rsquo;ordre C, B, A ;<\/li>\n\n\n\n<li>l&rsquo;imbrication grandissait avec la longueur de la file. Sur un appareil qui a peu de RAM, une rafale d&rsquo;\u00e9v\u00e9nements pouvait \u00e9puiser la pile.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">La nouvelle r\u00e8gle<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les \u00e9v\u00e9nements, les timers et les blocs <code>post { ... }<\/code> s&rsquo;ex\u00e9cutent maintenant <strong>un par un, dans l&rsquo;ordre d&rsquo;arriv\u00e9e<\/strong>. Un gestionnaire va au bout de son ex\u00e9cution avant que le suivant ne d\u00e9marre. Le programme principal, lui, continue d&rsquo;avancer : il donne la main aux gestionnaires en attente \u00e0 raison d&rsquo;un par instruction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Autour de cette r\u00e8gle, plusieurs garde-fous :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Un timer d\u00e9j\u00e0 en attente n&rsquo;est pas remis en file.<\/strong> Chaque timer garde au plus un tick en attente. Si un gestionnaire est plus lent que la p\u00e9riode de son propre timer, la file ne grossit plus ind\u00e9finiment et le programme principal ne meurt plus de faim. Le tick arriv\u00e9 pendant l&rsquo;ex\u00e9cution est conserv\u00e9 et s&rsquo;ex\u00e9cute juste apr\u00e8s : le timer ne perd pas son rythme, il ne s&rsquo;accumule simplement plus. Un tick d\u00e9j\u00e0 en file au moment d&rsquo;un <code>timer.stop<\/code> s&rsquo;ex\u00e9cute encore une fois.<\/li>\n\n\n\n<li><strong>Un \u00e9v\u00e9nement garde au plus 8 occurrences en attente.<\/strong> Quand la file d&rsquo;un \u00e9v\u00e9nement est pleine, la nouvelle occurrence est abandonn\u00e9e et un message est \u00e9crit dans la sortie de debug (pour la premi\u00e8re, puis toutes les 50 occurrences). Contrairement aux ticks de timer, les occurrences d&rsquo;un \u00e9v\u00e9nement portent des donn\u00e9es (<code>eventData<\/code>) et ne peuvent pas \u00eatre fusionn\u00e9es : une borne est la seule protection s\u00fbre contre un producteur plus rapide que son gestionnaire. Les occurrences d&rsquo;\u00e9v\u00e9nements diff\u00e9rents ne se comptent pas entre elles.<\/li>\n\n\n\n<li><strong><code>break<\/code> devient local au code qui l&rsquo;a d\u00e9clench\u00e9.<\/strong> Auparavant, un <code>break<\/code> ex\u00e9cut\u00e9 dans un gestionnaire, hors de toute boucle, laissait son drapeau lev\u00e9 \u00e0 la fin du gestionnaire, et la boucle du programme principal s&rsquo;arr\u00eatait \u00e0 son prochain contr\u00f4le. Le drapeau est maintenant sauvegard\u00e9 avant le d\u00e9marrage d&rsquo;un gestionnaire et restaur\u00e9 \u00e0 sa fin : le <code>break<\/code> d&rsquo;un gestionnaire n&rsquo;affecte que les boucles de ce gestionnaire. <code>mogwai.halt<\/code> et <code>mogwai.exit<\/code> restent globaux, puisqu&rsquo;ils arr\u00eatent tout le programme.<\/li>\n\n\n\n<li><strong>Aucun gestionnaire ne d\u00e9marre quand une session de debug est en pause.<\/strong> Le code tap\u00e9 dans la console pendant la pause, <code>wait<\/code> et le pas-\u00e0-pas ne d\u00e9clenchent plus d&rsquo;\u00e9v\u00e9nements, de timers ni de posts : quand le programme est en pause, tout est en pause. Les gestionnaires en attente s&rsquo;ex\u00e9cutent \u00e0 la reprise.<\/li>\n\n\n\n<li><strong><code>wait<\/code> ne tourne plus \u00e0 plein r\u00e9gime pour rien.<\/strong> Il dort 1 ms par tour quand aucun gestionnaire n&rsquo;attend ou quand il est lui-m\u00eame appel\u00e9 depuis un gestionnaire, ce qui r\u00e9duit la charge CPU d&rsquo;un programme qui attend beaucoup.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ce qui change pour vous<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Changement de comportement.<\/strong> L&rsquo;ordre dans lequel les effets de bord de plusieurs gestionnaires en attente deviennent visibles a chang\u00e9 : ils apparaissent d\u00e9sormais dans l&rsquo;ordre d&rsquo;arriv\u00e9e. Si l&rsquo;un de vos programmes d\u00e9pendait, sans le dire, de l&rsquo;ancien ordre (le dernier arriv\u00e9 en premier), il se comportera diff\u00e9remment.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Deux pr\u00e9cisions importantes :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un gestionnaire qui appelle <code>wait<\/code> laisse le programme principal avancer, mais ne laisse pas les autres gestionnaires d\u00e9marrer entre-temps.<\/li>\n\n\n\n<li>Une erreur lev\u00e9e dans un gestionnaire et non trait\u00e9e sur place (avec <code>trap<\/code> ou <code>guard<\/code>) arr\u00eate toujours le programme, comme avant.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">En contrepartie, le comportement est enfin pr\u00e9visible : plus d&rsquo;interruption surprise au milieu d&rsquo;un gestionnaire, plus d&rsquo;ordre invers\u00e9, plus de pile qui explose sur une rafale. Pour des programmes qui tournent des semaines sur un microcontr\u00f4leur, c&rsquo;est une fondation bien plus saine.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un analyseur 5 \u00e0 10 fois plus rapide<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;analyse d&rsquo;un programme (parsing) est d\u00e9sormais entre 5 et 10 fois plus rapide qu&rsquo;avant. Rien ne change dans la mani\u00e8re d&rsquo;\u00e9crire les programmes ni dans leur comportement. Le gain se sent surtout sur les gros programmes et en mode debug (<code>nano.debug<\/code> et <code>nano.debugall<\/code>), l\u00e0 o\u00f9 l&rsquo;analyse \u00e9tait la plus longue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L&rsquo;ESP32-S3 avec PSRAM, seule cible ESP32 support\u00e9e<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le classique ESP32 (<code>ESP32_REV3<\/code>, environ 40 Ko de RAM libre) n&rsquo;est plus une cible. Les mesures ont montr\u00e9 une fragmentation de la m\u00e9moire sous charge soutenue, et pratiquement aucune marge pour les t\u00e2ches. C&rsquo;est un changement de documentation : rien ne change dans le code. Le README (tableau des plateformes, d\u00e9marrage rapide, consid\u00e9rations m\u00e9moire) l&rsquo;indique d\u00e9sormais clairement, et les instructions de flashage pour <code>ESP32_REV3<\/code> ont disparu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f4t\u00e9 Raspberry Pi Pico 2 W, le build <code>MogwaiNanoPicoW<\/code> est maintenant d\u00e9crit pour ce qu&rsquo;il est : une version minimale du runtime, sans les fonctions propres \u00e0 l&rsquo;ESP32 (<code>esp32.setPinFunction<\/code>, la LED embarqu\u00e9e, le BLE p\u00e9riph\u00e9rique, le TFT et le tactile). Son nom ne change pas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Corrections<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quelques bugs corrig\u00e9s au passage, tous li\u00e9s \u00e0 la m\u00eame zone du moteur :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>mogwai.exit<\/code> n&rsquo;arr\u00eatait pas une boucle <code>forever do<\/code> : elle continuait de tourner sans rien ex\u00e9cuter au lieu de terminer le programme. C&rsquo;est corrig\u00e9.<\/li>\n\n\n\n<li><code>break<\/code> pouvait arr\u00eater la boucle englobante par erreur, dans <code>foreach<\/code> (sur une liste, un <code>MOGData<\/code> et une cha\u00eene) comme dans <code>repeat<\/code>, <code>for<\/code>, <code>forstep<\/code> et <code>during<\/code>. Le drapeau est maintenant remis \u00e0 z\u00e9ro juste apr\u00e8s le corps de la boucle.<\/li>\n\n\n\n<li><code>while<\/code> pouvait \u00e9chouer avec une erreur de type apr\u00e8s un <code>mogwai.exit<\/code> ou un <code>break<\/code> survenu pendant l&rsquo;\u00e9valuation de la condition. Il sort d\u00e9sormais proprement de la boucle.<\/li>\n\n\n\n<li>Un gestionnaire en \u00e9chec (exception dans un \u00e9v\u00e9nement, un timer ou un bloc post\u00e9) laissait sa pile derri\u00e8re lui, et le code suivant s&rsquo;ex\u00e9cutait sur la mauvaise pile. La pile est maintenant toujours retir\u00e9e \u00e0 la fin du gestionnaire, quelle que soit l&rsquo;issue.<\/li>\n\n\n\n<li><code>after &lt;ms> do { ... }<\/code> (la forme sucr\u00e9e de <code>LATER<\/code>) utilisait toujours le m\u00eame nom de timer : le premier appel fonctionnait, mais le deuxi\u00e8me \u00e9chouait parce qu&rsquo;un timer de ce nom existait d\u00e9j\u00e0, et un appel pouvait m\u00eame d\u00e9marrer le timer d&rsquo;un appel pr\u00e9c\u00e9dent. Chaque appel cr\u00e9e maintenant son propre timer, avec un nom unique.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Pour finir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La 0.10 est une version \u00e0 deux visages : des nouveaut\u00e9s concr\u00e8tes (la date et l&rsquo;heure, les \u00e9crans TFT) et un chantier de fond sur l&rsquo;ex\u00e9cution des gestionnaires, qui rend le comportement du moteur pr\u00e9visible. Si vos programmes utilisent des \u00e9v\u00e9nements, des timers ou des blocs <code>post { ... }<\/code>, relisez la section qui leur est consacr\u00e9e et testez-les avant de d\u00e9ployer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez le code, le CHANGELOG complet et la release sur GitHub :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>D\u00e9p\u00f4t : <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/Sydney680928\/MogwaiNano<\/a><\/li>\n\n\n\n<li>Release 0.10.0 : <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\/releases\/tag\/v0.10.0\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/Sydney680928\/MogwaiNano\/releases\/tag\/v0.10.0<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous rencontrez un souci ou si vous avez une id\u00e9e, le suivi des tickets est ici : <a href=\"https:\/\/github.com\/Sydney680928\/MogwaiNano\/issues\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/Sydney680928\/MogwaiNano\/issues<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La version 0.10 de MOGWAI NANO est disponible. Elle apporte des nouveaut\u00e9s bien visibles : de quoi manipuler la date et l&rsquo;heure, de nouvelles possibilit\u00e9s pour les \u00e9crans TFT, un analyseur de programmes entre 5 et 10 fois plus rapide. Mais le changement le plus important de cette version est moins spectaculaire : j&rsquo;ai repris &#8230; <a title=\"MOGWAI NANO 0.10 : la date et l&rsquo;heure, des \u00e9crans TFT plus soign\u00e9s, et des \u00e9v\u00e9nements enfin bien rang\u00e9s\" class=\"read-more\" href=\"https:\/\/coding4phone.com\/?p=3095\" aria-label=\"En savoir plus sur MOGWAI NANO 0.10 : la date et l&rsquo;heure, des \u00e9crans TFT plus soign\u00e9s, et des \u00e9v\u00e9nements enfin bien rang\u00e9s\">Lire la suite<\/a><\/p>\n","protected":false},"author":1,"featured_media":2803,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"D\u00e9couvrez la version 0.10 de MOGWAI NANO : nouvelles fonctionnalit\u00e9s, un moteur optimis\u00e9, et un analyseur 5 \u00e0 10 fois plus rapide.","jetpack_seo_html_title":"MOGWAI NANO 0.10: Nouvelles fonctionnalit\u00e9s et am\u00e9liorations","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[185,177,48,50],"tags":[],"class_list":["post-3095","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-nanoframework","category-mogwai-nano","category-rpn","category-scripting"],"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfoe4s-NV","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2026\/08\/img01.png?fit=300%2C239&ssl=1","_links":{"self":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/3095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3095"}],"version-history":[{"count":6,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/3095\/revisions"}],"predecessor-version":[{"id":3102,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/3095\/revisions\/3102"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/media\/2803"}],"wp:attachment":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}