This is a valid Atom 1.0 feed.
This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
line 277, column 0: (32 occurrences) [help]
<a href="#slide-02"><img src="https://mart-e.be/images/2024/conf_ ...
<script type="module">
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>mart-e</title><link href="https://mart-e.be/" rel="alternate"></link><link href="https://mart-e.be/feed" rel="self"></link><id>https://mart-e.be/</id><updated>2025-02-24T11:02:00+01:00</updated><subtitle>La vie, Linux, la tartiflette...</subtitle><entry><title>Réécrire le monde en Rust</title><link href="https://mart-e.be/2025/02/reecrire-le-monde-en-rust" rel="alternate"></link><published>2025-02-24T11:02:00+01:00</published><updated>2025-02-24T11:02:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2025-02-24:/2025/02/reecrire-le-monde-en-rust</id><summary type="html"><p>J’ai commencé à <a href="https://mart-e.be/2023/12/mart-e-apprend-le-rust-a-noel">apprendre le Rust</a> il y a un an, et, une fois les concepts inhabituels de <em>borrow-checker</em> surmontés (enfin presque…), je suis vite devenu un grand fan …</p></summary><content type="html"><p>J’ai commencé à <a href="https://mart-e.be/2023/12/mart-e-apprend-le-rust-a-noel">apprendre le Rust</a> il y a un an, et, une fois les concepts inhabituels de <em>borrow-checker</em> surmontés (enfin presque…), je suis vite devenu un grand fan. Rapidement, j’ai attrapé cet étrange a priori qu’un logiciel écrit en Rust était un gage de qualité (probablement une sorte de <a href="https://fr.wikipedia.org/wiki/Syndrome_de_Stockholm">syndrôme de Stockholm</a>). Tel un pratiquant de CrossFit, le développeur Rust vous fera d’ailleurs rapidement savoir quel langage est utilisé dans son projet logiciel.</p>
<p>Est-ce que Rust est le meilleur choix pour tous les usages ? Bien sûr que non. Rust permet d’écrire du code sécurisé et rapide. Rapide d’exécution, mais pas forcément de développement. Mon choix de l’utiliser pour l’<a href="https://adventofcode.com/">Advent of Code</a> ou <a href="https://artifactsmmo.com/">ArtifactsMMO</a> est typiquement un exemple d’usage inefficace. Coder ces projets en Python aurait été tellement plus rapide, pour un résultat similaire. Mais, mon but était d’apprendre, pas d’être productif. Si réaliser un site web entièrement en Rust est possible, ce ne sera probablement pas un choix judicieux la plupart du temps.</p>
<p><a href="https://kerkour.com/rust-is-bad-for-servers">Why Amazon, Cloudflare and Discord are building servers in Rust but you should probably not | Sylvain Kerkour
</a></p>
<p>Rust est, par contre, bien plus pertinent lorsqu’il est discuté comme alternative au vénérable C (C date de 1972 et Rust de 2012). La vitesse d’exécution de C et de Rust est relativement comparable, mais C ne possède pas les mêmes garanties de sécurité dans la gestion de la mémoire. Avec Rust, l’on a la garantie que toutes les références pointent vers une mémoire valide. Si cela paraît évident dans des langages (plus lents) comme Python ou JavaScript, c’est loin d’être le cas pour des langages bas niveau comme le C, où le difficile boulot de la gestion de la mémoire est relégué au développeur. En 2014, le bug de sécurité <a href="https://fr.wikipedia.org/wiki/Heartbleed">Heartbleed</a> avait fait parlé de lui dans les journaux. La cause, illustrée dans <a href="https://xkcd.com/1354/">un strip de XKCD</a>, était une mauvaise gestion de la mémoire dans OpenSSL (écrit en C).</p>
<figure>
<a href="https://xkcd.com/1354/"><img src="https://mart-e.be/images/2025/xkcd-heartbleed.png"/></a>
<figcaption>OpenSSL est utilisé dans la plupart des serveurs et de très nombreux logiciels</figcaption>
</figure>
<p><a href="https://www.zdnet.com/article/microsoft-70-percent-of-all-security-bugs-are-memory-safety-issues/">Microsoft</a> et <a href="https://www.chromium.org/Home/chromium-security/memory-safety/">Google</a> ont estimé à 70 % la part des failles de sécurité dues au problème de gestion de la mémoire dans certains de leurs produits comme Chromium. L’utilisation d’un langage avec des garanties de mémoire supprimerait cette classe d’attaque.</p>
<p><a href="https://www.phoronix.com/news/Rust-Is-Merged-Linux-6.1">Depuis 2022</a>, Rust peut officiellement cohabiter aux côtés du code C dans le noyau Linux. On ne parle pas d’une réécriture du code existant (qui serait une tâche gigantesque) mais du développement de nouvelles fonctionnalités ou drivers. Et cela est loin de faire l’unanimité. Aussi étrange que cela puisse paraître, les développeurs de Linux sont des humains et, comme tout humain, ils n’aiment pas le changement. En septembre 2024, un des leaders de l’initiative <a href="https://rust-for-linux.com/">Rust for Linux</a> jette l’éponge et accuse les développeurs actuels d’être trop hostiles à l’idée de remplacer des composants C par du Rust. En février 2025, c’est le lead developer d’<a href="https://asahilinux.org/">Asahi Linux</a> qui <a href="https://marcan.st/2025/02/resigning-as-asahi-linux-project-lead/">annonçait sa démission</a>. Ici encore, les blocages avec les mainteneurs pro-C sont mentionnés comme une des raisons. La cohabitation de deux langages amène une complexité qui pourra être vue comme inutile ou un mal nécessaire en fonction du camp.</p>
<p>Si le débat est virulent sur les réseaux sociaux, rappelons que 99,9 % de Linux est toujours écrit en C et que l’on est encore loin du grand remplacement. Deux visions s’affrontent : la transition vers un langage plus moderne, opposée à la prudence de ne pas changer les choses qui fonctionnent. Au FOSDEM 2025, Miguel Ojeda, un des développeurs de Rust for Linux se voulait rassurant et <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-6507-rust-for-linux/">faisait le point sur le projet</a>. Les choses bougent lentement, mais bougent dans la bonne direction. L’avenir nous dira si les tensions sont surmontées ou si l’« expérience Rust » sera finalement abandonnée.</p>
<p>En réponse à ces frictions, certains appellent à la création d’un noyau alternatif écrit entièrement en Rust. Un des exemples les plus aboutis est <a href="https://www.redox-os.org/">Redox OS</a>, un micro-noyau créé en 2015. Cependant, on ne réinvente pas 30 ans de développement avec quelques développeurs motivés. On est, actuellement, à des années lumières d’un équivalent au noyau Linux et de tout son écosystème.</p>
<figure>
<a href="https://www.flickr.com/photos/usnationalarchives/3929214076/"><img src="https://mart-e.be/images/2025/rust-crab.jpg"/></a>
</figure>
<p>Dans les projets de réécriture en Rust, une initiative intéressante est le projet <a href="https://www.memorysafety.org/">Prossimo Memory Safety</a> par l’<a href="https://www.abetterinternet.org/">ISRG</a> (Internet Security Research Group, le groupe derrière <a href="https://letsencrypt.org">Let’s Encrypt</a>). Leur but est d’identifier et de réécrire en Rust certains composants C ou C++ jugés critiques dans l’infrastructure d’internet. Si le noyau Linux fait partie des composants identifiés, la liste des projets comprend également sudo, curl, OpenSSL ou zlib. Le projet <a href="https://github.com/trifectatechfoundation/sudo-rs">sudo-rs</a>, réécriture du vénérable <a href="https://www.sudo.ws/">sudo</a>, est, par exemple, stabilisé et utilisable de façon transparente en remplacement de la commande d’origine.</p>
<p>Toujours au FOSDEM de cette année, <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-6196-rewriting-the-future-of-the-linux-essential-packages-in-rust-/">Sylvestre Ledru présentait</a> son projet <a href="https://uutils.github.io/">uutils</a> dont le but est de réimplémenter tous les composants essentiels de Linux en Rust (<code>ls</code>, <code>find</code>, <code>cat</code>…). Si l’intention est louable, je préfère rester prudent. Qui est derrière ce projet ? Est-ce qu’ils sont prêts à maintenir ces implémentations pendant plusieurs dizaines d’années ? De plus, on notera que la réécriture transforme des logiciels C sous licence GPL en utilitaires Rust sous licence MIT. J’ai expliqué tout mon amour pour cette dernière <a href="https://mart-e.be/2024/12/la-licence-mit-cest-un-truc-de-droite">dans un précédent article</a>. Et <a href="https://github.com/uutils/coreutils/issues/834">je ne suis pas le seul</a> à ne pas apprécier le changement.</p>
<p>Il ne suffit d’ailleurs pas de réécrire un composant en Rust pour que tout se passe bien. Depuis 2020, un travail d’intégration avait commencé pour utiliser la librairie <a href="https://hyper.rs/">Hyper</a> (écrit en Rust) dans <a href="https://curl.se/">cURL</a> (écrit en C). Daniel Stenberg, le mainteneur de cURL, a cependant <a href="https://daniel.haxx.se/blog/2024/12/21/dropping-hyper/">récemment annoncé </a>qu’il abandonnait cette expérimentation. Ce travail était sponsorisé par l’ISRG via Prossimo mais l’abandon a été justifié par le manque d’intérêt des utilisateurs et par l’effort trop important pour le maintenir. Il ne suffit pas de réécrire quelque chose en Rust pour qu’il soit automatiquement meilleur et massivement adopté. Dans sa présentation <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-5088-lessons-from-rewriting-systems-software-in-rust/">Lessons from rewriting system software in Rust</a>, Ruben Nijveld (un des développeurs du projet Prossimo) rappelait l’importantce de choisir ses batailles et qu’il pouvait être contre-productif de faire des réécritures intempestives.</p>
<p>Toutes les conversions ne doivent pas être faites pour des raisons de sécurité. Par exemple, <a href="https://fishshell.com/blog/rustport/">l’équipe de fish justifie</a> sa réécriture de C++ en Rust… parce que c’était plus marrant. Fish étant un projet bénévole, il était important qu’ils prennent du plaisir à le développer.</p>
<p>Si Rust est un effort pour moderniser l’écriture de code bas niveau et bénéficie de beaucoup d’enthousiasme, rien ne garantit qu’il va s’imposer et remplacer le C. Et même si c’était le cas, cela prendra encore de très nombreuses années.</p>
<p>Pour faciliter la chose, certains essayent d’ailleurs d’automatiser la conversion. La DARPA (agence de recherche pour la défense aux États-Unis) a d’ailleurs lancé son projet <a href="https://www.darpa.mil/research/programs/translating-all-c-to-rust">TRACTOR</a> (TRanslating All C TO Rust) dans le but de convertir automatiquement son code critique C en code Rust <em>sûr</em>. Si la transpilation (conversion automatique d’un langage de programmation à un autre) n’est pas nouvelle, c’est sur l’adjectif « sûr » que tout se joue. Il est possible de convertir automatiquement un code C en Rust, mais ce code ne sera pas automatiquement sans problème de mémoire. Il existe toute une série de méthodes pour désactiver explicitement les vérifications du compilateur Rust (pour des raisons plus ou moins valables). Les transpilations abusent généralement de ce mécanisme, rendant l’intérêt de la conversion discutable. Et comme la mode est à l’IA, pour rendre sa conversion efficace, DARPA veut utiliser des LLMs (ce qui devrait effrayer toute personne sensible à la sécurité).</p>
<p>La recherche dans ce domaine continue, comme l’expliquait <a href="https://next.ink/165800/traduire-du-code-c-en-rust-safe-deux-chercheurs-lont-fait/">cet article récent dans Next</a>. Si certains programmes peuvent être convertis de façon automatique, il semble illusoire de croire que cela pourra un jour s’appliquer à tous.</p>
<figure>
<a href="https://www.flickr.com/photos/usnationalarchives/3769862042/"><img src="https://mart-e.be/images/2025/rust-farm-machinery.jpg"/></a>
</figure></content><category term="Uncategorized"></category><category term="rust"></category><category term="linux"></category><category term="sécurité"></category></entry><entry><title>Fabriquer ses médicaments soi-même ?</title><link href="https://mart-e.be/2025/02/fabriquer-ses-medicaments-soi-meme" rel="alternate"></link><published>2025-02-09T13:39:00+01:00</published><updated>2025-02-09T13:39:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2025-02-09:/2025/02/fabriquer-ses-medicaments-soi-meme</id><summary type="html"><p>En décembre dernier, j’ai profité de la fin d’année pour me rendre, pour la quatrième fois, au CCC, le Chaos Computer Congress à Hambourg (<a href="https://events.ccc.de/congress/2024/infos/startpage.html">38C3, Illegal Instructions</a>). Si …</p></summary><content type="html"><p>En décembre dernier, j’ai profité de la fin d’année pour me rendre, pour la quatrième fois, au CCC, le Chaos Computer Congress à Hambourg (<a href="https://events.ccc.de/congress/2024/infos/startpage.html">38C3, Illegal Instructions</a>). Si la sécurité, la vie privée et l'hacktivisme en tout genre vous intéressent, c’est une conférence que je vous recommande chaudement. De nombreuses présentations mériteraient leur propre article (<a href="https://hackaday.com/blog/?s=38c3">hackaday.com en a écrit 8</a>) mais aujourd’hui, j’ai envie de parler de bioterrorisme et de fabriquer soi-même ses médicaments.</p>
<p><a href="https://media.ccc.de/v/38c3-bioterrorism-will-save-your-life-with-the-4-thieves-vinegar-collective">BioTerrorism Will Save Your Life with the 4 Thieves Vinegar Collective | media.ccc.de</a></p>
<p><a href="https://fr.wikipedia.org/wiki/Vinaigre_des_quatre_voleurs">Le vinaigre des quatre voleurs</a> est une macération de plantes dans du vinaigre qui permettrait, selon la légende, d’être immunisé contre la peste. Il aurait été utilisé par des voleurs pour détrousser des cadavres. Cette légende a inspiré Michael Laufer à créer un groupe d’anarchistes appelé le <a href="https://fourthievesvinegar.org/">Four Thieves Vinegar Collective</a> dont le but est de rendre la fabrication de médicaments aussi simple que de monter un meuble Ikea. Si les médicaments sont généralement abordables dans nos contrées, il est bon de se rappeler que ce n’est pas forcément le cas de pays moins développés comme les États-Unis.</p>
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/53157094019/"><img src="https://mart-e.be/images/2025/pharmacie.jpg"/></a>
</figure>
<p>Le <em>story telling</em> de Michael Laufer semble sorti d’un scénario hollywoodien : en 2008, il visite le Salvador et se rend compte que les hôpitaux manquent cruellement des médicaments essentiels. Et pourtant, il existe énormément de laboratoires clandestins qui produisent de la méthamphétamine. Il imagine l’impact que cela aurait si ces laboratoires étaient capables de produire des médicaments au lieu de dépendre des disponibilités et des prix exorbitants imposés par <em>Big-Pharma</em>. À son retour, il rassemble un groupe de chimistes et s’attaque au problème.</p>
<p>En 2016, le prix d’une seringue d’épinéphrine (utilisée en cas de réaction allergique pour éviter les chocs anaphylactiques) aux États-Unis grimpe jusqu’à atteindre 600$ la dose (une augmentation de 500 % en quelques années). En réponse, le Four Thieves Vinegar Collective publie les instructions pour fabriquer une version “open source”, coûtant 30$ à produire.</p>
<p>En 2022, en réponse à l’interdiction de l’avortement dans plusieurs états, le collectif publie des instructions sur comment créer une pilule d’avortement. Pendant une conférence, <a href="https://www.vice.com/en/article/diy-collective-embeds-abortion-pill-onto-business-cards-distributes-them-at-hacker-conference/">ils distribueront des cartes de visites</a> contenant 3 doses de <a href="https://fr.wikipedia.org/wiki/Misoprostol">Misoprostol</a>, un médicament utilisé pour provoquer une interruption de grossesse.</p>
<p>Lors du 38C3, ils ont annoncé la publication d’instructions pour créer un laboratoire personnel, qu’ils appellent le <a href="https://fourthievesvinegar.org/2025/01/02/announcing-the-analicktickle-suite/">AnaLickTickle Suite</a> (si si). Ce laboratoire permettrait de tester et de déterminer les différents composés nécessaires pour une fraction du prix d’un laboratoire professionnel. Ils ont également prévu de s’attaquer à la production de médicaments nécessaires aux transsexuels en cours de transition.</p>
<p>Quelques mois plus tôt, <a href="https://info.defcon.org/event/?id=54871">pendant la DEFCON32 à Las Vegas</a>, Laufer a révélé avoir copié le sofosbuvir, un médicament contre l’hépatite C pour 3,5$ la dose au lieu des habituels… 1000$ (un traitement complet impliquant de prendre 80 doses). Il prendra d’ailleurs une pilule sur scène pour <s>rassurer les gens</s> le show.</p>
<p>Michael Laufer est un anarchiste charismatique qui prend un grand plaisir à l’idée de foutre le bordel dans l’industrie pharmaceutique. Le discours du petit groupe de biohacker, seuls contre le grand Capitalisme et <em>Big-Pharma</em> est omniprésent (et assez plaisant, on ne va pas se mentir). Il rigole des violations de copyright et potentiels procès des sociétés. Le fait qu’il inquiète réellement les compagnies pharmaceutiques reste à prouver. Il n’existe pas, à ma connaissance, de gens ayant répliqué ces médicaments chez eux (même si on peut imaginer que ce n’est pas quelque chose dont les gens parlent librement). Et même s’ils le pouvaient, cela resterait un grain de sable dans la montagne des médicaments produits chaque année. Le Four Thieves Vinegar Collective pirate quelques médicaments existants, mais n’en produit pas de nouveaux.</p>
<figure>
<img src="https://mart-e.be/images/2025/laufer-fuck.jpg"/>
<figcaption>Laufer expliquant comment il gère les plaintes de compagnies pharmaceutiques</figcaption>
</figure>
<p>Est-ce que vous devriez fabriquer votre traitement contre l’hépatite C ou pilule abortive vous-même ? Pour la majorité des gens, c’est probablement une très mauvaise idée. Ces médicaments sont facilement accessibles chez nous. Même si Laufer se veut rassurant pendant sa présentation (« tout le monde dans la salle peut le faire, il suffît d’être méthodique ») fabriquer un médicament reste plus dangereux (et compliqué) qu’assembler un meuble Ikea.</p>
<p>Seulement, il existe aussi une partie de la population pour qui cela peut être différent. Si vous ne pouvez pas obtenir un traitement vital pour vous ou un proche, est-ce que vous ne seriez pas prêt à prendre le risque ? Si votre État vous interdit l’avortement d’une grossesse non désirée, est-ce plus risqué de fabriquer du Misoprostol que faire un des innombrables avortements « maison » qui sont déjà réalisés dans des conditions horribles ? Heureusement, il existe encore des associations comme <a href="https://www.womenonweb.org/">Women en Web</a> qui proposent l’envoi de pilules abortives par la poste, partout dans le monde.</p>
<p>Dans un monde idéal, le Four Thieves Vinegar Collective ne devrait pas exister. Je ne me sens pas particulièrement attiré par les biohackers qui poussent à l’extrême la liberté de disposer de son propre corps et je pense qu’un grand laboratoire pharmaceutique reste la meilleure façon de produire des médicaments. Seulement, nous ne vivons pas dans un monde idéal : quand le capitalisme dérégulé se mêle de la santé, cela finit avec des morts qui auraient pu être évitées. Je ne souhaite pas une longue vie au Four Thieves Vinegar Collective, mais je crains qu’ils soient encore longtemps nécessaires.</p></content><category term="Uncategorized"></category><category term="CCC"></category><category term="piratage"></category><category term="santé"></category></entry><entry><title>La licence MIT, c’est un truc de droite</title><link href="https://mart-e.be/2024/12/la-licence-mit-cest-un-truc-de-droite" rel="alternate"></link><published>2024-12-02T12:40:00+01:00</published><updated>2024-12-02T12:40:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-12-02:/2024/12/la-licence-mit-cest-un-truc-de-droite</id><summary type="html"><p>Les logiciels open source, c’est génial : tout le monde publie son code ouvertement et tout le monde est libre de reprendre le code des autres dans ses propres programmes …</p></summary><content type="html"><p>Les logiciels open source, c’est génial : tout le monde publie son code ouvertement et tout le monde est libre de reprendre le code des autres dans ses propres programmes. Enfin, pas exactement, c’est la licence qui va déterminer comment peut être réutilisé un logiciel.</p>
<blockquote>
<p><em>Petit point licence très simplifié :</em></p>
<ul>
<li><strong>Licence virale</strong> : si vous intégrez du code sous licence virale dans votre logiciel, ce dernier est “contaminé” et doit être publié sous cette licence également. Tout utilisateur de votre logiciel est en droit de vous demander le code source. La plus connue est la <strong>GPL</strong> (et ses variantes <strong>AGPL</strong> et <strong>LGPL</strong>, respectivement plus et moins strictes).</li>
<li><strong>Licence permissive</strong> : la plupart des usages sont autorisés, y compris incorporer le logiciel dans un logiciel propriétaire. Les plus connues sont <strong>MIT</strong>, <strong>BSD</strong>, <strong>Apache</strong>,…</li>
</ul>
</blockquote>
<p>Quand j’ai découvert le concept d’open source et ses licences, la GPL était reine. C’était la licence type pour les projets open source, le noyau GNU/Linux l’utilisait, tout comme de nombreux logiciels de l’écosystème. Lorsque l’on créait un logiciel, la GPL était un bon choix.</p>
<p>Je me souviens de ce sentiment lorsque l’on m’a expliqué l’aspect viral de la GPL : l’on retournait le système de copyright contre lui en forçant les gens à ouvrir leur code source : au lieu de la privatisation automatique, l’on imposait l’ouverture automatique. Du génie ! C’était l’époque où Richard Stallman était vu comme un visionnaire et pas comme <a href="https://stallman-report.org/">une personnalité problématique</a>. Quand j’ai commencé à travailler chez Odoo (un logiciel de gestion open source), nous étions sous licence AGPL (variante de la GPL adaptée aux logiciels tournant sur un serveur : être utilisateur d’un site utilisant du code AGPL donne le droit de demander le code source).</p>
<p>Et puis, il y a un changement de mentalité : l’accès au code source n’est finalement qu’un détail technique (que personne ne demande de toute façon), l’important, c’est que le logiciel soit utilisé par un maximum de personnes. De plus en plus, le web n’était plus juste une vitrine pour les commerces physiques, mais est devenu une vraie opportunité de revenus en lui-même. Et si les logiciels open source vont booster la création d’autres logiciels, la licence reste quelque chose d’assez barbant et opaque. L’innovation logicielle peut amener un avantage concurrentiel et les investisseurs ne sont pas enclins à repartager ces découvertes avec le monde. La GPL est vue comme trop compliquée et risquée, les nombreux procès pour <a href="http://gpl-violations.org/">violation de GPL</a> ne le démentiront pas.</p>
<figure>
<a href="https://www.flickr.com/photos/usnationalarchives/5553386728/"><img src="https://mart-e.be/images/2024/serment.jpg"/></a>
<figcaption>Je jure de respecter les principes de la GNU GPL, que Richard m’en soit témoin.</figcaption>
</figure>
<p>Plus tard, j’ai découvert des licences humoristiques comme la <a href="https://fr.wikipedia.org/wiki/WTFPL">WTFPL</a> ou la <a href="https://fr.wikipedia.org/wiki/Beerware">Beerware</a> qui peuvent se résumer par “je m’en fous de ce que vous faites avec mon logiciel”. Je publiais les quelques bouts de code que j’écrivais sous ces deux versions (sur feu <a href="https://fr.wikipedia.org/wiki/Gitorious">Gitorious</a>). Parce que c’est vrai que je m’en foutais un peu, j’étais déjà content si quelqu’un utilisait mon modeste code quelque part.</p>
<p>Au fil du temps, les licences <a href="https://fr.wikipedia.org/wiki/Licence_MIT">MIT</a>, <a href="https://fr.wikipedia.org/wiki/Licence_BSD">BSD</a>, <a href="https://fr.wikipedia.org/wiki/Licence_Apache">Apache</a> et autres licences permissives furent de plus en plus utilisées. Les <a href="https://dayssincelastjsframework.com/">frameworks javascript</a> populaires sont quasi tous sous MIT : React, Vue, jQuery, Angular,… Leur but est l’adoption par un maximum de personnes, ils ne veulent pas que la licence soit un frein pour les éditeurs de logiciel. Si j’utilise ce projet GPL dans mon app propriétaire, est-ce que l’on pourra venir me demander des comptes ? Est-ce que mon site web commercial peut utiliser ce framework web ? Adopter une licence très simple et très permissive permettait d’apaiser ces craintes.</p>
<p>Chez Odoo, en 2015, nous sommes passés de l’AGPL à la LGPL (variante plus permissive de la GPL : utiliser du code LGPL comme composant, <em>library</em>, sans le modifier, ne force pas la viralité de la GPL). On en a profité pour avoir une interprétation assez libre du terme “library” : combiner des modules open source et propriétaires est autorisé ce qui nous a permis de vendre une surcouche propriétaire (<a href="https://fr.wikipedia.org/wiki/Open_core">open core</a>) et d’autoriser les entreprises à développer leurs composants privés. Et ce fut un grand succès commercial, tant pis pour l’esprit du libre.</p>
<p>Périodiquement, on a un événement type <a href="https://mart-e.be/2024/04/qui-a-mis-une-backdoor-dans-xz">backdoor XZ</a> (sous licence BSD) où l’on découvre à quel point un logiciel essentiel, utilisé par des entreprises capitalisées en milliards, est maintenu par un type seul sur son temps libre (cf <a href="https://xkcd.com/2347/">XKCD 2347</a>). Tout le monde se dit qu’il y a un problème dans le financement des logiciels libres. Et puis, rien ne change.</p>
<p>Et tout est fait pour que l’on ne change pas, le monde technologique est si complexe que même les géants des GAFAMs ne peuvent maîtriser toutes les technologies dont ils ont besoin. Et ils n’ont aucun incitant à le faire, il existe tellement de super logiciels que l’on peut utiliser librement, sans aucune contrepartie. On estime que les firmes devraient dépenser 3 fois plus en logiciel si l’open source n’existait pas. Une fois encore, le capitalisme a trouvé un moyen de profiter de ce qui avait été créé contre lui.</p>
<p><a href="https://www.hbs.edu/ris/Publication%20Files/24-038_51f8444f-502c-4139-8bf2-56eb4b65c58a.pdf">The Value of Open Source Software</a> [PDF]</p>
<p>Et si une première étape pour régler ce problème était de revenir à la bonne vielle GPL ? Et si le côté viral de la GPL était une fonctionnalité et non un défaut ? Cela ne réglerait pas le problème de financement mais forcerait plus de monde à « jouer le jeu » du libre.</p>
<p>Dans son article <a href="https://p4bl0.net/post/2022/11/Paradoxe-libriste-et-logiciel-emancipateur#footnote-marker-2-1">Paradoxe libriste et logiciel émancipateur</a>, Pablo fait ce même constat : un logiciel sous licence permissive est si permissif que tout le monde l’utilise sans contrepartie. D’un côté (GPL), on a les libertaires qui veulent forcer les autres à être libres, de l’autre (MIT), on a les libertariens qui refusent les contraintes. Si la première position était vue comme un acte militant dans les années 90, elle est loin de faire l’unanimité aujourd’hui.</p>
<p>Dans son article, Pablo fait le parallèle avec le paradoxe de la tolérance : en étant tolérant avec tout le monde sans limite, on tolère aussi des intolérants qui vont nuire à la tolérance générale. Un certain niveau d’intolérance est donc nécessaire pour préserver la tolérance. En Belgique, on applique un <a href="https://fr.wikipedia.org/wiki/Cordon_sanitaire_(politique)">cordon sanitaire</a> en n’invitant pas les partis d’extrême-droite sur les plateaux de télévision : on ne tolère pas les partis intolérants (dans la pratique, c’est un peu différent, mais je diverge).</p>
<p>Dans la vie, je n’ai jamais été très libertarien (même si j’ai eu <a href="https://mart-e.be/post/2016/10/14/nxt-ardor-et-levolution-des-crypto-monnaies">ma période cryptomonnaie</a>, j’avoue) : c’est généralement un comportement adopté par ceux qui veulent surtout qu’on les laisse s’enrichir sans leur imposer de contrainte. C’est ma liberté de gagner et de dépenser mon argent comme je le souhaite. Imposer des contraintes est assez mal vu. Et, comme on dirait dans <a href="https://linktr.ee/uneinventionsansavenir">Une invention sans avenir</a>, « c’est pas un peu un truc de droite ça ? ».</p>
<figure>
<a href="https://www.flickr.com/photos/nationalmediamuseum/3084877374/"><img src="https://mart-e.be/images/2024/photo-chien.jpg"/></a>
<figcaption>Est-ce qu’une photo d’une performance artistique est considérée comme un travail dérivé ou une œuvre à part entière ?</figcaption>
</figure>
<p>Aujourd’hui avec l’avènement de l’IA, se pose la question de savoir si les licences open source sont encore adaptées. Jusqu’à présent, la définition généralement admise d’open source était écrite par l’<a href="https://opensource.org/">OSI</a>, l’<em>open source initiative</em>. L’OSI a défini de grands principes pour qu’un logiciel puisse se dire open source comme l’accès au code source, l’absence de discrimination ou l’absence de restriction d’usage.</p>
<p>L’OSI était attendu avec impatience pour sa position sur les « IA open source ». Meta clamait que son modèle Llama était open source alors qu’il interdisait certains usages (par exemple militaires) et ne partageait pas le jeu de données utilisé pour entraîner son modèle. Et puis, déception, l<a href="https://opensource.org/ai/open-source-ai-definition">’OSI a publié</a> une définition très affaiblie : les données d’entraînement doivent être « décrites » et non ouvertes. <a href="https://hackmd.io/@opensourceinitiative/osaid-faq#Why-do-you-allow-the-exclusion-of-some-training-data">Au nom du respect de la vie privée</a> (elle a bon dos), elle autorise de garder secret certaines données d’entraînement. Ce sont pourtant sur ces données et les différents poids qui leur sont donnés que se joue la force d’un modèle, pas l’algorithme. Cette définition est loin de plaire à tout le monde, des développeurs de Debian <a href="https://samjohnston.org/2024/10/22/debian-general-resolution-gr-drafted-opposing-osis-open-source-ai-definition-osaid/">discutent</a> de créer une définition alternative, remettant en cause la légitimité de l’OSI.</p>
<p><a href="https://www.schneier.com/blog/archives/2024/11/ai-industry-is-trying-to-subvert-the-definition-of-open-source-ai.html">AI Industry is Trying to Subvert the Definition of “Open Source AI” | Schneier on Security</a></p>
<p>Cette définition est clairement vue comme une façon d’autoriser les géants du web à appeler leurs modèles ouverts sans trop se mouiller.</p>
<p>A ceux qui se demandent si les licences virales peuvent protéger leurs productions de ces sociétés d’IA, la ligne de conduite actuelle est de considérer le <a href="https://fr.wikipedia.org/wiki/Web_scraping"><em>scrapping</em></a> du contenu sur internet (qu’il soit sous copyright ou licence libre) comme de l’usage raisonnable, ne nécessitant pas le respect de la licence.</p>
<p>Finalement, si le fait d’être open source n’est plus suffisant pour garantir qu’un logiciel est vertueux (on pourrait aussi parler de Wordpress, <a href="https://wordpress.org/about/license/">publié sous GPL</a>, et dont la direction est <a href="https://en.wikipedia.org/wiki/WP_Engine#WordPress_dispute_and_lawsuit">loin d’être vertueuse</a>), que faut-il faire ?</p>
<p>En réponse à ce qui est vu <a href="https://blogs.mediapart.fr/coopcycle/blog/170418/comment-proteger-le-logiciel-ouvert-coopcycle-de-la-predation-capitaliste">comme de la prédation capitaliste</a> par les grandes entreprises technologiques, certains ont poussé la logique des licences encore plus loin : la <a href="https://github.com/coopcycle/coopcycle-web/blob/master/LICENSE">Coopyleft</a>, créée par <a href="https://coopcycle.org">CoopCycle</a>, est une licence qui interdit l’utilisation commerciale en dehors des coopératives. Cette licence n’est pas compatible avec la définition de l’open source par l’OSI (l’interdiction de certains usages) mais la démarche reste intéressante.</p>
<p>Dmytri Kleiner, dans son livre <a href="http://telekommunisten.net/the-telekommunist-manifesto/">Telekommunist Manifesto</a> publié en 2010, défendait le concept de licence <a href="https://wiki.p2pfoundation.net/Copyfarleft">copyfarleft</a> (une licence libre est dite <em>copyleft</em>, en opposition à <em>copyright</em>). Plus tard, le copyfarleft évolue en <a href="https://wiki.p2pfoundation.net/Copyfair">copyfair</a> en faisant le constat que les licences libres ne sont pas suffisantes pour garantir un revenu équitable aux artistes et créateurs. Le but est d’autoriser le partage sans condition, mais de limiter les usages commerciaux à des usages bénéfiques pour les communs.</p>
<p>Les principes de l’open source sont centraux dans mon utilisation de l’informatique depuis de nombreuses années. Celui de non-restriction me semble essentiel et pourtant, je sais aussi que la technologie n’est pas neutre et qu’il faut encadrer les usages. Je ne sais pas encore si je publierai mes codes sous copyfair à l’avenir, mais je me laisse l’occasion <a href="https://mart-e.be/2023/04/jai-change-davis">de changer d’avis</a>.</p></content><category term="Uncategorized"></category><category term="libre"></category><category term="licence"></category><category term="GPL"></category><category term="MIT"></category><category term="odoo"></category></entry><entry><title>Solarpunk, un futur positif</title><link href="https://mart-e.be/2024/11/solarpunk-un-futur-positif" rel="alternate"></link><published>2024-11-24T17:32:00+01:00</published><updated>2024-11-24T17:32:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-11-24:/2024/11/solarpunk-un-futur-positif</id><summary type="html"><figure>
<blockquote>Il est plus facile d’imaginer la fin du monde que d’imaginer la fin du capitalisme
</blockquote>
<figcaption>Fredric Jameson</figcaption>
</figure>
<p>Quand on observe l’inaction mondiale face à la crise climatique …</p></summary><content type="html"><figure>
<blockquote>Il est plus facile d’imaginer la fin du monde que d’imaginer la fin du capitalisme
</blockquote>
<figcaption>Fredric Jameson</figcaption>
</figure>
<p>Quand on observe l’inaction mondiale face à la crise climatique grandissante, la montée de l’extrémisme et autres guerres, il est assez facile d’imaginer un avenir sombre. Si l’on regarde les récits d’anticipation, la dystopie n’est jamais très loin, les épisodes de <a href="https://fr.wikipedia.org/wiki/Black_Mirror_(s%C3%A9rie_t%C3%A9l%C3%A9vis%C3%A9e)">Black Mirror</a> se confondant un peu trop <a href="https://wired.me/culture/black-mirror-episodes-actually-happened/">avec la réalité</a>.</p>
<p>Vous connaissez probablement les genres artistiques <strong>Steampunk</strong> ou <strong>Cyberpunk</strong> de par leurs esthétiques si spécifiques, mais est-ce que vous connaissez le genre <strong>Solarpunk</strong> ?</p>
<figure>
<a href="https://www.flickr.com/photos/nlmhmd/49609638033/"><img src="https://mart-e.be/images/2024/lire-livre.jpg"/></a>
<figcaption>« … et ils moururent tous dans d’atroces souffrances, fin ! »</figcaption>
</figure>
<p>Dans les récits cyberpunk, l’on raconte un monde futuriste dystopique, la technologie étant partout, pour le meilleur et, souvent, le pire. Le terme « punk » fait référence à la désorganisation de mode presque-apocalyptique. Les personnages de <a href="https://fr.wikipedia.org/wiki/Blade_Runner_(film)">Blade Runner</a> semblant écrasés par le poids de la mégapole chaotique dans laquelle ils vivent. Dans le steampunk, l’on retourne à une époque victorienne pour réinventer un monde positif, avec des costumes gothiques kitchs et des zeppelins remplaçant les avions. En contre-pied de ces deux genres, plutôt qu’un futur noir ou un passé idéalisé, le solarpunk imagine à quoi ressemblerait un avenir positif. Dans ce futur, la civilisation a réussi à faire face aux grands défis actuels (transition écologique, inégalités…) et nous montre une civilisation dans laquelle l’on aimerait vivre (en tout cas moi).</p>
<p>Contrairement à ce que le nom pourrait laisser penser, le solarpunk ne se contente pas de mettre des panneaux photovoltaïques partout en remplacement du pétrole. La justice sociale est un thème assez récurrent. On parle également de façon plus générale de <strong>Hopepunk</strong> pour ces récits de science-fiction positifs.</p>
<p>La charte graphique du solarpunk semble souvent tout droit sortie <a href="https://ghiblicollection.com/">des studios Ghibli</a>, avec, par exemple, cette superbe vidéo <a href="https://www.youtube.com/watch?v=z-Ng5ZvrDm4">Dear Alice</a> (qui est ironiquement une pub de yaourt, quelque chose qui n’existerait probablement pas dans le monde décrit par celle-ci).</p>
<figure>
<a href="https://www.youtube.com/watch?v=z-Ng5ZvrDm4"><img src="https://mart-e.be/images/2023/solarpunk-dear-alice.jpg"/></a>
<figcaption>Un monde plus paisible sans renoncer aux progrès modernes</figcaption>
</figure>
<p>En découvrant les récits solarpunk, ma première réaction a été d’être dérangé par le manque de réalisme. Ça ne tient pas la route technologiquement, on omet la production des produits, on suppose une coopération internationale irréaliste, on oublie certains aspects du monde réel…</p>
<p>Et puis, on se rappelle que l’on lit une fiction. Pourquoi est-ce que je peux imaginer sans problème un monde zombie post-apocalyptique ou des voyages spatiaux dans de la science-fiction, mais pas un récit solarpunk ? Ces histoires n’ont pas pour vocation de donner un manuel pour arriver à un avenir idéal, mais d’en imaginer un, crédible ou non. Pourquoi ce manque d’imagination d’un avenir positif ?</p>
<p>Un récit solarpunk met en avant les relations humaines plutôt que la figure d’un héros solitaire, et pour y arriver, il faut changer la façon de raconter le récit. En 1986, Ursula K. Le Guin écrivait un très beau texte sur la fiction-panier :</p>
<p><a href="https://www.partage-le.com/2018/01/29/8645/">La théorie de la fiction-panier (par Ursula K. Le Guin)</a></p>
<p>Si un récit classique suit la structure du <a href="https://fr.wikipedia.org/wiki/Voyage_du_h%C3%A9ros">Voyage du héros</a> (appel de l’aventure ‑ quête ‑ retour), Ursula Le Guin invite à inventer des histoires mettant en avant le cueilleur et non le chasseur. Si le chasseur ramène parfois une proie exceptionnelle, c’est le cueilleur, le semeur, l’agriculteur qui nourrissent la tribu au quotidien qui méritent notre attention. Dans son article <a href="https://dreamforge.mywebportal.app/dreamforge/stories/show/rewriting-the-future-susan-kaye-quinn">Hope Notes: Rewriting the Future</a>, Susan Kaye Quinn invite à utiliser la <a href="https://fr.wikipedia.org/wiki/Kish%C5%8Dtenketsu">structure Kishōtenketsu</a> (introduction ‑ développement ‑ retournement - résultat) ou le <a href="https://gailcarriger.com/books/hj/">Voyage de l’héroïne</a> (descente ‑ recherche ‑ remontée) plutôt que le voyage du héros.</p>
<p>Pour mieux comprendre ce type de récits, j’ai lu quelques livres représentatifs du genre solarpunk. Je vous décris ci-dessous ceux que j’ai appréciés. On notera au passage que la plupart sont écrits par des femmes, pourquoi les hommes ont tant de mal à narrer un futur positif ?</p>
<p>Restant un thème assez niche, l’offre en livres solarpunk reste assez faible. Je me suis donc permis quelques libertés dans la liste ci-dessous (je peux, c’est mon blog d’abord !).</p>
<h3>Suncatcher, Alia Gee</h3>
<p>Suncatcher se passe en 2067, après le pic du pétrole, une pandémie qui a ravagé un monde post-réchauffement climatique. L’héroïne rejoint sa sœur, amirale d’une flotte de bateaux volants. Ils font du commerce d’énergie en revendant aux différentes métropoles l’énergie produite grâce à leurs voiles solaires. Sur leur route pour Miami, la flotte est attaquée par des pirates. S’ils survivent à cette attaque, elle sera le point de départ d’une enquête mêlant une méga-corporation bureaucratique, de la mutation génétique et un prophète délirant.</p>
<p>Le monde n’est pas rose dans Suncatcher. Les inégalités sont loin d’être réglées, mais, contrairement aux habituels récits dystopiques, les différents acteurs du récit essayent de changer cela. Mon esprit conditionné aux récits négatifs s’attendait à tout moment à voir les alliés se retourner contre les héros… mais non. La police est honnête, le groupe de religieux veut vraiment aider et le mystérieux amant est réellement amoureux. Barbant, vous allez dire ? Je préfère dire rafraîchissant. Et ce n’est pourtant pas l’action qui manque.</p>
<figure>
<img src="https://mart-e.be/images/2024/solarpunk-livres1.jpg"/>
</figure>
<h3>Glass and Gardens: Solarpunk Summers, Sarena Ulibarri</h3>
<p>Une série de nouvelles toutes aussi différentes les unes que les autres, parlant de futurs plus ou moins possibles, plus ou moins lointains, plus ou moins idéaux. Mention spéciale au récit très mignon d’une petite fille rêvant d’envoyer ses araignées de compagnie dans l’espace.</p>
<h3>La Trame, Bombyx Mori Collectif</h3>
<p>Ce livre était surprenant. Dans un monde dominé par les violentes marées végétales, la Trame est un groupe auto-organisé traversant les territoires sauvages et dangereux. Quand la majorité des habitants essayent de se protéger des marées destructrices, la Trame les embrasse et les chasse, chacun au rythme de son pas et tissant son histoire. Loin d’être une utopie barbante sans conflit, ce livre imagine un autre modèle de société au sein d’un monde inhospitalier.</p>
<p>Est-ce que ce livre peut être qualifié de Solarpunk ? Il se passe dans un monde alternatif, pas spécialement optimiste et pourtant, l’on rêve de liberté, aussi dangereuse soit-elle. Les quatre auteurs de ce livre <a href="https://www.youtube.com/watch?v=5f1KVYJZXqo">le présentent</a> comme une <em>Utopie d’aventure</em>. Il est tellement hors catégorie que j’avais envie d’en parler ici.</p>
<h3>Emergency Skin, Nora Keita Jemisin</h3>
<p>Un explorateur revient sur Terre bien longtemps après l’effondrement de la civilisation humaine et de l’environnement. On comprendra, au fur et à mesure de l’histoire, le type de société qui s’est reconstruite sur une autre planète. Seulement, la Terre n’est pas aussi désolée que prévu. Une petite nouvelle assez sympa qui se lit rapidement. Il est assez facile de faire un parallèle entre les Founders et les milliardaires mégalomanes qui rêvent de nous emmener sur mars.</p>
<h3>Histoires de moine et de robot, Becky Chambers</h3>
<p>Deux courts volumes (<em>Un psaume pour les recyclés sauvages</em> et <em>Une prière pour les cimes timides</em>) racontant la rencontre entre un moine non-genré et un robot. Sur la planète Panga, les robots devenus intelligents ont décidé de vivre sans les humains, contraignant ces derniers à reconstruire une société sans eux, plus égalitaire et bienveillante. Quelques centaines d’années plus tard, un robot sort des bois pour prendre des nouvelles des humains. Les deux tomes se lisent très vite et sont parfois absurdes, mais le plus souvent poétiques.</p>
<p>Un récit à conseiller au tonton raciste qui vous dira que l’écriture inclusive va ruiner la langue française.</p>
<h3>Nothing is Promised, Susan Kaye Quinn</h3>
<p>Dans chacun des quatre volumes, l’on suit une personne différente essayant de résoudre le mystère d’un vol d’électricité sur la grille d’énergie aux États-Unis en 2050. Le monde s’est enfin mis d’accord pour lutter contre le réchauffement climatique mais n’y arrive pas encore : entre les vagues de chaleurs, les inondations et les fréquentes pandémies, la société se bat pour remplacer les énergies fossiles par du renouvelable.</p>
<p>Ce récit est remarquable sur son aspect coopératif. Comme dans Suncatcher, un ennemi existe, mais c’est la force du groupe que l’on met en avant. On sent que Susan Quinn a bien intégré les principes du <em>Voyage de l’héroïne</em> : l’alternance des points de vue montre que la diversité est une force et l’évolution personnelle des protagonistes est tout aussi importante que vaincre le méchant du livre.</p>
<figure>
<img src="https://mart-e.be/images/2024/solarpunk-livres2.jpg"/>
</figure>
<h3>Bikepunk, Lionel Dricot</h3>
<p>Ajout de dernière minute à cet article (il est sorti le mois dernier), je me devais de vous toucher un mot du dernier livre de <a href="https://ploum.net/">Ploum</a>. Dans son récit post-apocalyptique, tous ceux du « monde d’avant » sont devenus aveugles et l’électricité est un lointain souvenir. Un sexagénaire et une adolescente, trop curieux pour leur propre bien, parcourent le monde à vélo 20 ans après la catastrophe.</p>
<p>Le message politique de Ploum est à peine caché derrière un récit de voyage : critique du capitalisme, promotion de la sobriété, ode au vélo et aux machines à écrire. Vu que c’est assumé, on aime bien. Si le monde « post-flash » n’est pas très bienveillant, on finit quand même sur une note d’espoir sur le monde à reconstruire.</p></content><category term="Uncategorized"></category><category term="livre"></category><category term="solarpunk20241124173143"></category></entry><entry><title>Construction d’un clavier : commencer simple</title><link href="https://mart-e.be/2024/11/construction-d-un-clavier-handwired" rel="alternate"></link><published>2024-11-17T13:46:00+01:00</published><updated>2024-11-17T13:46:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-11-17:/2024/11/construction-d-un-clavier-handwired</id><summary type="html"><p>Lors de mes recherches sur les claviers mécaniques, j’ai découvert un univers de passionnés plus riche que je ne le pensais. Si certains aiment tester un nouveau clavier tous …</p></summary><content type="html"><p>Lors de mes recherches sur les claviers mécaniques, j’ai découvert un univers de passionnés plus riche que je ne le pensais. Si certains aiment tester un nouveau clavier tous les mois (je ne juge pas), c’est la communauté des gens qui construisent leurs claviers de toutes pièces qui m’a le plus impressionné. C’est particulièrement marquant dans le monde des claviers ergonomiques : les passionnés exposent leurs créations aux formes originales, en plusieurs morceaux, avec un nombre et un arrangement de touches défiant toute logique.</p>
<p>Et, à force de subir une propagande pire que la Russie avant les élections françaises, ce qui devait arriver, arriva : je me suis convaincu « et si moi aussi, je créais mon propre clavier ? ».</p>
<figure>
<a href="https://www.flickr.com/photos/sdasmarchives/53196410509/"><img src="https://mart-e.be/images/2024/old-typewriter.jpg"/></a>
<figcaption>Attention, cet article va encore parler de claviers</figcaption>
</figure>
<p>Dans mon <a href="https://mart-e.be/2024/04/decouverte-des-claviers-mecaniques">article de découverte</a>, je parlais des capuchons, des switchs mais pas trop de ce qu’il y avait en dessous. En général, dans un clavier mécanique, les switchs sont reliés à un <a href="https://fr.wikipedia.org/wiki/Circuit_imprim%C3%A9">circuit imprimé</a> (PCB) qui va relayer les signaux électriques jusqu’au microcontrôleur et permettre à celui-ci de détecter la frappe. Pour le plus grand bonheur des aficionados d’électronique, le prix de l’impression de PCB a grandement chuté ces dernières années : pour quelques euros, vous pouvez obtenir un lot de PCB que vous avez réalisé vous-même.</p>
<p>Concevoir un PCB de zéro est tout à fait possible (il existe d’excellents logiciels open source comme <a href="https://www.kicad.org/">KiCad</a>) mais cela reste assez technique. La bonne nouvelle est que l’on n’a pas forcément besoin de le faire : il existe aussi énormément de PCB open source. Il est alors assez facile d’en prendre un qui nous convienne et de le commander pour quelques euros.</p>
<p>À force de traîner sur le serveur Discord d’<a href="https://ergol.org/">Ergo-l</a>, j’ai finalement décidé de me laisser tenter et j’ai commandé 5 PCB (la quantité minimale) d’un <a href="https://github.com/piit79/cantor">clavier cantor</a> pour la modique somme de 4€ (+20€ de frais de port). Le seul hic est que mon colis s’est perdu en route et n’est jamais arrivé. JLCPCB m’a gentiment proposé d’en renvoyer un ou de me rembourser. J’ai choisi la deuxième option car, pendant ces deux mois d’attente, j’avais découvert une autre communauté encore plus niche : celle des claviers <em>handwired</em> (câblés à la main). Un circuit imprimé n’est en réalité que la couche qui relie les différents composants ensemble (le circuit). Il est tout à fait possible de faire un circuit avec un simple fil électrique et un peu de soudure.</p>
<figure>
<img src="https://mart-e.be/images/2024/macropad3.jpg"/>
<figcaption>Je vous présente, le <em>macropet 16</em> !</figcaption>
</figure>
<!--
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/2179930812/"><img src="https://mart-e.be/images/2024/handwire.jpg"/></a>
</figure>
-->
<p>Ayant une expérience proche de zéro en soudure (je n’avais même pas encore <a href="https://mart-e.be/2024/10/reparation-dune-brosse-a-dent-electrique">ressoudé ma brosse à dent</a>), j’ai voulu commencer simplement avec une grille de 4x4 touches, un <em>macropad</em> (comme un <em>numpad</em> mais en donnant une autre signification aux touches, pas forcément des chiffres). La raison de ce choix est une vidéo de <a href="https://scottokeebs.com/">Joe Scotto</a>: <a href="https://www.youtube.com/watch?v=hjml-K-pV4E">How to build a Handwired Keyboard</a> (la référence en matière de claviers câblés à la main) qui nous montre, pas à pas, comment construire un macropad.</p>
<p>La vidéo est très bien faite et il n’y aurait que peu d’intérêt à réexpliquer son contenu ici. Je vais plutôt utiliser cet article pour vous raconter les galères que j’ai eues et les choses que j’ai découvertes en cours de fabrication.</p>
<figure>
<a href="[]()https://scottokeebs.com/"><img src="https://mart-e.be/images/2024/scottojoe-2023.webp"/></a>
<figcaption>Joe et les claviers qu’il a créés</figcaption>
</figure>
<h2>Leçon 1 : des multiples de 0.1 pouce</h2>
<p>Ayant récemment fait l’acquisition d’une découpeuse laser, j’ai utilisé <a href="http://www.keyboard-layout-editor.com/">keyboard-layer-editor</a> pour générer la forme de mon clavier et puis, <a href="http://builder.swillkb.com/">Plate Builder</a> pour transformer cet arrangement en une plaque en bois avec des trous pour les switchs. Dans cette plaque, vient s’insérer le microcontrôleur (dans mon cas un <a href="https://stm32-base.org/boards/STM32F401CCU6-WeAct-Black-Pill-V1.2.html">Blackpill</a>), ou plus précisément, une rangée de broches (<em>headers</em>) dans lesquelles on vient attacher le microcontrôleur (on peut ainsi remplacer le microcontrôleur sans tout dé-souder en cas de soucis). Ma première erreur a été de calculer cet espace avec mon pied à coulisse. J’avais calculé un espacement de 16mm entre les deux rangées alors qu’il s’agissait, en fait, de 0.6 pouce, soit 15.2mm.</p>
<figure>
<img src="https://mart-e.be/images/2024/macropad1.jpg"/>
<figcaption>La matrice avec les trous pour les rangées de broches</figcaption>
</figure>
<p>Moins d’un millimètre d’erreur était suffisant pour que les trous du microcontrôleur ne soient pas alignés sur ceux des headers. J’ai vainement essayé de coller les rangées headers en biais avant d’abandonner et de redécouper une planche correcte.</p>
<h2>Leçon 2 : il existe deux types de headers</h2>
<p>En parlant de microcontrôleur, lorsque j’ai reçu mon Blackpill, la première chose que j’ai faite était d’y souder les broches fournies avec. Étant novice en soudure, j’étais assez content de moi jusqu’au moment où j’ai essayé d’enfoncer ces headers dans les rangées que j’avais collées sur ma plaque en bois. Les broches soudées sur le Blackpill sont des broches carrées de 0.65mm de diamètre et mes deux rangées en bois s’attendaient à recevoir des broches rondes de 0.5mm. J’ai donc désoudé les broches carrées mais les trous sur le Blackpill étaient maintenant remplis de soudure. J’ai essayé de les nettoyer un par un mais j’ai dû finalement me résoudre à le remplacer après avoir passé une demi-heure pour nettoyer deux trous.</p>
<figure>
<img src="https://mart-e.be/images/2024/macropad2.jpg"/>
<figcaption>En classe de maternelle, les enfants sont capables de différencier les différentes formes géométriques comme les triangles, les ronds, les carrés ou les rectangles…</figcaption>
</figure>
<h2>Leçon 3 : les court-circuits</h2>
<p>Avec un Blackpill de remplacement, j’ai ensuite procédé au câblage de la matrice. Un fil part de chaque colonne et de chaque ligne pour rejoindre un GPIO différent. Cela s’est avéré plus compliqué que ça n’avait l’air en regardant les vidéos de Joe (comme toujours). Les fils que j’utilisais étaient un peu trop rigides et l’espace pour travailler, assez limité. Une fois surmontées ces difficultés, il ne se passait… rien. Mon macropad était bien reconnu comme un clavier sur mon ordinateur mais aucune touche ne semblait être pressée.</p>
<p>J’ai fini par demander de l’aide sur le <a href="https://discord.gg/vN6X3z8eyvy">Discord de Joe Scotto</a> (un endroit rempli de gens pratiquant le handwiring) où quelqu’un a vite identifié un court-circuit dans mes soudures.</p>
<figure>
<img src="https://mart-e.be/images/2024/court-circuit.png"/>
<figcaption>Un fil trop dénudé touche le fil de cuivre de la première rangée</figcaption>
</figure>
<h2>Leçon 4 : les microcontrôleurs sont sensibles à la chaleur</h2>
<p>Une fois ce court-circuit réglé, seule la moitié du clavier fonctionnait. D'après les membres du Discord, la raison pouvait être de mauvaises soudures (leçon 5). Je suis donc repassé avec un multimètre sur toutes mes connexions et ai re-soudé quand j’avais un doute et ce, jusqu’à ce que… plus rien ne fonctionne. Le clavier n’était même plus détecté. J’ai tout détaché pour constater que mon second Blackpill était décédé. Les assauts maladroits et répétés de mon fer à souder ont eu raison d’un des composants. RIP petit ange.</p>
<h2>Leçon 5 : la soudure pour les nuls</h2>
<p>Les membres du Discord m’ont fait remarquer que ma technique de soudure laissait à désirer et que j’avais plusieurs “cold joins” : je laissais tomber de la soudure sur les composants froids plutôt que de les chauffer proprement et de laisser la soudure s’infiltrer dans la connexion. Lors de mes recherches sur Youtube, j’ai apprécié ces trois vidéos :</p>
<p><a href="https://www.youtube.com/watch?v=4xUBRMgcVhc">Four Steps to Flawless Wire Joints (How to Solder) | Will Donaldson</a></p>
<p><a href="https://www.youtube.com/watch?v=6rmErwU5E-k">Soldering Crash Course: Basic Techniques, Tips and Advice! | wermy</a></p>
<p><a href="https://www.youtube.com/watch?v=m7Q5ZjqN-ao">How to Improve Your Handwired Keyboards | Joe Scotto</a></p>
<p>Dans sa vidéo ci-dessus, Joe déconseille l’utilisation de <a href="https://fr.wikipedia.org/wiki/Flux_de_brasage">flux de brasage</a>. Je ne suis pas d’accord avec ce point, c’est très utile, comme expliqué dans les deux autres vidéos.</p>
<p>Je n’ai découvert le guide <a href="https://mightyohm.com/files/soldercomic/translations/Souder_c_est_facile_-_Voici_comment_faire_-_Version_longue.pdf">Souder c’est facile ! [PDF]</a> qu’après la réalisation de ce clavier, mais si vous préférez le texte, il est très clair.</p>
<figure>
<img src="https://mart-e.be/images/2024/type-soudure.png"/>
<figcaption>Mes soudures ressemblaient souvent aux trois derniers</figcaption>
</figure>
<h2>Leçon 6 : les fils tressés</h2>
<p>Lors de mes premiers essais, j’ai utilisé un peu ce que j’avais sous la main : les colonnes et les rangées ont été faites avec du fil électrique (trop épais) qui traînait dans ma maison, et pour les connexions avec le microcontrôleur, j’avais utilisé du fil de prototypage fin mais rigide (fils avec un cœur plein). J’ai finalement utilisé des fils souples avec des brins tressés, qui se sont avérés beaucoup plus faciles à manipuler.</p>
<h2>Tout cramer et repartir d’une base saine</h2>
<p>En raison des mauvaises soudures et de la mauvaise découpe initiale, j’ai décidé de recommencer à zéro. J’ai découpé une nouvelle planche de switch à la découpeuse laser et ai recommencé le tout.</p>
<p>Et miracle : en une soirée, j’ai obtenu un macropad fonctionnel avec des soudures relativement propres (et une utilité discutable).</p>
<figure>
<img src="https://mart-e.be/images/2024/macropad4.jpg"/>
<figcaption></figcaption>
</figure>
<p>En racontant mes déboires aux utilisateurs d’Ergo-L, quelqu’un me demande si je peux lui fabriquer un clavier qui a pour seul but de redémarrer son NAS quand celui-ci plante. Vu que la taille devient un argument, je conçois un clavier en bois avec 3 switch low-profile avec le <a href="https://www.waveshare.com/rp2040-zero.htm">RP2040-Zero</a>, un microprocesseur particulièrement compact.</p>
<figure>
<img src="https://mart-e.be/images/2024/reboot.jpg"/>
<figcaption>Est-ce que c’est pas un peu mignon ?</figcaption>
</figure>
<p>Si vous voulez reproduire l’un de ces magnifiques claviers, j’ai publié <a href="https://git.sr.ht/~mart-e/dactylographe">les différents fichiers ici</a>.</p></content><category term="Uncategorized"></category><category term="clavier"></category><category term="handwired"></category></entry><entry><title>Récupération d’un serveur Kimsufi inaccessible</title><link href="https://mart-e.be/2024/11/recuperation-dun-serveur-kimsufi-inaccessible" rel="alternate"></link><published>2024-11-11T13:06:00+01:00</published><updated>2024-11-11T13:06:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-11-11:/2024/11/recuperation-dun-serveur-kimsufi-inaccessible</id><summary type="html"><p>La semaine dernière, alors que je procédais à une mise à niveau de mon serveur dédié vers une nouvelle version de Debian, j’ai été contraint de tout abandonner pour …</p></summary><content type="html"><p>La semaine dernière, alors que je procédais à une mise à niveau de mon serveur dédié vers une nouvelle version de Debian, j’ai été contraint de tout abandonner pour une urgence familiale. Quelques heures plus tard, plus moyen de se connecter en SSH au serveur. L’installation avait changé la configuration ou était bloquée en plein écran me demandant une action manuelle.</p>
<p>Petit article rapide expliquant comment j’ai récupéré l’accès (et me servant d’aide-mémoire la prochaine fois que ça m’arriverait).</p>
<p>Sur l’écran du son compte Kimsufi, ouvrir l’option <strong>NetBoot</strong> et choisir <strong>Rescue</strong>.</p>
<figure>
<img src="https://mart-e.be/images/2024/kimsufi-1.png"/>
<img src="https://mart-e.be/images/2024/kimsufi-2.png"/>
</figure>
<p>Je n’ai pas trouvé de documentation sur les différents types de rescue mais le premier de la liste a fonctionné pour moi.</p>
<p>Il faudra ensuite forcer le redémarrage du serveur via le bouton du même nom. Lorsque le serveur redémarrera, il ne démarrera plus sur le disque dur mais sur le système de rescue. Vous devriez recevoir un mail comme ceci :</p>
<div class="highlight"><pre><span></span><code>Bonjour,
Votre serveur a démarré en mode rescue Linux. Cela fait suite à une demande de votre part ou de la part d&#39;un technicien suite à une intervention sur votre serveur.
Cela signifie qu&#39;un système d&#39;exploitation Linux basique est lancé sur votre serveur via le réseau. Il ne s&#39;agit pas du système qui est normalement installé sur votre serveur. Les données stockées sur les disques n&#39;ont pas été altérées par le mode rescue.
Vous pouvez vous connecter en SSH à votre serveur avec les paramètres suivants :
- adresse IP : &lt;ip&gt;
- nom d&#39;utilisateur : root
- mot de passe : https://www.ovh.com/manager/secret/#?id=&lt;token&gt;
</code></pre></div>
<p>Vous pouvez alors vous connecter en ssh avec le mot de passe récupéré sur l’adresse donnée. Il s’agit d’un mode rescue en l’on ne boot pas directement sur la machine, on devra utiliser <code>chroot</code> pour accéder au contenu de sa machine.</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>mount<span class="w"> </span>/dev/sda2<span class="w"> </span>/mnt
$<span class="w"> </span>mount<span class="w"> </span>-t<span class="w"> </span>proc<span class="w"> </span>/proc<span class="w"> </span>/mnt/proc
$<span class="w"> </span>mount<span class="w"> </span>-t<span class="w"> </span>sysfs<span class="w"> </span>/sys<span class="w"> </span>/mnt/sys
$<span class="w"> </span>mount<span class="w"> </span>--bind<span class="w"> </span>/dev<span class="w"> </span>/mnt/dev
$<span class="w"> </span>chroot<span class="w"> </span>/mnt
</code></pre></div>
<p>Les commandes si dessus vont monter la partition qui contient mes données (<code>sda2</code> chez moi) et préparer au <code>chroot</code>.</p>
<p>Après la dernière commande, vous devriez être connecté sur un système fonctionnel et en état de dépanner le système.</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>dpkg<span class="w"> </span>--configure<span class="w"> </span>-a<span class="w"> </span><span class="c1"># continuer l’upgrade interrompue</span>
</code></pre></div>
<p>Pour régler mon problème de SSH, il m’a suffi de comparer ce qui avait changé (vive les backups) et restaurer les paramètres <code>HostKey</code> et <code>AuthorizedKeysFile</code> dans le fichier <code>/etc/ssh/sshd_config</code> à leur précédente valeur.</p>
<p>On va ensuite sortir du <code>chroot</code> proprement.</p>
<div class="highlight"><pre><span></span><code><span class="k">exit</span>
<span class="nv">umount</span><span class="w"> </span><span class="o">/</span><span class="nv">mnt</span><span class="o">/</span><span class="nv">dev</span><span class="w"> </span><span class="o">/</span><span class="nv">mnt</span><span class="o">/</span><span class="nv">proc</span><span class="w"> </span><span class="o">/</span><span class="nv">mnt</span><span class="o">/</span><span class="nv">sys</span>
<span class="nv">umount</span><span class="w"> </span><span class="o">/</span><span class="nv">mnt</span>
</code></pre></div>
<p>Dans l’interface Kimsufi, on remet <strong>NetBoot</strong> à <strong>Disque Dur</strong> et l’on redémarre encore une fois le serveur.</p>
<p>Si tout est réglé proprement, le serveur devrait être à nouveau accessible.</p>
<p>Morale de l’histoire : faites des backup, les imprévus ça arrive.</p></content><category term="Uncategorized"></category><category term="serveur"></category><category term="linux"></category><category term="kimsufi"></category><category term="chroot"></category></entry><entry><title>Est-ce que l’IA est artificielle et intelligente ?</title><link href="https://mart-e.be/2024/11/est-ce-que-lia-est-cest-artificiel-et-intelligent" rel="alternate"></link><published>2024-11-04T14:08:00+01:00</published><updated>2024-11-04T14:08:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-11-04:/2024/11/est-ce-que-lia-est-cest-artificiel-et-intelligent</id><summary type="html"><p><em>Ceci est la retranscription d’une présentation que j’ai donnée dans le cadre de soirées pour les <a href="https://www.soroptimist.be/fr">Soroptimist</a> et le <a href="https://www.rotary.org/">Rotary Club</a> sur le thème de l’intelligence artificielle …</em></p></summary><content type="html"><p><em>Ceci est la retranscription d’une présentation que j’ai donnée dans le cadre de soirées pour les <a href="https://www.soroptimist.be/fr">Soroptimist</a> et le <a href="https://www.rotary.org/">Rotary Club</a> sur le thème de l’intelligence artificielle au printemps 2024. Cette présentation avait pour but de démystifier l’intelligence artificielle et de comprendre un peu mieux les enjeux et risques de cette technologie auprès d’un public généraliste. Les notes en italiques sont des ajouts à la retranscription de cette présentation.</em></p>
<p><em>Utilisez la touche « espace » pour sauter à la vignette suivante</em></p>
<hr>
<figure id="slide-02">
<a href="#slide-02"><img src="https://mart-e.be/images/2024/conf_ia/02.png" loading="lazy"/></a>
</figure>
<p>Lorsque l’on écoute la presse, on nous présente l’IA comme étant une nouveauté, comme quelque chose qui arrive et arrivera mais il est important de réaliser que l’IA est déjà bien présente dans nos vies. On entend beaucoup parler de ChatGPT mais l’IA est déjà présente dans des choses que nous utilisons régulièrement. On peut penser à des logiciels de traduction, des jeux vidéos, des applications de navigation qui vont adapter le chemin en fonction du trafic automobile ou à des assistants vocaux. Tous sont des produits qui utilisent des techniques d’intelligence artificielle.</p>
<hr>
<figure id="slide-03">
<a href="#slide-03"><img src="https://mart-e.be/images/2024/conf_ia/03.png" loading="lazy"/></a>
</figure>
<p>Au cinéma aussi, on aime les histoires d’intelligence artificielle. En 1968, dans 2001, l’Odyssée de l’espace, on nous présentait HAL, le super ordinateur qui pilotait un vaisseau spatial en direction de Saturne qui décide de se rebeller contre ses pilotes humains et essaye de les tuer. En 1984, commençait la saga Terminator, avec Skynet, une intelligence artificielle si puissante que, au moment où elle est mise en service, elle déclenche la Révolution des Machines et essaye d’exterminer l’humanité.</p>
<p>Si ces histoires sont distrayantes, le problème est qu’elles façonnent notre vision des dangers de l’IA. Lorsque l’on parle des risques de l’intelligence artificielle, on nous parle de <a href="https://fr.wikipedia.org/wiki/Singularit%C3%A9_technologique">la singularité</a>, ce moment où une IA serait si intelligente qu’elle apprendrait de façon autonome et déclencherait un emballement imprévisible, tel Skynet. Je ne dis pas que cela n’est pas possible mais le problème est qu’il existe de nombreux autres dangers, bien plausibles, dont certains se réalisent déjà aujourd’hui.</p>
<hr>
<figure id="slide-04">
<a href="#slide-04"><img src="https://mart-e.be/images/2024/conf_ia/04.png" loading="lazy"/></a>
</figure>
<p>Au cours de cette présentation, on va essayer de répondre à deux questions : finalement une intelligence artificielle, est-ce que c’est intelligent et est-ce que c’est artificiel ?</p>
<hr>
<figure id="slide-05">
<a href="#slide-05"><img src="https://mart-e.be/images/2024/conf_ia/05.png" loading="lazy"/></a>
</figure>
<p>Mais d’abord, un peu d’histoire. Alan Turing est considéré comme le père de l’informatique moderne. Il est notamment connu pour avoir créé une machine qui permit de casser les messages secrets des Allemands chiffrés avec Enigma pendant la deuxième guerre mondiale. C’est l’histoire qui est expliquée dans le biopic <em>The Imitation Game</em>.</p>
<p>Mais si on parle d’Alan Turing aujourd’hui, c’est pour un test qu’il a formalisé : le test de Turing. Dans ce test, un sujet est face à deux terminaux, derrière le premier se trouve un humain, derrière le second, une machine. Le sujet va interagir avec les deux terminaux et poser des questions. Si à la fin de la discussion, le sujet n’est pas capable de deviner qui est l’humain et qui est la machine, la machine a, alors, réussi le test de Turing. Le test de l’imitation, <em>the imitation game</em>.</p>
<p>Au cours de l’histoire, l’on a plusieurs fois déclaré que telle ou telle machine avait réussi le test de Turing mais, à chaque fois, il y a eu débat: les conditions étaient-elles bonnes? etc. Et puis, il y a la question plus ouverte de : est-ce que le fait de se faire passer pour un humain est réellement un signe d’intelligence ?</p>
<hr>
<figure id="slide-06">
<a href="#slide-06"><img src="https://mart-e.be/images/2024/conf_ia/06.png" loading="lazy"/></a>
</figure>
<p>Un peu plus tard, apparut Joseph Weizenbaum. C’est un chercheur juif Allemand qui a fui l’Allemagne nazie pour se réfugier aux États-Unis pour y poursuivre ses recherches. Il est notamment connu pour avoir créé ELIZA en 1964. ELIZA est considérée comme le premier agent conversationnel. Il s’agissait d’un chatbot qui se faisait passer pour un psychothérapeute, mais un psychothérapeute très simple : elle ne faisait que renvoyer sous forme de question ce qu’on lui disait.</p>
<p>- J’ai peur du noir.<br/>
- Pourquoi avez-vous peur du noir ?<br/>
- Mes parents ne m’aiment pas.<br/>
- Qu’est-ce qui vous fait dire que vos parents ne vous aiment pas ?<br/></p>
<p>Ce n’était pas très sophistiqué mais ça maintenait la conversation. Et ça marchait même très bien. Tellement bien que Joseph Weizenbaum remarqua que certaines personnes attribuaient à ELIZA des capacités qu’elle n’avait pas : une intelligence, une conscience. On raconte notamment que la secrétaire de Joseph Weizenbaum qui, on peut le supposer, savait qu’il n’avait pas créé un être doté d’une conscience, aurait demandé au professeur de quitter la pièce parce qu’elle avait une conversation intime avec ELIZA.</p>
<p>Suite à cela, Joseph Weizenbaum prit peur et passa sa vie à essayer de démystifier son invention. Il a notamment écrit un livre <em>Computer Power and Human Reason</em> dans lequel il explique la différence entre décider et choisir. Une <em>décision</em> est quelque chose qui peut être réalisé par une machine sur base de critères bien définis mais un <em>choix</em> est quelque chose qui se base sur le jugement et est, et doit rester, intrinsèquement humain. L’IA prend des décisions, l’humain fait des choix.</p>
<p>C’est une discussion que l’on a toujours aujourd’hui : qu’est-ce que l’on accepte que la machine décide et qu’est-ce qui doit rester un choix humain ? Est-ce que l’on accepte une IA militaire qui fait le choix de tuer une cible ?</p>
<hr>
<figure id="slide-07">
<a href="#slide-07"><img src="https://mart-e.be/images/2024/conf_ia/07.png" loading="lazy"/></a>
</figure>
<p>Si l’on en croit les médias, l’explosion de l’IA est récente. Pourtant, on a vu que ce sont des techniques avec lesquelles on expérimentait déjà il y a 60 ans. Je pense que c’est la combinaison de deux raisons qui permettent le développement exponentiel de l’IA que l’on voit ces dernières années :</p>
<p>Tout d’abord, les ordinateurs sont hautement plus perfectionnés qu’ils ne l’étaient il y a 50 ans. On a tous dans notre poche un mini-ordinateur plus puissant qu’un supercalculateur qui prenait toute une pièce dans les années 70. Le microprocesseur dans un câble de recharge USB-C est plus puissant que l’ordinateur dans Apollo 11 qui a amené l’homme sur la lune en 1969.</p>
<p><em><a href="https://forrestheller.com/Apollo-11-Computer-vs-USB-C-chargers.html">Apollo 11 Guidance Computer (AGC) vs USB-C Chargers</a></em></p>
<p>Avec ces ordinateurs ultra-puissants, l’on peut maintenant facilement gérer les énormes calculs nécessaires pour entraîner les IA.</p>
<p>La deuxième raison que je vois est la présence de données d’entraînement. Dans les années 90, si je voulais entraîner une IA de reconnaissance faciale, je devais recruter une série de volontaires, organiser un shooting photo, traiter ces images, etc. C’était lent et ça coûtait beaucoup d’argent pour un résultat assez limité. Aujourd’hui, en quelques clics, je peux accéder à des millions de photos. Grâce à Facebook, je peux obtenir plein de photos d’une même personne selon des angles et luminosités différentes très facilement. On entend parfois parler des GAFAM qui revendent ou exploitent nos données personnelles; une des utilisations est justement d’entraîner ces IA.</p>
<p>La combinaison d’une très large quantité de données accessibles facilement et une grande puissance de calcul pour les traiter ont permis une explosion des usages.</p>
<hr>
<figure id="slide-08">
<a href="#slide-08"><img src="https://mart-e.be/images/2024/conf_ia/08.png" loading="lazy"/></a>
</figure>
<p>Avant d’aller plus loin, il est bon de préciser que le terme Intelligence Artificielle est un terme général, marketing derrière lequel se trouve de nombreuses techniques différentes, avec des usages et contraintes différentes. On peut, par exemple, citer :</p>
<ul>
<li>la vision par ordinateur (la reconnaissance de formes et d’objets)</li>
<li>la classification automatique (le filtre anti-spam qui va classifier vos emails)</li>
<li>le traitement du langage (les logiciels de traduction)</li>
<li>les recommandations (Netflix ou Spotify qui vous recommande quoi regarder et écouter sur base de votre activité passée)</li>
<li>les IA génératives (dont on parle beaucoup actuellement et qui génèrent du texte ou des images)</li>
<li>l’analyse (une IA de jeu d’échec)</li>
</ul>
<p>Et certaines IA modernes vont combiner plusieurs de ces techniques ce qui rend la distinction particulièrement floue.</p>
<hr>
<figure id="slide-09">
<a href="#slide-09"><img src="https://mart-e.be/images/2024/conf_ia/09.png" loading="lazy"/></a>
</figure>
<p>Derrière ce terme "IA" se cachent donc beaucoup de technologies et, finalement, il ne veut plus dire grand-chose. Le marketing va utiliser cette confusion et entretenir le côté magique de l’IA. Quand Oral-B dit avoir une IA dans sa brosse à dents, laquelle de ces technologies utilise-t-elle ?</p>
<p>Probablement aucune mais c’est une autre histoire.</p>
<p>Quand je parle d’intelligence artificielle dans cette présentation, j’évoque, en réalité, différentes techniques. Mes remarques ne s’appliquent pas à toutes et il est parfois difficile de les différencier, en partie à cause de pratiques comme celles d’Oral-B.</p>
<hr>
<figure id="slide-10">
<a href="#slide-10"><img src="https://mart-e.be/images/2024/conf_ia/10.png" loading="lazy"/></a>
</figure>
<p>Une IA dont on parle énormément aujourd’hui est ChatGPT. On peut lui donner une phrase en langage naturel comme “Explique-moi la physique quantique comme si j’avais 10 ans” et il va me donner une réponse qui me semble cohérente. Notez, d’ailleurs, que je dis “me semble”, il est important de garder en tête que je ne suis pas physicien et que je ne sais pas si cette réponse est correcte.</p>
<p>ChatGPT est édité par la société OpenAI. Elle a été fondée en 2015 à but non-lucratif, dont l’objectif était de promouvoir l’intelligence artificielle en la rendant abordable et transparente.</p>
<p>En décembre 2022, elle a publié ChatGPT et a un peu pris le monde par surprise. En quelques jours, elle avait des millions d’utilisateurs et en janvier 2023, Microsoft investissait 10 milliards de dollars dans OpenAI. Depuis ce succès, OpenAI a un peu retourné sa veste et oublié ses promesses de transparence. On a très peu de détails sur les avancements de ChatGPT en dehors des communiqués marketing et l’entreprise est, maintenant, à but purement lucratif.</p>
<p>En 2023, OpenAI était évalué à 29 milliards de dollars et en vaut certainement plus aujourd’hui. C’est une société qui n’existait pas il y a 10 ans et qui a maintenant un pouvoir considérable, dont le patron rencontre des chefs d’états.</p>
<p><em>Note: <a href="https://arstechnica.com/ai/2024/10/openai-is-now-valued-at-157-billion/">en octobre 2024</a>, on évaluait OpenAI à 157 milliards de dollars</em></p>
<p>ChatGPT n’est pas le seul logiciel du genre. Aujourd’hui, toutes les grandes sociétés de la tech ont soit leur équivalent à ChatGPT soit utilisent les services d’une de ces sociétés pour ses propres produits d’IA. OpenAI n’est pas la seule mais est représentative du boum de l’intelligence artificielle et est un acteur incontournable.</p>
<hr>
<figure id="slide-11">
<a href="#slide-11"><img src="https://mart-e.be/images/2024/conf_ia/11.png" loading="lazy"/></a>
</figure>
<p>Un type d’IA dont on parle aussi beaucoup sont les IA génératives d’images. Il s’agit, par exemple, de Midjourney, Stable Diffusion ou Dall-E (édité également par OpenAI). On leur donne une phrase en langage naturel comme “dessine-moi un astronaute qui chevauche un cheval sur la lune” et il me génère cette belle image.</p>
<p>Ces IA génératives ont aussi fait beaucoup parler d’elles parce qu’elles faisaient quelque chose que l’on pensait réservé aux humains : faire de l’art. On imaginait les IA comme quelque chose qui allait remplacer le travail répétitif, administratif mais ici, on a un logiciel qui dessine mieux que moi. C’est assez interpellant.</p>
<hr>
<figure id="slide-12">
<a href="#slide-12"><img src="https://mart-e.be/images/2024/conf_ia/12.png" loading="lazy"/></a>
</figure>
<p>On connaît aussi Midjourney pour cette image que vous avez peut-être vu passer. On y voit le pape en doudoune blanche. Elle est assez rigolote mais elle est surtout fausse. Ces IA génératives permettent aussi d’obtenir très facilement des images vraisemblables.</p>
<p>Plus que jamais, il faut garder un regard critique sur ce que l’on voit et ne pas avoir une confiance aveugle en les images que l’on trouve sur internet.</p>
<hr>
<figure id="slide-13">
<a href="#slide-13"><img src="https://mart-e.be/images/2024/conf_ia/13.png" loading="lazy"/></a>
</figure>
<p>Avec cette explosion des IA, on a vu des titres de journaux inquiétants apparaitre. Est-ce que je vais perdre mon boulot et être remplacé par une IA raciste ?</p>
<hr>
<figure id="slide-14">
<a href="#slide-14"><img src="https://mart-e.be/images/2024/conf_ia/14.png" loading="lazy"/></a>
</figure>
<p>Pour pouvoir répondre à cette question, il est important de mieux comprendre comment ces logiciels fonctionnent. On a parfois l’impression qu’ils sont magiques.</p>
<hr>
<figure id="slide-15">
<a href="#slide-15"><img src="https://mart-e.be/images/2024/conf_ia/15.png" loading="lazy"/></a>
</figure>
<p>Les IA de type ChatGPT sont ce qu’on appelle des LLM pour <em>Large Language Model</em> ou <em>grand modèle de langage</em>. Toutes les IA ne sont pas des LLM mais on en parle suffisamment pour qu’il soit important d’y passer un peu de temps.</p>
<p>Les LLM vont être entrainés sur des très larges corpus de textes, des millions de textes tirés de livres publiés ou de textes trouvés sur internet. On va donner ces textes à mon LLM qui va en tirer des concepts et créer des relations mathématiques entre ces concepts.</p>
<p>Une fois cet apprentissage fait, je pourrai ensuite interagir avec mon LLM en langage naturel et lui poser une question comme “Quelle est la capitale de la Belgique ?” ce à quoi il répondra “Bruxelles”.</p>
<p>Ce qui est important à comprendre, c’est que mon IA ne sait pas ce que c’est la Belgique, Bruxelles ou une capitale. Il n’a pas un tableau avec d’un côté, les pays et de l’autre, la capitale comme le ferait un humain. Il aura tiré ces concepts de ces textes d’apprentissage mais sans les comprendre. En posant ma question “Quelle est la capitale de la Belgique ?”, il va récupérer le concept mathématique “Belgique” et y appliquer une relation mathématique “capitale” et obtenir le résultat “Bruxelles”. C’est d’ailleurs la même relation mathématique qui est utilisé si j’avais posé la question “Quelle est la capitale de la France ?” mais il aurait obtenu le concept “Paris” en résultat.</p>
<p>Ces LLM sont des IA dites prédictives. C’est-à-dire que pour obtenir une réponse, elles vont utiliser des statistiques et compléter le texte avec le mot le plus probable. Quand un LLM dit “la capitale de la Belgique est”, le mot suivant le plus probable, sur base de son apprentissage, est “Bruxelles”. On pourrait faire l’analogie avec les suggestions sur votre téléphone qui a appris grâce à vos messages précédents. Quand je dis “j’aime la”, mon GSM va me proposer “tartiflette” parce que j’en parlais avant. Et bien, un LLM, c’est le même principe mais hautement plus complexe avec une quantité beaucoup plus grande de textes.</p>
<p>Une fois que l’on a compris ça, on comprend mieux pourquoi ChatGPT va parfois nous donner des réponses étranges. Si je demande à un LLM “combien font 48 multiplié par 287 ?”, il ne va pas savoir, ou va me répondre à côté de la plaque. Ça peut paraître étonnant qu’il n’arrive pas à résoudre un calcul aussi simple mais c’est parce qu’il ne réalise pas réellement le calcul. Il n’a simplement pas appris ce calcul précis dans ses données d’entraînement.</p>
<p><em>Mise à jour: les versions récentes de ChatGPT sont aujourd’hui capables de résoudre des calculs mathématiques mais cela n’est pas dû à ses capacités de modèle de langage, c’est un autre mécanisme d’analyse et de résolution de problème.</em></p>
<hr>
<figure id="slide-16">
<a href="#slide-16"><img src="https://mart-e.be/images/2024/conf_ia/16.png" loading="lazy"/></a>
</figure>
<p>Après cette longue introduction, essayons de répondre à notre première question : est-ce qu’une IA, c’est artificiel ? Est-ce qu’elle fonctionne de façon autonome, sans intervention humaine ?</p>
<hr>
<figure id="slide-17">
<a href="#slide-17"><img src="https://mart-e.be/images/2024/conf_ia/17.png" loading="lazy"/></a>
</figure>
<p>Prenons un exemple simple. Imaginons que je veuille faire une IA qui va déterminer si une image représente un humain ou un singe.</p>
<p>Pour entraîner mon IA, je prends mon appareil photo et je vais faire ces quatre photos d’humains dans la rue.</p>
<p>Je me rends ensuite au zoo et je photographie ces quatre singes ci-dessous.</p>
<hr>
<figure id="slide-18">
<a href="#slide-18"><img src="https://mart-e.be/images/2024/conf_ia/18.png" loading="lazy"/></a>
</figure>
<p>J’entraîne donc mon programme avec ces huit photos et je lui soumets deux nouvelles photos pour le tester…</p>
<hr>
<figure id="slide-19">
<a href="#slide-19"><img src="https://mart-e.be/images/2024/conf_ia/19.png" loading="lazy"/></a>
</figure>
<p>… et il réussit ! C’est bon, mon logiciel fonctionne !</p>
<p>Vraiment ? Est-ce qu’il n’y a pas un problème dans mon programme ?</p>
<hr>
<figure id="slide-20">
<a href="#slide-20"><img src="https://mart-e.be/images/2024/conf_ia/20.png" loading="lazy"/></a>
</figure>
<p>Dans mes données d’entraînement pour les humains, je n’ai mis que des hommes blancs. Maintenant, qu’est-ce qui se passerait si je lui donnais une photo de femme noire ? Il y a des chances qu’il se trompe et me la qualifie comme singe.</p>
<p>Ça, c’est un problème de représentativité de mon jeu de données. J’ai voulu entraîner mon IA sur des humains, mais j’ai oublié toute une partie des humains. Mon jeu de données n’est pas représentatif et l’IA risque de se tromper sur des parties sous-représentées dans mes données.</p>
<p>Alors là, vous vous dites peut-être “Il n’y avait que 8 photos dans tes données d’entraînement. Tu disais qu’on entraînait sur des millions de données. Ça n’arrive pas dans la vraie vie, ça.”</p>
<hr>
<figure id="slide-21">
<a href="#slide-21"><img src="https://mart-e.be/images/2024/conf_ia/21.png" loading="lazy"/></a>
</figure>
<p>L’image à gauche vient d’un algorithme de Google qui annote des images et qui a identifié un couple comme étant des gorilles. À droite, c’est un post contenant une vidéo sur Facebook. Un message demande si l’on veut continuer à regarder des vidéos de primates.</p>
<p>L’erreur de Google date de 2018 et celle de Facebook de 2020. Encore aujourd’hui, ces sociétés ont du mal à identifier des personnes venant de minorités.</p>
<p>Ce n’est pas que Google et Facebook sont des entreprises racistes. C’est parce que ce sont, comme la plupart des entreprises de la tech, des entreprises américaines, majoritairement composées d’hommes blancs qui, par mimétisme, pensent leurs programmes pour des gens qui leur ressemblent et sous-estiment des catégories de population.</p>
<hr>
<figure id="slide-22">
<a href="#slide-22"><img src="https://mart-e.be/images/2024/conf_ia/22.png" loading="lazy"/></a>
</figure>
<p>Je vous disais que les LLM étaient entraînées sur des millions de livres différents. Peut-être que dans tous ces livres se trouve <em>Mein Kampf</em> et pourtant, je ne veux surtout pas que mon IA tienne des propos racistes.</p>
<p>Pour éviter cela, une des grandes forces de ChatGPT était de procéder à un apprentissage dit supervisé. L’on va générer énormément de questions-réponses avec un LLM et puis, un humain va repasser sur ces réponses pour évaluer si elles sont acceptables ou non.</p>
<p>Normalement, vous devriez être alerté lorsque je dis cela. Avec un apprentissage supervisé, on va s’assurer que les réponses correspondent à l’idéologie de la société qui se trouve derrière, ce n’est pas neutre.</p>
<p>Sur l’échiquier politique, on pourrait dire que OpenAI est à tendance démocrate libérale. Quand je vais discuter avec ChatGPT sur des questions polémiques, il va toujours prendre des pincettes, mais va insister sur le fait qu’il faut respecter tout le monde, que le réchauffement climatique est réel, mais qu’il ne faut pas trop réguler le développement de l’IA non plus. Si je pose ces mêmes questions à Grok, l’IA de Twitter développée par Elon Musk, qui est un conservateur, les réponses risquent d’être plus problématiques.</p>
<p>Il est important de garder en tête que ces outils ne sont pas neutres et reflètent l’idéologie de la société qui les édite.</p>
<hr>
<figure id="slide-23">
<a href="#slide-23"><img src="https://mart-e.be/images/2024/conf_ia/23.png" loading="lazy"/></a>
</figure>
<p>Vous pouvez imaginer que superviser des milliers de réponses, ça prend du temps, et donc ça coûte de l’argent. Pour éviter des coûts trop importants, ces sociétés vont délocaliser l’entraînement de leur algorithme auprès d'une main d’œuvre bon marché. OpenAI a, par exemple, été épinglé pour faire appel à des travailleurs au Sénégal payés 2€ de l’heure ou des prisonniers finlandais payés 1€50 de l’heure. Il s’agit d’un travail très long, abrutissant et psychologiquement difficile.</p>
<p>À chaque fois que OpenAI sort une nouvelle version de ChatGPT, en ventant les millions de paramètres qui ont été ajoutés, il faut comprendre que des millions d’heures de supervision ont, de nouveau, été nécessaires. Et cela, dans des conditions éthiques discutables.</p>
<p>Ces sociétés nous disent que c’est un mal nécessaire, que cela s’arrêtera dans le futur. Peut-être, mais je constate que ce n’est pas le cas actuellement.</p>
<hr>
<figure id="slide-24">
<a href="#slide-24"><img src="https://mart-e.be/images/2024/conf_ia/24.png" loading="lazy"/></a>
</figure>
<p>En 1770, était construit une machine appelée le <em>Turc Mécanique</em>. Il s’agissait d’un automate qui pouvait jouer aux échecs. On l’amenait devant la cour, la noblesse, c’était fort distrayant, mais c’était une supercherie. À l’intérieur de la machine se cachait un joueur qui déplaçait secrètement les pièces.</p>
<p>Cela aurait pu rester un détail de l’histoire si, en 2005, Amazon n’avait pas ressorti le terme pour créer Amazon Mechanical Turk. Mechanical Turk peut résoudre des micro-tâches contre rémunération. On peut, par exemple, classifier des images, retranscrire du texte, etc. Et comme avec le Turc Mécanique, un humain se trouve derrière la machine qui va être payé pour faire ces calculs. Dans le cas d’Amazon, il s’agit principalement de travailleurs aux États-Unis ou en Inde, payés quelques dollars de l’heure.</p>
<p>OpenAI n’utilise pas Amazon Mechanical Turk pour entraîner ses algorithmes et Amazon n’est pas la seule société à proposer ce genre de tâches mais l’on voit toujours cette tendance à cacher l’humain lorsque l’on interagit avec la machine.</p>
<hr>
<figure id="slide-25">
<a href="#slide-25"><img src="https://mart-e.be/images/2024/conf_ia/25.png" loading="lazy"/></a>
</figure>
<p>Malgré les défauts de l'apprentissage supervisé, on pourrait se dire que c’est un mal nécessaire si on évite d’avoir des IA racistes ou sexistes. Et pourtant, c’est un peu plus compliqué que ça.</p>
<p>En 2018, Amazon avait conçu une IA pour traiter les milliers de CV des personnes postulant dans son entreprise. Pour entraîner son IA, Amazon avait utilisé les CV des travailleurs existants. Le problème est qu’ils se sont rendu compte que l’IA avait tendance à rejeter les profils féminins. Amazon, comme de nombreuses entreprises technologiques, ont des problèmes de mixité et sont principalement composées d’hommes, particulièrement dans les postes techniques ou de managers. L’IA, ayant intégré l'information d'une sous-représentation des femmes dans l'entreprise, privilégiait les profils masculins. </p>
<p>Amazon a essayé de supprimer l’information du sexe du CV mais l’IA reproduisait le même fonctionnement en se basant sur des stéréotypes de genre (par exemple, le fait de préférer faire de la danse ou du football).</p>
<p>Amazon n’avait pas comme volonté de produire une IA sexiste mais c’est une conséquence du fait qu’elle ait été entraînée sur des données biaisées. Il est très difficile de retirer un biais qui se trouve dans les données d’entraînement.</p>
<p>Après ces échecs, Amazon a arrêté son système de classification automatique. C’était en 2018, je ne sais pas ce qu’ils font aujourd’hui mais il existe de nombreux systèmes similaires qui permettent d’évaluer les candidats et, encore aujourd’hui, ces systèmes sont connus pour discriminer les profils féminins ou étrangers.</p>
<hr>
<figure id="slide-26">
<a href="#slide-26"><img src="https://mart-e.be/images/2024/conf_ia/26.png" loading="lazy"/></a>
</figure>
<p>Un autre exemple représentatif est celui des aspirateurs autonomes Roomba. Le problème est que ces aspirateurs avaient tendance à foncer trop souvent dans les pieds de table ou les chats. Les ingénieurs de Roomba ont alors essayé d’améliorer la navigation avec un apprentissage autonome.</p>
<p>Le Roomba ayant des capteurs de collision à l’avant, ils ont utilisé un algorithme pour décourager les collisions et se sont rendu compte que le Roomba avait tendance à avancer à reculons. Il rentrait tout autant en collision avec des objets mais comme il n’avait pas de capteur à l’arrière, ce n’était pas pénalisé.</p>
<p>On peut se dire que c’est une anecdote rigolote et qu’il suffisait aux ingénieurs de tenir compte des collisions à l’arrière mais c’est représentatif d’un autre problème de l’IA : le programme va trouver une solution, mais pas forcement celle à laquelle on s’attend. Et cela peut être problématique si elle fonctionne de manière autonome. Il est très difficile de définir les instructions parfaites pour éviter des effets de bords inattendus.</p>
<p><em>Correction : il ne s’agit pas d’ingénieurs de Roomba mais une personne nommée Custard Smingleigh (<a href="https://x.com/smingleigh/status/1060325665671692288">tweet</a>), la véracité de l’information est incertaine mais il existe une liste complète d’exemples similaires sur <a href="https://docs.google.com/spreadsheets/d/e/2PACX-1vRPiprOaC3HsCf5Tuum8bRfzYUiKLRqJmbOoC-32JorNdfyTiRRsR7Ea5eWtvsWzuxo8bjOxCG84dAg/pubhtml">Specification gaming examples in AI - master list</a>. La difficulté d’aligner les instructions données à une IA et ce que l’IA interprète est un réel problème non-résolu.</em></p>
<hr>
<figure id="slide-27">
<a href="#slide-27"><img src="https://mart-e.be/images/2024/conf_ia/27.png" loading="lazy"/></a>
</figure>
<p>Un dernier exemple illustrant la difficulté de la tâche est Gemini, l’IA de Google et concurrente de ChatGPT. Au vu des critiques de biais que recevaient ses concurrents, Google a poussé à fond le curseur de la diversité et, lorsque l’on lui demandait de générer des images, l’on obtenait des résultats surprenants.</p>
<p>Lorsqu'on lui demandait de générer une image de pape, il générait, par exemple, ces images d’une femme indienne et d’un homme noir. C’est très bien pour la diversité mais on perd en précision historique. On obtenait un résultat similaire si l’on demandait de générer des images de soldats allemands pendant la deuxième guerre mondiale : on obtenait des images de personne de tout genre et nationalité.</p>
<p>Cela illustre bien la difficulté de ne pas reproduire certains biais de la société tout en continuant d’obtenir des réponses exactes.</p>
<hr>
<figure id="slide-28">
<a href="#slide-28"><img src="https://mart-e.be/images/2024/conf_ia/28.png" loading="lazy"/></a>
</figure>
<p>Finalement, est-ce que l’on peut dire que les IA peuvent se passer de l’intervention humaine ?</p>
<p>Peut-être que l’on y arrivera un jour mais actuellement, pour les exemples d’IA que l’on vient de voir, ce n’est pas encore le cas.</p>
<p>Passons donc à la deuxième question : est-ce qu’une IA est intelligente ?</p>
<hr>
<figure id="slide-29">
<a href="#slide-29"><img src="https://mart-e.be/images/2024/conf_ia/29.png" loading="lazy"/></a>
</figure>
<p>Pour répondre à cette question, il faudrait d’abord essayer de définir ce qu’est l’intelligence. Pendant longtemps, on a considéré que les échecs étaient un symbole de l’intelligence humaine. Ils nécessitaient de la stratégie, de la mémorisation, de l’analyse,… des domaines dans lesquels les humains excellaient.</p>
<p>Et ce fut vrai jusqu’en 1997, quand Garry Kasparov, le champion du monde d’échecs a perdu un match contre Deep Blue, un logiciel édité par IBM. Est-ce que ça veut dire que Deep Blue est plus intelligent que le plus intelligent des humains ? Non, cela veut dire que Deep Blue joue mieux aux échecs que le meilleur joueur d’échec.</p>
<p>Après cela, certains se sont dit que les échecs n’étaient peut-être pas le meilleur exemple d’intelligence humaine. De plus, Deep Blue n’a pas vraiment utilisé de l’IA pour gagner, il a juste mémorisé énormément de stratégies existantes. Un vrai jeu difficile, c’est le jeu de Go ! Et ça, les humains ont vraiment de l’avance sur les machines.</p>
<p>C’était vrai jusqu’en 2016 où Deepmind, un logiciel édité par Google a battu le meilleur joueur de Go du monde. Est-ce que ça veut dire que Deepmind est plus intelligent que le plus intelligent des êtres humains ? Non, ça veut dire que Deepmind joue mieux au Go que le meilleur joueur de Go.</p>
<hr>
<figure id="slide-30">
<a href="#slide-30"><img src="https://mart-e.be/images/2024/conf_ia/30.png" loading="lazy"/></a>
</figure>
<p>Peut-être que gagner un jeu n’est pas une bonne façon de parler d’intelligence. Une autre façon serait d’opposer la connaissance objective et subjective d’une compétence.</p>
<p>Si l’on veut évaluer si je suis capable de jouer au tennis, on peut prendre une raquette et aller échanger quelques balles. On pourra alors dire « OK, il m’a renvoyé la balle, il n’a pas trébuché, il sait objectivement jouer au tennis. »</p>
<p>Ou alors, on peut essayer de voir si l’on sait réellement la compétence. Par exemple, si l’on me demande ce que c’est la couleur verte, je peux répondre « c’est la couleur de l’herbe, des feuilles d’arbre,… ». Le problème, c’est que je suis aveugle, je n’ai jamais <em>vu</em> le vert. J’ai appris ce que c’est, je connais la théorie des longueurs d’onde mais je n’ai jamais fait <em>l’expérience</em> du vert. On dira alors que non, je ne sais pas réellement ce qu’est le vert et je ne fais que répéter ce que j’ai appris.</p>
<p>Voila, ChatGPT, c’est comme l’aveugle, il ne sait pas réellement ce qu’est le vert, ou Bruxelles ou une capitale.</p>
<p>Voila, ChatGPT n’est pas intelligent.</p>
<hr>
<figure id="slide-31">
<a href="#slide-31"><img src="https://mart-e.be/images/2024/conf_ia/31.png" loading="lazy"/></a>
</figure>
<p>Moi, je trouve que c’est un peu trop facile de dire ça. Finalement, est-ce qu’il faut nécessairement avoir fait l’expérience d’une chose pour la connaître ?</p>
<p>Au début du 20ème siècle, on avait la connaissance des trous noirs. Einstein et d’autres scientifiques l’avaient prouvé, on savait qu’ils existaient. Cependant, on a dû attendre 1971 pour la première observation d’un trou noir. On n’en avait pas encore fait l’expérience mais on les connaissait.</p>
<p>À droite, c’est une photo de Blaise Cendrars, un poète écrivain suisse. Il est notamment connu pour son livre <em>La Prose du Transsibérien</em> où il raconte son voyage en train à travers la Sibérie. Le problème, c’est que l’on a la suspicion qu’il n’a jamais pris ce train, qu’il a inventé son voyage. Tout comme d’autres de ses récits de voyage.</p>
<p>L’histoire raconte qu’un jour, un de ses amis lui demande « Dis donc, Blaise, le Transsibérien, tu l’as vraiment pris ? » et ce à quoi, il aurait répondu « Qu’est-ce que cela peut te faire puisque je vous l’ai fait prendre à tous ? »</p>
<p>Est-ce qu’un comédien qui joue une scène doit forcément l'avoir vécue pour la jouer ?</p>
<hr>
<figure id="slide-32">
<a href="#slide-32"><img src="https://mart-e.be/images/2024/conf_ia/32.png" loading="lazy"/></a>
</figure>
<p>Finalement, est-ce qu’une IA est intelligente ? Et bien, la question reste ouverte, cela dépend de votre définition d’intelligence.</p>
<hr>
<figure id="slide-33">
<a href="#slide-33"><img src="https://mart-e.be/images/2024/conf_ia/33.png" loading="lazy"/></a>
</figure>
<p>Après cette note plus philosophique, j’aimerais conclure sur cette phrase que j’aime bien : « L’informatique est trop importante pour être laissée aux informaticiens ».</p>
<p>Les OpenAI, Google, Microsoft et autres tiennent un discours type « L’IA va révolutionner nos vies, nous sommes les mieux placer pour développer l’IA, laissez-nous faire et investissez dans nos sociétés. »</p>
<p>Et moi, je ne suis pas d’accord avec ce discours. Si l’IA va être aussi importante que ce qu’ils nous disent, il est important que l’on ait un débat démocratique sur ce que l’on veut en faire. Quelles sont les utilisations que l’on accepte et celles que l’on refuse ? Est-ce que j’accepte des IAs qui créent de l’art ? De la reconnaissance faciale ? Des utilisations militaires ?</p>
<p>En Europe, on est par exemple en train de se doter d’un règlement à ce sujet (<em>mise à jour: l’AI Act a été approuvé en mai 2024</em>). Certains diront que l’on prend un train de retard par rapport aux États-Unis et à la Chine mais l’on a fait la même critique avec le RGPD et maintenant, la Californie a adopté son propre règlement inspiré par le RGPD.</p>
<p>Nous allons bientôt voter et peut-être que l’intelligence artificielle s’invitera aux débats et j’espère vous avoir éclairé sur les enjeux.</p>
<p><em>Aux élections de juin et octobre 2024, les Wallons ont massivement voté pour le MR, parti pro-vidéo surveillance et reconnaissance faciale.</em></p>
<script type="module">
import init, { run } from "/theme/pkg/slides.js";
init().then(() => {
run("figure", "slide-");
});
</script></content><category term="Uncategorized"></category><category term="IA"></category><category term="présentation"></category></entry><entry><title>Réparation d’une brosse à dent électrique</title><link href="https://mart-e.be/2024/10/reparation-dune-brosse-a-dent-electrique" rel="alternate"></link><published>2024-10-27T11:27:00+01:00</published><updated>2024-10-27T11:27:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-10-27:/2024/10/reparation-dune-brosse-a-dent-electrique</id><summary type="html"><p>Après 10 ans de bons et loyaux services, ma brosse à dent électrique n’avait plus sa fougue d’antan… je lui ai donc offert une nouvelle batterie.</p>
<figure>
<a href="https://www.flickr.com/photos/nlmhmd/51145192724/"><img src="https://mart-e.be/images/2024/brosse-electrique.jpg"/></a>
</figure>
<p>Le remplacement …</p></summary><content type="html"><p>Après 10 ans de bons et loyaux services, ma brosse à dent électrique n’avait plus sa fougue d’antan… je lui ai donc offert une nouvelle batterie.</p>
<figure>
<a href="https://www.flickr.com/photos/nlmhmd/51145192724/"><img src="https://mart-e.be/images/2024/brosse-electrique.jpg"/></a>
</figure>
<p>Le remplacement de la batterie n’est pas très compliqué, il nécessite un nombre certain d’étapes, mais assez simples. J’ai suivi les instructions de cette vidéo :</p>
<p><a href="https://www.youtube.com/watch?v=XOVuhs7IkyM">Battery Replacement Guide for Braun Oral-B Type 4729 Toothbrush - Professional Care | Youtube</a></p>
<p>Cette vidéo aurait du être un article de blog (ce n’est qu’une série de photos), mais elle est amplement suffisante pour la réparation. Après avoir commandé <a href="https://www.amazon.nl/-/en/dp/B079BXSYN9">une batterie compatible</a>, j’ai pu faire le remplacement. Une nuit de recharge et c’est reparti comme en 40.</p>
<p>Simple mais la réparation nécessite tout de même un fer à souder. Les pattes à souder sont assez grosses et relativement accessibles. On n’est pas du tout sur une précision requise avec des composants électroniques. Conseil contre-intuitif : si vous avez du mal à dessouder une vielle soudure, ajoutez de la soudure ou du flux.</p>
<figure>
<img src="https://mart-e.be/images/2024/brosse.jpg"/>
</figure>
<p>Il y a un an, j’essayais de réparer notre machine à laver dont la courroie s’était détachée. Après avoir réussi à la démonter et refixer la courroie, je pavanais auprès de ma femme sur ces gens qui jettent les choses ou appellent un réparateur au moindre pépin. L’axe de la machine se brisa au deuxième lavage suivant ma « réparation ». Au moins j’ai appris comment une machine à laver fonctionne (et réalise que la norme est maintenant aux machines à laver connectées, <em>soupir…</em>).</p>
<p>Paradoxalement, cet échec m’a permis de relativiser l’impossibilité des réparations : quand quelque chose est cassé, je le démonte et regarde si je peux en tirer quelque chose. Cassé pour cassé, au pire le centre de tri me remerciera d’avoir déjà fait le démontage… Sur sa chaîne youtube <a href="https://www.youtube.com/@DIYPerks">DIY Perks</a>, Matthew Perks donne par exemple plein d’idées de projets insoupçonnés avec un vieux pc portable cassé.</p>
<p><a href="https://www.youtube.com/watch?v=WLP_L7Mgz6M">Things you can make from old, dead laptops | Youtube</a></p>
<p>La brosse à dent électrique moyenne <a href="https://www.oralb.co.uk/en-gb/oral-health/why-oral-b/faq/how-long-does-oral-b-electric-toothbrush-last">dure 4 ans</a>. Leticia Suarez a réalisé une <a href="https://s3images.coroflot.com/user_files/individual_files/original_pdf_230918_wmdjy8dd7sacy7kru4bricjbi.pdf">étude d’impact d’une brosse à dent électrique</a> comme projet étudiant (merci à elle). On y apprend que la production d’une brosse à dent consomme deux fois plus d’énergie que son usage. En gardant sa brosse 2, 3, 4 fois plus longtemps, on inverse ainsi la balance sur l’usage.</p>
<figure>
<a href="https://mart-e.be/images/2024/brosse-co2-graph.png"><img src="https://mart-e.be/images/2024/brosse-co2-graph.png"/></a>
<figcaption>L’électronique est, de très loin, le plus coûteux à produire, source: Leticia Suarez</figcaption>
</figure>
<p>N’oubliez cependant pas les ordres de grandeur : l’impact de la production d’une brosse à dent électrique est estimée à un peu plus de 3kg de CO₂. Ce chiffre est à mettre en perspective avec les 70kg de CO₂ pour produire un iPhone ou les 2.5kg par litre de diesel brûlé.</p>
<p>Réparez vos appareils électriques et faites du vélo.</p></content><category term="Uncategorized"></category><category term="diy"></category><category term="reparation"></category></entry><entry><title>15 ans de blog</title><link href="https://mart-e.be/2024/08/15-ans-de-blog" rel="alternate"></link><published>2024-08-31T14:39:00+02:00</published><updated>2024-08-31T14:39:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-08-31:/2024/08/15-ans-de-blog</id><summary type="html"><p>Il y a exactement 15 ans, je commençais ce blog avec un article qui ne restera pas dans les annales : <a href="https://mart-e.be/post/2009/08/31/nouveau-blog">Nouveau blog !</a>. Il était donc de circonstance que je republie …</p></summary><content type="html"><p>Il y a exactement 15 ans, je commençais ce blog avec un article qui ne restera pas dans les annales : <a href="https://mart-e.be/post/2009/08/31/nouveau-blog">Nouveau blog !</a>. Il était donc de circonstance que je republie un article tout aussi barbant aujourd’hui.</p>
<p>Si j’ai un peu expérimenté les différentes plateformes (Dotclear et Wordpress ainsi que plusieurs tests infructueux d’un moteur Django), j’ai finalement <a href="https://mart-e.be/2023/04/migration-de-wordpress-a-pelican">adopté une version minimaliste</a> l’an passé.</p>
<p>Avoir un blog était quelque chose de plus courant en 2009, à l’époque des Skyblogs et forums, ils ont aujourd’hui majoritairement été remplacés par des réseaux sociaux éphémères. Ma fréquence de publication a varié <a href="/archives">au cours des années</a>, mais je suis content d’être encore là.</p>
<p>Je n’ai plus aucun outil statistique depuis déjà quelques années donc ne sais pas combien <a href="/robots.txt">d’humains</a> lisent mes articles, mais je remercie tous ceux qui réagissent à mes publications par email ou mastodon.</p>
<p>Avec l’intention d’en passer encore beaucoup d’autres !</p>
<figure>
<a href="https://www.flickr.com/photos/thenationalmuseumofdenmark/10797306034/"><img src="https://mart-e.be/images/2024/ecrivain-japonais.jpg"/></a>
<figcaption>Moi, parcourant ma liste d’articles brouillons jamais terminés</figcaption>
</figure></content><category term="Uncategorized"></category><category term="blog"></category><category term="vieux"></category><category term="me"></category></entry><entry><title>Quand la police espionnait les cryptophones</title><link href="https://mart-e.be/2024/08/quand-la-police-espionnait-les-cryptophones" rel="alternate"></link><published>2024-08-16T20:25:00+02:00</published><updated>2024-08-16T20:25:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-08-16:/2024/08/quand-la-police-espionnait-les-cryptophones</id><summary type="html"><p>J’ai fini de lire <a href="https://www.hachettebookgroup.com/titles/joseph-cox/dark-wire/9781541702691/">Dark Wire: The Incredible True Story of the Largest Sting Operation Ever</a> par Joseph Cox. Avec ce livre, j’ai découvert le marché des téléphones …</p></summary><content type="html"><p>J’ai fini de lire <a href="https://www.hachettebookgroup.com/titles/joseph-cox/dark-wire/9781541702691/">Dark Wire: The Incredible True Story of the Largest Sting Operation Ever</a> par Joseph Cox. Avec ce livre, j’ai découvert le marché des téléphones chiffrés pour criminels.</p>
<p>Le téléphone a été inventé en 1876 et, <a href="https://issuu.com/sciam/docs/2008-09_pg58_2?mode=embed&amp;documentId=080820180613-64657d58c38f4897941bc60b292f46d6&amp;layout=grey">déjà en 1890</a>, la police espionnait les conversations téléphoniques pour surveiller les criminels. Mais, lorsque les premiers menacent un peu trop le business des deuxièmes, ces derniers s’adaptent et trouvent de nouveaux moyens de continuer leurs activités à l’abri des regards.</p>
<p>Avec l’arrivée des smartphones, les BlackBerry ont acquis une réputation de moyen sécurisé de discuter : les messages échangés entre utilisateurs de BlackBerry transitaient par les serveurs de la société, au Canada, et étaient chiffrés par une clef secrète. Ce chiffrement n’était cependant pas du <a href="https://fr.wikipedia.org/wiki/Chiffrement_de_bout_en_bout">chiffrement de bout en bout</a> (comme c’est le cas sur des logiciels comme <a href="https://signal.org/">Signal</a>) et n’importe qui possédant cette clef pouvait lire tous les messages. C’était le cas de la société Blackberry Limited mais <a href="https://www.theverge.com/2016/4/14/11434926/blackberry-encryption-master-key-broken-canada-rcmp-surveillancey">également de la police canadienne</a>. On a appris avec Snowden que <a href="https://www.pcworld.com/article/447570/snowden-leaks-show-uk-and-us-spies-have-cracked-blackberrys-bes-encryption.html">la NSA pouvait aussi lire les communications des BlackBerry</a>.</p>
<p>Ceci n’arrêta pas les criminels qui virent dans les BlackBerry une opportunité de sécuriser leur trafic de drogue et autres activités illégales. Plusieurs sociétés ont récupéré et modifié des vieux BlackBerry pour utiliser d’autres serveurs que ceux de la société mère ainsi que pour désactiver physiquement les puces GPS et micros. Ainsi commença le business juteux de ce que l’on appela les cryptophones : pour des abonnements annuels en milliers de dollars revendus sous le manteau, ces sociétés proposaient de sécuriser les communications de leurs clients, en promettant de ne pas regarder ce qu’ils faisaient. Avec le temps, ces services se sont complexifiés, abandonnant les BlackBerry vieillissants pour des Android modifiés.</p>
<figure>
<a href="https://www.flickr.com/photos/nlmhmd/52533904458/"><img src="https://mart-e.be/images/2024/pub-cocaine.jpg"/></a>
</figure>
<p>Si vous avez l’habitude de lire mon blog, vous connaissez mon amour pour le chiffrement et que je suis convaincu que l’utilisation d’un téléphone chiffré n’est pas un crime. Cependant, les cryptophones visent clairement un public criminel : le prix prohibitif, le mode de revente par revendeurs discrets et certaines fonctionnalités en ont fait que son utilisation était quasi exclusive aux criminels. Le contenu des téléphones pouvait, par exemple, être formaté à distance par un opérateur si son propriétaire était compromis. C’était d’ailleurs cette fonctionnalité qui a permis au FBI de fermer Phantom Secure, une société canadienne qui proposait les téléphones du même nom à des trafiquants de drogues. Ayant pu prouver qu’il était au courant de l’illégalité des activités de ses clients et qu’il les aidait à détruire des preuves, le FBI a pu inculper Vincent Ramos, le créateur de Phantom Secure.</p>
<p>Phantom Secure, EncroChat, Sky ECC, Ciphr, nombreuses sont les sociétés de cryptophones à se laisser tenter par l’appât du gain en échange de leurs principes moraux. Quand une société fermait ses portes, il fallait peu de temps pour qu’une autre prenne sa place ou que les criminels basculent sur un autre moyen de communication. Ces cryptophones ne pouvant communiquer qu’avec des appareils similaires, ces sociétés se battaient pour des parts de marché, parfois de façon littérale.</p>
<p>C’est dans le contexte de la fermeture de Phantom Secure que, en 2018, la police australienne et le FBI ont rencontré une occasion unique : en échange d’une réduction de peine, un criminel inculpé a permis à l’agence d’obtenir l’accès à ANOM, une nouvelle plateforme de téléphones chiffrés qu’il avait développé. En distribuant des téléphones ANOM, la police obtenait un accès direct aux communications des traffiquants qui se croyaient à l’abri des regards. C’est ainsi que débuta l’opération que raconte le livre et qui durera 3 ans.</p>
<p>Pour des raisons légales, le FBI n’a pas obtenu l’autorisation de traiter les messages échangés sur le territoire américain mais avait un accès complet aux messages des autres utilisateurs partout dans le monde. Au cours des trois ans, ils ont ainsi travaillé avec 16 pays comme l’Australie, la Suède, les Pays-bas ou l’Angleterre. Le jeu d’équilibriste pendant ces trois années consistait à développer un maximum l’utilisation de ANOM (en concurrence avec EncroChat, Sky,…), récolter suffisamment d’informations pour démanteler des réseaux (et non les simples hommes de main), empêcher les crimes les plus graves (les très gros trafics ou tentatives de meurtre) mais sans éveiller les soupçons que les autorités pouvaient lire les messages. Si vous avez déjà essayé de garder secrète une fête d’anniversaire surprise, vous savez à quel point la difficulté de maintenir le secret grandi exponentiellement avec la taille du groupe. La difficulté a donc aussi été de travailler avec des polices étrangères sans leur révéler la source des informations. Les pays avec des grands soupçons de corruption étaient d’ailleurs évités dans les collaborations.</p>
<p>À la fin du livre (est-ce du spoil si ce sont des faits réels ?), le FBI décide de fermer ANOM avec une action combinée des différentes polices impliquées. Le 8 juin 2021, 800 arrestations dans 16 pays ont été réalisées simultanément. Le but était de démanteler un maximum de réseaux criminels et de neutraliser la confiance que les criminels ont dans les cryptophones : qu’est-ce qui prouve qu’un téléphone concurrent n’est pas également un espion ?</p>
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/2163691046/"><img src="https://mart-e.be/images/2024/police-arrest.jpg"/></a>
<figcaption></figcaption>
</figure>
<p>Si le livre se concentre sur ANOM, l’espionnage de cryptophones a aussi fait partie des activités de la police en Europe. En janvier 2020, les serveurs de EncroChat, localisés en France ont été infiltrés et une backdoor a été installée <a href="https://www.radiofrance.fr/franceinter/operation-encrochat-200-projets-d-assassinats-dejoues-en-europe-7294025">jusqu’à sa fermeture en juin 2020</a>. En mars 2021, la police belge <a href="https://www.lesoir.be/360721/article/2021-03-14/phantom-secure-encrochat-sky-ecc-des-cryptophones-dans-le-viseur-des-autorites">a démantelé Sky ECC</a>, un autre réseau populaire en Europe, après avoir cassé son chiffrement et été capable de lire les messages échangés avec une heure de décalage. Sky Limited, la société éditrice proposait une prime de 5 millions de dollars à qui réussissait à lire ses messages. Ne manquant pas d’humour, le procureur ayant procédé à l’opération de démantèlement a déclaré qu’ils enverraient le numéro de compte de la police fédérale.</p>
<p>Avec ces trois réseaux démantelés en un an, on peut logiquement penser que cela a été un coup dur pour les trafiquants de drogue… et pourtant, non. Anvers est connue pour être, de très loin, le port avec le plus grand transit de drogue en Europe. 90 tonnes de cocaïne ont ainsi été saisies en 2021 à Anvers, tellement, qu’ils saisissaient de la drogue <a href="https://www.brusselstimes.com/324508/incinerators-can-no-longer-handle-mountain-of-cocaine-seized-in-antwerp-port">plus vite que ce qu’ils n’étaient capable de l’incinérer</a>. Sans s’arrêter, 110 tonnes ont été saisies en 2022 et <a href="https://www.bbc.com/news/world-europe-68004291">116 tones en 2023</a>. Loin d’avoir arrêté l’arrivée de drogue en Europe, la nature n’aimant pas le vide, les réseaux se sont réorganisés après la disparition de EncroChat, Sky ECC et ANOM et continuent d’exporter à tour de bras. On pourrait même dire que l’effet inverse a été atteint : cette réorganisation des réseaux a été la source d’une montée de violence comme expliqué dans <a href="https://auvio.rtbf.be/media/declic-le-tournant-declic-le-tournant-3196997">ce très bon épisode du podcast Le Tournant</a>.</p>
<p>Avant la lecture de ce livre et l’écoute du Tournant, je ne me rendais pas compte de l’ampleur du trafic de drogue et je n’en sors pas spécialement positif sur l’avenir. Plus que jamais, l’action répressive semble impuissante face aux réseaux criminels et, plus que jamais, la décriminalisation et l’aide des consommateurs malades me semble une réelle alternative pour diminuer la demande (et espérer diminuer l’attrait de la source). Je ne vais pas vous conseiller cette lecture si vous cherchez un livre relaxant pour finir l’été, mais il reste le récit d’une histoire passionnante si vous aimez les livres de genre <a href="https://fr.wikipedia.org/wiki/True_crime"><em>True Crime</em></a>.</p></content><category term="Uncategorized"></category><category term="lecture"></category><category term="drogue"></category><category term="securite"></category></entry><entry><title>Programmez votre clavier avec VIA</title><link href="https://mart-e.be/2024/07/programmez-votre-clavier-avec-via" rel="alternate"></link><published>2024-07-07T17:13:00+02:00</published><updated>2024-07-07T17:13:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-07-07:/2024/07/programmez-votre-clavier-avec-via</id><summary type="html"><p>Dans <a href="https://mart-e.be/2024/04/decouverte-des-claviers-mecaniques">mon premier article</a>, je parlais de la personnalisation du clavier au niveau des composants, mais aujourd’hui, on va parler de la personnalisation au niveau du logiciel embarqué. Si …</p></summary><content type="html"><p>Dans <a href="https://mart-e.be/2024/04/decouverte-des-claviers-mecaniques">mon premier article</a>, je parlais de la personnalisation du clavier au niveau des composants, mais aujourd’hui, on va parler de la personnalisation au niveau du logiciel embarqué. Si modifier votre ordinateur pour changer de disposition de clavier (<a href="https://mart-e.be/2024/05/un-clavier-a-dix-doigts">en Ergo–L</a> par exemple) va avoir un effet uniquement sur l’ordinateur configuré, on va ici changer le comportement du clavier quel que soit l’appareil sur lequel il est branché.</p>
<p>Sur un clavier classique, le fabricant décide où sont positionnées les différentes touches et programme cela dans le firmware du clavier. Si l’on ne connait pas le logiciel embarqué sur la plupart des claviers, sur d’autres, ils utilisent un logiciel open source avec lequel on peut interagir. Un des plus connus (celui de mon clavier) est le firmware <a href="https://qmk.fm/">QMK</a>. L’intérêt de QMK réside dans sa très grande personnalisation et adaptabilité. Il est tellement populaire qu’il en devient un argument de vente (c’est, entre autres, ce qui différencie la version “classique” de la “Pro” chez Keychron, cette dernière utilisant un logiciel libre).</p>
<figure>
<a href="https://www.flickr.com/photos/sdasmarchives/33030747654/"><img src="https://mart-e.be/images/2024/operateur-telephone.jpg"/></a>
</figure>
<h2>La vie trépidante d’une touche enfoncée</h2>
<p>Prenons l’exemple d’un clavier branché avec un câble USB à un ordinateur. Qu’il soit à membrane ou mécanique, le microcontrôleur va envoyer un signal à l’ordinateur à chaque touche enfoncée. Pour communiquer avec la machine sur laquelle il est branché, le clavier va communiquer via le protocole <a href="https://en.wikipedia.org/wiki/USB_human_interface_device_class">USB HID</a> (Human Interface Device).</p>
<p>Lorsque vous pressez la barre d’espace, votre clavier va envoyer un signal <code>KC_SPACE</code> à votre ordinateur. Votre système décidera ensuite, en fonction du contexte, d’afficher un espace dans votre éditeur de texte, de sauter dans un jeu vidéo ou de mettre en pause une vidéo. En réalité, le clavier n’envoie pas littéralement <code>KC_SPACE</code> mais un paquet de donnée avec le code <code>0x2C</code> que l’on représente textuellement <code>KC_SPACE</code> pour nous faciliter la lecture, nous faibles humains.</p>
<p>Pour les lettres, il y a une subtilité en plus. Vous avez peut-être déjà remarqué que le fait que votre clavier possède des capuchons QWERTY, AZERTY, Bépo ou autre n’est pas important pour l’ordinateur : brancher un clavier AZERTY sur un ordinateur configuré en QWERTY ne va pas magiquement vous permettre de taper des accents. Si vous appuyez sur la première lettre de votre clavier (le <code>A</code> en AZERTY, <code>Q</code> en QWERTY et Ergo‑L) le clavier enverra dans tous les cas la mème commande <code>KC_Q</code>. C’est ensuite le système d’exploitation qui va se charger de traduire si le code <code>KC_Q</code> correspond à la lettre <code>A</code> ou <code>Q</code>, indépendamment de ce qui est écrit sur votre clavier.</p>
<p>Le protocole possède également une série de règles pour communiquer lorsque l’on enfonce plusieurs touches en même temps (<code>KC_LEFT_SHIFT</code> et <code>KC_A</code> pour faire une lettre majuscule, etc.) mais le principe reste le même.</p>
<p>Avec un clavier programmable, on va configurer QMK pour que votre clavier envoie des signaux différents de ceux par défaut lorsque l’on presse une touche.</p>
<h2>Mais changer quoi ?</h2>
<p>Configurer son clavier va permettre de modifier le comportement des touches, comme montré ci-dessous, pour mieux correspondre à notre usage. Nous sommes tous différents et avons tous des utilisations différentes de notre clavier (la/les langue(s) que l’on parle, les logiciels que l’on utilise, le type de texte que l’on écrit…).</p>
<figure>
<img src="https://mart-e.be/images/2024/via-keychron.png"/>
<figcaption><a href="https://www.caniusevia.com/">VIA</a>, un utilitaire permettant la configuration depuis le navigateur</figcaption>
</figure>
<p>Dans mon <a href="https://mart-e.be/2024/05/un-clavier-a-dix-doigts">article sur Ergo‑L</a>, j’expliquais que la disposition était conçue sur le principe 1DFH, soit être capable d’atteindre toutes les touches à maximum une touche de la position de repos. Si la touche morte <code>*</code> permet de ramener les lettres accentuées au centre du clavier, il reste que toute une série de touches sont encore trop éloignées. Pour s’approcher de l’objectif 1DFH, j’ai, par exemple, remplacé la touche <code>Caps Lock</code> (que je n’utilisais quasiment jamais) par <code>Del</code>. Si vous êtes plus doués que moi et ne faites jamais de faute, vous auriez pu y placer la touche <code>Enter</code> par exemple (même si on va faire encore mieux pour celle-ci plus bas).</p>
<p>Dans un registre plus léger, si le clavier est rétro-éclairé, l’on peut aussi choisir précisément la couleur et l’intensité dans VIA. Je n’aimais pas le « blanc » par défaut sur mon Keychron, il avait des teintes rosées. Je l’ai finalement changé pour <code>#F9FFF9</code> soit un « blanc » légèrement vert qui est plus proche de la peinture de mon clavier.</p>
<figure>
<img src="https://mart-e.be/images/2024/via-color.png"/>
<figcaption>Ça valait la peine d’acheter un clavier avec des LEDs de couleur si c’est pour chercher du plus blanc que blanc</figcaption>
</figure>
<p>Les chiffres de 0 à 3 en haut à gauche dans VIA correspondent aux différentes couches. Le Keychron possède un interrupteur sur le côté pour passer du mode Mac à Windows, les différentes couches dans Via sont donc :</p>
<ul>
<li>0 : mode Mac</li>
<li>1 : mode Mac + Fn</li>
<li>2 : mode Win</li>
<li>3 : mode Win + Fn</li>
</ul>
<p>La touche fonction <code>Fn</code> sur le clavier possède quelques changements tel que le réglage du son ou de la luminosité, mais vous pouvez ainsi en rajouter sur les nombreuses touches libres (par exemple avoir le contrôle de la musique sur la rangée centrale).</p>
<h2>Utilisation</h2>
<p>VIA ne nécessite pas d’installation et s’utilise depuis un simple navigateur en allant sur <a href="https://www.caniusevia.com/">caniusevia.com</a>. Le contrôle du clavier est possible grâce à l’API <a href="https://wicg.github.io/webhid/">WebHID</a> mais cette dernière n’est malheureusement <a href="https://caniuse.com/webhid">pas supportée</a> par Firefox (ou Safari), il faudra donc utiliser un navigateur Chromium.</p>
<p>Initialement, sous Linux, mon utilisateur n’avait pas les permissions nécessaires pour accéder aux <a href="https://docs.kernel.org/hid/hidraw.html">interfaces HIDRAW</a>. Si VIA ne fonctionne pas, ouvrez Chromium à l'adresse <a href="chrome://device-log">chrome://device-log</a> à la recherche d’un message d’erreur <code>HID "failed to open /dev/hidrawX"</code>. Si c’est le cas, suivez <a href="https://github.com/the-via/app/issues/91#issuecomment-1677963394">ces instructions</a> pour ajouter la règle udev qui convient.</p>
<p>Si tout s’est bien passé, le clavier devrait être reconnu automatiquement et s’affichera dans l’interface. Il suffit alors de cliquer sur la touche que l’on veut reconfigurer et de choisir sa nouvelle fonction. Le changement est immédiatement appliqué.</p>
<p>VIA n’est pas le seul logiciel du genre. Une alternative est par exemple <a href="https://vial.rocks/">Vial</a>. La version web de Vial ne détectait pas mon clavier, mais ils possèdent <a href="https://get.vial.today/">une application Linux</a> qui fonctionnait. Je le trouve, cependant, un peu plus « brut de décoffrage » que VIA.</p>
<figure>
<img src="https://mart-e.be/images/2024/vial-keychron.png"/>
<figcaption>Configuration de la couche 1</figcaption>
</figure>
<p>Pour encore plus de personnalisation, étant open source, il est également possible de modifier QMK directement et de changer complétement le firmware mais ce n’est nécessaire que pour des configurations très avancées.</p>
<p><a href="https://docs.qmk.fm/">QMK Firmware Documentation</a></p>
<h2>Mod-tap</h2>
<p>Un peu plus haut, je disais qu’avec l’approche 1DFH, on voulait déplacer ses doigts de maximum une touche de la position de repos, soit un carré de 36 touches (sans compter celles atteignables avec le pouce). Mon clavier en comptant 84, mathématiquement, il y a un problème.</p>
<p>Le secret pour concentrer toutes ces touches au même endroit est l’utilisation des <em>mod-taps</em>, des modificateurs permettant à une même touche d’avoir deux utilisations en fonction du contexte. Avec un mod-tap, enfoncer brièvement une touche et la maintenir enfoncée va produire un résultat différent.</p>
<p>Par exemple, j’ai configuré ma touche <code>Alt</code> gauche pour garder son comportement classique lorsqu’elle est maintenue enfoncée mais si je la <em>tap</em> (l’enfonce et la relâche directement) elle va produire un <code>Suppr</code>. J’ai aussi redéfini la touche <code>AltGr</code> pour produire un <code>Enter</code> lorsqu’elle est tapée brièvement (et elle continue à faire un <code>AltGr</code> classique lorsqu'elle est maintenue).</p>
<figure>
<a href="https://github.com/OneDeadKey/arsenik"><img src="https://mart-e.be/images/2024/arsenik.png"/></a>
<figcaption>Disposition Arsenik complète</figcaption>
</figure>
<p>Ces deux exemples sont des changements proposés par la <a href="https://github.com/OneDeadKey/arsenik">configuration Arsenik</a>, une façon d’organiser son clavier pour avoir besoin de seulement 33 touches. Cette disposition va tirer profit des touches accessibles avec les pouces (des doigts sous-utilisés et pourtant forts) pour ajouter des doubles fonctionnalités sur les deux <code>Alt</code> et la barre d’espace.</p>
<p>Cela peut paraitre compliqué au premier abord mais l’on s’y habitue assez vite (prévoyez quand même une série de <code>Enter</code> involontaires) et ça devient vite un automatisme. Garder les mains toujours dans la même zone est un gain de confort insoupçonné.</p>
<p>Dans Arsenik, la barre d’espace va permettre d’accéder à la couche dite de navigation. Si je l’enfonce brièvement, elle produit un espace mais si je la maintiens et la combine avec une autre touche, elle va produire un autre code. Dans le schéma ci-dessus, <code>Espace</code>+<code>E</code> va faire une flèche vers le haut et <code>Espace</code>+<code>U</code> un <code>7</code>. Avec cette astuce, je peux caser l’équivalent de 60 touches dans un carré de 30.</p>
<figure>
<img src="https://mart-e.be/images/2024/via-modtap.png"/>
<figcaption>Définition de ma touche <code>Alt</code> gauche</figcaption>
</figure>
<p>Arsenik est une proposition dans laquelle chacun est libre de prendre ce qui lui convient. Personnellement, j’ai suivi les recommandations pour les deux <code>Alt</code> mais ai configuré uniquement les flèches sur la couche navigation, je continue à aller chercher les chiffres sur la rangée du haut.</p>
<p>Pour configurer cela dans VIA, la catégorie « Special » comporte une touche « Any » permettant de rentrer un code QMK directement. Les mod-tap se définissent avec le format <code>MT(MOD_a, KC_b)</code> où <code>a</code> est le comportement lorsque l’on maintient la touche et <code>b</code> lorsque l’on la <em>tap</em>. Mon <code>Alt</code> gauche devient ainsi <code>MT(MOD_LALT,KC_BSPC)</code> et le <code>AltGr</code> devient <code>MT(MOD_RALT,KC_ENT)</code>. La liste de tous les codes disponibles est accessible sur le site de QMK.</p>
<p><a href="https://docs.qmk.fm/#/keycodes_basic">Basic Keycodes | QMK</a></p>
<p>Pour la touche espace, l’on va utiliser la fonction <code>LT(a, KC_b)</code> où <code>a</code> est le numéro de la couche à laquelle on veut accéder et <code>b</code> la touche d’origine. Dans mon cas, j’ai défini <code>LT(3,KC_SPC)</code> avec ma couche de navigation définie sur la couche 3. Je vais donc modifier le troisième <em>Layer</em> dans VIA pour insérer les flèches de navigation sur les touches qui me conviennent. L’on peut faire pareil avec les chiffres si l’on veut se passer de la rangée du haut.</p>
<p>Une astuce populaire (mais loin d’être triviale) sur les très petits claviers est les <em>home row mods</em>. Un Home Row Mod est le fait de configurer des mod-taps directement sur la ligne où sont les mains au repos (la <em>home row</em>). L’on va généralement y placer les touches <code>Ctrl</code>, <code>Shift</code> et <code>Alt</code> lorsque l’on maintient ces touches. On va par exemple dire que la touche <code>Q</code> d’un AZERTY va produire un <code>Shift</code> lorsqu’elle est maintenue. Cette approche permet un vrai 1DFH mais n’est pas non plus sans son lot de difficultés. Je l’ai un peu expérimentée, mais je produisais trop de fautes à mon goût (il faut contrôler précisément ses frappes pour qu’un « qu » un peu trop rapide ne produise pas « U » accidentel)</p>
<p><a href="https://precondition.github.io/home-row-mods">A guide to home row mods</a></p>
<p>Je suis loin d’utiliser tout le pouvoir des modificateurs et de la personnalisation de QMK. Je continue d’utiliser la rangée de chiffres par facilité mais, très rapidement, certaines modifications comme profiter des <code>Backspace</code>, <code>Del</code> et <code>Enter</code> à portée de doigt sont devenues des automatismes très agréables.</p>
<p>Si la lecture de cet article vous a donné envie de configurer votre clavier mais que votre clavier actuel n’utilise pas QMK, sachez que vous pouvez aussi installer <a href="https://github.com/jtroo/kanata">Katana</a> sur votre PC, un logiciel vous permettant d’obtenir des fonctionnalités +/- similaires.</p></content><category term="Uncategorized"></category><category term="clavier"></category><category term="qmk"></category><category term="via"></category></entry><entry><title>Un clavier à dix doigts</title><link href="https://mart-e.be/2024/05/un-clavier-a-dix-doigts" rel="alternate"></link><published>2024-05-03T11:42:00+02:00</published><updated>2024-05-03T11:42:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-05-03:/2024/05/un-clavier-a-dix-doigts</id><summary type="html"><p>Si, <a href="https://mart-e.be/2024/04/decouverte-des-claviers-mecaniques">en changeant de clavier</a>, je m’étais préparé à perdre du temps (et de l’argent) pour le choix du matériel, je ne m’attendais pas à en perdre …</p></summary><content type="html"><p>Si, <a href="https://mart-e.be/2024/04/decouverte-des-claviers-mecaniques">en changeant de clavier</a>, je m’étais préparé à perdre du temps (et de l’argent) pour le choix du matériel, je ne m’attendais pas à en perdre à l’usage. Il y a un gain certain de confort mais tout cela me fait une belle jambe si c’est pour taper à côté des touches.</p>
<p>… et c’est exactement ce qui s’est passé.</p>
<figure>
<a href="https://www.flickr.com/photos/statelibraryofnsw/53542249893/"><img src="https://mart-e.be/images/2024/fumer-machine-a-ecrire.jpg"/></a>
<figcaption></figcaption>
</figure>
<p>J’ai vite constaté que ma vitesse de frappe et ma précision en avaient pris un sérieux coup. Je tapais sur deux touches à la fois, je regardais plus souvent mon clavier (et pas que pour l’admirer). Il fallait agir ! Je me suis donc décidé à faire un peu d’exercices et d’enfin apprendre à réellement taper avec mes dix doigts (et pas 4-5 comme j’en avais l’habitude). Le fait d’apprendre la dactylographie permettrait d’éviter la fatigue musculaire, d’augmenter sa vitesse de frappe et d’améliorer sa position (les mouvements fréquents de la tête pour regarder son clavier peuvent être responsables de douleurs musculaires à la nuque).</p>
<p>Mon but n’était pas d’atteindre des vitesses de 150 mots par minute comme le promettent les coachs youtube mais seulement d’être suffisamment à l’aise pour ne pas avoir l’impression de me battre continuellement contre mon clavier. Du moins, c’était le plan initial…</p>
<p><em>Je précise au passage que le changement des switches linéaires vers des tactiles comme expliqué dans l’article précédent m’a permis de grandement réduire les frappes accidentelles : les tactiles ont une plus grande résistance et l’on peut sentir le point d’activation. Le temps que je réalise que je voulais d’autres switches et qu’ils soient livrés, ça faisait déjà une dizaine de jours que je m’entraînais à la dactylographie et avais déjà regagné pas mal de précision.</em></p>
<h2>keybr</h2>
<p>Un des premiers sites que j’ai utilisé était <a href="https://www.keybr.com/">keybr.com</a>. Un site (<a href="https://github.com/aradzie/keybr.com/">open source</a>) très efficace pour apprendre le placement des doigts. On règle une vitesse voulue (par défaut 35 mots par minute) et l’on débloque la lettre suivante une fois arrivé à cette vitesse. Pour me motiver un peu, j’ai payé pour un compte premium (10€, ça ne donne accès à rien de plus si ce n’est soutenir le développeur et une motivation à rentabiliser son “investissement”). J’ai mis 3 heures réparties sur 5 jours pour débloquer toutes les lettres.</p>
<figure>
<img src="https://mart-e.be/images/2024/keybr-azerty.png"/>
<figcaption>On ne débloque une nouvelle lettre que quand les précédentes sont maitrisées</figcaption>
</figure>
<p>À partir de là, j’ai travaillé pour augmenter ma vitesse moyenne (38 mots par minute) et ma précision (93%). Je conseille aussi de changer les différents paramètres pour corser la difficulté progressivement. On peut régler la vitesse à atteindre, cacher le clavier, être plus strict sur les erreurs,…</p>
<p>Après une dizaine de jours d’entraînement (à raison d’un peu plus d’1/2h par jour), je dépassais les 50 mots par minute régulièrement.</p>
<figure>
<img src="https://mart-e.be/images/2024/keybr-fr-graph.png"/>
<figcaption>Passage de 30 à 50wpm en une dizaine de jours</figcaption>
</figure>
<h2>monkeytype</h2>
<p>L’avantage de keybr est qu’il nous fait toujours travailler les lettres les plus lentes, ce qui permet de s’améliorer là où l’on a des difficultés. Le désavantage est qu’il nous fait toujours travailler les lettres les plus lentes, ce qui est vite lassant, répétitif et pas toujours encourageant.</p>
<p>Une alternative (<a href="https://github.com/monkeytypegame/monkeytype">également open source</a>) est <a href="https://www.monkeytype.com">monkeytype</a>. Avec une esthétique minimaliste, l’on peut s’entrainer à rentrer des suites de mots aléatoires.</p>
<p>Monkeytype est très populaire dans la communauté des enthousiastes de claviers et c’est souvent le score monkeytype qui va être pris en exemple pour comparer les vitesses de frappe en wpm (mots par minute, avec 1 mot = 5 lettres). C’est une métrique qui a ses limites (pas de majuscule, ponctuation, etc.) mais, au moins, tout le monde parle de la même chose.</p>
<p>Monkeytype propose beaucoup plus d’exercices et d’options que keybr. On peut s’entraîner sur des mots moins courants, mettre des exigeances de durée, de précision et de vitesse minimales. Il y a même des exercices spécifiques de programmation où l’on peut s’exercer à taper du code python ou des commandes git. On peut également retravailler les mots sur lequel on a fait le plus d’erreurs ou utiliser un texte de son choix.</p>
<figure>
<img src="https://mart-e.be/images/2024/monkeytype-python.png"/>
</figure>
<p>Si keybr est très bien pour commencer progressivement et travailler les points les plus difficiles, monkeytype permet d’éviter de se lasser et d’adapter les leçons à ce que l’on veut. J’ai, par exemple, retapé quelques chapitres du <a href="https://www.saintexupery-domainepublic.be/">Petit Prince</a> quand j’en avais assez d’écrire des suites de mots sans aucun sens.</p>
<h2>ngram-type</h2>
<p>Arrivé un peu plus tard dans mon entrainement, <a href="https://ranelpadon.github.io/ngram-type/">ngram-type</a> va se focaliser sur des enchainements des lettres les plus fréquentes en anglais. On va ainsi répéter les bi, tri et quadrigrammes en boucle, jusqu’à arriver à un bon niveau de vitesse et de précision.</p>
<p>Je me suis ainsi entrainé sur <a href="https://mart-e.github.io/ngram-type-fr/">ngram-type fr</a>, ma version adaptée pour le Français. J’ai commencé à 40 wpm, 2 combinaisons et 3 répétitions et, une fois maitrisé tous les exercices avec ces paramètres, je recommençais en augmentant le nombre de combinaisons. Assez rapidement, j’ai pu augmenter l’objectif de vitesse minimale à 50WPM.</p>
<figure>
<img src="https://mart-e.be/images/2024/ngram-type.png"/>
<figcaption></figcaption>
</figure>
<p>J’ai pu constater son efficacité avec l’anglais : après un mois d’entrainement sur keybr et monkeytype, je me suis rendu compte que j’étais plus lent en anglais qu’en français (alors qu’il n’y a pas d’accent). Quelques jours d’exercices sur la version anglaise de ngram-type m’ont permis de vite remonter ma vitesse en anglais.</p>
<h2>Dispositions alternatives</h2>
<p>L’ordre des lettres sur un clavier QWERTY est un héritage de <a href="https://fr.wikipedia.org/wiki/Machine_%C3%A0_%C3%A9crire_Sholes_et_Glidden">la première machine à écrire de Sholes</a> en 1874. Le pourquoi du comment de l’ordre des lettres est sujet à beaucoup de spéculations mais l’on suppose qu’il a été pensé pour faciliter l’usage de la machine par les télégraphes.</p>
<!-- L’on prétend parfois que les lettres ont été disposées pour ralentir la frappe dans le but d’éviter que les leviers se coincent si enclenchés trop rapidement mais cela tient probablement de la légende urbaine. -->
<p>Si la conception de la disposition du QWERTY (ou de l’AZERTY) n’est pas certaine, l’on est cependant certain que l’on peut faire plus efficace. En 1932, August <a href="https://fr.wikipedia.org/wiki/Disposition_Dvorak">Dvorak</a> crée la disposition éponyme en se basant sur l’analyse de fréquence des lettres en Anglais. Pour augmenter le confort, les lettres les plus fréquentes sont concentrées sur la rangée centrale.</p>
<p>Dvorak (et Bépo) ont isolé les voyelles sur la main gauche pour favoriser l’alternance des mains. Les digrammes (suites fréquentes de signes, par exemple "qu" ou "oi" en français ou "th" en anglais) les plus courants nécessitent ainsi de presser des touches éloignées. Sur une machine à écrire, presser deux touches voisines en même temps risque de coincer les leviers de caractère. En les éloignant, on peut les presser plus rapidement.</p>
<figure>
<img src="https://mart-e.be/images/2024/august-dvorak.webp"/>
<figcaption>August Dvorak</figcaption>
</figure>
<p>Le record du monde de vitesse à la machine à écrire (145wpm pendant une heure) a ainsi été obtenu sur une machine Dvorak par <a href="https://en.wikipedia.org/wiki/Barbara_Blackburn_(typist)">Barbara Blackburn</a>. Seulement, les habitudes étant ce qu’elles sont et le coût de réapprendre à tout le monde une nouvelle disposition jugé trop élevé, le Dvorak n’a jamais percé et l’on est toujours, très majoritairement, avec le QWERTY.</p>
<h2>Passage à Bépo</h2>
<p>En français, la disposition alternative la plus connue est le <a href="https://bepo.fr/">Bépo</a>. Elle donne un accès direct aux lettres accentuées (et donc les majuscules accentuées !) et est aussi pensée pour maximiser l’utilisation de la rangée centrale et un meilleur équilibre des deux mains.</p>
<figure>
<a href="https://bepo.fr/wiki/Accueil"><img src="https://mart-e.be/images/2024/bepo-1.1-complet.png"/></a>
<figcaption>On gagne un accès facile à beaucoup de caractères typographiques comme les É, Ç, Œ et autres « » ¿</figcaption>
</figure>
<p>Alors que j’arrivais aux 60 mots par minute en AZERTY (et bloquais toujours autant sur les lettres accentuées), j’ai lu un article sur le speedtyping qui mentionnait notamment le fait que si l’on compte changer de disposition, autant le faire le plus tôt possible pour minimiser la mémoire musculaire. Je connaissais l’existence de dispositions alternatives (notamment via <a href="https://ploum.net/le-bepo-nest-pas-un-numero-cest-un-clavier-libre/index.html">la prêche de Ploum</a>) mais n’avais jamais fait l’effort d’en apprendre une.</p>
<p>Augmenter la vitesse de frappe n’est pas une bonne motivation pour changer de disposition de clavier (il est possible d’atteindre de très grandes vitesses avec de la pratique, quelle que soit la disposition utilisée) mais tout le monde semble unanime sur le gain de confort d’une disposition optimisée. Les exercices de dactylographie m’ont bien montré à quel point taper certains caractères accentués était inconfortable : pour atteindre les <code>é</code>, <code>è</code>, <code>à</code> en AZERTY, il faut remonter de deux rangées depuis la ligne principale (avec chaque fois un temps pour replacer les mains). Améliorer mon outil de travail va donc me demander un peu plus de travail que chercher un bon clavier…</p>
<figure>
<img src="https://mart-e.be/images/2024/bepo-stats-mains.png"/>
<figcaption>L’AZERTY utilise beaucoup plus la zone en haut à gauche du clavier. Bépo se concentre sur la rangée centrale</figcaption>
</figure>
<p>Je me décide pour la disposition Bépo car elle semble un bon compromis pour le français mais aussi pour l’anglais et la programmation (ponctuation accessible avec les index). De plus, elle est nativement disponible sous Linux (et arrive dans Windows 11 parait-il) et il existe même certains claviers avec des touches Bépo (même si ce n’est pas forcément conseillé vu que le but est d’apprendre à taper sans regarder le clavier).</p>
<p>Avec un petit pincement au cœur, je change donc keybr pour une disposition Bépo et recommence à la vitesse minimale (15 mots par minute) en décochant toutes les options de difficulté que j’avais activé une à une.</p>
<p>Les premières leçons furent très difficiles. J’avais du mal à atteindre les 15 mots par minute et devait être très concentré. Au bout d’une heure (répartie sur 2 jours par tranches de 10 minutes), j’avais débloqué 10 touches. A partir de là, j’ai vu tout doucement de nouveaux automatismes se créer. Je devais toujours me concentrer pour ne pas repasser en AZERTY mais mes doigts se plaçaient vers la bonne touche plus naturellement. Et ça, ça fait plaisir.</p>
<p>Après cinq jours d’entrainements intensifs sur keybr, monkeytype et <a href="https://www.bépoète.fr/">bépoète</a>, je me sens suffisamment à l’aise pour abandonner la disposition AZERTY et basculer vers la disposition BéPO. Après coup, je réalise que c’était encore bien trop tôt mais heureusement, ça ne dura pas.</p>
<h2>Optimiser quoi ?</h2>
<p>Lorsque l’on cherche à optimiser l’ordre des touches du clavier, le critère le plus évident est d’utiliser la fréquence des lettres et de positionner les lettres les plus fréquentes sur la rangée centrale, mais ce n’est pas le seul levier que l’on peut activer. Quelques exemples de métriques que l’on peut utiliser pour évaluer le confort d’une disposition :</p>
<ul>
<li>charge des doigts : en plus d’un équilibre main gauche - main droite, on cherche à favoriser l’index et le majeur et laisser l’auriculaire en paix.</li>
</ul>
<figure>
<img src="https://mart-e.be/images/2024/charge-azerty-bepo.png"/>
</figure>
<ul>
<li>
<p>bigrammes à un doigt : déplacer un doigt est lent et inconfortable à haute vitesse, on veut éviter que des bigrammes fréquents comme "de" ou "qu" soient faits avec le même doigt. En AZERTY, les fréquents "de" et "ce" sont tapés avec le majeur gauche.</p>
</li>
<li>
<p>ciseaux : certains bigrammes comme "on" ou "in" nécessitent de placer la main de façon très inconfortable en AZERTY : le majeur ou l’auriculaire s’étendent pour le <code>o</code> et <code>i</code> en haut alors que l’indexe va chercher le <code>n</code> sur la rangée du bas. On se retrouve avec la main tordue. Les ciseaux sont à éviter à tous prix. Bépo évite les ciseaux sur les bigrammes fréquents en Français mais fait moins bien en Anglais, par exemple avec "wh" et "ay".</p>
</li>
<li>
<p>roulements : un enchainement de deux touches avec la même main très confortable. En AZERTY, "er" ou "oi" s’enchainent particulièrement bien et sont très rapides.</p>
</li>
</ul>
<p>Tout ces critères sont aussi dépendants du texte que l’on va écrire : ce qui est efficace en Français ne l’est pas forcément pour l’Anglais.</p>
<p><a href="https://ergol.org/stats/">Analyseur | Ergo‑L</a></p>
<p>Le site de Ergo‑L, ci-dessus, propose un analyseur bien fait pour ces métriques (et bien d’autres) mais rappelle deux citations importantes : </p>
<blockquote>
<p>Lorsqu’une métrique devient un objectif, elle cesse d’être une bonne métrique. <br>
~ <a href="https://fr.wikipedia.org/wiki/Loi_de_Goodhart">loi de Goodhart</a></p>
</blockquote>
<!-- -->
<blockquote>
<p>Les chiffres sont aux analystes ce que les lampadaires sont aux ivrognes : ils fournissent bien plus un appui qu’un éclairage.<br>
~ Jean Dion</p>
</blockquote>
<p>Tout n’est pas que question de chiffres. Il s’agit aussi de prendre en compte des critères moins quantitatifs tels que la facilité d’apprentissage (à quel point toutes les lettres changent) ou si l’accès aux chiffres est direct ou non. Si l’on fréquente <a href="https://www.reddit.com/r/KeyboardLayouts/">/r/KeyboardLayouts</a> sur Reddit, l’on découvre qu’il existe autant de dispositions alternatives que d’usages (si à 30 ans, t’as pas créé ta propre disposition de clavier…).</p>
<h2>Re-changement pour Ergo‑L</h2>
<p>Si Bépo est l’alternative francophone la plus connue, c’est loin d’être la seule. Après une semaine de Bépo, je vois passer des discussions sur d’autres dispositions plus modernes (Bépo a été créé il y a une vingtaine d’années). <a href="https://ergol.org/">Ergo‑L</a> revient souvent comme nouvelle disposition prometteuse. Même le créateur de <a href="https://github.com/Ced-C/Bepolar">Bépolar</a> (une variante de Bépo optimisée pour la programmation) dit qu’il recommande Ergo‑L pour ceux qui ne sont pas encore familliers avec le Bépo. Encore une autre disposition ? Mais Bépo, c’était pas déjà censé être optimisé !?</p>
<p>Dvorak a été conçu comme une disposition pour les machines à écrire : l’alternance des mains était un critère important qui n’a plus raison d’être aujourd’hui. L’alternance des mains n’est pas mauvaise en soi mais, sur un clavier d’ordinateur, l’on peut faire des roulements : l’on commence à enfoncer la touche suivante alors que l’on n’a pas fini de relâcher la précédente. Alors que Bépo se base sur les même principes que Dvorak, Ergo‑L va essayer de favoriser les roulements.</p>
<figure>
<a href="https://ergol.org/"><img src="https://mart-e.be/images/2024/ergol-full.png"/></a>
<figcaption>On remet toutes les lettres au centre</figcaption>
</figure>
<p>La particularité de l’Ergo‑L est qu’il est pensé sur la logique 1DFH (<em>1 distance from home</em>), soit que tous les caractères doivent être atteignables à maximum une touche de la rangée centrale. Si Bépo se veut <em>optimisé</em> pour rapprocher les lettres les plus fréquentes, Ergo‑L se veut <em>ergonomique</em> en minimisant les larges mouvements des doigts et en rapprochant <em>toutes</em> les lettres au centre du clavier.</p>
<p>Ergo‑L arrive à nécessiter moins de touches que Bépo grâce à la touche <code>*</code>. Le <code>*</code> rouge sur le dessin ci-dessus est une <a href="https://fr.wikipedia.org/wiki/Touche_morte">touche morte</a>, c’est-à-dire une touche qui ne produit pas de résultat à elle seule. Par exemple, en AZERTY, la touche <code>^</code> est une touche morte, elle doit être combinée avec une autre pour obtenir un <code>â</code>, <code>ê</code>, <code>û</code>, <code>ô</code> ou <code>^</code> (<code>^</code> + <code>aeuo^</code>). Ici, c’est la touche <code>*</code> qui permet d’obtenir les caractères accentués en vert (<code>*</code> + <code>s</code> = <code>é</code>, <code>*</code> + <code>e</code> = <code>è</code>, <code>*</code> + <code>n</code> = <code>ê</code>, etc.). Faire une touche accentuée nécessite deux touches plutôt qu’une mais c’est un enchainement rapide, et tout l’alphabet est ainsi atteignable sans extension des doigts. On va ainsi accepter de presser plus de touches proches (via des combinaisons) plutôt que d’étendre le petit doigt à l’autre bout du clavier. C’est une logique que l’on va retrouver sur les claviers miniatures comme le <a href="https://olkb.com/collections/planck">Planck 40%</a> qui ne possède que 4 rangées de touches.</p>
<p>Si je disais que Bépo était un bon compromis pour l’anglais et la programmation, c’est en comparaison à l’AZERTY mais ce n’est pas pour ça qu’il n’a pas de défaut. Notamment le <code>W</code>, assez fréquent en Anglais, n’est accessible qu’avec une extension du petit doigt pas super agréable, on tape facilement sur le <code>Z</code> voisin. Avec une logique 1DFH, on s’arrange pour n’avoir aucune touche trop éloignée et on arrive à faire mieux que Bépo sans dégrader l’utilisation du Français.</p>
<p><a href="https://ergol.org/presentation/#plus-optimis%C3%A9-que-dvorak-et-b%C3%A9po">Plus optimisé que Dvorak et Bépo | Ergo‑L</a></p>
<p>En bonus, certains raccourcis claviers (comme <code>Ctrl-c</code>, <code>Ctrl-v</code>) nécessitaient les deux mains en Bépo (et empêchaient donc l’utilisation de la souris en même temps) alors qu’ils sont préservés en Ergo‑L.</p>
<p>Tout comme Bépo, l’on accède facilement à des caractères typographiques précis : on peut utiliser l’apostrophe <code>’</code> (au lieu de <code>'</code>) et les guillemets corrects (<code>« … »</code> en français et <code>“…”</code> en anglais). Comme sur un clavier AZERTY la <a href="https://fr.wikipedia.org/wiki/Touche_de_combinaison">touche de combinaison</a> <code>AltGr</code> permet d’obtenir des caractères moins fréquents mais, contrairement à celui-ci, elle ne contient pas de caractères de typographie français comme le <code>œ</code> ou <code>ù</code>. Sur l’Ergo‑L, cette couche est réservée aux symboles de programmation (<code>#;${}[]</code>,…) et les caractères typographiques ci-dessus sont accessibles grâce à la touche <code>*</code>. Devoir maintenir une touche de combinaison enfoncée lorsque l’on tape du texte à grande vitesse est source d’erreurs.</p>
<p><a href="https://ergol.org/presentation/#typographie">Typographie | Ergo‑L</a></p>
<p>Et c’est donc ainsi qu’après une quinzaine d’heures d’entrainement, je décide d’arrêter mes efforts sur le Bépo et d’à nouveau changer de disposition. On repasse en AZERTY comme disposition principale et l’on fait des petites sessions sur keybr pour apprendre l’Ergo‑L. Et surprise : ça va beaucoup plus vite ! Si j’avais mis 2h pour débloquer 15 lettres en Bépo sur keybr, en Ergo‑L, j’avais 16 lettres après 1h. Je ne vais pas conclure que Ergo‑L est plus facile à apprendre mais je pense que l’entrainement Bépo m’a permis de briser ma mémoire musculaire AZERTY et facilite l’apprentissage de nouveaux automatismes.</p>
<p>Ergo‑L possède aussi <a href="https://ergol.org/dactylo/#ergol">sa page d’entrainement</a> qui se focalise ici sur la précision (min 98% pour débloquer des nouvelles lettres). De nouveau, intéressant pour varier les plaisirs.</p>
<h2>C’est long ?</h2>
<p>Le changement demande un investissement certain en temps et en énergie mais n’est pas insurmontable. J’ai "profité" d’une blessure sportive (et ne plus <a href="https://mart-e.be/2023/06/du-canape-a-lultra-trail">pouvoir courir</a>) pour passer un peu plus de temps sur le clavier. Au bout de deux semaines d’Ergo‑L, j’avais atteint les 40 wpm et fait le changement comme disposition principale. Au bout d’un mois, j’arrive aux 50 wpm sur monkeytype et ratrape ma vitesse AZERTY peu de temps après.</p>
<p>Le fait de taper entièrement à l’aveugle (il n’existe pas de touches de clavier Ergo‑L) rend encore compliquée l’utilisation des caractères spéciaux en codant (que je faisais en regardant mon clavier en AZERTY) mais je suis plus fluide sur le texte. Au final, je pensais que la transition serait plus longue et difficile. Cela reste peu au regard des très nombreuses heures que je vais encore passer à taper sur un clavier.</p>
<p>Dès le moment où l’on bascule de disposition, l’on voit une nette progression en lien avec le plus grand nombre d’heures passées sur celle-ci mais il faut quand même être prêt à passer un mauvais moment au début. Ne prévoyez pas le changement à un moment chargé ou stressant au boulot. La productivité va en prendre un coup au début, planifiez plutôt le basculement pendant un congé.</p>
<figure>
<img src="https://mart-e.be/images/2024/monkeytype-progres.png"/>
<figcaption>Après un peu moins de 2 mois d’entrainement, je dépasse mon précédent record de 57wpm en AZERTY</figcaption>
</figure>
<h2>Et après ?</h2>
<p>Ergo‑L est encore en développement mais devrait sortir sa version 1.0 ce mois-ci pendant <a href="https://pretalx.jdll.org/jdll2024/talk/QT7JBD/">les JdLL</a> et ne devrait alors plus trop changer. Les développeurs sont assez actifs <a href="https://discord.gg/5xR5K3nAFX">sur Discord</a> où les gens partagent leurs expérimentations. Il y a aussi beaucoup de discussions d’enthousiastes de clavier ergonomiques ou sur comment utiliser Vim avec leur disposition favorite.</p>
<p><em>Mise à jour 31/05: la version 1.0 <a href="https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/merge_requests/690">a été finalisée</a> et, cerise sur le gateau, <a href="https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/merge_requests/690">a été intégrée dans XKB</a>. Cela veut dire qu’Ergo‑L sera désormais disponible nativement sur tous les Linux (à jour), plus besoin de passer par une ligne de commande pour l’installer.</em> </p>
<p>Maintenant que je suis satisfait de ma vitesse atteinte, je vais probablement ralentir les exercices de dactylographie en texte pure pour me concentrer sur l’utilisation des symboles de programmation, pour lequel j’ai encore besoin d’un copion aujourd’hui.</p>
<p><a href="https://mart-e.be/2024/07/programmez-votre-clavier-avec-via">Dans l’article suivant</a>, l’on parlera de modification du comportement du clavier avec VIA.</p></content><category term="Uncategorized"></category><category term="clavier"></category><category term="dactylographie"></category><category term="bépo"></category><category term="ergo-l"></category></entry><entry><title>Découverte des claviers mécaniques</title><link href="https://mart-e.be/2024/04/decouverte-des-claviers-mecaniques" rel="alternate"></link><published>2024-04-23T11:47:00+02:00</published><updated>2024-04-23T11:47:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-04-23:/2024/04/decouverte-des-claviers-mecaniques</id><summary type="html"><p><em>Ceci est le premier article d’une série de trois (et plus si affinités ?) articles sur mes expérimentations au sujet des claviers.</em></p>
<p>Après plus de dix ans à travailler quotidiennement …</p></summary><content type="html"><p><em>Ceci est le premier article d’une série de trois (et plus si affinités ?) articles sur mes expérimentations au sujet des claviers.</em></p>
<p>Après plus de dix ans à travailler quotidiennement sur un ordinateur et à taper sur un clavier à 10 balles, j’ai décidé de m’intéresser sérieusement à mon outil de travail et de rentrer dans le monde passionnant (et effrayant) des claviers mécaniques.</p>
<p><a href="https://localghost.dev//blog/so-you-ve-decided-to-get-into-mechanical-keyboards/">So you’ve decided to get into mechanical keyboards | localghost</a></p>
<p>Je savais qu’en ouvrant cette porte, je prenais le risque de tomber dans un <em>rabbit hole</em> semblable à la fois où j’ai reçu mon premier LiveCD Ubuntu (cf <a href="https://xkcd.com/456/">xkcd</a>).</p>
<p>… et c’est exactement ce qui s’est passé.</p>
<figure>
<a href="https://www.flickr.com/photos/sdasmarchives/32593565955/"><img src="https://mart-e.be/images/2024/machine-ecrire-pieces.jpg" alt="Machine à écrire démontée"/></a>
</figure>
<h2>C’est quoi un clavier mécanique ?</h2>
<p>Dans un clavier "classique", une touche va percuter une membrane qui va envoyer le signal de la touche enfoncée. Avec un clavier mécanique, une touche va enfoncer un interrupteur mécanique (un <em>switch</em>) qui sera relié à un circuit imprimé (PCB). Une fois enfoncé, un contact électrique va se produire et signaler la frappe. Rien de révolutionnairement différent au premier abord.</p>
<p>S’il existe une grande variété de claviers à membrane, pour différents usages et bourses, ce n’est rien en comparaison de l’offre des claviers mécaniques. Le clavier à membrane que l’on achète vient tout-en-un et l’on ne peut pas remplacer ses composants. Sur un clavier mécanique, on a une bien plus grande modularité et il est généralement possible de remplacer ce que l’on désire.</p>
<p>Les gamers vont aimer les claviers mécaniques pour leur réactivité et leur précision mais si l’on fréquente <a href="https://www.reddit.com/r/MechanicalKeyboards/">/r/MechanicalKeyboards/</a> sur Reddit, l’on arrive dans le domaine très niche des <em>keyboard enthusiasts</em>. Ces gens qui vont dépenser des sommes folles, partager des photos de leurs plus beaux claviers colorés, construire le clavier de leurs rêves de toute pièce ou discuter des différents switches qu’ils ont testés (et oui, c’est exactement ce que je fais dans cet article).</p>
<p><a href="https://blog.codinghorror.com/the-keyboard-cult/">The Keyboard Cult | Coding Horror</a></p>
<p>Une très grande modularité, mais pour choisir quoi au fait ?</p>
<h2>Le format</h2>
<p>La première décision se fera sur la taille du clavier. Un clavier d’ordinateur classique, avec son pavé numérique est au format dit 100%. S’il est habituel avec les claviers à membrane, il est assez rare dans les claviers mécaniques, l’on va préférer des claviers plus compacts.</p>
<figure>
<a href="https://www.reddit.com/r/MechanicalKeyboards/comments/s4u4ju/a_guide_i_made_on_keyboard_sizes/"><img src="https://mart-e.be/images/2024/keyboard-size.webp"/></a>
<figcaption>Le format 75% est assez commun</figcaption>
</figure>
<p>En réduisant le nombre de touches, l’on devra utiliser des "touches fonctions" pour récupérer certaines fonctionnalités, y compris pour les chiffres ou les flèches de directions pour les plus petits modèles. Si un clavier 40% vous semble un peu extrême (ça l’est), certains poussent le vice encore plus loin comme <a href="https://www.youtube.com/watch?v=5RN_4PQ0j1A">ce clavier à 18 touches</a> tout à fait utilisable.</p>
<p>Il faudra ensuite choisir entre un format ANSI ou ISO. En Europe, on est habitué au format ISO (avec la grande touche <code>Enter⏎</code>) alors qu’ANSI est plus utilisé en Amérique. Il existe bien plus de choix de claviers ANSI mais, si vous voulez de l’AZERTY, il faudra rester avec un format ISO.</p>
<figure>
<img src="https://mart-e.be/images/2024/clavier-iso-ansi.png"/>
</figure>
<p>Ne voulant pas trop m’aventurer en terrain inconnu, mon choix de clavier s’est finalement arrêté le <a href="https://keychron.fr/collections/frence-iso-layout-keyboard/products/keychron-k2-pro-qmk-via-wireless-mechanical-keyboard-iso-layout-collection#">Keychron K2 pro</a>, un clavier 75% relativement classique. Ils ont une assez bonne réputation, sont configurables et proposent une disposition ISO. J’aurais eu beaucoup plus de choix (moins chers) avec un clavier ANSI mais je n’avais pas envie de passer en QWERTY. Si je dois faire l'effort d’apprendre une nouvelle disposition, autant que ce soit sur une disposition optimisée comme dvorak ou bépo (<em>ceci était un spoiler pour la partie 2</em>).</p>
<h2>Les touches</h2>
<p>Pour changer les touches sombres d’origine, j’ai commandé des <a href="https://keychron.fr/products/iso-ansi-q1-q2-k2-oem-dye-sub-pbt-keycap-set-carbon">touches AZERTY belge Carbon</a> sur le site de Keychron.</p>
<figure>
<img src="https://mart-e.be/images/2024/keychron-keycaps.jpg"/>
<figcaption>Le changement de touches est très facile sur les claviers mécaniques</figcaption>
</figure>
<p>L’immense majorité des touches de clavier que l’on peut acheter sont compatibles avec la plupart des claviers. Si vous disposez d’un clavier au format ISO, vérifiez qu’il possède une touche <code>Enter</code> compatible. Les ensembles de touches AZERTY sont rares par contre, <a href="https://www.azertykeycaps.fr/">azertykeycaps.fr</a> en reprenant quelques-uns.</p>
<p>Il est tout à fait possible de mélanger des touches de plusieurs sets différents mais il faudra alors faire attention au profil des touches. Certaines sont uniformes (toutes les touches ont la même hauteur) mais, certaines possèdent un angle différent en fonction de la rangée pour s’adapter à la courbure des mains. Plus d’informations sur les différentes subtilités ci-dessous :</p>
<p><a href="https://www.keyboard.university/100-courses/keycaps-101-ydy8j">Keycaps | Keyboard University</a></p>
<p>Les touches sont l’élément visuel le plus flagrant. Si vous voulez un clavier thème <a href="https://novelkeys.com/collections/star-wars">Star Wars</a> ou <a href="https://www.theantidotestudio.com/product-page/unicorn-keycap-set">licornes</a>, il existe un set de touches pour vous. Des constructeurs comme <a href="https://mintlodica.com/">mintlodica</a> proposent des touches avec des visuels très girly et ils possèdent même un salon Discord <a href="https://mintlodica.com/pages/cutekeyboard-club-discord-server">Cute Keyboard Club</a> où l’on peut partager des photos du vernis à ongle assorti à son clavier (n’y voyez pas de moquerie, juste de la jalousie). Si vous pensiez les claviers mécaniques comme un univers purement masculin, reconsidérez.</p>
<figure>
<img src="https://mart-e.be/images/2024/mintlodica.webp"/>
<figcaption>172€ pour le set <a href="https://mintlodica.com/products/dsa-magic-girl-keycaps">Magic Girl</a>, quand on aime, on ne compte pas</figcaption>
</figure>
<p>Et je ne vous ai pas parlé des touches artisanales décoratives, qui sont faites mains et s’achètent pour quelques dizaines d’euros pièce.</p>
<h2>Switch tactile ou linéaire ?</h2>
<p>En dessous de la touche se trouve le switch : l’interrupteur qui va déterminer l’activation d’une touche. À l’intérieur, un simple ressort que l’on va enfoncer et qui va faire vibrer une tige métallique.</p>
<p>Un switch peut être linéaire, tactile ou clicky. Sur un switch linéaire, la touche s’enfonce de manière régulière. Sur un tactile, il y a une petite résistance perceptible qui se produit au point d’activation, l’on a l’impression de passer un petit "point dur". Les switchs clicky possèdent également un point d’activation perceptible mais qui, comme son nom l’indique, clique.</p>
<p>Si les gens vous disent que les claviers mécaniques sont bruyants, ils ont probablement été confrontés à des switchs clicky. Le bruit n’est cependant pas une fatalité et il est tout à fait possible d’avoir des claviers totalement silencieux. Le bruit d’un clavier est d’ailleurs un large sujet de discussion, on va qualifier un son de profond, claquant ou… laiteux (si si).</p>
<p>Avec un switch linéaire, on va naturellement enfoncer la touche jusqu’au bout (<em>bottom-out</em>), ce qui produit le son profond recherché. C’est sans doute agréable auditivement mais le camp des tactiles (dont je fais partie) vous dira qu’ils provoquent une plus grande fatigue aux articulations. Avec un tactile, on appuie uniquement ce qu’il faut, et l’on peut ainsi faire des frappes plus précises.</p>
<figure>
<img src="https://mart-e.be/images/2024/switch.jpg"/>
<figcaption>Composition d’un switch</figcaption>
</figure>
<p>Il existe des centaines de switches différents, avec des forces d’activation et des profils sonores différents, allant de quelques cents à plus d’1€ pièce (multiplié par autant de touches que comporte votre clavier). Si les Gateron rouge (linéaire) ou brun (tactile) sont les grands classiques que l’on va souvent retrouver dans les claviers pré-assemblés, il n’y a malheureusement pas d’autres choix que de les tester pour savoir lesquels on préfère.</p>
<p>Si votre clavier n’utilise pas le switch de vos rêves, c’est le PCB qui va déterminer si vous pourrez les changer avec plus ou moins de facilité. Si le clavier est dit <em>hot swappable</em>, l’on va pouvoir remplacer les switchs avec une simple pince, si pas, ils sont soudés au PCB. Il est toujours possible de les changer, mais il faudra passer par un fer à souder… Si vous avez le choix, optez donc pour un hot swappable.</p>
<p>À l’utilisation, j’ai réalisé que les switchs linéaires d’origine ne me plaisaient pas. Avec l’absence de résistance, la touche s’enfonce trop facilement et trop souvent, je déclenchais la touche voisine par erreur. Le K2 étant un clavier hot swappable, j’ai pu donc les changer pour des <a href="https://www.aliexpress.com/item/1005004669940336.html?spm=a2g0o.order_list.order_list_main.5.533b1802AxxIEN">tactiles silencieux</a> de chez Outemu. Avec ces nouveaux switches, il faut appliquer un peu plus de force sur la touche mais l’on peut sentir le moment où l’on enclenche la touche. Cette différence rend la frappe plus prédictible et, je trouve, plus agréable. Même si les switches d’origine n’étaient pas très bruyants, les silencieux sont impressionnants <a href="https://mamot.fr/@mart_e/112008705338072024">par leur absence de bruit</a>.</p>
<figure>
<img src="https://mart-e.be/images/2024/keychron-k2.jpg"/>
</figure>
<h2>Peinture</h2>
<p>Après vous avoir expliqué mon amour pour les machines à écrire dans <a href="https://mart-e.be/2023/10/remise-a-neuf-dune-olivetti-lettera-32">un article précédent</a>, j’avais envie de donner une petite touche de couleur au clavier. Et quoi de mieux que de reprendre la couleur de l’Olivetti Lettera 32 ?</p>
<p>Je n’ai malheureusement pas pu obtenir la couleur exacte. Un magasin de peinture pouvait me produire une bombe reprenant exactement la même teinte mais pas dans des petites quantités. Ne voulant pas dépenser 50€ dans de la peinture, je me suis résolu à un ton approchant. Deux-trois couches, avec un coup de papier de verre entre chacune d'elles, suffisent pour un résultat très propre.</p>
<figure>
<img src="https://mart-e.be/images/2024/keychron-olivetti.jpg"/>
<figcaption></figcaption>
</figure>
<h2>Conclusion</h2>
<p>Ce long article était une simplification, il existe encore de nombreuses autres variantes et on est loin d’avoir fait le tour de la question. Je n’ai, par exemple, pas parlé des astuces de <em>modding</em> (modifications telles qu’ajouter du tape de peinture sur le PCB pour améliorer le profil sonore), des claviers <em>low-profile</em> (claviers fins) ou encore des claviers ergonomiques en deux parties : des niches dans la niche.</p>
<p>Cela fait maintenant deux mois que j’utilise ce clavier au quotidien et je dois avouer que je comprends un peu mieux l’engouement pour les claviers mécaniques. En plus d’une frappe plus agréable, le fait d’utiliser un clavier qu’on a pu personnaliser pour correspondre à nos envies est assez plaisant (probablement une sorte d’<a href="https://fr.wikipedia.org/wiki/Effet_Ikea">effet Ikea</a>). Est-ce qu’il est 10 fois mieux qu’un clavier à membrane qui coûte un dixième de son prix ? Probablement pas mais la vie est trop courte pour ne faire que des achats rationnels…</p>
<p>Dans <a href="https://mart-e.be/2024/05/un-clavier-a-dix-doigts">le prochain article</a>, l’on parlera de vitesse de frappe.</p></content><category term="Uncategorized"></category><category term="clavier"></category><category term="keychron"></category></entry><entry><title>Qui a mis une backdoor dans xz ?</title><link href="https://mart-e.be/2024/04/qui-a-mis-une-backdoor-dans-xz" rel="alternate"></link><published>2024-04-04T13:43:00+02:00</published><updated>2024-04-04T13:43:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-04-04:/2024/04/qui-a-mis-une-backdoor-dans-xz</id><summary type="html"><p>La semaine dernière, <a href="https://fr.wikipedia.org/wiki/Porte_d%C3%A9rob%C3%A9e">une backdoor</a> a été découverte dans le logiciel de compression <a href="https://tukaani.org/">XZ</a>. Si l’utilisateur lambda est assez peu confronté à ce format, il est néanmoins très répandu …</p></summary><content type="html"><p>La semaine dernière, <a href="https://fr.wikipedia.org/wiki/Porte_d%C3%A9rob%C3%A9e">une backdoor</a> a été découverte dans le logiciel de compression <a href="https://tukaani.org/">XZ</a>. Si l’utilisateur lambda est assez peu confronté à ce format, il est néanmoins très répandu dans la distribution de paquets sous Linux. Ce logiciel est donc présent sur de très nombreux postes Linux. S’il est malheureusement fréquent de trouver une faille de sécurité dans un logiciel crucial, ce qui est particulier avec celle-ci, est qu’elle a été volontairement introduite par un des deux mainteneurs de ce logiciel. Petit récapitulatif de la situation :</p>
<p>Le 29 mars, Andres Freund, un développeur PostgreSQL investigue un problème de performance lors d’une connexion ssh. Au fil de ses recherches, il identifie le responsable comme étant xz et découvre une backdoor présente dans la dernière version de celui-ci. La porte dérobée se trouve dans la version publiée sur le projet github (version utilisée par les différentes distributions Linux) mais pas dans le code source. <a href="https://www.openwall.com/lists/oss-security/2024/03/29/4">Il publie</a> ses trouvailles sur une mailing list de sécurité, ce qui déclenchera un très long weekend pour les sysadmins et un beau sujet pour les chercheurs en <a href="https://fr.wikipedia.org/wiki/Renseignement_d%27origine_sources_ouvertes">OSINT</a>.</p>
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/2179142980/in/album-72157603671370361/"><img src="https://mart-e.be/images/2024/enbourbe.jpg"/></a>
<figcaption>Sysadmin se rendant compte qu’il va passer un long weekend…</figcaption>
</figure>
<p>La particularité de la faille est de découvrir, rétrospectivement, qu’elle a été planifiée depuis des années. Initialement, xz est le projet d’un seul développeur bénévole : Lasse Collin. Comme bien trop souvent dans le logiciel libre, il est difficile de se faire payer, y compris pour des projets aussi populaires que xz. Ne vivant pas d’amour et d’eau fraiche, le succès de son logiciel et le travail que cela implique dépasse rapidement Lasse. Et c’est de cette surcharge de travail que l’attaquant va profiter.</p>
<p><a href="https://research.swtch.com/xz-timeline">Timeline of the xz open source attack | research!rsc</a></p>
<p>Fin 2021, un développeur nommé Jia Tan, propose plusieurs patch inoffensifs sur les listes de diffusions de XZ Utils. Début 2022, deux personnes (probablement d’autres identités de Jia Tan), font pression sur Lasse Collin dans <a href="https://www.mail-archive.com/xz-devel@tukaani.org/msg00557.html">des messages</a> envoyés sur les mailing list critiquant son manque de réactivité pour intégrer des changements. Lasse se défend en confiant qu’il a des problèmes de santé mentale et un manque de temps, étant seul à maintenir un logiciel bénévole. Va s’ensuivre <a href="https://www.mail-archive.com/xz-devel@tukaani.org/msg00566.html">une série de messages</a> pour le pousser à accepter un autre mainteneur en la personne de Jia Tan. Pression efficace puisque Jia Tan va progressivement prendre de l’importance et des responsabilités dans le projet en 2022 et 2023. En plus de changements dans xz, il va contribuer <a href="https://github.com/google/oss-fuzz/pull/10667">à d’autres projets</a> pour rendre son attaque possible. En février 2024, les choses s’emballent et Jia Tan intègre la backdoor dans le projet. Il va aussi pousser à l’inclusion de sa version vérolée dans <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1067708">Debian</a> et <a href="https://bugs.launchpad.net/ubuntu/+source/xz-utils/+bug/2059417">Ubuntu</a>. La backdoor est <a href="https://research.swtch.com/xz-script">très sophistiquée</a> et va permettre des connexions SSH sur les serveurs Debian et Ubuntu. Un problème de performance va permettre à Andres Freund de détecter l’attaque avant qu’elle n'arrive dans les versions stables des distributions, mais <a href="https://doublepulsar.com/inside-the-failed-attempt-to-backdoor-ssh-globally-that-got-caught-by-chance-bbfe628fafdd">il s’en est fallu de peu</a>. <a href="https://www.schneier.com/blog/archives/2024/04/xz-utils-backdoor.html">Bruce Schneier est convaincu</a> que des attaques similaires se sont déjà produites avec succès dans le passé.</p>
<p>L’attaque semble avoir échoué, mais il faut maintenant repasser sur tout l’historique de Jia Tan pour s’assurer qu’il s’agissait de sa seule porte dérobée. Cela questionne, une fois de plus, les problèmes de distribution des logiciels et de l’impossibilité de maitriser toute la chaine (ou l’enthousiasme avec lequel l’on base son infrastructure sur des projets existants). Cette attaque ne questionne pas l’utilisation de l’open source (il aurait été plus difficile de la détecter au sein d’un logiciel propriétaire) mais bien son mode de financement. On se rappelle de <a href="https://fr.wikipedia.org/wiki/Heartbleed">Heartbleed</a> en 2012, la faille dans OpenSSL qui avait montré comment des briques essentielles d’internet étaient sous-financées. 12 ans plus tard, l’attaque de xz nous rappelle que ces problèmes sont toujours bien présents.</p>
<figure>
<a href="https://xkcd.com/2347/"><img src="https://mart-e.be/images/2024/xkcd-dependency.png"/></a>
</figure>
<p>Mais qui est Jia Tan ? La question reste ouverte au moment de l’écriture de cet article. Si le nom et les fuseaux horaires semblent indiquer quelqu’un habitant en Chine, <a href="https://rheaeve.substack.com/p/xz-backdoor-times-damned-times-and">une analyse approfondie des commits</a> semblent indiquer que la personne se trouverait plutôt dans le fuseau Europe de l’Est/Israël. Dave Aitel, ancien de la NSA, <a href="https://www.wired.com/story/jia-tan-xz-backdoor/">y voit</a> une sofistication digne d’une agence d’État russe. Savoir si derrière le pseudonyme Jia Tan se trouve une seule personne ou une organisation plus importante n’est que pure spéculation pour le moment (même si, au vu des moyens mis en œuvre, je penche pour la deuxième possibilité). OpenSSH et Debian sont utilisés un peu partout dans le monde, si la backdoor n’avait pas été détectée à temps, de très nombreux systèmes auraient été des cibles potentielles.</p></content><category term="Uncategorized"></category><category term="xz"></category><category term="securite"></category><category term="linux"></category></entry><entry><title>Fabrication d'un photomaton</title><link href="https://mart-e.be/2024/02/fabrication-d-un-photomaton" rel="alternate"></link><published>2024-02-25T17:58:00+01:00</published><updated>2024-02-25T17:58:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-02-25:/2024/02/fabrication-d-un-photomaton</id><summary type="html"><p><em>Cet article est plus un partage de mon expérience qu'un guide pas-à-pas. Certains choix de matériels et de logiciels sont liés à des contraintes de temps, de budget et de …</em></p></summary><content type="html"><p><em>Cet article est plus un partage de mon expérience qu'un guide pas-à-pas. Certains choix de matériels et de logiciels sont liés à des contraintes de temps, de budget et de l'équipement que je possédais déjà. Si vous désirez produire un projet similaire, adaptez-le plutôt que d'essayer de le reproduire à l'identique.</em></p>
<p>L'an passé, j'ai eu le plaisir d'organiser mon mariage. Lors de la prise de devis, s'est posée la question du photomaton, élément très sympa dans les soirées, permettant aux gens de repartir avec une photo souvenir ou d'en coller dans le livre d'or. Les devis que je voyais dépassaient facilement les 400€.</p>
<blockquote>
<p>Comment ? Mais je peux sûrement faire pareil pour moins cher avec un Raspberry Pi et deux-trois bricoles !</p>
</blockquote>
<p>Hahahaha… non.</p>
<p>Mais on peut s'en approcher. Et ça n'enlève rien au plaisir d'essayer.</p>
<figure>
<a href="https://www.flickr.com/photos/nationaalarchief/3280638919/"><img src="https://mart-e.be/images/2024/photographer.jpg"/></a>
</figure>
<p>Lorsque vous louez un photomaton, il se compose en général de plusieurs éléments qui justifient le prix:</p>
<ul>
<li>un appareil photo</li>
<li>une imprimante</li>
<li>une réserve de papier photo</li>
<li>une jolie interface</li>
<li>un éclairage intégré</li>
<li>la belle boite contenant le tout</li>
</ul>
<p>Si vous possédez un appareil photo supporté par le <a href="http://www.gphoto.org/proj/libgphoto2/support.php">projet gPhoto</a>, vous pouvez l'utiliser dans ce projet. Ce n'était pas mon cas, je l'ai remplacé par un <a href="https://www.raspberrypi.com/products/camera-module-3/">module Pi Camera 3</a>. Ce n'est bien sûr pas la même qualité par rapport à un vrai appareil photo mais la dernière version du module caméra possède 12 MP et un autofocus, cela suffit largement pour imprimer mes petites photos.</p>
<p>Les imprimantes que l'on retrouve dans les photomatons sont des <a href="https://fr.wikipedia.org/wiki/Imprimante_%C3%A0_sublimation">imprimantes à sublimation thermique</a> et coûtent facilement 2000€ (par exemple la <a href="https://www.amazon.fr/DNP-Digital-Imprimante-thermique-DS820/dp/B0783PWSKF/">DNP 830</a>). Elles impriment en quelques secondes, découpent la photo en deux et peuvent accueillir une grosse réserve de papier. Comme alternative low-cost, Canon a sorti la gamme Canon Selphy : une imprimante à sublimation pour moins de 150€. Elles sont beaucoup plus lentes (+/- 45 secondes par feuille), ont une réserve de 10 feuilles à la fois et la cartouche d'encre doit être changée toutes les 33 photos, mais elles donnent des impressions d'une bonne qualité.</p>
<p>Grâce au marketing de Canon visant les jeunes instagrameurs avec une capacité d'attention de 12 secondes, on en trouve facilement en seconde-main moins cher. Comme d'habitude, le papier et cartouches coûtent bien trop cher (25 cents la photo). Notez que des cartouches produit blanc compatibles <a href="https://www.123encre.be/Canon-KP-108IP-IN-3-cartouches-d-encre-papier-format-carte-postale-marque-123encre-3115B001AAC-i90068-t374178.html">existent</a> (non testé). Pour partager mon expérience, on a imprimé une centaine de photo sur la journée. Le fait que l'imprimante soit lente ou qu'il faille remettre du papier régulièrement était une crainte, mais on ne me l'a jamais reproché. Étonnamment, les gens sont capables de patienter lorsqu'ils ont un verre à la main...</p>
<figure>
<img src="https://mart-e.be/images/2024/photomaton-soufflet.jpg"/>
</figure>
<p>Pour la belle boîte, le prix et le résultat dépendra de vos capacités de bricolage. J'ai récupéré un magnifique vieux soufflet d'appareil photo et j'ai construit un trépied qui, une fois peint, donne pas trop mal. Mon inspiration pour cette construction était le superbe projet <a href="https://florianmuller.com/raspberry-pi-photobooth-in-a-classic-vintage-plate-camera">Raspberry Pi Photobooth in a classic vintage plate camera</a>. Je suis loin d'avoir un aussi beau résultat que lui mais je suis déjà content de ne pas m'être coupé un doigt...</p>
<p>Pour contrôler le tout, j'ai utilisé un Raspberry Pi 4, un SSD (plus pour une question de fiabilité que de vitesse ou de capacité de stockage) et un écran tactile. Attention qu'alimenter la caméra, l'écran et le SSD demandent plus de puissance qu'est capable de délivrer le pi. J'ai ajouté une alimentation externe pour l'écran plutôt que d'utiliser un des ports USB du Raspberry Pi.</p>
<p>Matériel électronique nécessaire:</p>
<ul>
<li>Raspberry Pi 4, 4GB (70€)</li>
<li>Boitier métallique Flirc (30€)</li>
<li><a href="https://www.amazon.fr/dp/B0BBWJH1P8">SSD 500GB NVMe</a> (30€)</li>
<li><a href="https://www.aliexpress.com/item/1005004741751592.html">Boitier USB SSD</a> (16€)</li>
<li><a href="https://www.aliexpress.com/item/1005004163930837.html">Écran tactile 7"</a> (40€)</li>
<li>Imprimante Canon Selphy CP1300 (80€ en occasion)</li>
<li>Câbles divers</li>
<li><a href="https://www.amazon.fr/gp/product/B0BBWGSXQD/">Adaptateurs USB-C angle droit</a> (6€)</li>
<li><a href="https://www.123encre.be/Canon-RP-108-cartouche-d-encre-papier-format-carte-postale-d-origine-8568B001-i38497-t143830.html">Papier d'impression + encre</a> (27€ les 108 feuilles)</li>
</ul>
<p>Pour le support :</p>
<ul>
<li>Du bois (~30€)</li>
<li>Un soufflet d'appareil photo (15€)</li>
</ul>
<p>Divers :</p>
<ul>
<li>Un ami avec une imprimante 3D pour confectionner un support pour maintenir la caméra (prix: des bières)</li>
<li>Une lampe sur pied pour éclairer à la nuit tombée</li>
<li>Optionnel mais très utile pour débugger : un clavier</li>
</ul>
<p>Total : 344€. Ouf ! Je peux dire à mon épouse que les dizaines d'heures sur le projet nous ont fait économiser de l'argent !</p>
<figure>
<img src="https://mart-e.be/images/2024/photomaton-support.jpg"/>
<figcaption>Mes premiers essais-erreurs avec une imprimante 3D</figcaption>
</figure>
<p>Pour que ma caméra tienne dans le soufflet, j'ai utilisé une imprimante 3D pour confectionner un petit cache. Ce fut l'occasion de découvrir <a href="https://www.tinkercad.com/">Tinkercad</a>. J'avais d'ailleurs sous-estimé le nombre d'essais nécessaires avant d'obtenir deux pièces qui s'emboitent correctement.</p>
<p>Pour l'éclairage, j'avais d'abord essayé d'utiliser un anneau de lumière comme montré dans <a href="https://www.youtube.com/watch?v=T7feGb48LxI">cette vidéo</a> mais la lumière n'est pas assez puissante pour illuminer un groupe. J'ai finalement utilisé une lampe sur pied simple mais ce n'avait pas la netteté d'un éclairage professionnel, à ne pas négliger si vous voulez faire des photos de soirée.</p>
<p>Comme logiciel, j'ai utilisé <a href="https://photoboothproject.github.io/">Photobooth Project</a>. Même s'il est parfaitement utilisable, ce logiciel est encore en développement actif donc je ne m'attarderai pas trop sur son installation, une nouvelle version est d'ailleurs sortie entre l'installation et la publication (tardive) de cet article. Les quelques soucis que j'ai eu ont été faciles à résoudre et les développeurs sont très réactifs sur Github.</p>
<p><a href="https://photoboothproject.github.io/Installation-on-Debian">Automated installation on Raspberry Pi OS | Photobooth Project</a></p>
<p>L'installation va permettre d'avoir un navigateur en plein écran s'ouvrant sur la page du photomaton au démarrage. Très pratique pour ce logiciel qu'on a tendance à redémarrer régulièrement. Il existe de nombreux paramètres de configuration permettant de changer les dispositions, d'autoriser l'impression, téléchargement, envoi par mail, etc.</p>
<p>Actuellement, le support de la picamera n'est pas parfait sur Photobooth Project mais il s'intègre très bien avec <a href="https://github.com/mgrl/photobooth-app/">Photobooth-App</a>, un autre projet moins avancé point de vue interface mais avec un meilleur support de la caméra Raspeberry Pi.</p>
<p><a href="https://photobooth-app.org/reference/photoboothprojectintegration/">Integrate Photobooth-Project</a></p>
<p>Une fois ces deux projets installés et paramétrés, il suffit de configurer l'imprimante.</p>
<p>Et c'est ici que ce guide s'arrête.</p>
<figure>
<img src="https://mart-e.be/images/2024/photomaton-imprimante-crop.webp"/></a>
<figcaption>Débogage le jour même</figcaption>
</figure>
<p>Si vous esperiez avoir un guide de configuration de la Canon Selphy avec CUPS, je ne l'ai pas. Il aura fallu trois informaticiens testant toutes les configurations CUPS possibles pour réussir à faire fonctionner cet objet maudit le matin même alors que tout fonctionnait bien la veille… Je ne peux pas vous donner la combinaison parfaite mais ne sous-estimez pas les erreurs. Ou alors, faites une version tout numérique (Photobooth-Project supporte d'ailleurs l'envoi des photos par email).</p>
<p>En dehors des difficultés de configuration d'imprimante, tout a très bien fonctionné après.</p>
<p>Avec le recul, est-ce que je l'aurais quand même fait ? Oui bien sûr. Je trouve qu'un photomaton fait maison, avec toutes ses imperfections, a plus de charme qu'une solution toute faite. Heureusement que mon objectif n'était pas de gagner du temps ou de l'agent...</p></content><category term="Uncategorized"></category><category term="raspberrypi"></category><category term="DIY"></category><category term="photo"></category></entry><entry><title>Utiliser l'API d'Odoo en python</title><link href="https://mart-e.be/2024/01/utiliser-api-odoo-python" rel="alternate"></link><published>2024-01-28T14:11:00+01:00</published><updated>2024-01-28T14:11:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-01-28:/2024/01/utiliser-api-odoo-python</id><summary type="html"><p>Si vous développez avec des systèmes <a href="https://www.odoo.com/">Odoo</a>, il y a de bonne chance que vous ayez besoin d'interagir depuis un autre programme ou de scripter certaines actions pour des tests …</p></summary><content type="html"><p>Si vous développez avec des systèmes <a href="https://www.odoo.com/">Odoo</a>, il y a de bonne chance que vous ayez besoin d'interagir depuis un autre programme ou de scripter certaines actions pour des tests. Petit résumé qui me sert également d'aide mémoire.</p>
<figure>
<a href="https://www.flickr.com/photos/nationaalarchief/3236811556/"><img src="https://mart-e.be/images/2024/python.jpg"/></a>
</figure>
<h2>Méthode et contrôleur</h2>
<p>Dans Odoo, l'on peut interagir avec deux composants : les méthodes publiques des modèles et les contrôleurs.</p>
<p>Toute méthode qui se trouve à l'intérieur d'une classe héritant de <code>BaseModel</code> et dont le nom ne commence <em>pas</em> par un underscore est publique et appelable via le protocole <a href="https://fr.wikipedia.org/wiki/Appel_de_proc%C3%A9dure_%C3%A0_distance">RPC</a>.</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">Tartiflette</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
<span class="n">_name</span> <span class="o">=</span> <span class="s2">&quot;tartifelette.ingredient&quot;</span>
<span class="c1"># méthode publique</span>
<span class="k">def</span> <span class="nf">hello</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="o">...</span>
<span class="c1"># méthode privée</span>
<span class="k">def</span> <span class="nf">_hello</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="o">...</span>
</code></pre></div>
<p>Pour appeler une méthode en RPC, il faut un compte utilisateur au minimum au niveau portal et l'on se connecte avec son mot de passe ou une <a href="https://www.odoo.com/documentation/17.0/developer/reference/external_api.html#api-keys">clef d'API</a> (je conseille la deuxième).</p>
<p>Un contrôleur est une méthode dans une classe héritant de <code>http.Controller</code> et décorée avec <code>@http.route</code>. Sa déclaration définira qui et comment interagir avec.</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">TartifletteController</span><span class="p">(</span><span class="n">http</span><span class="o">.</span><span class="n">Controller</span><span class="p">):</span>
<span class="nd">@http</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/tartiflette/status&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;json&quot;</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="s2">&quot;public&quot;</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tartiflette_id</span><span class="p">):</span>
<span class="o">...</span>
<span class="nd">@http</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/tartiflette/&lt;int:tartiflette_id&gt;/join&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;http&quot;</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="s2">&quot;user&quot;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">]):</span>
<span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tartiflette_id</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="o">...</span>
</code></pre></div>
<p>Un contrôleur <code>public</code> peut être appelé sans être authentifié, mais il faut une session utilisatrice (portal compris) active pour appeler une méthode <code>user</code>.</p>
<h2>RPC</h2>
<p>Il existe deux variantes de l'API RPC : en XML ou JSON. La <a href="https://www.odoo.com/documentation/17.0/developer/reference/external_api.html">documentation d'Odoo</a> explique comment faire du XMLRPC mais on est en 2024, la mode est au JSON maintenant (et ça resservira pour les contrôleurs). On déclare d'abord une méthode générique:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">urllib</span> <span class="kn">import</span> <span class="n">request</span>
<span class="k">def</span> <span class="nf">json_rpc</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;jsonrpc&quot;</span><span class="p">:</span> <span class="s2">&quot;2.0&quot;</span><span class="p">,</span>
<span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="s2">&quot;call&quot;</span><span class="p">,</span>
<span class="s2">&quot;params&quot;</span><span class="p">:</span> <span class="n">params</span><span class="p">,</span>
<span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">42</span><span class="p">,</span> <span class="c1"># id pour lier une requete et une réponse si l&#39;on travaille en asynchrone</span>
<span class="p">}</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">Request</span><span class="p">(</span><span class="n">url</span><span class="o">=</span><span class="n">url</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(),</span> <span class="n">headers</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;Content-Type&quot;</span><span class="p">:</span><span class="s2">&quot;application/json&quot;</span><span class="p">,</span>
<span class="p">})</span>
<span class="n">reply</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">urlopen</span><span class="p">(</span><span class="n">req</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;UTF-8&#39;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">reply</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;error&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="n">reply</span><span class="p">[</span><span class="s2">&quot;error&quot;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">reply</span><span class="p">[</span><span class="s2">&quot;result&quot;</span><span class="p">]</span>
</code></pre></div>
<p>Méthode que l'on va utiliser avec les paramètres voulus :</p>
<div class="highlight"><pre><span></span><code><span class="n">rpc_url</span><span class="p">,</span> <span class="n">dbname</span> <span class="o">=</span> <span class="s2">&quot;https://monsiteodoo/jsonrpc&quot;</span><span class="p">,</span> <span class="s2">&quot;odoodb&quot;</span>
<span class="c1"># utilisez python-dotenv plutôt que d&#39;hardcoder un mot de passe!</span>
<span class="n">login</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="o">...</span><span class="p">,</span> <span class="o">...</span>
<span class="n">uid</span> <span class="o">=</span> <span class="n">json_rpc</span><span class="p">(</span><span class="n">rpc_url</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;service&quot;</span><span class="p">:</span><span class="s2">&quot;common&quot;</span><span class="p">,</span> <span class="s2">&quot;method&quot;</span><span class="p">:</span><span class="s2">&quot;login&quot;</span><span class="p">,</span> <span class="s2">&quot;args&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">dbname</span><span class="p">,</span> <span class="n">login</span><span class="p">,</span> <span class="n">password</span><span class="p">]})</span>
<span class="n">rpc</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">model</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">:</span> <span class="n">json_rpc</span><span class="p">(</span><span class="n">rpc_url</span><span class="p">,</span>
<span class="p">{</span><span class="s2">&quot;service&quot;</span><span class="p">:</span> <span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="s2">&quot;execute_kw&quot;</span><span class="p">,</span> <span class="s2">&quot;args&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">dbname</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">method</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">a</span><span class="p">,)</span> <span class="o">+</span> <span class="p">(</span><span class="n">kw</span><span class="p">,)})</span>
</code></pre></div>
<p>et on peut maintenant appeler facilement n'importe quelle méthode publique:</p>
<div class="highlight"><pre><span></span><code><span class="n">rpc</span><span class="p">(</span><span class="s2">&quot;tartiflette.ingredient&quot;</span><span class="p">,</span> <span class="s2">&quot;hello&quot;</span><span class="p">)</span>
<span class="n">rpc</span><span class="p">(</span><span class="s2">&quot;tartiflette.ingredient&quot;</span><span class="p">,</span> <span class="s2">&quot;create&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;patate&quot;</span><span class="p">,</span> <span class="s2">&quot;quantite&quot;</span><span class="p">:</span> <span class="mf">2.0</span><span class="p">})</span>
<span class="n">rpc</span><span class="p">(</span><span class="s2">&quot;tartiflette.session&quot;</span><span class="p">,</span> <span class="s2">&quot;search&quot;</span><span class="p">,</span>
<span class="p">[[</span><span class="s2">&quot;start_date&quot;</span><span class="p">,</span> <span class="s2">&quot;&gt;=&quot;</span><span class="p">,</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()]],</span>
<span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;active_test&quot;</span><span class="p">:</span><span class="kc">True</span><span class="p">})</span>
<span class="n">rpc</span><span class="p">(</span><span class="s2">&quot;tartiflette.party&quot;</span><span class="p">,</span> <span class="s2">&quot;message_post&quot;</span><span class="p">,</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">body</span><span class="o">=</span><span class="s2">&quot;J&#39;arriverai en retard!&quot;</span><span class="p">)</span>
</code></pre></div>
<p>Notez aussi l'existence de <a href="https://gitlab.com/katyukha/odoo-rpc-client">odoo-rpc-client</a> et <a href="https://github.com/OCA/odoorpc">OdooRPC</a>, deux librairies python assez sympa qui deviendront vite utiles pour les requêtes plus complexes.</p>
<p>La <a href="https://www.odoo.com/documentation/17.0/developer/reference/external_api.html">documentation External API</a> donne des exemples d'opérations fréquentes.</p>
<h2>Contrôleur</h2>
<p>Avec les modules <em>frontend</em>, une partie de la logique est déportée dans des contrôleurs python. On aimerait parfois automatiser l'appel à ces contrôleurs pour reproduire un flux utilisateur. Une route en HTTP s'appelle de façon assez classique, je conseille au passage la <a href="https://docs.python-requests.org/en/latest/index.html">librairie <code>requests</code></a> qui, sans être indispensable, facilite grandement la manipulation des paramètres :</p>
<div class="highlight"><pre><span></span><code><span class="n">requess</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;.../terms&quot;</span><span class="p">)</span>
<span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;.../event/1/my_ticket&quot;</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ticket_hash&quot;</span><span class="p">:</span><span class="o">...</span><span class="p">})</span>
<span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;.../mail/unfollow&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;model&quot;</span><span class="p">:</span><span class="o">...</span><span class="p">})</span>
<span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;.../my/invoices&quot;</span><span class="p">,</span> <span class="n">cookies</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;session_id&quot;</span><span class="p">:</span><span class="o">...</span><span class="p">})</span>
</code></pre></div>
<p>Accéder à un contrôleur de type json nécessite une requête JSONRPC. On peut juste reprendre notre helper <code>json_rpc</code> défini précédement :</p>
<div class="highlight"><pre><span></span><code><span class="n">json_rpc</span><span class="p">(</span><span class="s2">&quot;.../tartiflette/status&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;tartiflette_id&quot;</span><span class="p">:</span><span class="mi">1</span><span class="p">})</span>
</code></pre></div>
<p>Pour utiliser un contrôleur avec <code>auth="user"</code>, il faut avoir une session active, c'est à dire passer un cookie <code>session_id</code> dans la requête. Si le but est de faire tourner un script manuellement de façon ponctuelle, on peut simplement réutiliser le cookie de session dans son navigateur. Pour quelque chose de plus régulier, on voudra probablement scripter le tout en simulant une connexion du navigateur. Ne faites pas cela en production, on rentre dans un territoire plus instable et non-documenté ! Notez aussi que l'on ne peut plus utiliser de clef d'API mais le mot de passe utilisateur (vu que l'on n'utilise pas l'API).</p>
<p>Dans le cas simple, on peut simuler une connexion avec la route <code>/web/session/authenticate</code> pour récupérer un cookie :</p>
<div class="highlight"><pre><span></span><code><span class="n">req</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;.../web/session/authenticate&quot;</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;jsonrpc&quot;</span><span class="p">:</span> <span class="s2">&quot;2.0&quot;</span><span class="p">,</span>
<span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="s2">&quot;call&quot;</span><span class="p">,</span>
<span class="s2">&quot;params&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;db&quot;</span><span class="p">:</span> <span class="n">dbname</span><span class="p">,</span> <span class="s2">&quot;login&quot;</span><span class="p">:</span> <span class="n">login</span><span class="p">,</span> <span class="s2">&quot;password&quot;</span><span class="p">:</span> <span class="n">password</span><span class="p">},</span>
<span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">42</span>
<span class="p">})</span>
<span class="k">assert</span> <span class="s2">&quot;error&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">req</span><span class="o">.</span><span class="n">json</span><span class="p">()</span> <span class="c1"># mauvais mot de passe</span>
<span class="k">assert</span> <span class="n">req</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s2">&quot;result&quot;</span><span class="p">][</span><span class="s2">&quot;uid&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="c1"># 2FA activé</span>
<span class="n">session_id</span> <span class="o">=</span> <span class="n">req</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;session_id&quot;</span><span class="p">)</span>
</code></pre></div>
<p>Seulement, cette méthode ne fonctionne pas lorsque l'on utilise un compte avec une authentification à deux facteurs (que tout le monde devrait activer !).</p>
<p>Pour remédier à cela, il faudra simuler un flux complet :</p>
<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">bs4</span> <span class="kn">import</span> <span class="n">BeautifulSoup</span>
<span class="n">domain</span> <span class="o">=</span> <span class="s2">&quot;http://localhost:8069&quot;</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">session</span><span class="p">()</span>
<span class="n">s</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">&quot;User-Agent&quot;</span><span class="p">:</span> <span class="s2">&quot;Script mart-e.be&quot;</span><span class="p">})</span> <span class="c1"># on est poli, on s&#39;identifie&#39; au serveur</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">domain</span> <span class="o">+</span> <span class="s2">&quot;/web/login&quot;</span><span class="p">)</span>
<span class="n">soup</span> <span class="o">=</span> <span class="n">BeautifulSoup</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="s1">&#39;lxml&#39;</span><span class="p">)</span>
<span class="n">csrf_token</span> <span class="o">=</span> <span class="n">soup</span><span class="o">.</span><span class="n">select_one</span><span class="p">(</span><span class="s2">&quot;input[name=&#39;csrf_token&#39;]&quot;</span><span class="p">)[</span><span class="s2">&quot;value&quot;</span><span class="p">]</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">domain</span> <span class="o">+</span> <span class="s2">&quot;/web/login&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;login&quot;</span><span class="p">:</span> <span class="s2">&quot;demo&quot;</span><span class="p">,</span> <span class="s2">&quot;password&quot;</span><span class="p">:</span> <span class="s2">&quot;demo&quot;</span><span class="p">,</span> <span class="s2">&quot;csrf_token&quot;</span><span class="p">:</span> <span class="n">csrf_token</span><span class="p">})</span>
<span class="k">assert</span> <span class="s2">&quot;totp_token&quot;</span> <span class="ow">in</span> <span class="n">res</span><span class="o">.</span><span class="n">text</span> <span class="c1"># Seconde etape</span>
<span class="n">soup</span> <span class="o">=</span> <span class="n">BeautifulSoup</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="s1">&#39;lxml&#39;</span><span class="p">)</span>
<span class="n">csrf_token</span> <span class="o">=</span> <span class="n">soup</span><span class="o">.</span><span class="n">select_one</span><span class="p">(</span><span class="s2">&quot;input[name=&#39;csrf_token&#39;]&quot;</span><span class="p">)[</span><span class="s2">&quot;value&quot;</span><span class="p">]</span>
<span class="n">totp_token</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&quot;Code TOTP: &quot;</span><span class="p">)</span>
<span class="n">session</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">domain</span> <span class="o">+</span> <span class="s2">&quot;/web/login/totp&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;totp_token&quot;</span><span class="p">:</span> <span class="n">totp_token</span><span class="p">,</span> <span class="s2">&quot;csrf_token&quot;</span><span class="p">:</span> <span class="n">csrf_token</span><span class="p">})</span>
<span class="n">session_id</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">cookies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;session_id&quot;</span><span class="p">)</span>
</code></pre></div>
<p>C'est un peu nul, c'est pas résilient aux changements dans la page de login mais ça dépanne.</p>
<p>Et les contrôleurs JSON authentifiés ? Encore une fois, utiliser la librairie <code>requests</code> facilite grandement la vie : </p>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">user_json_rpc</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">session_id</span><span class="p">):</span>
<span class="n">reply</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span>
<span class="n">json</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;jsonrpc&quot;</span><span class="p">:</span> <span class="s2">&quot;2.0&quot;</span><span class="p">,</span>
<span class="s2">&quot;method&quot;</span><span class="p">:</span> <span class="s2">&quot;call&quot;</span><span class="p">,</span>
<span class="s2">&quot;params&quot;</span><span class="p">:</span> <span class="n">params</span><span class="p">,</span>
<span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">42</span>
<span class="p">},</span>
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;Content-Type&quot;</span><span class="p">:</span><span class="s2">&quot;application/json&quot;</span><span class="p">},</span>
<span class="n">cookies</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;session_id&quot;</span><span class="p">:</span> <span class="n">session_id</span><span class="p">})</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="k">if</span> <span class="n">reply</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;error&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="n">reply</span><span class="p">[</span><span class="s2">&quot;error&quot;</span><span class="p">])</span>
<span class="k">return</span> <span class="n">reply</span><span class="p">[</span><span class="s2">&quot;result&quot;</span><span class="p">]</span>
<span class="n">controller</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">route</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">:</span> <span class="n">user_json_rpc</span><span class="p">(</span><span class="n">domain</span> <span class="o">+</span> <span class="n">route</span><span class="p">,</span> <span class="n">kw</span><span class="p">,</span> <span class="n">session_id</span><span class="p">)</span>
<span class="n">controller</span><span class="p">(</span><span class="s2">&quot;/web/session/get_session_info&quot;</span><span class="p">)</span>
<span class="n">controller</span><span class="p">(</span><span class="s2">&quot;/hr/get_org_chart&quot;</span><span class="p">,</span> <span class="n">employee_id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</code></pre></div></content><category term="Uncategorized"></category><category term="python"></category><category term="odoo"></category><category term="rpc"></category><category term="api"></category></entry><entry><title>37C3, Unlocked</title><link href="https://mart-e.be/2024/01/37c3-unlocked" rel="alternate"></link><published>2024-01-02T14:53:00+01:00</published><updated>2024-01-02T14:53:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2024-01-02:/2024/01/37c3-unlocked</id><summary type="html"><p>Je reviens de la conférence 37C3 en Allemagne, le 37ème Chaos Communication Congress organisé par le <a href="https://www.ccc.de/en">Chaos Computer Club</a>, un des plus gros club de hackers en Europe. Après une …</p></summary><content type="html"><p>Je reviens de la conférence 37C3 en Allemagne, le 37ème Chaos Communication Congress organisé par le <a href="https://www.ccc.de/en">Chaos Computer Club</a>, un des plus gros club de hackers en Europe. Après une pause de trois ans pour cause de pandémie, le congrès revient en présentiel à Hambourg. Le 37C3 était mon troisième congrès (après 33C3 <em>Works for me</em> et 34C3 <em>tuwat</em>) et reste un événement toujours aussi impressionnant.</p>
<figure>
<a href="https://events.ccc.de/congress/2023/infos/startpage.html"><img src="https://mart-e.be/images/2024/ccc-cover-image.png"/></a>
</figure>
<p>15.000 personnes d'un peu partout en Allemagne, Europe ou au-delà participent au congrès. Un grand rassemblement où il est tout à fait normal de se balader avec des leds sur la tête, des oreilles de chat, des costumes improbables voire les trois en même temps. Dans tous les coins du large centre des congrès, des tables sont disposées pour permettre aux plus de 300 <a href="https://events.ccc.de/congress/2023/hub/en/assemblies">Assemblées</a> de se retrouver. Certaines sont juste un groupe local heureux d'avoir une table pour poser leurs PCs mais il y a aussi de nombreuses plus improbables qui se retrouvent pour, par exemple, apprendre le crochetage de serrures, faire de la musique avec des Arduinos, de l'open hardware chez <a href="https://mntre.com/reform.html">MNT Reform</a>, un sous-marin fonctionnel, un coin cuisine, des échanges de graines, de nombreux ateliers de soudure aux cotés d'associations humanitaires comme <a href="https://sea-watch.org/en/">Sea-Watch</a> ou <a href="https://www.amnesty.org/">Amnesty International</a>. Tout ce joyeux bordel rassemblé dans des grands halls sombres aux odeurs variées (merci au coin <a href="https://events.ccc.de/congress/2023/hub/en/assembly/fhb/">Food Hacking</a> pour l'odeur de clou de girofle pendant plusieurs heures).</p>
<figure>
<img src="https://mart-e.be/images/2024/ccc.jpg"/>
</figure>
<p>Pour l'anecdote, juste avant le départ, le connecteur USB-C de mon téléphone m'a lâché. J'ai commandé le module de remplacement (vive la réparabilité de Fairphone) mais j'ai été forcé de partir au congrès sans smartphone fonctionnel. Dans le doute, j'ai ajouté une petite annonce sur le wiki de l'événement dans la section <a href="https://events.ccc.de/congress/2023/hub/en/wiki/Dating/">Hacker seeks Hardware</a> et le troisième jour… bingo. Quelqu'un avec des pièces de rechange d'un Fairphone m'a gentiment dépanné, sans rien demander en retour.</p>
<figure>
<img src="https://mart-e.be/images/2024/fairphone-ccc.png"/>
<figcaption>Le congrès a aussi son réseau local de téléphone <a href="https://fr.wikipedia.org/wiki/DECT">DECT</a> pour communiquer</figcaption>
</figure>
<p>Si vous trouvez que cet article manque de photos, c'est parce que le respect de la vie privée est une valeur importante du congrès. De nombreuses affiches rappellent de ne pas faire de photo des participants sans leur accord explicite, pas question de photographier les foules dans les couloirs… On ne sera pas non plus surpris de voir que toutes les transactions sur place se font en cash.</p>
<p>Je pense que ce qui m'a frappé pendant l'évènement est à quel point tout roulait. En arrivant le premier jour, des centaines de personnes récupéraient leurs bracelets d'entrée en même temps sans que ça ne pose de soucis. Le réseau internet, bien que malmené par <a href="https://merveilles.town/@jbauer/111665208288238962">les pixel wars</a> ou les <a href="https://github.com/albertz/RandomFtpGrabber">nombreux ftp ouverts</a>, tenait la charge. Les t-shirts et polo souvenirs se vendaient à un rythme de <a href="https://events.ccc.de/en/2023/12/24/37c3-what-the-foc/">4 à la minute pendant 70 heures</a>. De nombreuses traductions étaient faites en temps réel et toutes les sessions étaient accessibles en streaming ou replay. Le fait que tout cela est organisé entièrement par des bénévoles est d'autant plus frappant quand je compare avec les événements organisés à mon boulot (plus petits, à but lucratif et moins bien huilés).</p>
<p>Et les présentations dans tout ça ? Réparties dans trois salles de 10h du matin à minuit, il y en avait pour tous. Si la sécurité informatique restait un thème récurrent, les talks étaient aussi souvent politiques, scientifiques ou artistiques. Une liste non-exhaustive des présentations qui ont retenu mon attention (en vous épargnant toutes celles où j'étais largué après 5 minutes) :</p>
<p><a href="https://media.ccc.de/v/37c3-12004-please_identify_yourself">Please Identify Yourself!</a> sur les systèmes Indiens et Européens de carte d'identité électronique (et tous les abus qui vont avec).</p>
<p><a href="https://media.ccc.de/v/37c3-12326-you_ve_just_been_fucked_by_psyops">YOU’VE JUST BEEN FUCKED BY PSYOPS</a> parce qu'il faut quand même aller voir des présentations WTF de temps en temps.</p>
<p><a href="https://media.ccc.de/v/37c3-11761-all_cops_are_broadcasting">All cops are broadcasting</a> au sujet d'une backdoor dans le système de crypto propriétaire TETRA, vendu aux polices et services d'urgences de nombreux pays.</p>
<figure>
<img src="https://mart-e.be/images/2024/ccc-bird.png"/>
</figure>
<p><a href="https://media.ccc.de/v/37c3-12068-infrastructure_of_a_migratory_bird">Infrastructure of a migratory bird</a> sur la réintégration d'oiseaux migrateurs à l'état sauvage.</p>
<p><a href="https://media.ccc.de/v/37c3-12142-breaking_drm_in_polish_trains">Breaking "DRM" in Polish trains</a> ou pourquoi faire du <a href="https://fr.wikipedia.org/wiki/G%C3%A9orep%C3%A9rage">geofencing</a> dans des trains est une mauvaise idée.</p>
<p><a href="https://media.ccc.de/v/33c3-8344-nintendo_hacking_2016">Nintendo hacking 2023: 2008</a> ou comment un chercheur très motivé a enfin cassé la Nitendo DSi, 15 ans après sa sortie.</p>
<p><a href="https://media.ccc.de/v/37c3-11810-decentralized_energy_production_green_future_or_cybersecurity_nightmare">Decentralized energy production: green future or cybersecurity nightmare?</a> sur un manque flagrant de sécurité dans les "smart-grids" photovoltaïques.</p>
<p><a href="https://media.ccc.de/v/37c3-12292-new_important_instructions">NEW IMPORTANT INSTRUCTIONS</a> ou pourquoi intégrer des LLM dans une application est équivalent à implémenter de la sécurité coté client…</p>
<p><a href="https://media.ccc.de/v/37c3-11919-finding_vulnerabilities_in_internet-connected_devices">Finding Vulnerabilities in Internet-Connected Devices</a> un cas pratique de recherche de vulnérabilités par itérations dans un téléphone de conférence "smart".</p>
<figure>
<img src="https://mart-e.be/images/2024/ccc-run-doom.png"/>
</figure>
<p><a href="https://media.ccc.de/c/37c3">et encore beaucoup d'autres.</a></p></content><category term="Uncategorized"></category><category term="securite"></category><category term="ccc"></category></entry><entry><title>mart-e apprend le Rust à Noël</title><link href="https://mart-e.be/2023/12/mart-e-apprend-le-rust-a-noel" rel="alternate"></link><published>2023-12-23T11:15:00+01:00</published><updated>2023-12-23T11:15:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-12-23:/2023/12/mart-e-apprend-le-rust-a-noel</id><summary type="html"><p>Pour commencer les bonnes résolutions en avance, j'ai récemment décidé d'apprendre le <a href="https://www.rust-lang.org/">Rust</a>. Ce langage me faisait de l'œil depuis quelques temps, je voyais de nombreux projets l'adopter pour remplacer …</p></summary><content type="html"><p>Pour commencer les bonnes résolutions en avance, j'ai récemment décidé d'apprendre le <a href="https://www.rust-lang.org/">Rust</a>. Ce langage me faisait de l'œil depuis quelques temps, je voyais de nombreux projets l'adopter pour remplacer des composants en C par du Rust (<a href="https://en.wikipedia.org/wiki/Rust_for_Linux">Linux</a>, <a href="https://github.com/fish-shell/fish-shell/pull/9512">fish-shell</a>, <a href="https://blog.1password.com/1passwordx-december-2019-release/">1Password</a>,...). J'avais même une copie non-ouverte de <a href="https://www.manning.com/books/rust-in-action">Rust in Action</a> sur mon bureau qui me narguait depuis quelques mois. Mais je suis un développeur Python moi, est-ce que j'ai vraiment envie d'écrire des points-virgules et des accolades ?</p>
<figure>
<a href=""><img src="https://mart-e.be/images/2023/martine-boxt.png"/></a>
</figure>
<h3>Advent of Code</h3>
<p>Fin novembre, un jour improbable où j'avais du temps libre, je décide de me lancer. En en parlant, un collègue me demande si je vais faire l'<a href="https://adventofcode.com">Advent of Code</a> en rust. L'Advent of Code est un site qui propose, du 1er au 24 décembre de chaque année un problème journalier de programmation de difficulté croissante à résoudre, le tout avec une petite histoire amusante vous expliquant comment vous allez sauver Noël en codant.</p>
<p>J'avais déjà participé quelques fois à l'Advent of Code mais rarement au delà de jour 5. N'arrivant jamais à dire non à quelqu'un qui me propose un défi, je me lève à 6h du matin tapante le 1er décembre (heure de publication du challenge journalier).</p>
<p>Ce fut douloureux. Chaque jour, je butais sur des règles de syntaxes simples, le compilateur refusant de comprendre ce que je voulais faire (spoiler: le compilateur est plus malin que moi). J'allais voir sur Stackoverflow pour chaque nouvelle ligne de code. Je mettais plusieurs heures pour résoudre chaque problème mais j'ai tenu bon les 16 premiers jours (à partir du jour 17, la difficulté croissante ne me permettait plus de les résoudre en une seule journée) et j'ai appris énormément.</p>
<p>Est-ce que je maitrise le langage à la fin du mois ? Certainement pas. Rust est un langage complexe avec ses particularités et je n'ai fait que gratter la surface. <a href="https://gitlab.com/mart-e/advent-of-code/">Mes solutions</a> sont loin d'être les plus élégantes ou efficaces. La contrainte temps de l'Advent of Code (à caser le matin ou sur un temps de midi) ne me laissait pas l'opportunité de peaufiner mes solutions.</p>
<figure>
<a href="https://www.flickr.com/photos/opendemocracy/1482020719"><img src="https://mart-e.be/images/2023/statue-headache.jpg"/></a>
<figcaption>Essayer de comprendre la gestion des <em>ownerships</em> en Rust</figcaption>
</figure>
<h3>Ressources</h3>
<p>Dans <a href="https://www.scotthyoung.com/blog/ultralearning/">Ultralearing</a>, Scott Young explique comment il est plus efficace de se tester (et d'échouer) régulièrement lors de l'apprentissage plutôt que de "juste" étudier et d'attendre d'avoir tout mémorisé pour tester ses connaissance. C'est l'approche que j'ai essayé de suivre :</p>
<p>J'ai lu en diagonale le <a href="https://doc.rust-lang.org/book/">Rust Book</a> et les deux premiers chapitres de Rust in Action. Avec un bagage minimal, j'ai essayé de résoudre les excercices de <a href="le [Rust Book](https://doc.rust-lang.org/book/)">rustlings</a>, une série de bouts de codes qui ne compilent pas et qu'il faut corriger. A chaque excercie, rustlings nous donne la référence dans Rust Book pour comprendre le sujet abordé. Avec un objectif clair, il est beaucoup plus facile de comprendre un concept inconnu. <a href="https://doc.rust-lang.org/rust-by-example/index.html">Rust by Example</a> est une autre bonne ressource pour comprendre ce monde inconnu.</p>
<p>Si je code au boulot avec <a href="https://www.sublimetext.com/">Sublime Text</a>, j'ai profité de l'occasion pour ressortir mon bon vieux <a href="https://www.gnu.org/software/emacs/">Emacs</a> (je n'allais quand même pas utiliser VSCode comme tout le monde). Je me suis bien aidé de <a href="https://robert.kra.hn/posts/rust-emacs-setup/">Configuring Emacs for Rust development</a> pour améliorer mon installation, le tout avec le joli <a href="https://draculatheme.com/emacs">thème Dracula</a>.</p>
<p>Concernant Rust in Action, je suis un peu plus mitigé. C'est pas que le livre est mauvais mais plutôt que le titre complet est "Rust in Action : Systems programming concepts and techniques". Les 4 premiers chapitres sont très intéressants et clairs mais il m'a perdu à partir du cinquième lorsque l'on émulait un CPU. J'y reviendrai probablement quand je serai plus expériementé mais ce n'est pas ce qu'il me fallait pour débuter. L'auteur a justement fait une présentation <a href="https://www.youtube.com/watch?v=sDtQaO5_SOw">How to lean Rust</a> qui donne des bonnes pistes pour débuter et démystifier la complexité du langage.</p>
<p>Maintenant que l'Advent of Code est (presque) terminé, j'ai également acheté <a href="https://www.zero2prod.com/">Zero To Production In Rust</a>. Dans ce livre, l'on essaye de construire un système de newsletter complet en Rust, en insistant sur l'aspect <em>production</em> du développement. Chaque chapitre ajoute une nouvelle couche (framework web, base de donnée, logs,...) avec un prototype fonctionel à chaque étape. Le tout avec une approche <a href="https://fr.wikipedia.org/wiki/Test_driven_development">Test-Driven Development</a> qui change des tutoriels habituels. Assez rapidement, l'on divise notre projet en plusieurs fichiers et l'on a réellement l'impression de travailler sur un projet maintenable et pas un long script. On ne débute pas vraiment de zéro mais pluôt 0,5, de nouveau gardez le Rust Book à portée de main… Pour réaliser ce projet, l'on utilise de nombreux <a href="https://crates.io/">crates</a> avec lesquels il faut se familliariser, ce qui complexifie encore l'étendue du langage à maitriser.</p>
<p>Une fois passés les premiers jours à se battre contre le compilateur, j'ai vite apprécié ce langage, certes exigeant mais aussi gratifiant. Lors de l'Advent of Code, c'était assez agréable de voir que régulièrement, une fois que j'avais résolu toutes les erreurs du compilateur, j'obtenais la bonne solution directement. Je reste un grand fan de Python mais je comprends pourquoi le Rust est si populaire et j'essayerai définitivement de l'utiliser dans de prochains projets.</p>
<figure>
<a href="https://www.flickr.com/photos/qwertyuiop/2364689808"><img src="https://mart-e.be/images/2023/cute-crab.jpg"/></a>
</figure></content><category term="Uncategorized"></category><category term="rust"></category><category term="programmation"></category></entry><entry><title>Remise à neuf d'une Olivetti Lettera 32</title><link href="https://mart-e.be/2023/10/remise-a-neuf-dune-olivetti-lettera-32" rel="alternate"></link><published>2023-10-31T07:59:00+01:00</published><updated>2023-10-31T13:48:00+01:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-10-31:/2023/10/remise-a-neuf-dune-olivetti-lettera-32</id><summary type="html"><p>J'ai récemment lu <a href="https://typewriterrevolution.com/">The Typewriter Revolution</a> de Richard Polt. Je ne recommande pas du tout ce livre : arrivé à la moitié, j'avais déjà récupéré une machine à écrire dans un …</p></summary><content type="html"><p>J'ai récemment lu <a href="https://typewriterrevolution.com/">The Typewriter Revolution</a> de Richard Polt. Je ne recommande pas du tout ce livre : arrivé à la moitié, j'avais déjà récupéré une machine à écrire dans un grenier. La lecture finie, je m'étais inscrit à <a href="https://nanowrimo.org/">NaNoWriMo</a> et j'avais forcé mon épouse à regarder <a href="https://californiatypewritermovie.com/">California Typewriter</a> avec moi.</p>
<p>Cette introduction pour expliquer comment je me suis retrouvé en possession d'une Olivetti Lettera 32 de 1970 (merci <a href="https://typewriterdatabase.com/olivetti.56.typewriter-serial-number-database">The Typewriter Database</a> pour la datation) ayant appartenu à ma grand-mère qui l'a utilisée jusqu'au milieu des années 80. Étant plus familier de la souris que de la machine à écrire, voici les problèmes que j'ai rencontré et les découvertes que j'ai faites pour les résoudre :</p>
<h2>Retour à la ligne</h2>
<p>Emblématique des machines à écrire méchaniques, à la fin d'une ligne, une petite cloche sonne indiquant qu'il ne nous reste que quelques lettres avant la marge. On passe à la ligne en tirant le levier qui entraine le chariot au début de la page.</p>
<p>Ce levier tombait négligemment quand j'ai reçu la machine, il suffisait de resserer la vis pour régler ce problème.</p>
<figure>
<img src="https://mart-e.be/images/2023/olivetti-levier.jpg"/></a>
</figure>
<h2>Nettoyage</h2>
<p>Avant d'arriver chez moi, la machine avait été utilisée quelques années et puis en avait passé de nombreuses autres dans un grenier. Un bon nettoyage ne faisait pas de tort. Si les vielles machines peuvent parfois manquer de graisse, ce n'était pas le cas ici. J'ai commencé avec un bon coup de spray d'air comprimé pour dégager tous les cheveux et autres crasses accumulées dans les interstices en faisant attention de ne pas chasser les mini ressorts.</p>
<p>Comme avec une chaine de vélo, avec le temps, la graisse accumule les poussières et encrasse la machine. J'ai utilisé un pinceau, des cotons tiges (beaucoup) et de l'essence de nettoyage pour nettoyer un peu partout. Cela prend du temps mais vaut la peine. Attention de ne pas mettre d'essence de nettoyage sur le cylindre qui pourrait abimer le caoutchouc.</p>
<figure>
<img src="https://mart-e.be/images/2023/olivetti-sale.jpg"/></a>
<figcaption>miam</figcaption>
</figure>
<h2>Le ruban</h2>
<p>Même si j'ai été impressionné de voir qu'il y avait encore de l'encre 40 ans plus tard, il n'en restait pas suffisamment pour éviter un remplacement du ruban. Contrairement aux imprimantes, la dimension des rubans est standard pour la majorité des machines. La bobine est spécifique mais l'on peut facilement transférer un ruban d'une bobine à une autre.</p>
<p>En principe, lorsque que l'on presse une touche, un axe entraine la bobine vide qui va enrouler le ruban. L'autre bobine n'est pas retenue et déroule progressivement son ruban. Une fois arrivé au bout du rouleau, un petit levier permet d'inverser le sens et on tire le ruban dans l'autre sens. On peut ainsi faire de nombreux passages avec un même ruban avant de se soucier de manquer d'encre.</p>
<p>Une particularité des machines Olivetti est qu'elles possèdent une vis de serrage pour que la bobine se fixe sur l'axe, sans cela la bobine tourne fou. C'est après avoir regardé des vidéos youtube que j'ai réalisé que ces vis manquaient chez moi et que la bobine présente n'était pas une bobine Olivetti pouvant accueillir cette vis (à se demander comment ils ont utilisé cette machine avant).</p>
<p>Par chance, ce n'est pas les amateurs de machine à écrire qui manquent. J'ai pu commander un nouveau rouleau chez <a href="https://bsietypewriters.com/">BSIE Typewriter</a> à Nice et des vis chez <a href="https://www.machineaecrire.fr/">machineaecrire.fr</a> à Aix en Provence (ça manque cruellement de vendeurs belges tout ça). Tous très rapides à répondre à mes messages.</p>
<p>Le placement du ruban n'est pas très difficile si l'on regarde les nombreuses photos et vidéos en ligne expliquant le placement exact.</p>
<figure>
<img src="https://mart-e.be/images/2023/olivetti-ruban.jpg"/>
</figure>
<h2>Alignement des majuscules</h2>
<p>Chaque touche permet de faire deux caractères différents (majuscule et minuscule pour les lettres). Lorsque que l'on appuie sur la touche majuscule, le segment sur lequel les lettres sont fixées descend (la Lettera 32 est de type <em>segment shift</em>, en opposition à d'autres modèles de type <em>carriage shift</em>) et c'est maintenant le haut de la barre de saisie qui va frapper sur le cylindre et laisser une marque. Vous comprenez maintenant pourquoi la touche majuscule s'appelle <em>Shift</em> sur votre clavier.</p>
<p>Dans mon cas, les majuscules et les minuscules n'étaient pas très bien alignées, les majuscules étant légèrement trop hautes. Presser la touche majuscule ne descendait donc pas suffisamment le segment.</p>
<p>Ce réglage est différent sur chaque machine mais j'ai trouvé <a href="https://imgur.com/a/5YvlLVb">cette série de photos</a> montrant exactement où ajuster cela sur la Lettera 32. Pour decendre les majuscules, il me fallait régler l'écrou de gauche. Pour descendre les minuscules (ou remonter les majuscules, question de point de vue), c'est celui de droite.</p>
<p>Le plus compliqué a été de trouver un outil adéquat. J'ai finalement retrouvé un embout hexagonal M5.0 dans mon kit de tournevis de précision avec un bras d'extension. Je ne vais pas forcément vous recommander mon kit car il n'est pas de grande qualité mais il en existe des dizaines sur internet à tous les prix (j'avais payé 12€ sur Amazon il y a 6 ans).</p>
<figure>
<img src="https://mart-e.be/images/2023/olivetti-majuscules.jpg"/>
<figcaption>Quelques essais et erreurs pour trouver le bon réglage</figcaption>
</figure>
<h2>Mais au fond, pour faire quoi ?</h2>
<p>Je suis loin de me considérer expert en la matière mais il est assez gratifiant de voir qu'en passant un peu de temps, il est tout à fait possible de retaper une machine à écrire. On peut facilement comprendre son fonctionnement en observant les différents méchanismes ainsi que les très nombreuses photos et vidéos faites par des passionnés. Et passionnés, il y a. Il suffit de se rendre sur <a href="https://www.reddit.com/r/typewriters/">/r/typewriters</a> sur Reddit pour trouver une communauté prête à aider à restaurer les vielles machines sorties du grenier.</p>
<p>A l'ère du tout dématérialisé, le papier prend paradoxalement plus d'importance. Envoyez une lettre dactylographiée (ou calligraphiée) à un proche et elle aura bien plus d'importance qu'un email. Aussi bien pour vous que pour la personne qui la recevera.</p>
<p>Sur un ordinateur, j'ai du mal à me concentrer : je fais toujours 10 choses en même temps, j'ai actuellement 575 onglets ouverts sur deux navigateurs différents, je recois continuellement des notifications de trop nombreuses applications de messagerie ou réseaux sociaux. Une machine à écrire, ça ne fait que produire des mots, il n'y a même pas de touche Supprimer ! Il faut réfléchir avant de presser une touche, et ça, ça change tout.</p>
<p>Si vous avez encore un doute, allez lire <em>The Typewriter Revolution</em> mais je vous aurai prévenu...</p></content><category term="Uncategorized"></category><category term="machine à écrire"></category><category term="réparation"></category></entry><entry><title>Il ne nous restera plus qu'à peindre l'herbe en vert</title><link href="https://mart-e.be/2023/09/peindre-lherbe-en-vert" rel="alternate"></link><published>2023-09-29T15:49:00+02:00</published><updated>2023-09-29T15:49:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-09-29:/2023/09/peindre-lherbe-en-vert</id><summary type="html"><p>Il y a peu, une commune du sud de la France s'est faite remarquer pour avoir peint son gazon en vert.</p>
<p><a href="https://france3-regions.francetvinfo.fr/provence-alpes-cote-d-azur/alpes-maritimes/cannes/cette-commune-des-alpes-maritimes-peint-le-gazon-desseche-par-la-canicule-pour-le-rendre-vert-2817461.html">Cette commune des Alpes-Maritimes peint le gazon desséché par …</a></p></summary><content type="html"><p>Il y a peu, une commune du sud de la France s'est faite remarquer pour avoir peint son gazon en vert.</p>
<p><a href="https://france3-regions.francetvinfo.fr/provence-alpes-cote-d-azur/alpes-maritimes/cannes/cette-commune-des-alpes-maritimes-peint-le-gazon-desseche-par-la-canicule-pour-le-rendre-vert-2817461.html">Cette commune des Alpes-Maritimes peint le gazon desséché par la canicule pour le rendre vert</a></p>
<p>Le titre peut faire rire mais, comme d'habitude, si on lit l'article, la réalité est plus nuancée. Le gazon est toujours vivant mais jauni, la peinture est à base d'algues et procurerait des nutriments, l'aidant à résister à la chaleur. Lorsque l'on met en place une solution, il faut regarder ce qu'elle remplace. Dans ces régions chaudes, l'eau est une denrée précieuse et si l'on peut éviter de la gaspiller à arroser du gazon (je vous regarde, les golfs !), c'est une bonne chose. Certaines villes pourraient décider de remplacer le gazon par des galets ou du gazon synthétique, ce qui serait pire.</p>
<figure>
<a href="https://nitter.net/SebastienLeroy_/status/1684120036078936064"><img src="https://mart-e.be/images/2023/peindre-rond-point.jpg"/></a>
<figcaption>Un greenwashing très littéral</figcaption>
</figure>
<p>Autre exemple qui a fait bien rire les gens : pour avoir de l'ombre dans un nouveau quartier de Bordeaux, la ville installe des arbres en métal.</p>
<p><a href="https://www.20minutes.fr/culture/4041427-20230615-bordeaux-lutter-contre-rechauffement-ville-microforet-aluminium-servira-ombriere">Bordeaux : Pour lutter contre le réchauffement en ville, une microforêt d’aluminium servira d’ombrière</a></p>
<p>"Vous savez ce qui fait aussi de l'ombre ? Des arbres !" crient les gens qui n'ont pas lu l'article. La zone se trouve au-dessus d'un parking et il n'est pas possible de planter des arbres vivants à cet endroit. Il y en a quelques-uns aux alentours cependant.</p>
<figure>
<a href="https://www.devisubox.com/dv/dv.php5?pgl=Project/interface&sRef=7AHU5USAW"><img src="https://mart-e.be/images/2023/bordeaux-belvedere.webp"/></a>
</figure>
<p>Si, dans les deux cas, l'action n'est pas aussi stupide que le titre le laisse croire, elle crie pourtant par sa façon de réagir plutôt que d'anticiper le dérèglement climatique. On soigne les symptômes plutôt que s'atteler à la cause du problème.</p>
<p>Peut-être que Mandelieu-La Napoule devrait repenser son aménagement un peu plus en profondeur pour éviter que du gazon jaune au milieu d'un rond-point soit un problème. Tester d'autres variétés plus résistantes à la sècheresse, faire un pré fleuri, planter des arbres,… Si arroser par temps de sècheresse est une absurdité, peindre l'herbe chaque année n'est pas non plus un modèle d'adaptation.</p>
<p>Dans le cas de Bordeaux, est-ce que ce parking sous-terrain en plein centre-ville est réellement nécessaire ? La volonté d'amener les voitures au plus proche de leur point de destination participe à congestionner les rues et entretient le <em>tout voiture</em>. <a href="https://www.bloomberg.com/news/articles/2019-03-29/amsterdam-s-plan-to-eliminate-11-000-parking-spots">Amsterdam supprime 1500 places de parking par an</a>, <a href="https://www.telegraph.co.uk/world-news/2023/09/19/hanover-reveals-plans-banish-cars-inner-city-streets/">Hanovre va supprimer quasiment toutes les places de parking du centre-ville</a>. On ne devient pas une ville pro-piétons et cyclistes sans réduire la place disponible des voitures.</p>
<p>Tout cela est évidemment plus difficile, ça ne se fera pas sans investissement ni sans froisser quelques personnes. Cela prend plus de temps, ce même temps qui commence cruellement à manquer. Le changement climatique est de plus en plus visible et il faudra s'y adapter. Au plus tôt l'on commencera, au plus facile sera la transition. A force de soigner les symptômes plutôt que de les anticiper, il ne nous restera plus d'autres choix que de peindre l'herbe en vert…</p>
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/51931817183/"><img src="https://mart-e.be/images/2023/terre-seche.jpg"/></a>
</figure></content><category term="Uncategorized"></category><category term="humeur"></category><category term="écologie"></category></entry><entry><title>Actions personnalisées dans Nautilus</title><link href="https://mart-e.be/2023/09/actions-personnalisees-dans-nautilus" rel="alternate"></link><published>2023-09-04T20:16:00+02:00</published><updated>2023-09-04T20:16:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-09-04:/2023/09/actions-personnalisees-dans-nautilus</id><summary type="html"><p>Sur mon ordinateur, j'utilise le système Archlinux avec GNOME. En bon informaticien feignant, j'ai automatisé quelques actions répétitives. Par exemple, lorsque je veux partager une photo prise avec mon téléphone …</p></summary><content type="html"><p>Sur mon ordinateur, j'utilise le système Archlinux avec GNOME. En bon informaticien feignant, j'ai automatisé quelques actions répétitives. Par exemple, lorsque je veux partager une photo prise avec mon téléphone, je veux</p>
<ol>
<li>réduire sa taille à max 1000px</li>
<li>enlever les métadata</li>
<li>sauvegarder le résultat dans <code>/tmp</code></li>
</ol>
<p>Dans Nautilus, le gestionnaire de défaut de GNOME, il est assez facile de créer de nouvelles actions contextuelles, il suffit de mettre un script exécutable dans le dossier <code>~/.local/share/nautilus/scripts/</code>.</p>
<p>Dans mon exemple ci-dessus, mon script utilisant ffmpeg ressemble à ceci :</p>
<div class="highlight"><pre><span></span><code><span class="ch">#!/bin/bash</span>
<span class="c1"># scale down to max 1000px and remove EXIF data</span>
<span class="nv">PRE</span><span class="o">=</span><span class="s1">&#39;&#39;</span>
<span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/tmp&quot;</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="c1"># if already in /tmp, add prefix to keep original file</span>
<span class="w"> </span><span class="nv">PRE</span><span class="o">=</span><span class="s1">&#39;copy-&#39;</span>
<span class="k">fi</span>
<span class="k">for</span><span class="w"> </span>FILE_PATH<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nv">$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS</span><span class="p">;</span><span class="w"> </span><span class="k">do</span>
<span class="w"> </span><span class="nv">FILENAME</span><span class="o">=</span><span class="si">${</span><span class="nv">FILE_PATH</span><span class="p">##*/</span><span class="si">}</span>
<span class="w"> </span>convert<span class="w"> </span><span class="nv">$FILE_PATH</span><span class="w"> </span>-strip<span class="w"> </span>-resize<span class="w"> </span><span class="s1">&#39;1000x1000&gt;&#39;</span><span class="w"> </span>/tmp/<span class="nv">$PRE$FILENAME</span>
<span class="k">done</span>
</code></pre></div>
<p>Je le sauve dans un fichier <code>Resize to 1000px</code> dans mon dossier en n'oubliant pas de le rendre exécutable et on peut y accéder via un clic droit :</p>
<figure>
<img src="https://mart-e.be/images/2023/nautilus-scripts.png"/>
</figure>
<p>Le wiki de Ubuntu donne un peu d'explications et des exemples de code plus avancés.</p>
<p><a href="https://help.ubuntu.com/community/NautilusScriptsHowto">NautilusScriptsHowto | Ubuntu Community Help Wiki</a></p>
<p>Si vous essayez d'écrire votre propre script, vous rencontrerez surement le besoin de débugger votre script. Pour pouvoir afficher les erreurs ou messages de log, il suffit de lancer Nautilus en ligne de commande et de truffer votre code des habituels <code>echo "coucou123"</code>.</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>nautilus<span class="w"> </span>--no-desktop
**<span class="w"> </span>Message:<span class="w"> </span><span class="m">20</span>:11:08.058:<span class="w"> </span>Connecting<span class="w"> </span>to<span class="w"> </span>org.freedesktop.Tracker3.Miner.Files
coucou123
</code></pre></div></content><category term="Uncategorized"></category><category term="gnome"></category><category term="script"></category><category term="linux"></category><category term="bash"></category></entry><entry><title>Partagez-nous votre avis sur votre expérience</title><link href="https://mart-e.be/2023/08/partagez-nous-votre-avis-sur-votre-experience" rel="alternate"></link><published>2023-08-07T17:02:00+02:00</published><updated>2023-08-07T17:02:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-08-07:/2023/08/partagez-nous-votre-avis-sur-votre-experience</id><summary type="html"><blockquote>
<p><em>Merci de votre visite sur mart-e.be, avant la lecture de votre article, pourriez-vous prendre 5 minutes pour nous donner votre avis concernant votre expérience de visite ?</em></p>
</blockquote>
<p>Ces dernières années …</p></summary><content type="html"><blockquote>
<p><em>Merci de votre visite sur mart-e.be, avant la lecture de votre article, pourriez-vous prendre 5 minutes pour nous donner votre avis concernant votre expérience de visite ?</em></p>
</blockquote>
<p>Ces dernières années, une tendance, pourtant déjà bien installée, s'est encore intensifiée: le fait de nous demander d'évaluer tout et (surtout) n'importe quoi à tout bout de champ.</p>
<p>Dès que l'on achète quelque chose (en ligne ou non), recommanderiez-vous cet article ? À la sortie d'une visite chez le garagiste : comment était votre expérience ? Dès que je sors d'une toilette d'aire d'autoroute, le sentiment du travail accompli, on me demande de laisser une note. Ce n'est pas que je n'aime pas vos petits boutons avec des sourires mais, écoutez, on ne se connait pas, mon expérience là-bas ne regarde que moi et mon proctologue.</p>
<blockquote>
<p><em>Pourriez-vous donner une note sur cinq concernant le paragraphe ci-dessus ? Sachez que les paragraphes avec quatre étoiles ou moins seront moins mis en avant. Toute l'équipe de mart-e.be vous remercie de votre confiance.</em></p>
</blockquote>
<p>On répète souvent la célèbre phrase de <a href="https://fr.wikipedia.org/wiki/Peter_Drucker">Peter Drucker</a> "<em>You can't manage what you can't measure</em>". Cette phase, citée par tous les livres de management bullshits, justifie d'harceler les utilisateurs lors de la course à la performance.</p>
<p>À force de se focaliser sur le mesurable, on sous-estime l'importance de ce qui ne l'est pas. Or, beaucoup de choses importantes ne peuvent être mesurées. On ne peut pas mesurer le bonheur (même si <a href="/post/2011/09/01/bonheur-national-brut">certains essayent</a>), on ne peut pas mesurer la nature, on ne peut pas mesurer la qualité des relations humaines. C'est à cause de pensées comme celle de Peter Drucker que l'on se retrouve dans la situation de merde dans laquelle nous sommes. Pendant des décennies, on s'est focalisé sur des métriques monétaires comme le PIB, négligeant complètement ce qui ne rentre pas dans l'équation, tel que l'apport des écosystèmes ou le travail non-rémunéré.</p>
<blockquote>
<p><em>Il semblerait que vous n'ayez pas répondu à notre demande de sondage. Pourriez-vous nous donner votre opinion, cela ne prendra que peu de temps et nous aide beaucoup dans notre objectif d'amélioration continue.</em></p>
</blockquote>
<p>Si le but premier était d'améliorer la qualité du service (les plus cyniques diront pour détecter les tire-au-flanc), cette lubie à l'évaluation a, à force, rendu insignifiants les scores. Désormais, un 4/5 sera considéré "moyen" et un 3/5 fait franchement tache. Alors qu'un 5/5 devrait signifier la perfection inatteignable, ce sera la note qu'on laisse si tout s'est bien passé, pour ne pas vexer notre interlocuteur.</p>
<p>Je ne peux m'empêcher de penser à l'épisode <a href="https://fr.wikipedia.org/wiki/Chute_libre_(Black_Mirror)">Chute libre</a> de la géniale série Black Mirror. Dans cet épisode, l’héroïne enchaîne les politesses à outrance et se plie en quatre pour obtenir l'approbation de tous, dans le seul but d'augmenter sa note, assez banale, de 4,2/5.</p>
<figure>
<img src="https://mart-e.be/images/2023/black-mirror-nosedive-grey.webp"/>
<figcaption><em>"Toilettes impec, 5/5"</em></figcaption>
</figure>
<p>Lorsque j'ai regardé cet épisode, en 2016, je l'avais trouvé glaçant (comme d'habitude avec Black Mirror). On faisait des parallèles avec le système de crédit social en Chine. Pauvres Chinois à qui on imposait ce système dystopien... 7 ans plus tard, j'ai une autre lecture, beaucoup plus proche de nous. Et si, finalement, on y était aussi, d'une façon plus insidieuse ? À force de vouloir maximiser les évaluations, on perd toute authenticité. On sait que les notes ne veulent plus rien dire, qu'elles sont bourrées de faux avis ou hors propos, mais on ne peut s'empêcher de les lire dès qu'on cherche un resto, un hôtel ou un mixeur.</p>
<p>Il y a quelques années, le site Medieval4i faisait débat car il permettait de donner une note à un médecin. On avait, à raison, crié au scandale, les dérives étant assez faciles à voir (court-termisme et médecine ne faisant pas bon ménage). Le site n'a pas fait long-feu et n'existe plus (on ne le regrettera pas). Cependant, il suffit de faire une recherche sur Google Maps pour voir que cette pratique existe depuis longtemps. Désolé, Dr Marie-Claire, grâce à un avis, tu viens de tomber en bas de la liste de priorité. Et, franchement, Dr Gaetane, je n'irai te voir que si tous les autres sont occupés et que je suis à l'article de la mort...</p>
<figure>
<a href="https://mart-e.be/images/2023/gmaps-medecin-grey.png"><img src="https://mart-e.be/images/2023/gmaps-medecin-grey.png"/></a>
</figure>
<p>Est-ce que l'on peut sortir de ce système malsain ? Ce n'est probablement pas en laissant des mauvaises notes à tout ceux qui vous en demande (ce que je fais, néanmoins, avec grand plaisir) que l'on va changer ce système. Autant je tire une certain satisfaction à envoyer des mails d'insultes au support de Spotify, autant je ne m'attends pas à ce qu'ils changent suite à mes messages. J'ai bien compris maintenant que mon avis reste minoritaire.</p>
<p>Dans son dernier article, <a href="https://ploum.net/2023-08-01-splitting-the-web.html">Ploum parlait</a> d'un internet de plus en plus divisé. D'un coté, l'énorme web commercial avec ses sollicitations continues et de l'autre, l'internet lent et plus petit, avec des alternatives comme le <a href="https://ar.al/2020/08/07/what-is-the-small-web/">Small Web</a> ou <a href="https://gemini.circumlunar.space/">Gemini</a>. De plus en plus, ces deux mondes ne se comprennent ni ne se parlent plus. Ces demandes d'avis ne sont qu'un des symptômes de cet internet bruyant qui m'épuise. Je suis heureux de publier mes réflexions sur un blog minimaliste lu seulement par une poignée de visiteurs me suivant via un <a href="/feed">flux RSS</a>. Si vous avez un avis à me donner, ne me laissez pas une note, <a href="/about">contactez moi</a>.</p>
<p>Mais, cela ne s'applique pas qu'à internet. Le vendeur de la Fnac, le commercial de chez Audi et les toilettes d'aires d'autoroute appartiennent au monde physique mais font surtout partie de grands groupes commerciaux et agissent dans la même logique d'optimisation capitaliste qu'un Uber ou un Amazon. Votre épicier, restaurateur ou réparateur de vélo de quartier ne va pas vous demander de lui laisser une note, il n'en a pas besoin, il sait si vous êtes satisfait ou non.</p>
<blockquote>
<p><em>Voulez-vous vous abonner à notre newsletter ?</em></p>
</blockquote></content><category term="Uncategorized"></category><category term="humeur"></category><category term="avis"></category></entry><entry><title>Librel, le réseau des librairies indépendantes</title><link href="https://mart-e.be/2023/07/librel-le-reseau-des-librairies-independantes" rel="alternate"></link><published>2023-07-21T10:03:00+02:00</published><updated>2023-07-21T10:03:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-07-21:/2023/07/librel-le-reseau-des-librairies-independantes</id><summary type="html"><p><a href="https://www.librel.be/">Librel.be</a> existe, maintenant, depuis 10 ans mais reste encore bien peu connu. Et pourtant, il est tellement pratique. Créé en 2014 par l'association <a href="https://www.leslibrairiesindependantes.be/">Les Librairies Indépendantes</a>, c'est ma plateforme …</p></summary><content type="html"><p><a href="https://www.librel.be/">Librel.be</a> existe, maintenant, depuis 10 ans mais reste encore bien peu connu. Et pourtant, il est tellement pratique. Créé en 2014 par l'association <a href="https://www.leslibrairiesindependantes.be/">Les Librairies Indépendantes</a>, c'est ma plateforme de choix lorsque je dois acheter un livre.</p>
<p>On ne va pas vous réexpliquez pourquoi il faut éviter Amazon. Normalement, c'est comme la toxicité de la cigarette : tout le monde est au courant à ce stade. Cependant, on continue d'y retourner souvent par facilité. S'il y a pourtant un produit où l'argument ne tient pas, c'est bien les livres.</p>
<p>Lorsque j'achète un livre, il y a un scénario type :</p>
<ul>
<li>Bon, on amène quoi comme cadeau pour l'anniversaire de Josiane ? Un livre ?</li>
<li>Il a l'air cool ce bouquin dont Gertrude parle.</li>
<li>Oh, Robert de la chaine Macramé4ever a sorti un livre !</li>
</ul>
<p>Si dans les deux derniers cas, il y a rarement urgence, dans le premier, j'ai la fâcheuse tendance à me poser cette question la veille, même pour Amazon Prime c'est trop tard !</p>
<figure>
<a href="https://www.librel.be/"><img src="https://mart-e.be/images/2023/macrame.png"/></a>
</figure>
<p>Librel reprend le catalogue des librairies membres (<a href="https://www.leslibrairiesindependantes.be/nos-librairies/annuaire-des-libraires">77 actuellement</a>) et permet de savoir facilement où il se trouve actuellement en stock. Si je suis pressé, je cherche une librairie dans laquelle je peux me rendre le jour même. Sinon, je peux le commander pour qu'il arrive près de chez moi. Vu que j'ai la chance de vivre dans une zone relativement dense de Wallonie, il y a deux librairies du réseau proches de chez moi.</p>
<p>J'ai encore pu tester le système il y a quelques jours :</p>
<ol>
<li>21h : je cherche un livre, il est disponible pas très loin, je le réserve</li>
<li>J+1 9h : je reçois un mail de confirmation de la libraire</li>
<li>10h : je me rends à la librairie en vélo</li>
<li>11h : je lis le livre dans le jardin avec une tasse de café</li>
</ol>
<figure>
<img src="https://mart-e.be/images/2023/librel-mail.png"/></a>
</figure>
<p>Je ne vois pas comment on pourrait faire plus simple. Le tout en donnant mon argent à un commerce que j'ai envie de voir perdurer. Dans le cas où le livre n'est pas en stock, les étapes sont les mêmes mais j'irai le chercher à J+10 plutôt que J+1. C'est rarement un problème.</p>
<p>Ploum a très bien expliqué pourquoi la <a href="https://ploum.net/2023-05-15-livraison-a-domicile.html">livraison à domicile est une fausse bonne idée</a>. Il est plus facile pour moi de me rendre dans ma librairie de quartier à un horaire qui me convient que d'être bloqué à la maison parce qu'un livreur payé au lance-pierre va hypothétiquement passer et repartir si je ne lui ouvre pas la porte dans un délai de 12 secondes. Refuser Amazon, c'est aussi ne pas participer à l'exploitation des livreurs forcés à travailler à des cadences invivables.</p>
<p>Si vous préférez les ebooks, il vous proposera les livres en version électronique lorsque que c'est possible. Et, chose suffisamment rare pour être notée : la présence ou l'absence de DRM y est clairement mentionnée.</p>
<p>Point négatif : le catalogue est exclusivement en Français. N'hésitez pas à me contacter si vous avez des recommandations pour trouver facilement des livres physiques en anglais. J'utilise, actuellement, <a href="https://www.bookfinder.com/">Bookfinder</a> afin de dénicher des livres de deuxième main mais il appartient, malheureusement, à Amazon, une fois de plus.</p>
<figure>
<a href="https://www.flickr.com/photos/mennonitechurchusa-archives/41870833081/"><img src="https://mart-e.be/images/2023/livres-telephone.jpg"/></a>
<figcaption>"Et ajoutez encore cet autre livre qui finira dans la pile à lire à ma droite"</figcaption>
</figure></content><category term="Uncategorized"></category><category term="livre"></category><category term="amazon"></category></entry><entry><title>ChatGPT n'est pas conçu pour dire la vérité</title><link href="https://mart-e.be/2023/07/chatgpt-ne-dit-pas-la-verite" rel="alternate"></link><published>2023-07-04T12:57:00+02:00</published><updated>2023-07-04T12:57:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-07-04:/2023/07/chatgpt-ne-dit-pas-la-verite</id><summary type="html"><p>Il y a peu, il y a eu un échange à mon boulot ressemblant à ceci :</p>
<blockquote><p>
- Je trouve pas comment exporter en PDF dans X, c'est où ?<br/>
- Mais on peut …</p></blockquote></summary><content type="html"><p>Il y a peu, il y a eu un échange à mon boulot ressemblant à ceci :</p>
<blockquote><p>
- Je trouve pas comment exporter en PDF dans X, c'est où ?<br/>
- Mais on peut pas exporter en PDF<br/>
- ChatGPT m'a dit que oui<br/>
- …
</p></blockquote>
<p>Et ce n'est pas uniquement mes charmants collègues : récemment, un avocat a utilisé des cas de jurisprudence inexistants dans sa plaidoirie lors d'un procès. Il avait utilisé ChatGPT pour étoffer ses arguments sans prendre la peine de les vérifier.</p>
<p><a href="https://reason.com/volokh/2023/05/27/a-lawyers-filing-is-replete-with-citations-to-non-existent-cases-thanks-chatgpt/">A Lawyer's Filing "Is Replete with Citations to Non-Existent Cases"—Thanks, ChatGPT?</a></p>
<p><a href="https://www.lesnumeriques.com/intelligence-artificielle/deux-avocats-americains-condamnes-pour-avoir-cru-les-elucubrations-de-chatgpt-n210837.html">Deux avocats américains condamnés pour avoir cru les élucubrations de ChatGPT</a></p>
<p>Si on s'intéresse deux minutes au fonctionnement de ChatGPT et de toutes ces LLM (<a href="https://fr.wikipedia.org/wiki/Grand_mod%C3%A8le_de_langage">Large Language Model</a>) dont on nous gave depuis des mois, on comprend pourquoi ce logiciel a produit des réponses <a href="https://fr.wikipedia.org/wiki/Hallucination_(intelligence_artificielle)">hallucinées</a>. Les LLM sont entraînées avec des énormes bases de textes dans le but de prédire la suite probable à une phrase. ChatGPT est votre clavier de smartphone qui vous suggère "tartiflette" après avoir tapé "j'aime la". Votre clavier mais avec des millions de fois plus de données d'apprentissage... et des millions d'heures de correction par des humains sous payés.</p>
<p>Si je tape "Quelle est la capitale de la Belgique ?", la réponse la plus probable est "Bruxelles" mais ChatGPT ne comprend pas le sens de la question. En effet, il n'a pas été consulter une base de données géographiques pour trouver la réponse, il a fait une supposition sur base de toutes les données qu'il a collectées et "Bruxelles" est la plus probable.</p>
<p>Mais que se passe-t-il si je lui demande quelque chose dont il n'a pas enregistré la réponse lors de son pillage de textes trouvés sur internet ? </p>
<p>Il va produire la réponse la plus probable, il va imaginer. </p>
<p>Si je demande "quelle est la différence entre des œufs de poule et de vache ?", il va me donner une réponse absurde, mais statistiquement plausible pour son modèle. Il va faire des suppositions sur la taille de l’œuf, son goût, etc. Il ne comprend pas les concepts d'"œuf", "poule" ou "vache". Et, encore moins, qu'une vache ne pond pas des œufs mais des reblochons.</p>
<figure>
<a href="https://www.google.be/search?source=hp&q=quelle%20est%20la%20diff%C3%A9rence%20entre%20des%20%C5%93ufs%20de%20poule%20et%20de%20vache%20%3F&meta=&aq=f&aqi=g10&aql=&oq=&gs_rfai="><img src="https://mart-e.be/images/2023/oeufs-vache-google.png"/></a>
<figcaption>Absurdités que Google va ensuite régurgiter sans se poser plus de questions</figcaption>
</figure>
<p>Si j'ai un bouton "exporter en pdf" dans la partie A de mon application, lorsque mon collègue demande où se trouve ce bouton dans l'écran B, il va produire une réponse plausible (mais pourtant fausse).</p>
<p>On aime dire que ChatGPT est un menteur plein de mauvaise foi mais c'est anthropomorphiser ce logiciel. Il faut le considérer pour ce qu'il est réellement : un algorithme prédictif. Anthropomorphisme poussé par OpenAI qui l'a volontairement programmé pour répondre comme le ferait une personne, rendant encore plus crédible l'impression d'une conversation avec un expert (sous LSD).</p>
<p>OpenAI, Microsoft, Google, Facebook, toutes ces sociétés essayeront de vous faire croire que leurs logiciels permettent de donner des réponses justes à vos questions mais c'est un mensonge. Et elles en sont certainement conscientes (ou ne s'en préoccupent pas beaucoup).</p>
<p>Mais finalement, si l'algorithme donne une mauvaise prédiction, est-ce que ce n'est pas juste un manque de données qui sera bientôt comblé ?</p>
<p>Pour perfectionner l'illusion de compréhension par leurs algorithmes, ces sociétés se focalisent sur deux points :</p>
<ul>
<li>l'augmentation du corpus de textes d'apprentissage</li>
<li>la supervision par des humains</li>
</ul>
<p>Dans une logique stéréotypée classique, c'est celui qui aura la plus grosse base de données qui donnera les meilleures réponses. Vraiment ? En augmentant la taille de l'échantillon, on va surtout tirer le résultat vers la moyenne. Entraînez votre IA avec les recettes de chefs reconnus. Ajoutez ensuite l'intégralité des recettes publiées sur marmiton. Dans quel cas est-ce que les suggestions de recettes seront de meilleure qualité ?</p>
<p>Comme le disait Dave Karpf, on va nous refiler des IA dans tous les sens qui ne produisent pas des résultats <em>satisfaisants</em> mais des résultats <em>suffisants</em>. Suffisamment dans la moyenne pour donner l'illusion. Suffisants pour déployer ce logiciel et se débarrasser de l'opérateur humain.</p>
<p><a href="https://davekarpf.substack.com/p/on-generative-ai-and-satisficing">On Generative AI and Satisficing | Dave Karpf</a></p>
<blockquote>
<p>[I]t’s best to understand Generative AI tools as <a href="https://twitter.com/davekarpf/status/1603021477049421825?lang=en">cliche-generators</a>. The AI isn’t going to give you the <em>optimal</em> Disney World itinerary; It’s going to give you basically the same trip that everyone takes. It isn’t going to recommend the ideal recipe for your tastes; it’s just going to suggest something that works…</p>
<p>Can a Generative AI produce a sitcom script? Yeah, it can. Will the script be any good? Meh. It will be, at best, average. Maybe it will be a creative kind of average, by remixing tropes from different genres (“Shakespeare in spaaaaaaaaace!”), but it’s still going to be little more than a rehash.</p>
</blockquote>
<p>À cela, vous ajoutez le fait que <a href="https://www.nextinpact.com/article/71906/quand-chatgpt-est-utilise-par-crowd-workers-pour-entrainer-dautres-modeles-langage">les IA commencent à être entraînées avec du contenu généré par les IA</a>, ce qui aura un effet boule de neige en tirant vers le bas la qualité de l'information.</p>
<p>Vient, alors, le deuxième point : <a href="https://www.theverge.com/features/23764584/ai-artificial-intelligence-data-notation-labor-scale-surge-remotasks-openai-chatbots">faire travailler des gens sous-payés</a> qui doivent qualifier des quantités énormes de données d’entraînement pour que les réponses correspondent à la vision d'une "bonne réponse" de leur propriétaire. En plus des soucis des conditions de ces travailleurs du clic, se pose évidemment la question de sa tendance politique.</p>
<p><a href="https://www.nytimes.com/2023/03/22/business/media/ai-chatbots-right-wing-conservative.html">Conservatives Aim to Build an A.I. Chatbot of Their Own | The New York Times</a></p>
<figure>
<a href="https://en.wikipedia.org/wiki/Mechanical_Turk"><img src="https://mart-e.be/images/2023/mechanical-turk.jpg"/></a>
<figcaption>Derrière chaque LLM se cache des décisions humaines</figcaption>
</figure>
<p>Mais, finalement, quelle différence avec un être humain ? Un être humain se trompe aussi, non ? Il faut de toutes façons revérifier ses sources. C'est le point avancé par <a href="https://about.sourcegraph.com/blog/cheating-is-all-you-need">Cheating is All You Need</a> de Sourcegraph (une société proposant une IA comme assistant de code). Cet argument semble crédible mais il est plutôt naïf. Il est assez difficile de garder un esprit critique face à un humain vous parlant avec assurance mais vous avez au moins toute une série d'informations de cadre vous permettant d'évaluer la crédibilité de votre interlocuteur. Lorsqu'un médecin vous donne un conseil de santé, vous lui faites probablement confiance. S'il est radiologue et vous donne son avis sur le vaccin du SARS-CoV-2, il est de bon ton de prendre son conseil avec des pincettes. Et pourtant, peu de gens le font. Vous venez de lire un texte dans lequel un non-expert vous expliquait comment les LLM fonctionnent, j'espère que vous ne l'avez pas cru sur parole…</p>
<p>Avec les LLM, on enlève ce cadre et on vous met face à une boite noire que l'on vous vend comme ayant une réponse à toutes vos questions. Peu de gens lisent les sources lorsque <a href="https://gizmodo.com/googles-algorithm-is-lying-to-you-about-onions-and-blam-1793057789">Google vous dit combien de temps il faut pour caraméliser les oignons</a>. Est-ce que les gens le feront plus face à un logiciel vendu comme expert en tout et qui ne donne aucune source ? J'en doute.</p>
<p>Mozilla expérimente l'intégration d'une LLM pour expliquer ses pages techniques sur sa documentation <a href="https://developer.mozilla.org/">MDN</a>. Ils ont eu l'excellente idée d'ajouter un bouton "AI Explain" à coté des bouts de code. Très rapidement, les utilisateurs se sont plaints qu'il produisait des réponses erronées. Comment peut-on demander aux gens de garder un esprit critique sur ces réponses si elles sont mises en avant par l'éditeur lui-même ?</p>
<p><a href="https://github.com/mdn/yari/issues/9208">MDN can now automatically lie to people seeking technical information #9208 | Github</a></p>
<p>Plus que jamais, ayez un regard critique envers les humains trop sûrs d'eux mais, encore plus, avec les logiciels trop sûrs d'eux dont on ne sait rien.</p></content><category term="Uncategorized"></category><category term="IA"></category><category term="ChatGPT"></category></entry><entry><title>On est foutu mais ça pourrait être pire</title><link href="https://mart-e.be/2023/06/on-est-foutu-mais-ca-pourrait-etre-pire" rel="alternate"></link><published>2023-06-21T12:32:00+02:00</published><updated>2023-06-21T12:32:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-06-21:/2023/06/on-est-foutu-mais-ca-pourrait-etre-pire</id><summary type="html"><p>Plus on se renseigne sur la crise environnementale, plus on réalise l'ampleur de la tâche. Le mart-e à 15 ans était enthousiaste sur les panneaux solaires et les voitures électriques …</p></summary><content type="html"><p>Plus on se renseigne sur la crise environnementale, plus on réalise l'ampleur de la tâche. Le mart-e à 15 ans était enthousiaste sur les panneaux solaires et les voitures électriques, imaginant un futur propre et renouvelable, qui sait, avec des voitures volantes ? Le mart-e à 35 ans hésite à installer des panneaux photovoltaïques sur son toit en connaissant l'impact de leur production et se demande s'ils ne participent pas à déstabiliser le réseau. Ça me semble une évidence que ma prochaine voiture sera électrique, mais je rêve plutôt d'un futur où mon prochain véhicule ne serait pas une voiture, un futur débarrassé de la voiture individuelle comme norme sociale.</p>
<p>Plus on s'informe, plus on se rend compte que ce sont des changements structurels dont nous avons besoin. Les petits gestes tels que manger bio, végétarien et zéro déchet ne suffiront certainement pas (ce qui ne les rend pas moins nécessaires). Il est illusoire de penser qu'on peut continuer avec notre système actuel de production et de consommation, une couche de peinture verte pour les détails. L'utopiste, c'est celui qui pense que l'on peut réduire durablement nos émissions en se basant seulement sur le progrès technologique et le remplacement des sources d'énergie fossile par des renouvelables. Il nous faut évoluer en profondeur : repenser l'alimentation, le logement, le travail, les modes de déplacements, les loisirs,… le tout en réduisant les inégalités grandissantes. L'écologie ne peut être une préoccupation de riches : la personne ayant du mal à joindre les deux bouts et obligée de vivre en banlieue par manque de moyen a d'autres préoccupations que de prendre un vélo pour aller au magasin bio.</p>
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/2163954308/"><img src="https://mart-e.be/images/2023/dormeur.jpg"/></a>
<figcaption>Réveillez-moi quand le changement climatique est résolu</figcaption>
</figure>
<p>Quand on entend notre premier ministre ou le président du pays voisin déclarer qu'ils aimeraient <a href="https://www.lesoir.be/515301/article/2023-05-24/peut-mettre-sur-pause-la-legislation-environnementale">faire une pause sur les nouvelles normes environnementales</a>, on ne peut que ressentir de la colère. Comment peut-on parler de ralentir alors qu'on ne fait pas assez ?</p>
<p>Si l'on prend l'objectif souhaitable des accords de Paris de 2015, on devrait limiter la hausse de températures à +1.5°C par rapport aux niveaux préindustriels. <a href="https://www.bloomberg.com/news/articles/2020-12-02/global-temperatures-already-1-2-c-above-pre-industrial-levels?leadSource=uverify%20wall">En 2020</a>, nous étions déjà à +1.2°C et les impacts du changement climatique sont bien visibles. Chaque année est plus chaude que la précédente, les incendies, sécheresses, inondations et autres catastrophes se succèdent. Le meilleur scénario va nous amener à encore plus de sécheresses et d'inondations et moins d'eau potable. Avec l'impact sur les populations que l'on peut imaginer : réfugiés climatiques, augmentations des inégalités, tensions entre et au sein des états,… Tout cela dans un monde où les énergies fossiles et la plupart des ressources essentielles se raréfient, augmentant encore plus les tensions. Comment éteindre un feu de forêt quand vous n'avez plus de pétrole pour faire voler des canadairs ou d'eau à puiser ? Comment lutter contre les famines quand vous ne pouvez plus produire d'engrais chimiques ? Comment extraire du cobalt de plus en plus profondément sans détruire les populations et les terres ?</p>
<p>On ne va pas se mentir, +1.5°C, ça va être la merde. Et ça, c'est le scénario optimiste.</p>
<figure>
<a href="https://www.flickr.com/photos/statelibraryofnsw/50903150472/"><img src="https://mart-e.be/images/2023/heat-ice-cream.jpg"/></a>
<figcaption>Qu'est-ce que c'est +2°C ?</figcaption>
</figure>
<p>Si on en croit le <a href="https://climateactiontracker.org/global/cat-thermometer/">CAT Thermometer</a>, en se basant sur les promesses des états ou sur les actions réellement mises en place, on devrait osciller entre une augmentation de +2°C ou +2.7°C. Vous pouvez être le plus utopiste des capitalistes, les accords de Paris n'ont aucune chance d'aboutir.</p>
<p>Alors on fait quoi ? On se dit que tout est foutu et on baisse les bras ? De toutes façons, les gens ne changeront jamais. Comme disait GiedRé : <a href="https://www.youtube.com/watch?v=ioAobHZuZYM">Carpediem, on brûle la vie par les deux bouts</a>. À quoi bon continuer à faire des efforts si on va de toute façon échouer ?</p>
<p>Parce qu'échouer, ce n'est pas binaire. Parce que chaque dixième de degré compte.</p>
<p><a href="https://bonpote.com/limiter-le-rechauffement-climatique-a-seulement-2c-au-lieu-d1-5c-est-irresponsable/">Limiter le réchauffement climatique à seulement +2°C au lieu d’1.5°C est irresponsable | Bon Pote</a></p>
<p>Échouer à +1.51°C n'est pas comparable à échouer à +2, +3 ou +4°. Une augmentation d'un demi degré cache un changement beaucoup plus grand que de passer de 23 à 23,5°C sur votre terrasse en été. Il s'agit d'une moyenne mondiale, été comme hiver, Antarctique comme Afrique, terre comme mer. Pour illustrer la différence entre ces températures, je vous conseille l'écoute de l'épisode du podcast Déclic le Tournant de la RTBF concernant la différence concrète entre un monde +1.5 et +2°C. Augmenter d'un demi degré, c'est passer d'un monde inconfortable à un monde instable.</p>
<p><a href="https://auvio.rtbf.be/media/declic-le-tournant-declic-le-tournant-un-monde-a-20-ca-ressemble-a-quoi-3025852">Un monde à +2° ça ressemble à quoi? | Déclic - Le Tournant RTBF</a></p>
<p>Si vous préférez un média visuel et interactif, rendez-vous sur My Climate Future. Sur ce site, vous pouvez faire des simulations, en fonction de votre année de naissance, de l'impact des changements climatiques.</p>
<p><a href="https://myclimatefuture.info/">MyClimateFuture : How will I experience climate change?</a></p>
<figure>
<a href="https://mart-e.be/images/2023/my-climate-change.png">"<img src="https://mart-e.be/images/2023/my-climate-change.png"/></a>
</figure>
<p>En faisant une simulation, on se rend vite compte que Alexander De Croo (1975) ou Emmanuel Macron (1977) vivant en Europe ressentiront assez peu l'impact du changement climatique de par leur âge. Que les actions prises nous mènent dans un monde à +1.5 ou +3.5°C importe peu. Par contre, à 35 ans, le dérèglement aura nettement plus d'impact sur moi : 8 fois plus de vagues de chaleur que la normale dans le meilleur des cas (+1.5°C). Mais surtout, ce risque augmente de 50% dans le scénario pessimiste (+3.5°C). Pour un jeune belge de 15 ans (<em>"oui c'est bien d'aller manifester mais tu devrais te concentrer sur tes études d'abord !"</em>), le risque varie du simple au double : entre 12 et 23 fois en fonction des actions prises. Pour une personne naissant en 2020 en Afrique subsaharienne, on parle de 37 à 67 fois plus de vagues de chaleur que la normale subsaharienne.</p>
<p>Je ne veux pas laisser tomber, pas parce que je suis optimiste sur l'avenir, je veux continuer parce que je veux un monde le plus viable possible, parce que je suis réaliste, parce que ça pourrait être pire.</p></content><category term="Uncategorized"></category><category term="humeur"></category><category term="écologie"></category></entry><entry><title>Et la tartiflette dans tout ça ?</title><link href="https://mart-e.be/2023/06/et-la-tartiflette-dans-tout-ca" rel="alternate"></link><published>2023-06-16T13:31:00+02:00</published><updated>2023-06-16T13:31:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-06-16:/2023/06/et-la-tartiflette-dans-tout-ca</id><summary type="html"><p>Le sous-titre de ce blog est "La vie, Linux, la tartiflette...". Les deux premiers, d'accord, mais elle est où la bouffe ? Réglons ça mes bon amis !</p>
<p>On va pas se …</p></summary><content type="html"><p>Le sous-titre de ce blog est "La vie, Linux, la tartiflette...". Les deux premiers, d'accord, mais elle est où la bouffe ? Réglons ça mes bon amis !</p>
<p>On va pas se la jouer blog culinaire qui raconte sa vie pendant une plombe avant la recette. On fera ça après.</p>
<p>Pour 4 personnes (ou 2 bons mangeurs):</p>
<ul>
<li>1kg de pomme de terre</li>
<li>300gr de pleurotes</li>
<li>200gr d'oignons</li>
<li>2 gousses d'ail</li>
<li>10cl de crème fraîche</li>
<li>1 reblochon</li>
<li>vin blanc, bière,...</li>
<li>fumée liquide</li>
</ul>
<p>La fumée liquide, c'est probablement très mauvais pour la santé, mais ça ajoute un goût fumé qui fait la différence. Sentez-vous libre de passer cette étape. Si vous êtes fan de thé, vous pouvez utiliser du <a href="https://fr.wikipedia.org/wiki/Lapsang_souchong">Lapsang Souchong</a> pour déglacer ou comme marinade pour les champignons.</p>
<ul>
<li>Pré-cuire les pommes de terre coupées (lamelles, cubes, qui suis-je pour juger ?) jusqu'à ce qu'elles soient <em>al-dente</em></li>
<li>Rissoler tous les légumes tranchés dans une grosse sauteuse avec peu de matière grasse</li>
<li>Déglacer avec du vin, bière ou autre liquide acide de votre choix (on a dit déglacer, pas mijoter)</li>
<li>Se remplir un verre avec le reste de la bouteille</li>
<li>Ajouter quelques gouttes de cancer/fumée liquide</li>
<li>Mélanger légumes et patates dans un plat</li>
<li>Verser de la crème</li>
<li>Ajouter sel, poivre</li>
<li>Découper 1/4 du reblochon en dés à répartir dans le plat; mettre les trois autres au-dessus, croûte visible</li>
<li>25min à 180°</li>
</ul>
<p>Peut, bien entendu, se décliner en croziflette avec des crozets au sarrasin à la place des patates pour embrasser encore plus la <em>savoyarde way of life</em>.</p>
<figure>
<a href="https://www.flickr.com/photos/field_museum_library/3409402811/"><img src="https://mart-e.be/images/2023/champignons.jpg"/></a>
</figure>
<p>Comme je l'ai laissé sous-entendre dans <a href="/2023/04/jai-change-davis">J'ai changé d'avis</a>, mes tartiflettes ne contiennent plus de lardons depuis quelques années. Ce plat est bien mieux que sa version avec de la viande parce que les légumes le rendent plus léger. Et si c'est plus léger, on peut en manger plus !</p>
<p>Comme vous êtes des gens bons, ce dernier paragraphe ne vous a pas ému plus que ça, tout au plus amené un peu de curiosité.</p>
<p>Vous ne faites certainement pas partie de ces jambons utilisant des phrases comme "<em>Fais ton plat avec des champignons si tu veux mais la vraie tartiflette, ça contient des lardons </em>!" ou "<em>Si vous [les végétariens] ne voulez plus manger de viande, pourquoi vous avez besoin de copier la viande ?</em>", non je ne peux le croire puisque mes lecteurs sont tous des gens très distingués.</p>
<p>J'emmerde royalement les gens qui placent l'adjectif "vrai" devant les noms de recette. La "vraie" bolognaise, les "vraies" carbonnades. Malgré son mauvais titre, allez lire cet article de Blick sur l'histoire des pâtes carbonara :</p>
<p><a href="https://www.blick.ch/fr/food/histoire-culinaire-desole-mais-la-vraie-carbonara-contient-de-la-creme-id18363291.html">Désolé, mais la vraie carbonara contient de la crème | Blick</a></p>
<blockquote>
<p>Finalement, imaginer la carbonara comme une recette ancestrale respectant le terroir et les circuits courts relève du fantasme.</p>
</blockquote>
<p>Contrairement à ce que suggère son titre, l'article montre qu'il n'y a pas de "vraie carbonara", il y a eu une série de recettes dont une, à un moment, contenait de la crème. Il est assez naïf de considérer les recettes de cuisine comme étant quelque chose de figé, sur lequel un groupe de personne s'est mis d'accord. Certaines recettes vont émerger à certains endroits à certains moments, mais elles vont évoluer. Ce fantasme d'un passé traditionnel où tout était mieux, jusque dans l'assiette, a des relents de droite conservatrice qui m'insupporte.</p>
<p>D'ailleurs, dans le cas de la tartiflette, on peut difficilement parler de tradition vu qu'elle n'existait pas il y a deux générations. C'est pas moi qui le dis, <a href="https://www.europe1.fr/culture/pourquoi-lincontournable-tartiflette-nest-pas-vraiment-un-plat-traditionnel-4021338">c'est Stéphane Bern</a> (si ça c'est pas une source fiable, je ne sais pas ce qu'il vous faut).</p>
<p>La cuisine c'est comme la langue (ah oui, j'emmerde aussi le "vrai" français et les vieux schnocks de l'Académie française), c'est vivant, ça change, chacun possède ses variantes et il serait prétentieux de clamer que notre version est plus authentique que celle de notre voisin. Rester dans le passé, c'est ne pas savoir évoluer. Attention, se renouveler, ce n'est pas non plus nier le passé, on n'innove que sur ce qui existe déjà. Les recettes d'aujourd'hui sont les erreurs de cuisine d'hier.</p>
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/32514316006/"><img src="https://mart-e.be/images/2023/peler-patates.jpg"/></a>
<figcaption>"Oh tu sais moi j'aime surtout les patates"</figcaption>
</figure>
<p>Est-ce que tout changement est un progrès et devient forcément une norme ? Bien sûr que non. Est-ce que ma recette est un progrès et deviendra une norme ? Je n'ai pas cette prétention.</p>
<p>&lt;!– Est-ce que l'on doit dire que Aya Nakamura représente l'avenir de la langue française ? J'espère que non (cf <a href="https://unodieuxconnard.com/2020/11/30/peut-on-dire-quaya-nakamura-cest-naze/">Peut-on dire qu’Aya Nakamura, c’est naze ?</a>). Libre à vous de considérer mon interprétation de la tartiflette au même niveau que l'interprétation de la langue française par Aya Nakamura. L'avenir nous dira lequel on retiendra (elle a un peu d'avance mais je ne perds pas espoir). --&gt;</p>
<p>Est-ce que dans deux générations, on dira "c'est pas mal cette tartiflette avec un fromage aux noix de cajou, ça change du traditionnel reblochon-pleurotes" ? Probablement pas, j'espère que l'on mettra moins de deux générations pour complètement végétaliser cette recette.</p></content><category term="Uncategorized"></category><category term="recette"></category><category term="végétarien"></category></entry><entry><title>Android: Can't downgrade database from version X to Y</title><link href="https://mart-e.be/2023/06/android-resoudre-cant-downgrade-database-from-version" rel="alternate"></link><published>2023-06-11T11:10:00+02:00</published><updated>2023-06-11T11:10:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-06-11:/2023/06/android-resoudre-cant-downgrade-database-from-version</id><summary type="html"><p>Il y a peu, j'ai changé l'OS installé sur mon smartphone, pour repasser de <a href="https://lineageos.org/">LineageOS</a> vers la version officielle de Fairphone OS. Si l'opération s'est globalement bien passée, j'ai perdu …</p></summary><content type="html"><p>Il y a peu, j'ai changé l'OS installé sur mon smartphone, pour repasser de <a href="https://lineageos.org/">LineageOS</a> vers la version officielle de Fairphone OS. Si l'opération s'est globalement bien passée, j'ai perdu l'accès à mes SMS. Lancer <a href="https://www.simplemobiletools.com/">Simple SMS</a> me retournait une erreur :</p>
<div class="highlight"><pre><span></span><code>android.database.sqlite.SQLiteExcepion:
Can&#39;t downgrade database from version 68 to 67
</code></pre></div>
<p>Le souci ne vient pas de l'application de SMS mais d'Android même. LineageOS fonctionnait avec une base de donnée <a href="https://sqlite.org/index.html">SQLite</a> à la version utilisateur 68. Fairphone OS fonctionne avec la version 67. En essayant d'accéder à la liste des messages, Android détecte l'incohérence de version et refuse de continuer.</p>
<p>Voici comment j'ai réussi à résoudre ce souci :</p>
<ol>
<li>Gagner un accès root sur le téléphone en installant <a href="https://github.com/topjohnwu/Magisk/">Magisk</a></li>
<li>Extraire la base de données. Vu que l'on ne peut pas utiliser <code>adb pull</code> sur un fichier protégé, il faut un peu ruser :
<pre>
$ adb shell; su
FP3:/# cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/mmssms.db
FP3:/# chown shell.shell /sdcard/mmssms.db
FP3:/# exit
$ adb pull /sdcard/mmssms.db</pre></li>
<li>Une fois le fichier récupéré, on confirme la version 68 et la change à la valeur voulue :
<pre>
$ file mmssms.db
mmssms.db: SQLite 3.x database, user version 68, last written using SQLite version 3028000, file counter 3639, database pages 213, cookie 0x31, schema 4, largest root page 24, UTF-8, version-valid-for 3639
$ sqlite3 mmssms.db
SQLite version 3.42.0 2023-05-16 12:36:15
Enter ".help" for usage hints.
sqlite&gt; PRAGMA user_version = 67; </pre></li>
<li>On renvoie maintenant le fichier modifié:
<pre>
$ adb push mmssms.db /sdcard/mmssms67.db
FP3:/# chown radio.radio /sdcard/mmssms67.db
FP3:/# cp /sdcard/mmssms67.db /data/data/com.android.providers.telephony/databases/mmssms.db</pre></li>
</ol>
<p>Le <a href="https://www.sqlite.org/pragma.html#pragma_user_version"><code>user_version</code></a> est une information arbitraire propre aux applications, non utilisée par SQLite. Si différence de schéma entre les deux versions il y a, je ne l'ai pas remarquée et la procédure ci-dessus m'a débloqué mon téléphone.</p>
<p>Ce problème était lié à la base de donnée de message, localisée dans <code>/data/data/com.android.providers.telephony/databases/mmssms.db</code>, mais une procédure similaire peut évidement être transposée à d'autres bases de donnée.</p>
<figure>
<a href="https://www.flickr.com/photos/library_of_congress/52579102547/"><img src="https://mart-e.be/images/2023/postier-neige.jpg"/></a>
</figure></content><category term="Uncategorized"></category><category term="android"></category></entry><entry><title>Du canapé à l'ultra-trail</title><link href="https://mart-e.be/2023/06/du-canape-a-lultra-trail" rel="alternate"></link><published>2023-06-03T10:25:00+02:00</published><updated>2023-06-03T10:25:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-06-03:/2023/06/du-canape-a-lultra-trail</id><summary type="html"><p>La semaine passée, j'ai couru un ultra-trail de plus de 100km en 14h.</p>
<p>Si la course à pied sur de longues distances est une de mes passions actuelles, quand je …</p></summary><content type="html"><p>La semaine passée, j'ai couru un ultra-trail de plus de 100km en 14h.</p>
<p>Si la course à pied sur de longues distances est une de mes passions actuelles, quand je sortais des études, je n'étais pas spécialement sportif. La combinaison d'un salaire régulier et de peu de frais fixes m'a amené à profiter de nouveaux loisirs sains tels que prendre un apéro tous les soirs ou manger à l'extérieur régulièrement. Si vous ajoutez à cela, une voiture de société (merci la Belgique et ses <a href="https://campagne.pac-g.be/">voiture-salaires</a>) et une vie sédentaire de développeur, très rapidement, j'avais pris 10kg.</p>
<figure>
<a href="https://unsplash.com/photos/4OBZRvL9v3Y"><img src="https://mart-e.be/images/2023/trail-running-forest.jpg"/></a>
</figure>
<h4>Commencer</h4>
<p>Un jour, un colocataire me propose d'aller courir dans le village, un petit tour de 8km. Je couperai avant la fin. Peu de temps après, <a href="/post/2015/01/16/garmin-vivofit-2-millions-de-pas-plus-tard">je m'achète un podomètre</a> et rejoins le club de course à pied du village. Je me lance un défi pendant quelques mois : ne boire que les jours où j'ai fait du sport. Je ne sais pas si ça a eu un gros impact sur ma consommation de bière, mais j'ai commencé à aller travailler en vélo. Et puis la pente fatale…</p>
<ul>
<li>Oui je cours, mais juste des joggings de temps en temps</li>
<li>J'ai réussi à faire les 20km de Bruxelles ! Pas facile les longues distances...</li>
<li>Ah c'est ça le trail ? Et on est supposé le faire en courant ?</li>
<li>Oui, je fais des trails maintenant, mais des courtes distances, pas comme un marathon</li>
<li>Objectif atteint : un marathon en moins de 4h ! Bon y a plein de gens qui font des marathons, c'est pas comme un ultra-trail</li>
<li>C'était difficile ce trail de 50km quand même</li>
<li>...</li>
</ul>
<p>À ce stade-là, je commençais à me connaître suffisamment pour savoir que je n'allais pas m'arrêter là…</p>
<p>On ne se lève pas un beau jour en se disant "si j'allais courir une centaine de kilomètres". On ne naît pas non plus avec un talent pour courir (ni pour écrire, dessiner, danser,...). Je n'ai jamais été le genre de personne à faire 15h de sport par semaine. Cependant, je cours régulièrement depuis 10 ans. Je fais en général 3 entraînements par semaine, rarement plus d'une heure et roule un peu à vélo. Est-ce que je progresserais plus en m’entraînant plus ? Certainement, mais ça reste un loisir, je veux garder un équilibre avec ma vie sociale. Et je n'ai toujours pas arrêté les apéros (sauf quelques semaines avant les courses). Si j'aime suffisamment courir pour ne pas devoir trop me forcer à sortir, continuer à progresser demande un effort sur le long terme. Avec le temps, les entraînements ont gagné en intensité (plus rapides, des accélérations en côte, etc.) mais peu en fréquence ou en durée. L'on va augmenter progressivement les objectifs, pousser la limite un peu plus loin à chaque fois. À la difficulté physique s'ajoute l'aspect psychologique : il serait tellement plus simple de continuer à faire 10km de temps en temps. Je continue à progresser mais jusque quand ?</p>
<p>Si améliorer ma vitesse reste un des objectifs (je suis maintenant à 1 min du marathon en moins de 3h), avec l'allongement des distances, le chrono est aussi devenu moins important. Le fait de faire mieux est une notion floue, chaque course vient avec sa distance, terrain et météo. S'ajoute toute une série de critères assez subjectifs : prendre du plaisir, admirer le paysage, mieux tolérer l'alimentation, avoir une meilleure récupération,… Dans le trail, la compétition est moins mise en avant, l'objectif est de se dépasser, pas de battre un concurrent.</p>
<h4>Into the Woods</h4>
<p>À force de faire des courses de plus en plus longues, j'ai participé à <a href="https://intothewoodstrail.weebly.com/">Into The Woods Trail</a>. C'est une petite (en organisation, pas en kilomètres) course familiale à Beauvechain. Le parcours consiste en une boucle d'un peu plus de 21km, départ samedi 10h du matin, gong de fin dimanche 10h du matin. Chacun est libre de faire autant de tours qu'il veut en 24h, en autonomie alimentaire. Chacun essaye de se surpasser à son rythme : certains décident de faire des pauses minimales, d'autres de dormir entre deux tours. On fait un signe à l'organisateur quand on part et quand on arrive pour qu'il note l'heure dans un tableur. Pas de puce GPS de suivi ou de chronométrage électronique, avec 36 participants, on est loin des grandes organisations.</p>
<figure>
<a href="https://unsplash.com/photos/bBzeK_IHmbk"><img src="https://mart-e.be/images/2023/night-forest-moon.webp"/></a>
</figure>
<p>Je me force à partir lentement, on est là pour la durée.
Premier tour en 2h16, encore un peu trop rapide. Après un quart d'heure de pause pour manger un morceau, je repars pour le deuxième. Au moment de remplir ma poche à eau, je remarque une fuite ! Heureusement, j'en ai une de rechange, il fait plus de 20° et je bois 1L-1,5L par tour. Pendant le deuxième tour, je discute avec un français. Il est venu en Belgique juste pour cette course. Il y avait déjà participé l'an passé mais avait dû abandonner suite à un problème digestif, les organisateurs l'avaient hébergé le temps qu'il se remette.
Second tour en 2h25, mieux. Après l'équivalent d'un marathon, les jambes chauffent et les muscles commencent à se faire sentir. Une tartine et quelques pâtes plus tard, on repart. À 6km de la fin, j'essaye de boire dans ma poche à eau pour constater… qu'elle est vide ! Dans la précipitation, je n'ai pas bien vérifié et ne l'avait remplie que d'un litre. J'ai heureusement bien bu jusque là, je peux finir mon tour à sec sans risquer la déshydratation. À la fin du troisième tour (2h30), je change de paire de chaussures pour une paire plus ample, pour éviter de trop martyriser mes orteils par les chocs répétés dans les descentes. Une plus longue pause plus tard (1/2h), j'entame la boucle des 80km, non sans avoir vérifié deux fois ma réserve d'eau. Ce sera la boucle la plus difficile, je suis tout seul quasiment tout le long, les kilomètres se suivent et se ressemblent. Je commence à bien connaître ce parcours, le moral en prend un coup. À l'arrivée, mon entraîneur m'attend. On discute un peu en mangeant et on part à deux pour le cinquième tour. Je suis troisième au classement temporaire. On passera tout le tour seuls, sans croiser personne. À ce moment, la nuit tombe et l'on doit rapidement allumer nos lampes. C'est agréable de faire un tour accompagné, le temps passe plus vite. Arrivé au camp de base, il est passé minuit, les ⅔ des participants ont déjà arrêté et je croise juste les organisateurs en train de regarder la TV. Si le tour accompagné a fait du bien au moral, je décide quand même d'en rester là, après 108km et 14h20, record battu.</p>
<p>J'aurais probablement pu arracher un tour de plus mais aurais fini dans la douleur. Il faut encore replier la tente et conduire jusque la maison. Et puis, c'est ça aussi la difficulté de cette course : à chaque tour, on s'interroge si l'on re-signe pour 3 heures d'effort. Il est si facile d'arrêter à tout moment. En paix avec ma conscience et non moins soulagé, je signale la fin aux organisateurs. Une médaille et une poignée de main plus tard, je me retrouve à nouveau seul. On est loin des bruyants marathons urbains. Il est passé deux heures du matin quand je m'effondre dans mon lit. Demain, mes muscles me feront payer ce que je leur ai infligé. Il n'est pas l'heure pour penser à ça ou à la suite.</p>
<figure>
<img src="https://mart-e.be/images/2023/medaille.webp"/></a>
</figure></content><category term="Uncategorized"></category><category term="sport"></category><category term="trail"></category></entry><entry><title>Pelican : migrer rapidement, corriger plus tard</title><link href="https://mart-e.be/2023/05/pelican-release-early" rel="alternate"></link><published>2023-05-31T07:53:00+02:00</published><updated>2023-05-31T07:53:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-05-31:/2023/05/pelican-release-early</id><summary type="html"><p>Un aspect qui m'a grandement aidé dans ma migration de Wordpress à Pelican est de suivre le principe de <a href="https://fr.wikipedia.org/wiki/Release_early,_release_often">Release Early, Release Often</a> et de migrer rapidement.</p>
<p>J'avais déjà prévu …</p></summary><content type="html"><p>Un aspect qui m'a grandement aidé dans ma migration de Wordpress à Pelican est de suivre le principe de <a href="https://fr.wikipedia.org/wiki/Release_early,_release_often">Release Early, Release Often</a> et de migrer rapidement.</p>
<p>J'avais déjà prévu une migration vers un site statique par le passé. J'ai testé plusieurs logiciels, je me suis plongé dans la conversion de mes posts Wordpress et puis… finalement rien faire.</p>
<p>Finalement, un beau jour j'ai résolu plusieurs points :</p>
<ul>
<li>avoir un thème basique qui me plaît</li>
<li>migrer le contenu des articles précédent</li>
<li>ne pas (trop) casser les anciennes URL</li>
</ul>
<p>J'ai pris un week-end pour faire ça et <a href="/2023/04/migration-de-wordpress-a-pelican">j'ai migré</a>.</p>
<p>J'avais pourtant toute une série de soucis :</p>
<ul>
<li>mon <a href="/feed">flux RSS</a> était cassé (corrigé)</li>
<li>pas de page 404 (TODO)</li>
<li>perdu les commentaires (finalement <a href="https://mamot.fr/@mart_e/110286423132200148">pas si important</a>)</li>
<li>anciens articles mal migrés (corrigés, je pense)</li>
<li>adapter le thème à mes besoins (en cours)</li>
</ul>
<p>Mon site est un petit blog sans la prétention d'être parfait. Si j'avais attendu de résoudre tous ces points, je n'aurais jamais migré et je n'aurais pas publié 4 articles depuis la migration.</p>
<figure>
<a href="https://www.flickr.com/photos/floridamemory/3307562180/"><img src="https://mart-e.be/images/2023/pelican-sea.webp"/></a>
</figure></content><category term="Uncategorized"></category><category term="pelican"></category></entry><entry><title>Les passkeys, une bonne idée trop centralisée</title><link href="https://mart-e.be/2023/05/les-passkeys-une-bonne-idee-trop-centralisee" rel="alternate"></link><published>2023-05-18T06:58:00+02:00</published><updated>2023-05-18T06:58:00+02:00</updated><author><name>mart</name></author><id>tag:mart-e.be,2023-05-18:/2023/05/les-passkeys-une-bonne-idee-trop-centralisee</id><summary type="html"><p>On a vu récemment fleurir plusieurs articles vantant les passkeys comme le remplacant tant attendu des mots de passe.</p>
<p><a href="https://arstechnica.com/information-technology/2023/05/passwordless-google-accounts-are-easier-and-more-secure-than-passwords-heres-why/">Google passkeys are a no-brainer. You’ve turned them on, right …</a></p></summary><content type="html"><p>On a vu récemment fleurir plusieurs articles vantant les passkeys comme le remplacant tant attendu des mots de passe.</p>
<p><a href="https://arstechnica.com/information-technology/2023/05/passwordless-google-accounts-are-easier-and-more-secure-than-passwords-heres-why/">Google passkeys are a no-brainer. You’ve turned them on, right? | Ars Technica</a></p>
<p><a href="https://www.nextinpact.com/article/70598/que-sont-passkeys-comment-on-sen-sert">Que sont les passkeys, comment on s'en sert ? | Nextinpact</a></p>
<p><a href="https://www.frandroid.com/marques/google/1685025_comment-configurer-une-cle-dacces-passkey-sur-votre-compte-google-pour-en-finir-avec-les-mots-de-passe">Comment configurer une clé d’accès (passkey) sur votre compte Google pour en finir avec les mots de passe | Frandroid</a></p>
<p>Les passkeys sont le résultat d'une recherche avec la <a href="https://fr.wikipedia.org/wiki/Alliance_FIDO">FIDO Alliance</a>, à qui l'on doit déjà <a href="https://fr.wikipedia.org/wiki/WebAuthn">WebAuthn</a>, l'API dans les navigateurs permettant d'utiliser une clef physique (<a href="https://www.yubico.com/">YubiKeys</a> &amp; co). La FIDO Alliance <a href="https://fidoalliance.org/members/">est constituée</a> des gros noms de la tech Microsoft, Apple, Google, Amazon, etc. (mais pas que), se regroupant pour se débarrasser des méchants mots de passe.</p>
<h3>La situation</h3>
<p>Pour se connecter au site, on demande habituellement un mot de passe, une <em>chose que l'on sait</em>. La connaissance d'une information que seul moi connaisse implique que je suis bien qui je prétends, le propriétaire du compte, c'est une preuve d'<em>authentification</em> (à ne pas confondre avec <em>identification</em>).</p>
<p>Seulement, pour que cela soit valable, il faut avoir des mots de passe compliqués, longs et différents pour chaque site. C'est difficile: il faut les noter quelque part, on se les fait voler, ils sont compromis en cas de fuite de données, etc. De plus, on n'est pas à l'abris du phishing: faites une copie ressemblante d'un site, dans la confusion, on s'authentifie auprès d'un site malveillant et l'on compromet notre <em>chose que l'on sait</em>.</p>
<figure>
<a href="https://www.loc.gov/pictures/item/2003654787/"><img src="https://mart-e.be/images/2023/treasure-chest.jpg"/></a>
<figcaption>Retrouver un vieux mot de passe dans son password manager</figcaption>
</figure>
<p>Vu que la <em>chose que l'on sait</em> n'était pas suffisante pour une authentifiaction fiable, est arrivée l'<a href="https://fr.wikipedia.org/wiki/Double_authentification">authentification à deux facteurs</a> (ou <em>2FA</em>). On demande également une <em>chose que l'on possède</em>. Elle a en général la forme d'un code temporaire généré par un programme installé sur son smartphone ou reçu par SMS. La sécurité est augmentée car seul moi possède la chose qui me permet de générer ce code (le programme ou ma carte SIM). Se faire voler son mot de passe (car il est trop court, réutilisé,...) n'est plus suffisant pour accès au compte. Par contre, cela ajoute de la complexité : en plus du mot de passe, il faut ouvrir un programme spécifique, retaper le code, etc. Et on est toujours pas à l'abris du phishing en donnant ce code temporaire de bonne foi à un site malveillant.</p>
<p>Les clefs de sécurité U2F/WebAuthn sont une variante de la <em>chose que l'on possède</em>. Au lieu de retaper un code, l'on insère une clef usb et la connexion est automatique. C'est une amélioration de sécurité car on lutte maintenant contre le phishing. La clef étant configurée pour un domaine spécifique, si j'essaye de m'authentifier par erreur sur <code>mart-ǝ.be</code> alors que WebAuthn est configuré pour <code>mart-e.be</code>, ma clef ne fonctionnera simplement pas, elle n'a pas été configurée pour ce domaine. C'est mieux mais ça reste un deuxième facteur, une étape de plus après le maudit mot de passe.</p>
<p>Les passkeys proposent une solution alternative qui veut offrir un moyen d'authentification sécurisé, résistant au phishing et facile d'utilisation, le tout sans utiliser de mot de passe. Après des années de recherche, ça y est, les passkeys commencent à être déployées chez Google, Apple, Microsoft et autres. Comment ont-ils réussi ce miracle ? En utilisant le smartphone et la biométrie.</p>
<p>Si l'on ne peut pas faire confiance à l'humain pour la <em>chose que l'on sait</em>, c'est maintenant la <em>chose que l'on possède</em> (un smartphone) qui va nous authentifier via biométrie (<em>chose que l'on est</em>). Lorsque vous vous voulez vous identifier depuis votre PC sur un site connu, vous recevez une notification sur votre smartphone vous demandant de confirmer via un scan de votre doigt ou visage. Les requêtes d'authentification sont validées depuis l'appareil uniquement, sans jamais envoyer de mot de passe ou code pouvant être intercepté. On évite le phishing ou la fuite de mot de passe tout en garantissant une grande sécurité.</p>
<p>Seulement, malgré l'enthousiasme des différents médias, ça sera non pour moi.</p>
<h3>Je déteste les smartphones.</h3>
<ul>
<li>C'est un mauvais ordinateur</li>
<li>Il coûte cher</li>
<li>Il a une durée de vie ridicule (dépasser les 3 ans est considéré comme exceptionnel)</li>
<li>C'est un gaspillage de ressources (cf point précédent)</li>
<li>Il fonctionne mal (surtout quand on essaye de le garder plus de 3 ans)</li>
<li>On n'est pas libre de l'utiliser comme on le souhaite (Android fait vaguement mieux qu'iOS mais sans plus)</li>
<li>C'est un espion dans votre poche</li>
<li><a href="https://www.journals.uchicago.edu/doi/epdf/10.1086/691462">Il rend con</a></li>
</ul>
<p>Je déteste que l'on soit obligé d'en posséder un (pour communiquer, pour payer son parking,...). Je déteste devoir m'interrompre en étant sur mon PC pour sortir mon téléphone (reproche que l'on peut également faire au 2FA).</p>
<p>Étrangement, je ne suis pas d'accord avec le fait que la sécurité de mes comptes ne dépende plus que d'un appareil auquel j'accorde autant de confiance qu'à la promesse d'un politicien...</p>
<h3>Je déteste la biométrie.</h3>
<p>Cet argument est encore plus subjectif que le précédent.</p>
<p>Pourquoi suis-je plus mal à l'aise à l'idée de donner mes empreintes digitales que de montrer mon passeport quand je rentre dans un pays démocratiquement discutable ? Parce que je ne sais pas ce qu'ils vont en faire. Parce que ça touche à mon identité.</p>
<p>La biométrie implique des données hautement personnelles. Si votre nom, date de naissance, etc. sont privés, les données biométriques le sont encore plus. Elles identifient votre personne, sans retenue ou possibilité de mentir. Via les passkeys (made in Google/Apple), on remplace la <em>chose que l'on sait</em> par la <em>chose que l'on est</em>. La nuance n'est pas négligeable. Authentification et identification se mélangent.</p>
<figure>
<a href="https://flic.kr/p/EhPFf4"><img src="https://mart-e.be/images/2023/fingerprint.jpg"/></a>
</figure>
<p>Les promoteurs vous diront que les données biométriques ne quittent jamais l'appareil. Quelles sont stockées dans la <a href="https://fr.wikipedia.org/wiki/Trusted_Platform_Module">puce TPM</a> et impossibles à extraire. Quelles ne sont pas liées à votre identité. Que le fichage n'est pas possible. Ils sont certainement de bonne foi mais tout comme l'étaient tous les gens vantant un système inviolable qui s'est avéré vulnérable. La différence avec une faille de sécurité classique est que l'on peut changer son mot de passe ou autre clef compromise. Pas avec la biométrie.</p>
<p>Je n'ai aucune envie d'utiliser une donnée aussi sensible auprès d'une société dans laquelle je n'ai aucune confiance, malgré toutes leurs promesses.</p>
<h3>Mettre tous ses oeufs numériques dans le même e-panier</h3>
<p>Régulièrement, l'on voit passer des articles de personnes s'étant fait bannir du jour au lendemain par Google. Ces personnes ne savent souvent pas ce qu'on leur reproche (Google ne le précise pas) et ils perdent soudainement l'accès à une grande partie de leur vie numérique sans moyen d'opposition. Photos, documents professionnels, emails, calendriers, contacts, notes,...</p>
<p><a href="https://www.businessinsider.com/google-users-locked-out-after-years-2020-10?r=US&amp;IR=T">What it's like to get locked out of Google indefinitely | Business Insider</a></p>
<p>Je ne me moque pas de ces gens avec des "on vous l'avait bien dit". C'est au contraire à force d'articles type "Confiez X à Google, ils ont un super produit" que l'on se retrouve dans ce genre de situation. C'est la responsabilité des Ars Technica qui aiment troquer la résilience pour la praticité.</p>
<p>Et maintenant, grâce aux passkeys, vous pouvez rajouter le risque de perdre l'accès aux comptes non-google ? Non merci. C'est également pour cette raison que je n'utilise pas les méchanismes <a href="https://fr.wikipedia.org/wiki/OAuth">OAuth</a> "Sign in with Google", malgré leur aspect pratique non discutable. </p>
<h3>Et donc, on jette tout ?</h3>
<p>Pas forcément. La situation que j'ai décrite est l'état actuel de la techno poussée par les deux mastodontes que sont Google et Apple. Le concept de passkeys pour se débarasser des mots de passe est très intéressant. Retirer le facteur humain de la détection des sites de phishing est une très bonne chose et oui, les mots de passe sont un maillon faible de la sécurité.</p>
<p>Seulement, je ne pourrais recommander une solution qui implique de se lancer, une fois encore, tête baissée chez les GAFAMs. Les environnements de passkeys Google et Apple ne sont, par exemple, pas encore interopérables ; passer d'un téléphone Android à iOS s'avère difficile.</p>
<p>D'ailleurs, le support est <a href="https://passkeys.dev/device-support/">encore très basique sous Linux</a>. Une technologie ne doit pas être disponible sous Linux pour être mature (quoi que...) mais c'est un bon signe qu'elle est encore l'apanage des grands groupes. En attendant, je continuerai à utiliser un password manager et du deux facteurs.</p>
<p>Différents password managers comme 1Password, Dashlane ou Bitwarden ont prévu de proposer une solution de passkeys. On aura alors des acteurs indépendants qui proposeront des implémentations différentes avec plus de choix, et on l'espère, plus d'interopérabilité. Est-ce qu'ils proposeront autre chose que la biométrie ? On attend aussi des implémentations open source sous Linux.</p>
<p>Et pour conclure, je vous laisse avec cet article de Ars Technica qui répond à tous les reproches qu'ils se sont pris dans leur article mentionné en introduction et qui confirment que ce n'est pas pour moi.</p>
<p><a href="https://arstechnica.com/information-technology/2023/05/passkeys-may-not-be-for-you-but-they-are-safe-and-easy-heres-why/">Passkeys may not be for you, but they are safe and easy—here’s why | Ars Technica</a></p>
<p><em>Mise à jour 2024 : Proton patage les mêmes inquétudes que moi sur la centralisation (pour mieux vendre sa solution) :</em></p>
<p><a href="https://proton.me/blog/big-tech-passkey">Big Tech passkey implementations are a trap</a></p></content><category term="Uncategorized"></category><category term="securite"></category><category term="passkeys"></category><category term="google"></category></entry></feed>
If you would like to create a banner that links to this page (i.e. this validation result), do the following:
Download the "valid Atom 1.0" banner.
Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)
Add this HTML to your page (change the image src
attribute if necessary):
If you would like to create a text link instead, here is the URL you can use:
http://www.feedvalidator.org/check.cgi?url=https%3A//mart-e.be/feed