David Madore's WebLog: 2025-03

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 mars 2025 : 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 March 2025: 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 March 2025 / Entrées publiées en mars 2025:

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

(vendredi)

L'Internet Archive et YouTube veulent me rendre malheureux

Les bugs informatiques sont pénibles en général, mais particulièrement frustrant quand ils concernent des choses sur lesquelles on n'a aucune prise. En l'occurrence, j'en ai concernant deux sites que j'utilise beaucoup : l'Internet Archive et YouTube ; et les deux chagrinent beaucoup mon côté obsédé par la préservation de l'information : à savoir, l'Internet Archive n'arrive plus à archiver ce site Web et YouTube efface mon historique au bout de 46 jours.

L'Internet Archive n'arrive plus à archiver ce site Web

L'Internet Archive, j'en ai déjà parlé dans le billet lié ci-dessus, c'est le bibliothécaire d'Internet : c'est à la fois une collection immense de livres et d'autres documents numérisés (certains dans le domaine public et librement téléchargeables, certains « empruntables » à diverses collections), mais aussi et surtout la Wayback Machine, un outil librement disponible pour faire des sauvegardes de pages Web publiquement accessibles (la Wayback Machine sauvegarde certaines pages Web de sa propre initiative, mais on peut aussi lui demander explicitement de faire une sauvegarde de telle ou telle page).

Si vous voulez vous en servir pour sauver une page, c'est ici que ça se passe (par défaut on a juste l'option de sauvegarder une page, mais si on crée un compte et qu'on se connecte, il y a quelques options supplémentaires qui apparaissent, comme celle de suivre les liens ou de capturer une image). Et si vous voulez sauvegarder tout un tas de pages, ou vérifier la présence de tout un tas de pages sur l'Archive, il y a ce service qui vous permet de mettre les liens dans un tableau Google Sheets et traiter les choses en bloc.

Je me sers régulièrement de l'Archive pour faire des « copies de sauvegarde » des billets de ce blog (et autres pages de ce site) : non seulement je demande à la Wayback Machine d'archiver (y compris en suivant les liens) chaque nouveau billet que j'écris dans ce blog, mais en plus, quand je fais un changement non-trivial sur le billet, je refais une sauvegarde. Et pour être sûr que je n'ai rien oublié, tous les quelques mois, j'utilise le service automatisé pour récupérer la date de la dernière archive de chaque billet de mon blog, comparer à la date de dernière modification, et si cette dernière est plus récente, refaire un archivage.

Enfin, ça c'est en temps normal, parce qu'en ce moment, ça ne marche plus sur mon site. En ce moment, ça veut dire depuis environ deux semaines, vu qu'une sauvegarde de l'avant-dernier billet a été enregistrée le , mais que le je n'arrivais plus à rien sauvegarder. Enfin, tout ça n'est peut-être pas 100% reproductible (il y a quand même une sauvegarde datée du dernier billet qui est apparue sur l'Archive, mais je pense que ce n'est pas moi qui l'ai faite, parce qu'à chaque fois que j'ai essayé, ça a échoué), mais globalement ça ne marche plus bien, voire plus du tout.

Ce qui se passe est que j'entre l'URL à sauvegarder dans le formulaire Web de l'Archive, ça mouline pendant environ une minute (ça c'est plus ou moins « normal », ça le fait tout le temps) et au final j'ai le message d'erreur : Save Page Now could not capture this URL because it was unreachable. (Vous pouvez tester en tentant de de demander une sauvegarde de votre billet préféré sur ce blog, d'ailleurs je vous encourage à le faire de temps en temps, des fois que ça marcherait quand même.) Si on réessaie, le message d'erreur apparaît presque instantanément, ce qui suggère que l'échec est gardé dans une sorte de cache.

J'ai essayé de contacter quelqu'un chez l'Internet Archive, mais je ne sais pas comment faire. J'ai écrit à info[arobase]archive[point]org, mais je pense que ça tombe juste à la poubelle, en tout cas, personne ne m'a répondu (je pense qu'ils sont complètement débordés). J'ai essayé de les contacter via les réseaux sociaux, sans plus de succès.

J'avais déjà rencontré ce problème en novembre dernier : j'avais écrit les détails sur une question posée sur le StackExchange Webmasters, mais je n'ai pas vraiment eu de réponse ni de suggestion utile, et c'est retombé en marche tout seul quelques semaines plus tard (je ne sais plus exactement quand). Comme à l'époque, l'Internet Archive venait d'être victime d'une cyberattaque importante, j'avais attribué le problème à cette attaque, ou à la réponse à cette attaque, et comme de toute façon ça s'est remis à marcher, je n'ai pas cherché plus loin.

Pour ce qui est de diagnostiquer le problème, je signale d'abord que ce n'est pas un problème de robots.txt (je dis ça parce que c'est la première réaction quand je parle du problème, et c'est assez normal). Je le sais pour plein de raisons : mon robots.txt n'a pas changé récemment, il n'interdit de toute façon pas les pages en question, mais par ailleurs la Wayback Machine ne consulte pas le robots.txt (au moins si on fait une requête explicite de sauvegarde) ; et de toute façon, je sais par mes logs que la requête est envoyée, c'est la réponse qui n'est pas (bien) reçue.

Ça semble être un problème de timeout : quand je demande à la Wayback Machine d'archiver une de mes pages, mon serveur reçoit bien la requête, il commence à envoyer les données, l'autre côté en ACKe une partie, et puis, brutalement, ferme la connexion (mon serveur reçoit un RST au niveau TCP). S'il y a des gens qui connaissent encore l'art de lire des tcpdump, ça ressemble à ceci (où 163.172.24.223 est mon serveur et 207.241.235.134 est celui de l'Archive ; scrollez pour voir l'ensemble de la trace, qui a 35 lignes) :

      1 2025-03-28 16:07:37.274134    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [SYN, ECE, CWR] Seq=0 Win=64240 Len=0 MSS=1396 SACK_PERM TSval=2277345292 TSecr=0 WS=128
      2 2025-03-28 16:07:37.274175    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [SYN, ACK, ECE] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=1216146941 TSecr=2277345292 WS=128
      3 2025-03-28 16:07:37.406425    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=2277345425 TSecr=1216146941
      4 2025-03-28 16:07:37.406667    207.241.235.134       163.172.24.223        HTTP     GET /~david/weblog/?1743177915 HTTP/1.1 
      5 2025-03-28 16:07:37.406713    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [ACK] Seq=1 Ack=397 Win=64768 Len=0 TSval=1216147074 TSecr=2277345425
      6 2025-03-28 16:07:37.408958    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=1 Ack=397 Win=64768 Len=2768 TSval=1216147076 TSecr=2277345425 [TCP segment of a reassembled PDU]
      7 2025-03-28 16:07:37.408988    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=2769 Ack=397 Win=64768 Len=2768 TSval=1216147076 TSecr=2277345425 [TCP segment of a reassembled PDU]
      8 2025-03-28 16:07:37.408998    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=5537 Ack=397 Win=64768 Len=2768 TSval=1216147076 TSecr=2277345425 [TCP segment of a reassembled PDU]
      9 2025-03-28 16:07:37.409230    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=8305 Ack=397 Win=64768 Len=2768 TSval=1216147076 TSecr=2277345425 [TCP segment of a reassembled PDU]
     10 2025-03-28 16:07:37.409250    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=11073 Ack=397 Win=64768 Len=2768 TSval=1216147076 TSecr=2277345425 [TCP segment of a reassembled PDU]
     11 2025-03-28 16:07:37.541302    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [ACK] Seq=397 Ack=2769 Win=63232 Len=0 TSval=2277345560 TSecr=1216147076
     12 2025-03-28 16:07:37.541334    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=13841 Ack=397 Win=64768 Len=2768 TSval=1216147208 TSecr=2277345560 [TCP segment of a reassembled PDU]
     13 2025-03-28 16:07:37.541349    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=16609 Ack=397 Win=64768 Len=2768 TSval=1216147208 TSecr=2277345560 [TCP segment of a reassembled PDU]
     14 2025-03-28 16:07:37.541547    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [ACK] Seq=397 Ack=5537 Win=60800 Len=0 TSval=2277345560 TSecr=1216147076
     15 2025-03-28 16:07:37.541548    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [ACK] Seq=397 Ack=8305 Win=58880 Len=0 TSval=2277345560 TSecr=1216147076
     16 2025-03-28 16:07:37.541548    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [ACK] Seq=397 Ack=11073 Win=56832 Len=0 TSval=2277345560 TSecr=1216147076
     17 2025-03-28 16:07:37.541548    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [ACK] Seq=397 Ack=13841 Win=54400 Len=0 TSval=2277345560 TSecr=1216147076
     18 2025-03-28 16:07:37.541572    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=19377 Ack=397 Win=64768 Len=2768 TSval=1216147209 TSecr=2277345560 [TCP segment of a reassembled PDU]
     19 2025-03-28 16:07:37.541595    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=22145 Ack=397 Win=64768 Len=2768 TSval=1216147209 TSecr=2277345560 [TCP segment of a reassembled PDU]
     20 2025-03-28 16:07:37.541611    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=24913 Ack=397 Win=64768 Len=2768 TSval=1216147209 TSecr=2277345560 [TCP segment of a reassembled PDU]
     21 2025-03-28 16:07:37.541847    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=27681 Ack=397 Win=64768 Len=2768 TSval=1216147209 TSecr=2277345560 [TCP segment of a reassembled PDU]
     22 2025-03-28 16:07:37.541870    163.172.24.223        207.241.235.134       TCP      http(80) → 54942 [PSH, ACK] Seq=30449 Ack=397 Win=64768 Len=2768 TSval=1216147209 TSecr=2277345560 [TCP segment of a reassembled PDU]
     23 2025-03-28 16:07:37.541901    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST, ACK] Seq=397 Ack=13841 Win=64128 Len=0 TSval=2277345560 TSecr=1216147076
     24 2025-03-28 16:07:37.673723    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     25 2025-03-28 16:07:37.673724    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     26 2025-03-28 16:07:37.673966    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     27 2025-03-28 16:07:37.674212    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     28 2025-03-28 16:07:37.674212    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     29 2025-03-28 16:07:37.674212    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     30 2025-03-28 16:07:37.674212    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     31 2025-03-28 16:07:37.674213    207.241.235.134       163.172.24.223        TCP      54942 → http(80) [RST] Seq=397 Win=0 Len=0
     32 2025-03-28 16:07:40.346538    207.241.237.136       163.172.24.223        TCP      47264 → https(443) [SYN, ECE, CWR] Seq=0 Win=64240 Len=0 MSS=1396 SACK_PERM TSval=722241495 TSecr=0 WS=128
     33 2025-03-28 16:07:40.346564    163.172.24.223        207.241.237.136       TCP      https(443) → 47264 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
     34 2025-03-28 16:07:40.628238    207.241.225.229       163.172.24.223        TCP      39280 → https(443) [SYN, ECE, CWR] Seq=0 Win=64240 Len=0 MSS=1396 SACK_PERM TSval=4199018082 TSecr=0 WS=128
     35 2025-03-28 16:07:40.628277    163.172.24.223        207.241.225.229       TCP      https(443) → 39280 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

En plus clair, l'Archive ouvre une connexion à 16:07:37.274134, envoie une requête à 16:07:37.406667, accuse réception des 13841 premiers octets reçus (16:07:37.541548), et tout d'un coup, à 16:07:37.541901, déclare brutalement la connexion fermée (donc 268ms après avoir ouvert la connexion, 135ms après avoir envoyé la requête, et même pas 1ms après avoir le dernier accusé de réception qu'elle a envoyé).

Mais si c'est un timeout, il est hyper court : personne ne s'attend sérieusement à ce qu'un site Web typique puisse envoyer complètement une page un peu volumineuse à peine 135ms après la réception de la requête (après tout, 135ms c'est à peine le temps qu'il faut à la lumière pour faire le tour de la Terre).

Et je ne comprends pas non plus pourquoi ça n'affecterait que mon site. Peut-être que c'est parce qu'il est accessible uniquement en HTTP (pour les raisons qu'on sait), ce qui devient de plus en plus rare à une époque où tout le monde veut mettre du HTTPS partout, même sur des sites complètement publics et sans aucun élément confidentiel : peut-être que l'Archive a un timeout différent en HTTP et en HTTPS et que celui en HTTP a été (provisoirement ? accidentellement ? comme effet de bord d'autre chose ?) placé à une valeur très basse, et que personne ne s'en est rendu compte parce qu'il n'y a que très peu de sites en HTTP (et qu'en plus, s'ils sont situés à une distance faible de l'Archive, c'est-à-dire de la Californie, ça peut quand même passer avec un timeout court).

Bref, si des gens ont des éléments de réponse, ou des conjectures, à proposer, je suis preneur. (Peut-être que je peux jouer avec les paramètres TCP pour envoyer plus rapidement toute la page, mais je ne sais pas si je veux vraiment jouer avec ça.)

Même si je cédais et que je rendais mon site accessible en HTTPS (ce que je vais certainement finir par faire un jour ou un autre quand cette merde sera devenue vraiment inévitable), ça ne réglerait vraiment rien : d'abord, je ne suis pas certain que ce soit vraiment le problème (c'est quand même super compliqué à tester vu combien HTTPS est une abomination à configurer, et je ne peux pas prendre le risque de le faire sur ce serveur-là des fois que Google découvrirait le port 443 ouvert et commencerait à la visiter) ; et même si c'est le cas, il faut quand même que l'Archive puisse archiver la version HTTP des pages, parce que rien ne garantit la manière dont les gens les chercheraient (il y a des permaliens en HTTP qui ont été publiés, donc ils doivent rester valables indéfiniment, au minimum sous forme de redirection, donc si je passe en HTTPS ça m'oblige à refaire tout l'archivage en double, en fait).

*

Bon, en attendant, il y a un autre service d'archive que je peux utiliser, c'est celui de archive.today (je ne comprends pas bien qui l'héberge, mais cf. la page Wikipédia à son sujet pour plus d'explication). J'ai veillé à ce que « beaucoup » de mes billets de blog « importants » soient archivés dessus (par exemple, le dernier est ici), mais il ne semble pas y avoir de mécanisme pour automatiser le processus, et je n'ai pas envie de lancer manuellement 2820 requêtes d'archivage. En plus de ça, archive.today a un défaut (qui est peut-être un avantage dans certaines circonstances, mais certainement un défaut sur mon blog), c'est que comme il est prévu pour archiver des pages avec du JavaScript compliqué (ce que mon blog n'a pas !) il considère qu'une adresse en #fragment n'est pas la même que l'adresse sans le #fragment (voyez ce passage de ce billet pour des explications sur la signification de ces identificateurs de fragment). Or sur mon blog, les permaliens ressemblent indifféremment à http://www.madore.org/~david/weblog/d.2025-03-28.2820.archive-youtube-woes.html#d.2025-03-28.2820 ou juste à http://www.madore.org/~david/weblog/d.2025-03-28.2820.archive-youtube-woes.html ça ne change rien, le fragment sert juste à se positionner en tête du billet plutôt qu'en tête de la page, mais archive.today considère quand même que ce sont deux pages distinctes : bref, certains de mes billets sont archivés avec le fragment, d'autres sans, et c'est un peu la merde.

Passons à autre chose, qui n'a rien à voir.

YouTube efface mon historique au bout de 46 jours

Je regarde beaucoup de vidéos sur YouTube. Mon poussinet et moi avons même un ordi dans le salon (où nous mangeons) qui nous sert en gros spécialement à regarder des vidéos pendant que nous dînons — parfois des films ou des documentaires (par exemple téléchargés via le site Web d'Arte ou de France.tv) mais juste YouTube. (L'ordi en question est connecté à la télé, et à un écran et une souris sans fil. La télé ne nous sert quasiment plus à regarder la télé, même si, pour autant que je sache, elle marche encore : la seule chaîne que nous aimions regarder régulièrement était France 24, qui est la seule chaîne d'info potable en France, mais elle n'est plus disponible sur la TNT alors même si on la regarde ce sera via l'ordi.)

Je ne sais pas par quel miracle, je continue à échapper aux pubs sur YouTube : j'utilise juste Firefox avec uBlock Origin, et pour l'instant je n'ai jamais vu une seule pub sur YouTube. (Peut-être qu'un jour ça cessera de marcher, et alors j'arrêterai de regarder YouTube parce que, de ce que je comprends, leurs pubs sont atrocement envahissantes et insupportables, mais tant que ça marche, eh bien j'en profite.)

Je regarde pas mal de choses (forcément très éclectiques, vous me connaissez si vous lisez ce blog) : globalement, il y a plein de mini-documentaires très bien faits sur énormément de sujets[#] sur YouTube.

[#] Je peux en profiter pour recommander quelques chaînes que je regarde assez souvent et que je trouve intéressantes (dans un ordre assez aléatoire) : ‣ Garrett Ryan (Told in Stone) pour des choses sur l'antiquité gréco-romaine souvent sous l'angle de la vie courante, ‣ Tribunate pour l'antiquité romaine sous un angle plus politique et parfois avec un regard vers le présent, ‣ History Matters pour des petites questions d'histoire présentées de façon super rigolote, ‣ Look Back History qui est un peu semblable mais en moins drôle, ‣ The Cold War sur (l'histoire de) la guerre froide spécifiquement, ‣ Patrick Kelly qui raconte des choses extrêmement intéressantes sur l'histoire de la médecine, ‣ Chemistorian pour l'histoire de la chimie, ‣ Kathy Loves Physics pour l'histoire de la physique (présentée par une dame super enthousiaste), ‣ Legal Eagle pour toutes sortes d'explications sur le droit américain (qui sont en ce moment surtout des analyses de toutes les illégalités commises par l'administration Trump), ‣ William Spaniel (Lines on Maps) pour une analyse de la géopolitique sous l'angle de la théorie des jeux (il a sans doute le défaut de surestimer la rationalité des acteurs, mais c'est néanmoins très intéressant, et sa façon de présenter est rigolote), ‣ Spectacles qui fait des analyses très intéressantes sur l'histoire d'événements politiques du monde entier, ‣ PolyMatter qui analyse plutôt des tendances économiques ou géopolitiques, ‣ Imperial qui est un peu dans le même genre que les deux précédentes, ‣ Into Europe qui analyse des questions économiques ou politiques en rapport avec l'Europe ou l'Union européenne, ‣ Kraut the Parrot qui parle d'histoire de la politique ou de la construction des États et qui illustre ça avec des dessins style Polandball, ‣ Politics with Paint qui parle de sujets entre la géographie et la géopolitique, aussi dans le style Polandball, ‣ Versed, dont je ne suis pas sûr de comprendre la ligne éditoriale mais en tout cas c'est intéressant, ‣ fern, pareil, ils parlent de toutes sortes de choses mais c'est plutôt bien, ‣ Let's Talk Religion qui parle d'histoire ou de pratique des religions (souvent je trouve que c'est un peu longuet mais en général c'est quand même très instructif), ‣ Vox pour des explications sur des sujets de société (généralement américains), ‣ Kurzgesagt pour de la vulgarisation scientifique de toutes sortes de sujets avec des dessins tellement mignons que c'est la peine de la regarder juste pour les dessins (et pour la voix melliflue du narrateur), ‣ Sabine Hossenfelder qui est devenue une star de la vulgarisation scientifique (mais je pense que maintenant elle en fait trop et la qualité se dégrade), ‣ PBS Space Time pour des explications de divers sujets de physique fondamentale, ‣ PBS Eons sur la paléontologie et l'histoire de la vie sur Terre, ‣ History of the Earth qui raconte l'histoire géologique et biologique de la Terre à travers une série de documentaires très bien faits, ‣ Minute Earth pour des vidéos de vulgarisation scientifiques super courtes, aussi avec des dessins super mignons, sur des sujets autour de la biologie ou de l'écologie, ‣ Minute Physics pour le truc analogue pour la physique, ‣ 3Blue1Brown pour de la (semi-)vulgarisation mathématique incroyablement bien illustrée, ‣ JuLingo qui présente toutes sortes de langues (mortes ou vivantes) les unes à la suite des autres, ‣ Dr. Geoff Lindsey, un phonéticien anglais qui explique des choses fascinantes et souvent très rigolotes sur la prononciation de l'anglais, ‣ K Klein qui est un linguiste assez geek qui fait des vidéos rigolotes sur plein de sujets, ‣ KhAnubis qui parle un peu de tout et de n'importe quoi mais surtout de langues et de géographie, ‣ J. J. McCullough qui est un vloggueur canadien homo qui parle souvent de politique mais pas seulement, ‣ Tom Nicholas qui est un anglais qui fait des documentaires assez intéressants souvent en rapport avec la politique mais pas seulement, ‣ The Tim Traveller qui va visiter des endroits rigolos et fait des vidéos très mignonnes pour raconter ce qu'il a vu, ‣ Le Nouveau Programme qui parle d'architecture et d'urbanisme, ‣ The B1M qui parle de construction et d'ingénierie, ‣ Now You See It qui analyse le cinéma et toutes sortes de techniques au cinéma, ‣ Just Write qui analyse le scénario de films et de séries télés. Ouf ! En commençant cette liste je ne pensais pas qu'il y en aurait autant, et je suis loin d'avoir tout listé. On voit en tout cas que ce n'est pas trop difficile de trouver des choses intéressantes à regarder quasiment chaque jour le temps d'un repas. (Peut-être que cette note aurait dû être un billet de blog à elle toute seule, en fait. Tant pis.)

Et l'algorithme de recommandation de YouTube est devenu assez bon, en fait : autrefois (il y a peut-être 5 ou 10 ans ?) il ne proposait que des merdes ou juste d'autres vidéos de chaînes que j'ai déjà regardées (quand ce n'est pas simplement les mêmes vidéos que j'ai déjà regardées), mais maintenant il est assez bon pour proposer des vidéos qui m'intéressent et qui soient un peu différentes.

Mais pour que l'algorithme de recommandation fonctionne, il faut qu'il ait du feedback sur ce que je regarde et ce que j'aime. Ça c'est quelque chose que je suis prêt à donner à Google en échange des heures que je passe à regarder YouTube : des infos sur ce que j'aime regarder. Le deal me semble honnête (tant que j'ai le droit de contrôler ce qu'il stocke, et pour ça, il faut admettre que Google est sérieux, on peut consulter ce qu'ils enregistrent sur nous).

Seulement voilà, depuis quelques mois (je ne sais pas exactement combien, parce que j'ai mis du temps à me rendre compte du phénomène, par le fait que YouTube me reproposait des vidéos que j'étais sûr d'avoir déjà vues), un phénomène curieux se produit : mon historique YouTube s'efface automatiquement au bout de 46 jours.

Plus exactement, il retient les vidéos que j'ai vues jusqu'au (et ce, depuis 2010 environ, donc 14 ans de vidéos), mais, pour ce qui est des plus récentes, il ne retient que les 46 derniers jours. Donc au moment où j'écris, ça s'arrête le  ; et entre les deux, il y a un gros gap, et ce gap grandit d'un jour chaque jour.

C'est assez hallucinant, comme bug. Un truc qui s'efface tout seul au bout d'un certain temps (et toujours le même temps), c'est vraiment difficile à faire par accident. Et de fait, Google a une option pour automatiquement effacer l'historique YouTube, mais j'ai bien vérifié qu'elle est désactivée (j'ai aussi essayé de la re-désactiver pour être bien sûr), et de toute manière elle ne propose que les valeurs de 3 mois, 18 mois ou 36 mois, pas 46 jours (ce qui ressemble suspicieusement à 1½ mois, d'ailleurs). Et j'imagine que si on l'active, ça efface les trucs carrément vieux aussi (alors que, comme je viens de le dire, mon historique remonte à 2010).

Donc je ne sais pas quoi penser de cette histoire.

Et le plus marrant, c'est que même YouTube ne comprend pas : je me suis plaint du problème sur Twitter, et de façon très surprenante, l'équipe officielle de YouTube sur Twitter m'a répondu (comme quoi Twitter peut encore servir un peu quand on arrive à naviguer entre les cacas de nazis qui empestent les couloirs), ils m'ont demandé de faire deux-trois essais et j'ai l'impression d'avoir interagi avec des humains, pas des IA (bon, peut-être que je me suis fait avoir, qui sait).

Toujours est-il qu'on ne sait pas ce qui se passe. J'ai essayé de déconnecter de Twitter tous les navigateurs qui l'utilisent et me reconnecter, j'ai essayer de faire une pause dans l'historique et la relancer, mais le problème persiste, les vidéos que j'ai vues il y a 46 jours s'effacent imperturbablement de mon historique.

Ce n'est pas que pour les recommandations que ça me chagrine, c'est aussi pour l'archivage : c'est quand même bien pratique de pouvoir rechercher dans l'historique de ce que j'ai regardé sur YouTube quand je me rappelle ah oui, j'ai vu une vidéo intéressante sur tel sujet et que je veux la recommander à quelqu'un d'autre (c'est plus simple de rechercher dans mon historique que dans tout YouTube). Bon, maintenant que je suis au courant du problème, je vais prendre l'habitude de télécharger mon historique YouTube tous les <46 jours et le sauvegarder chez moi, mais ça restera forcément moins commode à rechercher dedans que si c'est chez Google. Et en tout état de cause il y a environ un an de vidéos que j'ai regardées dont il n'y a plus de trace nulle part.

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

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

(vendredi)

Un regard alternatif sur la réduction de Turing

Méta : Contrairement au précédent qui prétendait être de la vulgarisation (avec quel succès je ne sais pas), le présent billet s'adresse aux personnes qui ont déjà une certaine familiarité avec la calculabilité. (En gros, les prérequis sont les mêmes que dans ce billet ou celui-ci ou celui-là, qui sont sur des sujets proches : je suppose que les notions, disons, de machine universelle ou de codage de Gödel sont connues, et c'est préférable si la notion de machine avec oracle est aussi familière, même si je vais la redéfinir ci-dessous. Les billets que je viens de citer et celui-ci peuvent se lire indépendamment et dans n'importe quel ordre, mais ils devraient s'éclairer mutuellement puisque tout ceci tourne autour des mêmes questions.)

Désolé, donc, pour les gens qui espéraient un billet non technique et qui voient de nouveau de la calculabilité (surtout que j'ai mis beaucoup de temps à le publier parce que j'avais plein de choses à faire), mais j'ai compris quelque chose, là, et il est très utile pour moi de le coucher par écrit pour m'en souvenir ultérieurement.

Plan

Introduction non technique (pourquoi ce billet ?)

(On peut sauter cette section ainsi que la suivante si on veut entrer dans le vif du sujet.)

La motivation de ce billet est pour moi d'essayer de comprendre le sens d'un théorème et ce que nous apprend sa démonstration, et pourquoi je pense qu'il est intéressant et important. Le théorème en question n'est pas de moi : il est de Martin Hyland[#], mais je ne suis pas sûr que ça ait vraiment été remarqué qu'on pouvait le formuler de la manière que je vais expliquer, donc disons que le théorème est dû à Hyland mais la formulation est (peut-être) originale. Le théorème tel qu'écrit par Hyland parle de choses un peu sophistiquées (des « topologies de Lawvere-Tierney sur le topos effectif »), mais ce qui m'intéresse ici est qu'on peut le reformuler, ainsi que sa démonstration, de façon un peu plus élémentaire et peut-être plus « informatique ». Ce qui ne veut pas dire que la démonstration soit forcément facile à suivre pour autant ! En tout cas, je ne m'attends pas que le lecteur sache ce qu'est qu'une topologie de Lawvere-Tierney ni ce qu'est le topos effectif. Si vous voulez en savoir un peu plus sur ce que ces mots veulent dire (enfin, au moins les deux derniers), je renvoie aux autres entrées de ce blog liées ci-dessus, mais, je répète, ce n'est normalement pas nécessaire de les lire pour comprendre ce qui suit.

[#] L'article original de Hyland où se trouve ce théorème a pour titre The Effective Topos, et il est paru p. 165–216 dans les actes The L.E.J. Brouwer Centenary Symposium édité par Troelstra & van Dalen (1982) : en voici une version retypographiée et le scan de la version d'origine (disponible sur Sci Hub si vous n'y avez pas accès par ce lien). Le théorème en question est essentiellement une reformulation du théorème 17.2 de l'article en question (ou, disons, de l'ensemble de §17, parce que le lemme qui précède est également important dans ce que je raconte).

C'est, en fait, une tâche assez fréquente dans le travail d'un mathématicien d'essayer de « décoder » une démonstration (pas juste la vérifier, mais arriver à voir ce qu'elle devient dans un cas particulier, ou dans un cadre un peu différent, ou quand on l'applique dans tel ou tel contexte, ou quand on la traduit dans des termes plus élémentaires, ou quelque chose comme ça). Et ce qui suit est le résultat d'un tel travail de ma part, qui m'a pris, à vrai dire, un temps extrêmement embarrassant à mener[#2] (quelque chose comme trois mois, même si je n'ai évidemment pas consacré toute mon activité à ça), à cause du nombre de fois que je me suis embrouillé dans les notations et les programmes qui appellent un programme qui appelle un autre programme.

[#2] En fait, c'est même plus embarrassant que ça, parce que je n'ai pas réussi à vraiment décoder la démonstration donnée par Hyland : j'ai fini par laisser tomber et par trouver la mienne, et c'est celle-ci que je présente ci-dessous. Elle est problablement équivalente à celle de Hyland, parce que je l'ai trouvée en essayant de mettre ensemble les idées et l'inspiration que j'ai retenues de l'article de Hyland. Mais je n'en suis pas complètement certain non plus.

Mon but est donc d'enregistrer mon cheminement mental[#3], mais aussi d'essayer d'amener le lecteur à comprendre quelque chose que j'ai eu beaucoup de mal à comprendre, et, forcément, ceci présente un certain défi pédagogique, que je ne sais pas si je vais réussir à mener. (Peut-être que ce n'est pas possible d'expliquer certaines choses, qu'il faut forcément s'embrouiller soi-même avant de pouvoir se désembrouiller.) Je suis encore moins persuadé d'arriver à expliquer pourquoi je pense que c'est un théorème intéressant et important, mais je vais au moins essayer un peu. En revanche, je vais devoir demander à mon lecteur une certaine concentration, au moins pour la preuve du théorème, que je continue à trouver un peu cryptique à ce stade.

[#3] Les billets de mon blog sont souvent (cf. ici) principalement destinés à permettre à mon moi futur de retrouver le fil de mes pensées, donc j'explique un peu de façon à expliquer les choses à moi-même dans un avenir où j'aurais oublié comment tout ça fonctionne.

L'idée du théorème, donc, c'est qu'il nous donne une propriété équivalente à A est Turing-réductible à B (pour A,B⊆ℕ ; je vais rappeler ci-dessous ce que ça signifie, mais très rapidement ça signifie qu'on peut décider algorithmiquement si un entier appartient à A en ayant le droit de poser des questions sur l'appartenance de divers entiers à B). La propriété équivalente est celle de l'existence d'un convertisseur universel de B vers A (ce n'est pas un concept standard, et je vais le définir ci-dessous), qui est une sorte de méta-programme qui transforme un répondeur pour B en un répondeur pour A, eux-mêmes des concepts que je vais aussi définir et tenter d'expliquer (en gros ce sont des programmes qui répondent à la question de savoir si un élément appartient à B, resp. à A, mais ils y répondent de façon un peu tarabiscotée).

La notion de réduction de Turing est cruciale et centrale dans l'étude de la calculabilité, donc il est certainement bon de l'examiner avec attention. La propriété équivalente proposée par le théorème (cette notion de convertisseur universel) peut sembler compliquée et artificielle, mais je vais essayer d'argumenter qu'elle ne l'est pas tant que ça. Ce qui est intéressant avec cette propriété, c'est que même si elle est peut-être plus difficile à comprendre que la définition originale de la réduction de Turing, elle est aussi plus « pure » : on a besoin de savoir moins de choses pour l'écrire, et ces choses ne dépendent que très peu des détails de la théorie de la calculabilité.

Donc, d'abord, l'intérêt est de fournir une définition de la réduction de Turing qui ne fasse pas intervenir la notion d'« oracle » normalement utilisée pour la définir : savoir qu'on peut définir la réduction de Turing sans parler d'oracle (ou sans la déguiser de façon vraiment transparente) me semble, en soi, assez intéressant. Bon, je ne sais pas dans quelle mesure cette définition est vraiment utilisable comme définition (peut-être que pour montrer n'importe quoi dessus on va de toute façon devoir ressortir toute la théorie des oracles), mais c'est en soi surprenant qu'on puisse trouver un tel équivalent.

Mais l'intérêt est aussi que cette propriété équivalente se prête plus facilement à la généralisation : c'est peut-être plus compliqué, certes, mais on est essentiellement dans le domaine de la pure logique[#4], donc les notions ont un sens dans un contexte beaucoup plus large, et on peut se demander ce que ça donne dans un tel contexte.

[#4] En quelque sorte, tout le thème du billet (mais que je vais laisser caché en arrière-plan, et je n'en parle qu'en petits caractères, pour ne pas supposer de connaissances de logique intuitionniste) est de comprendre le sens de la formule logique ∀P:Ω. (((∃n:ℕ.(nB∨¬nBP)) ⇒ P) ⇒ ((∃m:ℕ.(mA∨¬mAP)) ⇒ P)) (ici, Ω est l'ensemble des valeurs de vérité) : l'équivalent dont je parle, c'est que cette formule est vérifiée [i.e., réalisable], dans le topos effectif, si et seulement si A est Turing-réductible à B. Et le sens de la remarque, c'est que cette formule (ainsi que des généralisations évidentes de celles-ci, notamment si on remplace A,B⊆ℕ par des sous-objets de n'importe quel objet, voire nB∨¬nB et mA∨¬mA par des prédicats quelconques sur n'importe quel objet) a un sens dans n'importe quel topos. (Son sens est la plus petite topologie de Lawvere-Tierney qui rend B décidable rend aussi A décidable, mais ce que montre ce billet, c'est qu'il est parfaitement possible que ceci se déchiffre de manière qui ne fasse pas appel à la notion de topologie de Lawvere-Tierney.)

Enfin, je trouve intéressant que cette approche fasse assez naturellement intervenir des notions fondamentales en informatique : le continuation-passing-style dans un sens (et, en fait, on peut dire que toute cette histoire est juste une réécriture des oracles en CPS ; sauf que la conversion dans l'autre sens n'est pas aussi facile que cette remarque le suggère), et, dans l'autre sens, la notion de monade. Je ne suis pas sûr d'avoir encore bien compris le sens profond de cette apparition, mais j'espère que le fait d'écrire ce billet m'aidera au moins à y voir plus clair.

Quelques notations et conventions

Cette section est là uniquement pour référence (et je l'ai écrite après le reste). Toutes les notations seront introduites au fur et à mesure de leur utilisation, ou bien sont assez standard ou évidentes, donc on peut sauter cette section (et peut-être qu'il vaut mieux le faire), mais c'est sans doute une bonne idée de les rassembler en un seul endroit pour référence.

D'abord, pour qu'elles soient plus commodes à retrouver, je divulgâche ici les trois définitions fondamentales et le théorème qui seront expliquées et commentées dans la suite :

✱ Définition : Si A,P⊆ℕ, un P-questionneur pour A est un couple ⟨m,e⟩ où m et, si u=1A(m) est la valeur de la fonction indicatrice de A en m, alors le programme e appelé sur l'entrée u, termine et renvoie un élément de P.

✱ Définition : Si A,P⊆ℕ, un P-répondeur pour A est un programme qui, quand on lui passe un P-questionneur pour A, termine et renvoie un élément de P.

✱ Définition : Si A,B,P⊆ℕ, un P-convertisseur de B vers A est un programme qui, quand on lui passe un P-répondeur pour B, termine et renvoie un P-répondeur pour A. Et un convertisseur universel de B vers A est un même programme h qui est un P-convertisseur de B vers A pour n'importe quel P⊆ℕ.

✱ Théorème : Pour A,B⊆ℕ, un convertisseur universel de B vers A existe si et seulement si A est Turing-réductible à B.

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

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


Entries by month / Entrées par mois:

2025 Jan 2025 Feb 2025 Mar 2025
2024 Jan 2024 Feb 2024 Mar 2024 Apr 2024 May 2024 Jun 2024 Jul 2024 Aug 2024 Sep 2024 Oct 2024 Nov 2024 Dec 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]