Infos

Contact

E-mail

Situation professionnelle

En poste
Indisponible

Présentation

Je suis passionné par le développement informatique. J'adore relever les défis technologiques, lever des barrières et proposer des solutions pour réussir des projets. Je suis capable de prendre du recul pour proposer une architecture technique adapté à l'ensemble du projet, comme de me plonger dans un point très précis pour optimiser un goulot d'étranglement. J'ai une préférence pour les problématiques back-end mais j'ai déjà repoussé les navigateurs dans leurs derniers retranchements.

Bruno Michel

  • Passionné
  • Open Source
  • Polyglotte
  • Excellence technique
  • Défis technologiques

M'enfin ?!?

Recent content on M'enfin ?!?

http://blog.menfin.info/
J'ai enfin reçu mon librem
25 mai 2016

J’ai commandé en septembre 2015 un ordinateur portable Librem 15” de la marque Purism. Et depuis, l’attente fût très longue. En effet, ce n’était pas une commande classique mais du crowd-funding et Purism a subi beaucoup de déconvenues avec ses fournisseurs, ce qui a allongé très fortement le délai de fabrication. Mais j’ai finalement reçu mon ordinateur Et voici mes premières impressions toute fraîche.

Librem 15" de Purism

Côté packaging, on pourrait faire mieux. Le carton n’est pas spécialement joli, et dedans il y a juste l’ordinateur et son chargeur, aucun autre cable, ni la moindre notice ou explication sur la garantie. Bon, personnellement, ça ne me dérange pas, mais ça fait un peu bizarre à l’ouverture.

Ensuite, je déballe l’ordinateur. Sa taille est tout à fait convenable, fin comme beaucoup de portables modernes. Par contre, pour le poids, c’est plus lourd que ce que je m’attendais.

L’écran mat a l’air très confortable (même si je n’ai pas encore passé beaucoup de temps dessus). Pareil pour le clavier, et la possibilité de le rétro-éclairer est cool. Je regrette l’absence de port RJ45, même si c’est de plus en plus fréquent sur les portables à cause de leur finesse. Côté performances, avec un core i7 et un disque SSD, pas de soucis, ça va vite.

Il vient pré-installé avec Pure OS, un fork de Debian Testing avec les drivers qui vont bien. Bon, les dépôts de Debian ne sont pas activés par défaut et, du coup, on n’a pas accès à grand chose (apt install git va échouer par exemple). Bref, ça m’a l’air d’être plutôt une distribution gadget et j’ai préféré revenir à une xubuntu 16.04. Le matériel fonctionne directement. Par contre, le touchpad n’a plus l’air de prendre en charge le scroll. Va falloir que j’aille voir du côté de https://github.com/kylerankin/psmouse-byd-dkms.

Pour la batterie, j’ai tenu 5 ou 6h en installant pas mal de choses, ce qui est plutôt gourmand en ressources. Mais c’est trop tôt pour donner un avis.

Au final, j’ai un avis mitigé. On verra comment le librem tient la route. Côté positif, c’est un ordinateur moderne, avec de bons clavier et écran, fait par une boîte qui pousse pour du code libre. Côté négatif, attendre aussi longtemps pour un portable, ça fait mal, et il coûte cher (surtout avec les taxes françaises en supplément du prix public annoncé).

Mise à jour 26/07/2016 : je reste sur mon avis mitigé. La batterie est un peu plus faible qu’aux débuts, ce qui la rend un peu juste. J’ai beaucoup de mal me faire au clavier, les espaces entre les touches sont trop réguliers et c’est donc difficile de trouver les touches comme entrée. Pour le touchpad, j’ai fini par installer un kernel récent, qui vient de la future ubuntu 16.10. Ça empêche Virtual Box et Docker de fonctionner, mais je m’en passe assez bien. Je n’ai pas de nouvelles de Purism pour le clavier qwerty, et non pas azerty comme je l’avais commandé : je devais recevoir des autocollants pour les touches mais je ne vois rien venir. Mais pour le reste, ça marche bien et il ne serait pas si cher et long à recevoir, je le recommanderais sûrement à d’autres.

Voir l'article
Un aviateur se pose sur un nuage
16 sept. 2015

Je suis actuellement le directeur technique d’af83, mais plus pour très longtemps. En effet, après 8 ans de bons et loyaux services, j’ai décidé de quitter af83 et ma mission prend fin ce vendredi. Ce qui m’a le plus marqué pendant mon passage chez af83 est, bien entendu, les personnes que j’ai croisées et avec qui j’ai travaillé. Vous avez été géniaux, fabuleux et vous allez me manquer.

J’aurais beaucoup à raconter à ce sujet, trop pour un seul billet de blog et c’est un peu trop intime pour être exposé ici. Je vais plutôt vous parler de 3 projets dont je suis très fier.

Le premier, c’est le site de la Cantine, le premier espace de coworking parisien. J’ai codé ce site début 2008 avec Ruby on Rails, dans l’urgence, et il est resté pendant 7 ans en ligne ! Je suis attaché à ce projet car c’était l’un de mes tout premiers chez af83 et il a contribué fortement à faire adopter Ruby on Rails dans une agence qui était très PHP alors. De plus, il a rendu services à des tas de gens tout au long de ces années.

Le second est la borne d’orientation voyageurs pour les Aéroports de Paris. Ce projet est l’exemple parfait d’une excellente collaboration entre les équipes d’UX designers et de développeurs. Ces bornes rendent un grand service à de nombreux voyageurs tous les jours. Et, pour moi, ce fût l’occasion d’écrire mon premier pilote d’imprimante (une imprimante thermique, format ticket de caisse, pour que les voyageurs puissent garder une trace de leur parcours).

Borne orientation voyageurs pour les Aéroports de Paris

Le dernier est le live de France Télévisions. Vous pouvez le voir dans la colonne de gauche de francetvinfo. Sorti en 2011, il était très innovant et en avance sur ses concurrents. Ce fût un gros challenge technique, avec le temps réel et la très forte montée en charge pour les élections présidentielles de l’année suivante. Et au fil des ans, il est devenu plus étoffé, plus mature, mais toujours aussi intéressant à suivre.

Il y a un paquet d’autre projets qui mériteraient d’être cités : Mon Album Photo, la Réunion des Musées Nationaux et du Grand Palais, Canal+, etc. Mais ces trois là donnent déjà un bon aperçu de ce sur quoi j’ai pu travailler chez af83.

Ha, et pour ceux qui souhaitent savoir où je vais, il suffit de regarder mon précédent billet de blog. Je rejoins Cozy Cloud, car je veux me battre pour que nous puissions reprendre la main sur nos données vis-à-vis des grosses sociétés et je crois que Cozy a le potentiel pour arriver à changer les choses de ce côté-là.

Voir l'article
Sur un petit nuage, Cozy
01 juil. 2015

Cozy est un Cloud personnel que vous pouvez héberger, personnaliser et entièrement contrôler. Il permet de reprendre la main sur ses données personnelles, comme ses contacts, calendriers, courriels, fichiers, plutôt que de les laisser aux mains des GAFA (Google, Apple, Facebook, Amazon). En tant que fervent défenseur du respect à la vie privée, je suis le projet Cozy depuis quelques temps. Avec l’arrivée de la version 2.0 et la loi sur le renseignement, j’ai sauté le pas et j’ai installé mon instance de Cozy.

Logo de Cozy Cloud

C’est un projet encore jeune. Dans ce billet, je vais détailler ce que j’aime et les choses que j’aimerais voir améliorées. Je risque de paraître difficile, mais c’est uniquement parce que j’ai de grands espoirs dans Cozy. Ces critiques sont là pour encourager d’autres personnes à franchir le pas et installer leur instance de Cozy en connaissance de cause, et pour donner un retour à l’équipe Cozy pour permettre d’améliorer leur produit.

Commençons par ce que j’aime. L’application Home a été refaite. C’est elle qui vous accueille et permet de naviguer entre les différentes applications installées sur Cozy. En effet, Cozy possède un coeur, qui s’occupe du stockage des données, des permissions d’accès pour celles-ci et de la gestion des applications, mais toutes les fonctionnalités viennent dans des applications séparées. Par exemple, nous avons une application pour les calendriers, une autre pour gérer les contacts, etc. Et pour en revenir à Home, c’est l’interface qui permet de passer d’une application à une autre. La nouvelle version est plus jolie et plus pratique à mon goût. Ça pourrait être pas mal de pouvoir reprendre des informations des applications sur Home (afficher le nombre de mails non-lus ou le prochain rendez-vous), mais ça fait déjà bien le boulot.

J’aime aussi l’aspect applications séparées où l’on installe que ce dont on a besoin, et surtout qui permet d’installer toutes les applications que l’on veut sans avoir à demander la permission sur un store. L’interface de Cozy propose d’installer des applications depuis une liste mais a aussi une option pour installer une application directement depuis un dépôt git. C’est bien vu !

L’installation via un paquet debian est très simple et la gestion via l’interface web se fait facilement. On sent que de gros efforts ont été faits sur ces points. Bien entendu, ce n’est pas parfait et il y a toujours des petits trucs qui peuvent être améliorés, mais je suis confiant que ça va continuer à se peaufiner. Et comme Cozy est un Logiciel Libre, c’est encore plus facile de contribuer.

Petit à côté : vivement septembre, que l’on ait des certificats SSL simplement avec Let’s Encrypt.

Enfin, pour ne rien gâcher, l’équipe derrière le projet est très sympa. On sent qu’elle a à coeur les problématiques de respect de la vie privée et de contrôle des données personnelles. Elle est très active, à l’écoute sur les forums et organise régulièrement des événements avec la communauté. Un gros merci à vous !

Et maintenant, je vais aborder les points qui me gênent et dont j’espère qu’ils pourront être corrigés dans le futur. Tout d’abord, je trouve très dommage de ne pas avoir un tutoriel pour sortir ces données de Cozy. Une des promesses de Cozy est de ne pas enfermer l’utilisateur. On peut effectivement supprimer son instance Cozy et les données associées (ce qui est déjà mieux que pour les GAFA), mais franchement, si on met des données dans Cozy, c’est qu’elles sont importantes et le jour où l’on veut sortir de Cozy (si jamais ce jour arrive), on voudra pouvoir prendre nos données avec nous. On peut exporter certaines données de Cozy de différentes façons, mais c’est loin d’être aussi facile que d’installer une instance de Cozy. Ça mériterait d’être unifié et documenté.

Ensuite, je regrette certains choix techniques et les conséquences associées. CouchDB n’est plus très populaire ces derniers temps. Cela peut compliquer la vie des développeurs (même si cet aspect est masqué en partie par une couche d’abstraction, cozy-db). Et je ne suis vraiment pas fan de l’idée de mettre des fichiers binaires dedans. J’ai beaucoup de mal à synchroniser mes photos depuis mon smartphone vers Cozy. Je spécule, mais je ne serais pas étonné que le problème vienne de là (il faudra que j’investigue).

Et pour la partie authentification et autorisations, je trouve dommage que l’architecture n’ait pas été plus loin. A priori, proposer du oAuth2 n’aurait pas été très compliqué et aurait permis d’avoir quelque chose de plus standard et mieux fini que la solution actuelle. Ceci dit, je comprends que ce n’est pas facile d’avancer sur ce sujet très complexe et qui bouge rapidement.

Pour finir, le point qui me dérange le plus est le manque de traction. Il y a encore très peu d’applications disponibles. Du côté des applications officielles, aucune ne me paraît pouvoir devenir une killer app. Je connais peu de gens qui soient passé à Cozy. Et j’ai peur que l’équipe de Cozy n’arrive pas à accélérer le rythme de développement pour pouvoir proposer suffisamment de nouvelles choses pour réussir à faire naître un écosystème autour d’eux. J’espère me tromper sur ce point et je souhaite vraiment à Cozy de réussir. D’ailleurs, la prochaine étape pour moi sera de me lancer dans le développement d’une app pour Cozy. Un premier pas pour aider Cozy ?

Voir l'article
Un terminal dans Neovim
03 avr. 2015

Comme je l’ai indiqué dans un précédent billet, je suis passé à Neovim. En pratique, cela reste très proche de Vim. Mais, on commence à voir de nouvelles fonctionnalités très intéressantes. J’avais déjà parlé de l’exécution asynchrone des plugins, ce qui leur permet de faire des traitements longs sans bloquer complètement l’éditeur.

Plus récemment, @tarruda a ajouté la prise en charge des vraies couleurs dans Neovim. Pour les terminaux qui supportent cette possibilité, il est maintenant possible d’utiliser des couleurs avec des code hexadécimaux, sans se restreindre à une palette de 16, 88 ou 256 couleurs comme c’est trop souvent le cas. Cela devrait notamment plaire aux créateurs de thèmes, vu que ceux-ci respecteront mieux les couleurs désormais.

Une autre fonctionnalité qui me semble très intéressante vient d’arriver dans Neovim : c’est l’émulation d’un terminal. Grâce à la libvterm, il est possible de lancer un terminal dans Neovim, avec :terminal par exemple. Cela créée un buffer en mode édition. Il est alors possible d’utiliser ce terminal pour faire différentes actions (comme un terminal normal), mais également de profiter des autres modes de vim. Au hasard, la sélection rectangulaire peut être bien pratique !

Pour sortir du mode édition, il faut utiliser la combinaison <C-\> <C-n>. Ce n’est pas très intuitif, mais comme le mode terminal propose son propre binding de touches avec :tnoremap, on peut ajouter ces lignes à son fichier /.nvimrc pour utiliser Esc :

if has("nvim")
    tnoremap <Esc> <C-\><C-n>
endif

Cette fonctionnalité va ouvrir des portes aux développeurs de plugins, pour intégrer plus facilement Neovim et des outils externes. À titre d’exemple, il existe un plugin pour gdb, qui permet depuis la vue terminal de Neovim de contrôler le déboggeur et d’avoir quelques fonctionnalités bien pratiques :

  • Sauter dans le fichier / ligne quand gdb atteint un point d’arrêt
  • Garder l’état en cours d’exécution / en pause
  • Contrôler l’exécution de gdb depuis n’importe quelle fenêtre de l’éditeur et inspecter des expressions.

Pour finir, voici une petite capture d’écran :

Capture d'écran de Neovim avec un terminal

Voir l'article
Ma config
20 mars 2015

Je suis un utilisateur de longue date de la ligne de commande, et de vim en particulier. J’essaye d’apprendre régulièrement de nouvelles choses (méthodes, outils, astuces) pour m’améliorer et être plus efficace. Par exemple, j’ai écrit par le passé un billet sur l’ajout de la branche git dans le prompt de zsh. Je souhaite partager avec vous quelques découvertes récentes.

Tout d’abord, je suis passé de vim à Neovim. Il n’y a quasiment aucune différence d’un point de vue utilisateur, et c’est très bien ainsi ! C’est très stable et un utilisateur de vim sera comme chez lui. D’ailleurs, mes fichiers de config sont les mêmes pour vim et neovim, ce sont juste des liens symboliques de l’un vers l’autre.

Alors, pourquoi changer ? En fait, sous le capot, il y a pas mal de changements qui vont porter leurs fruits plus tard. La base de code a été nettoyé de pas mal de bizarreries (pour cause de compatibilité avec des terminaux que plus personne n’utilise). Il y a un gros travail sur les plugins : ils peuvent être exécutés à l’extérieur du processus principal et communiquer avec lui via msgpack. Ainsi, ils peuvent être écrits dans différents langages et faire des traitements longs (analyse de code), sans bloquer l’affichage pendant plusieurs secondes. neomake est un bel exemple d’utilisation des possibilités de Neovim. Bref, je suis passé à Neovim surtout pour montrer mon soutien à ce projet, car je pense qu’il va faire avancer vim dans le bon sens.

Pour le shell, je continue d’utiliser zsh plutôt que bash. J’avoue ne pas trop savoir comment a évolué bash ces dernières années, mais je n’ai rien lu qui me donne envie d’y revenir. À l’époque où j’avais fait le changement, il y avait pas mal de choses intéressantes sous zsh (la complétion bien plus efficace, ** pour le globbing ou encore la recherche dans l’historique dès que j’appuie sur ). Mais j’y reste car zsh me convient bien, même si parfois je me dis que des alternatives comme fish pourraient être intéressantes.

Ce shell tourne dans rxvt-unicode. Rien de nouveau de ce côté-là. Pour les couleurs, j’utilise maintenant le thème base16 bright. Base16 est pratique et permet d’avoir le même jeu de couleurs dans pas mal d’applications. On trouve des thèmes pour l’utiliser dans le shell, vim, etc. Il n’y a que pour irssi où cela a été un peu difficile. J’ai testé quelques thèmes mais aucun n’allait bien. Du coup, j’ai écrit mon propre thème : base16 (oui, j’aurais pu faire plus original).

Et pour la police, j’utilise Droid sans mono, patchée pour powerline. Je n’utilise pas powerline mais vim-airline, et ces symboles me servent aussi pour irssi.

J’en ai également profité pour changer de prompt dans zsh. Je suis parti de pure et je l’ai modifié pour qu’il tienne sur une seule ligne (prompt_unpure_setup si ça vous intéresse).

Un autre truc que j’ai ajouté récemment dans mon fichier ~/.zshrc est la coloration des pages man :

man() {
  env LESS_TERMCAP_mb=$'\E[01;31m' \
  LESS_TERMCAP_md=$'\E[01;38;5;74m' \
  LESS_TERMCAP_me=$'\E[0m' \
  LESS_TERMCAP_se=$'\E[0m' \
  LESS_TERMCAP_so=$'\E[38;5;246m' \
  LESS_TERMCAP_ue=$'\E[0m' \
  LESS_TERMCAP_us=$'\E[04;38;5;146m' \
  man "$@"
}

Ce n’est pas grand chose, mais ça peut être pratique. Voilà, j’espère que cela pourra inspirer certains d’entre vous. Et n’oubliez pas que ma config traine sur github.com/nono/dotfiles. Il n’y a pas forcément beaucoup de commentaires, mais on peut y trouver des choses utiles.

Voir l'article
Hash Code, fnf-detect et HTML Truncator
13 mars 2015

Hash Code 2015

Google France organise un concours nommé Hash Code. J’ai participé avec 2 colllègues d’af83 à l’édition 2015. Les qualifications pour la finale avait lieu hier soir. Les règles sont assez simples : il faut disposer des serveurs dans un datacenter de la meilleure façon possible pour résister aux pannes d’électricité.

Notre code est disponible sur github.com/AF83/hashcode-2015. Il fonctionne de la façon suivante :

  1. Lire les données du problème

  2. Placer les serveurs dans le datacenter

    1. Trier les serveurs par efficacité décroissante (le rapport entre la capacité et la place qu’il prend)
    2. Pour chaque serveur, parcourir les lignes de la moins remplie à la plus remplie, et regarder s’il y a un emplacement pour le mettre
    3. S’il y a un emplacement, mettre le serveur dans cet emplacement
    4. Passer au serveur suivant
  3. Puis, on assigne les serveurs à des groupes

    1. Trier les serveurs par capacité décroissante
    2. Pour chaque serveur, trouver le groupe avec la capacité garantie la plus faible et qui ne soit pas déjà très présent sur la ligne du serveur
    3. Assigner le serveur à ce groupe
  4. Écrire notre solution

Avec ce fonctionnement et quelques ajustements, nous avons obtenu le score très honorable de 379. Nous avons ensuite essayé d’ajouter une phase d’optimisation entre les étapes 3 et 4, en échangeant des serveurs entre 2 groupes. Mais cela a été un échec : nous avons obtenu de moins bons résultats que précédement.

Bref, ce fût une soirée bien fun et j’espère que nous serons qualifiés pour la finale.

Mise à jour : oui, nous sommes bien qualifiés pour la finale !

fnf-detect

J’ai joué un peu avec des bibliothèques de Computer Vision la semaine dernière. Je me suis servi d’OpenCV et de ccv pour détecter des visages sur les photos. Cela permet ensuite de retailler les photos en gardant les visages dessus, même quand ces visages sont sur les bords.

Le fruit de ces expérimentations est visible sur le dépôt fnf-detect. La version avec OpenCV donne des résultats corrects et est rapide. La version avec ccv est un peu plus lente, mais améliore grandement les résultats. Au final, nous allons utiliser cette seconde version pour un client, car cela donne un aspect mieux fini à leur produit.

HTML Truncator

HTML Truncator, ma bibliothèque Ruby pour tronquer des textes présents sous forme d’HTML, semble être de plus en plus utilisée. J’ai des retours via les issues de github. Certains sont des questions, mais j’ai également eu un rapport de bug sur les entités HTML récemment. J’ai donc corrigé le bug et sorti une nouvelle version.

Voir l'article
Petite visite à l'Open World Forum
01 nov. 2014

L’Open World Forum est un événement qui se tient une fois par an sur Paris, pour parler des enjeux de l’Open Source, l’Open Data, l’Open Hardware, l’Open Web, etc. Cette édition était centrée sur le thème « Take back control », reprendre le contrôle face à la NSA, aux mastodontes américains que sont Google, Apple, Facebook et Amazon et, plus généralement, à tous ceux qui veulent à notre vie privée et notre liberté. Elle s’est tenue les 30 et 31 octobre et, si je n’ai pas pu m’y rendre jeudi, j’ai néanmoins assisté aux conférences du vendredi.

Globalement, j’ai beaucoup aimé les présentations que j’ai pu regarder. Bien sûr, certaines étaient meilleures que d’autres mais le niveau général pour les tracks que j’ai suivis était très bon. En voici 3 qui m’ont particulièrement marqué.

Software development analytics for the masses

Le matin, j’ai été agréablement surpris par les tableaux de bord produits par bitergia pour des projets Open-Source majeurs. Ils reprennent des statistiques extraites d’informations publiques (dépôts git, listes de diffusion, canaux IRC, etc.) pour faire ressortir des tendances. On peut voir quelques sont les entreprises qui participent à un projet et si le temps pour qu’un patch soit accepté est similaire selon qu’il provient de l’une ou l’autre de ses sociétés (cela peut s’expliquer par le niveau d’expertise des développeurs de chaque société ou par des raisons politiques). On peut également suivre le temps de résolution des bugs au fil du temps et voir les effets de la mise en place d’une politique de gestion des tickets. Bref, c’est un très bon moyen de mieux comprendre des communautés autour d’un projet Open-Source et de se poser les bonnes questions pour qu’elles puissent travailler plus efficacement.

State Of the Art in Machine Learning

Juste après la pause de midi, j’ai pu assister à la géniale présentation d’Olivier Grisel, The state of deep learning in 2014. Après une rapide introduction sur le Machine Learning, nous avons eu le droit à 3 exemples d’application de deep learning (= réseaux de neurones avec de nombreuses couches) vraiment époustouflants. Il y avait d’abord la reconnaissance d’objets, animaux et formes sur des photos. Le taux d’erreur diminue très fortement d’année en année sur le concours ImageNet et le meilleur algorithme est maintenant vraiment tout proche de faire aussi bien que les humains sur cet exercice. Le deuxième exemple était la construction d’une représentation du sens d’un texte indépendante de la langue. La première application est la traduction d’une langue à une autre, mais plein d’autres choses sont rendues possibles via cet outil. Enfin, Olivier nous a montré qu’il était possible de construire un programme super fort sur les jeux Atari à partir d’un apprentissage sans supervision avec un signal très faible.

Le deep learning est vraiment très puissant, mais il requiert 3 choses :

  1. Des compétences très pointues sur le sujet
  2. Beaucoup de puissance de calcul
  3. De très gros volumes de données pour entraîner les réseaux de neurones.

Or Google et Facebook rachètent toutes les startups dans ce domaine, ont les plus gros datacenters au monde et on leur donne gentiment toutes nos données. Ne devrait-on pas s’en inquiéter ?

CaliOpen, correspondance sécurisée

La troisième conférence qui m’a vraiment marquée est la présentation de CaliOpen, par Laurent Chemla. L’objectif est de redonner du contrôle sur sa vie privée, pour se protéger soi, mai surtout pour protéger les autres autour de soi. Cela passe par un logiciel libre de messagerie privée (emails, chat, SMS, etc.) qui va agir sur deux niveaux :

  1. Redonner de la valeur à la vie privée
  2. Rendre beaucoup plus coûteux l’espionnage en masse.

J’espère que ce projet et d’autres dans le même style vont réussir à faire bouger les choses et réussir à atteindre d’autres personnes que le cercle très restreint des geeks. D’ailleurs, si vous êtes un développeur front, sachez que Caliopen aurait bien besoin de votre aide.

Conclusion

J’ai apprécié cette édition de l’Open World Forum. Félicitations à Florent Zara, le président de cette édition, et aux différents responsable de tracks.

Le thème « Take back control » est le bienvenu. On voit qu’on est très loin d’y arriver et qu’il reste beaucoup de choses à faire. À commencer par les organisateurs de l’Open World Forum : le site piste les utilisateurs via Google Analytics, propose de se connecter avec Twitter et Facebook et envoie des emails via MailChimp (une société américaine utilisant la plateforme Amazon). Bref, ce n’est pas gagné mais c’est un combat important pour notre futur.

Voir l'article
When one sidekiq instance is not enough
14 oct. 2014

In the Ruby world, there was a popular gem for queueing jobs: resque. With one call to a ruby method, you can put a job in redis. And a daemon, called a worker, can take a job from redis, process it, and then go to the next job.

It works well, but when you want to scale and process more than one job in parallel, you have to launch several worker processes, and it can take a lot of memory. So, Mike Perham wrote a new gem: Sidekiq. It does the same thing than resque, but it enables to perform multiple jobs inside a process by using threads. And threads take a lot less memory than processes.

Sidekiq became more popular than resque, and it is well summed up by its headline:

What if 1 Sidekiq process could do the work of 20 Resque processes?

But, is it true? Well, it depends. For most tasks, like sending mails or fetching things from internet, it works really nice.

In some cases, like CPU-intensive tasks, it’s more complicated. The official Ruby interpreter (MRI) has something called the Global Interpreter Lock (GIL). Its role is to avoid that code from one thread can mess another thread. For that, when a thread wants to execute Ruby code, it has to first take the GIL. And after some time, it will release the GIL, so that another thread can take it and execute other Ruby code: it’s cooperative scheduling. There are a few exceptions to this rule: waiting the response from a database or an HTTP connection can be made by a threading that doesn’t have the GIL.

So, what to do when you are in one those cases?

First, you can try another interpreter: JRuby, for example, has no GIL and can run several threads over all your cores. JRuby is also said to be a bit faster than MRI, but it varies a lot from one use case to another. YMMV.

Last week, I had a sidekiq instance running with MRI that take 100% of CPU, ie it used only one core from the 8 there. So, i tried JRuby (and it wasn’t painless because of some incompatible gems). Yeah, my sidekiq instance running with JRuby can use all the 8 cores. But it was still processing jobs 30% slower than MRI… So, I’m keeping MRI and I will use the same strategy that resque: running several processes. With multiple sidekiq instance, it’s possible to use more than one core, even on MRI.

Voir l'article
5 links for a rainy day
12 oct. 2014

It’s sunday, it’s raining, so I’ve decided to geek. I’ve rebuilt this blog. Yeah, again ! And to test it, what’s better than publishing a new post? So, I’ve put here 5 links to keep you busy too:

Hugo

Hugo is a fast and modern static website engine. You write some markdown, you run hugo and it generates a static website, that you can host on github pages for example. It’s what I’m using now for this blog.

It’s a young project, but it’s already very usable, a bit more generic and powerful than Jekyll. The documentation is nice. Since it’s written in golang, it’s very fast. And the live reload is so cool!

Sweet Alert

JavaScript’s alert and confirm are common. But they are ugly. It was time to have a replacement for them. This JS library is easy to install and use. And it offers a nice Wow effect for your users.

Live blogging of dotGo

Sourcegraph has live blogged the dotGo conference. If you are interested by golang, you should read it. You can learn some news, like the new gorename command.

The Mature Optimization Handbook

Carlos Bueno, an engineer at Facebook, has written an handbook about when and how optimize our code. I’ve just read the first sections, but it seems like a very valuable read.

Code Fights

This game has only one rule:

There is one logic bug on one line of this JS code. Find it, fix it, hit submit!

After several tries, my best score is 942. Can you beat it?

Voir l'article
Changement de moteur pour ce blog
29 févr. 2012

Ce blog existe depuis quelques années maintenant – 2006, ça ne me rajeunit pas ! Et jusque là, c’était un dotclear hébergé gracieusement chez gandi qui le faisait tourner. Techniquement, ça marchait bien, mais j’ai quand même eu envie de changer pour autre chose, Jekyll en l’occurrence.

Pourquoi ? J’ai déjà du mal à me motiver pour écrire dessus, mais le fait de devoir retrouver mes identifiants gandi et redécouvrir la syntaxe wiki de dotclear a chaque fois finisse de me décourager. Avec cette nouvelle version, je peux écrire et publier des billets avec les outils que j’utilise quotidiennement : vim, markdown, ruby et git.

Je vais donc donner une nouvelle chance à ce blog. Pas sûr du tout que je publie plus de choses dessus. Mais si je n’essaye pas, ça ne risque pas d’arriver ;-)

Voir l'article
Rails ou Sinatra ?
27 juin 2011

Ruby on Rails ou Sinatra, comment choisir entre les deux ? C’est une question que j’entends régulièrement et pour laquelle, je suis toujours un peu embêté d’avoir un pointeur tout prêt vers un article qui expliquerait cela. Encore aujourd’hui, la question m’a été posée et j’ai eu beau chercher, je n’ai rien trouvé de bien concluant.

On est jamais mieux servi que par soi-même, et c’est donc l’occasion de réveiller ce blog qui commençait à prendre la poussière.

Donc Rails ou Sinatra ? Ça dépend mais la plupart du temps, il est assez facile de choisir l’un ou l’autre. Ils ont des philosophies assez différentes et couvrent ainsi des problématiques différentes.

Commençons par Ruby on Rails. Il a été développé par David Heinemeier Hansson pour développer des applications web rapidement mais en gardant du code maintenable. Rails est donc fait pour permettre aux personnes dont le métier est de construire des applications web (développeurs, intégrateurs, etc.) de pouvoir faire ça le plus efficacement possible. On retrouve ainsi le scaffold qui permet de gagner du temps en début de projet et de nombreuses conventions pour aller plus vite dans les cas courants. Mais cela a aussi des inconvénients : Rails est un gros framework et apprendre à s’en servir correctement demande un investissement initial en temps qui est loin d’être négligeable. Si on veut vraiment être efficace, il faut respecter l’esprit de Ruby on Rails et ses manières de faire, mais aussi connaître les bibliothèques qui vont bien, les fameuses gems comme Devise ou Sass.

De l’autre coté, Sinatra a des ambitions toutes autres : il veut juste permettre à des développeurs Ruby de faire des applications web simples avec le minimum d’efforts. Cela commence avec une API extrêmement simple qui permet de démarrer tout de suite sans avoir à apprendre grand chose. Pour cela, Sinatra se contente du minimum et n’essaye pas d’offrir plein de choses dès le départ. C’est ainsi un projet avec une taille beaucoup plus réduite mais qui offre plus de libertés. Là où les projets Rails sont toujours organisés d’une façon semblables pour permettre aux développeurs et intégrateurs de passer facilement d’un projet à l’autre, Sinatra est bien plus souple et peut, par exemple, venir ajouter une interface web à un projet déjà existant. Sa simplicité est également intéressante pour les débutants qui peuvent ainsi faire très rapidement des choses sans avoir, au préalable, à lire un bouquin complet. Et rien n’interdit de passer à Rails plus tard.

Pour résumer, Ruby on Rails est un rouleur compresseur qui permet de construire très rapidement des applications web de qualité pour les personnes dont c’est le métier, alors que Sinatra couvre d’autres besoins : il permet de découvrir Ruby ou le développement web en douceur pour les débutants et offre une souplesse incroyable pour les hackers confirmés.

Voir l'article
Nouveau joujou : Giada Slim n10
21 nov. 2010

J’ai acheté un Giada Slim n10. Ça ressemble à ça :

Giada Slim n10

J’ai commencé à jouer avec en installant dessus :

  • une debian (pas de problème particulier)
  • OpenSSH, évidemment
  • Bip, un proxy IRC
  • Nginx, un serveur web
  • Sllh pour avoir ssh ET https sur le port 443.

L’achat est tout neuf, donc je n’ai pas encore beaucoup de recul, mais dans l’ensemble, j’en suis très satisfait. Un seul regret, le ventilo n’est pas aussi silencieux que je le voudrais. J’ai trouvé sur un forum comment régler ça dans le bios, mais ce n’est pas encore parfait. Pour mémoire, ça se règle dans le menu chipset > MCP fan control, et les valeurs à renseigner sont :

  • SMART Fan0 Min temperature : 40 (la valeur se modifie avec les touches + et -)
  • SMART Fan0 Max temperature : 90
  • SMART Fan0 Min duty cycle : 30
  • SMART Fan0 Max duty cycle : 255
Voir l'article
Présentation rapide de Ruby 1.9 aux RMLL
11 juil. 2010

Cette semaine, s’est tenue la 11ème édition des Rencontres Mondiales du Logiciel Libre à Bordeaux. J’en ai profité pour faire une présentation rapide de Ruby 1.9. Les slides sont en ligne sur http://rmll2010-ruby19.heroku.com/.

Un ami, oz, m’a prêté le livre Confessions of a public speaker de Scott Berkun. C’est u livre très intéressant qui vous donne des conseils pratiques sur comment donner de meilleurs présentations. Je n’ai malheureusement pas eu le temps de le lire entièrement avant ma présentation aux RMLL, et encore moins d’appliquer les conseils, mais j’ai vraiment le sentiment que les conseils sont pertinents et m’auraient permis de faire une bien meilleure présentation. En tout cas, je suis bien décidé à essayer d’en appliquer quelques uns à la prochaine présentation que je ferais, puis de plus en plus si cela marche comme prévu.

Voir l'article
French_Rails compatible avec Rails3.0.0.beta4
09 juin 2010

Une nouvelle version beta de Rails3 vient de sortir. Elle utilise une version plus récente d’i18n, ce qui faisait que mon plugin French Rails ne fonctionnait plus. J’ai corrigé ça et sorti une nouvelle version : la 0.2.2.

Voir l'article
Se fixer des objectifs SMART
23 mai 2010

Se fixer des objectifs est très souvent une bonne chose. Pour tirer pleinement profit de ces objectifs, il est important de bien les formuler. Pourtant, nous avons souvent tendance à nous contenter d’objectifs flous : je veux perdre du poids, je veux faire plus de sport, je veux manger plus sainement, etc. Il existe un truc qui pourra vous aider pour ça : les objectifs SMART. Ce sont 5 critères qui vous forcent à vous poser les bonnes questions quand vous choisissez un objectif :

  • Spécifique : soyez précis sur ce que vous voulez atteindre. Ne vous contentez pas de dire que vous voulez faire du sport, mais demandez-vous quel(s) sport(s) et à quelle fréquence.
  • Mesurable : à tout moment, vous devriez être capable de savoir si vous avez accompli votre objectif sans savoir à réfléchir. Idéalement, vous devriez juste avoir à comparer une mesure avec votre objectif pour savoir si vous l’avez atteint. Si vous souhaitez perdre du poids et que vous fixez comme objectif de perdre 3 kilos, il est alors facile de vous peser pour voir si vous avez perdu ces 3 kilos ou non.
  • Atteignable : votre objectif doit être ambitieux, mais vous devez pouvoir l’atteindre. Si vous n’êtes pas sûr de pouvoir le faire, peut-être feriez-vous mieux de le découper en plusieurs étapes et vous fixer des objectifs intermédiaires. Plutôt que de vouloir courir directement un marathon, commencez par courir 10 Km, puis passez au semi-marathon avant de viser le marathon.
  • Réaliste : votre objectif ne doit pas dépendre de ressources matérielles (argent, matière, temps) que vous n’avez pas. De même, il ne doit pas dépendre du comportement d’autres personnes. Si votre objectif est d’obtenir une promotion, demandez-vous si vous êtes vraiment en position de faire la différence. Une astuce consiste à transformer un objectif qui porte sur des résultats qui ne dépendent pas de nous en un ou plusieurs objectifs sur des moyens pour obtenir ce résultat. Par exemple, un meilleur objectif pourrait être de finir tel projet en avance, ce qui augmenterait grandement vos chances d’obtenir la promotion visée.
  • Limité dans le Temps : fixez-vous une date limite à laquelle l’objectif devra être accompli. Sans ça, vous risquez très fortement de laisser glisser vos objectifs, privilégiant toujours les tâches urgentes et remettant vos objectifs à plus tard.

Voilà, j’espère que ces 5 critères vous permettront de mieux cerner vos objectifs, et d’augmenter ainsi les chances de les réussir.

Voir l'article