L’art du commit

Lors du Netfilter Workshop 2007, j’ai eu le plaisir de revoir Patrick McHardy et la chance de rencontrer David Miller (Davem) le mainteneur de la couche réseau de Linux.

Patrick envoie assez souvent des séries de patchs impressionnantes à Davem pour demander leur intégration dans le noyau officiel. L’ensemble des contributions des développeurs de Netfilter qui est ainsi transféré lors de ces envois.

Lors d’un des repas, j’ai cité à Davem l’un des plus gros envois de Patrick et je lui ai demandé ce qu’il ressentait lorsqu’il recevait une telle série de patchs. Sa réponse a été rapide :

Je sais que ma journée est finie

Son sourire en disant cela m’avait marqué et je viens de le comprendre en lisant le dernier envoi de Patrick.

Le premier mail de la série est intitulé :

[NETFILTER 00/49]: Netfilter update

Il comporte notamment une série impressionnante de 35 patchs de la main de Patrick. Parmi ceux-ci un gros travail effectué sur nfnetlink_queue, sujet dont je m’occupe particulièrement. J’ai donc relu l’ensemble des patchs pour voir de quoi il en retournait.

Le découpage des patchs est minutieux, chacun est la réponse à un objectif simple clairement précisé dans l’en-tête du mail. Si l’explication n’est pas suffisante, celle-ci est complété par un texte plus long qui avance les raisons des modifications. Prenons par exemple le patch 46. Le mail correspondant commence par :

[NETFILTER]: nfnetlink_queue: remove useless enqueue status codes

The queueing core doesn’t care about the exact return value from
the queue handler, so there’s no need to go through the trouble
of returning a meaningful value as long as we indicate an error.

Le sujet avance l’idée globale et le paragraphe suivant explique clairement les motivations. Comme le patch comporte uniquement cette modification, il est facile de le lire pour comprendre comment cela a été fait et si cela l’a été bien.

Je comprends donc bien le sourire de Davem, travailler avec quelqu’un comme Patrick McHardy est un régal. Un exemple à montrer dans toutes les écoles.

MacOS X, la grande salade

Je viens de passer ma journée à travailler sur Mac OS X à la finalisation du client pour NuFW. Comme d’habitude avec ce système d’exploitation cela a été une drôle de journée.

Ce mélange entre puissance d’Unix et expérience end-user est vraiment déroutant. J’en ai encore fait les frais en utilisant le logiciel Platypus. Ce logiciel très pratique permet de générer un script exécutable. Tiens d’ailleurs, le principe en soi est bizarre sous Unix.

Je disais donc, qu’en utilisant Platypus (ornythorynque pour les francophones) j’ai mis très longtemps à comprendre que le seul moyen de changer l’icone était de déposer une autre icone au dessus de celle présenté sur la page du logiciel. Je n’ai pas percuté sur ce point mais venant d’éditer un script shell, il ne me semblait pas intuitif de procéder de la sorte.

MacOS X, un grand mélange vous disais-je, un peu comme l’ornithorynque…

La Commission Européenne l’affirme : La “documentation” Microsoft est atroce

J’ai très souvent et notamment sur ces pages décrié la documentation fournie par Microsoft. Malgrè un effort d’impartialité certain quant aux impressions que je livrais alors, une partie de moi se demandait si mon analyse n’était pas entachée par mon addiction à GNU/Linux.

Que nenni, la commission européenne menace Microsoft de sanctions car la documentation fournie ne suffit toujours pas à assurer l’intéropérabilité notamment pour le développement de services. Le commissaire chargé de l’affaire est assez direct :

“Overall, the process of using the documentation is an absolutely frustrating, time-consuming and ultimately fruitless task”

Un traduction de cette phrase est :

“Globalement, le fait d’utiliser cette documentation est totalement frustrant, gaspilleur de temps et complètement vain”

Lorsque j’ai vu ces lignes sur la première page du Financial Times, j’ai difficilement résisté à l’envie de fredonner l’Hymme à la joie 😉

Pauvreté sémantique et misère sexuelle sous Windows

Il semble rééllement que l’heuristique microsoftienne consiste à se limiter au premier aspect des choses sans chercher à aller au delà. L’exemple de code suivant est très révélateur. Le code POSIX :

pthread_t* checkthread;
pthread_mutex_t * mutex;
pthread_cond_t *check_cond;

devient

HANDLE checkthread;
HANDLE mutex;
HANDLE check_cond;

Là où POSIX mets du sens, on se trouve sous Windows face à un vulgaire “manipulateur”. Pour en revenir à un équivalent sexuel, on passe d’un “Quelles positions aujourd’hui chérie ?” à “On baise ?”.

Caisse d’épargne, Optimisation ou incompétence ?

La Caisse d’épargne comme toutes les banques propose un site web pour gérer ses comptes. On peut y faire des opérations courantes comme les virements et même (enfin sous certaines conditions) vendre et acheter des SICAVs et autres obligations.
L’ensemble du site est utilisable sous Firefox sauf un seul champ dans un formulaire. Malheureusement il s’agit du champ permettant de saisir le nombre d’objets à vendre ou à acheter (il ne répond pas quand on clique). Bref, il n’est pas possible de passer un seul ordre sous Firefox (ou mozilla).

Il y a quatre mois suite à la découverte d’un problème de sécurité sur leur système (une fuite d’information interne lors d’échanges en tant que simple utilisateur), j’avais été en contact avec une personne asez proche du développement auquel j’avais exposé le problème. Malheureusement, pas de résolution du problème à l’horizon.

Lors d’un appel au centre de support pour une autre problématique, je reviens à la charge. On me répond :

Le site est optimisé pour Internet Explorer

Je ne pensais pas qu’en 2005 on me tiendrait encore ce discours, je rétorque alors

Ce n’est pas de l’optimisation, c’est de l’incompétence

Bizarrement, cela a eu un effet “Sésame ouvre-toi” et je me suis retrouvé en ligne avec le responsable qui a refusé de penser qu’il était possible de libérer 1/2 journée de ressource pour régler ce problème de javascript.

Après avoir raccroché, je me dis que si c’est un problème javascript, il suffit de le désactiver. Malheureusement, ce n’est pas aussi simple, tous les liens sont en javascript. Il faut donc louvoyer…

Bon allez, je suis bon prince, je vous dit comment passer un ordre sous firefox :

  1. allez à la page de passage d’ordre
  2. désactivez javascript
  3. saisissez le nombre d’actions
  4. activez javascript
  5. validez le formulaire

Bon, c’est plus simple et plus rapide que de rebooter mais un tel manque de souplesse et d’écoute du client me donne vraiment envie d’aller voir ailleurs.

Comment recruter pour une conf de barbus

Imaginez que vous deviez faire de la publicité pour une conférence sur un langage. Pas facile non ? Trouver un angle d’attaque original et attractif semble assez difficile, mais il suffit de penser à des choses universelles :

Hé oui, une conférence c’est un peu comme un club de rencontres (à condition d’aimer les barbus).

Le retour du netstat en furie

Allez cette fois-ci je ne pars pas dans un délire mais je vais vous donner de la matière. En travaillant sur le client windows pour nufw, j’ai trouvé une page sur le site de la respectable société HSC. Ils décrivent de manière précise certains des problèmes relatif à netstat. Cela va s’en dire qu’il s’agit des problèmes rencontrés avant d’avoir viré la dame pipi. L’article est très technique et très sérieux donc prévoyez un peu de temps avant de le lire (quelques mois si vous n’êtes pas informaticien, le temps d’apprendre les bases 😉 .
Je profite de cette brève pour tirer mon chapeau à l’auteur, Jean-Baptiste Marchand. j’aurais sans doute eu du mal à rester aussi calme et impartial en rédigeant un tel texte.

Des pilotes en Java par défaut ?

Je vous entends tous dire :
“Et la marmotte, …”

Mais si je suis sérieux , c’est une des nouveautés du Windows DDK 2003 SP1 !

J’en tiens pour preuve ce qu’il se passe lorsque j’ai lancé build dans le répertoire des drivers d’un projet respectable trouvé sur internet (Celui-ci se contente de manière bien politiquement correcte d’inclure le Makefile du DDK et de lui faire confiance.)
Dès que la compilation se lance, la console est noyée sous les messages d’erreurs :
jvc command not found
Ne sachant pas ce que c’est jvc (jvc télécommande not found, j’aurais compris mais là non), je googlize et apprends qu’il s’agit du compilateur Java de Microsoft.

Après un moment de stupeur, je tente de trouver un moyen de lui indiquer un autre compilateur. J’ouvre le Makefile avec vim, je modifie quelque chose et je relance la compilation. Rien à faire, même état. En désespoir de cause, j’ouvre un fichier avec EDIT et je quitte. Je relance la compilation et, Ô miracle, il trouve le bon compilateur.

Bon, j’arrête ce post là, pas la peine de trouver une chute, on ne peut pas tomber lorsque l’on est au fond du trou.

Des paramètres constants et autres fioritures

L’API système Windows est vraiment fascinante à plusieurs égards.

D’un côté, elle tient de Perl, il y a toujours plus d’un moyen de faire la même chose. Le problème vient ici qu’il ne s’agit pas de trouver des solutions algorithmiques différentes à un même problème mais qu’il y a de multiples systèmes parallèles pour effectuer une même tâche. Il s’ensuit une complexité inutile amplifié par la puissance de l’outil de recherche disponible sur MSDN.

D’un autre côté, elle tient du grand-guignol le plus trépidant. De nombreuses fonctions ont un nombre invraisemblable de paramètres. Bon, cela reste admissible, mais lorsque l’on sait que certains des “paramètres” doivent être à des valeurs fixées, alors là on sort du rationnel pour entrer dans le n’importe quoi le plus total. Bon prince, je leur file un tuyau : #define et vous je vous donne un exemple.