David Madore's WebLog: Nouvelles d'octobre : covid, calculabilité, NanoPi

[Index of all entries / Index de toutes les entréesLatest entries / Dernières entréesXML (RSS 1.0) • Recent comments / Commentaires récents]

↓Entry #2763 [older| permalink|newer] / ↓Entrée #2763 [précédente| permalien|suivante] ↓

(vendredi)

Nouvelles d'octobre : covid, calculabilité, NanoPi

Je ne sais pas si j'ai besoin de le dire, mais les différentes parties de ce billet sont indépendantes.

Covid

Je viens d'attraper le covid pour la troisième fois et un an, et mois de quatre mois après la précédente (première fois :  ; deuxième :  ; troisième :  ; je donne la date des premiers symptômes, et tous les trois sont validés par un test antigénique à domicile entre J+1 et J+3). Les deux fois précédentes, et cette fois aussi jusqu'à maintenant, cela se présente comme un gros rhume, qui commence par une sensation de fatigue générale, puis évolue vers une rhinopharyngite classique avec énormément de mucosités dans le nez et ensuite la voix enrouée et de la toux ; dans la journée ce n'est pas trop gênant (j'alterne paracétamol et ibuprofène, mais je suis globalement fonctionnel), mais la nuit je dors vraiment très mal parce que je suis gêné soit par mon nez encombré soit par la toux. (Et, par transitivité, le poussinet dort très mal lui aussi, parce que je le réveille tout le temps en toussant très fort.)

Outre que c'est agaçant, cela soulève chez moi une certaine perplexité d'ordre scientifique.

Il y a 10–20 ans j'avais des rhumes tout le temps, c'est-à-dire au moins tous les six mois : on en trouve des traces dans les vieux billets de ce blog. Même l'obsédé que je suis de l'auto-documentation n'a pas tenu un registre précis de tous mes rhumes avec leur sévérité, leur durée et leurs symptômes, donc je ne peux pas être totalement précis, mais j'ai tendance à écrire une phrase du style réveillé enrhumé ou mal dormi à cause de mon rhume dans mon journal, donc je peux me baser là-dessus. J'avais l'impression que ces rhumes récurrents avaient disparu ou s'étaient raréfiés en fréquence, mais en recherchant un peu plus systématiquement quelques mots-clés dans mon journal, il semble que ce ne soit pas vrai : j'en ai eu en 2013-02, 2013-03(?), 2013-09, 2014-03, 2015-04, 2015-12, 2016-11, 2017-03, 2017-09, 2018-05, 2018-11, 2019-02 (celui-là était peut-être la grippe, en tout cas le tableau clinique était différent), 2019-10, 2022-04 (là j'ai soupçonné la covid, mais un autotest était négatif, peut-être parce qu'il était fait trop tôt) et 2022-10-0* (tout petit rhume, je n'ai pas fait de test covid), puis enfin ces trois rhumes-covid en 2022-10-2*, 2023-06 et maintenant 2023-10.

On peut éventuellement interpréter mon absence de rhumes en 2020 et 2021 comme un succès des mesures de diminution des contacts liés au covid (par exemple l'enseignement hybride, le port du masque).

Mais ce qui est perplexogène, c'est que le motif récurrent d'un rhume tous les six mois semble se prolonger… sauf que maintenant c'est le covid que j'attrape. (Je fais l'hypothèse que les tests antigéniques n'ont quasiment pas de faux positif : s'ils sont positifs, c'est vraiment la covid que j'ai. Pour les rhumes jusqu'à 2019, inversement, ça ne pouvait pas être ça. Les seuls pour lesquels il y a un doute sont ceux de 2022-04, pour lequel j'ai fait un autotest négatif mais il était peut-être fait trop tôt ou mal fait, et le poussinet a attrapé le covid juste un peu après, ce qui est suspect, et celui de 2022-10-0*.)

Les symptômes de mes trois covids sont presque exactement les mêmes que les rhumes que j'avais avant 2019 : la seule différence notable est que le premier signe est plutôt une sensation de fatigue général alors que mes rhumes antérieurs se manifestaient en premier par un picotement désagréable dans l'arrière-gorge. À part ça, et à part des fluctuations d'intensité, c'est essentiellement la même chose.

Du coup, je ne peux m'empêcher de me demander : que sont devenus les virus qui causaient mes rhumes jusqu'à 2019 ? Étaient-ce aussi des coronavirus ? (Je rappelle qu'il y en a quatre espèces connues qui circulaient chez les humains avant SARS-CoV-2 : OC43, 229E, NL63 et HKU1. Quasiment tout le monde a eu au moins les trois premiers au moins une fois.) Étaient-ce des rhinovirus ? Autre chose ? Comment savoir ? Ce n'est pas qu'ils me manquent, mais le fait qu'ils aient disparu en même temps que la covid est apparue est assez étrange (je veux dire disparu chez moi : dans la population générale, il ne semble pas qu'ils aient disparu ; j'ai entendu dire que la grippe B, ou peut-être juste une lignée de la grippe B, avait disparu, mais si c'était pareil pour OC43, 229E, NL63 et HKU1 je pense que ça se saurait). C'est aussi étrange que les symptômes soient à ce point semblables : ma meilleure explication est que, en fait, les symptômes d'un rhume dépendent beaucoup plus de la réaction immunitaire de la personne infectée que de l'agent infectieux (sauf au tout début).

Une autre chose intrigante est l'absence de contamination avérée entre le poussinet et moi. En 2022-04 j'ai eu un rhume (pas particulièrement intense ni notable), j'ai fait un autotest covid, qui était négatif, et le poussinet a eu le covid juste après (il a été bien malade ; et, ce qui est peut-être le plus notable, moi je n'ai pas eu de deuxième infection) : donc peut-être que c'était la covid et que je lui ai refilée, mais ce n'est pas totalement clair ; et en 2023-10, 2023-06 et 2023-10 jusqu'à présent, il semble que je n'aie pas contaminé le poussinet. Donc peut-être qu'il est maintenant plus immunisé que moi. Ou peut-être que le covid n'est pas si contagieux que ce qu'on imagine. (De façon générale, les rhumes que j'avais régulièrement avant, nous nous les refilions rarement l'un a l'autre : ça a dû arriver une fois ou deux dans toute la série que j'ai listée.)

Prière d'insérer ici une expression de mon agacement déjà plusieurs fois manifesté sur le fait qu'on s'est tellement intéressé à la covid qu'on a raté une occasion de mieux comprendre les infections respiratoires en général (par exemple si on avait commercialisé des tests PCR et antigéniques qui testent une dizaine de virus différents et recensé tout ça ensemble).

Mise à jour : ça a fini en toux qui a mis un temps invraisembable à passer.

Calculabilité

Je dois donner un cours à Télécom Paris à partir du mois prochain dont l'intitulé est Logique et Fondements de l'Informatique (ça fait LFI, et du coup lors d'un de mes derniers cours de l'an dernier j'avais sur mon bureau informatique un PDF avec pour titre Programme LFI bien en évidence sur l'écran : je me demande si quelqu'un aura pris ça pour un message politique).

Jusqu'à l'an dernier nous enseignions la même chose à tous les élèves de première année (à une petite différence près dans les maths pour des élèves admis autrement que par le concours commun) : ils étaient juste divisés en six groupes essentiellement aléatoires, chacun ayant exactement les mêmes enseignements (mais pas au même moment, et pas par les mêmes enseignants). Ceci posait déjà quelques difficultés pour l'enseignement de l'informatique parce que les élèves de prépas scientifiques peuvent avoir ou non suivi une option informatique dans laquelle ils apprenaient déjà un certain nombre de choses de mon cours de Théorie des Langages (notes de cours ici) et du coup ils s'ennuyaient. Il y a deux ans a été créée une nouvelle filière de prépa, MPI comme Maths Physique Informatique (en parallèle avec les filières MP, PC et PSI déjà existantes) : dès lors, il n'était plus tenable d'enseigner à tout le monde exactement la même chose, et nous avons réformé la première année à Télécom. Et spécifiquement, au second trimestre (novembre–janvier), pendant que la plupart des élèves auront un cours d'algorithmique générale, j'organiserai un cours pour la population issue des filières MPI et MP option info (qui auront déjà vu cette partie de l'algorithmique) pour prolonger ce qu'ils auront vu avant d'entrer à l'école en logique et fondements de l'informatique. Spécifiquement, je dois leur parler de calculabilité (fonctions générales récursives, machines de Turing et lambda-calcul), de logique, typage (lambda-calcul typé), et un peu de l'isomorphisme de Curry-Howard (qui exprime le fait que typer un programme informatique — spécifiquement, un terme du lambda-calcul — ou vérifier une démonstration mathématique, sont en fait « la même chose »). En parallèle de ça, un collègue leur fera des TP d'introduction à l'assistant de preuve Coq.

Voilà qui a l'air tout à fait alléchant, sauf que je suis complètement à la bourre dans ma préparation. J'ai plein d'idées, mais la partie critique, c'est-à-dire commencer à écrire vraiment des choses détaillées à présenter aux élèves, est encore au stade complètement évanescent.

Une des raisons est que je voulais commencer par finir de m'éclaircir les idées sur un sujet (distinct mais vaguement apparenté ne serait-ce que parce qu'il s'agit aussi de calculabilité) sur lequel je rumine depuis bien trop longtemps déjà : les oracles au sens de Kihara (une généralisation des degrés de Turing ; malgré mon envie d'en parler, il est peu probable que j'aie le temps d'évoquer les degrés de Turing lors de mon cours à Télécom, mais ça ne m'empêche pas d'avoir été conduit à reréfléchir à toutes sortes de questions attenantes). J'ai commencé à écrire un billet dans ce blog à leur sujet, billet dont l'entrée du mois dernier ne devait être que l'introduction (et devrait au moins expliquer le sens du mot oracle) ; mais ce billet est en train de prendre des proportions déraisonnables et de progresser de plus en plus lentement, et, une fois de plus, je me demande quoi en faire (la publiée inachevée sachant qu'alors je ne la finirai jamais ? la laisser dans mes cartons pour un jour où j'aurai plus de temps ?). Ce qui est sûr, c'est que le fait de l'écrire m'aura aidé à comprendre énormément de choses que je n'avais pas bien saisies, ce qui est, après tout, le but principal.

Ajout () : le billet en question a été publié ici.

Évidemment, le fait d'avoir attrapé la covid et d'être crevé parce que je dors très mal n'aide pas beaucoup à progresser dans quelque direction que ce soit.

Ajout () : la première partie des transparents de mon cours est disponible ici.

NanoPi

Quand je suis fatigué parce que malade, une chose que j'aime bien faire est de la bidouille informatique, parce que ça ne demande pas d'avoir l'esprit trop réveillé.

Il y a une douzaine d'années j'avais acheté des nano-ordinateurs du nom de DreamPlug pour servir de routeurs chez moi et chez mes parents (je n'aime pas les *box qu'on nous oblige à prendre avec tout abonnement ADSL ou fibre, et sur lequel on n'a essentiellement aucun contrôle : donc le but est d'avoir une machine Linux qui remplace la *box en servant de routeur et pare-feu domestique, point d'accès wifi, et éventuellement d'autres choses comme stockage disque), ou simplement pour jouer avec. Ce qui m'intéressait aussi était de mettre la main sur une architecture ARM pour changer du x86/x86_64 de Intel et AMD.

(Pour ceux qui ne sont pas familiers avec le terme, un nano-ordinateur ou ordinateur embarqué — ce n'est pas exactement pareil mais aucun de ces termes n'est très précisément défini — est un ordinateur d'une taille intermédiaire entre un PC portable usuel et un téléphone mobile — rappelons à ce sujet que les smartphones Android sont tous des ordinateurs Linux, d'ailleurs typiquement d'architecture ARM, mais ce n'est pas tout à fait pareil qu'un nano-ordinateur. Un nano-ordinateur est typiquement alimenté par un câble du genre USB ; il n'a normalement pas de ventilateur ni de disque qui tourne, ce qui le rend parfaitement silencieux ; souvent il n'aura ni clavier ni souris ni écran, mais sera utilisé à distance, comme c'est le cas pour un routeur. Il peut servir à plein de choses pour lequel on a besoin d'un ordinateur très compact et/ou peu gourmand en énergie : mon poussinet, par exemple, utilise un Raspberry Pi pour relever automatiquement un compteur de consommation électrique dans le sous-sol de notre copropriété, afin de payer au syndicat des copropriétaires la consommation de la recharge de sa voiture électrique qui est prise par convention sur les parties communes ; donc le nano-ordinateur, ici, sert juste à interroger le sous-compteur et enregistrer les valeurs mesurées en heures pleines et en heures creuses. Évidemment, il y a quand même des gens qui utilisent un nano-ordinateur comme un ordinateur normal, par exemple pour le transporter avec eux dans leurs bagages en espérant trouver la possibilité de brancher clavier et écran n'importe où… bref, ça peut servir à plein de choses.)

Le nano-ordinateur ARM tournant sous Linux le plus populaire de très loin est le Raspberry Pi, qui a eu un succès dingue auprès d'un public étonnamment large, montrant les choses rigolotes qu'on peut faire avec ce genre de petites « boîtes à tout faire ». Il ne convient cependant pas trop à mes usages parce qu'il n'a qu'un seul port Ethernet, alors que j'en veux au moins deux et idéalement trois.

Mes DreamPlugs jouent leur rôle (il y en a un dont l'alim est morte, mais les deux restants servent de routeur, un chez moi et un chez ma mère), mais un certain nombre de choses se sont avérées décevantes. Le fabricant fournissait une version de Linux de qualité douteuse (et surtout, comme souvent dans ce cas, pas du tout maintenue après) : j'ai réussi, avec beaucoup d'efforts, à mettre une Debian Linux beaucoup plus standard, mais tout le processus de démarrage a toujours été un enfer. (On démarre typiquement un ordinateur ARM avec un lanceur appelé U-Boot — appréciez le jeu de mot — qui va ensuite lancer le noyau Linux et tout ce qui suit. Mais installer ou réinstaller U-Boot lui-même est une véritable plaie, et dépend très fortement du type de machine : dans le cas du DreamPlug il fallait en gros attraper le contrôle du processeur par un mécanisme appelé JTAG, et qui marchait une fois sur dix. Et il y avait des incompatibilités subtiles entre versions de U-Boot et versions de Linux, surtout que juste au moment où j'ai commencé à me servir de ce truc ils ont décidé de changer de mécanisme de démarrage et inventé un truc, bien sur le principe mais pénible dans la transition, appelé les fichiers devicetree.) À cause de ça, DreamPlugs sont sous une version de Linux antédiluvienne, et je n'ose plus toucher à quoi que ce soit. En plus de ça, ils sont extrêmement lents, et le port USB est extrêmement peu fiable (aléatoirement il décide de ne plus marcher).

Je voulais quelque chose de plus moderne. Sur la base de recommandations concordantes, je me suis orienté vers les NanoPi (qui, malgré leur nom, n'ont pas grand-chose à voir avec le Raspberry Pi autrement qu'ils essaient de surfer sur la popularité de ce dernier, si bien que Pi est devenu un terme général pour nano-ordinateur). Spécifiquement, le NanoPi R6S (fiche produit ici, documentation là).

Plus chers que mes DreamPlugs, mais beaucoup plus attirants par certains aspects : trois ports Ethernet gigabit plus deux ports USB, ça c'est vraiment quelque chose qui me plaît, alimentation par USB-C pour éviter la multiplication des alims foireuses, démarrage par carte SD qui devrait éviter les manipulations hasardeuses du JTAG en cas de brickage accidentel, architecture ARM-64 avec 8 cœurs, bref, c'est un ordinateur raisonnablement puissant qui devrait pouvoir compiler ses propres noyaux (ça évite les tracas de la compilation croisée x86→ARM). Et en plus on peut y brancher un clavier et un écran si on veut faire des manipulations en console (alors qu'avec les DreamPlugs on ne pouvait avoir qu'une console série, et c'est vraiment pénible à utiliser).

Mais bon, comme le dit mon ami David Monniaux, le chemin de l'enfer est pavé de petites crottes de ragondin.

Le fabricant (FriendlyElec) fournit différents systèmes d'exploitation pour ses NanoPi (voir la page de documentation liée ci-dessus). Je me méfie pas mal de ces Linux dont on ne sait pas très bien ce qu'ils contiennent, et surtout, combien de temps ils seront maintenus. À vrai dire, le Debian modifié fourni par FriendlyElec semblait bien fonctionner, mais je n'ai pas compris comment était structuré son processus de démarrage (ce qui est un problème si on veut le modifier, par exemple mettre à jour le noyau pour corriger un trou de sécurité ou apporter un changement quelconque).

Je me suis alors tourné vers Armbian, qui est aussi une modification de Debian Linux, mais communautaire celle-ci, et qui vise à supporter énormément de nano-ordinateurs ARMl'exception notable du Raspberry Pi). De fait, elle marche très bien dessus (j'ai gribouillé quelques notes ici si ça intéresse quelqu'un).

Mais même si les choses marchent bien, on peut commettre plein d'erreurs et perdre plein de temps avec : j'ai cru avoir des bugs bizarres, par exemple, alors qu'en fait j'essayais de renommer les interfaces Ethernet eth1 et eth2 de façon systématique (ce qui apparemment n'est pas supporté par Linux : on peut les nommer en gros n'importe comment sauf à essayer de garder les noms par défaut mais en fixant les numéros de façon reproductible ; autrement dit, Linux permet tout sauf exactement ce que j'aurais voulu faire, qui était de permuter eth1 et eth2 quand elles apparaissaient dans le mauvais ordre : c'est quand même assez fou comme limitation stupide de ne pas savoir échanger deux noms de façon atomique) ; et ceci causait des problèmes mystérieux ailleurs (les adresses MAC étaient cassées, je ne rentre pas dans les détails de pourquoi).

Et après avoir perdu un temps totalement déraisonnable à reproduire la config de mon ancien routeur (DreamPlug) sur le NanoPi, j'ai découvert un problème inattendu : le noyau Linux fourni par Armbian n'a pas prévu le support du petit bitoniau USB qui me sert d'antenne wifi (ils ne compilent pas le module ath9k_htc dont j'ai besoin). Ce qui devrait être un problème mineur et facile à régler (recompiler un noyau avec une configuration un peu différente), sauf que… je ne comprends pas comment Armbian organise ses sources de noyau, et comment reproduire leur processus de compilation. (Ils fournissent un script tout-en-un qui prépare les sources et compile tout, mais évidemment ce script dépend de choses comme Docker que je ne sais pas utiliser, et en tout cas ne marche pas chez moi. Il n'y a pas juste un noyau Armbian standard trouvé à un endroit standard et qu'on peut configurer et compiler de façon standard, il faut comprendre toute leur sauce autour.) Après trop d'heures perdues j'ai fini par jeter l'éponge. Donc j'ai dû tout annuler et revenir sur mon DreamPlug qui décidément ne se laisse pas si facilement remplacer.

Coda : méditation sur les problèmes informatiques

Le méta-problème avec les problèmes informatiques, c'est qu'on se sent tellement seul face à eux.

Quand j'ai un problème mathématique, le plus souvent c'est un problème sérieux et dur, je peux concentrer le problème de façon raisonnablement concise, et, si je n'arrive pas à le résoudre par moi-même, le soumettre à des collègues ou sur MathOverflow.

Les problèmes informatiques, et par informatique je parle de l'informatique comme ensemble de technologies et pas comme science, ne sont typiquement pas clairement isolables, c'est bien le problème : ils apparaissent dans un contexte donné, qui est souvent assez compliqué (le problème se produit sur tel ordinateur quand on cherche à faire telle chose précise, et il dépend sans doute de plein de facteurs sur cet ordinateur et relatif à ce but, qui peut lui-même être compliqué), et une bonne partie de la difficulté est d'analyser le contexte. En général, ce n'est pas tant d'intelligence qu'il y a besoin, mais de patience pour essayer de démêler les fils du contexte, faire des essais (qui sont souvent lents et fastidieux, surtout s'il faut redémarrer une machine ou lancer plein de commandes), lire des documentations mal écrites (ou chercher les documentations en question), comprendre du code mal commenté, etc. C'est compatible avec l'esprit rendu brumeux par la fatigue d'une mauvaise nuit covidée, mais ce n'est pas agréable.

Là par exemple je dois essayer de comprendre comment Armbian organise sa compilation de noyau Linux pour pouvoir y ajouter un module (et/ou saisir ce que leur script censé tout faire d'un coup essaye de faire, et pourquoi il ne marche pas). Forcément je vais y arriver, mais ça va être extrêmement long et fastidieux, et ce n'est pas clair que le résultat soit satisfaisant (peut-être que cette antenne wifi USB ne marchera pas sur le NanoPi pour une raison d'obscure incompatibilité USB et que j'aurai tout fait en vain).

En fait, le plus souvent, je me dis que ce dont j'ai besoin quand je rencontre des problèmes lors de bidouilles informatiques, ce n'est pas de l'aide au sens de quelqu'un qui s'y connaîtrait très bien et qui me donnerait des réponses, mais plutôt le support émotionnel de quelqu'un qui écouterait le récit de mes problèmes, accepterait de s'intéresser au contexte précis, m'apporterait des suggestions occasionnelles sur comment il s'y prendrait, et surtout m'aiderait à traverser cette épreuve de patience. Je peux raconter mes aventures sur mon blog, et me plaindre que la vie est dure, mais ce n'est pas aussi cathartique.

Quand j'étais à l'ENS (à une époque où c'était un peu moins évident que tout le monde avait son PC à lui) il y avait une salle informatique partagée (la salle S) dans laquelle beaucoup de normaliens venaient sur les machines fournies par l'école, notamment pour hacker (au sens : écrire du code, bidouiller, chercher à comprendre comment quelque chose fonctionne… ; pas au sens, ou en tout cas pas forcément au sens, de chercher à pirater quelque chose), et souvent se soutenaient moralement les uns les autres dans ce qu'ils essayaient de faire (tu fais quoi, là ?j'essaie de comprendre pourquoi Apache se plante dans la négociation de contenu MIMEça a l'air passionnant, raconte-moi un peu). Maintenant quand je suis face à un problème informatique, je me sens résolument seul (le poussinet ne veut pas s'y intéresser, ou me dit que je suis assez compétent pour m'en sortir, ce qui est sans doute vrai, mais ce n'est pas qu'une question de compétence). Peut-être qu'il faudrait recréer des « bidouillodromes » informatiques pour recréer l'ambiance j'écoute un peu tes problèmes, tu écoutes un peu les miens, et on échange quelques suggestions.

↑Entry #2763 [older| permalink|newer] / ↑Entrée #2763 [précédente| permalien|suivante] ↑

[Index of all entries / Index de toutes les entréesLatest entries / Dernières entréesXML (RSS 1.0) • Recent comments / Commentaires récents]