David Madore's WebLog: 2023-10

Vous êtes sur le blog de David Madore, qui, comme le reste de ce site web, parle de tout et de n'importe quoi (surtout de n'importe quoi, en fait), des maths à la moto et ma vie quotidienne, en passant par les langues, la politique, la philo de comptoir, la géographie, et beaucoup de râleries sur le fait que les ordinateurs ne marchent pas, ainsi que d'occasionnels rappels du fait que je préfère les garçons, et des petites fictions volontairement fragmentaires que je publie sous le nom collectif de fragments littéraires gratuits. • Ce blog eut été bilingue à ses débuts (certaines entrées étaient en anglais, d'autres en français, et quelques unes traduites dans les deux langues) ; il est maintenant presque exclusivement en français, mais je ne m'interdis pas d'écrire en anglais à l'occasion. • Pour naviguer, sachez que les entrées sont listées par ordre chronologique inverse (i.e., la plus récente est en haut). Cette page-ci rassemble les entrées publiées en octobre 2023 : il y a aussi un tableau par mois à la fin de cette page, et un index de toutes les entrées. Certaines de mes entrées sont rangées dans une ou plusieurs « catégories » (indiqués à la fin de l'entrée elle-même), mais ce système de rangement n'est pas très cohérent. Le permalien de chaque entrée est dans la date, et il est aussi rappelé avant et après le texte de l'entrée elle-même.

You are on David Madore's blog which, like the rest of this web site, is about everything and anything (mostly anything, really), from math to motorcycling and my daily life, but also languages, politics, amateur(ish) philosophy, geography, lots of ranting about the fact that computers don't work, occasional reminders of the fact that I prefer men, and some voluntarily fragmentary fictions that I publish under the collective name of gratuitous literary fragments. • This blog used to be bilingual at its beginning (some entries were in English, others in French, and a few translated in both languages); it is now almost exclusively in French, but I'm not ruling out writing English blog entries in the future. • To navigate, note that the entries are listed in reverse chronological order (i.e., the most recent is on top). This page lists the entries published in October 2023: there is also a table of months at the end of this page, and an index of all entries. Some entries are classified into one or more “categories” (indicated at the end of the entry itself), but this organization isn't very coherent. The permalink of each entry is in its date, and it is also reproduced before and after the text of the entry itself.

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

Entries published in October 2023 / Entrées publiées en octobre 2023:

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

(vendredi)

Échecs de Víctor L. Pinel

Digression préliminaire : Je ne suis pas un gros consommateur de fictions (quel que soit le format : romans, films…) pour une raison sur laquelle il faudra que je revienne plus longuement dans un billet ultérieur, à savoir mon agacement devant la manie des histoires qui ne finissent jamais, soit parce qu'elles font partie de cycles interminables (pensez aux séries télé, enfin, maintenant il s'agit plutôt de séries Internet), ou bien, même quand ce n'est pas le cas à la conception ou d'ailleurs aussi quand c'est le cas, on trouve toujours moyen de leur donner des suites tant que le public en demande… si bien que je me sens trop souvent frustré de mon désir de résolution. Je détaillerai peut-être un peu ultérieurement dans une autre entrée, mais si je mentionne ce fait ici c'est pour parler de bandes dessinées. Parce que mon agacement devant les cycles qui ne terminent jamais n'est pas tout à fait le même s'agissant de romans et de bédés : un cycle de quatorze romans de 800 pages chacun (I'm looking at you, Wheel of Time) me rebute simplement parce que la vie est trop courte, je suis déjà trop vieux, et j'ai trop d'autres trucs à faire pour consacrer à ce genre de choses le temps et la patience qu'elles requièrent ; mais s'agissant de bédés, le problème est surtout que je trouve exaspérant d'attendre un an ou deux pour avoir le nouveau volet du cycle que, au contraire du roman de 800 pages, je lirai en une heure. (Et si j'attends que le cycle soit complet avant de le commencer, en général le premier livre est déjà épuisé quand le dernier paraît.) Bref : je ne suis jamais content, et je n'aime pas les cycles.

Tout ce qui précède est là pour dire que ce qui m'a attiré dans la bédé à laquelle je consacre ce billet, c'est que ce n'est pas un petit bout d'un cycle, et c'est ce qui m'a décidé à l'acheter après avoir passé pas mal de temps dans une librairie spécialisée en bédés à reposer volume après volume étiqueté quelque chose comme volume 17 dans le Cycle des Chevaliers de la Tour du Temps. C'est une histoire complète. (D'ailleurs, puisque l'éditeur prend la peine de l'écrire noir sur blanc au dos, j'imagine que je ne suis pas le seul pour qui les mots histoire complète ont quelque chose de rassurant.)

Cette bédé, donc, a (un début et) une fin, du moins ce que je considère comme une fin, ce qui ne veut pas forcément dire que tout est mené à son terme, mais que je ne me sens pas volé de mon sens de résolution, et je n'ai pas l'impression d'avoir lu une pub qui essaie de me vendre une suite. Une fin comme une partie d'échecs : il reste des choses sur l'échiquier, mais on a l'impression que quelque chose s'est joué jusqu'à son terme.

Mais je cherche ici à dire un peu plus que cette histoire a une fin : un type de récit qui me plaît particulièrement est — je ne sais pas le définir très précisément — celui qui construit une tapisserie en nouant les fils de plusieurs personnages dont aucun n'est véritablement central, qui vont se croiser et interagir et tisser ensemble un tableau dont aucun n'a de vision d'ensemble.

Je ne sais pas si ma description est très claire. Disons que c'est un peu l'opposé du cycle, lequel va explorer les personnages dans la longueur (i.e., dans le temps) : le type dont je parle les explore, au contraire, dans la largeur (i.e., dans leurs interactions complexes les uns avec les autres).

Le meilleur exemple que je puisse donner est ce qui est sans doute mon livre préféré : La Vie mode d'emploi de Georges Perec — qui est peut-être plus une collection de nouvelles interdépendantes qu'un roman, un livre qui (tout en remplissant toutes sortes de contraintes oulipiennes très savantes et complexes, qu'on peut parfaitement ignorer en le lisant) raconte, de façon généralement pas chronologique, la vie d'un immeuble parisien et ses différents habitants, entre 1885 et 1975, et la manière dont leurs chemins se croisent parfois (en amour, rivalité, haine et toutes sortes d'autres péripéties) ou parfois s'ignorent.

J'ai pris ci-dessus la métaphore (classique) de la tapisserie dont les personnages sont des fils dessinant un motif qui les dépasse : les lecteurs de La Vie mode d'emploi seront aussi familiers de celle du puzzle où on cherche à comprendre la manière dont tous les morceaux s'emboîtent et dans quel ordre il faut les mettre. On pourrait évoquer un morceau de musique où les voix ou instruments se répondent tout en concourant ensemble à la résolution. Mais une autre métaphore possible, plus active et plus confrontationnelle (et qui joue d'ailleurs aussi un rôle dans le roman de Perec, aussi bien dans le contenu que dans les contraintes formelles) est celle du jeu d'échecs : les pièces sur l'échiquier jouent une partie qui dépasse chacune d'elles, dont elles ne voient chacune qu'une petite partie, mais à laquelle elles contribuent toutes de façon essentielle.

Ces différentes métaphores peuvent s'appliquer à la bédé dont je parle ici, mais c'est la dernière que l'auteur a choisi d'utiliser explicitement pour construire son histoire, en comparant ses personnages à des pièces du jeu d'échecs. Ceci n'est pas transformé en une contrainte dure comme chez Perec ; il n'y a pas, par exemple, trente-deux personnages clairement regroupés en deux camps adverses, et je ne pense pas non plus qu'il y ait de contrainte d'écriture cachée au lecteur (comme le serait par exemple l'association à chaque case de l'échiquier d'un motif à faire intervenir dans l'histoire). On a donc plutôt affaire à une contrainte artistique « douce », mais ça ne m'empêche pas de la trouver très bien utilisée, comme l'est la mise en abyme du jeu d'échecs dans la bédé. D'ailleurs, la chute justifie en quelque sorte le fait de ne pas avoir suivi de contrainte formelle rigide.

Bref, tout ça est très réussi. (Et je dis ça alors que je n'aime pas spécialement le jeu d'échecs — auquel je suis vraiment très mauvais.)

Pour dire quand même un peu de quoi il s'agit sur le fond, ça se passe de nos jours, à Bordeaux (je crois que ce n'est jamais dit, mais on reconnaît bien la ville même si on ne la connaît qu'un peu), et divers personnages vont se croiser : un lycéen frimeur qui accumule les conquêtes, une élève nouvelle venue dans le même lycée, la directrice d'une maison de retraite, un infirmier qui y travaille, un bénévole qui vient tenir compagnie aux pensionnaires, l'acteur vedette d'une série télé qui se sent pris au piège dans son rôle, deux amies qui se confient leur vie amoureuse, une bibliothécaire dont le mari est passionné de danse, et une vieille dame acariâtre finissant ses jours dans la maison de retraite et qui est passionnée d'échecs. Les actions de certains de ces personnages vont avoir des effets sur d'autres les obligeant à agir à leur tour, avec une cascade de conséquences. Ce n'est pas une énigme, mais il y a néanmoins une ou deux révélations qui sont faites à la fin sur le fond et sur la nature de la narration, qui peuvent passer pour des coups de théâtre.

Globalement, j'ai beaucoup aimé, et je recommande tout à fait, notamment aux gens qui, comme moi, apprécient les histoires qui ne sont pas interminables mais qui sont bien construites et qui apportent un sens de résolution.

Échecs de Víctor Lorenzo Pinel, 176 pages, édition Grand Angle.

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

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

(samedi)

Une nouvelle toux qui n'en finit pas

J'ai raconté il y a deux semaines que j'avais eu la covid (pour la 3e ou peut-être même 4e fois) : ça s'est manifesté sous forme d'un gros rhume, bien pénible mais pas particulièrement affolant, qui a duré environ une semaine sous cette forme (en gros du au ). Sauf que si les symptômes de rhume ont disparu (fatigue générale, mal à la gorge, nez bouché, ganglions enflés, mal à la tête, sinusite ; et un nouvel autotest covid a été négatif), il y en a un qui persiste obstinément, et qui a même empiré, c'est la toux. Je tousse surtout la nuit : pas de façon continue, mais par grosses quintes, de l'ordre de trois par nuit, qui sont très violentes et me réveillent, et durent jusqu'à ce que je me lave le nez, du coup ça m'empêche de bien dormir. (En plus de ça, je dors dans le salon pour ne pas déranger le poussinet, et c'est nettement moins confortable.)

J'ai consulté un médecin lundi, qui n'a pas repéré d'infection (notamment, l'auscultation des bronches est normale) et m'a donc prescrit un corticoïde (béclométasone) en inhalation à faire le soir… ce qui ne semble pas aider du tout. Rien n'a l'air d'évoluer depuis dix jours : si progrès il y a, il est très très lent.

On pourrait être tenté d'appeler ça un covid long, sauf que j'ai assez souvent eu tendance à tousser longtemps après mes rhumes, et notamment, il y a cinq ans et demi, j'ai eu un rhume (qui n'était certainement pas le covid, en 2018) dont la toux s'est prolongée très longtemps, et je pourrais reprendre presque mot pour mot aujourd'hui la description que je faisais alors :

J'ai eu un rhume qui, depuis […,] a évolué en une toux persistante, presque uniquement nocturne, et qui m'empêche de dormir correctement. Dans la journée, tout va bien, je tousse un petit peu mais rien de vraiment gênant, je n'ai aucune fièvre, pas de ganglions enflés, aucune fatigue particulière (autre que celle due au manque de sommeil), aucune douleur notable (sauf à la gorge et aux sinus, juste quand je me lève après avoir tellement toussé). Mais dès que je suis couché, c'est quinte de toux sur quinte de toux, et impossibles à résister […]. Certaines crises de toux sont tellement fortes que je sens que je risque de vomir.

Impossible de savoir clairement si c'est une toux grasse ou sèche : j'ai quelques mucosités qui sortent, j'ai l'impression qu'elles refluent de l'arrière du nez […]. Peut-être que c'est juste l'irritation de la toux qui produit du mucus et pas le contraire. En tout cas, mes bronches elles-mêmes ne sont pas encombrées.

Je vois de ce que j'ai noté dans ce blog et dans mon journal qu'en 2018 il s'est écoulé approximativement quatre semaines entre les premiers symptômes de rhume et la fin de la toux. Donc peut-être que je dois m'attendre à ce que j'en aie encore jusqu'à fin octobre, ce qui m'emmerde bien. (L'autre chose que je remarque est qu'en 2018 j'ai eu bien mal à la gorge dès le début du rhume, et cette fois-ci aussi : peut-être donc que le mal de gorge au début est indicateur du fait que ça va déboucher sur une toux interminable ?)

En remontant plus loin, je me rappelle qu'à l'automne 1996 j'ai eu un rhume qui a débouché en une toux interminablement longue (j'étais à l'internat à l'ENS et je m'étais dit que mes voisins de chambre devaient me détester parce que chaque nuit je toussais à n'en plus finir). Comme je ne tenais pas de journal à l'époque, mes souvenirs ne sont pas plus précis que ça, notamment sur combien de temps ça a duré.

Bon, sans doute que cette toux-ci va finir par passer, mais je reste assez perplexe. Manifestement, ce n'est pas tellement le virus initial qui est en cause, puisque j'ai exactement le même phénomène avec une covid (diagnostiquée comme tel par un test antigénique, je suppose que ces trucs n'ont pas tellement de faux positifs) qu'avec une infection en 2018 qui ne pouvait pas être due à SARS-CoV-2 ; de toute façon, le test antigénique suggère que le virus n'est plus présent. Et il n'y a pas non plus de signe d'une réinfection bactérienne (pas de fièvre, pas de bronchite…). Mais si c'est une sorte de réaction immunitaire post-infection, on s'attendrait à ce que les corticoïdes ou les antihistaminiques aident : or ils n'ont pas l'air de faire le moindre effet (pas plus que l'acétylcystéine, dont la seule fonction semble être de me rappeler le goût de la cystéine).

Et manifestement je suis loin d'être le seul à qui ça arrive : une personne que je connais a eu quelque chose de semblable il y a deux ans, avec une vraie bronchite à la clé (qui est passée avec des antibiotiques), puis de nouveau récemment (mais la toux est passée d'elle-même). Une autre personne que je connais m'a dit avoir eu presque exactement la même chose que moi, et à peu près au même moment, en 2018. Et on trouve aussi quantité de pages Web, de qualité douteuse, qui documentent le phénomène (par exemple celle-ci ou celle-là) sans rien dire d'utile pour autant. Alors à défaut de pouvoir faire autre chose, je documente à mon tour le phénomène en une page Web de qualité douteuse qui ne dit rien d'utile pour autant.

Mise à jour ( — initialement insérée sur le mauvais billet) : Je pense que maintenant je peux dire que ma toux est finie (i.e., revenue à son état normal : ça m'arrive quand même occasionnellement de tousser !). Mais ça aura duré plus d'un mois !

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

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

(mercredi)

Oracles en calculabilité : degrés de Turing et diverses généralisations

Avant-propos et motivation

Avant-propos : J'ai publié il y a quelque temps un billet de vulgarisation sur la notion d'« oracle » en informatique théorique. Ce billet-là (qui se veut grand public) était initialement destiné à être l'introduction à celui-ci (plus technique — mais, j'espère, pas incompréhensible pour autant), mais j'ai décidé de les publier séparément parce qu'ils sont, en fait, à peu près indépendants : on peut donc commencer par lire celui-là si on veut une sorte d'explication introductive et de motivation du sujet, mais ce n'est pas nécessaire non plus.

Ce billet-ci, plus technique mais j'espère pas incompréhensible pour autant (voir le paragraphe suivant pour les prérequis), vise à présenter la notion classique de degré de Turing, et ensuite diverses généralisations de celles-ci dans la recherche contemporaine en logique / calculabilité. Mais je trouve aussi intéressant de vulgariser la notion (classique) de non-déterminisme et celle (pas du tout classique, mais que je trouve très intéressante) de « co-non-déterminisme » (le terme est de moi).

Pour ce qui est des prérequis, ce billet-ci s'adresse à des lecteurs qui savent déjà les bases de la calculabilité : c'est-à-dire en gros, ce qu'est une machine de Turing ou un algorithme (c'est-à-dire au moins approximativement : je n'ai pas l'intention de rentrer dans quelques détails que ce soit sur les état et les bandes), et une fonction calculable (c'est-à-dire, calculable au sens de Church-Turing), ce genre de choses. Je vais essayer de faire en sorte de ne supposer connu (outre des maths générales, du genre ce que c'est qu'une fonction, un ensemble, une partie, une bijection, un ordre, une relation d'équivalence…) que le contenu du chapitre 5 (Introduction à la calculabilité) des notes de mon cours Théorie des langages à Télécom, auquel je peux donc renvoyer pour ces notions de base en calculabilité (en attendant un nouveau cours sur le sujet). • Ajout () : la première partie des transparents de mon nouveau cours est disponible ici.

En tout cas, je ne suppose pas connu la notion de degré de Turing puisque mon but est justement de l'expliquer et de voir comment on peut aller plus loin. (Néanmoins, soyons honnête, les lecteurs déjà un minimum familiers du concept trouveront sans doute mon billet plus facile à suivre que si on le découvre pour la première fois ici.)

Mon but ici est d'abord de définir la notion (tout à fait standard) de réduction de Turing et de degré de Turing, puis de présenter des extensions de ces notions qui me semblent à la fois très importantes et profondément naturelles. J'ai appris l'existence de ces notions en lisant deux articles d'un certain Takayuki Kihara, Lawvere-Tierney topologies for computability theorists et Rethinking the notion of oracle (et dans une moindre mesure Degrees of incomputability, realizability and constructive reverse mathematics, mais je n'ai pas fini celui-là) : je cherche donc à la fois à faire de la pub pour ces articles et pour les notions qu'ils contiennent (parce qu'elles ont vraiment changé la manière dont je pense à la calculabilité), à montrer que ces notions ne sont pas terriblement techniques, et aussi simplement à assurer ma propre compréhension de ces articles en en réexposant certains bouts à ma façon. En outre, j'espère avoir apporté quelques éléments d'intuition utiles derrière certaines des définitions ou des concepts que j'expose. Je trouve particulièrement intéressante la notion de « co-non-déterminisme » (le passage du niveau T2 au niveau T3), donc mon but est notamment de faire de la pub pour ce concept (qui pourrait sans doute s'avérer fécond en-dehors de la calculabilité).

(Notons que j'attribue ces notions à Kihara, qui les a au moins synthétisées, et c'est par lui que je les ai apprises ; mais je ne prétends pas qu'il a tout inventé — il a plutôt réussi à relier, reformuler et réexposer de façon extrêmement convaincante des notions dont certaines figuraient déjà ailleurs : je renvoie aux références de ses papiers pour les citations antérieures, mais je peux par exemple mentionner Basic Subtoposes of the Effective Topos de Lee & van Oosten, ou Instance reducibility and Weihrauch degrees de Bauer, qui sont dignes d'intérêt si on apprécie le sujet.)

Bref, je veux commencer par expliquer ce qu'est un degré de Turing ordinaire (celui d'une fonction — totale, simplement valuée — ℕ→ℕ), puis donner trois extensions successives de cette notion (je vais parler de degrés T1, T2 et T3 faute de meilleure terminologie — Kihara n'en introduit pas vraiment). en expliquant ce qu'elles changent, et si possible pourquoi elles sont naturelles et intéressantes, et ce qu'on peut en dire : d'abord (T1) aux fonctions partielles, puis (T2) aux fonctions multivaluées (ou non-déterministes), et enfin (T3) aux « fonctions avec conseil » (une sorte de « co-non-déterminisme »). Enfin, je veux essayer d'expliquer pourquoi on a fait la « bonne » généralisation, et pour ça, je donne, en guise de dessert, une construction tout à fait différente des degrés (T1, T2 et surtout) T3 qu'on aura définis par des opérateurs effectifs locaux (et évoquer brièvement le lien avec le topos effectif, sur lequel j'ai récemment écrit un billet, mais je ne suppose pas qu'on ici l'a lu).

Conseil de lecture (en guise de leitfaden) : Je sais que j'ai tendance à entrer parfois dans de grandes digressions pas forcément tellement utiles. J'ai essayé de les marquer comme telles (par des petits caractères, ou en disant dès le début d'une section qu'on peut sauter celle-ci) ; je n'ai sans doute pas toujours marqué tout ce qui pouvait être sauté, mais les dépendances entre sections ne sont pas énormes. Même si on n'a pas lu tout ce qui précède, je pense que ça vaut la peine de goûter le dessert (surtout si on n'est pas convaincu par l'intérêt des définitions qui ont précédé, car, après tout, il s'agit plus ou moins de les justifier). Et surtout, je pense que ça vaut la peine de jeter un coup d'œil à la définition des degrés T3 pour la définition du « co-non-déterminisme », ou simplement parce que le jeu à trois joueurs entre Arthur, Nimué et Merlin est vraiment rigolo.

Table des matières

T0 : Degrés de Turing ordinaires (fonctions ℕ→ℕ totales simplement valuées)

Réduction de Turing ordinaire et degrés de Turing

La notion la plus standard est la réduction de Turing ordinaire (j'ajoute ordinaire parce que toutes les notions qui viennent peuvent légitiment être aussi qualifiées de réduction de Turing), et je vais commencer par la définir précisément et dire quelques choses basiques à son sujet. Elle concerne les fonctions ℕ→ℕ (c'est-à-dire, totales, prenant une seule valeur pour chaque entier naturel), ou éventuellement ℕ→{0,1} mais ça ne changera rien à l'histoire.

Une fonction f:ℕ→ℕ est dite réductible au sens de Turing (=Turing-réductible) à une fonction g:ℕ→ℕ, ou bien calculable avec g pour oracle, et on note (disons) f ≼T g, lorsqu'il existe une machine de Turing (i.e., un algorithme) qui calcule f en ayant accès à un oracle calculant g, c'est-à-dire un gadget magique capable de fournir à l'algorithme la valeur de g en tout point souhaité.

Plus précisément, f ≼T g signifie qu'il existe une machine de Turing qui, quand on lui donne un entier n en entrée, termine toujours en temps fini et calcule f(n) comme sortie (peu importent les manières dont n et f(n) sont codés sur la bande de la machine de Turing tant que c'est raisonnable), sachant que la machine dispose de l'accès à un oracle qui peut calculer g(m) pour n'importe quel m donné. (Voici un exemple de protocole d'interrogation de l'oracle : la machine écrit m sur un ruban dédié, entre dans un état spécial interrogation de l'oracle, l'oracle remplace m par g(m) et place la machine dans l'état réponse de l'oracle ; mais les détails sont peu importants tant qu'on parle de calculabilité.) La machine peut interroger l'oracle autant de fois qu'elle le souhaite (y compris pas du tout, mais ça ne changerait d'ailleurs rien si on imposait d'appeler l'oracle puisqu'on peut ignorer sa réponse), et elle l'interroge sur les valeurs qu'elle veut et fait ce qu'elle veut des réponses : la réponse de l'oracle pour une valeur m est toujours exactement g(m), et c'est tout. (Le temps d'interrogation de l'oracle est une étape de calcul, mais ceci est peu important puisqu'on parle de calculabilité et pas de complexité.)

En particulier, toutes les fonctions calculables (c'est-à-dire : sans oracle) sont réductibles à n'importe quelle fonction, tout simplement en utilisant un programme qui ne fait aucun appel à l'oracle (en particulier, elles sont réductibles les unes aux autres, ou par exemple à la fonction constante égale à zéro).

J'insiste bien (parce que c'est ce qui va changer dans la suite) sur le fait que cette réduction de Turing « ordinaire » concerne des fonctions totales. Notamment, l'algorithme réputé calculer f en ayant g pour oracle est censé terminer pour toute valeur n qu'on lui fournit en entrée (du moins tant que n est une représentation légitime d'un entier naturel, et la valeur calculée doit aussi en être une ; mais là non plus, ces subtilités ne changent essentiellement rien). Je réitère aussi le fait que la consultation de l'oracle n'est pas limitée (ou payante) : l'algorithme a le droit de s'en servir aussi souvent qu'il le veut.

La réduction de Turing (ordinaire, mais ça restera vrai pour les généralisations que je vais introduire après) ≼T forme ce qu'on appelle un préordre (relation réflexive et transitive) sur l'ensemble des fonctions ℕ→ℕ, c'est-à-dire que :

  • d'une part, f ≼T f : toute fonction f est Turing-réductible à elle-même (c'est évident) ; et
  • d'autre part, f ≼T g et g ≼T h impliquent f ≼T h : si f est Turing-réductible à g et que g est Turing-réductible à h, alors f est Turing-réductible à h (c'est assez facile à voir : si je sais calculer f en utilisant g et que je sais calculer g en utilisant h, alors pour calculer f en utilisant h je vais utiliser l'algorithme qui me permet f au moyen de g et, à chaque fois que cet algorithme fait appel à l'oracle, j'utilise le programme qui me permet g au moyen de h à la place, en utilisant l'oracle donnant h comme boîte noire).

Ce qui manque à une relation de « préordre » pour être un ordre, c'est l'antisymétrie, et c'est justement ce qui justifie la définition suivante.

On dit que f et g sont Turing-équivalentes ou de même degré de Turing quand chacune est réductible à l'autre (i.e., on peut calculer f en ayant un oracle qui donne g, et réciproquement) : c'est-à-dire qu'on note (disons) f ≡T g lorsque f ≼T g et g ≼T f. Ceci est une relation d'équivalence (c'est la notion de relation d'équivalence associée à un préordre) : les classes d'équivalence sont appelées les degrés de Turing. Autrement dit, le degré de Turing [f]T de f est l'ensemble {g:ℕ→ℕ : g ≡T f} de toutes les fonctions ℕ→ℕ qui sont Turing-équivalentes à f, et notamment, elles sont toutes Turing-réductibles les unes aux autres. C'est-à-dire que deux fonctions sont Turing-équivalentes exactement quand elles ont le même degré de Turing.

Intuitivement, un degré de Turing est la mesure de la puissance d'un oracle. On peut aussi considérer que c'est une forme d'« impossibilité à calculer » la fonction ou bien de « quantité d'information » (totale) contenue dans la fonction f (mais ce n'est pas exactement la même façon de la mesurer que, disons, la complexité de Kolmogorov, pour ceux qui savent ce que c'est que ça : il y a des rapports, bien sûr, mais disons très sommairement que le degré de Turing est une mesure plus grossière que la complexité de Kolmogorov ; comme ce n'est pas mon propos ici, je ne vais pas en dire plus).

Le « préordre » de la réduction de Turing devient un vrai ordre (partiel) sur les degrés de Turing : on dit qu'un degré de Turing f est inférieur ou égal à un degré de Turing g, et on note fg, lorsque une (ou, ce qui revient au même, toute) fonction du degré f est Turing-réductible à une (ou, ce qui revient au même, toute) fonction du degré g. (Autrement dit, [f]T ≤ [g]T signifie par définition exactement la même chose que f ≼T g.)

Parmi les degrés de Turing, il en est un plus petit, qu'on note 0, c'est celui des fonctions calculables (c'est notamment celui de la fonction constante égale à 0, c'est-à-dire un oracle qui ne répond rien d'intéressant, et on peut voir ça comme une raison de cette notation ; si on préfère, c'est la puissance des oracles qui n'ont aucun intérêt comme oracles parce qu'on peut les calculer directement sans oracle).

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

↓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] ↑

Continue to older entries. / Continuer à lire les entrées plus anciennes.


Entries by month / Entrées par mois:

2024 Jan 2024 Feb 2024 Mar 2024 Apr 2024
2023 Jan 2023 Feb 2023 Mar 2023 Apr 2023 May 2023 Jun 2023 Jul 2023 Aug 2023 Sep 2023 Oct 2023 Nov 2023 Dec 2023
2022 Jan 2022 Feb 2022 Mar 2022 Apr 2022 May 2022 Jun 2022 Jul 2022 Aug 2022 Sep 2022 Oct 2022 Nov 2022 Dec 2022
2021 Jan 2021 Feb 2021 Mar 2021 Apr 2021 May 2021 Jun 2021 Jul 2021 Aug 2021 Sep 2021 Oct 2021 Nov 2021 Dec 2021
2020 Jan 2020 Feb 2020 Mar 2020 Apr 2020 May 2020 Jun 2020 Jul 2020 Aug 2020 Sep 2020 Oct 2020 Nov 2020 Dec 2020
2019 Jan 2019 Feb 2019 Mar 2019 Apr 2019 May 2019 Jun 2019 Jul 2019 Aug 2019 Sep 2019 Oct 2019 Nov 2019 Dec 2019
2018 Jan 2018 Feb 2018 Mar 2018 Apr 2018 May 2018 Jun 2018 Jul 2018 Aug 2018 Sep 2018 Oct 2018 Nov 2018 Dec 2018
2017 Jan 2017 Feb 2017 Mar 2017 Apr 2017 May 2017 Jun 2017 Jul 2017 Aug 2017 Sep 2017 Oct 2017 Nov 2017 Dec 2017
2016 Jan 2016 Feb 2016 Mar 2016 Apr 2016 May 2016 Jun 2016 Jul 2016 Aug 2016 Sep 2016 Oct 2016 Nov 2016 Dec 2016
2015 Jan 2015 Feb 2015 Mar 2015 Apr 2015 May 2015 Jun 2015 Jul 2015 Aug 2015 Sep 2015 Oct 2015 Nov 2015 Dec 2015
2014 Jan 2014 Feb 2014 Mar 2014 Apr 2014 May 2014 Jun 2014 Jul 2014 Aug 2014 Sep 2014 Oct 2014 Nov 2014 Dec 2014
2013 Jan 2013 Feb 2013 Mar 2013 Apr 2013 May 2013 Jun 2013 Jul 2013 Aug 2013 Sep 2013 Oct 2013 Nov 2013 Dec 2013
2012 Jan 2012 Feb 2012 Mar 2012 Apr 2012 May 2012 Jun 2012 Jul 2012 Aug 2012 Sep 2012 Oct 2012 Nov 2012 Dec 2012
2011 Jan 2011 Feb 2011 Mar 2011 Apr 2011 May 2011 Jun 2011 Jul 2011 Aug 2011 Sep 2011 Oct 2011 Nov 2011 Dec 2011
2010 Jan 2010 Feb 2010 Mar 2010 Apr 2010 May 2010 Jun 2010 Jul 2010 Aug 2010 Sep 2010 Oct 2010 Nov 2010 Dec 2010
2009 Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Jun 2009 Jul 2009 Aug 2009 Sep 2009 Oct 2009 Nov 2009 Dec 2009
2008 Jan 2008 Feb 2008 Mar 2008 Apr 2008 May 2008 Jun 2008 Jul 2008 Aug 2008 Sep 2008 Oct 2008 Nov 2008 Dec 2008
2007 Jan 2007 Feb 2007 Mar 2007 Apr 2007 May 2007 Jun 2007 Jul 2007 Aug 2007 Sep 2007 Oct 2007 Nov 2007 Dec 2007
2006 Jan 2006 Feb 2006 Mar 2006 Apr 2006 May 2006 Jun 2006 Jul 2006 Aug 2006 Sep 2006 Oct 2006 Nov 2006 Dec 2006
2005 Jan 2005 Feb 2005 Mar 2005 Apr 2005 May 2005 Jun 2005 Jul 2005 Aug 2005 Sep 2005 Oct 2005 Nov 2005 Dec 2005
2004 Jan 2004 Feb 2004 Mar 2004 Apr 2004 May 2004 Jun 2004 Jul 2004 Aug 2004 Sep 2004 Oct 2004 Nov 2004 Dec 2004
2003 May 2003 Jun 2003 Jul 2003 Aug 2003 Sep 2003 Oct 2003 Nov 2003 Dec 2003

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