dimanche 30 octobre 2011

Retour aux sources.list

Dans ma jeunesse, il y a maintenant des années de cela, j'aimais bien tester différents systèmes d'exploitation, différentes distributions, c'était fun de passer des heures à configurer un système pour qu'il fonctionne un minimum, puis tout jeter et recommencer avec un autre. Et puis un jour, je me suis dit que ça devait aussi être sympa d'utiliser quelque chose plutôt que de seulement installer, du coup j'ai installé une bonne fois pour toute ce que je considérais comme le système parfait : Debian instable.

Après six mois d'utilisation et la troisième fois que le son cessait de fonctionner suite à une mise à jour, j'ai de nouveau décidé de changer pour une nouvelle distribution qui commençait à faire parler d'elle : Ubuntu. Et pendant les 5 (enfin, au moins 5, ma mémoire n'est plus ce qu'elle était...) années qui ont suivi, j'ai mangé de la Ubuntu à toutes les sauces : Ubuntu sur mes machines persos, Kutuntu au boulot, voir même des Ubuntu sur des serveurs et dans l'ensemble l'expérience était plutôt satisfaisante.

Et puis avec le temps et les nouvelles versions tout les 6 mois, j'ai découvert quelque chose de nouveau : les releases sortant avec des bugs critiques connus, identifiés et surtout non résolus. Après m'être fait mal au moins deux fois, j'ai décidé de retarder les mises à jour de mon système, de mettre une marge de sécurité après la sortie d'une nouvelle version ; espérant que les problèmes les plus gênants seraient corrigés pendant cette période.
Cette technique fonctionnait plutôt pas mal et Ubuntu a donc décidé de changer de stratégie pour me frustrer à nouveau : la nouvelle version allait inclure un nouveau gestionnaire de fenêtre spécial Ubuntu et spécialement mauvais aussi, Unity.
Sauf que moi, je suis un vieux con réactionnaire, je veux mon Gnome 2 ! Et donc, j'ai décidé de ne plus changer de version... sauf que bien sur, ce n'est pas une position tenable, même si il y a toujours des mises à jour, elles sont sur de vieilles versions des logiciels et peu à peu, je voyais mon système prendre la poussière.
À côté de ça, Ubuntu a aussi développé des nouvelles fonctionnalités intéressantes comme le système incapable de s'arrêter tout seul (oui, d'autres distributions utilisent un système complètement dépassé qui tue les processus récalcitrants... chez Ubuntu, ou tout est parfait, ils font confiance aux démons pour mettre fin à leur existence seuls...) et qui m'obligeait donc à faire quelques kill à la main avant l'arrêt de ma machine.

L'arrivée récente d'une nouvelle machine dans ma vie a fini de me convaincre qu'il fallait que je me sépare d'Ubuntu et je suis donc retourné à mon amour d'enfance : Debian. Et j'avoue que depuis je vis une union heureuse, stable (ouais, et pourtant j'utilise la version "testing") et pleine de mises à jour réussies.
En plus, cette fameuse nouvelle machine (encore un portable, c'est plus pratique pour prendre le train) a un énorme avantage par rapport à la précédente : pas de pavé numérique ! De la à dire que cela fausse mon jugement...

dimanche 11 septembre 2011

spacef

Some time ago, I started working on a gopher server (gopher is the protocol behind the gopherspace, an important part of Internet) and I choose to write it in a modern, efficient language: C. The gopher protocol is mostly about sending tab-separated data from the server to the client in response to the requested path. So, most of the parsing work is done on the client side and the server just have to generate this data.

But recent implementations of gopher serves introduced a new concept: Gophermaps: those are server side files that describe what should be displayed to the client. That also means the server has some parsing work to do. But it should be ok, C comes with maybe one the best string manipulation library ever made with short, descriptive function names (for instance, strpbrk or strrchr) and a sane way to store string length (I really wonder why would anyone use an alternate implementation such as bstring).

So, the problem was quite simple: I wanted to read several pieces of non-tab data separated by tabs and wrote something like that:
sscanf(buffer, "%s\t%s", &first, &second);
I expected it would read some non-space data (yes, there's already a problem here if there's space before the tab), then a tab, then some other non-space data. It doesn't.

After reading the man page and doing some tests, I understood a few things about my expression:
  • %s first skips leading spaces, before reading non-space data;
  • \t match any number of spaces, in fact any space in a pattern match any number of spaces.
So my scanf call was the same as this one:
sscanf(buffer, "%s%s", &first, &second);
and is equivalent to this regular expresssion:
"[:space:]*([^:space:]+)[:space:]*([^:space:]+)"
not really what I wanted to read...

First I needed to figure how to read non-tab data only, and it happens that this part was simple enough. The square brackets in scanf patterns work somehow the same than in regular expression. So %[^\t] will read a sequence of non-tab characters (ho yeah... a \t between square brackets only match a tab).

Next I have to read the "only one tab" part and this part was a lot more fun. %[\t] would match a sequence of tabs. To match only a specified number of tabs, you have to use a decimal between the % and the square bracket. The pattern is now %1[\t] but there still a problem: each conversion specification (those %... things) needs to be stored in some output variable and that would be stupid to store a tab each time I need to read one. Scanf provides the * modifier that tells to discard output of the conversion specification. The final pattern for reading a that is then %*1[\t].

And the correct version  of my scanf is:
sscanf(buffer, "%[^\t]%*1[\t]%[^\t]", &first, &second);
For those curious about my gopher server, the mercurial repository is here: http://hg.tuxfamily.org/mercurialroot/gophrier/gophrier/ and there's a mirror here: https://bitbucket.org/guillaume/gophrier

samedi 3 septembre 2011

Freeplug le dauphin

Je suis abonné Free depuis maintenant de nombreuses années et j'ai, à ce titre, eu le plaisir d'utiliser plusieurs versions de leur fameuse Freebox, et surtout la joie sans cesse renouvelée de migrer de la version précédente à la nouvelle.
Ayant sorti une nouvelle box récemment (enfin, heu... ouais, décembre 2010, pas si récemment en fait...) et tout le monde autour de moi m'expliquant qu'elle allait complètement changer ma vie (d'où le nom « révolution »), je me suis décidé à sauter le pas de nouveau et faire la mise à jour.

Donc, je vous passe les détails, mais je fais l'échange, j'installe et tout se passe à peu près bien... tout étant dans le « à peu près ». En fait, c'est un peu ma faute aussi, je cherche un peu les ennuis ; récemment j'avais souscrit à l'option Multi TV qui permet d'avoir deux gros boitiers moches au lieu d'un seul et donc, de regarder la télé Free sur plusieurs postes.
Ce truc absolument génial permet, par exemple, de regarder « Sauvez Willy » en même temps que vous épluchez des patates, ce qui du coup rend le film vachement plus intéressant.

C'est à ce moment là que j'ai découvert les Freeplug : des boitiers CPL en plus gros et devant être associés (ça ne sert à rien, mais Orange le fait sur ses Livebox, donc ça doit être bien). Avec ma nouvelle Freebox, j'ai reçu de nouveaux Freeplugs, une nouvelle version, plus petits, plus simples d'utilisation, tout ça. Sauf que voilà, pour pouvoir brancher mon boitier supplémentaires il fallait que j'associe un ancien Freeplug à mon couple de nouveaux et, a priori, ils semblaient assez réfractaires pour le plan à 3.

Après avoir cherché un peu sur les forums et trouvé des solutions innovantes telles que danser autour des boitiers en invoquant un dieu sumérien, je me suis décidé à appeler le support Free. Là au niveau 1, je suis tombé sur une demoiselle (sûrement à l'autre bout du monde vu la qualité de la transmission) qui m'a fait refaire (lentement) la plupart des manipulations que j'avais trouvées sur les forums (bon, pas la danse autour des boitiers) ; mais non, toujours pas d'association. Au bout d'un moment, elle décide de me faire passer en niveau 2.

Là, clairement, j'ai affaire à un technicien (en France, en plus) qui rapidement m'explique la bonne procédure pour associer des Freeplug, quels que soient les Freeplug et quelle que soit la situation. Et donc, pour vous faire économisez plus d'une heure de hotline, je vous fournis gratis cette procédure :

Association des Freeplug
  1. Faire table rase sur les Freeplug : chaque Freeplug doit être réinitialisé, surement pour couper une éventuelle association précédente. Pour les nouveaux Freeplug, il faut appuyer 15 secondes sur le bouton lumineux, vous devriez le voir passer à l'orange, puis relâcher. Pour les anciens Freeplug, il faut appuyer sur le minuscule bouton noir pendant 10 secondes, les diodes devraient clignoter, puis repasser au vert.
  2. Une fois que tous les Freeplug (anciens ou nouveaux) ont été réinitialisés, il faut les associer deux par deux. Dans mon cas, j'ai d'abord associé les nouveaux, puis un nouveau avec un ancien. Sur un nouveau Freeplug le passage en « mode association » se fait en appuyant deux secondes sur le bouton lumineux puis en relâchant. Le voyant devrait clignoter jusqu'à ce qu'il trouve un copain. Sur les anciens Freeplug, il faut appuyer au moins une seconde sur le petit bouton noir. Pareil, il devrait clignoter jusqu'à ce qu'il trouve un copain.
Clairement, l'étape cruciale, c'est cette fameuse réinitialisation. Sans ça, pas d'association.

À partir de ce moment, les choses se sont simplifiées. Mon boitier supplémentaire avait accès au réseau mais ne voyait pas le serveur. Ah mais oui, forcément, il faut faire un « hard reboot » : retirer l'alimentation du boitier, appuyer sur un bouton de la façade, rebrancher l'alimentation. On y est presque, le boitier tente de s'installer mais le téléchargement loupe (la fameuse erreur 3), donc nouveau hard reboot... encore et encore, au moins 10 fois en tout. Mais au bout d'un moment, il y arrive et la télé est de nouveau là et je vais de nouveau pouvoir regarder les aventures de mon dauphin préféré dans ma cuisine ! Cool !

Voilà, c'était surement la pire migration de Freebox que j'ai eu à faire, mais bon rien de vraiment terrible non plus. Surtout si vous n'avez pas de boitier supplémentaire. À part ça, ma vie n'a pas changé, mon débit est toujours aussi pourri ;  certaines chaines on l'air de mieux passer sans que je ne comprenne vraiment pourquoi. Par contre, je peux appeler des portables depuis mon fixe, c'est cool parce que je ne consommais déjà pas tout mon forfait portable.

lundi 29 août 2011

Khaos à Rouen

Le 16 décembre sera une journée exceptionnelle : Arch Enemy en concert à Rouen ! Mais pour moi le véritable événement est que j'ai réservé une place... ouais, parce que les concerts, c'est pas trop mon truc : plein de gens, de la chaleur et la sueur qui va avec, un son et un confort souvent approximatif ; mais bon, je ne pouvais pas laisser Angela passer à Rouen sans aller la voir.

Donc voila, je commande mon billet et là, me saute à la figure un autre détail des concerts que je n'aime pas : la première partie. Mon problème est que j'ai généralement beaucoup de mal à appréhender la musique, il me faut beaucoup d'écoutes avant de "rentrer dedans" ; pour donner une idée, pour moi écouter un groupe inconnu en live est aussi agréable qu'une après midi à découper du bois avec une tronçonneuse mal accordée.

Ma seule solution est donc d'écouter un maximum d'album des trois groupes de la première partie avant le 16 décembre.

Le premier des trois, Chtonic, est un groupe de Black Metal originaire de Taïwan. Leur dernier album, Takasago Army, est disponible sur musicme et ça sonne plutôt bien. J'aime surtout le côté "musique traditionnelle taïwanaise" qu'ils introduisent dans leur musique.
Plutot sympa, surement un truc que je vais écouter facilement dans les temps qui viennent :) Je vous ai aussi trouvé une vidéo sur youtube (de l'album précédent) :



Le second groupe, Arkan, est aussi une bonne surprise. Eux, ce sont les "locaux" de l'étape : ils sont français et font les quatre dates de Arch Enemy en France. Leur truc, c'est de faire du métal oriental et j'aime beaucoup aussi. Leur deux albums sont dispos sur deezer. Par contre, pas de vidéo et pas (encore) de page Wikipédia non plus, je vous donne le lien vers leur site pour vous consoler : http://www.arkan.fr/ (a priori, il y a moyen d'écouter un titre).

Pour finir, Warbringer, un groupe Thrash metal originaire des États unis. Et quand je dis Thrash metal, c'est vraiment du Thrash metal ; en écoutant, j'ai eu comme l'impression de faire un bond d'une trentaine d'années en arrière ; sauf que le groupe s'est formé en 2004. Musicalement, c'est pas mon truc, c'est pas vraiment mauvais, juste chiant à mourir... et puis si je veux écouter ce genre de choses, il y a toujours les vieux Metallica, Megadeth ou Slayer.
Ils ont deux albums (mais pas le dernier) disponibles sur deezer et quelques clips sur youtube, dont celui la (choisi au hasard, j'aime pas) :



Enfin, pour ceux qui vivent dans une caverne, je vous met une vidéo d'Arch Enemy, mais bon... j'espère que vous écoutez tous ça pour vous endormir le soir et faire de beaux rêves.