David Madore's WebLog: Meta

This WebLog is bilingual, some entries are in English and others are in French. A few of them have a version in either language. Other than that, the French entries are not translations of the English ones or vice versa. Of course, if you understand only English, the English entries ought to be quite understandable without reading the French ones.

Ce WebLog est bilingue, certaines entrées sont en anglais et d'autres sont en français. Quelques-unes ont une version dans chaque langue. À part ça, les entrées en français ne sont pas des traductions de celles en anglais ou vice versa. Bien sûr, si vous ne comprenez que le français, les entrées en français devraient être assez compréhensibles sans lire celles en anglais.

Note that the first entry comes last! / Notez que la première entrée vient en dernier !

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

Entries with category meta / Entrées de la catégorie meta:

(jeudi)

Changement de serveur

Comme je le fais de temps en temps, j'ai changé le serveur Web qui héberge ce site et ce blog (c'est maintenant une Dedibox XC, auquel j'ai donné le nom de betelgeuse.gro-tsen.net). Normalement, le changement devrait être totalement transparent (je n'ai cassé le système de commentaires de ce blog que pendant quelques minutes), mais il se peut que quelque chose m'ait échappé, parce que le nombre de choses qui tournent sur ce serveur et qu'il faut migrer dans le bon ordre en pensant à tout est relativement élevé (entre le serveur Tomcat qui sert maintenant à fournir des pages dynamiques, le système de commentaires de ce blog, le serveur Git qui réside sur le même serveur, les autres scripts CGI en tout genre, le tracker BitTorrent pour les quelques fichiers que je distribue par ce protocole, et quelques bizarreries comme un microscopique site accessible uniquement en IPv6, cela fait un nombre assez pénible de fichiers de config à régler correctement).

(À vrai dire, je me suis levé aujourd'hui avec un mal de tête épouvantable, je me suis dit que j'étais trop fatigué pour réfléchir, et j'ai préféré faire de l'informatique que faire des maths : je ne suis pas persuadé que ça ait amélioré mon mal de tête.)

À cette occasion, j'ai jeté un coup d'œil dans les logs de mon serveur Web, et je suis impressionné par le nombre de requêtes bizarres qui s'y trouvent. Par exemple, Bing me demande régulièrement des choses comme /%7Edavid///lit/fourshort.html (le fichier qui existe vraiment est /~david/lit/fourshort.html) : le %7E est une autre façon d'écrire ~ — en principe ça ne devrait pas faire de différence, sauf qu'en fait on ne sait jamais bien qui est censé faire la substitution —, mais ce qui est mystérieux dans l'histoire c'est comment il a inventé les 3 / consécutifs. Bon, c'est assez facile de demander à Apache de le rediriger sur une adresse plus normale (encore qu'il y a des interactions subtiles entre le mécanisme de redirection/réécriture d'Apache et son mécanisme de négociation de contenu[#]), mais ce genre de choses fait penser soit que j'ai laissé traîner un lien mal écrit quelque part, soit que Bing est cassé dans sa façon de faire des résolutions de liens relatifs. Comment savoir ?

Dans le même genre, je me souviens qu'à l'époque lointaine où ce site était hébergé à l'ENS, j'utilisais des fichiers SHTML, et notamment ma page principale s'appelait /home/madore/index.shtml — et voilà que quelqu'un avait inventé un lien /home/madore/index.shtml/ (avec un / à la fin), pour lequel Apache servait le même contenu, et du coup tous les liens relatifs étaient cassés : du genre, math/ pointait vers /home/madore/index.shtml/math/ au lieu de juste /home/madore/math/ et cela renvoyait toujours vers la même page à cause du index.shtml, qui du coup contenait de nouveau un lien math/ qui faisait que le moteur de recherche allait chercher /home/madore/index.shtml/math/math/ et ainsi de suite indéfiniment. Bref, dès qu'une URL est servie sous un nom non-canonique, ça peut être une source de tracas.

[#] À titre d'exemple, j'avais dans mon .htaccess une ligne du type : RedirectMatch seeother /(.*david)/pages_new.html /$1/weblog/ mais j'ai découvert qu'elle ne fonctionnait pas à cause de la présence d'un fichier pages_new.html.en~ (un backup Emacs) qui traînait : si quelqu'un peut m'expliquer la logique de la chose…

(lundi)

Le SQL c'est rigolo

Bon, en fait, non, je ne pense pas vraiment ce que je dis dans le titre de cette entrée : le SQL est, au niveau syntaxique, un langage invraisemblablement pourri. En revanche, ce qui est vrai, c'est qu'au chapitre des technologies qui donnent envie de s'en servir, quand on a une base de données SQL, on a envie de faire des requêtes dessus pour tout et n'importe quoi. Or il se trouve que les entrées de ce blog sont stockées dans une base PostgreSQL (alimentée depuis les fichiers XML que je tape moi-même à la main). Donc je peux avoir la réponse à plein de questions inutiles, du genre :

J'aurais aussi aimé extraire quelque chose comme « les balises HTML que j'aime le plus », mais apparemment le XPath de PostgreSQL 9.1 est buggué limité : si j'essaie SELECT unnest(xpath('.//name()', '<foo><bar /></foo>'::xml)) ;, il me prétend que .//name() est une expression XPath invalide, ce qui est clairement faux parce qu'elle nécessite XPath 2.0 (il est probablement gêné par le fait que ça renvoie des chaînes au lieu de renvoyer du XML — mais je ne vois pas comment faire autrement).

Bon, bien sûr, j'ai écrit tout ça juste pour pouvoir me souvenir plus tard de comment on fait ce type de requêtes. Quand j'aurai unifié la base des commentaires à la base des entrées, je pourrai poser d'autres questions rigolotes. Mais en tout état de cause, il y a quelque chose de vraiment amusant à pouvoir interroger des ensembles de données de cette façon (fût-ce avec une syntaxe complètement pourrie). À un certain moment, un forum de discussion que je fréquentais à l'ENS avait une base de données des messages dans le même genre, et c'était très distrayant de pouvoir lui poser toutes sortes de questions menant à des statistiques gratuites et vaguement absurdes (du style : classer les intervenants par le nombre moyen de réponses que leurs messages provoquent).

Remarquer que les navigateurs permettent aussi des choses amusantes. Par exemple, j'ai récemment voulu couper les entrées les plus longues de ce blog (« couper » signifiant que l'entrée complète n'apparaît que sur sa page individuelle, les pages du mois ou des catégories la contenant étant abrégées par un lien lire la suite qui y renvoie). La recherche des entrées par nombre de caractères du source peut ne pas être la plus pertinente, alors j'ai recherché les entrées, dans une page comme celle rassemblant mes entrées mathématiques (et qui est beaucoup trop longue) en triant par nombre de pixels du rendu effectué par le navigateur : il suffit pour cela d'ouvrir la page en question, d'ouvrir une console JavaScript (control-shift-K sous Firefox) et de taper quelque chose comme ceci :

entries = Array.prototype.slice.call(document.querySelectorAll("article.weblog-entry"))
entries.sort(function(a,b){var ah=a.clientHeight; var bh=b.clientHeight; return (ah<bh ? 1 : ah>bh ? -1 : 0);})
list = entries.slice(0, 10).map(e=>({"id": e.id, "height": e.clientHeight, "title": e.querySelector(".entry-title").textContent}))
console.table(list)

Et hop ! J'ai un joli tableau des dix entrées les plus hautes (en pixels) dans la page que je suis en train de regarder. La fonction console.table est un goodie de Firefox (disponible à partir de la version 34) qui est bien pratique dans ce genre de situation. La ligne précédente utilise les lambda-expressions d'ECMAscript 6, qui sont aussi bien pratiques. Bref, JavaScript — et la console JavaScript des navigateurs — est aussi quelque chose de bien pratique et puissant (je prends l'exemple de mon blog, mais ça peut servir dans plein de contextes d'interroger ou de manipuler la page HTML qu'on est en train de regarder), malheureusement, comme SQL, encombré par une syntaxe souvent très peu heureuse.

(dimanche)

Les entrées de blog que je n'arrive jamais à écrire

Il y a une éternité j'ai promis d'écrire une entrée de ce blog sur les octonions. Je n'ai jamais réussi à la publier. Ce n'est pas que je n'aie rien à écrire, au contraire, ni même que je n'aie rien écrit : j'ai commencé (au hasard des moments où j'ai du temps pour le faire) à écrire des choses sur le sujet, et de plus en plus, et je me suis rendu compte que ça débordait dans tous les sens, et qu'à la fin non seulement ça devenait trop long et indigeste, mais en plus que ça manquait de structure et de cohérence thématique. Alors j'ai décidé de diviser cette entrée en trois parties : des généralités sur les octonions d'abord, puis une petite partie sur les octonions entiers et les réseaux dans les octonions, et enfin une troisième (indépendante de la seconde) sur la géométrie octonionique et le carré magique de Freudenthal-Tits — qui est à mon avis la principale raison pour laquelle les octonions sont intéressants. Puis j'ai commencé à développer la première partie séparément, et je me suis rendu compte que je devais parler d'automorphismes des octonions, et à me poser plein de questions qui débordaient dans tous les sens, et finalement cette partie-là, même prise seule, devient aussi trop longue, et il faudrait la couper à son tour. [Mise à jour () : cette partie a fini par être publiée.] Pareil pour la troisième partie : là j'ai pensé, je vais changer de point de vue et écrire une petite entrée sur les espaces deux-points-homogènes (dits aussi : homogènes et isotropes), c'est-à-dire, pour parler grossièrement, les espaces (au sens : variétés riemanniennes) qui sont identiques en tous les points et dans toutes les directions. C'est une question très naturelle et intéressante que de classifier ces espaces homogènees et isotropes, la réponse a été apportée par Tits et Wang (très rapidement : outre l'espace euclidien et les sphères, ce sont les espaces projectifs et hyperboliques sur les réels, complexes, quaternions, et octonions, sachant que sur les octonions il n'y a que la droite et le plan projectif, et la droite et le plan hyperbolique, pas de dimension plus élevée) ; ce sont des espaces très beaux par leur pure symétrie, et élégants dans leur description, et ils amènent naturellement à parler des octonions et des groupes de Lie exceptionnels (et cela apporte une réponse possible à la question qui m'avait tracassé, qu'est-ce qu'une géométrie). Et bien sûr, en essayant de parler de ça, j'ai de nouveau eu trop de choses à dire et de nouveau ça débordait dans tous les sens.

Il n'y a pas que les octonions qui m'aient causé ce souci. C'est un peu quelque chose qui m'arrive à chaque fois que je parle de n'importe quoi : je ne sais pas sélectionner ce dont je veux parler, ma logorrhée s'étale sans structure dans toutes les directions, et à la fin tout est trop long et indigeste. Mais bien sûr, c'est pire quand je parle de maths. J'ai par exemple aussi voulu écrire une entrée sur les notations ordinales, essentiellement, pour faire suite à cette entrée déjà très longue, et expliquer comment on peut « fabriquer » (décrire, expliciter, travailler avec, calculer sur) des ordinaux récursifs très grands — essentiellement, vulgariser la notion de fonction d'écrasement pour fabriquer de grands ordinaux à partir de cardinaux de plus en plus sophistiqués (inaccessibles, Mahlo), cette question étant du coup naturellement liée à celle des grands nombres que j'ai abordée à plusieurs reprises. Bref, j'ai travaillé là-dessus au hasard de ma motivation et de mon temps disponible. Et puis je suis rentré dans les explications sur les fonctions d'écrasement forcément d'autant plus compliquées qu'on fabrique des ordinaux plus grands, c'est devenu long, très long, très très très long, et il me reste sur les bras une montagne d'explications que je ne sais pas bien comment structurer ou diviser pour la rendre un peu digeste. (Cela n'arrange pas les choses que j'ai cru comprendre quelque chose, que je me suis trompé, que j'ai compris autrement, que je me suis retrompé, que j'ai compris que j'avais bien compris initialement, et qu'au bout du compte je me suis beaucoup embrouillé sur les différentes variantes qu'on peut construire autour des fonctions d'écrasement — par exemple, il y en a qui sont croissantes, d'autres qui ne le sont pas, et il y a toutes sortes de conventions possibles sur comment organiser et définir les valeurs.) J'ai encore d'autres entrées dans le même genre, commencées parce que je pensais que je n'aurais pas tant de choses que ça à dire, et finalement dans des limbes où les choses sont à moitié écrites et peut-être ne seront jamais achevées.

C'est un peu l'histoire de ma vie, de commencer plein de choses, et de n'en finir que très peu.

Alors qu'est-ce que je devrais faire ? Publier des choses inachevées ? En publier le début, quitte à nuire à la cohérence de la suite ? Laisser tomber ? Attendre un temps potentiellement infini que j'arrive à terminer ce que j'ai commencé ? Je ne sais vraiment pas.

Il faut dire aussi que je ne sais pas bien qui lit mon blog, et notamment qui lit les entrées mathématiques (et quel est son niveau en maths et quels sont ses centres d'intérêt). En vérité, le principal lecteur pour lequel j'écris, c'est mon moi futur : j'écris parce que j'ai compris quelque chose, que j'ai envie de pouvoir le recomprendre à l'avenir quand j'aurai un peu oublié, alors je me l'explique à moi-même pour savoir que je pourrai relire telle ou telle entrée et resavoir ce que j'aurai su. À titre d'exemple, en réfléchissant à des questions de bases de données SQL, je suis récemment retombé sur cette entrée, et il y a un peu plus longtemps, en me posant des questions de physique, sur celle-ci : dans les deux cas, j'avais totalement oublié les subtilités de ce que j'y raconte, et je n'étais pas fâché que la personne qui sait le mieux m'expliquer les choses — c'est-à-dire, moi — me prenne par la main pour me redire comment tout ça fonctionne. Idem concernant les séries de Fourier (que je m'oblige à réapprendre à chaque fois que je dois enseigner le sujet, sachant très bien que j'oublierai dans le mois qui suit). En termes informatiques, on pourrait dire que mon blog est mon espace de swap : c'est là que je consigne les choses quand ma mémoire déborde (ou que je veux changer de contexte). Mais le temps de swap est lui-même long !

(samedi)

Des changements techniques sur ce blog

Si vous arrivez à lire cette entrée, c'est que je n'ai pas totalement tout cassé. ☺

Après avoir longtemps tergiversé (j'en parlais déjà il y a trois ans), j'ai enfin décidé de faire faire un petit pas au système technique d'hébergement de ce blog.

Jusqu'à présent, les entrées de ce blog étaient présentées sous essentiellement trois formes : une page principale avec les 20 entrées les plus récentes, une page par mois pour les archives, et aussi une page par catégorie pour les entrées que j'ai tagguées ; seules certaines entrées particulièrement longues (comme celle-ci) avaient droit à une page individuelle. De façon liée à ce choix, toutes les pages du blog lui-même (i.e., à l'exception du système de commentaires, qui est géré par un petit script CGI assez trivial écrit en Perl) étaient purement statiques, c'est-à-dire, générées à l'avance et servies comme de bêtes fichiers ; je regénère ces fichiers quand j'écris une nouvelle entrée ou quand j'en modifie une (le moteur lui-même qui parse le sur-ensemble de HTML dans lequel je tape et qui produit les différentes pages HTML, est écrit en Java ; là-dessus, j'ai un petit script Perl qui essaie de détecter les pages qui sont vraiment modifiées pour ne regénérer que celles-là).

Cet agencement était logique quand j'ai commencé ce blog, avec un moteur trivial (j'ai longtemps simplement tout tapé dans un unique gros fichier de toutes les entrées, qui était traité par une feuille de style XSLT simpliste), puis un à peine moins trivial (écrit en C). Par ailleurs, il convenait assez bien aux entrées plutôt courtes que j'écrivais il y a une dizaine d'années (l'entrée moyenne sur les années 2004 à 2006 fait moins de 3000 caractères de long, celle de 2011 à 2013 en fait plus de 9000 !) : séparer un blog aux entrées très courtes en pages individuelles n'a pas beaucoup de sens, cela en a beaucoup plus quand il s'agit de textes assez longs expliquant, par exemple, un concept mathématique.

Il y avait plusieurs inconvénients qui me préoccupaient. Notamment, si je donnais un lien vers une de mes entrées à quelqu'un qui n'a pas l'habitude de mon blog, le lien risquait d'être au milieu de la page et il risquait de voir se charger toute une page sans rapport avec le sujet avant que le navigateur le positionne sur l'entrée voulue : pas forcément attrayant. Mais par ailleurs, les moteurs de recherche, manifestement, ne savent décidément pas indexer séparément les différents éléments à l'intérieur d'une page Web, même quand on leur donne toutes les indications sémantiques (de la balise <code> au microformat hAtom) pour leur mâcher le travail.

Quoi qu'il en soit, j'ai fini par donner à chaque entrée sa propre page (accessible notamment depuis la page d'index de toutes les entrées ou via le permalien qui est caché sous la date dans le coin en haut à gauche de l'entrée). Comme je ne voulais pas générer statiquement deux mille fichiers HTML (pas vraiment que ça pose un problème aux ordinateurs modernes, mais cela choquait un peu mon sens de l'esthétique et de l'organisation), et comme cette génération est de toute façon très efficace, ces pages seront produites dynamiquement à la demande : j'utilise pour ça un serveur Tomcat (qui parle à mon serveur Apache), ce qui est logique vu que mon moteur de blog est déjà écrit en Java. (Il faudra que je raconte un jour ce que je pense de Java.)

Ce qui ne veut pas dire que ç'ait été complètement évident non plus. Mon code n'était pas prévu pour tourner de façon parallèle (je faisais usage de quelques variables globales, i.e., de champs statiques de classes Java), ni pour persister : j'ai donc dû revoir un certain nombre de choses. Si tout casse, au moins, les pages statiques devraient rester lisibles (la page principale avec les entrées récentes, et aussi la page de toutes les entrées d'un mois, maintenant accessible en passant par l'index de toutes les entrées). J'ai aussi fait un effort considérable pour ne casser aucun lien, mais il est toujours possible que j'aie échoué en cela. Je dois dire, aussi, qu'il était assez fastidieux de m'arranger pour que PostgreSQL, Tomcat et Apache parlent correctement les uns aux autres (le nombre de fichiers de configuration à régler est franchement assez pénible). Mais bon, c'est fait.

On verra d'ici un jour ou deux si les recherches Google renvoient désormais des pages des entrées individuelles de ce blog. (J'ai en tout cas été impressionné par la vitesse à laquelle le Googlebot a repéré le changement et tout téléchargé : il n'a pas dû s'écouler deux heures que c'était fait.)

Par ailleurs, je n'ai toujours pas eu le courage de m'attaquer à la refonte du système de commentaires (rien n'a changé à son sujet, et je sais qu'il est nul : pas la peine de me le rappeler, donc !), dont la modification d'aujourd'hui devrait cependant être la prémisse.

(mardi)

Neuvième blogoversaire

Contrairement à mon grand blogofrère de quelques jours Matoo, qui se plaint d'oublier son blogoversaire, j'ai eu la prévoyance de choisir de commencer le mien (de blog) à une date vaguement symbolique (la fête du vrai travail des vrais blogueurs à la sueur de leur front) et facilement mémorisable. Vous pouvez donc me féliciter pour ces neuf années passées à râler, à raconter des bêtises sur tout ce qui me passe par la tête, à râler, à mal vulgariser les maths, à râler, à pondre des entrées trop longues, à râler, à ne pas faire ce que je promets ni finir ce que je commence, et surtout, à râler.

Je regrette une chose, c'est que l'écriture de ce blog ne m'ait pas donné beaucoup d'occasions de rencontrer mes lecteurs. J'en ai eu quelques occasions, certes : par exemple de rencontrer lors de mon dernier passage à Lyon[#] un certain oncologue (heureusement pas rencontré dans un contexte professionnel) que vous avez pu remarquer dans les colonnes de mes commentaires, ou plus récemment un futur thésard en crypto que le poussinet et moi avons hébergé pour la nuit à son retour d'Eurocrypt. Mais trop peu : parfois je croise des gens qui me disent sur le ton de la confidence qu'ils suivent mon blog, mais je peux regretter de ne pas l'avoir su plus tôt ou de ne pas avoir plus de temps pour discuter[#2]. Et par extrapolation, je me dis qu'il doit y avoir beaucoup d'autres gens intéressant qui lisent mon blog et dont je ne sais absolument rien. Bref, n'hésitez pas à mon contacter, moi j'aime bien faire la connaissance de nouvelles personnes.

[#] Le week-end de Pâques. Mon poussinet et moi y sommes allés pour rendre visite à la famille de mon petit frère adoptif et pour nous ravitailler en chocolats de l'extraordinaire M. Bernachon[Vitrine du chocolatier Bernachon] (dont je recommande particulièrement les tablettes de chocolat à la vanille).

[#2] Comme cet autre jeune cryptographe croisé lors du pot de thèse d'un ami et (maintenant ex-)thésard en crypto, et dont je n'ai pas eu la présence d'esprit de demander l'adresse, c'est dommage (et par ailleurs, ceci est un hint 😉).

(samedi)

Exérèse des entrées trop grosses

Je suis en train de rédiger une nouvelle entrée-fleuve (le sujet est gardé bien secret pour le moment ☺). L'ennui avec les entrées-fleuves, c'est qu'elles rendent la lecture du blog un peu désagréable pour ceux qu'elles n'intéressent pas.

Je tente donc un changement technique pour séparer les entrées-fleuves en leur donnant leur propre page. Les pages mensuelles (ou par catégorie, ou des 20 entrées les plus récentes) ne contiendront donc que le début de l'entrée, qui se termine alors par un lien lire la suite qui permet de voir la totalité. Voyez mon entrée sur les ordinaux par exemple.

A priori, pas de grosse difficulté technique à ça. Mais il y a des choix à faire qui ne sont pas évidents, parce que maintenant, une telle entrée-fleuve se retrouve avec deux liens évidents, un lien vers sa page propre et un lien vers la version abrégée sur la page mensuelle (sans compter l'éventuelle page par catégorie ou la page des entrées récente, qui contiennent aussi une version abrégée). Dans quelle circonstance faut-il utiliser un lien ou l'autre ? Le permalien, clairement, doit pointer vers la version complète en page propre ; mais quid du flux RSS, des liens dans le texte d'une autre entrée, de l'index général du blog, de la page de commentaires ? (Bon, les commentaires, de toute façon, il faudra que je refasse tout ça à zéro, donc ce n'est pas très important.)

J'ai l'impression que je fais beaucoup plus de liens internes (et peut-être beaucoup plus de liens tout court) que le blogueur typique. Et je procède un peu différemment : là où la plupart des blogueurs utiliseraient (je crois) simplement le permalien de l'entrée, mon moteur de blog fait attention au fait que la cible du lien peut être présente sur la même page que la source, et dans ce cas il utilise la page en question, ce qui évite d'avoir à faire le chargement d'une nouvelle page. Par exemple, si je parle de l'entrée précédente, vous remarquerez que ce lien vu depuis la page des entrées récentes pointe sur la même page, et continuera à pointer comme ça jusqu'à ce que cette entrée soit la dernière entrée récente. Ça me semblait évidemment souhaitable quand j'ai eu cette idée, mais en fait, je ne sais pas si ça l'est vraiment (par exemple, il y a des gens qui utilisent du coup ces liens internes comme des parmaliens, et forcément ça casse). En mettant certaines entrées sur une page à elle, choisir la destination des liens devient encore moins évident. Surtout que je peux faire un lien vers une ancre à l'intérieur d'une entrée, et dans ce cas il ne faut évidemment pas que ce soit vers la version abrégée si elle ne contient pas l'ancre en question !

Bref, j'ai fait un choix pour l'instant (par exemple, au moment où j'écris, le lien entrée sur les ordinaux trois paragraphes plus haut pointe vers la version coupée), et je changerai peut-être d'avis plus tard… Ce n'est pas vraiment important tant que les liens ne cassent pas (et je fais toujours très attention à ça).

Je devrais peut-être utiliser plus de magie en JavaScript. Par exemple, ça pourrait être JavaScript qui décide si le lien est disponible sur la même page, plutôt que le faire en générant le HTML, comme ça les gens qui recopient le lien auraient forcément un permalien. Idem, le lien lire la suite pourrait aller modifier le document plutôt qu'ouvrir une nouvelle page. Je ne sais pas vraiment ce que je veux.

(lundi)

Catégorisation de ce blog

Certains observateurs attentifs ont peut-être remarqué l'apparition, dans le coin en bas à droite de certains entrées de ce blog (mais pas toutes, loin de là), juste au-dessus du lien vers les commentaires, d'une indication de catégories dans lesquelles l'entrée a été rangée (chaque mot étant un lien vers la page de la catégorie, et le point entre parenthèses un lien vers l'entrée elle-même dans sa catégorie). [Précision () : On me souffle en commentaire que ce ne sont pas des catégories mais des tags que j'utilise, même si personnellement je considérais ces deux mots comme interchangeables. En tout cas, pour être bien clair, ma classification ne se limite pas à une seule catégorie par article.] C'est un des goodies rendu possible par mon nouveau moteur de blog : initialement, il n'y avait qu'une seule catégorie, mes fragments littéraires gratuits, maintenant il n'y a aucune difficulté à en créer d'autres (y compris pour mettre la même entrée dans plusieurs catégories).

Mais bon, reparcourir 1935 entrées pour décider de comment classer chacune, ça ne m'enchante pas trop, alors je fais les choses de façon un peu aléatoire, je rajoute les catégories au fur et à mesure que l'envie me vient et je récolte les entrées dedans au fur et à mesure que je retombe dessus — donc pour l'instant c'est un peu n'importe quoi. Sans compter que je ne sais pas exactement quelles frontières données au catégories (faut-il viser large ou précis ?), ni à partir de quel moment faire figurer une entrée dans une catégorie (par exemple quand une entrée évoque en passant un film, ça ne suffit certainement pas à la mettre dans la catégorie cinéma, alors que si c'est une critique de film certainement — mais entre les deux il y a beaucoup de place pour hésiter). Les entrées « en vrac » qui parlent de douze choses différentes sont spécialement problématique à ce compte-là. Et la catégorie des posts parlant de moi-même est particulièrement indéfinissable, parce que tous les posts parlent de moi dans une certaine mesure, je veux isoler ceux qui parlent le plus de moi, et je ne sais pas où mettre la limite (celui-ci, par exemple, raconte-t-il ma vie ?).

J'ai tout de même taggué pour l'instant : 12 entrées sur le droit, 15 sur la religion, 19 sur la philo, 23 sur les langues ou la linguistique, 24 sur la physique, 25 sur les technologies Web, 26 sur Unicode, 48 sur la politique, 94 sur les films et le cinéma, 101 sur l'homosexualité ou les thèmes gay, 106 sur les maths, les 138 fragments littéraires gratuits, et enfin 310 posts parlant de moi. Ces derniers sont problématiques à plusieurs titres, à la fois parce que comme je le disais je ne sais pas trop quoi mettre dedans, et aussi parce que ça fait une page trop grande. (Pour comparaison, les pages mensuelles varient entre 2 entrées pour septembre 2008 et 79 pour août 2003, avec une moyenne à 19.)

Il faut encore que je crée plein de catégories relatives à l'informatique, mais je ne sais pas comment les grouper. Et certainement une catégorie livres ou littérature, mais je ne sais pas laquelle vaut mieux.

(jeudi)

Quels navigateurs utilisent mes lecteurs ?

Comme le passage à HTML5, évoqué dans l'entrée précédente pose le problème de la compatibilité des navigateurs, j'ai voulu essayer de savoir ce qu'utilisent mes lecteurs.

Problème : ce n'est pas évident du tout. D'abord parce que mon serveur Web est pollué de zillions de requêtes dont très peu, finalement, concernent vraiment le contenu réel : il y a les gens qui viennent depuis les moteurs de recherche (et dont l'écrasante majorité ne doit pas trouver ce qu'ils cherchaient, ou trouvent des choses idiotes : la page la plus populaire de mon site, et de très loin est celle-ci via Google images, ce ne sont pas des gens intéressés par moi ou par ce que je raconte), il y a les moteurs de recherche eux-mêmes et toute la jungle des robots butineurs, et il y a les agrégateurs… Une même personne peut revenir très souvent et plein de personnes peuvent se cacher derrière la même IP. Bref, c'est compliqué.

J'ai opté pour la méthodologie suivante : j'ai pris l'ensemble des requêtes depuis le 28 août, j'ai sélectionné uniquement celles qui demandaient une URL sous /~david/weblog/, puis j'ai trié par couple IP+UA (où UA désigne l'User-Agent, c'est-à-dire l'identifiant du navigateur tel qu'il est renvoyé par le navigateur). Je n'ai gardé que les couples IP+UA ayant fait au moins 5 requêtes dans la période (façon de m'assurer que ce sont de « vrais » lecteurs et pas des gens tombés là par hasard) : on peut appeler un tel couple IP+UA un « lecteur », même si bien entendu cela ne correspond pas forcément à une personne physique (par exemple parce que quelqu'un peut utiliser régulièrement deux navigateurs différents, ou deux ordinateurs différents, auquel cas il apparaît deux fois, et bien sûr parce qu'il y a encore des robots dans le tas). À ce stade-là, il restait 575 lecteurs. (Je jette le nombre de requêtes de chacun, qui ne m'intéresse pas.) Sur ces 575 lecteurs, j'ai essayé d'identifier (de façon semi-manuelle) tous les navigateurs habituels, en jetant tout ce qui est robot ou agrégateur (ou, en fait, tout ce que je ne comprenais pas) : il me reste 323 entrées, qui se répartissent de la façon suivante : [#]

118Firefox 6.0
49Firefox 3.6
32Chrome 13.0
17Firefox 5.0
11MSIE 8.0
11Firefox 9.0a1
10Opera 9.80
8Safari 5.0
7Safari 5.1
7MSIE 7.0
7MSIE 6.0
7Firefox 4.0
7Firefox 3.5
5MSIE 9.0
5Firefox 7.0
5Firefox 3.0
3Safari 4.0
3Chrome 12.0
2Chrome 14.0
1w3m 0.5.2
1Safari 4.1
1Safari 3.0
1Firefox 2.0
1Firefox 1.5
1Chrome 9.0
1Chrome 7.0
1Chrome 15.0
1Android 2.3

Bon, je ne peux qu'insister sur le fait que ça ne veut pas dire grand-chose (par exemple, les 11 « lecteurs » utilisant Firefox 9.0, c'est plutôt une personne qui a changé 11 fois de version), mais ça donne quand même une idée : très grossièrement 68% de mon lectorat qui ne passe pas par un agrégateur utilise Firefox, 12% utilise Chrome (ou Chromium), 9% IE, 6% Safari et 3% Opera. Le navigateur le plus susceptible de poser problème est MSIE ≤8, et j'aimerais savoir s'il arrive encore à afficher mon site (je ne parle évidemment pas de comprendre le SVG ou le MathML, mais juste d'afficher quelque chose de vaguement lisible).

[#] Je profite de cette table pour pousser une gueulante : avec tout ce que le HTML a inventé, et tout ce que le CSS permet de faire, il reste excessivement pénible de fixer l'alignement d'une colonne d'un tableau (par exemple, comme je voudrais le faire ici, aligner sur la droite les chiffres de la première colonne). Le HTML5 a supprimé l'attribut align qui était la façon évidente de faire ça en HTML4, en reléguant la fonction à CSS, mais justement CSS n'offre pas vraiment de mécanisme qui convienne. Naïvement on pourrait penser qu'ajouter un <col style="text-align: right" /> fonctionnerait, mais comme Ian Hickson l'explique, ce n'est pas le cas, parce que les propriétés CSS des colonnes ne servent que pour un très très petit nombre de trucs, et il y a des raisons à ça (je trouve que ces raisons assez peu convaincantes, d'ailleurs, mais je ne vais pas entrer dans les détails). On peut toujours faire un truc comme #maTable td:nth-child(n) { text-align: right } [#2], mais ce n'est pas vraiment une réponse, parce que les cellules d'une table peuvent faire plusieurs colonnes de largeur, donc il n'y a pas moyen de sélectionner à coup sûr les cellules de la colonne n avec un truc aussi simple que nth-child… du coup, la seule solution est de styler chaque cellule individuellement (ce qui ne répond pas à la question : on ne fixe pas l'alignement de la colonne, on fixe l'alignement de chaque cellule de la colonne). En guise de protestation, je laisse le tableau non aligné.

[#2] Par contre, j'e profiter de ça pour évoquer quelque chose d'autre : ma très grande satisfaction à découvrir que le HTML5 a introduit l'attribut scoped sur l'élément style, qui permet d'ajouter des règles de style sur un élément et tous ses descendants. En effet, en HTML4, on pouvait déjà mettre des attributs style sur un élément pour définir des règles qui s'appliquent à lui, mais si on voulait mettre une règle sur ses descendants, on était obligé de passer par la stylesheet globale : pas moyen d'écrire par exemple <table style="THIS td:first-child { text-align: right }">…</table> pour que tous les premiers td contenus dans la table soient alignés à droite : on devait soit mettre l'attribut style séparément sur chaque balise td de la table, soit donner à la table un id ou une classe (ce qui n'est pas problématique en soi) et insérer la règle de style à un tout autre endroit (ce qui, en revanche, est sérieusement merdique quand on songe que le bout de HTML en question pourrait être, par exemple, transcopié dans un autre document, par exemple par un agrégateur, qui peut reproduire l'arbre DOM mais pas chasser et interpréter les règles de style). En HTML5, on peut écrire : <table><style>td:first-child { text-align: right }</style>…</table>. Cela faisait des années que je me disais que cette possibilité manquait !

(mercredi)

Passage en HTML5

On va encore me reprocher de faire des annonces techniques qui n'ont aucune conséquence perceptible (mais bon, quand je parle d'autre chose, l'électro-encéphalogramme des commentaires enregistre un calme plat, alors que voulez-vous ?) : je viens de passer ce blog (et toutes les pages de ce site gérées par le même moteur) en HTML5[#]. C'est encore mal dégrossi, mais j'ai essayé de mettre les balises sémantiques comme article, header, footer, nav là où elles s'imposaient. Sur les navigateurs modernes, cela ne devrait faire aucune différence visible. Il y a peut-être un espoir que Google soit moins désorienté dans l'indexation, mais je n'y crois pas trop[#2].

En revanche, ce qui est bien est que je peux maintenant, enfin, librement inclure du SVG et du MathML dans mon blog. Et pour que mon annonce ne soit pas complètement creuse, donc, voici à gauche une étoile à sept branches en SVG (donc si vous ne voyez pas d'étoile à sept branches, c'est que votre navigateur n'est pas assez récent), et voici une formule en MathML permettant de montrer que l'étoile en question est constructible par origami :

e 2iπ 7 = 16 ( 1 +7 + 72 + 213 2 3 + 72 213 2 3 + 4972 + 2733 2 6 4972 2733 2 6 )

(La démonstration de la formule est laissée en exercice au lecteur. Je ne sais pas ce que j'ai trouvé le plus pénible dans l'histoire, d'ailleurs, entre la calculer et la taper en MathML.) Si vous voyez juste quelques nombres éparpillés mais pas de fraction ou de racine, même conclusion que pour le SVG : votre navigateur est trop vieux ou mauvais (et je note avec déception que, chez moi, aussi bien Chrome qu'Opera sont incapables d'afficher le MathML — ce qui est d'autant plus bizarre, s'agissant de Chrome, que WebKit est censé avoir au moins une implémentation partielle de MathML).

[#] Techniquement, et pour répondre à la première de mes questions techniques de l'autre jour, en polyglotte HTML5/XHTML5. J'ai validé un certain nombre de pages (certes pas toutes) contre le validateur expérimental, ce qui m'a d'ailleurs fait trouver un bug dedans (dû à la façon dont Java saucisonne l'Unicode en UTF-16 ; c'est assez ironique, parce que l'auteur de ce validateur écrit en faisant l'éloge de Java's notion of Unicode frozen as UTF-16 from to dawn of time until eternity).

[#2] En revanche, et cela devrait répondre du même coup à la deuxième de mes questions techniques de l'autre jour, si j'adopte, et je vais envisager de le faire, le microformat hAtom, j'ai bon espoir que cela permette de vraiment définir la limite des entrées et aux agrégateurs de fournir un contenu complet.

(dimanche)

Il est arrivé le moteur nouveau !

Sonnez hautbois, résonnez musettes ! Il est arrivé le moteur de blog nouveau ! Chantons tous son avènement !

Ça fait un an et demi que j'y pensais, que je bassinais mes lecteurs régulièrement avec ça, que j'y travaillais très très épisodiquement (après avoir mis du temps à faire les choix techniques), mais voilà, enfin, les choses sont en place et j'ai une première version un peu coupante sur les bords mais réellement fonctionnelle : ce blog[#] n'est plus généré par un programme en C de 3000 lignes mal écrit, buggué et impossible à maintenir, mais par… un programme en Java de 3000 lignes que j'espère légèrement moins mal écrit, légèrement moins buggué et légèrement moins impossible à maintenir.

Vous ne voyez pas la différence ? C'est normal. C'est voulu, même : à part de timides petits changements dans l'en-tête et le pied-de-page des différentes parties de ce blog, j'ai visé à tout garder identique. Le principal changement qui devrait être visible pour ceux qui utilisent le flux RSS, c'est le truc qu'on me réclamait régulièrement, à savoir une date et heure sur les entrées, et le (début du) contenu des entrées elles-mêmes dans le flux (chose qu'il aurait été quasiment impossible de faire avec l'ancien moteur sans s'arracher les cheveux). Sinon, la plupart des changements ont lieu de mon côté : mon blog n'est plus tapé comme un fichier unique de 6.6Mo (and counting) mais comme un petit fichier par mois (ça va rendre git plus heureux, même si en contrepartie c'est moins commode pour rechercher dedans), et quand je recompile il y a plein de magie noire mêlant du PostgreSQL, du Perl et du Java pour ne regénérer que les bouts vraiment modifiés. J'ai aussi dû me battre avec plusieurs misfeatures de XML ou des parseurs XML[#2].

Ceci étant, le but n'était pas tellement de changer des choses, même pour moi, mais de me donner les moyens de pouvoir les changer : autrement dit, de quitter une situation où je ne peux rien faire évoluer parce que le programme est tellement horrible que je refuse d'y toucher. Et pour ça, je crois avoir effectivement gagné.

[#] Ce blog, et avec lui une bonne partie des pages Web de ce site, celles qui ont vaguement le même look.

[#2] En voici une qui m'a causé pas mal d'arrachage de cheveux : si vous considérez le fichier XML suivant : <?xml version="1.0"?> <pouet>&pouet;</pouet>, il n'est pas bien-formé, parce que l'entité &pouet; est référencée sans être définie ; en revanche, si je rajoute n'importe quelle référence à un document externe, disons <?xml version="1.0"?> <!DOCTYPE pouet [<!ENTITY % nothing SYSTEM "/dev/null"> %nothing;]> <pouet>&pouet;</pouet>, alors magiquement le document devient bien-formé. La logique, assez compréhensible, est que le caractère bien-formé ou non d'un document XML doit pouvoir se décider sans consulter la moindre ressource externe, donc dès qu'on ne peut plus être sûr sans en consulter que l'entité n'a pas été définie, ce ne peut plus être une contrainte de bien-formitude bonne forme. (C'est cependant toujours une contrainte de validité.) Mais ce qui m'agace c'est que, du coup, les parseurs XML ne signalent pas d'erreur et qu'il n'y a apparemment pas de moyen de les forcer à en produire une (j'ai vraiment envie que Xerces me signale si j'utilise une entité non définie parce que j'ai fait une faute de frappe, et pas qu'il la remplace par la chaîne vide !). La seule façon de faire semble être de demander au parseur de valider, et d'ignorer la floppée d'erreurs qu'il va pondre sauf celle-ci : c'est vraiment absurde. (Et je ne vous parle pas du fait que Xerces a douze interfaces différentes avec douze façons différentes d'enregistrer un gestionnaire d'erreurs, et que trouver comment lui faire avaler un org.apache.xerces.xni.parser.XMLErrorHandler et pas un org.xml.sax.ErrorHandler parce qu'on veut éviter d'avoir à parser le message d'erreur, c'est pas évident.)

(mardi)

Note technique sur le flux RSS de ce blog

Suite à la demande d'un lecteur, j'ai fait un changement dans le flux RSS de ce blog, de sorte que les liens sont maintenant les liens permanents des entrées plutôt que les liens vers la page d'accueil (qui contient les 20 dernières entrées). Ça semble plus logique. J'avais dû faire le choix de faire des liens vers la page des 20 dernières entrées en me disant que les agrégateurs RSS n'avaient pas de mémoire, ou parce que je ne voulais pas que des lecteurs risquassent de lire (ou bookmarker) une page mensuelle et de rester coincés à la fin du mois, mais c'était assez stupide. Ceci étant, j'espère ne pas avoir tout cassé : RSS est un format terriblement mal foutu et mal spécifié, dont il existe trente-douze versions insidieusement incompatibles les unes avec les autres (certaines basées sur RDF, d'autres pas) et que chaque agrégateur doit interpréter avec ses propres idiosyncrasies. On marche donc sur des œufs quand on y touche.

Ah, et il est inutile de me rappeler que ce serait utile de donner le début des entrées dans le flux RSS, j'en suis conscient, c'est prévu pour Un Jour® (et plus précisément, pour le cinquième jour de la semaine sans ‘i’ suivant les calendes grecques du mois de la Saint-Glinglin prochaine).

Ce que je pourrais faire, par ailleurs, sans doute sans trop de mal, c'est faire un peu de magie en JavaScript qui redirige une URL comme weblog/#d.2011-07-12.1902 vers weblog/2011-07.html#d.2011-07-12.1902 si elle est partie de la page. Comme ça si d'aventure de telles adresses ont été publiées, elles seront réparées.

(dimanche)

Huitième blogoversaire

Ce blog a aujourd'hui huit ans, donc joyeux blogoversaire à moi. Je continue tout doucement (mais alors tout doucement) à lui écrire un nouveau moteur — j'espérais vaguement pouvoir lui en faire un cadeau aujourd'hui, mais ce sera pour plus tard. Je vais essayer de quand même me dépêcher pour que ce soit prêt avant que le grand cycle cosmique de l'Internet fasse que Facebook tombe à l'abandon et que les gens se rappellent qu'il existe un Web au-delà, et qu'on peut même y raconter sa vie, si, si.

(mardi)

Nouveau serveur Web

Même chose qu'il y a trois ans et demi : j'ai déménagé mon site Web sur un nouveau serveur (spica.gro-tsen.net), cette fois chez OVH — ce n'est pas tant que je pense qu'il soient meilleurs (même si, loi de Moore oblige, le nouveau serveur est effectivement plus pêchu que l'ancien), juste que ça fait un moment je voulais avoir un serveur de secours des fois qu'il y aurait un problème et la nécessité de basculer rapidement, et aussi, en l'absence de problème, pour séparer la machine qui gère mon mail et celle qui héberge mon site Web. Et je vais upgrader l'ancien serveur (aldebaran.gro-tsen.net) de Debian 5.0 Lenny à Debian 6.0 Squeeze, donc il est sans doute prudent d'avoir une machine prête à la remplacer en cas d'échec complet. Ah, et puis je voulais récupérer une adresse IPv4 avant qu'il n'y en ait plus du tout. 😉

Normalement, cela ne devrait avoir aucune conséquence visible pour mes lecteurs. En pratique, même si j'ai pensé à beaucoup de choses (les commentaires de ce Blog, les torrents que j'héberge, ainsi que plein de sites ou pseudo-sites périphériques, c'est d'ailleurs pas mal bordélique), il y a probablement des choses que j'ai oubliées. Donc, si vous voyez un lien subtilement cassé, faites-moi signe. Mais si vous arrivez à lire ces mots, c'est que tout n'est pas désespérément foutu. ☺

Je ne sais pas quelle machine, de spica (OVH / Kimsufi) ou d'aldebaran (ProXad / Dedibox Online) a la meilleure connectivité. Je ne sais pas non plus qui a la meilleure connectivité IPv6 : ProXad a une façon bizarre de s'y prendre, un peu à la sauvette, et ne fournit pas par exemple le reverse DNS ; OVH a l'air plus sérieux (ils donnent des vraies adresses en 2001::/16, et ils fournissent le reverse DNS — quoique pas la délégation sur la zone), même s'il y a aussi des bizarreries, et j'ai observé des problèmes de connectivité IPv6 (alors que l'IPv4 marchait au même moment). On verra. (Mais si jamais vous avez une adresse IPv6 et que vous voulez consulter mon site explicitement en IPv4 pour tester la différence de connectivité, mettez spica4.madore.org au lieu de www.madore.org, le reste de l'adresse restant inchangée.)

(vendredi)

Statistiques d'accès de ce blog, février 2011

Puisqu'on me demande de faire et de publier des statistiques d'accès à ce blog ou à ce site Web :

Du 1er au 28 février 2011 (inclus, heure UTC+0100 d'après le serveur), j'ai reçu :

Je vous laisse commenter si ça vous dit. Personnellement, je trouve ça extrêmement peu informatif : ça ne me laisse finalement à peu près aucune idée de combien de gens lisent mon blog avec une certaine régularité. Ce qui est certain, c'est que l'immense majorité des requêtes traitées par le serveur sont des requêtes sans intérêt (un crawler qui met à jour son index trop fréquemment, une recherche de vulnérabilités, ce genre de choses).

Je reçois aussi encore un nombre important de requêtes (dans les 135/j environ pour chacun des fichiers) vers ces images de cartes à jouer. Je ne sais pas pourquoi j'ai créé cette page pour commencer, mais manifestement des tas de gens se sont précipités pour en faire leur avatar sur des forums de discussion à la con : ce qui ne me poserait pas de problème s'ils copiaient l'image sur un serveur à eux, mais malheureusement ils font simplement un lien, et du coup mon serveur est utilisé de façon complètement stupide pour afficher des images qui n'ont aucun rapport avec moi. J'ai ajouté quelques protections contre les cas les plus évidents, et je pense qu'il y a de nos jours suffisamment d'endroits sur le Web où trouver des images de cartes à jouer pour que la vague soit passée, mais à un certain moment c'était vraiment la majorité des accès à mon serveur qui concernaient ces foutues images. C'est suite à ça que je me suis dit que tenir des stats d'accès de façon régulière était inutile voire déprimant.

(dimanche)

Je voudrais changer le moteur de ce blog

Le moteur de ce blog est une abomination sans nom. Il s'agit d'un programme C, que j'ai écrit il y a sept ans, qui parse un fichier source XML unique que j'édite et qui contient toutes les entrées, pour produire les fichiers HTML statiques rassemblant les entrées de chaque mois ainsi que celui contenant les 20 dernières entrées et celui reprenant mes fragments littéraires gratuits ou encore l'index de toutes les entrées. Le même programme sert à générer un certain nombre d'autres pages de ce site Web (mais pas toutes, parce que j'ai un bon nombre de couches de vieilleries empilées les unes sur les autres ☹ — avec au moins trois styles de présentation différents, plus quelques pages qui sont exceptionnelles pour une raison ou une autre).

Je n'ai pas voulu utiliser un moteur de contenu|blog standard, d'abord parce qu'en 2003 le choix n'était pas terrible, mais aussi parce que je tiens à avoir des pages HTML statiques et pas générées à chaque requête, ou parce que je déteste le PHP, ou simplement parce que je suis control-freak. Je me suis dit qu'avoir mon propre moteur me donnerait plus de flexibilité pour me créer des nouveaux tags dans le source, pour organiser mon contenu comme je le veux, ou ce genre de choses. Enfin, ça c'était la théorie, et ça n'a pas marché du tout.

J'ai écrit le moteur en C pour des raisons d'efficacité : la machine qui fait le traitement était initialement une machine de l'ENS complètement à bout de souffle, et toutes les autres solutions que j'avais regardées (notamment des choses sur Perl) étaient abominablement lentes. Quant à XSLT, sur lequel j'étais parti, il n'était décidément pas adapté (déjà, seule la version 1 existait en 2003, mais le moindre test, comme pour vérifier que les entrées étaient bien numérotées correctement, devenait une insupportable prise de tête).

Mais même en C, l'efficacité est devenue un problème. Mon programme ne génère qu'un fichier mensuel par appel : pour générer tous les 86 fichiers de sortie (84 mois plus trois fichiers particuliers), il faut donc l'appeler 86 fois, et à chaque fois il doit parser complètement le fichier d'entrée qui fait maintenant 5.5Mo. Ça fait l'équivalent de 470Mo de XML à traiter : même si le serveur qui fait le traitement est un peu plus rapide que celui avec lequel j'ai commencé, ça prend presque une minute, que je n'ai pas envie d'attendre à chaque fois que je compile pour vérifier que tout s'affiche bien comme je veux. J'ai adopté la moyenne mesure consistant à recompiler à chaque modification seulement les fichiers des trois derniers mois (plus l'index et le fichier des 20 dernières entrées), et à recompiler une fois par mois (ou quand j'en éprouve le besoin particulièrement) la totalité du HTML, des fois que j'aurais fait des corrections de fautes d'orthographes dans des entrées un peu anciennes. Ce n'est vraiment pas satisfaisant (mais détecter si une entrée ancienne a changé n'est pas facilement possible). Et surtout, ça m'a empêché de créer d'autre « catégorie » que celle des fragments littéraires gratuits (savoir quels fichiers recompiler deviendrait de plus en plus abominable). En l'état actuel du programme, le modifier pour produire plusieurs fichiers en sortie par un seul appel serait d'une difficulté inextricable.

Et je ne parle pas des maux de tête au sujet du fil RDF, qui est une abomination dans une abomination (un autre programme C qui partage une partie du code source du premier) : je sais qu'on m'a demandé mille fois de mettre des heures dedans, et/ou de mettre le début de mes entrées plutôt que juste leur titre, mais avec le programme que j'ai c'est juste trop difficile.

Ajouter à ça que la compilation du programme C moteur de blog lui-même est très lente (il y a un fichier source qui est assez énorme). Donc, même sans compter que toute manipulation de chaînes de caractères en C s'apparente au plaisir de résoudre une équation différentielle à la règle à calcul : ajouter le moindre tag que je pourrais utiliser dans le source est vraiment trop chiant. Du coup, finalement, je fais presque tout à la main (par exemple, les notes en bas d'entrée, elles ne sont pas formatées automatiquement comme elles devraient l'être). Tout ça fait que j'ai envie de tout mettre à la poubelle.

Je viens de passer la journée à me demander ce que je veux utiliser à la place. Je pense que je m'oriente vers une architecture en Perl, utilisant la XML::LibXML (même si j'ai déjà eu des soucis avec), et vers une compilation en deux parties, une partie consistant à insérer les entrées dans une base de données SQL (ce qui permettra, par exemple, de savoir plus facilement celles qui ont changé) et la seconde consistant à générer les fichiers HTML à partir de différents modèles qui font appel à cette base de données.

(dimanche)

Déménagement informatique

Normalement vous ne devriez rien remarquer de particulier, mais ce site Web a été déménagé sur un nouveau serveur (aldebaran.⁂.net… ah non, pardon, aldebaran.dedibox-sucks.com) : même si l'explosion du précédent serveur n'a pas eu lieu comme prévu (ou en tout cas pas aussi rapidement), j'ai quand même trouvé plus prudent de migrer sans tarder. Si vous voyez une différence significative ou un lien subitement cassé, c'est probablement une erreur de ma part, signalez-la moi. (Normalement j'ai fait attention à tout, y compris aux commentaires, aux torrents hébergés ici et autres bizarreries, mais on ne sait jamais, c'est si facile d'oublier un détail.)

Ce n'est cependant qu'un déménagement informatique facile, par rapport à un autre qui m'attend : décider ce que je fais, au final, pour mon adresse mail. Actuellement je lis mon adresse mail à l'ENS comme auparavant, et je lis celle à l'ENST via un webmail malcommode : je ne me suis pas encore décidé à rediriger l'ancienne vers la nouvelle par peur d'avoir mal prévu les conséquences de l'avalanche de spam qui s'y déverserait alors (mon filtre à spam actuel n'est pas trop trop mal réglé, je suis donc prudent avant d'engager tout changement). Une solution possible serait de tout rediriger sur une adresse @madore.org, mais là ce qui me fait peur c'est de ne pas arriver à maintenir le serveur (et le domaine) vivant de façon continue et pérenne. Du coup je suis un peu paralysé par l'indécision.

(mardi)

Joyeux blogoversaire à moi !

Well, if there's a bright centre to the Internet, you're on the blog that it's farthest from.

[De nouveau, je n'ai pas besoin de dire d'où sort la citation ; hélas, je ne suis même pas la premier à avoir l'idée de l'appliquer à ce contexte : c'est le problème d'être arrivé trop tard dans un monde trop vieux.]

Hop, une pensée émue pour le jour où j'ai commencé ce blog, il y a quatre ans. Taratata, je peux me proclamer un des pionniers[#] de la blogosphère francophone (oui, souvenez-vous, en 2003 la petite sœur de tout le monde n'avait pas déjà un skyblog, puisque les skyblogs n'existaient pas). J'aimerais en faire un résumé par phases, mais il faut bien admettre que ce n'est pas facile, tout ça manque quand même de cohérence. Quand je relis des entrées passées, je me souviens les avoir écrites, mais l'ordre me paraît souvent bizarre (tiens, cette entrée, ça fait déjà trois ans que je l'ai écrite ? je croyais que c'était il y a trois semaines ! ah, et celle-là j'aurais dit que c'était super vieux, elle date de seulement deux mois… — ça n'a rien de spécifique à ce blog, bien sûr, c'est toujours le cas quand je repense à des choses passées, la séquence des événements est toute chamboulée par mon souvenir). Peut-être que quand je serai vieux et célèbre[#2], mes exégètes nombreux et bardés de diplômes définiront ma période bleue et ma période rose, et quand mon blog sera publié en Pléiade avec des notes un des commentaires sur celle-ci expliquera ce que je ne sais pas vous expliquer maintenant, mais en attendant je vais me coucher.

[#] Ah, pour être pionnier dans quelque chose, il faut que quelqu'un vous ait vu et vous ait imité ? Zut. Ben tant pis, alors.

[#2] Quoi, je ne suis pas crédible ? Quoi, la page parlant de moi a été retirée de la Wikipédia francophone ? Mais euh, d'abord.

(mercredi)

Pourquoi mon blog il est pas comme les autres ?

Cela fait maintenant plus de deux ans que je bloggue et, dans cet intervalle, la « blogosphère francophone » est vraiment devenue un phénomène de masse (disons qu'en 2003 le Français moyen ou même légèrement branché n'avait jamais entendu le mot blog, en 2005 il est vraiment passé dans le vocabulaire courant). Au centre de cette sphère, il semble y avoir un petit cercle[#] assez fermé de blogs généralement anciens tenus par des gens qui se connaissent, se lisent les uns les autres, se référencent les uns les autres, et évoquent généralement des sujets relativement semblables. Une partie significative sont homos[#2], d'ailleurs. Trouver quelques-uns de ces blogs (et donc, tous) devrait être un exercice très facile : il n'est pas nécessaire que je fournisse des exemples. Un observateur acerbe pourrait être tenté de ridiculiser le nombre d'entrées de ces blogs consacrées à la blogosphère elle-même, ses potins, ses blagues, ses mèmes qui passent d'un blog à l'autre… un peu (dirait cet observateur acerbe) comme si les célébrités du show-biz lisaient la presse people où on parle d'elles. Je ne pense pas que ce soit une critique sérieuse : c'est plutôt, en fait, un signe de santé, un indice d'émergence d'une communauté dans un sens assez fort et plutôt positif, que cette tendance à devenir réflexif, à s'observer soi-même. Mais je digresse.

Je suis moi-même, je veux dire, ce blog est, très éloigné, de ce centre lumineux de la blogosphère. Pourquoi ? Je ne sais pas. C'est étrange, finalement, parce que j'ai globalement les mêmes préoccupations, la même forme de geek-attitude, et je connais bien quelques-uns de ceux qui y sont beaucoup plus profondément. Mais la teneur ou, en tout cas, la longueur de mes entrées, est différente, ce que je serais tenté de résumer en disant que mon blog est plus chiant (et, tout simplement, plus mauvais) que ceux des autres, mais je ne sais pas pourquoi. (Et peut-être certains de mes lecteurs[#3] seront-ils tentés d'être en désaccord, mais il y a un biais évident parce qu'ils sont — justement — mes lecteurs. Mais même certains de mes amis proches qui au départ lisaient mon blog ont décroché, plus ou moins rapidement, et cela me fait très mal : si je n'arrive pas à susciter l'intérêt chez eux, où le susciterai-je ?) Zeus, même mes lecteurs sont d'un genre très différent, comme un ami (un bloggueur plus conventionnel, justement) me le faisait remarquer aujourd'hui : dans le sens positif (pour moi), le lecteur moyen du blog typique n'a pas cinq DEA et n'est pas capable de disserter de tout et de n'importe quoi ; dans le sens négatif, le lecteur moyen du blog typique n'est pas cinglé. (Avertissement : si vous vous demandez si vous êtes visé par cette dernière phrase, c'est probablement que vous ne l'êtes pas…)

Une autre remarque cruellement vraie qu'on m'a faite aujourd'hui, pour reprendre le fait qu'il y a beaucoup de « blogs gays » dans la blogosphère (francophone, c'est de celle-là que je parle, mais dans les autres aussi), c'est que le mien ne peut certainement pas passer pour tel : il n'y a quasiment pas de « contenu gay » dessus. Ce que ça veut dire, bien sûr (et c'est pour ça que c'est cruellement vrai), c'est qu'il n'y a pas de « contenu gay » dans ma vie, pour commencer : le blog n'en est que le reflet.

J'ai donc un assez triste sentiment d'échec, que ne pourra pas aténuer l'idée (réelle ou feinte) que mon blog a un intérêt différent[#4] : le fait est qu'il n'est pas ce que je voudrais qu'il fût. (Et, de nouveau, mon blog n'est en cela que le reflet de ma vie.) Et je tire mon chapeau à d'autres — qui ne le sauront pas parce qu'à deux ou trois exceptions près ils ne lisent pas mon blog.

[#] Il y a un cercle au centre de la sphère ? OK, je craque, mais il est tard, tout ça.

[#2] À moins que ce soit un biais d'observation de ma part ? Il y a sans doute de ça, mais je pense vraiment que le nombre de pédébloggueurs est une proportion plus significative du nombre de bloggueurs « en vue » (dans n'importe quel sens raisonnable) que 5% ou 10%.

[#3] En excluant les petits cons qui me lisent juste pour pouvoir poster une méchanceté sur chaque entrée. Et à qui j'ai envie de donner ce conseil amical : get a life.

[#4] Imaginer différent exactement comme dans le vocabulaire politiquement correct : on ne doit plus dire disabled mais differently abled.

(jeudi)

Pourquoi moi blog il n'a aucun intérêt

Le principe d'un blog, normalement, c'est de raconter sa vie. Pour ça, encore faut-il avoir une vie intéressante : si elle se limite à aujourd'hui, je suis allé au boulot, j'ai bossé toute la journée, en rentrant j'ai fait des courses, j'ai dîné et je me suis couché chaque jour de la semaine, ce n'est peut-être pas la peine de le faire savoir à tout le Web et son chien (d'accord, il y a des gens qui ne s'en privent pas). Alors que dire de aujourd'hui, je me suis levé en fin d'après-midi, j'ai passé trois heures à répondre à deux mails (pendant que j'en recevais douze pendant le même temps), puis j'ai couru faire des courses avant la fermeture du supermarché, j'ai dîné, j'ai passé mon temps à ne rien foutre, et je me suis couché ? Ben pas grand-chose de mieux, à part que c'est ma vie à moi : bienvenue dans le monde merveilleux de Ruxor. Quand on me demande ce que j'ai fait ou ce qu'il y a de neuf depuis la dernière fois qu'« on » s'est vu (que ce soit la veille, la semaine dernière, le mois dernier, l'année dernière ou il y a douze ans — cas avéré récemment) je réponds invariablement : ben rien. Du coup, je me demande bien par quel exploit j'arrive à remplir une entrée (pratiquement) chaque jour depuis bientôt dix mois. Question rhétorique : la réponse, c'est que ça fait un bon moment que j'ai acquis la capacité phénoménale à débiter sur demande des conneries en quantité illimitée (et de manière affreusement verbeuse). Là, par exemple, je suis en train de vous raconter des conneries sur le fait que je raconte des conneries (j'aime le mot « méta » le soir au fond des bois), c'est pathétique. (Non seulement c'est nul, mais en plus, même dans ce registre pitoyable j'ai déjà fait largement mieux.) Ah non, attendez, ce n'est pas fini, je ne peux quand même pas écrire une entrée sans faire référence au fait que je suis un pédé frustré : voilà, c'est fait, comme ça l'ordre cosmique est préservé.

Note : cette entrée n'est pas une pêche aux compliments ; vous pouvez donc vous abstenir de commenter si c'est pour dire mais je trouve ton blog intéressant parce que <blablabla>. Vous pouvez également vous abstenir de commenter si c'est pour dire je trouve effectivement qu'il est sans intérêt, d'ailleurs.

(Sunday)

Why do I write this 'blog?

[Traduction française ci-dessous.]

Time for a little introspection: what is my purpose in 'blogging? Certainly I enjoy talking about myself, but it runs deeper than just this. Here's one possible reason.

Have you ever played a video game where you could save the game at any point—and be sure you could come back to it later? Felt that very special relief, not so much that you had defeated the ugly monster, but that you had saved the game afterward? Or simply (outside the narrow world of video games) felt relieved, after making important work on a computer, that you had not only saved it, but saved it in a secure place, made a backup, or whatever?

Unfortunately, there is no such thing in real life. Sure, one can get an insurance for something one cares for (even for one's own life!), but there is nothing like the particular bliss of cyberlife where one can make a perfect copy of anything to serve as backup, and store it in security.

Somehow—please don't laugh—'blogging seems to be a substitute of a kind. I may not be able to back up my life in security, but at least I can save some of my memes (see outset below), by propagating them in other people's brains. You, for example. And indeed I feel, after having written some of this 'blog's entries, much as if I had “saved” something of myself.

This is the sort of Sehnsucht nach Ewigkeit (“longing for eternity”) that drives mankind's greatest artists or thinkers, aspiring for immortality, to leave their name on their works for future times to remember. But it is not the sole privilege of the greatest and highest to propagate their memes: though my name be engraved in no such marble, I can still hope for some of the ideas that have flowed through me (I say not come from me, merely flowed through) to become somehow, someday, a significant part of the noosphere.

Ridiculous? Perhaps—but quite common. Such is exactly the frame of mind of people who wish for their children or descendants a life that they could not have for themselves, or those who think it important for someone to “continue their name”. There are good chances that I won't have any biological children (and I certainly won't have nephews or nieces, so the closest thing I have to descendants are a couple of cousins' children who share some of my genes). But my brainchildren might beget brainchildren of their own, and so on—crescite et multiplicamini: these are my real descendants.

In short, what I am doing now is this: fertilizing your brain. Thank you for your kind assistance.

☺

[French translation of the above.]

C'est le moment d'une petite introspection : quel est mon but en écrivant ce 'blog ? Certainement j'apprécie de parler de moi, mais cela court plus profondément. Voici une raison possible.

Avez-vous déjà joué un jeu vidéo où vous pouviez sauvegarder la partie à n'importe quel point — et être sûr de pouvoir y revenir plus tard ? Et éprouvé ce soulagement très particulier, non tant d'avoir triomphé du vilain monstre, mais d'avoir sauvé la partie ensuite ? Ou simplement (hors du monde étroit des jeux vidéo) vous êtes senti soulagé, après avoir fait un travail important sur ordinateur, de l'avoir non seulement sauvé, mais sauvé en un endroit sûr, fait une copie de sauvegarde, que sais-je ?

Malheureusement, il n'y a rien de tel dans la vie réelle. Assurément, on peut souscrire à une assurance pour quelque chose à quoi on tient (même pour sa propre vie !), mais ce n'est rien comme la sérénité particulière de la cybervie où l'on peut faire une copie parfaite de n'importe quoi pour servir de sauvegarde, et la stocker en sécurité.

D'une façon ou d'une autre — ne riez pas — 'blogger m'en semble une sorte d'ersatz. Je ne peux certes pas faire une copie de sauvegarde de ma vie en sécurité, mais au moins je peux sauver certains de mes mèmes (voir l'encadré ci-dessous), en les propageant dans le cerveau d'autres personnes. Vous, par exemple. Et je me sens en effet, après avoir écrit certaines des entrées de ce 'blog, comme si j'avais « sauvé » une partie de moi-même.

C'est la sorte de Sehnsucht nach Ewigkeit (« poursuite de l'éternité ») qui guide les plus grands artistes et penseurs de l'humanité, aspirant à l'immortalité, à laisser leur nom sur leurs œuvres pour que les temps à venir se les rappellent. Mais ce n'est pas le privilège exclusif des plus grands et plus hauts de propager leurs mèmes : quoique mon nom ne soit engravé en aucune sorte de marbre, je peux cependant espérer que quelques-unes des idées qui ont coulé par moi (je ne dis pas venues de moi mais seulement coulé par moi) deviennent un jour, d'une façon ou d'une autre, une partie significative de la noosphère.

Ridicule ? Peut-être — mais fort commun. Tel est exactement le cadre d'esprit des gens qui veulent pour leurs enfants ou descendants une vie qu'ils n'ont pas pu avoir pour eux-mêmes, ou ceux qui croient important que quelqu'un « continue leur nom ». Il y a de bonnes chances pour que je n'aie pas d'enfants biologiques (et certainement je n'aurai pas de neveux ou nièces, de sorte que le plus près que j'aie en matière de descendants sont quelques petits-cousins qui partagent certains de mes gènes). Mais mes enfants de l'esprit pourraient engendrer d'autres enfants de l'esprit, et ainsi de suite — crescite et multiplicamini : ceux-là sont mes vrais descendants.

En bref, ce que je fais maintenant est ceci : fertiliser votre cerveau. Merci de votre aimable coopération.

☺

What is a meme?

[Traduction française ci-dessous.]

The word “meme”, which parallels “gene”, was invented by the English biologist Richard Dawkins in his celebrated book The Selfish Gene (1976). In a nutshell, memes are to ideas what genes are to living creatures: the elementary building blocks from which ideas are made. And much the same way as the biosphere is a struggle in which the fight for survival of the fittest individuals, competing for food, selects the genes most capable of ensuring their own reproduction, while random mutations continuously produce new genes from old ones, much in the same way, the noosphere (the world of thoughts) is a struggle in which the fight for survival of the fittest ideas, competing for brain space, selects the memes most capable of ensuring their own reproduction, while random variations continuously produce new memes from old ones.

This concept can also be traced, for example, in the work of the French philosopher Alain, who had already noted that human tools follow an evolutionary process very similar to that which Darwin pictures as the origin of species: craftsmen tend to reproduce prior tools as faithfully as possible, but slight changes always happen, willy-nilly, and the best tools are more successful and tend to be copied more often. So even if no individual craftsman is creative in his work or shows any ingenuity in improving existing tools, civilizations tend to develop better objects over the course of generations.

[French translation of the above.]

Le mot « mème », qui fait parallèle à « gène », a été inventé par le biologiste anglais Richard Dawkins dans son célèbre livre The Selfish Gene (1976). En bref, les mèmes sont aux idées ce que les gènes sont aux créatures vivantes : les blocs élémentaires de construction à partir desquels les idées sont faites. Et de la même manière que la biosphère est une lutte dans laquelle le combat pour la survie des individus les plus aptes, en concurrence pour la nourriture, sélectionne les gènes les plus capables d'assurer leur propre reproduction, tandis que des mutations aléatoires produisent continuellement de nouveaux gènes à partir des anciens, bien de la même manière, la noosphère (le monde des pensées) est une lutte dans laquelle le combat pour la survie des idées les plus aptes, en concurrence pour le terrain de pensée, sélectionne les mèmes les plus capables d'assurer leur propre reproduction, tandis que des variations aléatoires produisent continuellement de nouveaux mèmes à partir des anciens.

Ce concept peut aussi être tracé, par exemple, dans l'œuvre du philosophe français Alain, qui avait déjà noté que les outils humains suivent un processus d'évolution très semblable à celui que Darwin dépeint comme l'origine des espèces : les ouvriers tendent à reproduire les outils antérieurs aussi fidèlement que possible, mais de petits changements se produisent toujours, çà et là, et les meilleurs outils ont plus de succès et tendent à être copiés plus souvent. Donc même si aucun ouvrier individuel n'est créatif dans son travail et ne montre aucune originalité pour améliorer les outils existants, les civilisations tendent à développer de meilleurs objets au fil des générations.

(Tuesday)

but with results: talkback comes to this 'blog

[Traduction française ci-dessous.]

Notice the new little link that says Comments at the bottom of every entry (or Commentaires if the entry is in French)? Well, that's the new gimmick: a talkback system for this 'blog. Except that actually it's not just a talkback for this 'blog, it can be used to post comments about any Web URI whatsoever—Web annotations if you wish (except that I just provide a human-oriented interface, not a machine-usable RDF communication—maybe that will come, someday…).

The thing is pretty Spartan, certainly: don't expect an award-winning user interface. There are no instructions on how to use it, either, but I'm sure anyone smart enough to read my 'blog 😉 will be smart enough to use this tool. The system's messages are in English, but nobody says that comments must be in English (please feel free to use any language whatsoever).

A few obvious rules: first, I reserve every right I can legally reserve on the use of the thing, and certainly that to delete posts which I find inappropriate for any reason whatsoever (or simply if I decide to remove talkback or to wipe everything); second, you are not permitted to abuse it; third, you are requested to inform me of any problem you might encounter, especially one which might betray a security vulnerability. I'm hosting this system on my personal computer, and that's a risk I take, so I hope people will know how to behave. I've tried to make it robust, but I'm pretty sure I didn't think of everything, and it's obvious that you can work, at least, denial of service attacks: please don't.

To post comments, you need to create an account (the link is at the bottom of the comments page), and then log in: this is so people can erase their own posts (and not those of others). To create the account, you must provide an email address, which will be checked for validity: this is so that I have minimal accountability on who uses the thing—but the email address will not appear on your posts (and I don't intend to sell it or anything), and nothing will be sent to it except for one email initially (to check its validity). You must also provide a password of your choice: please try not to forget it, because I currently don't have any automated mechanism to handle recovery (but of course you can email me if it happens). Once you log in, if your navigator accepts cookies, your session should remain open until you log out explicitly (so do log out if your computer is shared and accounts are not kept separate).

I can think of many features that should be added to this system, but right now I don't feel like hacking it any further, so it will stay as it is unless a serious problem turns up. For now, just… enjoy!

Before somebody asks: no, there is simply no way I can change the Comments link on the 'blog itself to reflect the number of comments on the corresponding entry. It's not the same server, and so on. You'll just have to click and see.

Oh yes: and if someone wishes to see the source code, I'm willing to provide it (under some free software license), but in exchange for the moral assurance that any security problems that would be discovered by reading it will be reported to me rather than being exploited against me.

[French translation of the above.]

Vous avez remarqué le nouveau petit lien Commentaires en bas de chaque entrée (ou Comments si l'entrée est en anglais) ? Voilà, c'est le nouveau gadget : un système de réponses pour ce 'blog. Sauf qu'en fait ce n'est pas juste un système pour ce 'blog, il peut être utilisé pour poster des commentaires au sujet de n'importe quelle URI du Web — des annotations Web si vous voulez (sauf que j'ai juste fourni une interface orientée humain, pas une communication RDF utilisable par une machine — peut-être que ça viendra un jour…).

La chose est passablement spartiate, certainement : ne vous attendez pas à une interface utilisateur méritoire. Il n'y a pas d'instruction sur la façon de l'utiliser, non plus, mais je suis sûr que n'importe qui d'assez malin pour lire mon 'blog 😉 sera assez malin pour utiliser cet outil. Les messages du système sont en anglais, mais personne ne dit que les commentaires doivent être en anglais (sentez-vous libre de poster dans n'importe quelle langue).

Quelques règles évidentes : premièrement, je me réserve tous les droits que je peux légalement me réserver sur l'usage de la chose, et certainement celui d'effacer les posts que je trouve inappropriés pour quelque raison que ce soit (ou simplement si je décide d'enlever le système ou de tout virer) ; deuxièmement, vous n'avez pas le droit d'en faire une utilisation abusive ; troisièmement, je vous demande de me signaler tout problème que vous pourriez rencontrer, surtout s'il témoignait d'une vulnérabilité de sécurité. J'héberge ce système sur mon ordinateur personnel, et c'est un risque que je prends, donc j'espère que les gens sauront se comporter. J'ai essayé de le rendre robuste, mais je suis assez sûr que je n'ai pas pensé à tout, et il est évident que vous pouvez produire, au moins, des attaques de déni de service : s'il vous plaît ne le faites pas.

Pour poster des commentaires, il vous faut créer un compte (le lien est en bas de la page de commentaires), et ensuite vous logguer : c'est pour que les gens puissent effacer leurs propres posts (et non ceux des autres). Pour créer le compte, vous devez fournir une adresse mail, qui sera vérifiée quant à sa validité : c'est pour que j'aie au moins la traçabilité minimale concernant ceux qui utilisent la chose — mais l'adresse mail n'apparaîtra pas dans vos posts (et je n'ai pas l'intention de la vendre ou quelque chose comme ça), et rien n'y sera envoyé sauf pour un mail initial (pour en vérifier la validité). Vous devez aussi fournir un mot de passe de votre choix : essayez de ne pas l'oublier, parce que je n'ai pas actuellement de mécanisme automatisé pour en gérer la récupération (mais bien sûr vous pouvez m'écrire un mail si ça se produit). Une fous que vous vous logguez, si votre navigateur accepte les cookies, votre session devrait rester ouverte jusqu'à ce que vous vous délogguiez explicitement (donc faites-le si votre ordinateur est partagé et que les comptes n'y sont pas séparés).

Je peux imaginer plein de fonctionnalités qui devraient être ajoutées au système, mais maintenant je ne me sens pas l'envie de le hacker encore plus, donc ça restera comme c'est à moins qu'un problème sérieux ne survienne. Pour l'instant… amusez-vous bien !

Avant que quelqu'un me demande : non, il m'est tout simplement impossible de changer le lien Commentaires sur le 'blog lui-même pour refléter le nombre de commentaires de l'entrée correspondante. Ce n'est pas le même serveur, et ainsi de suite. Vous devrez juste cliquer sur le lien pour voir.

Ah oui : et si quelqu'un veut voir le code source, je suis prêt à le fournir (sous une quelconque licence libre), mais en échange de l'assurance morale que tout problème de sécurité qui serait découvert en le lisant me serait signalé à moi et non utilisé contre moi.

(Monday)

Splitting this 'blog

[Traduction française ci-dessous.]

Finally! This 'blog has been split in pieces. Now the entry page contains only the twenty (I may change this) last entries, and there are separate pages for the entries of May, June, July and August 2003 (with more to come, of course). The date (in the upper-left corner) of every entry is a (supposedly) permanent URL for that entry, if you wish to link to it. Furthermore, there is now a clear index of all entries, also with permanent links to them.

One of the difficulties was to keep all links correct: within the 'blog, use the permanent link when necessary, or a simple anchor when possible. So if I now mention my previous entry about cranberries, it will turn out as a simple anchor (until the entry in question is no longer on the same page), but if I mention the first entry in this 'blog, it will turn out as a link to the appropriate file. There wasn't any fundamental difficulty behind this, it's just that C is really a zeus-awful programming language when it comes to manipulating character strings (yeah, I know, why did I have to use C, anyway?).

Also note that all these pages are static HTML. No CGIs or anything of the sort. They are just generated once, when I type make (except that I have a few difficulties with the makefile structure, but that's another day's worry).

[French translation of the above.]

Enfin ! Ce 'blog a été coupé en morceaux. Maintenant la page d'entrée contient seulement les vingt (je changerai peut-être ce nombre) dernières entrées, et il y a des pages séparées pour les entrées de mai, juin, juillet et août 2003 (avec d'autres à venir, bien sûr). La date (dans le coin en haut à gauche) de chaque entrée est une URL censément permanente pour cette entrée, si vous voulez y faire un lien. De plus, il y a maintenant un index clair de toutes les entrées, aussi avec des liens permanents vers elles.

Une des difficultés a été de garder corrects tous les liens : à l'intérieur du 'blog, utiliser des liens permanents quand c'est nécessaire, ou une simple ancre si c'est possible. Donc si je mentionne mon entrée précédente sur les airelles, cela apparaîtra comme une simple ancre (jusqu'à ce que l'entrée en question ne soit plus sur la même page), mais si je mentionne la première entrée de ce 'blog, cela apparaîtra comme un lien vers le fichier approprié. Il n'y avait pas de difficulté fondamentale derrière ça, c'est juste que le C est un langage de programmation de merde quand il s'agit de manipuler des chaînes de caractères (ouais, je sais, pourquoi devais-je utiliser le C pour commencer ?).

Notez aussi que toutes ces pages sont du HTML statique. Pas de CGIs ou quoi que ce soit du genre. Elles sont juste générées une fois, quand je tape make (sauf que j'ai quelques difficultés avec la structure des makefiles, mais ça c'est le souci d'un autre jour).

(Wednesday)

This 'blog

All right, it seems that (at least until someone tells me otherwise) deactivating JavaScript stopped MSIE from crashing on this page. (Actually, my first attempt failed because of a typo on my part, but this is now fixed.) So Internet Explorer users (that's what? 98% of the Web population?) are no longer excluded from reading my WebLog, hurray, hurray. If you can't read this sentence, please tell me about it (david+www[at sign]madore[dot]org).

The downside is that (always talking about MSIE, of course) email addresses such as the one I just quoted will appear quite ugly. I'm sorry about that, but there isn't much that I can do; you just have to imagine that the little [at sign] picture is a “commercial at”, and that the [dot] is a “full stop”. Yeah, it sucks. Of course, users of Mozilla and Opera should have no problem (readable email addresses even with JavaScript turned off). As for Konqueror or Safari, I received reports that it doesn't quite work, but I still have to investigate.

The main worry at the moment is that this 'blog, with its currently 93 entries, has long since become far too long to remain on a single flat page. But I still have to write the XML processing infrastructure that will split it in monthly pieces (plus the last twenty or so entries on the main page, and a table of contents of the rest), while keeping all the links good. I've come to the limit of what XSLT can do, and I'm afraid I'll have to drive eXpat from a C program of my own to do the parsing.

(Wednesday)

About this 'blog

I notice from the server logs that most readers of this 'blog are French-speaking (well, presumably—at any rate the connections clearly originate from France). There are many ways to analyse that. Perhaps English-speaking people immediately turn away when they see parts written in French (even if others beyond it may be in English, they won't go that far): in that case I should put a prominent notice explaining that this is a bilingual (but mostly non-translated) diary; whereas most French speakers understand enough English to read it all. But then maybe it isn't worth the effort on my part and maybe I should simply write in French. Or maybe I should have two separate 'blogs, one (in French) telling about my daily life and one (in English) telling about my scientifical / philosophical / political thoughts? Instead of mixing the two as I now do? Difficult question.

Another problem is, what will I do when this page becomes really too long to remain in one piece. I guess I should split it on month boundaries or something; but I would like the content to be static (insofar as possible) and not generated by CGI scripts or PHP or servlets or whatever, and the URIs to be also as static as possible (or, at any rate, backward-compatible). And I need the back links to function correctly. I still haven't found a way to reconcile all of this with my current architecture / infrastructure. But I'll think of something…

(Thursday) · Labor's Day · New Moon

Starting this 'blog

[Traduction française ci-dessous.]

Well, here I am, having, apparently, finally succumbed to the “WebLog” fad.

Actually, this is an attempt to resuscitate my Web site, which has lain dormant for far too long: I no longer had the energy to motivate myself to make changes in it, and the more I waited, the more changes needed to be done, so the more discouraging it became, until I essentially dropped it (or “froze” it) altogether.

Now I will try to revive it piece by piece, migrating it to a different style. This WebLog (or “'blog”, as they say) should be the new nexus of it. The point being that this “Web log” style of writing should be more appropriate to the way I work: I get into sudden passions about this or that, and then I lose interest in it just as suddenly, so making a log entry is more appropriate than starting a whole Web page that will never be finished (of course, nothing I do is ever finished); and if my interest lasts long enough, I can try to copy the entry into a new page and develop it from there. Or something. Well, I'm not sure I'm making myself clear, but that's the idea. Naturally, I will never completely rewrite my old Web site in the new style (I don't even intend to try), so it will look yet more heterogeneous, but who cares? On the other hand, I will make a definite effort to avoid breaking existing links.

So what's different? Well, for one thing I'm now using XSLT to process what I write: this makes it easier to write Web pages which follow well-defined templates (and that is precisely my intention). I have also tried to make a better use of CSS in the hope of producing something a little less ugly than usual—I know not with what success. The font used here, by the way, is Zapf Optima (at least if available on your system), which is in my opinion simply the best type font in existence. I also hope XSLT will help me make this site more easily transportable, in preparation with the time when I'll have to relinquish my beloved http://www.eleves.ens.fr:8080/home/madore/ address (I already had to fight to keep the :8080 when every other page on the server lost it). Of course, XSLT has its price, too, because it's such a strange and perverse language, but I hope the benefits outweigh the cost.

Another thing is that I now entirely cease to care about non-standards-compliant Web browsers. It is simply too much of a pain to write the mass of bugware necessary to get the site working on antique and outdated browsers such as Netscape's Navigator / Communicator version 4.x, or Microsoft's Internet Explorer version 4 or 5, especially as I am moving to an XML-based architecture. I strongly recommend anyone using such browsers to switch to Mozilla, Konqueror, Apple's Safari browser, Netscape version 7.x, IE version 6.x, or a similar modern Web browser. For those who browse in text mode, Links should be a safe choice, although you evidently won't get all the bells and whistles of truly graphical browsers (though even Links now has a graphical interface, it is a mere extension of its text-based interface).

But enough of technicalities! Another major question I had to solve was, which language should I use: either English or French (there is no other language that I know even remotely well enough to write such a log in it). I am daily reminded that my English is nowhere as good as I wish it were: although some people have tried to persuade me of the contrary, I know better (and let me just insert a little wink at Pierre at this point: hi, Pierre!). On the other hand, English has, shall we say, a rather larger audience than French. And when I think about it, there are certain things which I'm more comfortable saying in English, and others in French: so I'll just do the obvious things, write some entries in English and others in French. I'll rarely translate from one to the other, however, because it takes so much work and I'm terribly bad at it either way; this entry is an exception because it's the first one and in a way the introduction.

Anyway, for better or for worse, this 'blog is started (maybe it will simply peter out after three entries, that wouldn't really surprise me, knowing myself for the lazy sloth I am). May first seemed like an appropriate time to do it; in French we have this proverb, en mai, fais ce qu'il te plaît (in May, do as you please), and it did please me. Did you notice that one third of the decade (I mean the 2000's, the years from 2000 through 2009) is by us already? And a third of 2003 also. Somehow, I think this is depressing. I'll say more about this some other day.

[French translation of the above.]

Eh bien voilà, j'ai enfin, semble-t-il, succombé à la mode des « WebLogs ».

En fait, ceci est une tentative pour ressusciter mon site Web, qui est resté au point mort bien trop longtemps : je n'avais plus la motivation nécessaire pour y faire des changements, et plus j'attendais, plus de changements devenaient nécessaires, donc plus cela devenait décourageant, jusqu'à ce que je laisse complètement tomber (ou « geler »).

Maintenant je vais tenter de le faire revivre morceau par morceau, le migrant vers un style différent. Ce WebLog (ou « 'blog », comme ils disent) devrait en être le nouveau cœur. Le principe, c'est que ce style d'écriture « WebLog » devrait être plus approprié à ma façon de travailler : je me passionne soudainement pour ceci ou cela, et j'y perds intérêt tout aussi rapidement, donc il vaut mieux faire une entrée dans un log que de commencer une page Web entière qui ne sera jamais finie (bien sûr, rien de ce que je fais n'est jamais fini) ; et si mon intérêt se maintient assez longtemps, je peux essayer de copier l'entrée dans une nouvelle page et la développer à partir de là. Ou quelque chose comme ça. Enfin, je ne sais pas si je m'exprime clairement, mais c'est l'idée. Naturellement, je ne réécrirai jamais complètement mon vieux site Web dans le nouveau style (je n'ai même pas l'intention d'essayer), donc il aura l'air encore plus hétérogène, mais qu'importe ? En revanche, je ferai un effort certain pour éviter de casser les liens existants.

Alors qu'est-ce qui est différent ? Eh bien pour commencer, j'utilise maintenant XSLT pour traiter ce que j'écris : ceci rend plus commode l'écriture de pages Web qui suivent des modèles bien définis (et c'est précisément mon intention). J'ai aussi tenté de faire un meilleur usage des CSS dans l'espoir de produire quelque chose d'un peu moins hideux que d'habitude — je ne sais pas avec quel succès. La police utilisée ici, à propos, est Zapf Optima (au moins si elle est disponible sur votre système), qui à mon avis est tout simplement la meilleure police de caractère qui existe. J'espère aussi que XSLT m'aidera à rendre ce site plus facilement transportable, en prévision du moment où je devrai abandonner mon adresse http://www.eleves.ens.fr:8080/home/madore/ bien-aimée (j'ai déjà dû lutter pour conserver le :8080 quand toutes les autres pages du serveur l'ont perdu). Bien sûr, XSLT a son prix, aussi, car c'est un langage étrange et pervers, mais j'espère que les bénéfices dépassent les coûts.

Une autre chose est que j'ai maintenant entièrement cessé de me préoccuper des navigateurs non conformes aux standards. C'est tout simplement trop pénible d'écrire la masse de bugware pour faire fonctionner le site sur des navigateurs aussi antiques et obsolètes que la version 4.x de Netscape Navigator / Communicator, ou Internet Explorer de Microsoft version 4 ou 5, surtout que j'emploie maintenant une architecture basée sur XML. Je recommande vivement à quiconque utilise ces navigateurs de passer à Mozilla, Konqueror, le browser Safari d'Apple, Netscape version 7.x, IE version 6.x, ou un semblable navigateur Web moderne. Pour ceux qui surfent en mode texte, Links devrait être un choix raisonnable, même si évidemment vous n'aurez pas tous les bonus d'un navigateur vraiment graphique (même si Links a maintenant une interface graphique, c'est une simple extension de son interface texte).

Mais assez de technicité ! Une autre question essentielle que j'ai dû résoudre est, quel langage devrais-je utiliser : soit l'anglais soit le français (il n'y a pas d'autre langage que je connaisse ne serait-ce qu'à peu près assez bien pour pouvoir écrire un log de ce genre dedans). Je me rappelle quotidiennement que mon anglais est loin d'être aussi bon que je le souhaiterais : même si certains essaient de me persuader du contraire, je ne suis pas dupe (et à ce stade-là je voudrais faire un petit clin d'œil à Pierre : salut, Pierre !). D'un autre côté, l'anglais a, disons, un meilleur taux d'audience que le français. Et quand j'y pense, il y a certaines choses que je dis plus confortablement en anglais, d'autres en français : je ferai donc ce qui s'impose, écrire certaines entrées an anglais et d'autres en français. Je traduirai rarement d'une langue à l'autre, cependant, parce que c'est beaucoup de boulot et j'y suis très mauvais ; cette entrée est une exception parce que c'est la première, et en quelque sorte l'introduction.

En tout cas, pour le meilleur ou pour le pire, ce 'blog est commencé (peut-être va-t-il se terminer en queue de poisson après trois entrées, ça ne me surprendrait pas énormément, me connaissant comme le flemmard que je suis). Le premier mai semblait un moment approprié pour le faire ; il y a ce proverbe en mai, fais ce qu'il te plaît, et ça me plaisait. Avez-vous remarqué que le tiers de la décennie (je veux dire, les années 2000, les années de 2000 à 2009) est déjà passé ? Et le tiers de 2003, aussi. Quelque part, je trouve ça déprimant. J'en dirai plus un autre jour.