Spring is hate...

07/03/2010

Spam politico-téléphonique

07 mar 2010 - 22:36

La semaine prochaine, il paraît qu'il y a le premier tour des élections régionales.

La semaine dernière, j'ai reçu au bas mot 4 coups de fil sur ma ligne fixe, tant pour vanter la liste de Xavier Darcos que celle d'Alain Rousset. Et entre-temps j'ai aussi reçu un coup de bigot de Bernard Laporte et Denis Charvet qui voulaient me vendre leur site internet (basé sur le sport, apparemment). J'irai jamais dessus, le spam par téléphone pour vendre de l'internet, c'est débilissime.

Je ne sais pas d'où vient ce subit engouement pour le media téléphonique, et d'ailleurs je m'en moque, mais je suis totalement outré par cette pratique. C'est tout nouveau tout neuf, le téléphone. On avait déjà eu le spam sur les mails, dans la boîte postale, sur le mobile, mais là, c'est le ponpon toutes catégories. On nous vend du politique. En harcelant les gens chez eux. J'admets volontiers que la campagne des régionales est loin de passionner les foules, mais de là à utiliser une boîte vocale qui débite d'un ton aussi monocorde qu'un discours d'Édouard Balladur sur la désexpansion par la stagnation ou la déstagnation par l'expansion, ça me met sérieusement en rogne.

La petite enveloppe kraft avec les professions de foi des candidats, leurs discours plus ou moins argumentés, soit. On a le temps de lire à tête reposée la prose des uns et des autres. D'ailleurs, le torchon du FN a une grave faute de typo, je voterai jamais pour eux. Aller à proximité du bureau de vote et zieuter les affiches (quand il y en a), c'est un geste volontaire, pour s'informer, se renseigner.

Les meetings, admettons. Mais que je sache, les militants vont pas chercher les hésitants manu militari pour les obliger à assister aux longs discours. Personne n'est obligé de se cogner la propagande. C'est encore un geste volontaire. Tu hésites, tu as un doute, tu veux te rendre compte par toi-même, ok. Tu vas à l'info.

Et sur le ouaibe, tu peux t'abonner aux fllux RSS, aux twitters, aux mailing-listes. Et encore une fois, si tu fais cette démarche, c'est en connaissance de cause, tu donnes ton mail aux spammeurs communicants et c'est tant mieux pour toi.

Mais qu'un robot débile vienne interrompre un épisode de Dr House ou le bain de ma fille pour essayer de me convaincre de voter pour son patron : NON, NON, RENON ET NIET DE CROTTE !!!

Tu crois que ça va me convaincre ? Mais espèce de tête de noeud, C'EST TOUT LE CONTRAIRE !!! Tu réussis à me convaincre de ne surtout pas voter pour toi ! Voire même de ne pas voter du tout, ou blanc, ou nul, mais c'est une autre histoire.

Que je sache, les électeurs appellent pas leurs élus tous les jours. Ton maire, ton député, ton président de la république, tu viens pas le saoûler au téléphone pour s'enquérir de ce qu'il a bien voulu faire aujourd'hui dans l'intérêt du citoyen, pas vrai ? J'voudrais bien les voir, les Darcos, les Rousset et consors, appelés jour et nuit par leurs élécteurs. Ça serait sympa, en terme de transparence participative new-media sprountch. Je suis sûr que les spin doctors des politiques seraient vraiment bien inspiré de donner les numéros persos (fixe et mobile) des candidats.

Ne pas faire aux autres ce que tu ne voudrais pas que l'on te fît. Gouverner, il paraît que c'est servir. Pas assommer. Mauvais début pour le président de région, quel qu'il soit. D'abord, je commencerai par refuser de payer sa facture de téléphone.


21/02/2010

Cadeaux de février

21 fév 2010 - 18:17

Février, mois des voyages. Ne pas arriver les mains vides.

piment

Repartir avec une gastro. La routine, quoi.


11/02/2010

Pas l'habitude

11 fév 2010 - 13:09

Faut nous comprendre, on n'a pas l'habitude... alors dès qu'il tombe trois flocons, c'est l'extase et l'émerveillement (et accessoirement, la paralysie du système routier) :

Neige forte

L'album se visionne par là, et il se peut qu'il soit mise à jour au cours de la journée.


06/02/2010

Lest

06 fév 2010 - 20:39

Lest

Il fallait bien que je trouve quelque chose pour lester ce chariot. N'ayant pas de sac de sable à disposition, je suis allé piocher des trucs lourds dans ma bibliothèque. Je me suis dit que je n'aurais plus besoin de ces livres. Delphi 7, c'est du windows. Et même si je devais me remettre à Java, j'imagine que ce livre, qui a dix ans, est désormais obsolète.

Java 2, c'est lourd. Delphi 7, aussi. Les livres, hein. Je parle bien des livres...


01/02/2010

Mémoires

01 fév 2010 - 14:14

Ce qui suit est une nouvelle Geek, mais pas Polar-Geek. (d'ailleurs Pierre Roussel vient de publier le deuxième épisode de "Le monde est petit", faudrait y aller voir).
D'aucuns verront certainement un lien avec "Le Peuple du tapis", de Terry Pratchett. Je l'ai en effet lu il y a peu de temps, mais en fait, je n'ai fait le rapprochement qu'au moment où j'ai couché cette nouvelle sur le clavier. Les fans de Pratchett m'excuseront, je l'espère.

Lire la suite de : 'Mémoires'

31/01/2010

Inacadémique

31 jan 2010 - 00:44

Raphaëlle

Je sais pas pourquoi, j'aime cette photo. Le N&B, le regard vers le bas, le visage coupé en bas et l'oreille tronquée en haut, le flou général qui s'en dégage... Rien n'est classique / académique dans cette photo, mais... elle me parle.

Les photos (publiques) de ma fille sont rares. Profites-en.


30/01/2010

Forum des métiers

30 jan 2010 - 15:26

Ce matin, je suis allé faire l'intervenant au 24ème Forum des Métiers, organisé au collège Saint-Bernard, à Bayonne. Durant trois courtes heures, j'ai pu exposer à des collégiens mon métier, et essayer éventuellement de les aider à faire leur choix. To be geek or not to be geek. J'avais volontairement pris le parti de ne prêcher aucune paroisse particulière : pas un mot sur le libre, pas un mot sur ma spécialisation. J'avais l'étiquette "développeur informatique" et elle suffisait amplement. Évidemment, il fallait essayer d'aborder tous les domaines accessibles au développeur, et ils sont vastes. Pour m'aider à construire une sorte d'argumentaire, j'avais essayé (seul, puis en compagnie de quelques IRCistes de toutes origines) de dresser une sorte de liste de "mots-clés" définissant les principaux axes de mon métier. J'ai pondéré et stocké ça dans une petite appli Django avec affichage dans l'ordre aléatoire ça donne quelque chose comme ça :

Nuage de mots

Quelques explications :

  • Feignantise : normal. Si on se casse (un peu) la tête, c'est pour ne plus avoir à s'emmerder par la suite. C'est fondamentalement parce qu'on en avait marre d'attendre les résultats d'un calcul qu'on a inventé le moyen de les faire plus vite et plus puissamment. Et si on a un outil qui permet de faire plus, ça alimente notre feignantise. Les Frameworks en sont l'exemple le plus criant de vérité : on a un bras de levier plus important et donc on peut aller plus loin que si on devait tout réécrire à chaque fois.
  • Anglais : parce qu'il me paraît essentiel de savoir lire et écrire en anglais pour pratiquer notre métier. Toute la doc est en anglais, tous les langages de programmation (à part peut-être Baguette on Snails) sont en anglais, et que si on veut discuter avec les développeurs du monde entier, on doit maîtriser l'anglais. On peut le regretter ou pas, mais c'est comme ça. L'anglais, c'est la lingua franca de notre ère. Et Google Translate est hors de question. Sans compter qu'on doit savoir communiquer, à l'écrit surtout, à l'oral souvent ; en français comme en anglais.
  • Curiosité : j'insiste à chaque fois sur ce point. Ce n'est pas une compétence qu'on acquiert, mais une sorte de formatage du cerveau. Un geek, c'est quelqu'un qui apprend. Tout le temps. Si on reste sur ses acquis, on est mort. Si on reste sur du plan-plan, on est dépassé. Ça m'aurait rendu malheureux de continuer à faire du VB4, du Cobol, du JCL, de l'ASP, du PHP. Et peut-être un jour, du Python. Les techniques bougent, les outils émergent, les wagons se choppent ou bien on reste sur le quai. Tristement.
  • Rigueur : indispensable aussi. On peut être bordélique, mais y'a un retour de bâton à moyen ou à long terme. Être rigoureux, c'est prévoir aussi à l'avance, anticiper. Se dire que dans six mois, si on revient sur son code, on va comprendre ce qu'il fait. Documenter, rajouter des commentaires et des remarques. Coder proprement, c'est aussi le moyen d'avoir un code maintenable (en correction comme en évolution)
  • Café : désolé, pas pu m'en empêcher.

Concernant le forum proprement dit :

  • Superbe organisation (bien rodée, 25 ans l'an prochain) et plein de monde. Des gamins avec ou sans parents, mais avec une grande qualité d'écoute.
  • Cent pour cent de mecs. Zéro fille. Aucune. À la fois prévisible et étonnant. Prévisible, parce que la filière scientifique et technique est traditionnellement masculine ; étonnant parce que je m'imaginais qu'en 15 ans, les mentalités avaient évolué, ne serait-ce qu'un peu, et qu'on verrait quelques filles nous questionner. Pourtant, les qualités requises par notre métier ne sont aucunement sexuées. Les points que j'ai évoqué ci-dessus ne sont ni l'apanage d'un genre, ni la tare d'un autre. Il faudrait vraiment se pencher sur la question. Je persiste : une fille est aussi bien armée qu'un garçon pour développer. Ou alors, il y a une autre explication : elles n'avaient pas besoin de nos conseils, elles étaient bien informées et elles iront directement dans les bonnes filières, sans hésiter. Mouais.
  • Environ 80% des jeunes que j'ai vu voulaient faire des jeux vidéo. Et les 20% restants ne savaient en fait pas ce que voulait dire le terme "développeur". C'est colossal, sinon. Des jeux, des jeux, des jeux, des jeux. Sans qu'ils sachent qu'il y a mille métiers qui gravitent autour de la conception / réalisation de jeux et de l'infime proportion de travailleurs informatiques qui fait effectivement partie d'un équipe qui fabrique ces jeux. Ah... c'est beau les rêves.
  • Sinon, j'ai vu quelques futurs geeks. Ils promettent au moins autant que la génération actuelle.

26/01/2010

Deux Mille Neuf

26 jan 2010 - 00:16

Excuse-moi de te demander pardon, mais je suis consterné par ma propre prose. Si l'idée principale est bien là, j'ai énuméré des platitudes assez ennuyeuses sur plusieurs paragraphes. Je voulais absolument rédiger un texte avec comme idée pivot "virages" et j'ai complètement dévissé en délayant une sauce bien fade. Désolé, j'essaierai de pas recommencer.

Deux-mille neuf a été une année mouvementée. Une des plus mouvementées de mon existence. Ma propension naturelle à me souvenir des vilaines choses laisse hélas des traces désagréables. Le décès de mon grand-père, les tempêtes et les inondations, la perte de mon travail, la fin du Lugradio Live, tout ça fait très cahoteux (ou cahotique, si on aime les néologismes). Et si on contrebalance ça avec la naissance de ma fille, au beau milieu de cette année, ça chamboule tout.

Je crois que le mot-clé de cette année 2009, tout compte fait, ce fut "virages". Et si je regarde le destin de mes proches, je constate qu'eux aussi ont pris de sacrés virages. Déménagements, emménagements, mises en couple ou ruptures, fermetures de boîtes et ouverture de commerces...

Les virages, si on réfléchit bien, ce n'est pas forcément une mauvaise chose. C'est toujours mieux que d'être arrêté en plein vol, de se crasher sur un mur. Un virage, c'est un changement de direction, mais après tout, la trajectoire a beau changer, on est toujours en mouvement.

Parfois, les virages, on les subit. On a parfois l'impression d'être parti dans le décor, d'avoir perdu les pédales. Et puis non. On est toujours sur la route. Comme si c'était une erreur. Comme si on s'étonnait soi-même d'être toujours sur ses deux pieds. Alors la route serpente, devant soi. Et on reprend le chemin, encore un peu sonné.

J'ai pris un drôle de virage en m'installant sur la Côte Basque, à la faveur d'une formation qui commençait en janvier 2000. Dix ans. En mars prochain, ça fera dix ans que j'habite Bayonne. Et en mars prochain, ma fille aura un an. C'est vertigineux de voir tous les virages que cette décennie a compté. Si on traçait la toute petite ligne qui suit cette trajectoire, avec ses pauses et ses virages, on pourrait s'apercevoir de quel drôle de chemin cela fait. La vue d'ensemble.

Je ne sais pas de quoi l'année 2010 sera faite. Tous les chemins sont encore possibles ; certaines routes paraissent bouchées, d'autres semblent plus confortables. Il y aura certainement d'autres virages. Plus ou moins douloureux, plus ou moins subits. Cette année, et les années à venir. Des portes qui s'ouvriront, d'autres qui seront fermées. Des voyages, des périodes de calme, des colères, des larmes, des rires.

On a beau faire des projets, on aurait du mal à être sûr qu'ils iront au bout. Mais la seule façon de savoir, la seule façon d'être certain qu'on a eu raison ou tort, c'est de rester sur la route, et d'avancer.

Je n'ai pas vraiment d'idée du mot de 2010. Il y a de fortes chances pour qu'il soit "virage".


23/01/2010

Maux de passe (dernière partie)

23 jan 2010 - 12:28

Ce qui suit est la troisième et dernière partie de la nouvelle Polar Geek "Maux de passe". Pour info :

Lire la suite de : 'Maux de passe (dernière partie)'

21/01/2010

En préparation

21 jan 2010 - 17:55

Ça se bouscule pas mal depuis peu, alors, on résume, parce qu'il va falloir s'organiser un peu :

  • Les premières Rencontres Django francophones viennent d'être annoncées par David et auront donc lieu les 24-25 avril à Marseille. Dans ma TODO, on ajoute : transport (SNCF, c'est minimum 7h20 de train - Avion, c'est Ryanair avec des dates moyennement intéressantes - voiture c'est hypra-galère à l'aller encore pire au retour) et logement (les organisateurs y travaillent).
  • Le prochain OggCamp, l'événement open-source qui succède au Lugradio Live aura lieu à Liverpool... le week-end d'après (2-3 mai). Impossible que je le manque celui-ci non plus. Donc, dans la TODO : transport (une des propositions d'Air France table sur un voyage de plus de 24h - Y'a bien EasyJet, mais c'est moyen - Y'a pas Ryanair, ils desservent Biarritz/Liverpool que l'été) et logement (les organisateurs y travaillent aussi).
  • Les prochaines RMLL... J'hésite... En même temps, c'est à Bordeaux, donc pas loin. Faudra voir en fonction des intervenants / ceux qui y seront que je connais, etc.

À savoir que pour mon plus grand bonheur, pour les Rencontres et pour OggCamp, on a réussi à me convaincre de préparer une intervention. Donc, dans la TODO : talk for OggCamp et conférence Django.

À part ça, je dois encore écrire et publier le troisième et dernier épisode de "Maux de passe" pour Polar-Geek. Je sais pas quand j'aurai le temps.

Qui a dit que les chômeurs étaient inactifs ?


16/01/2010

Basically me

16 jan 2010 - 23:26

Basically French

Caricature effectuée, "en direct" pendant mon petit n'importe quoi au Lugradio Live 2009, par Chris Hayes. Publiée sous contrat Creative Commons, CC-BY.


iPod bras, iPod chocolat

16 jan 2010 - 23:05

Petit emprunt du titre à un calemlourd de Sinkrou.

J'ai pêché, j'expie, j'ai pêché, j'expie, j'ai pêché, j'expie, J'ai pêché, j'expie, j'ai pêché, j'expie, j'ai pêché, j'expie.

J'ai voulu donner à Apple sa chance. Ceux qui me connaissent savent que je ne porte pas la firme, ses produits et son Steve Jobs dans mon coeur, pour tout un tas de raison qu'il est inutile de préciser ici, afin d'éviter les trolls préliminaires. C'est mieux de passer directement aux trolls postliminaires.

J'ai voulu acheter un iPod. Depuis le temps que ce produit est vanté par ses utilisateurs, qu'il est devenu synonyme de "lecteur mp3", j'avais de plus en plus envie de tâtouiller ce symbole de la réussite d'Apple. J'avais aussi envie de me racheter un lecteur audio portable ; le précédent était assez obsolète, et pour tout dire tellement peu ergonomique que je n'avais aucun scrupule à m'en séparer. L'interface de l'iPod, il faut le rappeler, est un des principaux arguments de vente.

Après quelques réflexions, et sachant que les iPod sont supportés par la bibliothèque libgpod depuis des lustres, je me suis dit que je ne risquais rien à acheter un iPod. C'est pas comme si j'achetais un Mac à 2 ou 3 SMIC...

Mal m'en a pris. J'ai passé une nuit ou presque pour arriver à la conclusion que cet iPod ne fonctionnerait jamais. J'avais jeté mon dévolu sur un iPod Nano, Cinquième Génération. Un 16Go, vert. C'est joli, le vert.

Branchement, début du chargement. L'Ipod apparaît sur mon bureau. Youki. Je constate que l'arborescence d'un iPod n'est pas celle d'un bête disque dur. Admettons. J'installe gtkpod, qui semble être le programme ad hoc. Il faut que je bataille un moment avant qu'il apparaisse dans les panneaux, mais je passe. Je sélectionne quelques MP3 à copier dans le lecteur, je "synchronise". Petite vérification, les fichiers MP3 sont là, youpi.

Débranchage, rallumage : Zéro fichier dans le lecteur.

Herm. Je passe encore sur les heures (au bas mot, six) que j'ai passé à essayer de comprendre. J'ai tout passé en revue : Banshee, Rhythmbox, Exaile, GtkPod, et autres programmes tous plus ésotériques les uns que les autres. Rien. Aucun n'a été capable de discuter correctement avec l'iPod.

J'ai cherché sur l'ensemble du web et j'ai finalement trouvé la cause du problème. Avant la 5G (cinquième génération) du Nano, Apple utilisait une base de données au format propriétaire pour stocker les méta-données relatives aux fichiers audio (album, pistes, etc). Et c'est ce format que les codeurs de libgpod et gtkpod avaient réussi à décoder pour que ces programmes puissent s'interfacer entre GNU/Linux et l'iPod.

Mais depuis la 5G, le format a changé. Forcément, cela a rendu les bibliothèques totalement inutilisables pour mon zouli iPod vert. Mais l'ironie du sort, c'est qu'en fait, Apple utilise à présent un format qui est fondamentalement connu, documenté, et libre : SQLite. Oui, SQLite, dont le code source est du Domaine Public. C'est en passant d'un format fermé à un format totalement ouvert que ma Buntu a été rendue muette devant l'iPod Nano 5G.

La bonne nouvelle, c'est que ce format ouvert va immensément faciliter la tâche des codeurs qui devront mettre à niveau les programmes. La mauvaise, c'est qu'aujourd'hui, là, maintenant, j'ai un lecteur MP3 aussi utile qu'une bicyclette à un poisson. Et qui m'a coûté 179,90 EUR, éco-taxe comprise.

Alors je suis retourné au magasin, et j'ai demandé un remboursement. On m'a conseillé, si je voulais, d'aller choisir un autre lecteur et que j'aurai la différence en bon d'achat. J'ai pris un Samsung YP-R0. Non seulement il a été immédiatement reconnu (après passage en mode MSC plutôt que MTP) par Ubuntu, mais il lit les fichiers OGG et FLAC - ce que ne fait pas l'iPod ; et je rippe tous mes CD en OGG habituellement - ainsi que les DivX. Il fait radio FM, aussi. Et la longévité annoncée de la batterie est meilleure. Et il m'a coûté 70 EUR de moins.

Bonus : à la fin de la doc, j'ai remarqué la copie de la licence GPL, c'est que le lecteur utilise des programmes libres, comme le noyau Linux. Yeah.

Y'a moins bien, mais c'est plus cher.


11/01/2010

Maux de passe (deuxième partie)

11 jan 2010 - 23:39

Suite de l'épisode précédent. Toujours Polar, toujours Geek.

Lire la suite de : 'Maux de passe (deuxième partie)'

10/01/2010

Polar Geek, version moderne

10 jan 2010 - 00:40

Le tout nouveau tout frais "Polar Geek" est en ligne depuis ce soir. J'ai eu la chance de le développer from scratch, en utilisant Django, en à peu près 6 heures de labeur, étalées sur une journée (2 heures le matin, 4 le soir).

J'y intègrerai progressivement des liens vers les textes qui me parviendront, soit par email, soit via le compte @polardeuxzero (cf. la page "à propos").

Comble du bonheur geek, on y trouvera un flux RSS.

Au pire, si tu veux contribuer mais que tu n'as pas de blog ou d'espace d'expression électronique, tu peux également m'adresser le texte par e-mail et je tâcherai de lui trouver une place dans mon maaaaaagnifique gestionnaire de contenu révolutionnaire (cough).

d'ailleurs, à propos de magnificence, si un designer passe par ici et a envie de bénévoler au secours de mes maigres talents graphiques, qu'il n'hésite pas à se faire connaître. mais je serai pas vexé si tu veux pas bosser gratuit.

Et allez ! contribuez ! contribuez ! contribuez !


08/01/2010

Les hooks mercurial à ton service

08 jan 2010 - 19:32

Voici une recette pour mettre à jour un site statique, en utilisant simplement mercurial et ses mécanismes appelés "hooks".

Pour mettre à jour ce genre de site, on peut utiliser rsync ou un simple client FTP, mais il peut parfois apparaître des différences entre les deux copies (reliquats de renommages, suppressions, déplacements...).

La recette peut certainement être étendue à des sites dynamiques (en PHP, par exemple) ; il sera d'autant plus difficile de l'utiliser dans le cas où la structure de données "cible" aura migré (ajout de champs dans la base de données, par exemple). Autant dire que pour la v0.0.1 de Polar Geek <http://polar-geek.org>, ça marche super bien. Pour une appli Django, ce sera beaucoup plus hasardeux.

Prérequis :

  • Mercurial installé sur le poste local
  • un serveur sur lequel tu as un accès ssh
  • sur ce même serveur, mercurial doit être installé

Pour l'exemple qui suit, j'utilise les serveurs d'alwaysdata <http://alwaysdata.com>, qui ont tout ce qu'il faut là où il faut.

En distant :

Tout d'abord, se connecter à son serveur via SSH

$ ssh <login>@ssh.alwaysdata.com
Password:
$ mkdir --parents /chemin/vers/mon/projet
$ cd /chemin/vers/mon/projet
$ hg init

Ce répertoire sera le réceptacle du projet, c'est à dire une copie du dépôt. J'utilise le chemin absolu, mais il sera peut-être plus court de passer par le chemin relatif (depuis le "home")

En local :

$ hg init projet
$ cd projet
$ mkdir www
$ cd www
$ echo "coucou" > index.html
$ hg add && hg ci -m "premier commit"

Note

Important : les fichiers du site (c'est à dire ceux qui seront exposés sur le virtual host, ceux qui seront effectivement en ligne) doivent se trouver dans un sous-répertoire de "projet". Pourquoi ? parce que s'il en est autrement, n'importe qui pourrait faire

hg clone http://monsite.com/ et récupérer l'intégralité du dépôt. Ça peut être négligeable pour quelqu'un, mais si le site contient du code, des identifiants de BDD, des fichiers "cachés" qui ne doivent pas être révélés, ça peut être gênant. Si le site est effectivement "caché" dans un sous répertoire, on ne pourra pas accéder au dépôt via http.

Il faudra donc, au moment du paramétrage du virtual host, faire pointer ton domaine vers: /chemin/vers/mon/projet/www/

Que se passe-t-il si on "push" le dépôt à ce moment-là ? On pourrait imaginer que, automagiquement, le code distant est synchronisé et les fichiers mis à jour. En fait, non. Ce qu'on met à jour, c'est le dépôt, pas les fichiers en eux-même. De la même manière qu'en faisant hg pull, on ne met pas à jour les fichiers, et qu'en cas de nouveautés, il faut ajouter la commande hg update pour que la copie en local soit le miroir de la copie distante. On peut encore résumer ça à une commande : hg pull -u.

Et quand on fait push, c'est la même chose, malheureusement. Je m'explique - je démarre en local :

$ hg push ssh://<login>@ssh.alwaysdata.com//chemin/vers/mon/projet/
#.... quelques messages concernant la mise a jour
$ ssh <login>@ssh.alwaysdata.com
Password:
$ cd /chemin/vers/mon/projet
$ ls -al
drwxrwxr-x  3 <login>  <login> 4096 2010-01-08 15:06 .
dr-xrwx--- 16 www-data <login> 4096 2010-01-08 15:06 ..
drwxrwxr-x  3 <login> <login> 4096 2010-01-08 15:06 .hg

Mais où est le répertoire "www" ? Physiquement, pas là. En fait, il est enregistré dans l'historique du dépôt, mais il se cache bien dans le dossier caché .hg. Pour le voir apparaître : hg update sur le distant et paf le site est à jour.

Mais c'est nul. Ça veut dire que pour une mise à niveau d'un dépôt, il faut se connecter au serveur ssh après avoir fait un "push". Débile. Bouh. Remboursez. C'est gratos ? Ah ben remboursez quand même.

Heureusement qu'on peut paramétrer les "hooks" dans Mercurial. Les hooks, ce sont des actions qui seront exécutées dès lors qu'un "signal" sera apparu sur un dépôt donné. Sur le serveur distant, il suffit de créer (ou modifier) le fichier .hg/hgrc dans le dépôt et ajouter les deux lignes qui suivent.

[hooks]
changegroup = hg update

En français, ça signifie: "dès qu'un changement intervient sur le dépôt, lance la commande 'update'."

Pour s'assurer que ce "hook" fonctionne, il suffit de le tester. Depuis la copie locale, d'abord :

$ echo " les gens" >> index.html
$ hg ci -m "et on fait coucou les gens"
$ hg push ssh://<login>@ssh.alwaysdata.com//chemin/vers/mon/projet/
# ... Messages...

Si tu regardes sur le serveur en distant, le fichier index.html doit être synchrone (ainsi que tous les autres fichiers qui ont été modifiés, déplacés, supprimés, etc.). Bref, le dépôt est l'image fidèle de la copie locale.

Youpi.

Bonus track - je suis feignant

La feignantise, c'est notre moteur. Notre credo. Alors, taper sans arrêt l'adresse du serveur pour les push/pull, etc, c'est la plaie. Il se trouve que si on tape juste la commande hg push ou hg pull, l'adresse du dépôt sur lequel on veut pousser ou tirer est celle définie par le dépôt "default".

Mais comment définit-on ce dépôt, me demandes-tu ? Rien de plus simple. Sur la copie locale de ton dépôt, ouvre ton éditeur de texte favori et ajoute les lignes suivantes au fichier .hg/hgrc:

[paths]
default = ssh://<login>@ssh.alwaysdata.com//chemin/vers/mon/projet/

C'est ainsi qu'on définit le chemin du dépôt par défaut. On peut bien évidemment définir autant de "chemins" qu'on veut, si on aime avoir une copie chez soi et une copie sur bitbucket, sur une clé USB et sur un autre répertoire, etc... par exemple :

[paths]
default = ssh://<login>@ssh.alwaysdata.com//chemin/vers/mon/projet/
bb = ssh://hg@bitbucket.org/<login>/monprojet/
usb = file:///media/disk/monprojet/
one = file:///home/<login>/Ubuntu One/monprojet/
db = file:///home/<login>/Dropbox/monprojet/

Pour pousser sur chacun de ces chemins, une commande:

$ hg push bb # pour pousser sur bitbucket
$ hg push usb # pour pousser sur la clé USB

Oui, des fois je suis un peu paranoïaque, mais au moins, mon "talk" du Lugradio Live se trouvait à sept endroits différents, sur des supports physiques et distants.

Conclusion

Cette manière de faire n'est peut-être pas la meilleure, et est loin d'être la seule. En tous cas, sur des projets "non-sensibles", concernant des mises à jour de media simples (pages HTML, CSS, images, etc), c'est la plus directe: de la même manière que je commite offline, je peux propager mes modifications sur mon serveur de production avec la même commande. On peut bien évidemment rendre la chose plus amusante, en faisant en sorte que le dépôt distant ait sa branche active appelée "prod", et qu'on merge sur cette branche une fois que les modifications sur la branche "default" ont été torture-testée en amont.

Après, tout est affaire de goût. On peut aussi préférer l'excellent Fabric pour les cas où la mise à niveau d'une application nécessite un peu plus qu'une synchronisation de fichiers (et encore... mixer Fabric et Mercurial, ça peut encore être un ticket gagnant)