David Madore's WebLog: 2012-02

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

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

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

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

Entries published in February 2012 / Entrées publiées en février 2012:

(samedi)

Mots croisés pour patienter

J'ai une entrée en travail depuis plusieurs jours sur un sujet qui ne va encore intéresser personne. Alors en attendant que j'aie le temps de la finir, je vous laisse deviner de quoi il s'agit en cachant le mot dans le mot croisé suivant :

123456789
I.         
II.         
III.        
IV.        
V.         
VI.        
VII.        
VIII.         
IX.         

Horizontalement : I. Le sujet de l'entrée que je suis en train d'écrire. — II. Ce que sera sûrement cette entrée. — III. Mine d'argent. Interagit fortement. — IV. Ce que ces mots croisés ne réussiront sûrement pas à faire sur mon lecteur. Pronom. — V. Supplications. — VI. Pays de Cristina. Déchiffrent. — VII. Consens. Élément. — VIII. Pas experte. — IX. Attendisse.

Verticalement : 1. Gonflé. — 2. Crierons comme des lapins. — 3. Cuivres. Amphétamine. — 4. Au sud. Envoie un message. — 5. Rendre moins analogique. — 6. Voisins. 𓂋𓂝𓇳𓏤𓁛. — 7. Ceux de la République, par exemple. Ceux du Front national, par exemple. — 8. Nouvelles lunes juives. — 9. Marquée à gauche.

(mercredi)

Chrome m'inquiète

Chrome, je veux parler du navigateur Web. Et il m'inquiète non pas parce qu'il a une apparence beaucoup moins sympathique que ma peluche Mozilla. Pas non plus parce que l'omniprésence Google est un peu lassante. Mais simplement parce que je pense qu'il est mauvais pour l'écosystème Web qu'un seul navigateur se mette à dominer complètement le marché. Et malheureusement, c'est visiblement ce que le Web a beaucoup de mal à faire : admettre qu'il existe plusieurs navigateurs différents sans que l'un domine complètement les autres. Ça a longtemps été IE, avec des résultats catastrophiques ; puis ça a failli être Firefox ; et maintenant, c'est Chrome qui est parti pour rafler tout le marché : youhou, ce n'est pas possible d'avoir un peu de variété ?

(Oui, je sais, c'est bizarre : la part de marché de Firefox est encore tout à fait comparable à celle de Chrome, et celle d'IE est encore supérieure, mais la dynamique de ces parts de marché, ainsi que la domination de Webkit sur le web mobile, fait que Chrome, ou du moins Webkit, a déjà acquis une hégémonie écrasante et que ça ne va pas s'arranger.)

Évidemment, je suis concerné : parce que Chrome ne convient pas du tout à mes attentes. Il y a deux principales raisons pour lesquelles je ne l'aime pas : d'abord parce qu'il lui manque des standards du Web que je trouve très importants et que j'ai envie d'utiliser, notamment MathML et des gros bouts de SVG (le clipping et masking ont l'air d'être complètement cassés) ; mais surtout, parce qu'il n'est quasiment pas configurable, même un truc aussi simple que d'afficher le http:// au début des URL (ils ont décidé de l'omettre, ce qui se défend si c'est une option ou même le comportement par défaut, mais ce qui est assez fasciste si c'est imposé aux utilisateurs) n'est pas réglable sans recompiler le machin. Au contraire, Firefox, et c'est sa qualité principale à mes yeux, a un milliard d'options de configuration (tapez about:config dans la barre d'adresse si vous ne connaissez pas) qui permettent de régler très finement les préférences de chaque utilisateur : je prends ça comme l'exemple canonique pour prouver qu'un programme peut très bien être utilisable par n'importe quel neuneu et pourtant très finement réglable par les power-users (parce que beaucoup de gens prétendent que c'est impossible).

Mais bon, peu importent les raisons pour lesquelles moi personnellement je n'aime pas Chrome. Je conçois très bien qu'on le préfère parce qu'il est plus rapide que Firefox. Je n'ai aucune envie de faire de l'évangélisme de Firefox (sauf peut-être en montrant la peluche). Je n'ai rien contre le fait que Chrome invente plein de technologies dont l'intérêt me semble souvent assez douteux (SPDY, Dart, nativeclient, Pepper…) : en fait, quand je dis Chrome, généralement je veux dire Webkit, qui est le moteur partagé par Chrome et Safari (et plusieurs autres moins connus).

Ce qui me gêne, c'est la façon dont les gens développent ou testent des sites Web : si on passe d'un monde où on fait tout pour IE (et où les fonctionnalités des autres navigateurs ne servent pas à grand-chose, parce que personne n'ose s'en servir) à un monde où on prétend faire du HTML5 mais en fait le HTML5 en question ne marche correctement que sur Webkit, on n'a pas vraiment progressé. Voici le genre d'annonce qui me fait peur (le plugin Flash sous Linux ne sera à l'avenir disponible que pour Chrome, ben voyons), et voici un appel de Daniel Glazman (un des chefs du groupe CSS du W3C) dans le sens n'oubliez pas qu'il existe autre chose que Webkit.

D'un autre côté, je considère les différents groupes de standardisation comme partiellement responsables du problème. Le HTML5 est en travail depuis je ne sais pas combien d'années, et ils en sont encore à changer d'avis tous les trois jours sur des choses vraiment basiques dans leur standard (je vous ai parlé de <time> ? ah oui, je radote). Ça ne donne pas trop envie de s'appuyer sur le standard, ce genre de choses.

Et un autre truc que je ne comprends pas, c'est la manie qui a pris tout le monde de mettre des préfixes devant toutes les fonctionnalités un peu récentes : maintenant, pour utiliser une propriété CSS foobar un peu récente, il faut écrire non seulement foobar: blah, mais aussi -moz-foobar: blah pour que ça marche sous Mozilla/Firefox, -webkit-foobar: blah pour que ça marche sous Webkit/Chrome/Safari, -ms-foobar: blah pour que ça marche (peut-être) sous IE, et je ne sais pas quoi pour Opera. Et tout ça ne sert rigoureusement à rien à part faire des lignes de code en plus : le problème est (je crois !) que des gens ont peur qu'il y ait un changement epsilonesque entre la spécification et l'implémentation temporaire, mais si de toute façon toutes les pages Web utilisant cette fonctionnalité vont écrire toutes les variantes -préfixe-foobar: blah plus la variante sans préfixe (et on est bien obligé de faire ça pour que ça marche partout), ben je ne vois absolument pas quel problème on aura réglé. Or c'est le genre de manie qui fait que les gens vont juste écrire -webkit-foobar: blah et tant pis pour les autres navigateurs. Ben la faute en est à l'idée stupide de mettre des préfixes partout, alors faut pas s'étonner après.

(mercredi)

Le mythe du sommeil de huit heures

Je suis en ce moment bloqué, comme ça m'arrive de régulièrement, dans un cycle de sommeil où je me couche tôt (vers minuit), je me lève tard (je peux facilement atteindre midi), et je fais une énorme insomnie à partir de 4h du matin. Pas évident d'en sortir, surtout que c'est un rythme bien régulier : et je tombe justement à l'instant sur cet article qui défend l'idée que faire deux phases de sommeil de quatre heures serait assez naturel, et historiquement courant (encore que je me demande un peu qui, « historiquement », pouvait se permettre de lever onze ou douze heures après s'être couché — surtout en été — même à avoir quelques heures d'éveil au milieu).

Sans vraiment de rapport, ça me fait penser à ce célèbre et hilarant texte de Benjamin Franklin dans lequel il découvre par accident que le soleil donne de la lumière dès qu'il est levé (et ce, à une heure indue du matin).

(vendredi)

Je suis sûr que c'est un message

Ma peluche Mozilla est très nettement instable.

(Tiens, pour une fois que j'écris une entrée qui pourrait passer pour du microblogging…)

[Éclaircissement : Quand je dis qu'elle est instable, je veux dire qu'elle ne tient pas facilement droit.]

(vendredi)

Des téras de dollars en faux bons du trésor

Cette nouvelle est-elle un avatar (ou une explication) de celle-ci qui m'avait beaucoup marqué à l'époque ? Je continue à ne pas comprendre dans quel intérêt on peut fabriquer des faux bons du trésor de un milliard de dollars (comment, et auprès de qui, est-ce qu'on écoule un tel truc ? je pense que si je vais chez mon boulanger pour acheter du pain avec un faux billet de un milliard, il ne pourra pas me rendre la monnaie).

(jeudi)

The Life and Times of Altcee

Comme promis dans l'entrée précédente où je raconte la manière dont ce texte a été récupéré, voici

The Life and Times of Altcee
(being the true and marvelous story of the life of a young guileless boy growing up in a small destitute village under the stern sway of a wicked father, told in the most plain and simple prose without the use of cliché or exaggeration)

écrit vers 1988–1990 par un auteur anonyme dont on ne sait pas bien comment son œuvre s'est retrouvée sur les disquettes de mon père. Il n'y a là que sept très courts chapitres (un peu à la manière de mes fragments littéraires gratuits) et le titre prometteur d'un huitième mais je ne crois pas que le texte ait jamais été plus long.

Le sarcasme paternel mériterait sans doute quelques explications, parce que c'est plein de références à des événements me concernant, explications que je ne suis malheureusement plus trop capable de fournir, ayant oublié les événements en question ; je ne peux, par exemple, que conjecturer que j'avais dû poser un jour six francs sur le coffre dans l'entrée chez mes parents, que mon père aurait empochés sans y réfléchir, et que j'ai été très en colère de cette disparition ; je ne me rappelle plus bien non plus si je faisais des histoires quand on me demandait d'aller acheter le pain, j'imagine que je n'aimais pas trop ça, mais je ne sais pas si c'était une occurrence unique (mon père étant parfaitement capable de se moquer de moi pendant quinze ans après) ou quelque chose de plus fréquent. Je sais aussi que je refusais catégoriquement de participer au ramassage des feuilles mortes dans le jardin, et qu'en représaille mon père avait décidé de ne plus me faire de cadeaux de Noël. Concernant le chapitre 4 (à mon avis le plus drôle), il est vrai que j'étais — et que je suis encore — fort grincheux concernant le bruit que les voisins pouvaient faire à la moindre fête, et mon père trouvait que si j'avais déjà une mentalité de vieux pépé grincheux à treize ans ça n'allait pas s'améliorer.

Le nom du héros, Altcee, vient de ce que mon père m'appelait tellement souvent crétin qu'il disait qu'il lui fallait définir un racourci clavier pour ce mot, par exemple Alt-C (pour the C-word), donc, Altcé ou Altcee.

(mercredi)

Comment sauver le contenu de vieilles disquettes

Mon poussinet voulait lire des textes dont je lui avais parlé, que mon papa avait écrit quand j'avais dans les 12–14 ans (soit vers 1988–1990), les Life and Times of Altcee (mon père les écrivait pour se moquer de moi, j'en reparlerai dans une prochaine entrée [ajout : voir la suivante]). Problème : la seule copie de ces textes était, apparemment, sur une disquette 5¼″ de 360ko ; je pense que le fait qu'il n'y en ait pas eu d'autres copies est lié à un crash de disque dur que nous avons eu vers 1995, à une époque où les backups étaient rares et chers : déjà, c'est un peu un miracle que cette disquette ait survécu et qu'on ait pu la retrouver (sans parler du miracle que les données dessus n'aient pas été effacées par le passage de 22 années, mais je m'avance). La disquette étant rangée avec les archives de mon père, elle avait échappé à la grande séance de conversion de toutes mes disquettes en un seul CD (lui-même réarchivé depuis sur plusieurs disques durs) à laquelle je m'étais livré en 1999 quand je pressentais la disparition prochaine du format.

Mais alors essayez de trouver, de nos jours, un lecteur de disquettes 5¼″ : ce n'est pas une mince affaire. Déjà, un lecteur de 3½″ n'est pas évident, enfin, c'est encore vaguement faisable (quoique ce sera forcément un truc mal fabriqué qui va plutôt s'occuper de bouziller les supports que les lire), mais un 5¼″, c'est un peu comme chercher un grand-bi chez un marchand de vélos.

Mon poussinet en a emprunté un auprès d'un responsable informatique de la fac de Bordeaux (où il fait sa thèse). Un autre miracle en notre faveur est que les cartes mères même raisonnablement modernes continuent à fournir la connectique pour brancher un lecteur de disquettes, et heureusement cette connectique est formellement identique entre les lecteurs 5¼″ et les 3½″. Formellement, parce qu'en fait, même si la nappe est la même, la fiche n'est pas la même, et les nappes que j'avais n'avaient pas le connecteur pour les 5¼″. Bon, nous avons quand même trouvé, parmi nos amis, quelqu'un qui avait encore une nappe appropriée et un autre lecteur avec lequel tester en cas de problèmes avec le premier. Je passe sur une nouvelle difficultée due au fait que le câble ne se branchait pas bien dans la carte mère à cause d'un détrompeur trop proéminent.

Le BIOS des ordinateurs modernes, si tant est qu'il gère encore les lecteurs de disquettes, ne prévoit apparemment plus qu'on puisse y mettre un 5¼″. En tout cas, celui de mon poussinet n'offrait que deux options pour configurer le lecteur : 3½″ de 720ko ou bien 3½″ de 1440ko ; nous avons parié sur le fait que Linux arriverait quand même à faire quelque chose du lecteur, mais c'était loin d'être évident. Sur tous nos essais, il n'arrivait à lire que les premiers 4ko de données, c'est-à-dire un peu moins qu'une piste. Pour préciser les choses, les données sur une disquette sont organisées en cylindres concentriques, au nombre de 40 sur celles qui m'intéressent, chaque cylindre étant formé d'une piste sur chaque face de la disquette lorsque celle-ci est double-face, donc 80 pistes dans mon cas, et chaque piste étant divisée en un certain nombre de secteurs, ici 9, de 512 octets chacun : les 360ko de ma disquette sont donc 40×2×9×512 octets. Connaître cette géométrie était certainement un prérequis pour arriver à lire quoi que ce soit, mais quelle que fût la façon dont nous prétendions l'expliquer à Linux, il se limitait à lire les 8 premiers secteurs (sur 9, donc) de la première piste, et échouait avec des erreurs d'entrée/sortie sur tout le reste. Nous avons gardé espoir parce que ça semblait peu vraisemblable que toutes les disquettes de la boîte fussent abîmées exactement de la même façon, ou que les deux lecteurs eussent le meme défaut : et si le problème était logiciel, on devait pouvoir le contourner.

Finalement nous sommes tombés sur le programme fdrawcmd, qui permet d'envoyer des commandes bas niveau au lecteur de disquette : cet utilitaire prend beaucoup de paramètres incompréhensibles, et nous n'avons réussi à nous en servir qu'une fois tombés sur cette page qui nous a donné une clé qui nous manquait, à savoir que pour lire une disquette de 40 cylindres sur un lecteur en supportant 80, il faut demander de positionner la tête au cylindre numéro 2×i avant de lancer la lecture du cylindre numéro i. Si d'aventure ça pouvait servir, voici le script qui a fini par marcher :

#! /bin/sh
fdrawcmd drive=/dev/fd0 rate=1 readid 0 need_seek track=0
for i in `seq 0 39`; do
    fdrawcmd drive=/dev/fd0 seek 0 $((i*2))
    fdrawcmd drive=/dev/fd0 rate=1 read 0 $i 0 1 2 9 0x1b 0xff length=9216
done

Ceci étant fait, nous avons eu la bonne surprise de voir que toutes les disquettes étaient lisibles sans une erreur, malgré leur âge. Ensuite, je savais bien que Linux pouvait lire le système de fichiers du DOS, mais là où j'ai eu une nouvelle heureuse surprise c'est que LibreOffice savait lire le format WordPerfect5 de 1990 dans lequel le texte était écrit, y compris pour les notes en bas de page et quelques autres fioritures.

Toujours est-il que le fichier altcee.wp5 est maintenant parmi mes fichiers celui à la date de modification la plus ancienne ( : en termes informatiques, ce n'est pas tout à fait de la paléontologie, mais c'est au moins de l'archéologie).

(mardi)

Martine fait encore des bêtises avec UTF-8

Extrait de la facture papier accompagnant un colis reçu aujourd'hui :

Votre commande sur slectstore a bien été enregistrée

Ouf, ma commande a bien été enregistrée, j'avais peur qu'elle fût perdue.

Sérieusement, ils ne jettent pas un coup d'œil aux papiers qu'ils impriment, ces gens-là ?

(mardi)

Les entiers naturels ne sont pas une ressource rare

Je m'étonne de n'avoir apparemment jamais écrit sur ce blog cet aphorisme que je répète pourtant souvent :

Les entiers naturels ne sont pas une ressource rare

Ceci s'adresse, par exemple, aux développeurs de logiciels qui ont l'air de considérer qu'il faut faire une grande économie de numéros de versions, comme si ces numéros allaient s'épuiser. Heureusement, Google Chrome, et plus récemment Mozilla Firefox, ont compris qu'ils pouvaient numéroter leurs navigateurs avec des entiers, ceux-ci ne risquant pas de venir à manquer même après 15 ou 20 (il y a des rumeurs selon lesquelles il existe des nombres plus grands). Il y a quantité de marques fabriquant des produits de toutes sortes et qui semblent prendre un malin plaisir à donner à leurs produits une nomenclature des plus étranges alors qu'ils pourraient être bêtement étiquetés par des entiers, éventuellement à l'intérieur de séries.

À l'ENST Télécom, nos cours portent des codes du genre INFMDI356 (la série INFMDI signifiant qu'il s'agit d'un cours quelque part entre l'informatique et les maths de l'ingénieur — whatever that may be — et le nombre en 300 signifiant grosso modo qu'il s'agit d'un cours de troisième année ; en l'occurrence c'est le cours de crypto). En soi ce n'est pas une mauvaise idée, ça évite des confusions, mais ce qui est idiot c'est que le numéro ne suffise pas à lui tout seul à identifier le cours, i.e., il peut y avoir plusieurs cours ayant le même numéro dans deux séries différentes : visiblement, quelqu'un n'a pas compris que les entiers naturels n'étaient pas une ressource précieuse.

Bref, si je n'ai pas utilisé l'entrée numéro 2000 de ce blog de façon optimale, ne vous inquiétez pas, je connais d'autres entiers naturels plus grands (et même si je tombais à court d'entiers naturels, je connais des trucs pour aller plus loin).

(mardi)

Chocolat au goût de fromage

Un de mes collègues a rapporté (je ne sais pas bien pourquoi) du chocolat Hershey's des États-Unis, précisant qu'il se demandait s'il n'avait pas pourri ou moisi tellement il a un goût bizarre. J'ai goûté : au début ce n'est pas trop mauvais, mais après un moment ça laisse un arrière-goût très net, qui pour moi évoque le fromage (ou peut-être les pieds pas bien lavés ; cf. ce que je disais autrefois sur le goût du durian). D'autres ont goûté aussi et ont confirmé l'arrière-goût bizarre (avec un doute sur la description). Renseignement pris, il semble que ce soit bien connu et lié au fait qu'ils utilisent du lait fermenté pour le fabriquer. Il faut croire qu'il y a des gens qui aiment ça. Je connaissais le Hershey's de nom, je savais que ce n'était pas un chocolat de grande qualité, mais je ne savais pas que c'était vraiment mauvais. Et le pire c'est que le goût persiste quand on boit un café après.

Sinon, aucun rapport à part l'altération du goût, on me signale cette histoire un peu ancienne (suite ici) de pignons de pin d'origine chinoise qui donnent un goût amer sans qu'on sache bien pourquoi. Ce qui me fait penser que je n'ai plus de fruit miracle pour manger avec mes pamplemousses, je devrais en racheter (le fruit miracle, ça transforme un pamplemousse même médiocre en un régal à se damner).

(mardi)

Carrefour se fout un peu de ma gueule

Quand Carrefour me donne un bon de réduction

je commence à trouver qu'ils ont un peu exagéré le nombre de restrictions imposées. Si mon poussinet n'insistait pas un peu pour que je les utilise quand même, ce genre de bons partirait directement à la poubelle en ce qui me concerne.

Mais en fait le plus agaçant, c'est justement le fait que ça prenne la forme de bons de réduction : au lieu d'avoir une réduction automatique sur présentation de la carte de fidélité (quitte à émettre des tickets publicitaires pour informer de l'arrivée de telles réductions et de leur utilisation), ils demandent qu'on apporte et la carte et le coupon. Et il faut compter soi-même si on a la bonne quantité d'articles de la bonne catégorie pour bénéficier du bon : l'autre jour j'ai présenté un bon qui était valable à partir de 6€ de yaourts alors que je n'avais environ que 4€ de yaourts, le caissier a été extrêmement désagréable dans sa façon de le rejeter — donc pas question de fournir une pile de bons et de dire voyez s'il y a là-dedans quelque chose qui s'applique à mes achats.

(mardi)

De la difficulté de visualiser trois dimensions ou plus

Je suis notoirement incapable de visualiser la géométrie déjà en trois dimensions. Pourtant, quand j'étais petit, mon papa avait fabriqué pour moi, et suspendu au-dessus de mon lit, un mobile qui faisait tournoyer les cinq solides platoniciens : ça m'a peut-être donné le goût de la géométrie, mais ça ne m'a pas aidé à voir dans l'espace.

Un exemple de quelque chose de très simple que je n'ai jamais réussi à correctement me représenter mentalement, c'est le réseau que les chimistes appellent cubique faces centrées (tiens, pour une fois, Wikipédia en français n'est pas mauvais) et les mathématiciens le réseau A3 : il s'agit simplement d'un arrangement régulier de cubes où on place des points au sommets des cubes et aux milieux de leurs faces — dit comme ça ce n'est pas difficile à visualiser, mais on est censé pouvoir se rendre compte que le réseau en question est engendré par les vecteurs arêtes d'un tétraèdre régulier (voyez notamment cette image), et par ailleurs qu'en le tournant juste de la bonne façon on arrive à une superposition de plans sur chacun desquels les points sont en arrangement hexagonal (ce que les matheux appellent A2). Malgré la quantité tout à fait impressionnante de pages web qui illustrent ces choses de quantités de façons différentes (par exemple ici), et bien que mathématiquement je comprenne parfaitement ce qui se passe, je n'arrive décidément pas à le « voir » : soit je vois les cubes, soit je vois les tétraèdres et les hexagones, mais jamais les deux à la fois. (C'est un peu comme la fameuse illusion qu'on peut voir tourner dans un sens ou dans l'autre mais qu'il est très difficile de faire passer de l'un à l'autre.) Remarquez, si j'en crois le nombre de pages consacrées au réseau cubique faces centrées, justement, je ne dois pas être le seul à avoir du mal.

Dans ces conditions, il n'est pas surprenant que je n'arrive pas à visualiser quatre dimensions ou plus. Et si déjà le réseau A3 est surprenant par sa capacité à avoir une symétrie cubique, tétraédrale et hexagonale à la fois, il n'est pas étonnant que E8 recèle aussi des surprises.

Parfois les gens vous disent qu'ils arrivent à voir en quatre dimensions parce qu'ils ont regardé un tesseract tourner pendant assez longtemps. Demandez-leur alors : existe-t-il un hyperplan qui coupe le tesseract selon un tétraèdre régulier ? (la réponse est évidemment oui, et même un tétraèdre arbitrairement petit, de la même façon qu'on peut couper un cube par un plan proche d'un sommet pour obtenir un triangle équilatéral) ; puis : et pour un octaèdre régulier ? (la réponse est encore oui, en prenant un hyperplan défini par six sommets du tesseract). Je pense que ces questions en embarrasseront plus d'un.

Pour prendre un exemple très simple de quelque chose sur quoi notre intuition de trois dimensions conduit à penser des choses fausses, considérons une simple rotation uniforme. Par rotation uniforme j'entends ici ce que les mathématiciens appellent un sous-groupe à un paramètre du groupe des rotations : un mécanicien aura plutôt tendance à dire qu'on a affaire à une rotation (à vitesse) constante ; si l'on veut, on fait une rotation infinitésimale entre les temps 0 et δt puis on répète indéfiniment cette même rotation. Je ne sais pas bien quelle terminologie adopter pour souligner que c'est le concept le plus simple qu'on puisse concevoir, on fait juste tourner un solide toujours de la même façon et à vitesse toujours égale. Sauf qu'en fait ce n'est pas si simple que ça, parce que notre intuition de la dimension trois nous induit facilement en erreur : en dimension trois, une telle rotation uniforme se fait autour d'un axe de rotation, qui est une droite de points laissés fixes lors du mouvement ; mais en dimension quatre, il n'y a généralement pas d'axe de rotation : si on applique une rotation uniforme à une boule, il n'y a en général qu'un seul point fixe (le centre de la boule), et c'est le cas en toute dimension paire. Mais il y a pire : en dimension trois, si on continue la rotation pendant suffisamment longtemps, le solide finit par revenir à son orientation de départ, i.e., le mouvement est périodique. À partir de la dimension quatre, ce n'est plus le cas : une rotation uniforme très générale n'a pas de période[#]. Autre idée fausse : le fait que le mouvement d'un point donné, sous une rotation uniforme, soit un cercle — ceci est vrai de façon évidente en dimension deux, et aussi en dimension trois où c'est un cercle centré sur, et perpendiculaire à, l'axe de rotation. En dimension quatre ou plus, la trajectoire d'un point sous l'effet d'une rotation uniforme est une sorte de courbe de Lissajous, qui en dimension paire va avoir tendance à être dense dans [correction] un tore de la sphère (c'est-à-dire à passer arbitrairement près d'un point quelconque de celui-ci).

On pourrait illustrer les choses comme ceci : en dimension quatre, les habitants d'une planète sphérique en rotation dans l'espace pourraient généralement connaître l'heure et la date par la simple observation de la position d'une seule étoile. Ou pourraient réaliser des pendules qui sont une simple boule qui tourne uniformément, avec un point marqué. (Bon, tout ceci ne serait pas très pratique, certes, parce que ce serait pénible de faire une lecture précise, mais au moins dans l'idée de nos horloges analogiques avec deux aiguilles qui tournent on pourrait faire des horloges sphériques qui tournent rapidement dans une direction pour indiquer la minute et plus lentement dans une autre pour indiquer l'heure.)

La notion implicite sous-jacente, c'est plus ou moins celle du rang d'un groupe de Lie : le groupe SO3 des rotations en trois dimensions est de rang 1, c'est à peu près ça qui fait qu'on a une seule vitesse de rotation, que les trajectoires des points sont des cercles, etc. Mais en général, SOn est de rang ⌊n/2⌋, c'est par exemple le nombre de vitesses de rotation différentes qu'il faudra donner (sans même chercher à savoir dans quelles directions elles se font), le nombre de paramètres des courbes de Lissajous décrites par les points, etc.

Bref, ce sont différentes réflexions qui me sont venues en réalisant une nouvelle vidéo de rotation du système de racines de E8, rotation cette fois uniforme tout du long. (Pour l'instant la vidéo est sur YouTube, mais la qualité en est tellement abominablement atroce que ça n'a vraiment pas grand intérêt de la regarder ; je publierai une version JavaScript dès que j'aurai fini d'écrire une petite introduction mathématique pour aller avec.) Comme en huit dimensions il y a beaucoup de directions dans lesquelles on puisse tourner (SO8 est de dimension 28 et de rang 4), j'ai fait un choix qui m'a semblé amusant — et je reviendrai dessus pour l'expliquer plus précisément — consistant à prendre une rotation qui appartienne au groupe de Lie exceptionnel G2 (de dimension 14 et de rang 2) formé des rotations qui laissent invariante une structure octonionique sur l'espace de dimension 8, structure octonionique avec laquelle le réseau de E8 a d'intéressants rapports. Du coup, la vidéo fournit une illustration de deux groupes de Lie exceptionnels à la fois, G2 par son action et E8 par son système de racines.

[#] Ce qui ne signifie pas pour autant qu'il soit compliqué : si je prends bêtement deux points tournants à vitesse uniforme sur deux cercles dans le plan, et que leurs vitesses de rotation sont irrationnelles entre elles — ce qui est la situation la plus générale — alors ce mouvement n'est pas périodique non plus, et c'est quand même quelque chose de très simple ; en vérité, la rotation uniforme d'une sphère en dimension quatre n'est pas très éloignée de cette idée (justement parce que le rang du groupe des rotations vaut 2).

(mardi)

2000 !

Pouêt ! Pouêt pouêt ! Pouêt pouêt pouêt pouêt !

Voilà, c'était juste par esprit de contradiction parce que des gens me demandaient de faire quelque chose de spécial pour la 2000e entrée de ce blog.

(dimanche)

Perdu dans un labyrinthe de petites API toutes semblables

J'ai écrit une page web qui fait des calculs en JavaScript (il s'agit toujours d'animations de E8 mais peu importe), calculs que je voudrais faire exécuter hors du cadre d'un navigateur (en l'occurrence pour faire une nouvelle vidéo à mettre sur YouTube), si possible sans réécrire complètement le code en autre chose que JavaScript[#]. Bref, exporter les résultats de ces calculs, les sauvegarder dans un fichier (sous un format à peu près quelconque, typiquement un dump texte des résultats, que je saurai ensuite convertir assez facilement).

Je cherche donc la chose suivante : un environnement JavaScript « standalone », c'est-à-dire hors d'un navigateur (mais à la limite ce n'est pas bien grave si je dois lancer un navigateur) avec une simple fonction pour écrire un fichier (dans lequel je pourrai sauvegarder le résultat de mes calculs ; enfin, il me faudra ouvrir plusieurs fichiers différents parce que les résultats sont un peu longs, je voudrais faire un fichier par image d'une animation).

Pour résumer, je veux juste écrire du texte dans un fichier depuis JavaScript. Ça n'a pas l'air de demander beaucoup, n'est-ce pas ? C'est pourtant la porte d'entrée d'un labyrinthe cauchemardesque de presque-solutions toutes aussi décevantes les unes que les autres. Faisons un peu le tour.

Bon, après des heures et des heures à naviguer à tâtons dans ce labyrinthe, je crois avoir trouvé que ceci fonctionne avec Seed, pour écrire foobar dans le fichier monfichier, mais je ne comprends vraiment pas d'où vient cette API ni comment j'étais censé la deviner : var Gio = imports.gi.Gio; var file = Gio.file_new_for_path("monfichier"); var fstream = file.replace(); var dstream = new Gio.DataOutputStream.c_new(fstream); dstream.put_string("foobar"); fstream.close(); ; l'ennui c'est que je ne comprends rien à ce que je fais, je ne sais pas pourquoi ça ne marche que sous Seed et pas sous gjs alors qu'ils sont censés utiliser la même API, je ne sais pas ce que c'est que Gio et pourquoi il faut chercher imports.gi.Gio alors que cette page précédemment citée évoque imports.gi.GLib, bref, je ne comprends rien à ce que je fais. Qu'est-ce que c'est que cette fonction Gio.file_new_for_path et quel est son rapport avec ce qui est ici, ou ce qui est là ? Je suis vraiment perdu dans un labyrinthe.

[Ajout : Sous gjs, apparemment, il faut faire : var Gio = imports.gi.Gio; var file = Gio.file_new_for_path("monfichier"); var fstream = file.replace(null, false, 0, null); var dstream = new Gio.DataOutputStream.new(fstream); dstream.put_string("foobar", null); fstream.close(null); ; par ailleurs, la raison de ma confusion sur les API est qu'il existe à la fois une API IOChannel dans la GLib et aussi une API GIO, qui n'a rien à voir sauf qu'elle fait à peu près les mêmes choses de façon gratuitement et stupidement différentes, juste pour emmerder le programmeur. Et apparemment on ne peut pas utiliser les fonctions de manipulation de fichiers de la GLib depuis gjs/Seed, ou en tout cas je n'ai pas réussi, par exemple GLib.open() n'existe pas alors que logiquement il devrait. Tout ceci est incompréhensible.]

C'est un peu le problème des projets en logiciel libre où tout ce qui se fait un jour est rendu obsolète le jour suivant parce qu'ils ont décidé que ce n'était plus la bonne façon de faire, donc toutes les docs qu'on trouve sont obsolètes et on ne sait jamais ce qui a remplacé quoi. Quel chaos !

[#] Pas que JavaScript soit le langage le plus adapté du monde pour ce que j'ai à faire — loin de là — mais maintenant que le code est écrit, je n'ai pas envie de le réécrire complètement en Perl/Python/quidlibet.

(samedi)

Nouvelles en vrac

  • [Billets de 5€]Comme j'aime beaucoup les billets de 5€, surtout neufs, mon poussinet m'en a commandé une liasse (100 billets). Donc si vous voyez passer un billet entre U27828267251 et U27828268295 inclus (il en manque cinq dans la série, sans doute des ratées de l'imprimerie), je les aurai eus en main ; mon poussinet les a déjà enregistrés sur EuroBillTracker.
  • [Rassemblement à la Bastille]Nous avons manifesté, avec plein de gens portant un masque inspiré d'une bande dessinée connue (ou sans doute plutôt du film qui en a été tiré) et censé représenter un conspirateur anglais contre le traité de Tokyo du 1er octobre 2011 dit ACTA. Enfin, quand je dis plein, nous étions un millier à tout casser (dont probablement 50 selon la police…), ce qui est franchement décevant par rapport à l'ampleur des manifestations dans d'autres pays d'Europe : il faut dire que pour voir la moindre mention du sujet dans la presse française, il faut se lever tôt. Je n'ai même pas vu mes copains geeks habituels (à moins qu'ils ne se fussent cachés derrière le fameux masque de l'anonymat). La population était, d'ailleurs, plus jeune et plus majoritairement masculine que dans une manif lambda.
  • [Photo de moi]En revenant de cette manif (mais sans aucun rapport, sauf cas de perception extralucide), j'ai eu droit à un contrôle d'identité par deux policiers dans la salle des échanges de Châtelet-les-Halles. Apparemment ils voulaient croire que j'avais un couteau planqué quelque part sur moi, ils m'ont fait vider mes poches. Sans doute parce que j'avais un look très vaguement craignos (treillis, bomber, grosses chaussures de chantier, bonnet cachant mes cheveux longs : à peu près comme sur la photo ci-contre[#]) : en tout cas, je préfère ça au contrôle sur délit de faciès qui vise systématiquement les mecs un peu trop colorés.

[#] Prise avec le miroir dans l'entrée de mon immeuble. Je précise que je l'ai dés-inversée (i.e., c'est bien dans la main droite que je tiens le téléphone).

(vendredi)

La petite famille s'agrandit (encore)

[Peluches]Coinky (le poussin obèse), Bluby (la baleine souriante), Daisy (la vache-bouboule toute contente), Naughty (le chat tout plat un peu grognon) et Dotty (la vache placide et débonnaire),
Ruxor et le Poussinet,
ont le plaisir de vous faire part de l'arrivée dans la petite famille de :
Mozilla
(à qui Dotty est en train de faire un bisou).

Il est arrivé chez nous parce que j'ai fait un petit don à la Fondation Mozilla, en même temps qu'un tee-shirt sur lequel est écrit adopt Mozilla[#], du coup nous avons bien été obligés de l'ajouter à notre petite ménagerie.

(Pour être honnête, je n'ai pas cherché à l'obtenir : ils offraient un tee-shirt et une peluche pour des dons de plus de 25$ et 50$, je crois, et les deux pour 75$, avec des cases à cocher pour ces montants, alors j'ai donné 80$ en me disant que probablement le script ne détecterait pas ce montant comme donnant droit à un cadeau, l'idée étant que nous avions déjà assez de peluches et que je préfère que la Fondation garde l'argent que je lui donne pour acheter de la bière à ses développeurs. Mais comme la bébête est arrivée quand même et qu'elle a un air absolument craquant, ben voilà, il y a maintenant un gros lézard rouge en plus dans notre lit.)

Je sens que ma maman va encore se foutre de moi.

[#] Je vois d'ailleurs sur la page de dons qu'ils n'offrent plus la peluche, seulement le tee-shirt. C'est bien un signe que Mozilla voulait se faire adopter chez nous : tant pis pour mes lecteurs, vous n'en aurez pas un pareil. 😁 (Bon, que ça ne vous décourage pas de faire des dons !)

(jeudi)

Latéralité

J'écris latéralité comme titre, parce que je ne vois pas mieux en français, mais l'anglais a ce mot merveilleux, handedness, qui peut même devenir footedness s'agissant des pieds, pour désigner le fait d'être droitier ou gaucher.

Comme la plupart des gens, je suis droiter. En fait, je suis tellement droitier que je suis quasiment incapable de faire quoi que ce soit avec ma main gauche (qui ne soit pas une participation à une tâche effectuée de façon jointe par les deux mains, comme faire mes lacets, taper au clavier ou couper ma viande) : ni écrire, ni me brosser les dents, ni même me peigner. Mon poussinet, lui, est gaucher. Mon père est partiellement ambidextre, il a tendance à écrire sur papier à la main gauche et sur tableau noir à la main droite.

Je ne me propose pas d'essayer de comprendre pourquoi ce genre de choses se produit. Il est trop facile de tomber dans des explications qui s'appuient sur des légendes urbaines, comme supposer qu'on aurait un hémisphère cérébral plus développé ; et je suis assez convaincu que les idées populairement répandues sur le fait que l'hémisphère gauche du cerveau serait spécialisé dans le raisonnement logique et l'hémisphère droit dans les images et l'intuition, sont au moins à 99% des pures conneries, qui ont peut-être été scientifiquement crédibles à une époque mais qui ont depuis été réfutées presque complètement et continuent à polluler les textes de vulgarisation. (Wikipédia semble confirmer que ce genre de description est une très très grossière simplification.)

Je suis beaucoup moins certain de ma latéralité pour ce qui est des pieds, mais je dois tout de même être assez fortement « droitier » : si je dois donner un coup de pied, je le fais du pied droit ; si je dérape (volontairement) sur une surface glissante, je mets le pied droit en avant ; si je prends appui pour pousser quelque chose devant moi, je mets le pied droit en avant ; si je monte un escalier, je commence par le pied droit ; en revanche, quand je descends un escalier, je commence par le gauche, et en fait je descends à un rythme syncopé, par paires de marches, le pied gauche ne me servant qu'à « tomber » immédiatement sur le pied droit sur la marche du dessous, où je reprends mon équilibre et fais une pause d'une fraction de seconde avant de recommencer.

Pour reprendre ce que je disais dans la dernière entrée, je ne sais pas si je dois conclure que je devrais faire du surf pied droit en avant (le fait que je glisse spontanément pied droit en avant semble favoriser cette hypothèse) ou au contraire pied gauche en avant (selon le principe que la jambe qui contrôle le snowboard est plutôt la jambe arrière).

Sinon, je suis aussi droiter de l'œil. Le moyen de se rendre compte de cette forme de latéralité est de montrer un objet du doigt et ensuite regarder — en fermant un œil puis l'autre — pour lequel des deux yeux on a spontanément fait un alignement œil-doigt-objet. (Ça marche mieux si on montre du doigt sans tendre le bras, bien sûr, histoire que le doigt ne soit pas loin de la tête et que l'alignement soit plus différent entre les deux yeux.) C'est amusant, parce que ma vue est encore plus mauvaise de mon œil droit que du gauche, mais c'est quand même cet œil-là qui est dominant.

Je ne sais pas s'il y a d'autres formes de latéralité (de l'oreille ? de la narine ?) à part la latéralité intrinsèque des organes (à de très rares exceptions près, nous sommes tous gauchers du cœur…), et bien sûr des niveaux encore plus profonds (nos cellules n'utilisent qu'un des deux énantiomères du glucose, ce qui a d'ailleurs amené à proposer d'utiliser l'autre comme un édulcorant sans valeur calorique ; la question à 0.1 zorkmids, ensuite, c'est de savoir si on pourrait faire une forme de vie qui soit l'image miroir de la nôtre, ou si la très légère latéralité de la physique elle-même interviendrait d'une manière ou d'une autre, et si d'ailleurs elle a pu intervenir pour expliquer la latéralité observée du vivant — je suppose que non, mais c'est difficile à exclure).

(lundi)

J'essaie (très timidement) le surf

Dans le genre vacances tranquilles, on peut dire que mon poussinet et moi faisons très fort : sur cinq jours passés à la montagne, on aura fait des sports de glisse pendant… une heure. (Parce que le premier jour on a juste le temps d'arriver et de s'installer tranquillement, le deuxième jour il y a des choses à faire à la maison et des cartes postales à envoyer, le troisième jour le poussinet doit travailler à écrire l'introduction d'un article parce que ses co-auteurs s'impatientent, le quatrième jour on arrive à sortir l'après-midi après s'être levés à 10h, et le cinquième jour il faut plier bagages.) Bon, nous avons pour excuse des températures de −20°C qui ne donnent pas trop envie de sortir malgré le soleil magnifique et la neige abondante. Et comme la maison appartient à mes beaux-parents, nous ne payons pas de location rubis sur l'ongle. Mais même moi qui suis le roi des casaniers je dois reconnaître que c'est dommage.

[Photo de moi tenant un snowboard]La condition que j'avais posée pour venir à la montagne était : cette année, on fait du surf. Parce que le ski, même si je ne suis pas mauvais, je trouve ça un peu ennuyeux, en fait : c'est plus rigolo de débuter et de passer tout le temps sur les fesses. Et le snowboard c'est sexy, les gens qui en font sont souvent des jolis garçons (enfin, en tout cas, ce sont souvent des djeunz, j'ai l'impression qu'il y a plus de garçons que de filles, et mon poussinet et moi aimons bien le style vestimentaire qui va avec). Bref, nous avons pris un cours d'une heure auprès de l'école du ski français, le moniteur nous a assuré que c'était un sport où on progresse très vite surtout si on a déjà l'habitude du ski, et effectivement en quelques montées et descentes du tier-fesse et de la piste pour débutants (dont la neige était d'ailleurs très collante à cause du froid), on a pu voir un peu l'idée.

Le truc perturbant c'est qu'on ne peut pas freiner sans tourner ; et que si on freine trop fort, on peut se retrouver à avoir trop tourné et du coup à repartir en sens inverse, auquel cas c'est la chute assurée. C'est aussi bizarre que l'engin soit chiral, ou plus exactement que la fixation le soit : il faut choisir quel pied on mettra devant, sachant qu'on s'appuie sur celui-là mais qu'on contrôle avec le pied arrière ; mon poussinet et moi avons choisi la position gauche-à-l'avant (est-ce un message politique ?) mais mon poussinet, qui est gaucher, aurait en fait sans doute dû prendre l'autre. En tout cas, il a fait une chute assez méchante sur la neige bien dure et s'est fait très mal au poignet (droit), ce qui a mis un terme à notre peu téméraire expérience.

Sur une note différente, nous avons pu admirer de très près un gypaète (ou du moins c'est ainsi qu'on nous a identifié ce grozoizo) qui est venu longuement tournoyer au-dessus de la piste. Hum, peut-être que ce n'est pas un très bon signe d'avoir un vautour qui tournoie autour de nos têtes alors qu'on fait un sport dangereux, en fait. 😲

Bon, l'an prochain, mon poussinet et moi essaierons sans doute plus sérieusement (peut-être d'arriver à faire vraiment cinq jours de surf, du style chaque fois une heure de cours puis quelques heures par nous-mêmes).

(vendredi)

Google commence à me courir sur le haricot

Google commence à me courir sur le haricot avec leur manie de vouloir donner des comptes à tout le monde, et d'unifier ces comptes.

Ce n'est pas que je refuse d'aller sur Google Plus, d'ailleurs j'y ai un compte (même si j'y fais aussi peu de présence que sur Facebook). Ce n'est même pas tellement l'aspect Big Brother (à ce sujet, voyez ce que l'EFF écrit) qui me dérange : sur YouTube, par exemple, il me semble qu'avoir un compte qui retient toutes les vidéos que j'ai vues et qui est susceptible de m'en suggérer d'autres constitue un service vaguement utile, donc je n'ai pas vraiment d'objection à ce qu'ils mémorisent tout ça (et ça ne me gênerait pas de rendre complètement publique la liste de toutes les vidéos que je regarde[#]). Ça ne me gênerait même pas de rendre publique la liste de toutes les recherches Google que j'ai jamais faites[#2].

Mais ce qui m'agace particulièrement, c'est leur façon de personnaliser les résultats des recherches. Non, je n'ai pas envie d'avoir des résultats personnalisés pour moi, que ce soit sur Google Web ou Google Images, ni en fonction de mes recherches précédentes, ni en fonction de ce que mes amis sur Google Plus ont pu poster, ni même en fonction de mon pays ou de ma langue (seule la langue peut être utile, mais j'aimerais que ce fût optionnel).

Il y a d'autres choses qui m'agacent. Par exemple le fait que leur architecture de comptes soit particulièrement mystérieuse : dans le genre, mon compte Google est associé à une adresse mail, david+googleaccount dans le domaine madore.org, mais ce compte Google est lui-même associé à un compte Gmail, davidamadore dans le domaine gmail.com, adresse que je ne lis pas et que je n'ai pas l'intention de lire merci pour moi, mais dont la création m'a été plus ou moins rendue obligatoire pour l'activation de mon téléphone Android. Et le truc, c'est qu'ensuite les différents services Google décident plus ou moins aléatoirement (et en tout cas de façon incompréhensible pour moi) de m'associer à une ou l'autre de ces adresses. YouTube, par exemple, veut absolument m'envoyer les commentaires sur mes vidéos à mon adresse Gmail. Par ailleurs, quand je suis déloggué de mon compte YouTube, le formulaire pour me logguer veut absolument me proposer comme login par défaut cette adresse Gmail : sauf que ça ne marche pas, pour une raison mystérieuse il faut que je mette l'adresse david+googleaccount (ce qui impose de passer d'abord par l'étape sign out and sign in as a different user). Allez comprendre pourquoi. En tout cas, c'est le bordel, et ça m'inspire assez peu de bien sur la clarté de leur système de comptes.

Bref, une chose que j'aimerais faire, c'est avoir un mécanisme pour lancer, depuis mon Firefox, des recherches Google sans cookie, donc, sans m'identifier auprès de Google. Envoyer un cookie ne me rend en l'occurrence strictement aucun service[#3], c'est même tout le contraire (résultats pollués par une personnalisation intempestive, liens remplacés par des redirections via Google pour qu'ils sachent sur quoi je clicke, etc.). Je pourrais demander à Firefox d'interdire totalement les cookies pour les domaines Google, mais je n'ai pas vraiment envie de renoncer au fait, par exemple, que Google Maps me centre par défaut sur Paris ou de pouvoir uploader des vidéos sur YouTube. Je voudrais pouvoir faire des recherches Google Web et Google Images sans cookies. Mais la seule méthode que je voie consiste à ouvrir un nouveau profil, ou passer en mode privé/incognito, ou quelque chose comme ça, ce qui est lourdingue pour transférer les URL, et ce qui ne correspond pas vraiment au but que je me fixe (qui n'est pas tant de protéger ma vie privée que d'éviter la personnalisation).

Si vous avez des suggestions de façons de faire, je suis preneur.

[#] Ce qui me gêne un petit peu plus c'est que la liste des vidéos que je marque comme favorites soit visible de façon immédiatement adjacente à la liste des vidéos que je publie moi-même, parce qu'elles n'ont juste rien à voir, donc ça fait brouillon.

[#2] Concernant la protection de la vie privée (enfin, privacy, ce terme impossible à traduire en français), mon opinion de principe est plutôt que l'angle d'attaque ne doit pas être tant la collecte des informations mais l'usage qui peut être fait de ces informations. Et en pratique, pour se protéger, plutôt qu'empêcher les big brothers de collecter des données, je pense qu'il est plus utile de les noyer sous des fausses données : je serais bien tenté de faire un plugin Firefox qui lance des recherches Google subtilement choisies pour tromper les heuristiques de détection des goûts de l'utilisateur. Un peu à la façon de M-x spook sous Emacs.

[#3] En fait, ce n'est pas tout à fait vrai, le cookie joue une fonction utile en ce qui me concerne : demander à Google de ne pas tenir compte du fait que je suis en France, ne pas m'obliger à passer par Google.fr et ne pas utiliser le français comme langue par défaut.

(mercredi)

Départ à la montagne

Je pars à la montagne demain — au même endroit qu'il y a trois ans. Mon poussinet a insisté pour que nous partions hors vacances scolaires, pour éviter la foule. Idée plutôt problématique de mon point de vue parce que, même si je n'ai pas de cours à donner cette semaine et qu'en principe je peux poser mes jours de vacances, en pratique ça me fait rater toutes sortes de choses (comme un séminaire ou une soutenance de thèse).

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


Entries by month / Entrées par mois:

2017 Jan 2017 Feb 2017
2016 Jan 2016 Feb 2016 Mar 2016 Apr 2016 May 2016 Jun 2016 Jul 2016 Aug 2016 Sep 2016 Oct 2016 Nov 2016 Dec 2016
2015 Jan 2015 Feb 2015 Mar 2015 Apr 2015 May 2015 Jun 2015 Jul 2015 Aug 2015 Sep 2015 Oct 2015 Nov 2015 Dec 2015
2014 Jan 2014 Feb 2014 Mar 2014 Apr 2014 May 2014 Jun 2014 Jul 2014 Aug 2014 Sep 2014 Oct 2014 Nov 2014 Dec 2014
2013 Jan 2013 Feb 2013 Mar 2013 Apr 2013 May 2013 Jun 2013 Jul 2013 Aug 2013 Sep 2013 Oct 2013 Nov 2013 Dec 2013
2012 Jan 2012 Feb 2012 Mar 2012 Apr 2012 May 2012 Jun 2012 Jul 2012 Aug 2012 Sep 2012 Oct 2012 Nov 2012 Dec 2012
2011 Jan 2011 Feb 2011 Mar 2011 Apr 2011 May 2011 Jun 2011 Jul 2011 Aug 2011 Sep 2011 Oct 2011 Nov 2011 Dec 2011
2010 Jan 2010 Feb 2010 Mar 2010 Apr 2010 May 2010 Jun 2010 Jul 2010 Aug 2010 Sep 2010 Oct 2010 Nov 2010 Dec 2010
2009 Jan 2009 Feb 2009 Mar 2009 Apr 2009 May 2009 Jun 2009 Jul 2009 Aug 2009 Sep 2009 Oct 2009 Nov 2009 Dec 2009
2008 Jan 2008 Feb 2008 Mar 2008 Apr 2008 May 2008 Jun 2008 Jul 2008 Aug 2008 Sep 2008 Oct 2008 Nov 2008 Dec 2008
2007 Jan 2007 Feb 2007 Mar 2007 Apr 2007 May 2007 Jun 2007 Jul 2007 Aug 2007 Sep 2007 Oct 2007 Nov 2007 Dec 2007
2006 Jan 2006 Feb 2006 Mar 2006 Apr 2006 May 2006 Jun 2006 Jul 2006 Aug 2006 Sep 2006 Oct 2006 Nov 2006 Dec 2006
2005 Jan 2005 Feb 2005 Mar 2005 Apr 2005 May 2005 Jun 2005 Jul 2005 Aug 2005 Sep 2005 Oct 2005 Nov 2005 Dec 2005
2004 Jan 2004 Feb 2004 Mar 2004 Apr 2004 May 2004 Jun 2004 Jul 2004 Aug 2004 Sep 2004 Oct 2004 Nov 2004 Dec 2004
2003 May 2003 Jun 2003 Jul 2003 Aug 2003 Sep 2003 Oct 2003 Nov 2003 Dec 2003