David Madore's WebLog: 2010-04

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 April 2010 / Entrées publiées en avril 2010:

(jeudi)

Je programme pour Android

Comme finalement je trouve que le Java n'est pas un langage trop mal, et que j'avais par ailleurs depuis longtemps envie de programmer quelque chose pour Android, j'ai écrit un petit programme pour réparer une lacune qui m'agaçait : une liste des caractères Unicode avec quelques possibilités primitives de recherche et de saisie des caractères (pour pouvoir les copier-coller ensuite ailleurs). Vous pouvez la télécharger sur le marché Android (cherchez Unicode Map) ou depuis un ordinateur via le lien précédent. Vous pouvez aussi me faire part de vos suggestions d'amélioration, je promets de les ignorer très soigneusement ☺ (sauf peut-être si elles sont accompagnées d'un patch ou d'une proposition de git pull). Vous pouvez également me dessiner une icône qui soit moins complètement pourrie que celle que j'ai « dessinée » en dix secondes en découvrant qu'il était obligatoire d'en avoir une.

C'est d'ailleurs impressionnant le nombre de sites Web qui répercutent l'arrivée d'une nouvelle application Android (et j'imagine que pour iPhone c'est environ 1000 fois ça) : pour une application que j'ai mise sur le marché avant-hier, il y a déjà plein de listings (automatiquement générés) qui sont indicés par Google et qui en parlent (en parlent veut dire, évidemment, ont recopié le petit blabla que j'ai écrit en cinq secondes — encore moins que l'icône — dans le formulaire d'upload). Ça semble surtout là pour combler ce manque qui me semble insupportable et criant : Google n'a prévu aucun listing Web officiel des applications Android, ce que je ne comprends pas du tout (ça ressemble à une tactique d'Apple, mais à la sauce Google) ; je comprends éventuellement qu'ils ne prévoient aucun moyen de télécharger l'application autrement qu'en passant par leur application de marché sur le téléphone, mais pourquoi ne même pas avoir un mécanisme de recherche via le Web et des pages fixes rappelant les informations basiques sur l'application ? ça n'a pas de sens. Et c'est clairement intentionnel : quand on regarde la page Web du marché, on voit que tout a été fait exprès pour éviter les liens Web. Je ne comprends pas. (Et je comprends d'autant moins que, du coup, plein d'autres gens s'engouffrent dans la brèche, justement.)

(lundi)

Mon bureau déménage

Aujourd'hui, j'ai fait mes cartons : je quitte mon bureau de la rue Dareau où je m'étais installé il y a deux ans et demi (déjà ‽) pour en rejoindre un autre, rue Barrault, plus près de chez moi mais, en contrepartie, plus petit (ou peut-être plus grand, mais que je partagerai avec un collègue alors que jusqu'à présent j'étais seul). En fait, tous les gens de mon département qui étaient comme moi rue Dareau déménagent, mais les autres vont avenue d'Italie dans des locaux neufs : moi je profite de ce déménagement collectif pour rejoindre les collègues les plus proches de mes thématiques (disons, les plus matheux-algébristes qu'il y ait à Telecom). A priori, ce nouveau bureau est lui-même temporaire : je devrais de nouveau déménager (mais dans le même couloir !) quand des travaux auront rendu des locaux plus beaux — et tout cela en attente d'un hypothétique futur déménagement à Palaiseau en 2012 2014 2015 2020 2070.

Toujours est-il que je n'aime pas faire les cartons, parce que ça oblige à ranger tout le foutoir qui s'est étalé sur le bureau et à décider ce qu'on veut mettre où, à trier les 1001 articles qu'on a imprimés (ah, je lirai ça sans doute un jour, refrain connu) pour essayer de les organiser d'une manière ou d'une autre, et à se rendre compte qu'on a vraiment trop de livres (j'en ai fait trois et demi cartons bien pleins, à raison d'environ 40 livres par carton). Et on angoisse que les livres puissent être abîmés, que les affaires puissent se perdre (surtout quand tout le monde va avenue d'Italie et que je suis le seul à partir rue Barrault !).

(lundi)

Petit voyage à Bordeaux

J'ai pris mes vacances à contretemps du calendrier scolaire[#] et suis allé passer trois jours à Bordeaux la semaine dernière, histoire de voir comment mon poussinet y est installé (verdict : c'est petit, mais cozy), et de visiter un peu cette ville que je n'avais jamais vue que quelques heures (j'étais passé en coup de vent pour candidater sur un poste à l'université de Bordeaux I). Eh bien, si on aime les belles pierres et les demeures de riches marchands, c'est une ville intéressante ; j'ai surtout aimé la rue Sainte-Catherine (c'est quelque chose qui manque vraiment, à Paris, une rue commerçante animée et piétonne) et les petites places comme celle-ci, celle-là, cette troisième ou cette quatrième (j'aime bien les places petites mais cozy, et ça non plus il n'y en a pas énormément à Paris).

En revanche, ce n'est pas la peine d'aller voir de l'autre côté de la Garonne pour voir s'il y a des choses intéressantes rive droite : il y a certes un jardin botanique pas trop mal (quoique manquant cruellement d'ombre quand on est un blondinet à la peau claire), mais ce n'est vraiment pas très animé. Et il faut du temps pour la traverser, la Garonne, quand on est un Parisien habitué à ce que les ponts fassent 150m à tout casser et qu'il y en ait tous les autant.

[#] Et du volcan islandais dont je suis fier de pouvoir dire que j'arrive à prononcer le nom. (Pas qu'on ait voyagé en avion — mon poussinet est fou de trains — mais je n'aime pas quand les trains sont bondés.)

(lundi)

Finalement, je programme en Java

Pour ceux qui ont suivi les premiers volets (ici et ) de la saga Ruxor veut refaire le moteur de son blog, finalement j'ai été suffisamment excédé par la libxml2 pour décider d'utiliser Xerces et… Java. Oui, je sais, je ne suis pas très cohérent avec moi-même, mais bon, c'est l'occasion d'apprendre un peu mieux à programmer en Java, chose qui, comparé à programmer en Perl, ressemble un peu à construire des temples grecs par rapport à des maisons dans les arbres : c'est plus fastidieux, ça paraît plus joli et plus propre quand c'est fini, et il y a plein de règles un peu bizarres à suivre et d'incantations à prononcer pour faire plaisir aux dieux (static public abstract class GoddessOfWisdom extends Pantheon.Goddess, ô Athéna aux yeux de hibou…) : donc ça va parfaitement bien pour combattre Xerces. Si vous voulez suivre les progrès en direct, il y a une interface Gitweb qui vous dira tout ce que je fais là-dessus.

Mais ce que j'ai surtout fait, récemment, c'est modifier juste un tout petit peu l'ancien moteur (celui qui est écrit en C et qui, malheureusement, sert encore et toujours) pour qu'il puisse gérer, a minima, le format que je veux donner à mon fichier d'entrée (c'est-à-dire, où toutes les balises que j'ai inventées vivent dans un espace de noms séparé ; mon hack consiste juste à les reconnaître à leur préfixe, donc c'est un changement totalement trivial sur cet ancien moteur). Comme ça je ne suis pas prisonnier de mon travail en cours, et je peux continuer à bloguer sans avoir à jongler avec deux versions du fichier (une à l'ancien format et une au nouveau), donc, en pratique, sans avoir à attendre d'avoir fini de coder mon temple grec en Java.

Bon, entre temps, évidemment, toutes les idées géniales qui m'ont traversé la tête en sont — justement — ressorties, ce qui est quand même dommage parce que je pourrais jurer que, si, si, elles étaient vraiment géniales. Enfin, je crois. Faute de pensées profonde, vous aurez droit à ma vie (ce qui est, après tout, le principe d'un blog).

(mardi)

libxml2 et maux de tête

Loi de Hofstadter : Les choses prennent toujours plus de temps que prévu, même quand on tient compte de la loi de Hofstadter.

Quand je me suis mis mis en quête de remplacer le moteur de ce blog, il y a déjà un mois (traduire : ça fait un mois que je travaille là-dessus dès que j'ai du temps libre), je pensais que ce serait plutôt facile. C'était sans compter le principe ci-dessus, et surtout le fait général qu'à chaque fois que je commence à utiliser un programme ou une bibliothèque qui, superficiellement, de loin, a l'air bien pensé et bien écrit, je me rends compte que tout n'est que façade, que c'est bourré de bugs ou de limitations obscures et que rien ne marche comme annoncé, qu'il y a généralement des petites crottes de ragondin partout. C'est le cas, spécifiquement, de la libxml2 et (par voie de conséquence) de son enrobage Perl, XML::LibXML.

En l'occurrence, ce qui me cause le plus de maux de tête, c'est la façon dont sont gérés les namespaces XML. (J'utilise un namespace à moi pour séparer les balises que j'ai inventées, dans le code que je tape, des balises HTML — c'est justement à ça que servent les namespaces.) Superficiellement, la façon dont la libxml2 procède est très bien : plutôt que d'imposer que le programmeur attache lui-même les attributs xmlns nécessaires aux endroits voulus (comme ce serait le cas en principe avec une implémentation conforme du DOM), la libxml2 attache elle-même les attributs comme il faut aux endroits où il faut. L'ennui, c'est que parfois ces attributs cessent d'être nécessaires, ou parfois on est obligé d'en ajouter à cause de limitations bizarres de la bibliothèque, et alors c'est la croix et la bannière de les retirer. Or le standard XHTML ne m'autorise pas la fantaisie d'avoir des attributs xmlns:inutile="http://www.example.tld/mon/namespace/a/moi/" qui ne servent pas — on a le droit (pour êre valide) à exactement un attribut xmlns sur tout le document, c'est sur l'élément <html> à la racine, point-barre. Enfer et damnation ! J'ai passé un temps infini à contourner ce bug, qui n'est pas grave en lui-même, mais qui est rendu gênant par celui-ci, après avoir aussi trébuché sur ce bug (corrigé dans la dernière version), et m'être lamenté qu'il n'y ait pas une autre façon de faire. La seule façon que j'aie finalement trouvé pour contourner (pas résoudre, mais contourner) ce genre de problèmes, c'est de recopier tout l'arbre DOM juste avant de le sortir, de façon à obliger la bibliothèque à ne recopier que les déclarations de namespace qui servent vraiment (et, on l'espère, une seule) : ceci coûte un temps délirant et vraiment inacceptable (environ quatre à cinq secondes pour traiter mon blog, sur une machine relativement puissante).

Évidemment, je m'expose à un concert de protestations comme quoi j'aurais dû écrire en <insérez ici votre langage de programmation préféré>. Bon, pour une fois, on ne pourra pas me dire Python, parce que l'implémentation du DOM XML de Python, soit elle est aussi basée sur la libxml2, et elle souffre exactement des mêmes défauts, soit c'est xml.dom.minidom qui a d'autres limitations encore plus douloureuses. Par contre, il est possible que j'aureusse dû [←ceci est un subjonctif conditionnel passé, ne cherchez pas] utiliser Java ou C#/Mono. Toujours est-il que je ne sais plus où donner de la tête.

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


Entries by month / Entrées par mois:

2017 Jan 2017 Feb 2017 Mar 2017 Apr 2017 May 2017 Jun 2017 Jul 2017 Aug 2017 Sep 2017 Oct 2017 Nov 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