Blog Haypo

Aller au contenu | Aller au menu | Aller à la recherche

lundi 5 décembre 2011

La FSF France met en ligne de code source d'EdenWall

L'association FSF France vient d'ouvrir le site ufwi.org qui contient le code source libre de mon ancien employeur (EdenWall, anciennement INL). C'est une excellente nouvelle pour les clients d'EdenWall (la société ayant été liquidée en août 2011), pour les anciens développeurs d'EdenWall (qui ont à nouveau accès au code qu'ils ont écrits et vont pouvoir le réutiliser) et pour toute personne proche des projets EdenWall (NuFW, NuFace, NuLog, etc.).

C'est également une excellente nouvelle pour la communauté du libre, c'est une belle démonstration que le logiciel libre survit à la liquidation de son éditeur. Les développeurs et sociétés intéressés au code vont pouvoir en reprendre le développement, et des sociétés de service vont pouvoir proposer du support pour les appliances EdenWall en tout sérénité.

Pour comprendre d'où vient le code source et dans quelle condition il été remis en ligne, voici un historique du code et de son éditeur, la société INL, devenue EdenWall entre temps.

Avant mon arrivée à INL (2003-2005), nufw.org

Logo et mascotte d'INL : nupik le porc-épic

Comme je l'ai écrit dans un article précédent, j'ai choisi de travailler dans la société INL parce qu'elle affichait son implication dans le libre, défendait les valeurs du libre et s'en servait pour vendre ses services. Les dépêches et journaux LinuxFR suivants, écrits par les deux cofondateurs Éric Leblond et Vincent Deffontaines, en témoignent :

Les principaux logiciels étaient le parefeu NuFW et l'éditeur de jeu règles de parefeu NuFace. À cette époque, NuFace était composé d'un backend en Python (nupyf) et un frontend web (PHP4, HTML, Javascript, CSS). Ces logiciels ont été écrits par Éric Leblond, Vincent Deffontaines et Jean Gillaux. Ils ont été indirectement financés par les offres de service Linux (administration système essentiellement).

Le code de NuFW était publié sur le site nufw.org (nom de domaine déposé en août 2003). Le code de NuFace était hébergé sur le site de l'entreprise, inl.fr (nom déposé en mars 2004).

INL 2006-2008, software.inl.fr

Appliance EdenWall 3

Logo de l'appliance EdenWall

J'ai rejoint la société INL en février 2006. L'époque INL (2006-2008) a été prolifique au niveau de la publication de logiciel libres.

Les développements de NuFW et NuFace se poursuivent pendant cette période. Le logiciel NuLog, qui existait déjà avant mais n'était pas mis en avant, a été réécrit et publié. La nouvelle version (NuLog 2) a été écrite par Romain Bignon. J'ai d'abord contribué à NuFW, puis j'ai beaucoup travaillé sur NuFace jusqu'à en écrire une nouvelle version majeure (NuFace 2).

NuFW, NuFace et NuLog ont été inclus de plus en plus régulièrement dans des parefeux conçus spécialement pour des clients. C'est aussi durant cette période que le produit EdenWall 3 est né : une Debian Stable avec les 3 logiciels cités, plus de nombreux outils d'administration (configuration système), de surveillance système (rrdtools) et une petite infrastructure de gestion de clés publiques (PKI, première version de nupki). Les logiciels EdenWall 3 étaient hétérogènes au niveau des langages de programmation (Python, PHP, Perl, bash, Javascript, ...), les logiciels communiquaient peu. L'ensemble fonctionnait bien et a été vendu à plusieurs clients (entre 5 et 10, je ne sais pas trop) sous forme d'une appliance (rackable, format "1U").

Site software.inl.fr

En dehors des logiciels "majeurs", de nombreux petits outils écrits par les différents développeurs étaient diffusés sur le site software.inl.fr. Ce site servait de vitrine technologique pour démontrer les compétences de l'équipe, les développeurs et la direction y trouvaient leur compte. Certains logiciels étaient écrits durant le temps libre des développeurs, mais les développeurs acceptaient d'associer INL à leur projet, parce que ça semblait naturel et que tout le monde y gagnait.

NuFW a 3 ans, joyeux anniversaire

Liste des logiciels libres hébergés sur software.inl.fr :

  • GvGen : bibliothèque de génération de graphiques (utilisant Graphviz)
  • HAL-GK : Fork du parefeu NSM, un "proxy multi protocoles"
  • IPy
  • lagfactory : Script simulant une lenteur réseau ou la perte de paquets vers une cible donnée
  • macfly : bibliothèque modifiant l'horloge d'un programme. Projet que j'ai développé pour le CNES et publié sous licence libre (avec l'accord du CNES).
  • nf3d : Outil de visualisation 3D des logs Netfilter, voir aussi la présentation au SSTIC 2008 (diaporama)
  • nflog-bindings : Binding haut niveau de la bibliothèque libnetfilter_log
  • nfqueue-bindings : Binding haut niveau de la bibliothèque libnetfilter_queue
  • NuCentral : Framework de gestion de modules
  • NuConntrack : Monitoring et manipulation du suivi de connexion (conntrack) Netfilter
  • NuFW : Le parefeu authentifiant, accompagné de modules SSO pour Apache et Squid (squid_nufw_helper, mod_auth_nufw) et d'un client graphique (NuApplet2)
  • NuFace : interface de gestion de jeux de règles du parefeu
  • NuLog : Analyse et reporting des logs réseaux
  • NuPHP : Bibliothèque PHP utilisée par NuFace et autres projets PHP
  • Ouadjet : Généateur de règles modsecurity pour un proxy web inverse
  • pynetfilter_conntrack : Binding Python de la bibliothèque libnetfilter_conntrack
  • spamstats : Analyse et graphiques de logs spamassassin
  • Valpyk : Parseur de logs Valgrind
  • Wolfotrack : Gestion du suivi de connexion Netfilter avec le jeu Wolfenstein 3D (voir la vidéo sur youtube). Les ennemis étant des connexions réseaux. Tuer un enemi tuait effectivement les connexions actives du parefeu. Cette modification a été écrite par Sébastien Tricaud et Laurent Defert dans leur temps libre, et publiée sur le site software.inl.fr.

Le site software.inl.fr ayant fermé, j'ai indiqué le nouvel hébergement de chaque projet, pour les projets qui ont eu la chance d'avoir un nouvel hébergement. Le code source des projets HAL-GK, Ouadjet, spamstats, Valpyk et Wolfotrack a été perdu lors de la fermeture de software.inl.fr. Les projets NuCentral, NuConntrack, NuFW, NuFace et NuLog sont maintenant hébergés sur ufwi.org (voir plus bas).

software.inl.fr contenait également un miroir public du dépôt Subversion d'INL. Certaines parties n'étaient pas publiées, mais pour les projets publics : le code était en ligne en moins de 24h. INL était donc très transparent et ouvert. Cette ouverture a été récompensée par plusieurs contributions externes, plus ou moins importantes, aux différents projets.

Communication LinuxFR

Logo du site LinuxFR

Le site d'information LinuxFR a été utilisé pour la communication d'INL avec la communauté du libre :

Contributions au libre et packaging

Logo de la distribution Debian

Une page listait également les contributions au libre réalisées par les employés d'INL, faites dans leur temps de travail ou dans leur temps libre. Logiciels ayant reçu des contributions sous forme de patch dans le désordre : noyau Linux, Netfilter, ulogd2, Prelude, Apache, SquidGuard, gcrypt, gnutls, Python, PHP, DIA, Layer7, Dia, glibc, centreon, afterglow.

Une autre forme de contribution était le packaging de logiciels et bibliothèques : Pierre Chifflier pour Debian, Jérôme Soyer et Michael Scherer pour Mandriva et Fedora. Bien sûr, ils ont packagé les logiciels INL, mais également un grand nombre d'autres projets. Là aussi, les contributions étaient à la fois faites dans leur temps libre et dans leur temps de travail.

Quelques exemples de paquets :

EdenWall 2009-2011, nufirewall.org

Nouvelle version de la mascotte Nupik à le mode EdenWall

Une levée de fonds et le changement de métier a entrainé le changement de nom de la société : INL devient EdenWall. La majorité des logiciels INL qui composent l'appliance EdenWall 3 vont être réécrits pour donner un nouveau produit : EdenWall 4. Le développement des nouvelles versions de logiciel est confidentiel.

Sur la période 2009-2011, il y aura deux annonces LinuxFR :

NuFirewall est la version libre du produit EdenWall. Le code est alors hébergé sur un nouveau site, nufirewall.org (nom de domaine déposé en décembre 2009).

N'ayant pas réussi à s'imposer dans le secteur concurrentiel des parefeux, la société EdenWall se voit forcée de déposer le bilan en août 2011.

FSF France et UFWI, ufwi.org

Logo du projet UFWI

Novembre 2011, la FSF France réagit à la fermeture des sites hébergeant le code libre (software.inl.fr, nufw.org et nufirewall.org) en lançant un appel pour récupérer le code dans l'objectif de le remettre en ligne.

Cet appel est couronné d'un succès : le code est remis en ligne sur un nouveau site, ufwi.org : Nouvel hébergement du projet NuFW sur ufwi.org.

Le site UFWI héberge 3 dépôts git contenant le code source libre d'EdenWall 4 : ew4-updates, edw-svn, nufw. Le dépôt edw-svn est le plus gros (4 Go contre 9 Mo pour nufw et 430 Mo pour ew4-updates).

edw-svn

Ce dépôt (au format git-svn) est une copie du dépôt Subversion contenant l'historique de juin 2008 à février 2011 (il manque donc le code de mars à août 2011).

Frontends et backends :

  • nuconf : Configuration système
  • nuconntrack : Suivi de connexion
  • nudpi : Analyse de paquet en profondeur (Deep Packet Inspection, DPI) utilisant la bibliothèque non libre Qosmos
  • nuface3 : Gestion de jeu de règles du parefeu
  • nugraph : graphiques RRD
  • nulog3: Analyseur de logs du parefeu
  • nupki : Interface simple de gestion d'infrastructures de clés publiques (PKIs)

Frontends :

  • edenwall-administration-suite : interface graphique intégrant nucentral-admin, nuface, nuconf, nulog, nudpi, nupki ainsi qu'une page d'accueil
  • edenwall-console-access : gestion des permissions d'accès utilisant le port série (modification du mot de passe)
  • nucentral-admin : gestion du serveur nucentral (utilisateurs, groupes, permissions)

Backends :

  • nnd : interrogation d'annuaires utilisateurs, supporte OpenLDAP, Active Directory, etc.
  • nucentral : serveur "nucentral", Object Request Broker (ORB) utilisant XML-RPC (avec HTTP/1.1 en mode connecté) et SSL/TLS
  • nucentral-edenwall : modules nucentral supplémentaires
  • nucentral-multisite : Gestion de plusieurs parefeux
  • nurestore : import-export de configuration

Autres :

  • edenwall-ezio : gestion du panneau frontal LCD pour afficher des informations et déclencher des actions comme rebooter
  • edenwall-portal : page d'accueil HTML du proxy web
  • edenwall-snmp : sondes SNMP pour nuauth
  • ew4-diag : Analyseur de logs nucentral
  • python-atlee-pam : packaging Debian de la bibliothèque Python PAM (atlee)
  • tools : divers outils pour travailler sur le projet edw-svn

NuFW

Composants :

  • nutcpc : client UNIX en ligne de commande
  • libnuclient : bibliothèque partagée par tous les programmes clients
  • nufw : démon du parefeu
  • nuauth : serveur d'authentification
  • nussl : bibliothèque SSL/TLS utilisant la bibliothèque GnuTLS ou OpenSSL
  • pam_nufw : script PAM lançant nutcpc en arrière plan

Modules du serveur d'authentification (nuauth) :

  • acls : ldap, plaintext
  • logs : MySQL, Prelude, PostgreSQL, script, syslog, ulogd2
  • authentication : ipauth_guest, MySQL, nnd, PAM, plaintext
  • mark : field, flag, group, uid
  • x509 : OCSP, standard (x509_std)
  • autres : multi_mode, script, postauth_localuser, session_authtype, session_expire, xml_defs (durées et périodes de temps)

ew4-updates

Ce dépôt est une copie du dépôt git contenant l'historique de décembre 2009 à mars 2011 (il manque donc le code d'avril à août 2011). Il contient les recettes pour générer les mises à jour de l'appliance parefeu et de l'appliance multisite (Multi-Firewall) :

  • Pare feu : 36 mises à jour (numéro 10 à 48), la mise à jour de développement n°666 (active SSH et le mode debug), 9 mises à jour spéciales (9000xxx) et un modèle de mise à jour
  • Multisite : 2 mises à jour (n°13 et n°14)

Prelude

En 2009, l'éditeur Prelude IDS est racheté par EdenWall et le développement se poursuit dans EdenWall. On peut trouver une version libre de 2010 dans Debian :

La version libre de Prelude était hébergée sur prelude-ids.org (nom de domaine déposé en octobre 2001), puis sur prelude-technologies.com (nom déposé en décembre 2009). Pour les archives, il existe aussi un projet Prelude sur Sourceforge, mais le projet n'a pas été touché depuis 9 ans.

Pour la suite

Je compte reprendre le développement des projets nucentral, nuface, nnd, voir aussi nulog, pour qu'ils soient faciles à installer. Peut-être que nufw nécessite également un peu de nettoyage.

Il ne restera ensuite plus qu'à lancer une grosse campagne de communication pour faire connaître ces logiciels, et peut-être aussi recruter des développeurs.

Bien sûr, si vous êtes intéressés, je vous invite dès à présent à rejoindre le projet !

Note : J'ai cité certains auteurs, mais il ne s'agit sûrement pas d'une liste exhaustive. Consultez le fichier AUTHORS de chaque projet pour une liste plus complète.

mardi 8 novembre 2011

EdenWall de 2009 à 2011

Pour faire suite à mon expérience dans la société INL de 2006 à 2008, voici mon bilan de la société EdenWall de 2009 à 2011.

2009 : INL devient EdenWall

En 2009, trois ans après mon entrée chez INL, la direction décide de changer de métier. INL passe d'une société de services en logiciels libres à fabriquant d'appliances. Je pense que la principale motivation était de gagner plus d'argent. La marge sur une appliance est plus importante que sur du service.

Un planning pour les années à venir est préparé et une levée de fonds est réalisée pour lancer le projet. Premier changement radical : la société n'est plus autonome mais dépend d'un fonds d'investissement. En trois ans, je n'ai jamais entendu quoi que ce soit à propos de ce fonds d'investissement, je n'ai jamais su quelle était leur politique, leur vision à long terme, etc.

La société passera rapidement d'une dizaine d'employés à une trentaine. Le nombre exact d'employés a beaucoup varié en fonction des arrivées et des départs, ce qui s'est beaucoup accéléré à partir de 2009. Alors qu'avant il y avait une seule équipe soudée dans un open space, les directeurs ont eu leur bureau (fermé), les commerciaux et développeurs ont été mis dans deux pièces séparées. Les commerciaux et développeurs ont continué à travailler en open space, ce qui a beaucoup aidé à garder un esprit de cohésion parmi les développeurs. Par contre, du côté des commerciaux, il y a eu beaucoup de turnover. À ce que j'en ai compris, le salaire des commerciaux est largement basé sur le nombre de vente conclues. Comme le produit EdenWall se vendait mal (une cinquantaine d'appliances vendues en 3 ans selon ce que j'ai entendu), les commerciaux bossaient dur pour un faible salaire.

Créer un nouveau produit depuis zéro prend beaucoup de temps. Le développement de la version précédente (EdenWall 3) a été complètement arrêté (ou presque). Autre changement par rapport à INL : étant donné qu'on mettait nos œufs dans le même panier (un seul produit EdenWall 4 au lieu de plusieurs clients à qui on vendait du service), il y avait une pression constante et soutenue sur l'équipe de développement pour sortir le produit à temps. L'ambiance n'était plus du tout aussi détendue.

Pour marquer la rupture avec INL, le nom de la société a été changé pour EdenWall, histoire d'avoir le même nom que le produit.

2009 : Début du développement de l'appliance EdenWall 4

Pendant trois ans, EdenWall 4 a été développé par une équipe d'une dizaine de personnes en comptant les développeurs, le support technique, stagiaires, l'assurance qualité et les chefs d'équipe. Travailler à dix sur le même produit est très différent de travailler seul voire à deux ou trois sur un logiciel.

De mon côté, j'ai déménagé de Strasbourg à la campagne. Côté boulot, ça n'a rien changé. Par contre, ma fille Élisa est née en novembre 2009, ce qui a tout changé pour moi :-) J'avais également un collègue qui télétravaillait sur Prelude depuis Lyon, mais j'avais peu de contacts avec lui. On se croisait rarement sur Paris (au siège d'EdenWall).

Fin 2009, après une année de développement, plusieurs développeurs dont moi ont commencé à se plaindre de notre chef d'équipe. Le produit n'était pas très stable et le retard avait tendance à s'accumuler. Notre chef d'équipe avait tendance à disparaitre entre le moment où il nous listait ce qui devait être développé et la livraison. Si à la fin ça marchait, il recevait tous les mérites, si c'était un échec, c'était notre faute.

Premier semestre 2010 : "interlude" MXM puis promotion

Après quatre ans de bons et loyaux services, j'ai démissionné en mars 2010. J'étais las des problèmes avec notre chef d'équipe, j'étais toujours mal considéré par la direction (notamment car j'étais en télétravail) et je souhaitais changer de milieu (sécurité et réseaux informatique). Ma démission a été une (mauvaise) surprise pour la direction.

Étant un jeune papa, j'avais attendu d'avoir un nouveau contrat pour démissionner. Un ami m'avait trouvé un job dans la startup MXM où il travaillait. Sauf que durant ma période de préavis chez EdenWall, la relation entre mon ami et la direction de MXM s'est beaucoup détériorée, et mon ami a fini par démissionner. Le directeur de MXM a alors révoqué ma clause de télétravail avant le début de mon contrat ! Il a fait ça pour que je ne vienne pas travailler, c'est-à-dire que ça soit moi qui parte et non pas lui qui rompe le contrat.

J'ai alors eu moins d'un mois pour trouver un nouvel emploi. Ne trouvant pas d'emploi convenable, je me suis décidé à proposer à mon ancien chef de revenir à EdenWall mais en tant que chef de projet plutôt que développeur. Il y a réfléchi deux bonnes semaines, puis est revenu vers moi en acceptant à condition que je vienne à Paris deux jours par semaine au lieu de trois jours par mois.

Juin 2010 à juillet 2011 : chef d'équipe

J'ai donc fait mon come back en remplaçant mon ancien chef d'équipe. Mon retour a été mal vu par mon ancien chef d'équipe (qui a été affecté à une nouvelle équipe de recherche et est passé directeur au passage) et par la direction, mais j'étais soutenu par mon chef (qui était un peu le seul à croire en moi). J'ai eu l'impression que mon retour a été un soulagement pour l'équipe développement EdenWall.

J'avais une situation un peu inconfortable. Je n'avais pas vraiment mon mot à dire sur la gestion du projet, on m'imposait des tâches à faire réaliser en un certain temps, sans vraiment pouvoir discuter ces délais. Mon poste consistait surtout à faire respecter les délais, détecter les blocages et faciliter le travail en équipe. Accessoirement, je dépannais certains problèmes concernant Python, et j'étais parfois consulté pour un choix technique. C'était ma partie préférée, mais ce n'était qu'une petite partie de mon travail.

J'ai eu du mal à accepter de lâcher mon clavier, arrêter le développement. J'avais tendance à penser que ça irait plus vite que si je faisais tout moi même. J'avais du mal à déléguer. Plus tard, ce problème a été remplacé par un autre : je n'arrivais ni à estimer précisément le temps de réalisation d'une tâche, ni à déterminer l'avancement global du projet. J'avais une vision précise de certaines tâches, mais une mauvaise vision globale. D'ailleurs, j'avais tendance à voir à court terme, sans prêter attention au calendrier qui glissait.

Mon plus gros échec a été la période septembre 2010 à février 2011 : il y avait trois projets parallèles, le plus long avait été estimé à deux mois et le plus court à un mois. Sauf que je ne me suis pas du tout occupé du projet le plus important et que ses spécifications ont beaucoup changé en cours de route. Le résultat a été une situation assez critique du côté des commerciaux qui attendaient les nouvelles fonctions. La livraison a été repoussée mois par mois de fin octobre 2010 à février 2011...

Autre problème sous-jacent : le refactoring était proscrit et le peu de test n'était pas exécuté automatiquement (nous n'avions pas d'intégration continue). Un projet de buildbot a été repoussé sans arrêt pendant un an. Quand il a enfin été mis en place, il est vite passé "rouge" (échec de certains tests) et a été mis de côté. La direction m'imposait de livrer le plus vite possible, je ne me suis jamais remis en question. J'aurai du prendre un peu de recul et insister lourdement sur la qualité, pour expliquer que la qualité ne doit pas être faite "à la fin" mais en continu.

Dernier problème, non des moindres : tous les développements étaient faits dans le même dépôt de code source, sans vraie gestion de branche. Du coup, il n'était pas possible de livrer une nouvelle fonction tant que toutes les autres fonctions n'étaient pas stables. Comme l'ensemble était en constante évolution, les régressions étaient courantes et les périodes de stabilisation étaient trop rares.

Il ne faut pas se voiler la face, on travaillait vraiment à l'arrache.

Liquidation

Début juillet 2011, le PDG annonce la liquidation d'EdenWall. Ce n'était plus un secret depuis plusieurs jours. Pour l'anecdote, l'annonce a été faite un jeudi, l'avant dernier jour de mon contrat. Le lundi je commençais chez WyPlay.

Romain, un ancien collègue, a noté différentes informations sur l'histoire d'INL et d'EdenWall : EdenWall is officially dead. Il en a également écrit une version plus romancé : EdenWall : la descente aux enfers.

Bilan

Je ne pense pas que l'échec de la société ait une seule cause. Je pense qu'il n'y avait pas de place pour EdenWall sur le marché des parefeux, ou dumoins qu'EdenWall n'a pas réussi à s'y faire une place. Je reste encore sceptique sur le gain apporté par l'authentification NuFW face aux contraintes qu'il impose (avec notamment l'installation d'un agent sur chaque poste client). Une bonne part du stress aurait pu être évitée en conservant une activité de service, lucrative et fiable. À partir de 2010, il y a eu des guéguerres internes au sein de la direction qui n'ont pas arrangé les choses. L'augmentation de la masse salariale a imposé une réorganisation. Petit à petit, les communications se sont rompues. Chacun fuyait les responsabilités en rejetant la faute sur ses collègues, alors qu'on s'entraidait à l'époque d'INL. L'ambiance bon enfant a fait place à une ambiance plus corporate. Je pense que l'histoire se serait terminée différemment si la société avait été gérée différemment.

Bien que nos méthodes de travail "n'étaient pas à la pointe", le développement avançait bien et on était fier de notre projet. Quand j'étais développeur, j'ai pris beaucoup de plaisir à concevoir une architecture et écrire des logiciels depuis zéro. Comme c'était une réécriture d'un produit existant, nous avons pu éviter de répéter les même erreurs. J'ai également pris du plaisir à apprendre la programmation asynchrone avec Twisted (même si c'était dans la douleur les six premiers mois) et la conception d'interfaces graphiques avec PyQt (je maintiens que PyQt permet de développer des interfaces plus sympas que le web !).

J'ai largement préféré la période INL à la période EdenWall, mais je ne regrette pas mon expérience d'un an en tant que chef de projet. Cette expérience m'a mis face aux réalités, notamment les impératifs commerciaux et contraintes clients.

dimanche 6 novembre 2011

Mon expérience dans la société INL de 2006 à 2008

J'ai travaillé six années pour INL, devenu "EdenWall" entre temps, sans jamais écrire quoi que ce soit à ce sujet sur mon blog. Il y a différentes raisons à cela. La première est que j'étais en télétravail et que la direction a toujours suspecté que je me la coulais douce (ce qui était faux). La deuxième est que j'avais peur que ça soit mal vu par certains de mes collègues et surtout par la direction, je préférais ne me brouiller avec personne.

J'ai découpé mon histoire en deux chapitres, INL et EdenWall. Bien que ça soit la même société, le changement de nom marque une rupture majeure comme je l'explique dans le deuxième chapitre.

Je parle peu de l’aspect télétravail, je détaillerai cette partie dans un autre article.

Lire la suite

mercredi 21 septembre 2011

Nouvel ordinateur, KVM et le système de fichier btrfs

Je me suis acheté un nouvel ordinateur pour développer et pour lancer plusieurs machines virtuelles en même temps :

  • CPU : Intel i7-2600, 64 bits, 8 coeurs (4 coeurs avec hyper threading) à 3.4 GHz
  • RAM : Kingston 12 Go à 1066 MHz
  • Carte mère ASUS P8P67LE
  • 2 disques Western Digital, "Caviar blue", de 1 To en SATA
  • GPU : Radeon HD 5500
  • Boîtier Antec Sonata IV

J'ai tenté de configurer les deux disques en RAID 0 avec le RAID matériel, mais j'ai appris que le chipset Intel P67 ne fait que du RAID logiciel. Il y a un chipset SATA supplémentaire (Marvell), mais je n'ai pas essayé de m'en servir. L'installeur de Fedora 15 m'a permis simplement de créer un RAID 0 logiciel. Puisque j'aime vivre dangereusement, j'ai choisi de créer une seule partition de 2 To dans le système de fichier btrfs (encore qualifié d'expérimental). Au passage, /proc/mdstat permet de voir l'état actuel du RAID logiciel.

J'ai acheté cette machine pour lancer plusieurs machines virtuelles, et j'ai donc installé rapidement virt-manager pour gérer facilement plusieurs machines virtuelles KVM. Problème : les installeurs étaient vraiment très lents. J'ai installé Debian Testing, OpenBSD 4.9, OpenBSD 5.0, FreeBSD 8, OpenIndiana et Windows Vista. J'ai d'abord remarqué que c'était QEMU (émulation logicielle) et non pas KVM (émulation matérielle) qui était utilisé. La virtualisation matérielle était desactivée dans le BIOS, arf. J'ai du supprimer mes VMs pour les recréer, je n'ai pas trouver comment passer de qemu à kvm pour une VM existante, et de toute façon j'avais arrêté les installations en cours (c'était vraiment trop lent).

Mais ça n'a pas changé grand chose, l'installation était encore vraiment très lente. En fait, au début c'était très rapide, puis tout à coup, les performances s'effondraient : 1 Mo/sec, 700 Ko/sec, ... 3 Ko/sec ! J'ai mesuré les performances de mon système de fichier avec bonnie++ : les performances brutes étaient autour de 234 Mo/sec, très supérieur à ce qu'indiquait l'installeur FreeBSD.

J'ai contacté les développeurs KVM qui m'ont conseillé de voir du côté de btrfs. J'ai alors contacté les développeurs btrfs qui m'ont demandé des détails. Je leur ai indiqué que je ne constatais pas de problème de performance avec Virtualbox. Ils m'ont alors parlé de l'option de cache du disque KVM. Voici la vitesse indiquée au cours de l'installation de FreeBSD selon le mode de cache :

  • writethrough (par défaut) : 1 Ko/sec
  • none : 40 Ko/sec
  • writeback : 1 400 Ko/sec
  • unsafe : 1 500 Ko/sec

L'option unsafe n'est pas accessible depuis virt-manager. La différence entre ces modes est l'interaction avec le système de fichier de l'hôte (btrfs dans mon cas) :

  • writethrough est le mode le plus sûr mais le plus lent : il appelle fsync() après chaque écriture
  • none utilise O_DIRECT et n'appelle jamais fsync(), or btrfs ne supporte pas encore O_DIRECT
  • writeback appelle fsync() quand le système invité utilise une barrière (s'assure que les données sont écrites sur le disque)
  • unsafe n'utilise pas O_DIRECT et n'appelle jamais fsync()

VirtualBox utilise l'équivalent du mode writeback par défaut.

En résumé : si vous utilisez KVM et que le système de fichier qui stocke les images disques est btrfs, changez le mode de cache du disque dur KVM avant l'installation du fichier pour le mode writeback.

mardi 20 septembre 2011

Séries télé que j'aime

Depuis quelques années, les séries télé deviennent aussi importantes, voir plus, que les films. Elles ont beaucoup gagné en diversité, et vu le nombre important de séries, il devient difficile de s'en sortir. Alors je me suis dit qu'il serait intéressant de partager les séries que j'aime, comme ça peut-être que d'autres en feront de même et m'en conseilleront d'autres :-) Voici les dernières séries que j'ai vu et qui m'ont beaucoup plus.

Skins. Vie d'adolescents anglais, chaque épisode se met à la place d'un personnage différent, série assez trash (drogue, sexe, violence), mais également dure car elle montre la souffrance des adolescents qui traversent des passes difficiles.

Pushing Daisies. Un mec a le pouvoir de réveiller les morts pendant 60 secondes, il s'associe avec un détective privé pour exploiter son don, et le reste du temps il cuisine des tartes dans son salon de thé. Il vit avec une femme qui il a rescucité et qui pourrait donc mourir s'il la retouche. Décors un peu surréalistes et personnages atypiques, une série qui a des airs de film de Tim Burton.

The Big Bang Theory. Sitcom geek avec 4 physiciens inadaptés à la vie sociale qui ont comme voisine une blonde idiote. Très drôle, je pensais que l'humour était réservé aux geeks, et pourtant ma femme aime beaucoup cette série !

The Office (US). Un ami m'a prêté la série The Office (UK) que j'ai regardé sans grand intérêt : humour british qui m'a laissé indifférent (alors que pourtant j'adore les Monty Python !). Par contre, quand j'ai vu le remake américain avec Steve Carell, j'ai vraiment adoré. Cette série décrit le quotidien d'employés de bureau qui font des bétises pour passer le temps et ont un patron délirant. Le patron, Steve Carell, a des sautes d'humeur, est gauche, idiot mais attachant. On s'attache vite aux employés blasés par leur travail et leur patron.

Dexter. Un tueur en série qui ne tue que d'autres tueurs en série, après s'être assuré qu'ils sont coupables, chose facilitée par le fait qu'il travaille pour la police. Dexter mène une double vie entre sa famille et ses amis, et sa vie de tueur, dualité qui est le fil conducteur de la série. On se demande sans arrêt quand est-ce qu'il va se faire prendre.

Weeds. Série délirante où une mère de famille sans emploi se met à vendre du cannabis suite au décès brutal de son mari. Elle a du mal à gérer ses enfants et se retrouve souvent dans de drôles de situation. La plupart des personnages sont assez délirants dans leur genre.

How I met your mother. Sitcom fortement inspiré de Friends (mais pas trop). De jeunes new yorkais se retrouvent tous les jours dans un bar pour se raconter leur journée, et forcément il leur arrive plein d'histoires. On devient vite accro de cette série car on a l'impression de vivre avec ses personnages, et c'est réconfortant de les retrouver tous les soirs au même endroit.

Enfin, je regarde des séries pour fille avec ma femme, Desperate Housewives et Grey's Anatomy, mais j'ai trop honte pour vous en parler !

Entretiens d'embauche chez Google

Le recrutement dans la société Google étant hors du commun, je me décide enfin à vous raconter mon expérience.

Première tentative avortée, en télétravail

Avril 2010, j'ai postulé chez Google sur leur site web, en espérant y travailler depuis mon domicile. J'ai rapidement été contacté par courriel par le recruteur Dean. Sauf que quand j'ai demandé si le télétravail était envisageable, Dean m'a répondu que non, et j'ai donc laissé tomber.

Octobre 2010, Sarah, une autre recruteuse de Google, m'invite à postuler. Je lui réponds que j'ai déjà postulé, que je ne souhaite pas déménager et que donc je ne vais pas repostuler.

Deuxième tentative, ingénieur en sécurité à Zurich : questionnaire puis entretien au téléphone

Début décembre 2010, je change d'avis et je me décide à postuler chez Google une 2e fois pour travailler à Zurich (Suisse germanophone). Deux jours plus tard, la recruteuse Aleksandra m'invite à répondre à quelques questions par courriel : décrire 3 projets techniques dans lesquels je suis impliqué ; décrire mon expérience C++, Java et Python ; décrire mon implication dans le logiciel libre. Hum, on dirait qu'ils n'ont pas du tout lu mon CV.

Mi-décembre, j'appelle la recruteuse Eve qui me propose un entretien téléphonique avec Nikolaus. Ce dernier m'a posé des questions techniques sur la sécurité. Ayant passé les deux premières épreuves avec succès, on me propose des entretiens sur site (Zurich). Liam me confirme par courriel l'entretien début janvier avec les informations pratiques. Autant j'étais à l'aise en anglais avec Nikolaus, autant j'avais le plus grand mal à comprendre Eve et elle ne me comprenait pas non plus.

Deuxième tentative : 5 entretiens à Zurich

Fin janvier 2011, j'ai passé cinq entretiens à la suite (avec une pause le midi quand même !). Le premier entretien était avec Tavis Ormandy, ce qui m'a impressioné. J'avais lu plusieurs articles de Tavis qui a trouvé de nombreuses failles de sécurité importantes avec des exploits très techniques. Tavis m'a demandé d'implémenter strlen(str) en assembleur Intel x86. J'ai un peu regretté d'avoir mis l'assembleur sur mon CV, je ne l'avais pas pratiqué depuis plusieurs années... Tavis semblait satisfait de mon code, mais je doute qu'il était correct :-) Il m'a questionné sur les protections du noyau et de la libc, on a parlé de randomisation de l'espace d'adressage.

Lors d'un entretien, on m'a demandé d'écrire un algorithme pour générer un jeu de données pour fuzzer une application. Sauf que je n'ai rien compris de la manière dont les données devaient être générées. Le recruteur m'a expliqué pendant 10 min, et j'ai encore mis au moins 5 minutes à comprendre ce qu'il voulait. J'ai écrit un truc sans vraiment comprendre ce que j'écrivais. C'était assez frustrant de rester bloquer comme ça, j'avais l'impression que le recruteur n'arrivait pas à formuler correctement sa question et que j'étais coincé à cause de lui.

Un entretien avec deux personnes m'a marqué. Celui qui parlait m'a demandé si ça me dérangait qu'il utilise un ordinateur portable. Euh... je n'ai pas osé dire la vérité, que oui ça me gênait. Pendant que je parlais, ils ne me regardaient pas mais regardaient leur ordinateur en notant nerveusement tout ce qui sortait de ma bouche. La seconde personne était en formation pour apprendre à faire passer un entretien.

On m'a demandé comment tester un site web, comment éviter qu'un widget ajouté à une page web puisse attaquer la page qui l'inclut, et d'autres questions que j'ai oubliées.

J'ai écrit beaucoup de code sur un tableau blanc. Pas mal d'exercices d'algorithmique, certains en C, certains en Python (j'avais le choix du langage).

Les locaux de Zurich sont vraiment très jolis, semblent calmes, agréables et ludiques. Il y a des consoles de jeux, des espaces détente et des cafètes très bien équipées. La cantine est très bonne. On peut utiliser un tobogan ou des barres de pompier pour descendre entre deux étages. Cette journée d'entretien était épuisante, à cause de la quantité de questions et parce que c'était entièrement en anglais (que je pratique très rarement à l'oral). D'ailleurs, on m'a dit qu'on peut très bien ne parler qu'anglais à Zurich, ville qui héberge 30% d'expatriés !

Je n'ai pas été pris pour ce poste, je n'avais pas le niveau. Je pense que je n'avais pas assez de connaissances sur le web et sur l'exploitations de failles de sécurité. Eve m'a proposé une deuxième journée d'entretien pour un autre poste. Étant un peu dégoûté de ne pas avoir été pris (quoi, ils n'ont pas reconnu mes talents !?), j'accepte sans grande motivation.

Troisième tentative, ingénieur en test de sécurité : 4 entretiens à Zurich

Fin février, nouvelle journée d'entretiens à Zurich, pour quatre entretiens cette fois-ci. Le premier entretien était catastrophique pour moi. L'énoncé de l'exercice était simple, mais j'ai mis longtemps à comprendre. À partir de pièces de monnaie avec une valeur donnée, il faut rendre la monnaie avec le minimum de pièces. Je propose un algorithme naïve qui fait la division en partant de la pièce ayant la plus grande valeur. Je ne comprends pas en quoi cet algorithme n'est pas bon, car j'avais pris {1, 2, 5} comme pièces (ce qu'on m'avait donné en exemple). En fait, {1, 2, 5} n'est pas un bon exemple. Avec {1, 5, 7, 10}, mon algorithme n'est pas optimum pour 12 (il donne {10, 1, 1} au lieu de {7, 5}). Déjà, on a bien perdu 15 min sur les 45 de l'entretien avec ça. Ensuite, il fallait diviser le problème en sous-problèmes (diviser pour régner) en cachant le résultat des calculs précédents. Enfin, cette idée m'était soufflée pour que je la trouve moi-même, mais je n'y pensais pas car je ne voyais pas en quoi ça accélérait le calcul. Je crois qu'au final, l'idée était bonne, mais maintenant j'ai un doute :-)

Durant les autres entretiens, on a beaucoup parlé de tests, de méthodes de management et de travail, et d'assurance qualité plus généralement.

De mémoire, les entretiens se sont bien passés (à part le premier). Bah... je n'ai pas non plus été pris. Tant pis.

En fait, j'ai relancé Eve plusieurs fois par courriel et par téléphone. Elle ne répondait pas puis s'excusait d'avoir manqué mes appels. D'ailleurs, ce n'était pas elle qui m'avait accueilli lors de la ma 2e journée d'entretien à Zurich. Après plusieurs semaines, je me suis dit que c'était fichu. J'ai eu la réponse négative début avril, soit cinq mois après ma candidature.

Impressions sur le recrutement et sur Google

Les entretiens m'ont laissé une drôle d'impression. Déjà, j'ai eu de nombreux interlocuteurs entre le début et la fin de ma candidature. C'est frustrant qu'on m'ait posé des questions dont les réponses étaient dans mon CV. Souvent j'ai du me répéter car les personnes avec qui je parlais ne me connaissaient pas. C'est pénible et un peu vexant. Ayant travaillé dans une société d'une vingtaine de personne, j'étais perdu et plus tout à fait sûr de vouloir travailler dans une société de 25 000 employés. Je garde une impression négative du recrutement. La lenteur du processus était également pesante (surtout à la fin). Dans les autres sociétés où j'ai postulé, j'ai toujours eu la réponse en moins d'un mois.

La majorité des entretiens étaient intéressants et se sont bien passés. Malheureusement, deux ont vraiment bloqués car je ne comprenais ce qu'on me demande (ce n'était pas un problème de la langue). J'ai un peu l'impression de ne pas avoir été pris en partie à cause des recruteurs qui n'étaient pas toujours au point. Sûrement que je me dis ça pour garder mon honneur sauf :-)

Google demeure une société assez mystérieuse pour moi. Elle cherche tellement à se donner une bonne image que ça en devient louche. D'ailleurs, il semble que l'esprit d'entreprise soit un critère très important dans les recrutements. Il semble qu'il faille vouloir à tout prix bosser pour Google. Bon ça tombait bien, je voulais beaucoup y bosser ;-)

Au moins, j'aurai dormi gratos dans un superbe hôtel à Zurich avec voyage (en train) payé... Mis à part que j'ai du avancer les 220€ x 2 pour les 2 nuits d'hôtel, plus le train, plus le taxi. J'avais plus de 600€ de notes de frais, envoyés par courrier dans une grosse enveloppe en Pologne. Enfin, j'ai recupéré les sous ! C'est classe de la part de Google de payer même si on n'est pas pris ;-)

jeudi 12 mai 2011

Incompétences du support du FAI Free

Depuis début avril (1 mois et demi environ), ma Freebox perd la synchronisation ADSL très régulièrement : 1 à 5 fois en journée, et jusqu'à toutes les 5 minutes en soirée et la nuit (entre 20h et 8h). Je suis dans cet appartement depuis 1 an et demi, et la ligne fonctionnait parfaitement (aucune coupure ADSL) avant le début de ma galère. Je n'ai rien changé dans mon appartement avant le début des problèmes.

Voir les graphiques grenouille.com de ma connexion ADSL : la ligne rouge du ping indique le nombre d'erreurs (perte de paquets). Ma connexion tourne entre 10 et 50% de perte (jusqu'à 90% par moment), alors qu'une connexion normale ne dépasse pas 5% de perte. Les trous dans le graphique indiquent que ma connexion ADSL ne répond plus du tout ou que mon ordinateur était éteint à ce moment là. En soirée, il arrive souvent qu'Internet soit complètement inutilisable. Et il m'arrive régulièrement que le téléphone fixe se coupe alors que je suis en ligne (chose assez frustrante pour mon interlocuteur qui pense que je lui ai raccroché au nez).

Première intervention (inutile)

J'ai rapidement pris contact avec la hotline Free qui a rapidement envoyé un technicien Free. Ce dernier est venu constater le problème et est reparti en m'indiquant que la prochaine étape est obligatoirement un test de la continuité de la ligne par France Telecom. Le technicien Free était aimable et m'a tout expliqué quelles seront les deux prochaines interventions.

Deuxième intervention (inutile)

Le technicien France Telecom était plutôt aigri, il parlait peu et a râlé après Free car ils avaient retiré le condensateur de la prise téléphone (en vérité, c'était le locataire précédent qui l'avait retiré). Il a enlevé la prise, a dénudé les fils, remis un condensateur, puis a regardé son smartphone pendant plusieurs minutes sans rien dire. J'ai demandé ce qu'il faisait : il attendait le résultat du test. Il a fini par avoir le résultat : la ligne est continue, aurevoir... Je m'attendais à ce résultat (inutile selon moi, vu que ma Freebox marche de tant à autre), mais c'est une étape obligatoire dans la procédure de support Free... Pour la petite histoire : le technicien m'avait coupé Internet 1h avant l'intervention (il est repassé en mode pas-ADSL) pour pouvoir faire ses manipulations puis avait attendu devant ma porte. Or sans Internet, je ne peux pas travailler (mon téléphone fixe passe aussi par Internet). J'ai du attendre encore 15 min après qu'il soit parti pour avoir à nouveau Internet.

Troisième intervention : utile mais aucune amélioration

La hotline m'a recontacté pour programmer une 3e intervention conjointe Free+France Telecom : j'ai donné mes disponibilités, mardi et mercredi. La hotline me rappelle en me proposant jeudi ! Je réponds que non, comme annoncé, je serai absent, ils me disent qu'ils maintiennent le rendez-vous. Le jour même, le technicien Free m'appelle pour demander de le laisser entrer. Je lui dis que je suis absent comme annoncé, il répond que la communication avec la hotline est mauvaise... Par contre, ils m'ont dit qu'ils ont changé des câbles et nettoyé un peu ma ligne (sur les 5 Km de câbles qu'il y entre moi et le DSLAM). Ils s'étonnent de ne passer dépasser 4 Mbit/sec, mais je crois que je n'ai jamais eu mieux (et ça ne me dérange pas). En tout cas, j'ai toujours autant de désynchronisations ADSL, ça n'a rien changé à mon problème.

La suite devient assez floue ...

La hotline rappelle et me dit qu'un autre rendez-vous Free+France Telecom va être programmé. Plusieurs jours plus tard, pas de nouvelle je rappelle : là on me dit que ah non, ça sera France Telecom uniquement le 9 mai. Le 9 mai : rien, il n'y a pas d'intervention. J'appelle la hotline le 10 mai : on me dit qu'un technicien va m'appeler pour prendre rendez-vous et que mon dossier est marqué comme prioritaire. Il n'en est rien. Je rappelle la hotline le 12 mai : on me redit qu'un technicien va m'appeler et qu'il faut être patient. J'ai raccroché, j'en ai plus que marre qu'on me balade avec des infos bidons.

Hotline incompétente

La hotline Free est incompétente : la seule info technique qu'ils ont est l'historique des connexions de ma Freebox à leur réseau. Quand un opérateur de la hotline l'a vu, il a dit « ouh là ! » (dans le sens : c'est très impressionant d'avoir autant de désynchronisations ADSL). Par contre, ils n'ont aucune idée des opérations que vont faire les techniciens Free ou France Telecom. En général, l'opérateur de la hotline est tout gentil et montre sa bonne volonté, puis petit à petit avoue son degré d'incompétence et qu'il n'est là que pour gagner du temps (enfin, c'est l'impression que j'ai parfois). Super.

Les opérateurs de la hotline ont un fort accent (maghrébin ?), j'ai un peu de mal à les comprendre. Il y a beaucoup de bruit de fond de leur côté et ils me disent souvent qu'ils m'entendent mal. Ils ont tendance à ne pas écouter ce que je dis ou ne pas me laisser parler, et semblent suivre un scénario à la lettre. Je pense que leur boulot est très stressant, car une fois quand j'ai commencé à m'énerver, l'opérateur s'est énervé à son tour contre moi. Ah, autre détail : ils me mettent régulièrement en attente 1 à 5 minutes (pendant que je paie bien sûr) pour consulter mon dossier ou discuter avec un responsable (ah ?). Ça m'est arrivé qu'on me mette deux fois en attente. Par contre, ils répondent rapidement : entre 30 secondes et 5 minutes. Je me souviens qu'à une époque il fallait 15 à 30 minutes pour les joindre.

Il est assez exaspérant de devoir répéter mon histoire à chaque opérateur Free, redonner mes identifiants hotline, puis nom et numéro de téléphone. Surtout quand l'appel se termine par « on vous rappellera » (et que finalement non, on ne me rappelle pas). D'ailleurs la mention « dossier prioritaire » semble être une blague.

Mes amis pourront vous dire que je suis très zen, je ne m'énerve jamais et je suis poli. Mais là, la hotline me pousse à bout et je ne peux plus me retenir de me défouler inutilement contre les opérateurs.

ADUF

J'ai ouvert un fil de discussion sur le forum de l'ADUF (abonné des Free) : Desynchronisation ADSL très régulières. Par le passé, ceci m'avait débloqué une Freebox en 24h alors que la hotline n'avait rien pu faire en 2 semaines. Un employé de Free m'a dit qu'il faut que je ne touche à rien en attendant la 4e intervention France Telecom. Quand j'ai demandé ce que le technicien France Telecom allait faire, il m'a répondu « Comment pourrions nous le deviner ? » ! Je m'attendais à ce qu'il me dise en gros ce que le technicien France Telecom va faire : des tests, changer des câbles, nettoyer des trucs, etc. C'est dingue combien personne n'a d'information sur les problématiques ADSL et mon problème en particulier.

Là je regarde les offres ADSL et câble des concurrents, je songe très sérieusement à changer de FAI. Un mois et demi pour résoudre un problème, c'est vraiment trop long pour moi. Au premier rendez-vous, j'ai dit au technicien Free que j'ai besoin de ma connexion ADSL pour mon travail : il m'a répondu que je dois changer de FAI (passer chez Orange si j'ai bonne mémoire) : Free n'a pas les moyens d'intervenir rapidement car ils dépendent de France Telecom (qui ne montre pas de bonne volonté).

jeudi 7 avril 2011

Je recherche un poste de développeur C/Python

Je suis actuellement à la recherche d'un poste de développeur en France ou en télétravail, si possible avec des logiciels libres. Si vous recherchez un expert (plus de 5 ans d'expérience) C et Python, je suis votre homme ! Je travaille depuis 5 ans pour EdenWall Technologies, dans la sécurité des réseaux, d'abord en tant que développeur, puis en tant que chef de projet (équipe de six développeurs). J'ai développé sur le parefeu NuFW (basé sur Netfilter) et de nombreux outils de configuration du parefeu (gestion des règles du parefeu, réseaux, VPN, proxy web, etc.).

J'ai contribué à de nombreux projets libres, mais dernièrement, j'ai essentiellement hacké Python durant mon temps libre. J'ai par exemple corrigé énormément de bugs relatifs à Unicode dans Python 3.2. Contribuer à Python m'apprend à travailler avec une équipe d'une centaine de développeurs du monde entier (justifier une solution, relire des patchs, suivi des commits, etc.). Bien sûr, ça me permet d'améliorer mes compétences en programmation C et Python, et mes compétences en assurance qualité (écriture de tests, suivi des buildbots, etc.).

Je suis également l'auteur de plusieurs logiciels libres. Fusil est une bibliothèque de fuzzing et une vingtaine de fuzzers. En l'utilisant, j'ai trouvé des bugs et des vulnérabilités dans de nombreux logiciels libres (libc, FreeType, ClamAV, libexif, binutils, etc.). faulthandler est un module Python qui affiche la pile d'appels en cas de crash, après un timeout ou lorsqu'un signal est reçu (SIGUSR1). Il fonctionne sur tous les systèmes d'exploitation, de Python 2.5 à 3.3. J'ai récemment intégré ce module directement dans Python 3.3. Voir également mes profils github et bitbucket.

Si vous êtes intéressé par mon profil, contactez moi par courriel : victor.stinner@haypocalc.com, je suis disponible à partir du 11 juillet. Consultez mon CV pour le détail de mes compétences.

jeudi 6 janvier 2011

Mise en place d'un nouveau blog en anglais

Cela faisait plusieurs années que je me disais qu'il fallait que je passe à quelque chose de plus moderne que Dotclear 1. J'ai choisi Wordpress juste parce que c'est populaire et que ça semble simple à utiliser. J'ai donc installé Wordpress, puis j'ai rédigé plusieurs articles faisant le point sur mes projets de programmation en 2010. Pour changer, j'ai écrit en anglais.

Voici donc mon nouveau blog : http://www.haypocalc.com/wordpress/

jeudi 25 mars 2010

Visualiser une image qui ne tient pas en mémoire vive : utilisez nip2 !

La majorité des applications se portent pâles quand il s'agit d'afficher de grandes images. Par grande, j'entend 5000x5000 pixels voir beaucoup plus. Le pire étant quand l'image décompressée est plus grande que la mémoire vive : l'application épuise petit à petit la mémoire, commence à utiliser le swap (utilise le disque dur, très lent), et finit par se faire tuer par OOM Killer. Sauf que l'application met du temps à se faire tuer, et l'ordinateur devient très rapidement totalement inutilisable (la charge de la machine monte à 5, 10, puis on n'arrive même plus à l'obtenir dans top).

La solution est le programme nip2 qui ne charge en mémoire que ce qui est affiché à l'écran, ce qui permet de d'afficher des images qui ne tiennent pas en mémoire. Il affiche une barre de progression lorsqu'il prépare l'image (il crée sûrement un index position en pixels => offset dans le fichier).

nip2 affichant une photo JPEG de 27.684 × 3.488 pixels

La bibliothèque GEGL permet également d'afficher de très grosses images, mais je ne connais pas d'outil facile à prendre en main qui l'utilise pleinement. Gimp a commencé à l'intégrer dans sa version 2.5, mais c'est encore expérimental et tout n'utilise pas GEGL. Il me semble que Gimp ne sait pas afficher d'image plus grande que la mémoire vive. En tout cas, je n'ai pas envie de tester !

En parlant de grosses images, j'en connais deux types : « grosses » photos (souvent un photomontage de plusieurs autres photos) et schémas (typiquement vectoriel) générés par un logiciel.

Il existe par exemple les photos panoramiques qu'on peut créer avec le logiciel Hugin. Wikipédia en contient un grand nombre : voir la catégorie Panoramics de Wikimedia Commons. Exemple au pif : Paysage - vue panoramique - rocher du pain de sucre - Guadeloupe - Les Saintes, photo JPEG de 27.684 × 3.488 pixels (17,9 Mo : énorme pour une image JPEG !).

Pour les schémas générés par ordinateurs : on trouve souvent des graphes représentant les relations entre différentes entités. En ce moment, c'est par exemple la mode des graphes montrant la relation entre des personnes (réseau social) ou projets informatiques. Exemple du jour : Github explorer, schémas présentant les relations entre les utilisateurs du site github (hébergeur de programmes libres). L'idéal est d'utiliser le schéma au format vectoriel, car un ordinateur sait très bien dessiner ça efficacement... Sauf que c'est rare que la version vectorielle soit disponible, ou alors dans un format bizzare (tout ce qui n'est pas SVG est bizzare pour moi :-)).

Mais les plus grosses photos que j'ai vu venaient de la NASA : une photo satellite de 100.000x100.000 pixels. Je ne me souviens plus où je les ai trouvées, mais OnEarth semble être une bonne piste. On dirait qu'ils offrent maintenant une interface web pour navigurer directement dans l'énorme image et donc télécharger petit bout par petit bout comme le font Google Maps & cie.

Enfin, il existe un logiciel (propriétaire et payant) qui permet de se balader dans de grandes images : Zoomify. La version Flash permet de l'utiliser très simplement dans un navigateur web. Je trouve le résultat plutôt réussi. La page d'accueil affiche une vue aérienne de Paris avec une excellente résolution, sûrement des photos prises par avion (comme sur mappy.com).

... Tout ce blabla uniquement pour me souvenir du nom « nip2 ». Pourtant c'est pas dur, il suffit de penser à des tétons !

jeudi 25 février 2010

Ce qui m'énerve dans les pubs télévisées

Petit billet d'humeur sur ce qui m'énerve dans les publicités à la télévision.

Bandeau de texte illisible

Les pubs vantent souvent une offre précise. Sauf que les offres sont limitées par de nombreuses conditions qu'il est obligatoire d'afficher (si ce n'était pas le cas, les publicitaires s'en passeraient volontiers). Souvent, un bandeau de texte défile en bas pendant la pub. Problème : certains publicitaires malhonnêtes font en sorte que ce texte soit illisible. Il y a plusieurs manière de faire, comme utiliser un police très fine ou bien faire défiler le texte trop vite. En ce moment, j'ai vu encore pire :

Si on regarde le texte de plus près :

On pense à un problème dans sa télévision ou qu'on a besoin de lunette. Bah non, c'est uniquement le bandeau de texte en bas qui est flou ! Le texte en grand et la voiture sont nets. Pour obtenir cette image, j'ai utilisé le logiciel VLC en regardant la télévision via le multiposte Free. J'ai coché l'option « Vidéo > Désentrelacement > Moyenne », et j'ai pris une capture d'écran avec KSnapshot. Je précise tout, car je n'ai pas réussi à trouver ces publicités sur Internet. Sur Youtube ou Dailymotion, j'ai trouvé les publicités, mais... sans les bandeaux de texte défilant.

Fiat n'est bien sûr pas le seul à utiliser du texte flou. La MAIF, la pub pour la Renault Mégane DCI (coupé 2009) ou encore la Citroën C4 Picasso utilisent aussi cette astuce (arnaque ?). Et il y en a sûrement bien d'autres.

Volume sonore

La plupart des chaînes augmentent le volume sonore lors de l'interruption publicitaire. Ça a bien sûr pour effet d'éveiller mon attention, mais ça m'énerve car à chaque fois je dois baisser le volume.

Côté possitif : on peut utiliser cette singularité pour détecter le début et la fin de la publicité. Cette astuce a été utilisée sur les boitiers TiVo aux États-Unis (fonction « commercial-skip »). D'ailleurs, aux États-Unis, la quantité de publicité à la télévision est incomparable avec ce qu'on a en France. Mais ce n'est pas une excuse pour ne pas râler !

Divers

Il y a d'autres trucs qui m'horripilent. Les pubs utilisant une animation 3D pour en mettre plein la vue, mais avec une animation complètement bidon (bien loin de la réalité). Exemples typiques : action de la brosse à dent, d'un dentifrice, du shampoing ou d'une lessive.

Autre horreur : la mode des publicités en chanson. Votre banquier ou votre assureur se met à chanter sur un air connu... sauf que c'est une reprise. Le pire étant un slogan repris régulièrement pendant plusieurs mois comme la publicité « C'est la MAAF ». Raaaaah !

Il y a aussi les publicités en deux parties. La plus ridicule étant la même publicité (ou deux versions très proches) diffusée deux fois dans un intervalle très court (genre deux ou trois minutes). Sinon il y a une première partie qui crée le suspense, puis la 2e partie qui révèle la nouvelle (décevante bien sûr).

Pour finir, sachez que les agences de publicité ont leur QG : Syndicat National de la Publicité TéléVisée (SNPTV). Si vous en avez ras la pub, c'est le moment de relire ou revoir 99 francs ;-)

Partager une imprimante avec CUPS

Je partage mon imprimante USB entre deux ou trois ordinateurs (selon mon humeur). Chaque fois que je dois (re)configurer le serveur qui la partage ou un poste client, je m'arrache les cheveux. Pourtant, c'est simple, mais j'oublie toujours une étape importante. Voici donc une petite liste récapitulative, sûrement incomplète et imprécise, pour partager une imprimante sous Linux.

Serveur

Installation l'imprimante

Pour l'installation, l'interface web de CUPS (http://localhost:631) est bien foutue et inclut même de la documentation ! Sinon il existe des assistants graphiques qui fonctionnent pas trop mal. Bref, rien de spécial à dire pour cette étape.

Partager l'imprimante

Il faut bien marquer l'imprimante comme étant partagée. Par exemple avec l'outil Ubuntu (ou Gnome ? system-config-printer.py), il faut faire un clic droit sur l'imprimante et s'assurer que « [x] Partagée » soit coché.

Partager le serveur d'impression

Il faut que le serveur CUPS soit accessible sur le réseau local. Pour cela, il faut « Publier les imprimantes partagées connectées à ce système ».

Après il se peut qu'il y ait des soucis de permissions. Mais alors là, bonne chance :-)

Poste client

cups-bsd

Sous Debian, s'assurer que c'est le paquet cups-bsd (et non lpr) qui est utilisé. lpr pose des problèmes, notamment avec Kpdf.

/etc/cups/client.conf

Il n'y a pas besoin de serveur CUPS (enfin, j'ai jamais trop su... mais je crois pas). Il suffit d'une seule ligne dans le fichier /etc/cups/client.conf :

ServerName lisa

où lisa est le nom du serveur.

Test en ligne de commande

Le programme lpq permet de voir la liste des tâches d'impression :

$ lpq
HP_LaserJet_P2015_Series est prêt
aucune entrée

Ça marche !

Configurer KDE

Avec KDE 3.x, assurez-vous d'utiliser le « pilote » CUPS et non pas LPD :

  • Allez dans le menu : K > Configuration > Périphériques > Imprimante
  • Système d'impression : choisissez CUPS

Utilisez du laser !

Mon imprimante est une HP LaserJet 2015 noir & blanc branchée sur USB. Elle m'a coûté cher (environ 300€ je crois), mais depuis que je l'ai (2 ans je crois ?) je n'ai jamais changé le toner. Elle est très rapide : la première page sort en 10 secondes maxi et les suivantes se suivent directement sans interruption. En plus, le papier est chaud et j'aime bien l'odeur. Par contre, parfois elle clignote quand elle est ronchon :-) Je lui tripote les boutons et ça la calme. Ah oui, elle s'installe sans aucun problème sous Linux.

Si comme moi vous n'imprimez que du texte sans schéma (article de recherche, facture, recette de cuisine, etc.) : je vous conseille d'investir dans du laser noir et blanc plutôt qu'une imprimante jet d'encre droguée qui réclame sans arrêt ses doses à 30€ (quand c'est pas 50€ ou plus !). Je pense que les constructeurs vendent à perte, mais se rattrapent très vite sur les consommables. Et si possible, ils mettent des verrous matériels ou logiciels pour empêcher que vous achetiez des cartouches concurrentes ou que vous rechargiez vos cartouches à la main (avec une seringue, opération rigolote).

mercredi 24 février 2010

Outils Xorg en ligne de commande

Xorg est fourni avec une large palette d'outils en ligne de commandes bien pratique pour dépanner un serveur Xorg malade. Voici une courte liste des commandes que j'ai déjà utilisées. Initialement, j'ai écrit ce billet juste pour me souvenir de xdpyinfo :-)

Clavier

Configuration la répétition du clavier :

 xset r rate 500 30

Changer la disposition du clavier. Passer en QWERTY :

setxkbmap us

Changer la disposition du clavier. Passer en AZERTY (français) avec la variante latin9 :

setxkbmap fr -variant latin9

Définir les touches Propriété Windows et Menu Windows droit comme touches de composition :

setxkbmap -option compose:menu,compose:rwin

Écran

Afficher les écrans connectés, les résolutions disponibles et la résolution courante :

xrandr

Utiliser l'écran externe ("VGA") plutôt que l'écran interne ("LVDS") d'un ordinateur portable :

xrandr --output VGA --auto --output LVDS --off

Lire la taille en millimètres et la résolution en points par pouce (PPP, ou DPI en anglais). Chercher « screen #0: » dans la sortie de la commande :

xdpyinfo

Exemple :

...
screen #0:
  dimensions:    1280x1024 pixels (294x235 millimeters)
  resolution:    111x111 dots per inch

Désactiver l'économiseur d'écran :

xset s off

Divers

Application affichant les événements claviers et soucis. Peut par exemple server à trouver le code d'une touche (keycode). Voir mon article sur la touche compose de mon article Touche compose) qui en parle.

xev

Générer un fichier de configuration Xorg dans le dossier courant (créer un fichier « xorg.conf.new ») :

Xorg -configure

Si Xorg est déjà en foncitonnement, utiliser le second display :

Xorg :1 -configure

Autoriser l'utilisateur toto à se connecter à votre serveur X :

xhost +toto

Puis xhost -toto pour retirer la permission. Désactiver les bips du buzzer :

xset -b

dimanche 27 décembre 2009

Cette grosse plaie de PulseAudio

PulseAudio est un serveur sonore visant à simplifier la lecture de son sur le bureau. Il remplace le vieux Esound (ESD). Il permet d'envoyer le son sur les hauts parleurs d'un autre ordinateur, d'utiliser plusieurs cartes son, prend en charge les oreilettes bluetooth, gère la consommation d'énergie, etc. Sur le papier, ça semble super : relire Why you should care about PulseAudio (and how to start doing it) pour s'en convaincre. Par contre, en pratique c'est une grosse plaie : PulseAudio rajoute une couche entre les applications et ALSA qui consomme du temps processeur, de la mémoire, et (dans mon cas) dégrade la qualité du son (rajoute des petits pics sonores).

Problèmes liés à PulseAudio sur un Eee PC (Fedora 11)

En particulier, sur mon Eee PC (1101 HA) équipé de Fedora 11 : mplayer est incapable de lire une vidéo (le film Sympathy for Lady Vengeance) bien que mon processeur graphique (la célèbre puce Poulsbo) accélère grandement le décodage de l'image. Dans les logs noyaux (/var/log/messages), j'ai pu voir que PulseAudio tente de rattraper la situation :

Nov 15 23:07:57 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 1,00 ms
Nov 15 23:16:27 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 2,00 ms
Nov 15 23:16:50 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 4,00 ms
Nov 15 23:20:43 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 8,00 ms
Nov 15 23:20:48 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 16,00 ms
Nov 15 23:21:19 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 26,00 ms
Nov 15 23:22:03 maggie pulseaudio[6894]: alsa-sink.c: Increasing wakeup watermark to 15,99 ms
Nov 15 23:37:22 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 36,00 ms
Nov 15 23:37:37 maggie pulseaudio[6894]: alsa-sink.c: Increasing wakeup watermark to 25,99 ms
Nov 15 23:43:03 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 46,00 ms

Toutes à 5 à 10 minutes, le son finit par sauter et mplayer se fige. J'ai trouvé un contournement : revenir un peu en arrière puis aller un peu en avant (touches gauche puis droite).

Solution : passer directement par ALSA

Après trois coupures dans mon film (c'est-à-dire après un quart d'heure), j'ai fini par me décider à le couper et à chercher à résoudre ce problème énervant. J'ai vu que Mplayer utilisait PulseAudio. J'ai alors essayé l'option « -ao alsa » (-ao : Audio Output), mais mplayer utilisait quand même PulseAudio. Bizarre.

En regardant la configuration ALSA, j'ai vu dans le fichier /etc/alsa/pulse-default.conf :

# Let's make it the default!
pcm.!default {
    type pulse
    ...
}

Donc PulseAudio est configuré pour être le pilote par défaut. J'ai supprimé ce fichier et j'ai redémarré la machine (vu que PulseAudio a trituré ALSA, j'ai préféré tout réinitialiser).

Après le redémarrage, j'ai relancé mon film et j'ai pu le voir jusqu'au bout sans la moindre coupure !

Utilisation du processeur

  • mplayer -ao pulse : le processus pulseaudio utilise 20% du CPU, et au total 20 à 25% du CPU est utilisé
  • mplayer -ao alsa : le processus pulseaudio n'est plus solicité (et n'est donc plus visible dans top), et au total 5 à 10% du CPU est utilisé

Réglage du volume

Avec PulseAudio, alsamixer (et autres mixeurs de sons) n'affiche qu'une seule sortie. Il faut utiliser « alsamixer -c 0 » pour que je puisse avoir accès à toutes les sorties. En particulier, ça me permet de régler le volume du casque, chose nécessaire car le volume est insuffisant.

Problèmes liés à PulseAudio qu'ont d'autres utilisateurs

Lors de la migration à PulseAudio, pas mal d'applications ne fonctionnaient plus (le son en tout cas). Flash et Skype supportent aujourd'hui PulseAudio (Flash 10+ et Skype 2.1+), par contre Audacity ne le supporte toujours pas. Les jeux utilisant la bibliothèque SDL (ex: l'excellent xmoto) ont également des problèmes. Correction : SDL 1.2.12 a un pilote natif pour PulseAudio.

Complaintes :

Le démon PulseAudio a besoin de tourner en priorité temps réel (SCHED_FIFO). Or il faut être root pour cela. Une faille de sécurité dans PulseAudio a déjà servi pour exploiter des failles du noyau Linux (2.6.30, 2.6.31, 2.6.32), notamment via la boîte à outils de Brad Spengler.

Conclusion

Sympathy for Lady Vengeance est un excellent film ! Il fait parti de trilogie sur la vengeance du sud-coréen Park Chan-wook. La fin est bien gore, j'adore :-)

Pour PulseAudio, c'est plutôt mauvais signe étant donné qu'il est activé par défaut sur Ubuntu, Fedora et Mandriva. Bien que j'ai du mal à voir l'intérêt de PulseAudio, il doit bien en avoir un pour que les distributions bureaux majeures l'activent par défaut. Par contre, il serait bon de donner le choix de désactiver complètement PulseAudio le temps que le code soit stabilisé.

dimanche 6 décembre 2009

Nettoyage de clavier

Pour nettoyer un clavier, la méthode la plus simple est de secouer le clavier à l'envers :

(Alternate method: convince them to pretend it's an Etch-a-Sketch and try to erase it.)

Ça marche pas trop mal, mais quand le clavier est maltraité pendant plusieurs années, il en faut un peu plus. J'ai complètement démonté mon clavier pour tenter de débloquer la touche S qui s'était coincée durant le nettoyage. La quinzaine de vis de la coque en plastique était cachées derrière des bouts de caoutchouc (sûrement un message pour me dire « non, ne le fait pas ! »). Et à l'intérieur il y a encore un grand nombre de vis.

J'ai trouvé une grosse touffe de cheveux et une poignée de miettes (miam !). Malheureusement, vu l'état du clavier, je me suis dit qu'il serait plus rapide d'en racheter un autre ...

En même temps, pas mal de des lettres étaient effacées, ce qui ne facilitait pas la frappe à une main (ex : avec un bébé dans les bras). Peut être que ça va enfin me motiver à apprendre à utiliser mon clavier bépo !