Catégorie : Technique

  • Éthique et Lima

    Le projet Lima s’éteint. C’est dommage. Je suis convaincu que les équipes de Lima ont fait tout ce qu’elles pouvaient pour que ça n’ar­rive pas. Des fois « on n’y arrive pas ». C’est dommage mais c’est ainsi et on doit plutôt remer­cier les gens d’avoir essayé.

    Les appa­reils concer­nés vont à terme deve­nir inuti­li­sables. C’est un bon exemple de « n’uti­li­sez pas d’ap­pa­reils connec­tés qui dépendent d’un service centra­lisé » mais à mon sens la leçon n’est pas celle là.

    Je n’aime pas tirer sur l’am­bu­lance mais mon problème est un problème éthique.

    What happens if CGC dies ?

    What’s good with Lima is that it’s enti­rely private and decen­tra­li­zed. So Lima can work inde­pen­dently from any servers, and conti­nue mana­ging your data even if our star­tup dies (disclo­sure: we don’t plan anything like that)

    The only thing we manage on our side of the equa­tions are updates of our app and the web inter­face of Lima. In case of company crash, we’ll do our best to open source at least the most criti­cal parts of our code, so the commu­nity conti­nues impro­ving the solu­tion every night.

    FAQ sur la page Kicks­tar­ter, le 6 août 2013

    La dispa­ri­tion de l’en­tre­prise a été envi­sa­gée dès le début de l’aven­ture (c’est bien) et des éléments de réas­su­rance ont été posés (c’est bien aussi, même si ce n’est que du best effort).

    J’ai un problème éthique parce que toutes les équipes de Lima, des fonda­teurs jusqu’aux déve­lop­peurs ont accepté de poser ces éléments de réas­su­rance alors qu’ils semblent faux.


    En pratique le serveur de l’in­fra­struc­ture Lima est un compo­sant essen­tiel et les boitiers vont progres­si­ve­ment arrê­ter de fonc­tion­ner. Ce n’est pas moi qui le dit, c’est Lima eux-mêmes. Là on est dans la trom­pe­rie pure et simple par rapport à la promesse affi­chée.

    While your Lima product synchro­nises with your devices without servers, our servers are still needed to make your devices find each other and esta­blish a connec­tion.

    Unfor­tu­na­tely, as our services shut down, your Lima will progres­si­vely stop to work.

    This time, it’s Good­bye. Page d’ac­cueil Lima

    La promesse de l’open source est simi­laire. En pratique il est impos­sible de passer le code open source une fois la société en liqui­da­tion. C’est confirmé par les réponses sur Twit­ter.

    C’est simple­ment légal. Les action­naires perdent le contrôle de la société et le liqui­da­teur a l’obli­ga­tion légale de tirer le maxi­mum des posses­sions de la société. Ça inclut le code source et la propriété intel­lec­tuelle. Libé­rer le code source gratui­te­ment n’est léga­le­ment plus possible.

    Le problème c’est que ce n’est pas une surprise.

    Il aurait fallu s’y prendre avant le début des diffi­cul­tés. Il aurait fallu dépo­ser le code source régu­liè­re­ment chez un tiers de confiance et s’en­ga­ger contrac­tuel­le­ment avec lui sur une cession de droits qui ne devien­dra effec­tive qu’à certaines condi­tions pré-établies.

    Même si la FAQ parle de « do our best », on est dans la trom­pe­rie. Il n’est pas imagi­nable que la ques­tion ait été abor­dée dans la FAQ et que les colla­bo­ra­teurs de l’en­tre­prise aient pu igno­rer les enjeux ci-dessus. Ils semblent pour­tant ne rien avoir prévu, consciem­ment, et avoir parti­cipé là aussi à un déca­lage signi­fi­ca­tif entre le discours et les actions.


    J’en veux aux déve­lop­peurs qui ont parti­cipé à ça, et qui vont mettre le doute sur tous les autres.

    Déve­lop­peurs, vous ne devriez pas mettre l’éthique de côté. Vous ne devriez pas appor­ter votre concours à des socié­tés qui trichent, qui trompent, peu importe le degré de cooli­tude du produit ou du service.

  • Les esti­ma­tions de petites tâches ne sont pas plus précises

    Un des premiers mensonges qu’on vous livre trop souvent avec SCRUM c’est qu’on peut esti­mer des petites tâches avec bien plus de préci­sion que des grandes, et qu’en consé­quence on peut être assez fiable dans l’es­ti­ma­tion des une à trois semaines de chaque itéra­tion.

    Foutaises !

    Combien de temps faut-il pour mettre les blou­sons avant d’al­ler à l’école ? Mettons 30 secondes si on ne se presse pas. La réalité c’est que ça mettra plus souvent 5 minutes que 30 secondes, et ça c’est si on n’a pas besoin de se battre.

    400% de marge d’er­reur ? Comment voulez-vous faire un plan­ning avec de telles esti­ma­tions. Pour­tant on est sur une tâche connue, répé­tée chaque jour. Seule solu­tion, on triche et on compte 2 minutes 30. Même ainsi on a une marge d’er­reur de 100%. Hallu­ci­nant !

    Ce n’est pas un exemple choisi. J’ai le même problème pour termi­ner la tartine, pour boire le verre d’eau ou pour passer aux toilettes avant de partir, pour descendre dans la rue, pour faire le trajet, pour trou­ver le badge et passer le portail de l’école, pour montrer ma carte au vigile, pour les 10 mètres dans l’école au milieu des copains et autres parents d’élèves, pour le bisou de bonne jour­née avant de pouvoir repar­tir…

    Ce n’est pas non plus la faute d’une mauvaise analo­gie. Esti­mer une petite tâche est juste impos­sible parce que le moindre aléa fait tout explo­ser.

    Ajou­ter un lien sur une page ça prend 30 secon­des… sauf si on vous dit de chan­ger l’URL au dernier moment et qu’il faut faire deux fois le travail, sauf si c’est le seul lien à cet endroit et qu’il faut retou­cher les règles de style, sauf si le lien passe à la ligne en plein milieu et que visuel­le­ment ça ne le fait pas du tout sur ce compo­sant, sauf si l’es­pace pris fait glis­ser le bouton qui suit sous le clavier sur un smart­phone une fois le clavier déplié, sauf s’il faut partir à la chasse de la bonne URL parce que c’était « ça n’a pas d’im­pact, on donnera le lien au dernier moment », sauf si on se rend compte qu’il faut mutua­li­ser ce lien avec autre chose ailleurs dans l’ap­pli­ca­tion, sauf si ajou­ter un lien casse le test end-to-end et qu’il faut le réécrire pour faire passer le serveur d’in­té­gra­tion conti­nue au vert, sauf si… pour un simple foutu lien !


    Et pour­tant, on n’est jamais en retard à l’école. Malgré les aléas infi­nis à chaque tâche, le projet « aller à l’école » prend 45 minutes à ±15 minutes. Pas plus.

    Ce n’est même pas qu’es­ti­mer le projet dans son ensemble permet de lisser les risques de déra­pages, c’est que le temps que prend chaque tâche dépend de toutes les tâches précé­dentes et des options qu’il nous reste pour les suivantes.

    S’il faut lutter pour termi­ner le crois­sant alors on active sérieu­se­ment la suite. Si les toilettes s’éter­nisent je prépare le blou­son et le bonnet pendant ce temps. S’il le faut on presse un peu le pas. À l’école, si on arrive dans les derniers, aucun parent d’élève ou cama­rade ne nous retient dans les dix derniers mètres et le bisou sera vite fait. Si vrai­ment on est super en retard on peut toujours sortir le vélo ou prendre le tram.


    En réalité si SCRUM estime les fonc­tion­na­li­tés unitaires ce n’est pas pour s’en­ga­ger sur un résul­tat donné à l’avance, ni même pour mesu­rer si l’ité­ra­tion a été une réus­site ou un succès lors de la rétros­pec­tive. C’est unique­ment pour savoir où on va dans la boîte de temps qu’on s’est donnée. Rien de plus.

    Quand on vous dit que ça permet d’être plus fiable, derrière se cache l’hydre du « on va trans­for­mer vos esti­ma­tions en enga­ge­ment » voire du « on va ajou­ter vos esti­ma­tions une à une et ça donnera la dead­line de fin de projet si rien ne change ».

  • Ne fais pas atten­tion au débit de ta fibre

    Ami, tu viens d’être éligible à la fibre ou de démé­na­ger là où la fibre est présente. Tu cherches un opéra­teur.

    Ne fais pas atten­tion au débit. Si tu viens de l’ADSL ça va être le jour et la nuit quoi que tu choi­sisses comme offre fibre. Tu auras des offres allant de 200 Mb/s à 10 Gb/s, à compa­rer à ton ADSL qui se situe quelque part entre 8 et 20 Mb/s en descen­dant et au mieux 1 Mb/s en montant.

    En réalité tu ne verras pas de diffé­rence signi­fi­ca­tive au jour le jour entre les offres à 300 Mb/s et les offres à 1 Gb/s. Tu n’at­tein­dras de toutes façons que rare­ment de tels débits de toutes façons. Ne parlons même pas du 10 Gb/s, là on est dans du marke­ting.

    Regarde tout le reste : la qualité de la box, regarde le prix initial mais aussi si ce n’est pas une offre promo­tion­nelle pour les 12 premiers mois qui va doubler au bout d’un an, regarde les frais d’ins­tal­la­tion ou de rési­lia­tion, regarde s’il y a une offre TV qui te corres­pond, regarde les délais habi­tuel de l’opé­ra­teur pour les instal­la­tions, regarde la qualité de leur support client, etc. Tout ça a bien plus d’im­por­tance que le débit des offres fibre, et te touchera de façon bien plus forte.


    La réalité est plus complexe que le dépliant du four­nis­seur d’ac­cès

    On a tous envie de se dire qu’entre 10 Gb/s (10 000 Mb/s) et 300 Mb/s, ça se voit un peu quand même. La réalité est plus complexe. Ce chiffre ne reflète que le débit théo­rique entre la box et le four­nis­seur d’ac­cès.

    Déjà chez toi : Si tu es sur WIFI, tu peux oublier l’idée d’al­ler à plus de 500 Mb/s en pratique même en t’as­seyant juste à côté de ta box. Pour aller plus loin il faudrait un câble ether­net. Ils sont déjà loin les 10 Gb/s. En réalité sur un appar­te­ment un peu bruité, avec un peu de distance, c’est déjà très bien si on arrive à faire du 300 Mb/s en pratique. Ne parlons même pas d’avoir un mur entre le poste infor­ma­tique et la box. Si c’est pour travailler à partir d’une carte SD tu n’ap­pro­che­ras de toutes façons même pas les 100 Mb/s.

    Ensuite en face : Non le serveur d’en face ne te permet­tra géné­ra­le­ment pas d’échan­ger en Gb/s de toutes façons. Même 300 Mb/s tu ne le trou­ve­ras pas si souvent. On en est au point où régu­liè­re­ment il y a des bisbilles avec Youtube, Netflix et les autres parce que les échanges entre eux et les four­nis­seurs d’ac­cès ne dépassent pas la dizaine de Mb/s aux heures de pointe.

    Et de toutes façons sur l’usage : Les hauts débits se trouvent quand tu télé­charges un gros contenu de façon soutenu. Tu envoies des fichiers de quelques Mo ou moins ? le temps sera plus dépen­dant du nombre de fichiers que de la bande passante dispo­nible. Tu fais de la navi­ga­tion web ? à ces vitesses le temps d’af­fi­chage dépend bien plus du déve­lop­peur du site que de la capa­cité de ta ligne.

    Et fais atten­tion à SFR : Si tu démé­nages dans un appar­te­ment exis­tant et que ni Orange ni Free ne proposent pas d’offre fibre pour ton appar­te­ment, il est probable que ton immeuble soit câblé et non fibré (oui, même si SFR conti­nuera à te dire que c’est de la fibre). Tu peux le véri­fier faci­le­ment : Si ça ressemble à une prise d’an­tenne TV, que ça a un diamètre plus proche d’un câble d’an­tenne TV que d’un petit cable USB, c’est du câble coaxial et pas de la fibre.

    Là (coaxial SFR) toutes les instal­la­tions ne sont pas équi­va­lentes. Certaines montent effec­ti­ve­ment jusqu’à 1 Gb/s, d’autres non. Tu auras souvent toutes les peines du monde à obte­nir le vrai chiffre de la part de leur service commer­cial qui te servira du « jusqu’à 1 Gb/s » ad libi­tum . Bref, ache­ter une offre plus chère afin d’avoir un plus haut débit théo­rique et remarquer que c’est fina­le­ment bridé par l’ins­tal­la­tion en place, ça serait dommage.


    Je ne dis pas que tu ne dépas­se­ras jamais les 300 Mb/s mais ça ne repré­sen­tera pas ton quoti­dien. Même s’il t’ar­rive de télé­char­ger des conte­nus vidéos ou des grosses archives à partir d’un ordi­na­teur bran­ché par câble, la diffé­rence entre 300 Mb/s et 1 Gb/s, c’est télé­char­ger un DVD complet en envi­ron 100 secondes au lieu de 30. Je doute que l’at­tente supplé­men­taire soit de nature à influen­cer sur le choix de l’offre Inter­net.

    Si vrai­ment tu veux regar­der le débit, regarde le débit montant

    Le débit descen­dant c’est celui que tu utilises pour télé­char­ger quelque chose en prove­nance d’In­ter­net. C’est celui qui est géné­ra­le­ment mis en avant parce que le plus gros des deux.

    Celui qui peut t’in­té­res­ser c’est le second, qui sert à envoyer des conte­nus vers Inter­net. Il doit t’in­té­res­ser parce qu’il est géné­ra­le­ment bien plus petit.

    Ce n’était pas impor­tant sur ADSL parce que le débit ne te permet­tait pas grand chose d’autre que du descen­dant. Avec la fibre tu vas proba­ble­ment bran­cher un Google Drive, un Drop­box, peut-être un logi­ciel de sauve­garde. Tu vas vouloir envoyer d’énormes photos voire des vidéos ou de mons­trueux docu­ments bureau­tiques pas opti­mi­sés. Bref, l’usage va chan­ger et ce serait dommage d’avoir un débit trop ridi­cule en montant.

    Entre le 200 (descen­dant) / 50 (montant) de SFR et le 300 (descen­dant) / 300 (montant) de Sosh, tu as beau­coup plus de chances de ressen­tir la diffé­rence de débit montant que la diffé­rence de débit descen­dant (même si 50 Mb/s en montant ça reste 50 fois mieux que ce que tu avais en ADSL, et pas ridi­cule du tout, donc pas forcé­ment le critère).

  • Une histoire de dépen­dances

    Le main­te­neur d’un paquet NPM n’a plus eu envie et a donné la main à un tiers. Ce tiers a injecté un code mali­cieux dans une version publique et poten­tiel­le­ment infecté pas mal de monde. Ça n’a été détecté qu’au bout de deux mois et demi alors que le paquet est utilisé un peu partout.


    J’en vois qui lancent des blâmes ou qui se moquent sur l’ac­tua­lité du paquet NPM mali­cieux. Ça défoule mais : Faites-vous mieux ? Permet­tez-moi d’en douter très très forte­ment.

    Le moindre projet React, Symfony ou Rails, c’est une centaine de dépen­dances directes et indi­rectes, certaines proviennent de sources dont vous n’avez jamais entendu parler. J’ai listé trois frame­works mais c’est bien la même chose sur les autres langages/tech­nos.

    C’est bien le sujet : Sauf si vous avez la taille d’un Face­book/Google ou la criti­cité d’un Thalès ou d’un état, vous n’avez ni les moyens de passer des années-homme à tout reco­der en interne, ni les moyens d’au­di­ter chaque source à chaque mise à jour (si tant est que ça suffise).

    Même ceux que j’ai nommé, je ne suis pas certains qu’ils le fassent toujours, sur tous les types de projet. Je suis même assez convaincu du contraire. Le ratio béné­fice/risque n’est juste pas assez impor­tant pour ça. Les moyens et les délais ne sont pas dimen­sion­nés pour.


    Alors moquez-vous, de ceux qui utilisent NPM, de ceux qui ne contrôlent pas l’en­semble des dépen­dances, mais vous ne faites proba­ble­ment pas mieux. Il y a pas mal d’hy­po­cri­sie dans les réac­tions que je vois passer.

    Ne blâmez pas non plus le main­te­neur d’ori­gine. Lui ne vous a jamais rien promis. C’est même dit expli­ci­te­ment dans la licence « aucune garan­tie d’au­cune sorte ». Ce n’est pas parce que d’autres utilisent son code gratui­te­ment qu’il aurait magique­ment des comptes à rendre. En fait avoir passé la main est plutôt quelque chose d’en­cou­ragé dans l’open source. S’il n’y avait pas eu cette issue, il aurait plutôt fallu le remer­cier.


    Alors quoi ? Alors rien.

    Le problème a été résolu. Si ça arrive trop souvent alors ça chan­gera le ratio béné­fice/risque et la commu­nauté évaluera le fait d’avoir trop de dépen­dances tierces un (tout petit) peu plus néga­ti­ve­ment, et ainsi de suite.

    La ques­tion inté­res­sante que personne ne semble poser c’est celle de l’hon­nê­teté du main­te­neur d’ori­gine. A-t-il vrai­ment passé la main ? et s’il l’a fait, est-ce qu’il en a tiré un béné­fice tout en soupçon­nant ce qui pouvait se passer ? C’est à peu près la seule chose qui pour­rait à mon sens lui faire porter une quel­conque respon­sa­bi­lité.

  • Fire­fox, « anonyme par défaut »

    J’ai­me­rais avoir un Fire­fox confi­guré en « anonyme par défaut ». Ça veut dire deux choses :

    1. Un site ne doit pas pouvoir parta­ger ou croi­ser les données avec un autre ;
    2. Un site ne doit pas pouvoir faire persis­ter des données plus long­temps que la session en cours.

    Si je veux garder une authen­ti­fi­ca­tion perma­nente ou auto­ri­ser des croi­se­ments (par exemple pour des SSO), c’est à moi de le deman­der expli­ci­te­ment.

    Ça pour­rait être fait par une double préfé­rence liée à chaque domaine, quelque chose du type « auto­ri­ser le domaine X à stocker des données persis­tantes dans ce contexte » et « ne pas isoler le domaine X en fonc­tion de l’ori­gine de la page prin­ci­pale ».


    Un site ne doit pas pouvoir parta­ger ou croi­ser les données avec un autre

    Ce premier point est rela­ti­ve­ment bien couvert. L’ex­ten­sion first party isola­tion fait exac­te­ment ça. En gros tout le stockage (cookies, local­sto­rage, indexeddb) est segmenté par l’ori­gine de la page prin­ci­pale dans l’on­glet.

    Le compo­sant Face­book inclut dans les pages de LeMonde ne parta­gera aucune données avec celui inclut dans les pages du Figaro. Il restera l’adresse IP et diverses tech­niques de finger­prin­ting, mais ça va un peu limi­ter.

    Je navigue avec depuis des mois, plutôt avec succès. Il y a encore du boulot. Il faut le désac­ti­ver tempo­rai­re­ment pour faire la confi­gu­ra­tion initiale de Pocket dans Fire­fox, ou pour le SSO « se connec­ter avec google » de quelques sites (pas tous, d’autres fontionnent bien) mais globa­le­ment ça passe très bien.

    Une fois corri­gées les anoma­lies et ajou­tée une façon de désac­ti­ver l’iso­la­tion site par site, ça sera parfait.


    Un site ne doit pas pouvoir faire persis­ter des données plus long­temps que la session en cours

    Ce second point est plus compliqué.

    J’ai tenté initia­le­ment d’uti­li­ser les conte­neurs de Fire­fox pour ça mais tout ce que je peux faire c’est isoler des sites les uns des autres. Au final je me retrouve avec un conte­neur par défaut qui contient la majo­rité du trafic et qui conti­nue à garder mes traces de session en session.

    Il y a peu j’ai trouvé l’ex­ten­sion tempo­rary contai­ners. L’idée c’est que, par défaut, le navi­ga­teur charge un nouveau conte­neur tempo­raire dédié à chaque fois qu’on navigue vers un nouveau domaine. Ce conte­neur et ses données sont détruits dès qu’on ferme l’on­glet.

    Globa­le­ment ça fonc­tionne mais il y a quelques soucis de perfor­mance ressen­tie (au moins des ferme­ture/réou­ver­ture visibles d’on­glet lors des navi­ga­tions) et si on affecte un site à un conte­neur fixe pour éviter de se retrou­ver à chaque fois sur une page non authen­ti­fiée, on perd la capa­cité de l’uti­li­ser en paral­lèle dans plusieurs conte­neurs diffé­rents.

    J’ai globa­le­ment l’im­pres­sion d’abu­ser des conte­neurs pour quelque chose qui n’est pas fait pour.

    L’ex­ten­sion cookie auto­de­lete a une autre approche. On garde le fonc­tion­ne­ment normal des conte­neurs mais, par défaut, l’ex­ten­sion supprime les cookies d’un site dès qu’on ferme tous les onglets qui y mènent. Charge à l’uti­li­sa­teur de faire des excep­tions expli­cites site par site. Globa­le­ment ça fait le job mais ça n’ef­face ni le local­sto­rage ni l’in­dexeddb, ne parlons même pas du tracking par cache HTTP.

    Je trouve ça dommage. Intui­ti­ve­ment j’au­rais pensé que suppri­mer des données était plus facile à faire pour le navi­ga­teur que créer une isola­tion supplé­men­taire entre les sites.

    Suis-je le seul à cher­cher un tel niveau d’iso­la­tion ?

  • « PHP 5 avancé » en chiffres

    Je vois les auteurs racon­ter leur histoire, leurs rému­né­ra­tions. Je n’ai pas trop envie de m’y mélan­ger vu que je n’ai jamais été auteur profes­sion­nel ni n’ai jamais cher­ché à l’être. Mes enjeux d’au­teur du dimanche sont bien diffé­rents. Ajou­tez y que j’ai écrit dans à propos de tech­nique infor­ma­tique, très loin des auteurs de romans et de bande dessi­née.

    Pour autant, c’est aussi l’oc­ca­sion parce que je ne crois pas avoir déjà fait un tel bilan. Peut-être que ça inté­res­sera certain d’entre vous. Dites-moi s’il y a des ques­tions auxquelles je ne réponds pas.

    Atten­tion, ce n’est repré­sen­ta­tif de rien d’autre que de mon cas person­nel. J’ai même tendance à penser que mon histoire entre dans l’ex­cep­tion à plus d’un titre. Le fait qu’il y ait des gros chiffres dans la suite ne doit certai­ne­ment pas vous amener à penser que les auteurs roulent habi­tuel­le­ment sur l’or.

    Six éditions et quatre colla­bo­ra­teurs

    Travail à quatre mains avec Cyril Pierre de Geyer. Le premier chapitre a été fait en février 2003 pour une publi­ca­tion de 700 pages en juin 2004.

    PHP a pas mal évolué et le livre serait rapi­de­ment devenu obso­lète. Nous avons du mettre à jour le livre régu­liè­re­ment. Il y a eu une édition par an jusqu’en 2008 puis une sixième de 870 pages en 2012.

    La troi­sième édition a été reti­rée sur un format « best-of » en 2007, en paral­lèle de la vente de la quatrième dans son format d’ori­gine. J’avoue que ça me semble toujours étrange, d’au­tant que si nous en avons fait une quatrième édition plutôt qu’un reti­rage c’est que l’évo­lu­tion de PHP rendait l’an­cienne version moins perti­nente.

    Nous avons été épaulé par Hugo Hamon pour les relec­tures et l’in­dexa­tion de la cinquième édition. La sixième édition a été parta­gée avec un troi­sième auteur, Frédé­ric Hardy. Il est en petit sur la couver­ture, je le regrette aujourd’­hui.

    Les tirages et les ventes

    Le premier tirage était prévu à 3000 exem­plaires. Vus les chiffres de vente je suppose qu’il en a plutôt été tiré 3200 (ou alors on a vendu des livres qui n’exis­taient pas). Les chiffres des éditions suivantes ne tombant même pas proches de multiples de 250, j’ima­gine qu’on en imprime toujours un peu plus au cas où et que le chiffre final n’est pas tota­le­ment maitri­sable.

    La seconde édition a été tirée à envi­ron 3700 exem­plaires, la troi­sième et la quatrième ont toutes les deux fait entre 3200 et 3300 exem­plaires, plus envi­ron 4000 exem­plaires pour la best-off. La cinquième a béné­fi­cié de deux tirages, proba­ble­ment respec­ti­ve­ment 3400 et 2000 exem­plaires. La dernière a été tirée à quelque chose comme 3800 exem­plaires, proba­ble­ment en deux fois.

    Au total j’ai quelque chose comme 26 500 ventes sur les 12 ans de vie du livre.

    Le travail d’écri­ture

    Diffi­cile d’es­ti­mer le temps passé en écri­ture tant il était très frac­tionné, d’au­tant que ce n’était pas mon acti­vité prin­ci­pale. Sur les 16 mois de travail de l’édi­tion initiale, j’ai quand même du y passer une bonne majo­rité des soirs et week-end, et quelques mois quasi­ment à temps plein. À cela il faut bien entendu ajou­ter le travail de mon co-éditeur.

    Chose éton­nante pour moi, nous n’avons pas utilisé de logi­ciel ou de format de fichier spéci­fique à l’édi­tion, juste du Micro­soft Word avec une feuille de styles interne : un fichier par version et par chapitre nommé d’après l’au­teur a avoir créé la version, le tout dans un FTP.

    Les autres éditions ont été un effort variable, plus fort pour les premières que pour les dernières. On parle quand même géné­ra­le­ment de plusieurs mois pendant des soirs et des week-ends.

    Je n’ai aucune idée du travail total en équi­valent temps plein 35h sala­rié. Si je devais donner un chiffre je dirais proba­ble­ment un an équi­valent temps plein sala­rié, mais en réalité ça peut faci­le­ment être la moitié moins ou moitié plus.

    Malgré la moti­va­tion des premiers temps, faire ça en paral­lèle d’un job très prenant n’est pas aisé, surtout au moment des relec­tures. La colla­bo­ra­tion entre auteurs n’a pas toujours été évidente non plus. Ça parait évident après coup mais écrire à deux quand on ne se connait pas vrai­ment et qu’on ne se voit jamais en face à face, c’est forcé­ment un peu diffi­cile.

    La rému­né­ra­tion

    La rému­né­ra­tion est de 10% du hors taxe pour les ventes françaises grand format (4% sur les ventes à l’étran­ger, 5% sur le format poche — l’édi­teur a souhaité en sortir un une année, nous avons refusé), à parta­ger entre les auteurs initiaux, sans aucune avance, sur des livres qui ont varié de 35 à 45 € pour la collec­tion prin­ci­pale, 25 € pour le best-of.

    Même en allant cher­cher dans les archives, je suis encore aujourd’­hui inca­pable de dire combien j’ai gagné que ce soit en net ou en brut. J’ai des comptes de vente, des détails de coti­sa­tions, des avis de paie­ment et des résu­més de sommes à décla­rer au fisc. Rien ne se recoupe vrai­ment, quand je n’ai pas deux docu­ments d’un même type tota­le­ment diffé­rents pour une même année.

    Disons que la somme encais­sée avant impôts sur le revenu doit être entre 40 et 47 000 euros nets depuis le premier verse­ment en 2005. Précis hein ?

    Ramené à un an de travail c’est effec­ti­ve­ment très bien payé, surtout par rapport à ce que je lis à propos de auteurs en litté­ra­ture, en jeunesse ou en bande dessi­née. Même dans la four­chette haute, en comp­tant deux ans de travail en équi­valent temps plein, ça reste bien au dessus du SMIC. Cela dit il était loin d’être dit que ça rému­nè­re­rait autant, et ce que ça m’a apporté a large­ment dépassé le finan­cier. Je ne pensais pas à l’argent. Je ne m’étais en fait même pas fait de prévi­sion quand j’ai dit oui, et je n’au­rais pas su dire si je m’at­ten­dais à 1 000 ou 10 000 euros.

    Cette somme est après paie­ment de la TVA, de la CSG et CRDS, ainsi que d’une coti­sa­tion de 1% à l’Agessa. Tout ça est prelevé pour moi en amont par l’édi­teur. Pas de retraite, pas de prévoyance, et avec dans les 4000€ par an en moyenne je n’au­rais proba­ble­ment eu aucune couver­ture sociale si je n’avais pas eu un emploi sala­rié en paral­lèle.

    Pour l’im­pôt sur le revenu je déclare ce que l’édi­teur me dit en trai­te­ments et salaires. C’est peut-être idiot ou anor­mal, je n’ai jamais su (on m’a donné des réponses diffé­rentes à chaque fois que je deman­dais ce que devait faire un auteur de loisir) mais du coup c’est imposé sur le barème progres­sif.

    Autant Hugo (en relec­teur) que Frédé­ric (en co-auteur sur la dernière mise à jour) ont été rému­né­rés sur une base fixe, payée par l’édi­teur en plus de nos droits d’au­teur.

    L’édi­teur

    J’en­tends beau­coup de choses sur les éditeurs. Person­nel­le­ment moi j’ai plutôt eu une très bonne expé­rience d’Ey­rolles. Muriel, tu as été vrai­ment super, Karine aussi, et j’ou­blie certai­ne­ment des gens. Je n’ai eu à me plaindre de personne, au contraire.

    Si je devais repro­cher quelque chose, c’est le refus total de consi­dé­rer une durée limi­tée pour la version numé­rique du livre. Je crains cepen­dant qu’il en soit de même pour l’es­sen­tiel des éditeurs et mon co-auteur a de toutes façons refusé toute vente numé­rique par peur du pira­tage (qui a tout de même eu lieu, visi­ble­ment par des fuites des PDF internes desti­nés à l’im­pri­meur, avec les marques de découpe). Oh si, si je devais pinailler, il y a briè­ve­ment eu une mise en vente de la quatrième édition sous forme numé­rique malgré le refus expli­cite au contrat, mais ils y ont mis un terme quand on l’a fait remarquer.

    Je ne m’éten­drai pas sur ce point mais on a même eu une diffi­culté de répar­ti­tion des droits entre co-auteurs à un moment. Non seule­ment l’édi­teur a aidé à sa réso­lu­tion mais il a aussi pris le diffé­ren­tiel à sa charge pour solder le passé. Ok, vu les ventes ils pouvaient se le permettre, mais rien ne les y obli­geait non plus.

    PHP 7 avancé

    Aujoud’­hui PHP 5 avancé n’existe plus. Il y a eu réécri­ture partielle pour construire PHP 7 avancé mais consi­dé­rant les diffi­cul­tés de colla­bo­ra­tion, on a décidé de ne pas forcé­ment le refaire ensemble. Je suis toujours sur la couver­ture en grisé mais j’ai passé la main aux excel­lents Pascal Martin et Julien Pauli, au moins pour les deux premières éditions (la seconde arrive parait-il sous peu).

  • Lais­ser les clefs en partant

    Une version plus récente a été mise en ligne en 2024


    J’ai déjà parlé de testa­ment numé­rique une ou deux fois ici. J’ai déjà vue une amie devoir appe­ler à l’aide pour se récu­pé­rer pas à pas une maigre partie de la vie numé­rique à la dispa­ri­tion de son mari.

    On trouve toujours une solu­tion à tout ce qui est admi­nis­tra­tif mais ça peut être une diffi­culté supplé­men­taire à un moment qui n’est déjà pas le plus simple.

    À la maison c’est tout le reste qui risque de poser problème. On parle de toute la pape­rasse numé­ri­sée ou de tout l’his­to­rique de 15 ans de photos. J’uti­lise des mots de passe complexes, diffé­rents à chaque fois, et je chiffre tous mes disques. Autant dire que si je pars tout devien­dra assez rapi­de­ment illi­sible malgré les meilleurs efforts de mes amis.

    Je ne vois pas d’autres solu­tions que de lais­ser le double de mes clefs au crochet avant de partir.


    La solu­tion elle est connue depuis long­temps, j’avais déjà parlé du prin­cipe du secret de Shamir il y a quelques années mais j’ai procras­tiné. Ce n’est jamais le bon moment pour penser à la mort.

    J’ai pris mon courage à deux mains, je vous propose ce qui est en cours, en espé­rant l’en­ri­chir par vos commen­taires ou aider quelques autres personnes à faire leur propre chemin.


    Le secret de shamir

    Le prin­cipe est assez simple. C’est un calcul mathé­ma­tique qui permet de divi­ser un secret en plusieurs parties. Chaque partie est illi­sible indé­pen­dam­ment mais permet de recons­ti­tuer le secret initial si on en met un certain nombre ensemble.

    Je peux par exemple dire « je divise ce secret en cinq parties qui seront chacune déte­nue par des personnes diffé­rentes, pour recons­ti­tuer le secret initial il faudra la colla­bo­ra­tion d’au moins trois personnes sur les cinq ».

    Il y a plusieurs logi­ciels pour cela. La vraie contrainte est d’en trou­ver un qui sera utili­sable dans 5 ou 10 ans. Je suis parti sur ssss de B. Poet­te­ring : Le logi­ciel a déjà 12 ans, open source, présent sur les diffé­rentes distri­bu­tions Linux, et a quelques fork visibles. La dura­bi­lité semble acquise. J’avais hésité avec libgf­share qui partage à peu près les mêmes carac­té­ris­tiques de vie.

    Les desti­na­taires

    Les nombres de trois et cinq dans mon exemple précé­dent sont des choix arbi­traires. Trois c’est permettre d’avoir assez de résis­tance pour que le secret ne fuite pas trop faci­le­ment, que ce soit par malveillance, par la trom­pe­rie d’un tiers, ou simple­ment par négli­gence. Cinq c’est le mini­mum pour permettre d’avoir au moins deux personnes injoi­gnables le jour où on en a besoin.

    Plus de cinq n’est pas si simple : Il faut des gens en qui j’ai totale confiance au point de leur lais­ser les clefs de ma vie numé­rique, qui ne vont pas en faire mauvais usage, qui ne vont pas lais­ser d’autres en faire mauvais usage, qui ne vont pas lais­ser trai­ner leur secret par négli­gence mais qui vont en assu­rer la péren­nité sur poten­tiel­le­ment des années. Au delà, il faut idéa­le­ment des gens que connait bien ma femme pour que prendre contact ne soit pas une diffi­culté supplé­men­taire au mauvais moment, et qu’ils soient suffi­sam­ment au fait des ques­tions tech­no­lo­giques pour que leur aide ne se limite pas à « tiens, j’ai un papier à te donner » mais soit plus proche de « prends soin de toi, on s’oc­cupe de tout ». Et puis j’ai­me­rais éviter de faire porter ce poids à cinquante amis.

    En ce moment je les contacte pour leur deman­der leur accord. C’est quand je vois les réponses posi­tives que je me rends compte que j’ai choisi les bons.

    Le secret

    Impos­sible de lister les centaines de mots de passe et comptes que je peux avoir partout. Même en limi­tant à ce qui est impor­tant, je crains que les mots de passe ne changent d’ici à ce que ça serve, ou qu’il y en ait de nouveaux.

    Je vais lais­ser le mot de passe de ma boite email, de mon poste de travail, du serveur NAS avec toutes les photos, de mon espace de sauve­garde et quelques autres trucs du genre mais c’est plus pour avoir cein­ture et bretelles.

    L’idée c’est surtout que je partage le mot de passe et les iden­ti­fiants de connexion de mon gestion­naire de mots de passe. Norma­le­ment tout est faisable à partir de là. Aujourd’­hui c’est du Bitwar­den. Je ne sais pas si la société est vrai­ment pérenne mais le code est open source et il y a déjà des clones, donc j’ai bon espoir de ne pas avoir à renvoyer un nouveau secret vers un autre système dans six mois.

    C’est aussi dans Bitwar­den que je peux lais­ser une note avec tout ce que je veux dedans comme infor­ma­tions et procé­dures, et la mettre à jour quand je veux sans savoir à géné­rer et envoyer un nouveau secret à tout le monde.

    Le docu­ment

    Le secret lui même est donc très court, juste quelques mots de passe. Il n’est de toutes façons pas possible d’al­ler au delà de 1024 carac­tères ASCII avec ssss.

    Je compte mettre ça dans un beau docu­ment PDF A4 que mes desti­na­taires peuvent à la fois garder dans leurs archives numé­riques et impri­mer pour leurs archives papier plus durables (même les geeks foirent leurs sauve­gardes numé­riques).

    Dans ma tête je me dis qu’il faudra joindre les amis formel­le­ment une fois par an pour leur deman­der de véri­fier qu’ils n’ont pas perdu leur propre partie du secret et voir s’ils ont changé de coor­don­nées. En pratique je ne sais pas si je ferais ça aussi sérieu­se­ment qu’il le faudrait, donc je consi­dère que le docu­ment doit tout conte­nir.

    Au delà de leur partie du secret, ce docu­ment réca­pi­tule un peu tout ça : À quoi ça sert, quels sont les autres desti­na­taires à joindre et à quelles coor­don­nées (email, télé­phone, adresse postale, éven­tuel­le­ment adresses élec­tro­niques), mais aussi comment recons­ti­tuer le secret origi­nal (nom et adresse du logi­ciel, procé­dure) et ce que j’at­tends d’eux.


    Un peu d’aide

    Ce billet est déjà trop long. Je vous propo­se­rai peut-être une suite avec le texte exact du docu­ment en ques­tion, pour aider les suivants à faire le leur.

    Entre temps je veux bien vos commen­taires pour avan­cer, ou quelques détails sur ce que vous avez mis en place de votre côté.

  • Après la seconde guerre, le web et le mobile

    La seconde guerre des navi­ga­teurs est sur le point d’être termi­née.

    Pour sché­ma­ti­ser, les gens utilisent Safari sur iPhone et iPad — ils n’ont pas le choix. Partout ailleurs il n’y a quasi­ment plus que Chrome. Objec­ti­ve­ment il faut avouer que le logi­ciel est excep­tion­nel, et évolue constam­ment.

    Fire­fox est en baisse lente mais constante, avec désor­mais moins de 10 % du trafic en Europe. Même le fleu­ron de Micro­soft installé par défaut sur plus de 80 % des postes de travail récents, Edge, ne dépasse pas les 3 %.

    On en est au point où quand vous lancez une appli­ca­tion mobile, c’est en réalité parfois les moteurs de Chrome ou de Safari qui fonc­tionnent en arrière plan. Même les versions légères de Fire­fox mobile sont de simples surcouches à Chrome et Safari.


    La guerre des navi­ga­teurs est termi­née et nous l’avons perdue.

    Nous l’avons perdue parce que nous avons aban­donné le futur de l’in­for­ma­tique person­nelle — le web et le mobile.

    L’es­sen­tiel du parc est contrôlé par une régie publi­ci­taire dont le modèle écono­mique est de surveiller et régen­ter tout ce que vous faites sur vos appa­reils. Google et Chrome c’est ça.

    Les 15 à 20% restant sont des appa­reils premium, pour une élite qui peut se les offrir. En échange d’un peu de vie privée, l’en­tre­prise contrôle tota­le­ment les appa­reils et ce qu’elle nous y auto­rise à faire ou non, en fonc­tion de ses inté­rêts commer­ciaux et de la morale nord-améri­caine. Il n’y aura pas d’al­ter­na­tive.


    Aujourd’­hui nous avons déjà plus ou moins aban­donné notre vie privée et/ou notre liberté d’ac­tion sur nos appa­reils. Nous avons aban­donné tout ça mais nous savons que nous avons des portes ouvertes : Il existe des alter­na­tives, au cas où.

    Le problème c’est que nos navi­ga­teurs ont tous 20 ans. Les moteurs on telle­ment évolué qu’ils n’ont proba­ble­ment plus grand chose à voir avec le code de 1998 mais ce qu’on y a fait est telle­ment complexe et demande de telles ressources que personne n’a rien créé de tota­le­ment neuf depuis.

    Même aujourd’­hui, évoluer à la même vitesse que Chrome est loin d’être facile. Il faut des compé­tences diffi­ciles à trou­ver, des ressources finan­cières signi­fi­ca­tives et quasi­ment impos­sible à renta­bi­li­ser.

    Si demain Chrome ou Safari décident d’im­plé­men­ter plus de choses derrière leurs murs sans les parta­ger en open source, cloner un ancien moteur et rattra­per tout ce qu’ils auront fait entre temps risque d’être mission impos­sible.

    Ne parlons même pas du jour où Chrome aura réel­le­ment 80 % du marché et où ils se permet­tront d’avan­cer sans coor­di­na­tion avec quiconque. On n’en est déjà pas si loin d’une certaine façon.

    Le résul­tat c’est que nous avons besoin d’Opera, Fire­fox et Edge, aujourd’­hui, même si ce n’était que pour forcer Chrome et Safari à conti­nuer à jouer le jeu. Ceux qui ont connu la première guerre des navi­ga­teurs savent de quoi on parle. On joue un peu l’ave­nir du web et du mobile. Rien que ça.


    Pourquoi dis-je tout ça ? Parce qu’aujourd’­hui vous utili­sez Chrome, peut-être Safari. Je comprends : Ça fonc­tionne (très bien). C’est confor­table (très).

    Et si vous tentiez de nouveau Fire­fox ?

    Oui, par le passé c’était plus lourd que Chrome. Je ne vous garan­tis pas que le ressenti sera exac­te­ment le même mais la perfor­mance et la consom­ma­tion en ressources est désor­mais objec­ti­ve­ment simi­laire, assez pour que ce ne soit pas la vraie ques­tion.

    Oui, parfois il y a des sites qui fonc­tionnent mieux sous Chrome, ou qui n’im­plé­mentent pas telle ou telle fonc­tion­na­lité annexe ailleurs que sous Chrome. C’est rare mais ça arrive. Il reste que c’est la poule et l’œuf, ils se le permettent parce que vous utili­sez Chrome. Votre vie privée et votre liberté méritent bien un peu de mili­tan­tisme, non ?

    Bref, je ne dis pas que c’est mieux, mais au moins ce n’est pas signi­fi­ca­ti­ve­ment moins bien. Les diffé­rences sont surtout dans les préju­gés et les habi­tudes.

    Le vrai problème c’est le chan­ge­ment. Quand on change, la moindre micro diffé­rence sans impor­tance peut prendre des propor­tions gigan­tesques pour vous convaincre que non, ça ne le fera pas. Il faut résis­ter, deman­der de l’aide si besoin (parce que non, s’il y avait des problèmes sérieux ça se saurait, et ce n’est pas le cas), et tenter de ne pas lancer Chrome pendant un mois. Pas du tout, pour être en immer­sion, sinon la résis­tance au chan­ge­ment pren­dra l’avan­tage.

    N’al­lez pas me dire que vous êtes vieux et sclé­rosé intel­lec­tuel­le­ment au point de ne pas vaincre cette résis­tance au chan­ge­ment… Et si vous essayiez ?

  • Story points

    Points de complexité, points d’ef­fort, tailles de tshirt… J’ai vu des équipes travailler avec des comp­tages allant d’une mesure en heures de travail à des mesures au simple nombre de tickets.

    Je n’ai pas trouvé de réelle corré­la­tion entre la réus­site des équipes et leur façon d’es­ti­mer, ou même avec l’exis­tence ou non d’es­ti­ma­tions.

    Si je devais trou­ver un critère commun à la majo­rité des équipes que j’ai vu bien fonc­tion­ner, le voilà :

    Les esti­ma­tions de tâches indi­vi­duelles sont réali­sées au lance­ment du travail. Elles ne sont pas utili­sées au-delà de la courte période de travail concer­née pour laquelle elles étaient prévues. Elles ne sont pas utili­sées en dehors de l’équipe ou de son fonc­tion­ne­ment interne.


    Déci­der. On estime les epic, ces gros blocs qui recoupent géné­ra­le­ment plusieurs semaines voire plusieurs mois. Ces epic servent à faire des choix, déci­der de l’op­por­tu­nité de réali­ser, confron­ter les prio­ri­tés, savoir s’il est réaliste d’at­teindre l’objec­tif avant un événe­ment parti­cu­lier. Dans tous les cas on parle de stra­té­gie et de tactique.

    Les points de complexité n’ont aucun sens à ce niveau. On a juste besoin d’un ordre de gran­deur. Les esti­ma­tions se font au doigt mouillé et c’est très bien comme ça. 30% de marge d’er­reur c’est presque de la surqua­lité.

    Ces esti­ma­tions n’ont aucune valeur en dehors de la prise de déci­sion. Le péri­mètre n’est pas vrai­ment défini, la tech­nique en est à l’étude de faisa­bi­lité et aux pistes tech­niques crédibles ou non.


    Réagir. Et puis à partir de là on passe éven­tuel­le­ment en réali­sa­tion. Mesu­rer l’avan­ce­ment permet de ne pas se perdre, d’iden­ti­fier les blocages, de se rendre compte quand on patauge. C’est ce qui permet éven­tuel­le­ment de dire « on a un problème, il faut chan­ger quelque chose » ou « l’ordre de gran­deur qui a mené à la déci­sion de réali­sa­tion se révèle faux, est-ce qu’on conti­nue ou pas ? ».

    On peut mesu­rer en fonc­tion d’es­ti­ma­tions de travail ou en fonc­tion de ce qui est livré à la sortie. Les deux ont du sens et je vous invite à faire les deux. Côté scrum on parle de la burn-down qui trace le travail, limité à une itéra­tion ou à une date butoir, et la burn-up qui trace la valeur produite sur du plus long terme.

    Ces esti­ma­tions ne servent qu’à ça, iden­ti­fier d’éven­tuels problèmes pour agir en fonc­tion. Elles ne servent pas à savoir si l’équipe travaille bien ou pas. Ce sont de sacré­ment mauvais indi­ca­teurs pour ça.


    Et donc les problèmes arrivent quand on croise les deux.

    Les esti­ma­tions et les plans ne sont pas faits pour mesu­rer le succès et le travail d’une équipe. Il sont faits pour déci­der et réagir. Rien de plus.

    Un plan long terme ne se construit pas en jouant au puzzle à agen­cer plein de petits blocs ensemble pour les caser dans l’agenda. Ça ne fonc­tionne déjà pas pour les tâches de pure exécu­tion, parce que 18 tâches de 10 minutes ne prennent pas le même temps qu’une tâche de 180 minutes.

    Ça fonc­tionne encore moins dès qu’il y a une acti­vité de réflexion, de créa­tion, ou simple­ment l’in­ven­tion de quelque chose qui n’existe pas. On ne connait pas tout à l’avance, le puzzle sera explosé avant d’avoir atteint le premier quart. C’est vrai autant d’un point de vue fonc­tion­nel que tech­nique.

    Mais surtout, le plan est fait pour être changé. Mesu­rer la réalité par rapport au plan c’est dire que le chan­ge­ment et l’im­prévu doivent être vali­dés en amont, qu’ils sont anor­maux, qu’en que si la réalité ne corres­pond pas au plan c’est la réalité qui a tort et que le problème se situe donc au niveau de ceux qui suivent le plan.

    Malheu­reu­se­ment essayer de tordre ou de contes­ter la réalité ne fonc­tionne que à ma connais­sance que dans les livres et les films de science-fiction (et encore : même là, en géné­ral, on a les problèmes qui nous sautent au visage dès qu’on essaie).

    Par­fois il y a aussi des problèmes au niveau de ceux qui suivent le plan, mais savoir si la réalité est conforme au plan est tout sauf le bon indi­ca­teur pour ça.

  • 7 milliards et demi

    Github est un concen­tré de tech­no­lo­gies. On ne refera pas Github de zéro avec juste une poignée de déve­lop­peurs dans un garage.

    Mais… 7 milliards et demi de dollars. Vous comp­tez comme vous voulez mais la tech­no­lo­gie seule en vaut diffi­ci­le­ment un centième. Multi­pliez par 10 parce que c’est prêt et qu’on évite du risque et du délai, il y aura encore au moins un zéro de trop. Les divi­dendes à venir ne valent pas cette diffé­rence.

    Ce que Micro­soft achète ce n’est pas Github, le logi­ciel et les équipes, c’est vous, clients. Vous et vos projets. On vient de vous vendre comme une marchan­dise. Vous n’en avez même pas touché des miettes.

    Moi non plus.