Catégorie : Technique

  • Nouveau tour dans les CSS-in-JS

    L’his­toire

    J’ai aban­donné mes premiers amours qu’é­taient les feuilles de style sépa­rées avec des nommages bien séman­tiques. Je travaille par les appli­ca­tions front-end par compo­sants, j’ai besoin que les styles fonc­tionnent de façon simi­laire.

    BEM était une bonne idée mais impra­ti­cable. Le nommage est pénible et il fallait encore garder une synchro­ni­sa­tion entre la feuille de style et les compo­sants. J’ai eu plai­sir à trou­ver CSS Modules mais on conti­nue à jongler sur deux fichiers distincts avec des imports de l’un à l’autre. Il fallait faire mieux.

    J’ai besoin que les styles soient édités au même endroit que les compo­sants, toujours synchro­ni­sés, mis à jour en même temps, limi­tés chacun au compo­sant ciblé.

    Tail­wind a trouvé une solu­tion à tout ça en géné­rant statique­ment la feuille de style à partir des compo­sants eux-mêmes. Je comprends pourquoi ça plaît mais je n’ar­rive pas à consi­dé­rer que redé­fi­nir tout un pseudo-langage paral­lèle puisse être une bonne idée. On finit toujours par devoir apprendre CSS, que ce soit pour expri­mer quelque chose que le pseudo-langage ne permet pas, ou simple­ment pour comprendre pourquoi le rendu n’est pas celui qu’on imagine.

    Je suis parti vers les solu­tions CSS-in-JS quand je code du React. Faire télé­char­ger et exécu­ter toute une biblio­thèque comme Emotion est loin d’être idéal mais ça reste fina­le­ment assez négli­geable sur une appli­ca­tion front-end moderne.

    Entre temps j’ai quand même décou­vert Goober, qui implé­mente le prin­ci­pal en tout juste 1 ko. L’éli­mi­na­tion des styles morts contre­ba­lance proba­ble­ment large­ment ce 1 ko de Javas­cript. On aurait pu en rester là.


    La mise à jour

    Je suis quand même gêné de devoir embarquer une biblio­thèque Javas­cript. J’ai fouillé voir si rien de mieux que Goober et Emotion n’avait pointé le bout de son nez depuis la dernière fois que j’ai tout remis en cause. Il se trouve que le paysage a sacré­ment évolué en cinq ans.

    D’autres que moi ont eu envie d’al­ler vers du plus simple. On parle de zero-runtime. Les styles de chaque compo­sant sont extraits à la compi­la­tion pour créer une feuille de style dédiée. Les parties dyna­miques sont faites soit avec des variantes prédé­fi­nies, soit avec des variables CSS qui sont ensuite mani­pu­lée par Javas­cript via les attri­buts `style`.

    Le véné­rable c’est Vanilla-extract mais on a juste une version plus complexe et entiè­re­ment Javas­cript des CSS-Modules. C’est d’ailleurs le même auteur, et le même problème fonda­men­tal : deux fichiers distincts à mani­pu­ler et à synchro­ni­ser.

    Vient ensuite Lina­ria qui semble une vraie merveille. Il a l’es­sen­tiel de ce que proposent les CSS-in-JS avec de l’ex­trac­tion statique avec tout ce qu’on attend au niveau de l’ou­tillage : types­cript, source maps, prépro­ces­seur et véri­fi­ca­tion de syntaxe, ainsi que l’in­té­gra­tion avec tous les cadres de travail clas­siques.

    Lina­ria c’est aussi WyW-in-JS, qui opère toute la partie extrac­tion et trans­for­ma­tion, au point de permettre à qui veut de créer son propre outil concur­rent à Lina­ria. Je trouve même cette réali­sa­tion bien plus signi­fi­ca­tive que Lina­ria lui-même.

    L’équipe de MUI en a d’ailleurs profité pour faire Pigment-CSS et conver­tir tout MUI. Pigment reprend tout le prin­cipe de Lina­ria avec la gestion des thèmes, la gestion des variantes, et quelques raccour­cis syntaxiques pour ceux qui aiment l’ap­proche de Tail­wind. En échange, ces fonc­tion­na­li­tés ne sont possibles qu’en écri­vant les CSS sous forme d’objets Javas­cript plutôt que sous forme de texte CSS direc­te­ment. La biblio­thèque est aussi plus jeune et la compa­ti­bi­lité avec tous les cadres de travail ne semble pas assu­rée.

    J’ai aussi traversé Panda-CSS mais sans être convaincu. Panda génère tout en statique mais il génère tout une série d’uti­li­taires et de variables par défaut, et injecte beau­coup d’uti­li­taires dans le Javas­cript qui sera exécuté avec l’ap­pli­ca­tion. C’est un croi­se­ment entre Emotion, Tail­wind et Lina­ria, mais qui du coup me semble un peu Fran­ken­stein. À vouloir tout à la fois, on finit par ne rien avoir de franc.


    Si c’est pour utili­ser avec MUI, le choix se fait tout seul. Dans le cas contraire, au moins pour quelques mois le temps que Pigment-CSS se déve­loppe un peu plus, Lina­ria me semble un choix plus sage. S’il y a quoi que ce soit qui coince, Goober reste une solu­tion prag­ma­tique et tout à fait accep­table.

  • Arrê­tons avec les frame­works agiles

    Jetez moi SCRUM, Shape-up et les autres, et encore plus leurs versions dites « at-scale » type SAFe.

    Je ne comprends même pas comment on en est arrivé là alors que le mani­feste agile met en avant «  Les indi­vi­dus et leurs inter­ac­tions, de préfé­rence aux proces­sus et aux outils ».

    Prétendre cadrer les indi­vi­dus et les inter­ac­tions via des proces­sus et des outils métho­do­lo­giques est un contre-sens total de ce qu’on a appris depuis le mani­feste.

    Quand on me demande ma méthode de prédi­lec­tion je parle de Kanban, parce que l’im­plé­men­ta­tion dans le logi­ciel revient juste à limi­ter le flux et donner une prio­rité à ce qui est déjà en cours, avec une grande liberté d’im­plé­men­ta­tion. S’il s’agis­sait de cher­cher une implé­men­ta­tion « comme dans la litté­ra­ture », je raye­rais d’un trait et range­rai Kanban avec les autres.


    Appliquer des outils et des proces­sus tout faits ça rassure quand on n’a pas confiance dans les indi­vi­dus et leurs inter­ac­tions.

    Le fond c’est la défiance, souvent du top mana­ge­ment, même si parfois elle se diffuse jusqu’aux équipes elles-mêmes à force de leur poser des exigences contra­dic­toires.

    L’idée c’est souvent que si les résul­tats ne sont pas ceux espé­rés c’est que les équipes travaillent mal, alors on va leur expliquer comment il faut travailler en impo­sant une recette sans cher­cher à appro­fon­dir les problèmes eux-mêmes.

    Rien que le présup­posé me semble toxique.


    Ne vous mépre­nez pas. Je trouve formi­dable que Base­camp forma­lise la façon dont ils fonc­tionnent. Ce n’est pas une critique de leur fonc­tion­ne­ment. Il y a plein de choses à penser dans la lecture de Shape-up.

    Le trans­po­ser tel quel avec des rituels, par contre, c’est proba­ble­ment une mauvaise idée. Trans­po­ser quoi que ce soit tel quel est proba­ble­ment une mauvaise idée d’ailleurs. Le cargo-cult est bien trop présent dans l’uni­vers logi­ciel, et encore plus dans l’uni­vers star­tup.

    Chaque équipe a ses besoins, des aspi­ra­tions, ses contraintes, ses indi­vi­dus. Croire que ce qui fonc­tionne à côté fonc­tion­nera chez nous en le reco­piant c’est se trom­per de prio­rité entre les indi­vi­dus et les proces­sus. C’est d’au­tant plus vrai qu’en géné­ral on en applique les arte­facts visibles mais pas la philo­so­phie sous-jacente.

    Je ne suis même pas convaincu que ce soit un bon point de départ pour ensuite itérer. Les rituels ont tendance à ne pas bouger, voire à s’ac­cu­mu­ler, surtout qu’ils appar­tiennent à « la méthode ». S’il faut commen­cer c’est proba­ble­ment par SLAP.


    Tout n’est pas à jeter. Il y a plein d’idées inté­res­santes à reprendre à droite et à gauche. Mon problème c’est la reprise d’un cadre complet comme si ça allait résoudre les problèmes.

    Dans mes boites à outils, en fonc­tion des besoins, j’au­rais tendance à conseiller les points suivants :

    • Des rétros­pec­tives régu­lières, à date fixe
    • Des itéra­tions de durée rela­ti­ve­ment fixe
    • Des points de synchro internes fréquents voire quoti­diens
    • Des démos aux utili­sa­teurs et parties prenantes
    • Une notion d’ap­pé­tit pour les sujets qu’on veut livrer
    • Une esti­ma­tion d’ordre de gran­deur de l’ef­fort pour la prio­ri­sa­tion

    Bref, un kanban avec des cycles qui permettent de régu­liè­re­ment sortir la tête du guidon, prendre du recul, voir ce qu’on veut chan­ger dans notre fonc­tion­ne­ment, déci­der quelle direc­tion on veut prendre pour la suite, et de vrais échanges amonts pour expli­ci­ter la complexité et l’ap­pé­tit pour les diffé­rents items.

    Le reste s’ajoute avec grande prudence. Sauf besoin spéci­fique j’au­rais tendance à décon­seiller les items suivant :

    • Les enga­ge­ments de livrai­son, hors besoin absolu (on ne déca­lera pas Noël)
    • Les esti­ma­tions autres que des ordres de gran­deur
    • Les back­logs (oui oui, vous avez bien lu)
    • Avoir plus d’un objec­tif par itéra­tion
    • Avoir déjà étudié la solu­tion avant de commen­cer
    • Tenter d’ap­pliquer ce que d’autres équipes font dans d’autres contextes au sein d’autres cultures
  • Rust, première jour­née

    Je suis le circuit de Compre­hen­sive Rust.

    Le jour 1 ce sont les struc­tures de contrôle et les types. Rien d’ex­tra­or­di­naire mais je me tiens à ma réso­lu­tion d’al­ler lente­ment sans griller des étapes.

    J’avais déjà tenté de me mettre à Rust il y a quelques années mais je me suis retrouvé un peu noyé. Je crois que j’ai voulu aller trop vite, tout lire sans mani­pu­ler jusqu’à me retrou­ver bloqué par manque de réflexes. Là je vais prendre l’op­tion oppo­sée.

    J’ai beau­coup aimé le retour impli­cite de Ruby. La dernière instruc­tion de chaque bloc est sa valeur de retour. Rust a choisi un méca­nisme un peu plus expli­cite, proba­ble­ment pour simpli­fier la gestion des types de retour : Il s’agit d’une valeur de retour si la dernière instruc­tion n’est pas suivie d’un point virgule.

    Je trouve ce choix trop discret, et cassant l’au­to­ma­tisme du point virgule systé­ma­tique. J’ai bien conscience que le compi­la­teur va m’évi­ter l’es­sen­tiel des erreurs mais quitte à ne pas avoir un retour impli­cite systé­ma­tique j’au­rais proba­ble­ment préféré avoir un retour plus expli­cite avec un symbole ou un mot clef en début de ligne, quitte à faire un return complet.

    Et, juste­ment, les points virgules en fin de ligne me sortent par les yeux. C’est quelque chose dont j’ai réussi à me débar­ras­ser en JS et en Ruby, que je ne retrouve pas en Python non plus. Je suis dans l’in­com­pré­hen­sion qu’un langage conçu rela­ti­ve­ment récem­ment ait fait le choix de les rendre obli­ga­toires.

    Tout le monde m’avait loué le compi­la­teur. Je n’ai pas fait d’er­reur assez forte pour vrai­ment juger des messages mais j’ai l’im­pres­sion de reve­nir plusieurs années en arrière telle­ment c’est lent. C’est pour moi un vrai point noir dans l’uti­li­sa­tion alors que je n’en suis qu’à des équi­va­lents « hello world ». Comment les déve­lop­peurs Rust font-ils pour accep­ter des attentes de ce type à chaque compi­la­tion ?

    Pas que du néga­tif. En fait à part ces trois points de détails, je retrouve mes petits assez faci­le­ment et ça semble assez fluide sur les méca­nismes de base.

  • Leet­code

    Je cherche un bon moyen d’éva­luer la compé­tence tech­nique d’un déve­lop­peur. Aujourd’­hui j’ai un test qui semble bien fonc­tion­ner pour notre usage mais que je trouve clai­re­ment trop long avec 4 heures.

    J’ai toujours été réti­cent aux exer­cices tableau blanc de type parcours d’arbre, calculs sur tableau et autres jeux d’al­go­rithme. J’ai quand même voulu tester un peu les clas­siques leet­code que certains utilisent comme lors des tests d’en­trée.

    Quelques conclu­sions après une ving­taine d’exer­cices de diffi­cul­tés variables d’un parcours qui m’est présenté comme repré­sen­ta­tif :

    Ces exer­cices dépen­dant plus du bacho­tage préa­lable que de l’ex­pé­rience ou de la compé­tence.

    Pour une bonne partie, le faire bien demande d’avoir vu le truc une fois, ou de connaître le bon algo. Ce ne sont pas des choses qui se trouvent simple­ment en réflé­chis­sant, a fortiori pas pendant un test tech­nique en temps limité avec une dose de stress.

    J’en ai un ou deux dont je ne connais­sais pas l’al­go­rithme et je n’ai pas été capable de trou­ver une bonne solu­tion en termes de récur­si­vité, complexité de calcul ou espace mémoire. Ça ne s’in­vente pas.

    À l’op­posé, sur la plupart je connais­sais le truc et le temps passé était sur la syntaxe ou des erreurs d’inat­ten­tion. Zéro inté­rêt. Même là où l’ex­pé­rience a pu jouer, sur les parcours avec des poin­teurs, je classe ça dans les connais­sances qui ne m’ont presque jamais servi et pas dans les acquis de l’ex­pé­rience.

    Je suis convaincu qu’un débu­tant sorti d’école avec un peu de bagage théo­rique et pas mal de bacho­tage s’en sortira bien mieux, y compris à expliquer sa solu­tion, qu’un déve­lop­peur senior avec un super impact en entre­prise.

    Je ne vois pas comment ça va aider à justi­fier de ma valeur ou à évaluer celle des autres

    Je ne dis pas qu’on n’a jamais à jouer avec les poin­teurs, les tris, les parcours et ce genre de choses, mais ce n’est clai­re­ment pas repré­sen­ta­tif des problé­ma­tiques qui seront rencon­trées.

    Le cas échéant, ce sont juste­ment des problèmes pour lesquels on va utili­ser des biblio­thèques exis­tantes ou pour lesquels on trou­vera très bien la réponses sur un moteur de recherche.

    Il est évident que l’exer­cice va permettre de faire un tri dans les candi­dats mais je n’ai pas l’im­pres­sion que ce soit sur le bon critère.

    Bien évidem­ment ça doit dépendre des métiers. Un ingé­nieur sur le cœur d’une base de données doit certai­ne­ment être assez près de ces problé­ma­tique, mais ça ne me semble pas être le cas de 90% des ingé­nieurs.

    Peut-être que je n’ai pas vu les bons tests, mais je reste assez dubi­ta­tif.

    Pour ceux qui utilisent ces tests ou des simi­laires, y compris ceux à l’as­pect un peu plus ludique, qu’y cher­chez-vous exac­te­ment ?

  • Comment déve­lop­pera-t-on demain ?

    Les déve­lop­peurs de mes équipes demandent depuis un moment des licences Github Copi­lot. J’ai vu quelques personnes parler de l’édi­teur Cursor.sh.

    J’avoue que j’ai eu envie de tester un peu. Sur un projet perso j’ai tenté l’ap­proche « allons-y tota­le­ment ». Je suis bluffé.

    Bon, j’ai encore le réflexe de cher­cher tout ce que je ne sais pas dans les docs. Ça veut dire que je demande prin­ci­pa­le­ment des choses que je saurais déjà faire, et poten­tiel­le­ment aussi rapi­de­ment seul qu’en saisis­sant ma demande dans l’in­ter­face. Je ne sais pas si je gagne vrai­ment du temps mais, même ainsi, l’in­ves­tis­se­ment de 2x 20$ par mois me semble une évidence.

    Avec le temps je risque de me repo­ser vrai­ment dessus et là ça fera certai­ne­ment une énorme diffé­rence. Pour un débu­tant qui apprend à coder direc­te­ment avec ces outils, ça doit être juste une révo­lu­tion.

    Le métier de déve­ve­lop­peur est en train de chan­ger radi­ca­le­ment. Je ne sais pas s’il sera le même dans 10 ans. Je ne sais même pas si ça a du sens d’en­sei­gner le code à mon fils de 11 ans.

    On est en train de tester ça au boulot, plus Code rabbit pour les revues de code. Si je trouve d’autres choses perti­nentes j’ai une propen­sion assez forte à ajou­ter aussi. Même sur un budget total de 100 ou 150 $ par mois et par déve­lop­peur, ce serait assez mal avisé de reje­ter la chose.

    Reste l’éner­gie néces­saire à tout ça, et là on touche vite la limite du modèle :

    « OpenAI’s CEO Sam Altman on Tues­day said an energy break­through is neces­sary for future arti­fi­cial intel­li­gence, which will consume vastly more power than people have expec­ted.

    Reuters, 16 janvier 2024

    Je n’ai pas de conclu­sion. L’as­pect produc­ti­vité ne fait aucun doute. La limite éner­gé­tique aussi. Malheu­reu­se­ment les deux ne vont pas du tout dans le même sens.

  • Move fast and break things

    Les discus­sions sont cycliques. Au détour d’un article sur la sonde Voya­ger j’en vois encore ironi­ser sur les équipes qui se refusent à déployer le vendredi après-midi.

    C’est un équi­libre des risques.

    Je ne veux pas les latences au déploie­ment que peut avoir la NASA. Je ne veux pas les coûts d’as­su­rance qualité de la NASA. Je suis prêt à casser des choses ponc­tuel­le­ment si c’est pour avan­cer vite.

    « Move fast and break things » ce n’est pas qu’un Moto. C’est un vrai choix stra­té­gique.

    Et si on assume le risque casser des choses, en fonc­tion du contexte et des besoins, ce n’est pas forcé­ment décon­nant de choi­sir quand gérer ce risque.

    La règle de la mise en produc­tion du vendredi, pour les équipes qui en ont une, n’est parfois que cela : un arbi­trage entre le risque de casse, le béné­fice à livrer main­te­nant, la dispo­ni­bi­lité des équipes dans les heures ou jours a venir, la faci­lité ou l’en­vie de rappe­ler les personnes concer­nées hors heures ouvrées si néces­saire, la dispo­ni­bi­lité d’équipes d’as­treinte, la possi­bi­lité de lais­ser un site dysfonc­tion­nel tout un week-end ou pas, etc.

    En géné­ral les équipes arbitrent ça très bien elles-mêmes. À chacun de voir si livrer un vendredi soir avant de partir est perti­nent pour son propre contexte. Les deux seules options fautives sont de ne pas y réflé­chir et d’igno­rer le risque.

    « Si ta CI est bien faite, tu n’es sensé rien casser »

    La plate­forme d’in­té­gra­tion conti­nue ne va tester que ce que l’équipe a pensé à lui faire tester. L’équipe ne pensera jamais à tout. D’ailleurs même la NASA fait des erreurs, et l’ar­ticle cité en haut de billet relate juste­ment une anoma­lie décou­verte au cours de la vie de la sonde.

    Avoir une bonne plate­forme d’in­té­gra­tion conti­nue dans laquelle on a confiance n’em­pêche pas de prendre en compte le risque dans ses choix.

    Même si je pouvais avoir une CI parfaite, pour ma part, je ne le voudrais d’ailleurs pas. Le jour où je n’au­rai plus aucun inci­dent ni anoma­lie, je consi­dé­re­rai qu’on a mal fait notre travail en surin­ves­tis­sant dans la qualité par rapport à nos besoins réels.

  • Petite anti­ci­pa­tion du 22 avril 2023

    Je parti­cipe à l’édi­tion de SudWeb à venir.

    Je ne sais pas ce que devien­dront ces rendez-vous physiques dans le nouveau monde où tant de personnes semblent préfé­rer le télé­tra­vail. SudWeb a fermé ses portes un moment. ParisWeb aurait très bien pu le faire et l’équa­tion semble diffi­cile.

    Je suis heureux de retrou­ver de nouveau, au moins cette fois, la bande d’amis et de connais­sances qui partagent quelques unes de mes valeurs. Ça reste des moments de repos même si, forcé­ment, le nombre de personnes fait que ça me demande une éner­gie monstre.

  • Dis tonton, c’est quoi les blocages d’ins­tance sur Masto­don ?

    Voilà qu’on reparle de modé­ra­tion de Masto­don. L’his­toire de départ c’est une instance (« Info­sec ») qui a choisi d’en mettre une autre (« Journa ») sous silence pour ne pas subit les propos que cette dernière a choisi de lais­ser en ligne.

    Hein ? Une instance ?

    Masto­don fonc­tionne à travers un réseau fédéré. Son petit nom est le fédi­verse. Les utili­sa­teurs sont regrou­pés en ilots plus ou moins gros qu’on appelle les instances. Certains utili­sa­teurs ont leur propre instance person­nel. D’autres instances regroupent plusieurs dizaines de milliers de personnes.

    Si un Tom d’Info­sec est abonné à Alice de Journa, alors les deux instances commu­niquent entre elles pour que Journa envoie les messages d’Alice à Info­sec. Info­sec fera ensuite en sorte de les présen­ter à Tom.

    Schéma représentant trois cercles avec des flèches allant dans les deux sens entre chaque couple de cercle.

Dans le premier cercle, quatre noms : Tom, Tina, Titus, Tara.

Dans le second cerce, quatre noms : Anna, Alice, Agnès, Albus.

Dans le troisième cercle : Cédric, Clara, Cloé.
    Diffé­rentes instances

    Vous connais­sez déjà ça avec les emails, qui fonc­tionnent sur le même prin­cipe. On a un îlot Gmail, un Outlook, un Yahoo, un Orange, un Free… et chaque entre­prise créé le sien avec son propre nom.

    Ok, mais c’est quoi le blocage d’une instance ?

    Si Info­sec choi­sit de bloquer entiè­re­ment Journa, alors elle ne trai­tera plus les nouveaux messages de cette dernière et n’y enverra plus les siens. On parle de défé­dé­rer une instance.

    Cette procé­dure n’in­fluera que sur l’ins­tance qui réalise qui le blocage (Info­sec) et les utili­sa­teurs de cette dernière. L’ins­tance ciblée (Journa) conti­nuera à conver­ser avec toutes les milliers d’autres instances du réseau.

    Schéma représentant trois cercles avec des flèches allant dans les deux sens entre chaque couple de cercle.

La flèche qui va du cercle des A vers le cercle des T est bloqué par une croix rouge du côté du cercle des T.
La flèche qui va du cercle des T vers le cercle des A est bloquée elle aussi au niveau du cercle des T, et est représentée en pointillés.

Dans le premier cercle, quatre noms : Tom, Tina, Titus, Tara.

Dans le second cerce, quatre noms : Anna, Alice, Agnès, Albus.

Dans le troisième cercle : Cédric, Clara, Cloé.
    Blocage d’une instance par une autre.

    En réalité il y a un niveau inter­mé­diaire qu’on appelle la mise sous silence.

    Masto­don a trois flux : le flux person­nel qui présente unique­ment les abon­ne­ments, le flux local qui présente unique­ment les messages locaux à l’ins­tance, et le flux fédéré qui présente tous les messages reçus par l’ins­tance.

    La mise sous silence masque les conte­nus concer­nés dans le flux fédéré mais permet de rece­voir des messages dans le flux person­nel à condi­tion de s’y être expli­ci­te­ment abonné.

    C’est ce niveau de blocage inter­mé­diaire (la mise sous silence) qui a été mis en œuvre par Info­sec.

    Mais pourquoi faire ça ?

    La vraie réponse : Peu importe. Si tu choi­sis de ne pas écou­ter CNews chez toi, tu n’as pas à donner d’ex­pli­ca­tion. C’est ton choix.

    C’est la même chose pour l’ins­tance Info­sec et ses utili­sa­teurs : Ils font ce qu’ils veulent chez eux.

    Le plus souvent on bloque une instance quand elle est la source de spam, de harcè­le­ments, ou de propos racistes, trans­phobes, handi­phobes, pédo­por­no­gra­phiques ou inju­rieux.

    Chaque instance a ses propres sensi­bi­li­tés. Certaines tiennent à une liberté d’ex­pres­sion très large, d’autres préfèrent exclure la porno­gra­phie ou certains sujets pour créer un espace qui leur convient.

    Certains préfèrent une modé­ra­tion légère quitte à subir parfois quelques conte­nus problé­ma­tiques là où d’autres préfèrent une modé­ra­tion forte quitte à limi­ter certaines inter­ac­tions externes légi­times.

    C’est un choix local, qui ne concerne qu’eux.

    Ici Info­sec a jugé que certains propos venant de Journa étaient trans­phobes et les utili­sa­teurs d’Info­sec souhai­taient s’en proté­ger (c’est à dire ne plus les voir ni en assu­rer la trans­mis­sion chez eux).

    On bloque toute une instance et tous les utili­sa­teurs pour un unique message problé­ma­tique ?

    Masto­don prévoit un moyen de signa­ler les propos gênants à l’ins­tance d’ori­gine. Le plus souvent les blocages d’ins­tance inter­viennent quand l’ins­tance d’ori­gine (ici Journa) refuse d’agir, ou que le problème survient trop régu­liè­re­ment.

    Pour faire un paral­lèle, si je sais que CNews invite régu­liè­re­ment des invi­tés que je ne supporte pas, je peux préfé­rer ne plus du tout regar­der CNews pour m’en proté­ger, quitte à ne plus entendre certains autres invi­tés qui seraient eux accep­tables à mes yeux. Je n’in­ter­dis pas CNews, je choi­sis juste de ne pas diffu­ser cette chaîne dans mon salon.

    J’avoue que sur ce sujet, si j’avais eu à modé­rer, avec une seule occur­rence qui n’est qu’un partage d’un contenu d’un jour­nal de réfé­rence, j’au­rais mis sous silence unique­ment l’uti­li­sa­teur concerné et pas l’ins­tance, mais ce n’est que mon choix lié à mes équi­libres person­nels.

    Info­sec a fait un autre choix, et il ne regarde qu’eux.

    Pourquoi est-ce que Journa a refusé d’agir sur des propos trans­phobes ?

    Les équi­libres de liberté d’ex­pres­sion sont très subjec­tifs. Tous les pays n’ont déjà pas le même socle de base en interne. Les commu­nau­tés peuvent en plus choi­sir d’al­ler au-delà de ce socle de base. Certaines le font, d’autres pas, et pas toujours sur les mêmes sujets.

    Enfin, parfois il y a simple­ment désac­cord sur ce qui est ou pas inju­rieux, ce qui est ou pas trans­phobe, ce qui est ou pas raciste, ce qui est ou pas un consti­tu­tif d’un harcè­le­ment, etc.

    Les commu­nau­tés se regroupent autour de poli­tiques, valeurs et cultures communes, mais n’ont pas forcé­ment les mêmes que le voisin.

    C’est ce qu’il se passe ici. Soit Journa a consi­déré que l’ar­ticle du New York Times relayé était suffi­sam­ment étayé avec des avis de docteurs et cher­cheurs à propos des effets indé­si­rables de certains trai­te­ments, soit Journa n’a pas agit en pensant que ce n’est pas son rôle de tran­cher une telle ques­tion et remettre en cause le New York Times.

    D’autres personnes sur Info­sec ont, elles, consi­déré que le contenu était trans­phobe et qu’il valait mieux bloquer l’ins­tance si elle n’agis­sait pas pour empê­cher la diffu­sion de conte­nus trans­phobes à l’ave­nir. Info­sec a agit en fonc­tion de ses propres utili­sa­teurs, et ça ne regarde qu’eux (oui, je me répète mais c’est impor­tant).

    Ça pose quand même un sacré problème de liberté d’ex­pres­sion, non ?

    En fait, pas vrai­ment, pas beau­coup plus que tous les gens qui comme moi font le choix de ne jamais allu­mer la TV sur CNews.

    Personne n’em­pêche les membres de Journa de s’ex­pri­mer, ou d’être entendu, ou même d’être relayé sur la très grande majo­rité des instances Masto­don.

    Dans le schéma de tout à l’heure, le blocage est à la péri­phé­rie de l’ins­tance Info­sec et pas à la péri­phé­rie de l’ins­tance Journa. Tant qu’Info­sec n’est qu’un des très nombreux acteurs du réseau, ça ne pose pas de problème majeur.

    Schéma représentant trois cercles avec des flèches allant dans les deux sens entre chaque couple de cercle.

La flèche qui va du cercle des A vers le cercle des T est bloqué par une croix rouge du côté du cercle des T.
La flèche qui va du cercle des T vers le cercle des A est bloquée elle aussi au niveau du cercle des T, et est représentée en pointillés.

Dans le premier cercle, quatre noms : Tom, Tina, Titus, Tara.

Dans le second cerce, quatre noms : Anna, Alice, Agnès, Albus.

Dans le troisième cercle : Cédric, Clara, Cloé.
    Blocage d’une instance par une autre.

    Les seuls pour qui il y aurait poten­tiel­le­ment un enjeu de liberté d’ex­pres­sion, ce sont les membres de l’ins­tance d’Info­sec.

    Ahah ! Tu vois, tu le dis toi-même, il y a bien un problème pour eux !

    Ça dépend. Si je parti­cipe à une asso­cia­tion, qu’il y a une TV dans la salle de pause et qu’il a été décide que cette TV diffu­se­rait Arte plutôt que CNews, est-ce une atteinte à la liberté d’ex­pres­sion parce que je ne peux pas y écou­ter les chro­niqueurs de CNews ?

    Proba­ble­ment pas : Je peux encore écou­ter CNews chez moi, ou dans une autre asso­cia­tion, ou même monter ma propre asso­cia­tion qui aura des règles diffé­rentes. Cela ne commen­cera à être un problème que si ma capa­cité à aller voir ailleurs est limi­tée ou complexe, ou si on donne à l’as­so­cia­tion d’ori­gine une auto­rité quel­conque.

    C’est exac­te­ment la même chose avec Info­sec. Ses membres peuvent toujours aller lire Journa ailleurs avec un second compte, ou démé­na­ger leur compte prin­ci­pal sur une autre instance, ou même monter leur propre instance. Ajou­ter un second compte ou migrer ailleurs est facile, sans limite.

    Non seule­ment personne ne bride l’ex­pres­sion des membres de Journa mais en plus personne ne limite la capa­cité à aller les lire faci­le­ment.

    Pour­tant tu disais toi-même que…

    La ques­tion surgi­rait diffé­rem­ment si Info­sec avait une situa­tion de quasi-mono­pole, ou que toutes les instances bloquant Journa avaient en se regrou­pant une situa­tion de quasi-mono­pole limi­tant de fait la capa­cité à accé­der au contenu dont on parle.

    Ce n’est pas le cas aujourd’­hui.

    Ce serait aussi un sujet pour un blocage liti­gieux réalisé de façon cachée. Ici l’ad­mi­nis­tra­teur d’Info­sec a publié un billet sur le sujet et le fait même que j’en parle ici montre qu’on est loin de ce cas.

    Ça pose au moins une ques­tion de démo­cra­tie interne d’In­fo­sec

    Pas à mon avis. Tout fonc­tion­ne­ment interne n’a pas forcé­ment à être démo­cra­tique. C’est impor­tant pour un pays ou une collec­ti­vité terri­to­riale parce qu’on ne choi­sit pas son pays d’ori­gine et qu’on ne change pas faci­le­ment de pays ou de terri­toire.

    La démo­cra­tie c’est « le pouvoir au peuple ». Sur Masto­don l’uti­li­sa­teur a le pouvoir vu qu’il peut choi­sir à tout moment une instance avec des règles qui lui conviennent, sans avoir de consé­quences néga­tives signi­fi­ca­tives.

    C’est d’au­tant moins un sujet que le message de l’ad­mi­nis­tra­teur d’Info­sec laisse entendre que ce sont des utili­sa­teurs de l’ins­tance qui l’ont fait agir et pas lui qui a pris la déci­sion unila­té­ra­le­ment.

    Mais alors il n’y a aucun problème ?

    Il y a plein de problèmes, mais pas forcé­ment des ques­tions de liberté d’ex­pres­sion ou de démo­cra­tie, et pas forcé­ment sur le cas Info­secJourna.

    Un premier problème est la trans­pa­rence. Info­sec a agi en trans­pa­rence mais ce n’a pas toujours été lé cas de toutes les instances par le passé. Quand c’est trans­pa­rent on fait nos choix, éven­tuel­le­ment on va voir ailleurs. Quand c’est caché ça veut dire mani­pu­ler l’in­for­ma­tion reçue et influen­cer des personnes sans qu’ils ne le sachent, et ça c’est déjà beau­coup plus liti­gieux.

    La contrainte est un second problème. Ce ne semble pas le cas ici mais par le passé la menace de défé­dé­rer a été utili­sée comme une pres­sion pour forcer une autre commu­nauté à chan­ger ses propres règles et valeurs (« si tu ne bloques pas l’ins­tance xxx alors on bloque ton instance aussi »). On est là dans une démarche où l’ou­til a été détourné pour deve­nir une arme plutôt qu’un bouclier.

    Enfin, il y a un sujet si une instance ou un groupe d’ins­tances peut avoir suffi­sam­ment de poids pour que ça devienne effec­ti­ve­ment un sujet de liberté d’ex­pres­sion. C’est parti­cu­liè­re­ment le cas si on cumule avec le problème précé­dent. Là ça peut être aussi moche qu’un réseau centra­lisé, ou créer plusieurs sous-réseaux indé­pen­dants et qui ne commu­niquent pas entre eux.

    Du coup le système de Masto­don est problé­ma­tique ?

    Oui, non, ça dépend de tes propres choix.

    C’est juste qu’il n’y a pas de système parfait ni de façon univer­selle de posi­tion­ner les équi­libres entre les diffé­rents enjeux.

    Le choix de Masto­don est un choix qui répond à des problèmes vus sur Twit­ter ou d’autres réseaux centra­li­sés, qui ouvre d’autres possi­bi­li­tés et d’autres façons de penser les équi­libres. C’est déjà pas mal.

    Que peut-on amélio­rer ?

    1. Inci­ter à plus de trans­pa­rence à l’in­té­rieur d’une instance, sur ce qui est bloqué globa­le­ment et pourquoi.
    2. Refu­ser globa­le­ment les guerres de modé­ra­tion entre instances et les instances qui veulent contraindre les règles des autres (le « si tu ne bloques pas l’ins­tance xxx alors on bloque ton instance aussi »)
    3. S’as­su­rer qu’au­cune instance ne repré­sente plus de 20% des utili­sa­teurs actifs, et qu’un groupe d’ins­tances ne devienne majo­ri­taire au point de pouvoir deve­nir un problème.
    4. Faire en sorte que jamais la procé­dure de démé­na­ge­ment de compte ne soit limi­tée, même en cas de blocage d’ins­tance.
  • VSCode Live Share

    J’ai régu­liè­re­ment le senti­ment d’une avan­cée extra­or­di­naire des pratiques et des outils en 15 ans.

    Aujourd’­hui on peut faire du travail à deux avec flux audio, vidéo, et code à quatre mains sur les mêmes fichiers.

    Je peux suivre chacune des actions de mon collègue et suivre son déroulé en l’écou­tant. Quand il parle d’une dépen­dance à chan­ger je peux aller le faire en paral­lèle sans l’in­ter­rompre dans son avan­cée. Il voit ses tests passer au vert au fur et à mesure de mon travail annexe. Je peux à tout moment reve­nir vers ce qu’il fait si ce qu’il dit m’in­té­resse ou m’in­ter­roge, et il en est de même dans l’autre sens.

    On alterne suivi et travail paral­lèle, sur le même code, avec la possi­bi­lité de se complé­ter pour éviter la charge mentale de « j’ai ça qu’il faudra que je fasse » et les micro-inter­rup­tions pour gérer toutes ces micro-tâches annexes.

    Dites, est-ce moi qui suis dans la phase de sur-valo­ri­sa­tion ou est-ce qu’on ne devrait plus travailler que comme ça ? (à distance en visio ou côte à côte à l’oral, peu importe).

    J’ai l’im­pres­sion de cumu­ler à la fois les avan­tages du pair progra­ming et du travail en paral­lèle.

  • Les personnes ne sont pas plus agres­sives sur les réseaux sociaux. Ils rendent juste visibles ceux qui le sont.

    We found that people are not more hostile online than offline; that hostile indi­vi­duals do not prefe­ren­tially select into online (vs. offline) poli­ti­cal discus­sions

    Online Trolls Actually Just Assholes All the Time, Study Finds, Gizmodo, 2021

    et

    New research suggests that the inter­net is not respon­sible for making people become more aggres­sive when enga­ging in poli­ti­cal discus­sions online, but rather makes the beha­viour of more aggres­sive people more visible.

    Inter­net shown to amplify and expose real-life trolls, but not create them, Insti­tu­tion of Engi­nee­ring and Tech­no­logy, 2021

    Qui sont des vulga­ri­sa­tions de l’étude suivante :

    we test the mismatch hypo­the­sis but only find evidence for limi­ted selec­tion effects. Instead, hostile poli­ti­cal discus­sions are the result of status-driven indi­vi­duals who are drawn to poli­tics and are equally hostile both online and offline. Finally, we offer initial evidence that online discus­sions feel more hostile, in part, because the beha­vior of such indi­vi­duals is more visible online than offline.

    The Psycho­logy of Online Poli­ti­cal Hosti­lity: A Compre­hen­sive, Cross-Natio­nal Test of the Mismatch Hypo­the­sis, 2021 [preprint]