Catégorie : Technique

  • « 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.

  • Gérer son pota­ger

    Propo­ser de l’auto-héber­ge­ment c’est comme recom­man­der aux gens de faire leur propre pota­ger quand ils te parlent des problèmes de la chaîne de distri­bu­tion alimen­taire (*).


    Oui l’auto-suffi­sance alimen­taire est un énorme pas dans le bon sens. Non tout le monde n’a pas les connais­sances ou les compé­tences pour main­te­nir son pota­ger, les moyens finan­ciers d’avoir un terrain et le maté­riel perti­nent, ou simple­ment le temps à y consa­crer.

    Même quand on a tout ça, on peut vite se retrou­ver avec une récolte à vide, ou obligé de déver­ser plus de pesti­cide et plus d’eau que ne le ferait une culture inten­sive.

    Bref, c’est super, mais ce n’est pas la solu­tion magique à tout et pour tout le monde. Pas ainsi.

    Certains feront leur pota­ger, mais plus par plai­sir ou convic­tion que comme source d’ap­pro­vi­sion­ne­ment. D’autres iront dans des AMAP, dans des circuits courts, au super­ma­ché bio ou soli­daire, à la supé­rette du coin, ou même au super­mar­ché en faisant atten­tion à ce qu’ils achètent, en fonc­tion de leurs moyens, de leurs contraintes et de leurs besoins.


    L’auto-héber­ge­ment c’est pareil. Il vous faut un maté­riel adapté, une connexion Inter­net stable et suffi­sante, des compé­tences non négli­geables, et surtout pas mal de temps et d’at­ten­tion.

    Main­te­nir un service en fonc­tion­ne­ment n’est qu’une petite partie du problème. Combien de ceux à qui on aura conseillé l’auto-héber­ge­ment vont se retrou­ver sans sauve­garde fonc­tion­nelle au premier inci­dent ? Combien vont faire une erreur et perdre leurs données ? Combien auront une qualité de service accep­table ? Et surtout, combien vont gérer correc­te­ment la sécu­rité ?

    Genma parle d’éli­tisme. C’est un peu vrai mais il n’y a pas que ça. Même pour quelqu’un du métier, qui a les moyens finan­ciers et du temps à y consa­crer, une sécu­rité correcte demande désor­mais un inves­tis­se­ment déme­suré pour la plupart des besoins person­nels.


    Je ne dis pas que c’est forcé­ment une mauvaise idée. La centra­li­sa­tion et la dépen­dance sont de vrais enjeux, la vie privée aussi, mais ne résu­mons pas ça à l’auto-héber­ge­ment.

    Faites-le pour vous amuser, pour apprendre, pour tester, pour bidouiller. Faites-le si vous en avez envie, tout simple­ment. Aidez ceux qui veulent le faire.

    Arrê­tez par contre d’as­sé­ner ça comme une solu­tion facile et univer­selle. Arrê­tez de faire culpa­bi­li­ser ceux qui délèguent et font confiance à un pres­ta­taire. Vous ne rendez service à personne, pas même à vos amis et votre famille à qui vous êtes en train de dire « mais si, sois dépen­dant de moi et mets-moi admi­nis­tra­teur sur toutes tes données, tu verras ce sera génial ».


    (*) L’ana­lo­gie n’est pas de moi, je l’ai croi­sée récem­ment chez Clochix, merci à lui.

    Mise à jour : Depuis, l’ex­cellent Aeris a parlé de ça en détail et avec bien plus de brio que moi. Allez lire.

  • Un serveur email chif­fré

    J’amorce mon départ de Gmail, dans la lignée de la reprise de contrôle sur mes données. Le problème avec les emails c’est qu’on est dans un écosys­tème où tout est échangé en clair.

    J’ai aban­donné l’idée de conver­tir tout le monde à GPG. En fait j’ai même aban­donné l’idée de m’y conver­tir moi-même. J’ai long­temps eu des clefs expo­sées sur mes profils en ligne et malgré un réseau très geek sensible à ces ques­tions, je crois que je n’ai jamais reçu un seul email chif­fré.

    Bref, vous échan­gez les emails en clair avec l’ex­té­rieur et vous ne pour­rez rien faire contre ça. Vous pouvez cepen­dant chif­frer vos archives et tout email dès sa récep­tion. C’est ce que font Proton­mail, Tuta­nota et Mail­den.

    Mail­den ce sont des versions modi­fiés de Post­fix et Dove­cot qui chiffrent et déchiffrent les emails à la volée pour vous. Le serveur a donc accès à vos clefs quand vous vous y connec­tez mais promet de les oublier dès que la connexion prend fin. L’avan­tage c’est que de votre point de vue vous avez un serveur email tout ce qu’il y a de plus clas­sique.

    Proton­mail et Tuta­nota gèrent eux un vrai chif­fre­ment de bout en bout. Le serveur ne voit jamais passer votre clef de déchif­fre­ment. Seul vous pour­rez lire vos email une fois qu’ils ont été chif­frés. En échange il vous faudra des appli­ca­tions email spéci­fiques ou un proxy de déchif­fre­ment inter­mé­diaire.

    Aucun des deux modèles n’est parfait. Tuta­nota me tente mais ça reste assez spar­tiate et j’ai peur que leur approche de la recherche m’em­pêche d’y indexer toutes mes archives. Disons que ça sera à tester avant de s’en­ga­ger.

    Mail­den pour­rait être une option mais si c’est pour faire confiance au serveur lors de la récep­tion des emails, lors de l’en­voi des email, lors de chaque accès, et que contacts comme calen­driers devront être gérés tota­le­ment en clair chez un autre héber­geur…

    … Je commence à me deman­der si tout ça vaut le coup et si je ne devrais pas juste sous­crire à la gamme complète chez Fast­mail. Ce ne sera pas chif­fré mais c’est un bon choix et je leur fais confiance pour ne pas exploi­ter mes données privées. Ce pour­rait être un compro­mis perti­nent le temps que Tuta­nota et les offres simi­laires soient un peu plus abou­ties.


    Pourquoi pas Proton­mail plutôt que Tuta­nota ?

    Sécu­rité : Tuta­nota chiffre les contacts et le sujet des emails, pas Proton­mail. Tuta­nota propose aussi ses appli­ca­tions clientes en open source, ce qui apporte un peu plus de garan­tie ou permet d’hé­ber­ger soi-même le webmail.

    Utili­sa­tion : Proton­mail a la bonne idée d’of­frir un proxy pour utili­ser un vrai client email sur le poste fixe mais en échange l’app mobile ne saura pas faire de recherche dans le contenu des emails, ce qui me parait un défaut très sérieux.

    Prix : Au delà de 5 Go, Proton­mail est prohi­bi­tif. On parle de 1€ le Go par mois.

    Pour mon usage, avec un gros quota et un usage mobile complet, le choix est vite fait.

  • Mes données dans une parti­tion chif­frée sous Linux

    Je cherche essen­tiel­le­ment à me proté­ger de quelqu’un qui vole­rait mon disque après s’être intro­duit chez moi. Je garde donc une parti­tion en clair pour le système prin­ci­pal et je mettrai les données sur une parti­tion chif­frée que je monte manuel­le­ment.

    Certaines docu­men­ta­tions proposent de mettre la clef de chif­fre­ment sur un petit stockage USB mais ça ne me semble pas perti­nent pour la menace dont je cherche à me proté­ger.

    J’ai une pass­phrase dans mon gestion­naire de mots de passe et ça me suffira. Je ne compte pas m’en servir souvent de toutes façons. Avan­tage supple­men­taire par rapport à la version sur USB : Je peux me connec­ter en SSH et monter la parti­tion à distance pour peu que je ne craigne pas que quelqu’un se soit intro­duit sur ma parti­tion système entre temps.

    Des docu­men­ta­tions je retiens le chif­fre­ment de blocs avec luks, et le fait de bien passer par crypt­se­tup plutôt que de tout gérer à la main.

    Je reco­pie ici mes quelques commandes mais c’est tout bien expliqué sur la docu­men­ta­tion crypt­se­tup du wiki Ubuntu.

    Créa­tion

    sudo apt install cryptsetup
    sudo cryptsetup luksFormat -c aes -h sha256 /dev/sda4
    sudo cryptsetup luksOpen /dev/sda4 data
    sudo mkfs.ext4 -L data /dev/mapper/data
    sudo mkdir /mnt/data
    sudo echo "data /dev/sda4 none luks,noauto,quiet" >> /etc/crypttab
    sudo echo "/dev/mapper/data /mnt/data ext4 rw,nosuid,exec,noauto,async,user,noatime,nodiratime 0 0" >> /etc/fstab
    sudo mount /mnt/data

    La pass­phrase vient du géné­ra­teur aléa­toire de mon gestion­naire de mot de passe. J’ai cher­ché un inter­mé­diaire entre « le plus long possible » et « si ça se trouve j’au­rais à la taper à la main un jour ». En temps normal ce ne sera que des copier/coller donc ça ira.

    Script de montage

    #!/bin/bash
    # /usr/local/sbin/mount.data
    cryptsetup luksOpen /dev/sda4 data
    mount /mnt/data

    Script de démon­tage

    #!/bin/bash
    # /usr/local/sbin/umount.data
    umount /mnt/data
    cryptsetup luksClose data

    Je l’ai créé mais j’avoue que je vois mal dans quel cas je vais avoir envie de démon­ter ma parti­tion sans arrê­ter tota­le­ment le système (et dans ce cas ça sera fait tout seul sans mon inter­ven­tion de toutes façons).

  • Comment on fait de la crypto dans le navi­ga­teur ?

    Faire de la cryp­to­gra­phie dans le navi­ga­teur se révèle bien plus simple que prévu.

    Lais­sez tomber les portages de libso­dium & co. Quasi­ment tous les navi­ga­teurs supportent désor­mais une API native dédiée. Seul IE11 ne le fait pas tota­le­ment mais il a au moins le mini­mum qu’est la géné­ra­tion de nombres réel­le­ment aléa­toires. Ceux qui veulent vrai­ment pour­ront complé­ter l’im­plé­men­ta­tion d’IE11 avec un poly­fill sans risquer de problème de sécu­rité.

    Il y a plein de jolis exemples sur qnimate mais certaines choses datent un peu. J’ai tenté de résu­mer ici pour ceux que ça inté­resse. Ici pour du déchif­fre­ment à partir d’une clef secrète.

    Avant-propos

    Je ne suis pas un expert en chif­fre­ment et ce genre de choses est toujours à manier avec précau­tion. Si vous faites quelque chose de sérieux, ne vous conten­tez pas d’exemples et embau­chez quelqu’un qui sait.

    Rien que choi­sir l’al­go­rithme perti­nent demande de savoir ce qu’on fait. AES-CTR semble perti­nent pour mon cas d’usage où n’ai pas besoin de véri­fier l’au­then­ti­cité du message, où je n’ai pas envie de me colti­ner les ques­tions de padding, et où je serai heureux de profi­ter des multiples cœurs des smart­phones.

    Si l’al­go­rithme choisi ou autre chose vous dérange et que vous en savez plus que moi, n’hé­si­tez pas à commen­ter.

    Récu­pé­rer une clef

    Le plus simple est de récu­pé­rer direc­te­ment une clef au format JSON Web Key (en gros la clef en base64url plus un peu de méta­don­nées). Dans ce cas il suffit de passer par importKey :

    const crypto = window.crypto.subtle;
    
    const jwk = {
      "kty": "oct",
      "use": "enc",
      "k": "SDRSTgdOpUGfgn3iAwiC1cpzsevLM98r_6ehMXlK1Gk",
      "alg": "A256CTR"
    };
    const algo = {name: "AES-CTR"};
    const exportable = false;
    const usage = ["decrypt"];
    
    const key = await crypto.importKey("jwk", jwk, algo, exportable, usage);
    Déri­ver une clef

    Si on veut partir d’une phrase secrète mémo­ri­sable et non d’une clef complète, on commence par créer une clef tempo­raire et on utilise un algo­rithme de déri­va­tion comme PBKDF2.

    Malheu­reu­se­ment pour créer cette première clef il faut passer par un TextEn­co­der et ArrayBuf­fer. peut toujours déri­ver la clef à partir de là. TextEn­co­der n’existe pas sous Edge et IE11, il vous faudra utili­ser une fonc­tion comme uniba­bel qui fait ça pour vous.

    const crypto = window.crypto.subtle;
    const encoder = TextEncoder();
    
    const passphrase = "l'eau ça mouille, le feu ça brûle";
    const buffer = encoder.encode( passphrase );
    const d_algo =  {name: 'PBKDF2'};
    const d_exportable = false;
    const d_usage = ['deriveBits', 'deriveKey'];
    const d_key = await crypto.importKey('raw', buffer, d_algo, d_exportable, d_usage);
    
    const deriv = { 
      name: 'PBKDF2',
      salt: encoder.encode( "c'est le week-end !" ),
      iterations = 25,
      hash: 'SHA-256',
    };
    const algo = {name: "AES-CTR", length: 256}; 
    const exportable = false; 
    const usage = ["decrypt"];
    
    const key = await crypto.deriveKey(deriv, d_key, algo, exportable, usage);

    La sécu­rité de tout ça dépend de la longueur et de l’uni­cité de votre phrase secrète initiale. À vous de trou­ver le bon compro­mis entre la sécu­rité et la puis­sance des smart­phones qui risquent d’uti­li­ser votre code. Le 25 ici est pure­ment arbi­traire et le temps de calcul néces­saire est propor­tion­nel.

    Déchif­frer

    Déchif­frer n’est pas plus diffi­cile.

    Le vecteur d’ini­tia­li­sa­tion (iv) et la donnée chif­frée (encryp­ted) sont atten­dus sous forme d’Ar­rayBuf­fer. Il faudra de nouveau passer par uniba­bel ou une autre solu­tion si vous avez ça sous forme de chaîne binaire ou codé en base64.

    Le résul­tat de decrypt() vous est retourné sous la même forme. S’il est petit le plus simple est d’uti­li­ser TextDe­co­der ou uniba­bel. Si vous avez quelque chose de plus volu­mi­neux vous pouvez aussi passer par un Blob et un FileRea­der.

    const crypto = window.crypto.subtle;
    const decoder = TextDecoder
    
    const key = ...
    const iv = ...
    const encrypted = ...
    
    const algo = { name: 'AES-CTR', iv: iv }
    const buffer = await crypto.decrypt(alg, key, encryted);
  • Trou­ver un héber­geur pour des fichiers statiques

    Je conti­nue l’ex­plo­ra­tion pour la bascule de mon héber­ge­ment, et plus préci­sé­ment l’hé­ber­ge­ment de mes fichiers statiques.

    Idéa­le­ment j’ai besoin d’un quota de 1 ou 2 Go, de pouvoir y bran­cher 4 domaines diffé­rents avec du HTTPS, de pouvoir régler des entêtes de cache correctes sur les fichiers que je veux, et si possible défi­nir des règles de redi­rec­tion ou de réécri­ture. Pas de PHP, pas de base de données, pas de trucs qui consomment du CPU.

    On m’a proposé pas mal de choses, pour l’ins­tant je retiens, dans cet ordre :

    Netlify, qui est opti­misé pour ça et qui a un compte gratuit qui semble conve­nir. Un système qui ne prévoit pas de PHP et de choses consom­ma­trices ça me garan­tit que je ne vais pas me retrou­ver sur une machine à bout de souffle et que tout est dédié à mon usage.

    Lautre.net, asso­cia­tif héri­tage indi­rect de altern.org. On se retrouve sur les clas­siques pas cher qui permettent du PHP et tout plein de choses, et qui géné­ra­le­ment sont un peu à la peine, mais altern.org fut mon premier accès au web et rien que pour ça ça me ferait plai­sir de contri­buer à son survi­vant. La coti­sa­tion à 23€ est abor­dable et c’est pour une asso.

    Gandi simple hosting, dont l’offre small+ssl semble à priori conve­nir et les 36 € de la première année sont accep­tables. Pour les suivantes ça dépen­dra de ce que j’y trouve. J’ima­gi­nais pouvoir héber­ger de bêtes fichiers statiques pour moins cher que 70 €.

    OVH avec les offres d’hé­ber­ge­ment web mutua­lisé. L’offre «  perso » est à 43 € l’an­née mais je ne sais pas trop à quoi m’at­tendre côté qualité.

    Always­data, figure connue, je sais que ça le fera mais le prix commence à monter avec les 80 €.

    Online.net a une offre « perso » à 30 € l’an­née mais je ne sais pas si elle gère plusieurs domaines. Ce n’est pas clair et j’ai les mêmes réserves que les mutua­li­sés OVH.

    Sur le reste, si ça en inté­resse d’autres avec des besoins simi­laires, on m’a aussi pointé o2switch.fr, phpnet.org

    J’ai écarté tout ce qui est à plus de 100 € l’an­née et les « quasi­ment gratuit tout illi­mité » qui ne m’ins­pirent pas du tout confiance, et les offres VPS vu que mon but était juste­ment d’avoir du managé.

    Si vous avez d’autres noms, des recom­man­da­tions ou des commen­taires critiques sur l’un ou sur l’autre, c’est le moment.