David Madore's WebLog: Meta

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

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

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

Entries with category Meta / Entrées de la catégorie Méta:

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

(lundi)

Ce blog a 20 ans

Aujourd'hui est le 20e anniversaire de ce blog, puisque son premier billet a été publié le (j'avais pris exprès une date facile à retenir). Ça veut dire que mon blog a en gros l'âge de certains de mes élèves, et je ne sais pas très bien quoi faire de cette affirmation. Comme par ailleurs c'est aussi, à un jour près, le 30e anniversaire du World Wide Web, ça signifie que mon blog a aussi les deux tiers de l'âge du Web, autre information que je ne sais pas bien comment prendre. Et j'ai aussi passé environ 42% de ma vie à tenir un blog, ce qui me laisse tout aussi perplexe.

[Graphe de la taille de mon blog en fonction du temps]Le cours psychologique du temps est décidément non-linéaire : l'image mentale que j'ai de la décennie 2003–2013, disons (à la fois pour ce qui est des événements de ma vie et de ce que j'ai raconté dans ce blog), est beaucoup plus longue que celle de la décennie 2013–2023. Déjà la seule période 2003–2006, jusqu'à ce que je rencontre le poussinet, période où j'ai écrit je ne sais combien de billets sur mes blues de pédé frustré, me paraît incroyablement plus longue que les trois ans qu'elle a durée en vrai. C'est peut-être parce que mon image mentale du temps sur ce blog est plutôt en nombre d'entrées qu'en nombre de jours.

J'avais écrit un billet décenniversaire en 2013, que je trouve d'ailleurs intéressant de relire, dans lequel j'avais produit des graphes que je refais ci-contre à droite (cliquez pour agrandir) sur 20 ans au lieu de 10. (D'ailleurs, je n'avais stupidement pas pris notes des lignes GnuPlot pour générer un truc à double échelle, comme ça, et j'ai galéré pour les retrouver : à toutes fins utiles, les voici.) La courbe violette (à lire contre l'échelle de gauche) montre le nombre de billets que j'ai écrit en fonction du temps (en abscisse), tandis que la courbe turquoise (contre l'échelle de droite, sans rapport sauf que j'ai synchronisé les deux à l'entrée précédant celle-ci) montre la taille totale cumulée que j'ai écrite (exprimée en unités de 1kic = 1024 caractères[#], mais peu importe). C'est frappant quand on regarde la première courbe que mes billets de blog deviennent de plus en plus rares (j'étais parti sur l'idée d'écrire un billet par jour, au point de produire des excuses quand je n'en écrivais pas, alors que maintenant c'est plutôt un billet par mois), mais, de façon assez étonnante, quand on regarde la seconde courbe on voit que la quantité de texte que j'écris par unité de temps n'a pas tellement changé en vingt ans (2922 caractères par jour en moyenne sur 20 ans), elle a même plutôt accéléré malgré des fluctuations un peu aléatoires (si je compte mes années à partir du premier mai, mon nombre de caractères écrits par jour en moyenne est le suivant : 2003: 4936 ; 2004: 2538 ; 2005: 2718 ; 2006: 1540 ; 2007: 1523 ; 2008: 1416 ; 2009: 2141 ; 2010: 2338 ; 2011: 3938 ; 2012: 2492 ; 2013: 2103 ; 2014: 2864 ; 2015: 4151 ; 2016: 2790 ; 2017: 3345 ; 2018: 5718 ; 2019: 3963 ; 2020: 2619 ; 2021: 2468 ; 2022: 2828).

Bref, j'écris des entrées de plus en plus rares, mais comme elles deviennent aussi plutôt de plus en plus longues, ça compense grosso modo. Ceci traduit aussi le phénomène que je raconte de moins en moins ma vie et de plus en plus mes idées (ou, à défaut d'idées à moi, des idées que j'ai comprises et que je veux réexpliquer).

Ce n'est peut-être pas une bonne façon de blogguer que de pondre des romans entiers une fois tous les jamais, mais je n'ai toujours pas trouvé de façon correcte de « microblogguer » : Twitter (que je mentionnais déjà dans l'entrée écrite il y a dix ans) est tombé dans les mains d'un égocentrique capricieux et erratique[#2], je n'ai pas trouvé de serveur (ni de temps pour monter le mien) permettant de passer à Mastodon, et ce serait compliqué de publier des micro-entrées dans ce blog-ci.

La partie technique comme l'apparence finale de ce blog ont finalement assez peu changé en vingt ans, et ce malgré un déplacement depuis les machines des élèves de l'ENS vers un serveur que je loue moi-même. (Voyez cette capture par The Internet Archive, la première réalisée, en juin 2003.) J'ai commencé en éditant à la main un simple fichier HTML, puis j'ai mis en place un premier système à base de XSLT que j'ai rapidement remplacé par un moteur en C et finalement, en 2010, en Java dont le principal changement depuis 2010 a été la l'interface avec un serveur Tomcat pour donner à chaque entrée une page individuelle au lieu de les collecter mois par mois (mais bon, si j'écris une entrée par mois, ça ne fait guère de différence !) ; j'ai aussi passé l'historique de CVS à Git en 2010 ; mais le format source (un HTML à peine enrichi) que j'édite à la main n'a (malgré un passage au HTML5) quasiment pas changé depuis 2003, et le système de commentaires est un script Perl ignoble conservé dans du formol que je me promets depuis au moins dix ans de fusionner avec le moteur Java.

La manière dont j'écris un billet a tendance à se dérouler selon le scénario suivant : quand j'ai une idée sur laquelle je pourrais écrire, je la note rapidement dans un fichier de brouillon ; plus cette idée me revient à l'esprit et mûrit dans ma tête, plus je suis tenté de m'y mettre jusqu'à ce que, souvent, elle me titille jusque dans mes insomnies. À ce moment-là je me rends compte que la seule façon de me débarrasser de cette idée est de l'expulser par écrit.

J'écris souvent la première moitié du billet en un rien de temps, et ça suffit à peu près à calmer ma volonté de ranter sur ce sujet : l'ennui, c'est qu'il faut conclure. À partir de ce moment-là, je traîne des pieds, j'écris un paragraphe de temps en temps, et de plus en plus lentement, parce que le sujet m'intéresse de moins en moins, mais aussi parce qu'à chaque fois que je veux m'y mettre il faut que je relise ce que j'ai déjà écrit, je ne suis pas content parce que c'est mal organisé, bref, je tourne autour du pot. Parfois l'entrée finit par m'énerver tellement que je ne peux plus la voir et elle va rejoindre le cimetière des billets jamais finis (d'où il est cependant possible qu'elle soit réanimée comme une sorte de zombie, ou qu'elle se réincarne en un autre billet dans laquelle j'injecterai des grands bouts de celui qui semblait ne jamais finir).

Mais parfois je trouve le courage d'aller jusqu'au bout, ou du moins de décider bon, ça suffit, je publie ça comme c'est, et tant pis si je n'en suis pas content (l'entrée précédente est assez typique de ce point de vue-là).

Toujours est-il qu'une fois le billet publié, je n'ai plus trop envie de penser au sujet (c'est une des raisons pour lesquelles je réagis assez peu aux commentaires) : d'une certaine manière, j'écris pour évacuer une idée de mes pensées, pour la conserver d'une manière qu'elle ne me dérange plus. Bien plus tard je la relirai peut-être, en tout cas je serai content de savoir que j'ai réfléchi à X, que si je veux reprendre mes idées sur X ou simplement recomprendre ce que j'avais compris sur X je peux relire ce que j'ai écrit, mais que je peux aussi ne plus y penser sans craindre d'oublier puisque c'est noté par écrit.

Pour prendre une métaphore informatique (que j'ai déjà dû utiliser plusieurs fois), ce blog est un peu l'espace de swap de mon cerveau. J'écris avant tout pour moi-même, pour me débarrasser de pensées en sachant que ça me permettra de les retrouver plus tard.

Je ne manque absolument pas de sujets sur lesquels ranter. Ma liste de sujets « à traiter » (j'en ai publié de petits bouts à divers moments, et d'ailleurs je trouve intéressant de voir que, finalement, j'ai tordu le cou à une proportion non ridicule des sujets que je m'étais dit que je devrais traiter) a, comme ma boîte mail, un débit « entrant » (i.e., de nouveaux sujets sur lesquels je me dis que je devrais écrire quelque chose) clairement supérieur au débit « sortant » (i.e., de sujets que je peux rayer parce que j'ai dumpé mes idées dans mon blog).

(Bon, bien sûr, j'éprouve aussi un certain besoin de radoter en redisant différemment — soit parce que je pense pouvoir le dire mieux, soit simplement parce que j'ai oublié l'existence de la première fois — quelque chose que j'ai déjà dit. Au rayon du radotage, il y a notamment ce que je viens d'expliquer aux quelques paragraphes précédents, qui recoupe pas mal ce billet ou même celui-ci écrit en 2003, à l'époque où je tenais encore ce blog largement en anglais et où on pouvait utiliser le mot mème sur Internet dans son sens original et pas dans le sens d'une image drôle : et en les relisant je me dis que mes motivations n'ont pas tellement changé.)

Mais dire que j'écris uniquement pour moi-même ne serait pas tout à fait exact non plus. Je tiens un journal de ma vie qui, pour sa part, est vraiment privé et écrit spécifiquement pour moi-même, qui me sert à retrouver quel jour j'ai fait quoi ou comment je me suis sorti de telle ou telle difficulté ; les textes que je publie ici, si je les rends publics, c'est quand même que j'ai un peu l'idée d'être lu par d'autres gens que moi-même.

Il y a certainement une volonté de ma part, comme je l'écrivais dans le vieux billet lié ci-dessus, de propager et reproduire mes mèmes(-au-sens-original-du-mot), c'est-à-dire d'amener mes lecteurs à partager pas tellement mes idées que ma façon de me représenter mentalement le monde. Peut-être même que je devrais parler de spores mentales pour les 2747 (and counting) billets de ce blog qui germeront peut-être dans des esprits fertiles et aideront les idées qu'ils portent à se reproduire de nouveau ailleurs.

Le corps de David Madore ne vivra pas éternellement ; et indépendamment du fait que je suis homo, je n'ai même pas spécialement envie de propager mes gènes, qui ne me semblent pas « me » définir de façon très profonde ou très intéressante. L'immortalité n'est pas impossible, comme je l'ai déjà expliqué, mais je ne vis pas dans une société qui pratique la réincarnation concrète et socialement organisée des Qriqrx dont je parle dans ce billet (lisez-le ! c'est sans doute ce que j'ai écrit de plus important). Malgré toutes mes tentatives pour organiser la préservation de l'information[#3][#4], le système stupide du Web où il faut payer en permanence pour qu'une information reste disponible en ligne fait que mon blog n'a sans doute pas non plus une grande pérennité. Toutes ces choses seront perdues comme des larmes dans la pluie. Donc peut-être ce que je peux faire de mieux pour préserver l'information importante qui « me » définit, c'est-à-dire mes idées, mes mèmes-au-sens-original-du-mot, ma façon de voir le monde, c'est de faire lire autant de rants que possible à autant de gens que possible. Dont acte. 😉

Bon, allez, souhaitez-moi de blogguer encore vingt ans de plus !

[#] Surtout, c'est assez compliqué de définir ce qu'on compte exactement comme longueur d'un billet : octets ou caractères Unicode ? En tenant compte des balises HTML et de leurs attributs, ou pas ? Je ne sais plus ce que j'avais fait il y a dix ans (les indications sur le graphe sont légèrement contradictoires). Cette fois, j'ai sommé les champs length(content::text) de ma base de données PostgreSQL, donc c'est, il me semble, le décompte des caractères Unicode du source du billet, balises HTML (en fait, une variante maison du HTML avec quelques namespaces en plus) comprises. Certains billets doivent être plus riches que d'autres en balises par rapport au texte, notamment les billets de maths où je dois taper <var>x</var> à chaque fois que je veux parler de x, ou les billets qui ont des illustrations en SVG non contenues dans un fichier séparé. Mais au final la disproportion n'est sans doute pas gigantesque.

[#2] Maintenant j'y reste surtout pour l'ambiance de fin du monde, un peu comme Néron regardant Rome brûler (oui, bon, ma métaphore est pourrie parce que ce n'est pas vraiment moi Néron dans l'histoire). Je ne sais pas si ce qui finira par me faire partir est que je n'arriverai plus techniquement à maintenir l'archive publique de mes tweets ou parce qu'il n'y aura plus que des trolls et des néonazis ou parce que la compagnie aura fini par faire banqueroute.

[#3] Je m'assure au minimum que la Wayback Machine de l'Internet Archive est passé sur chaque billet de blog peu après que je l'ai publié (je fais d'ailleurs de même de mes tweets), ou si je fais un changement non-négligeable. Mais je devrais peut-être publier aussi l'historique Git sur GitHub (ou au moins en maintenir une copie chez quelques amis ; je suis juste gêné par le fait que le début de l'historique ne sépare pas bien mes brouillons écrits pour moi-même des choses que j'ai effectivement publiées).

[#4] Je note avec une certaine perplexité que, bien que j'en parle un peu tout le temps (au moins par allusions), à part cette vieille entrée pas bien écrite, je n'ai pas vraiment publié de billet spécifiquement sur la préservation de l'information et l'importance que j'y attache. Allez hop, encore un sujet dans le TORANT.

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

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

(Thursday)

My relation to English, bilingualism, and this blog

For a change, this blog entry will be in English, and will be about this very fact; or rather, about the fact that it is unusual, because I very rarely write in English here nowadays. Even though I had started this blog (in 2003) with the intention of making it bilingual (in the sense that some posts would be in English, others in French, and still others translated in both languages), I really can't say I kept this “promise”, and the present entry is a kind of apology, excuse, or at least, explanation, for that fact. Yesterday I rewrote the introductory blurb displayed, before the content itself, at the top of various pages (e.g., the page listing the most recent entries), and the last remnants of this old pretense of bilingualism have been swept away. But why?

Before I get into this, I need to say something about my personal relation to English, how I learned the language, and how well I speak it. I had written something about this in this other entry, also in English and also about English, but I should elaborate a bit. And by elaborate a bit, I mean make an epic rant of it.

Well, it's Complicated®. One tends to classify speakers of a language into “native” and “non-native” categories. The Simple English Wikipedia (there is a kind of irony here) suggests the criteria for being classified as a “native” speaker are some combination (logical conjunction?) of the following:

  1. the speaker learnt the language in childhood,
  2. mastery of idiomatic forms of the language,
  3. comprehension of regional and social variance,
  4. fluent, spontaneous production and comprehension of discourse.

I think I can tick all four boxes, but each time with a slight caveat.

How did I learn English? My father is an English-speaking Canadian (he was born in Saskatoon and grew up mainly in Ontario), who moved to Europe in the early '60's, and learned French there, and also met my mother, who is French and whose native language is French. I have dual Canadian and French citizenship. For some reason (which they themselves are not able to adequately explain, but which is certainly related to the way society has evolved in how it considers bilingualism), my parents only spoke French to me when I was a toddler. However, when I was 8, we moved to Toronto for the 1984–1985 academic year, and I attended third grade in (the English-speaking) Cottingham public school, Summerhill, Toronto. I remember there having been some discussion as to whether I would attend a French-language school, an English-language one, or a bilingual one: I was offered the choice, and I opted for the English one, which was mere minutes' walk away from where we lived, after we had ascertained that the schoolteacher had some knowledge of French and that she was able and willing to help me learn English. (And I owe a lot to Mrs. Marr, who, indeed, made a lot of efforts getting me to speak English very quickly, and also realized that I didn't need any of the math classes she taught and let me use that time to improve my English instead. It also helped that my fellow schoolchildren were very welcoming toward the stranger that I was and readily accepted me as one of their peers. Perhaps the only time I regretted my choice of going to an English-speaking school was the very first day of class, when the teacher had forgotten that she had a French pupil in class, I realized that I understood almost nothing of what was being said or asked of us, did not dare walk up to the desk and ask, and ended up just crying on the spot. But once this slight initial trauma had passed, all went well.)

I did have some slight exposure to English before the age of 8, not only because I must have heard my father speak the language (just not at me), but also because, in preparation to the move to Toronto, my parents enrolled me in a private English class in Orsay. I guess the teacher must have been British, my memories are obviously quite vague on the subject. Anyway, I had very rudimentary knowledge of English before then[#], but I only really learned it in 1984.

[#] There was a point when — I must have been around 6 — someone asked me whether I spoke English, and, ever the logician, I answered my German is better. Which meant that I must have known two words of English and three words of German, so it was technically accurate (the best kind of accurate, they say).

Is 8 young enough to be considered childhood in the sense of the aforementioned first bullet point? Probably, but with a caveat to the effect that English is still only the second language I learned.

When I look back upon that time, it seems that my transition from “not speaking English” to “speaking English fluently” was astonishingly fast[#2]. I don't know exactly when the school year began, but I understood very little English at this point, yet by the time of Halloween, so a mere two months later, it seems I was getting along fine trick-or-treat-ing in the neighborhood.

[#2] I should mention at this point, however, that I am fully unconvinced by the theory that, in identical circumstances, children learn languages much faster and more easily than adults. I may seem to be contradicting my own evidence, but the crucial qualifier is in identical circumstances: not only do children have generally more time to devote to the learning of a new language, but also, when they make what prescriptivists would call mistakes, adults step in and correct them, or their fellow children make fun of them, and they are forced to learn quickly: this is simply not the case when adults learn a foreign language, because it is impolite for other adults to constantly interrupt and correct them (and the other adults generally have other things to do than help them learn the language). See also this video, which makes a number of good points, for various bits of evidence against the idea that kids learn languages faster than adults.

From that point on, and even after we had returned to France, I spoke English with my father, at least when my mother wasn't around. I also read a lot in English, both fiction and non-fiction, and learned a lot of vocabulary by reading.

But there are two issues with learning new vocabulary through books. One is that, since English has essentially no relation between the written and spoken form, I often didn't know how to pronounce the words I learned and generally didn't bother to check in a dictionary (and my guesses were occasionally wildly wrong: for example, for a long time I thought genuine was pronounced /ɡəˈnaɪn/ instead of /ˈdʒɛnjuˌɪn/). Another issue is that I only learned whichever words were likely to come up in the books I read: since there was a lot of heroic fantasy, I learned a lot of quaint or obsolete words, sometimes with a faux medieval flavor (Tolkien's The Lord of the Ring and its second-rate epigones use some deliberately archaic manners of speech, whence I learned nouns like liege, conjunctions like lest, adverbs like hither and so on). But only few of the “normal, everyday” words which most native speakers learn in the course of their daily lives beyond third grade level: to this day I'm still not comfortable with the names of kitchen utensils in English (and as for the names of trees and various categories of animals, in my mind they are lumped in big categories like, well, tree). To give a random example, I learned the very common word bollard only very recently. Similarly, since I didn't attend high school or university in an English-speaking country, I'm unfamiliar with many of the terms specific to this context beyond the basic ones like test, grade and homework (which I guess are common to elementary school anyway).

Films are probably better than books in this regard: for one, they don't just teach you words, they also teach you how to pronounce them (spelling is rarely the issue, and subtitles can be used when it is); and for another, the language used tends to be more idiomatic than that found in print. But before DVD's came long, it wasn't so easy to watch movies in their original language, and even once DVD's existed, original language subtitles were rarely available.

Learning English after French, I've also had a number of difficulties with “false friends”. Not so much in cases where cognate/analogous French and English words have completely different meanings (deception vs. déception, for example, or injury vs. injure), as these are noticeable enough that one inevitably ends up learning them, but rather in the far more numerous cases where the two words do indeed have a similar meaning but with a slightly different nuance or connotation, which can cause subtle and hard-to-detect misunderstandings (to demand vs. demander). Perhaps even more delicate is the wealth of French words which sound like they exist in English, which do exist in English (because English, you know, is a hoarder and has all the words), which do have the same essential meaning as in French, but are exceedingly rare or sound very pedantic: so even if I'm careful and look up the word in a dictionary, the dictionary will tell me that, yes, the word exists, then I go ahead and use it and it sounds weird to English speakers because, who says that? (there are probably much better examples than this, but remuneration has essentially the same meaning as rémunération in French, but the latter is fairly common whereas the former is about ten times rarer if I believe Google Ngrams; the same is true for ludic versus ludique: apparently ludic is so rare in English that someone on Reddit thought it was a typo).

So we move to point number 2, mastery of idiomatic forms. Well, my English is fairly idiosyncratic… but so is my French! There is a lot of English that got its way into my French, and there are imports from mathematical terminology, from computer terms and geeks' jargon, from memes and private jokes, and so on; I also like to deliberately jump from one level of formality to another, sometimes within the same sentence, just to break expectations about formality; generally speaking, my French is a bizarre mix of everything I can get my hands on, and in a state of permanent redesign. And the same holds true for my English. Sometimes I'm being unidiomatic because I'm not sure what the most common way of phrasing something might be: but often I'm deliberately using an unidiomatic turn of phrase because I like it, because it appeals to my sense of logic or creativity, or simply to piss off grammar nazis. Because no matter how well or how little I speak a language, I always like playing with it. For example, if English has the word insofar, you bet I'm going to feel free to use the analogous question inhowfar (= to what extent), not caring if it's an unidiomatic calque of the German inwiefern (in the same way as insofern corresponds to insofar): I love that German word and there's no way I'm not importing it into my English. Similarly, you bet that if hitherto exists in a temporal sense, you can bet I'm also going to use thitherto and whitherto (or from hencefrom: thencefrom and whencefrom). You get the picture. Anyway, reading this entry will give a broad idea of how I express myself in English.

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

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

(samedi)

Où je décide de jouer avec Twitter

Il n'est pas complètement à exclure que la concision acérée dans l'expression de mes idées, jointe à la chasse impitoyable aux circonlocutions inutiles, ne dénombrent pas parmi les qualités pour lesquelles je suis le plus renommé.[#] Sans doute ne fais-je pas partie de ceux qui, à l'instar du président américain, savent rendre toute la sobre richesse de leur pensée dans l'implacable carcan des 280 caractères : nous autres esprits plus médiocres devons répandre notre logorrhée dans les cercles décidément moins reconnus des blogs personnels.

Malgré ça, je me suis déjà souvent dit que je devrais me créer un compte Twitter, ne serait-ce que parce qu'en lecture, c'est une source d'information indubitablement utile, et que tant qu'à faire je pourrais m'en servir à la fois pour annoncer les entrées que je publie dans ce blog, et aussi pour poster des choses trop courtes pour que j'ose en faire une nouvelle entrée (il ne faudrait pas saboter ma réputation de verbomane).

Je n'aime pas trop le fait que Twitter soit une plate-forme propriétaire[#2], mais en fait, j'utilise beaucoup MathOverflow (une instance de StackExchange), qui n'est pas spécialement moins propriétaire que Twitter. Et à la réflexion, je me suis dit que ce que je considérais le plus important, c'était que mes données ne restent pas prisonnières de la plate-forme.

C'est-à-dire que je tiens à pouvoir garder une copie de tout ce que j'y fais de sorte que toute cette information soit encore disponible si la plate-forme disparaît un jour. S'agissant de StackExchange, j'utilise déjà leur API pour garder une copie personnelle de tout ce que je poste sur MathOverflow (ainsi que toutes les questions auxquelles je réponds, toutes les réponses à mes questions, et d'autres choses de ce genre). J'avais commencé avec Reddit (dont j'essaie actuellement de me tenir éloigné parce que c'est décidément trop chronophage). Dès lors, il n'y a pas spécialement de raison de ne pas me créer un compte Twitter selon la même logique, puisqu'il y a une API qui permet a minima de récupérer toutes les informations disponibles par leur interface Web ou application Android. (Ce n'était pas évident quand on lit la page vers laquelle je viens de lier, qui a l'air de concerner uniquement des usages corporate, qu'on puisse ouvrir un compte API gratuitement et s'en servir pour faire de l'archivage, mais apparemment c'est le cas puisque j'ai réussi. En revanche, s'agissant de Facebook, je n'ai pas vraiment l'impression qu'une telle API existe : leurs interfaces semblent vraiment orientées vers les gens qui veulent faire de la pub, développer des jeux Facebook, ce genre de choses, et pas archiver leurs propres données[#3].)[#4][#5]

Bon, ce n'est pas tout qu'une API existe, il faut encore arriver à s'en servir. Heureusement, s'agissant de celle de Twitter, il y a une bibliothèque Perl, le langage que je préfère quand il s'agit d'écrire ce genre de scripts. La difficulté, ensuite, c'est de comprendre comment l'API fonctionne, parce qu'il y a toujours plein de choses qui ne sont pas, ou qui sont très mal, documentées : ce n'est dit nulle part, par exemple, que le texte d'un tweet est renvoyé sous forme HTML-échappée (un ‘&’ est retourné comme &amp;, par exemple, ce qui est bizarre parce que, fondamentalement, un tweet n'est pas du HTML, donc il n'y a aucune raison de l'échapper de la sorte) ; et c'est encore moins dit si la position des hashtags, URL et compagnie renvoyée par l'API est comptée en caractères avant ou après échappement (ou d'ailleurs si ces caractères sont vraiment des caractères Unicode ou des unités de codage UTF-16 comme en Java ; expérimentalement, ce sont bien des caractères Unicode, et ils sont comptés après échappement HTML[#6]). Il faut aussi se dépatouiller de la demi-douzaine de façons différentes dont on peut « retweeter » sur ce machin, qui sont mal expliquées et certaines, je crois le deviner, obsolètes[#7].

Je crois avoir vaincu ces petites difficultés techniques et produit un programme qui archive tout ce que je tweeterai, que je mettrai en ligne sur cette page (qui ne sera pas mise à jour en temps réel, puisqu'elle est surtout destinée à être une archive, mais probablement assez souvent quand même). Je vais certainement découvrir de nouvelles subtilités de l'API, mais j'imagine que je saurai m'en sortir.

Voilà, j'ai réussi à dire en beaucoup plus que 280 caractères, et avec sept notes en bas de page, ce qui tenait finalement en 36 caractères :

Bref, j'ai ouvert un compte Twitter.

Ajout : voir cette entrée ultérieure pour mes impressions trois mois après.

[#] Pourtant, quand j'étais lycéen, je me tirais plutôt bien de l'épreuve de résumé du bac français. (Je mettais d'ailleurs un point d'honneur à rendre toujours le nombre exact de mots demandés, sans jamais exploiter la marge de ±10% permise.) C'est peut-être parce qu'il est plus facile de sabrer dans la pensée d'autrui que dans la sienne propre. ☺️

[#2] Il y a bien des alternatives comme Mastodon, qui ont parfois des idées intéressantes, mais il y a le problème de l'effet de Matthieu — sous la forme que ce qui fait l'intérêt d'un réseau social, c'est le contenu qui est déjà dessus, donc les utilisateurs attirent les autres utilisateurs, d'où le fait que le succès appartienne à celui qui a eu le hasard de réussir (en premier). Je ne sais pas comment on peut lutter contre ça. (Par ailleurs, Mastodon a d'autres problèmes, comme le fait qu'ils n'ont pas pu/su/voulu créer un namespace unique pour les noms d'utilisateurs et qu'on se retrouve donc avec des noms à rallonge aussi ridicules que si tout le monde se nommait par son adresse mail.)

[#3] Alors vous allez me dire, il y a quand même moyen de récupérer toutes les informations qu'on a sur Facebook (le RGPD doit plus ou moins l'imposer). Mais s'il n'y a pas un mécanisme pour le faire de façon incrémentale (je n'ai pas envie, tous les jours, de récupérer tout ce que j'ai fait sur la plate-forme depuis que j'ai commencé à m'en servir !), et éventuellement filtrée, ce n'est pas très utile. Bref, il faut une API.

[#4] À ce sujet, je reconnais parfaitement la validité de la critique suivante : j'ai mis en place un système de commentaires sur ce blog, et je n'ai pas créé d'API pour interagir avec. Je le sais, et ça m'embête. Pour ma défense : (1) il n'y a aucun mécanisme d'authentification, pas de notion de compte ou quoi que ce soit de ce genre, donc je ne peux pas proposer à quelqu'un de récupérer toutes ses données, je n'ai moi-même pas trace de quel commentaire appartient vraiment à qui, (2) comme le HTML que je sers est très propre et que les URL sont assez évidentes, il serait simple à scripter, donc si quelqu'un trouve vraiment mon interface insupportable, il peut faire ça, et (3) j'ai depuis Une Éternité® de réécrire ce système de commentaire, qui est un vieux script Perl bien moisi qui ne permet même pas de faire du HTML basique et ne permet les liens qu'avec une syntaxe chiante que personne n'a envie de respecter, je n'ai jamais trouvé le temps pour changer tout ça, mais si un jour je le fais, une API minimale pour lire les commentaires sera incluse.

[#5] Ce n'est pas qu'une question d'archivage (au sens : garder pour l'Éternité), d'ailleurs : c'est aussi une question de recherche. J'aime bien pouvoir retrouver ce que j'ai déjà écrit sur tel ou tel sujet, et pour ça, la commande egrep est extrêmement précieuse… à condition d'avoir les données sous une forme grepable.

[#6] C'est un chouïa illogique, comme façon de faire, mais je suppose que ça simplifie le boulot des gens qui veulent produire du HTML facilement à partir d'un Tweet, qui sont probablement les plus importants consommateurs de l'API.

[#7] Est-ce qu'on peut faire un native retweet par l'interface Web ? J'ai essayé d'en faire un sans modifier le message, et il a quand même enregistré un tweet commençant en interne par RT.

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

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

(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…

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

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

(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 :

  • Les 5 entrées les plus longues : SELECT edate , id , title , length(content::text) AS len FROM entries ORDER BY len DESC LIMIT 5 ; (réponse : la plus longue, sans surprise, est celle concernant la vérité en mathématiques avec 105687 caractères dans le source, suivie de celle sur les polynômes symétriques avec 91005, celle sur la définition des schémas avec 85217, celle sur les nombres surréels avec 80163, et celle sur la physique fondamentale avec 72161).
  • Les 5 mois où j'ai le plus écrit en nombre de caractères : SELECT substring(edate from 1 for 7) AS month , sum(length(content::text)) AS totallen FROM entries GROUP BY month ORDER BY totallen DESC LIMIT 5 ; (réponse : octobre 2011 avec 240253 caractères, suivi de août 2003 avec 215774 caractères, septembre 2003 avec 212698 caractères, octobre 2003 avec 177191 caractères, et janvier 2004 avec 174844 caractères).
  • Les 5 mois où j'ai le plus écrit en nombre d'entrées : SELECT substring(edate from 1 for 7) AS month , count(length(content::text)) AS totalcnt FROM entries GROUP BY month ORDER BY totalcnt DESC LIMIT 5 ; (réponse : août 2003 avec 79 entrées suivi de, septembre 2003 avec 67 entrées, octobre 2003 avec 62 entrées, janvier 2004 avec 58 entrées et février 2004 avec 53 entrées).
  • Les 5 mois où j'ai écrit les entrées les plus longues en moyenne : SELECT substring(edate from 1 for 7) AS month , sum(length(content::text))/count(length(content::text)) AS meanlen FROM entries GROUP BY month ORDER BY meanlen DESC LIMIT 5 ; (réponse : avril 2014 avec 21426 caractères en moyenne, suivi de décembre 2012 avec 20952 caractères en moyenne, novembre 2011 avec 20301 caractères en moyenne, décembre 2011 avec 18834 caractères en moyenne et décembre 2013 avec 18031 caractères en moyenne).
  • Les 5 entrées les plus fréquemment liées depuis d'autres : WITH wreftable AS ( SELECT edate , id , (unnest(xpath('.//h:a/@d:wref', content, ARRAY[ARRAY['h', 'http://www.w3.org/1999/xhtml'], ARRAY['d', 'http://www.madore.org/~david/NS/daml/']])))::text AS wref FROM entries ) , linktable AS ( SELECT edate , id , substring(wref FROM '#d.([0-9]{4}-[0-9]{2}-[0-9]{2})') AS tgt_edate , substring(wref FROM '#d.[0-9]{4}-[0-9]{2}-[0-9]{2}.([0-9]{4})')::integer AS tgt_id FROM wreftable ) SELECT tgt_edate AS edate , tgt_id AS id , title , count(l.id) AS cnt FROM entries e , linktable l WHERE e.id=l.tgt_id AND e.edate=l.tgt_edate AND l.tgt_id != l.id GROUP BY tgt_edate , tgt_id , title ORDER BY cnt DESC LIMIT 5 ; (réponse : l'entrée la plus souvent citée par moi-même est celle-ci, 44 fois, suivie de celle-ci, 25 fois, celle-ci, 18 fois, la toute première, 16 fois, et celle qui est aussi la plus longue, aussi 16 fois ; en bonne logique xkcd, ces liens sont eux-mêmes comptés).
  • Les 5 liens externes que j'ai faits le plus souvent : WITH hreftable AS ( SELECT edate , id , (unnest(xpath('.//h:a/@href', content, ARRAY[ARRAY['h', 'http://www.w3.org/1999/xhtml'], ARRAY['d', 'http://www.madore.org/~david/NS/daml/']])))::text AS href FROM entries ) SELECT href , count(id) AS cnt FROM hreftable WHERE NOT href ~ '^\.' GROUP BY href ORDER BY cnt DESC LIMIT 5 ; (réponse : c'est Mozilla qui vient en premier, 44 fois, avant Google, 32 fois, Unicode, 29 fois, l'ENS, aussi 29 fois, et Debian, 18 fois ; de nouveau, ces liens sont eux-mêmes comptés).

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.

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

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

(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.) [Mise à jour : j'ai quand même fini par publier une entrée sur ce sujet, même si je ne sais pas bien si c'est celle dont je parlais ci-dessus.] 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 !

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

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

(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.

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

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

(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 😉).

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

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

(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.

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

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

(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.

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

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

(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 !

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

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

(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.

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

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

(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.)

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

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

(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.

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

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

(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.

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

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

(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.)

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

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

(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 :

  • 554260 requêtes au total sur le serveur (soit 19795/j, soit 13.7/min, en moyenne), venues de 34457 IP différentes (dont 380 IPv6). Noter que ces chiffres ne signifient pas grand-chose : les deux IP ayant fait le plus de requêtes (23468 et 9446 respectivement) sont des crawlers (Yahoo, Google, et un peu plus loin il y a Microsoft), et les quelques suivantes sont des clients louches (Ukraine, Chine, Russie… il s'agit probablement de formes diverses de portscans).
  • 10910 requêtes sur la page principale de ce blog (/~david/weblog/) (soit 390/j, soit 0.27/min, en moyenne), venues de 3074 IP différentes (dont 89 IPv6). Parmi ces 3074 adresses, il y en a 144 qui ont fait au moins 14 requêtes à cette page pendant le mois (c'est-à-dire au moins 0.5/j en moyenne).
  • 35162 requêtes sur le flux RSS de ce blog (/~david/weblog/weblog.rss) (soit 1256/j, soit 0.87/min, en moyenne), venues de 978 IP différentes (dont 33 IPv6). Parmi ces 978 adresses, il y en a 219 qui ont fait au moins 14 requêtes à cette page pendant le mois (c'est-à-dire au moins 0.5/j en moyenne).

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.

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

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

(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.

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

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

(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.

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

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

(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.

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

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

(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.

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

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

(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.

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

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

(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.

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

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

(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.

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

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

(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).

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

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

(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[plus]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.

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

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

(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…

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

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

(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.

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


List of all categories / Liste de toutes les catégories: glf, math, phys, ego, html, gay, relig, philo, polit, lex, libri, lang, unicode, cinema, linux, comp-hw, econom, auto-moto, gardinia, meta

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