<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>@bnjbvr</title>
    <subtitle>Technical blog and random musings.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://bouvier.cc/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://bouvier.cc"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-03-30T00:00:00+00:00</updated>
    <id>https://bouvier.cc/atom.xml</id>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #70</title>
        <published>2026-03-30T00:00:00+00:00</published>
        <updated>2026-03-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w13/"/>
        <id>https://bouvier.cc/notes/2026-w13/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w13/">&lt;p&gt;La recherche dans ElementX, la France est-elle vraiment de droite, Multiamory : le livre, le petit Web est plus grand que tu le crois, et le Polly Pocket Shuffle.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;Element&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt; : Nous avons fait une sorte de &lt;em&gt;hackathon&lt;&#x2F;em&gt; interne dans l’entreprise, et bien que cela m’ait épuisé, j’ai beaucoup apprécié d’être complètement plongé, dans un tunnel, en état de &lt;em&gt;flow&lt;&#x2F;em&gt;, bref, À DONF, pendant quelques jours, sur un mini projet. J’ai implémenté une preuve de concept de recherche de messages dans ElementX, à l’occasion, qui marche plutôt pas mal ! Voyez-vous même dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Bo7GaLRhtc0&quot;&gt;cette vidéo&lt;&#x2F;a&gt; qui montre tous les travaux créés par les différent·es employé·es (MA I’M THE COVER IMAGE), ou directement &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Bo7GaLRhtc0?si=wiPVl91NHM1BQcDO&amp;amp;t=740&quot;&gt;mon intervention&lt;&#x2F;a&gt; (où je commence par un cours magistral à haute voix, ce qui a rendu tout le monde confus, pensant que je n’avais pas partagé de slides 😂).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini toutes les saisons de &lt;em&gt;Lovesick&lt;&#x2F;em&gt;, dont je parlais récemment dans ces même notes. Eh bien, j’avais été charmé par la première saison, je ressors un peu moins charmé par la dernière. Beaucoup de tropes romantiques à la con qui m’ont un peu refroidi, même si j’ai grandement apprécié le côté &lt;em&gt;réaliste&lt;&#x2F;em&gt; de la série, notamment les échecs de communication, les réalisations par les personnages de leurs travers et pourtant sans réussir à s’en sortir. Mes awards vont à Abigail, personnage avec la communication la plus saine ; et Luke, personnage dont la progression est la plus intéressante lors de la série, et de loin ! On sent une ouverture pour une saison suivante, qui visiblement n’arrivera pas (la série semble s’être arrêtée en plein vol), ce qui me laisse un peu sur ma faim.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai vu &lt;em&gt;Project Hail Mary&lt;&#x2F;em&gt; (« Projet Dernière Chance », paye ta traduction pourrave) au cinéma, et… Je suis moins enthousiaste que la plupart des gens. Je m’attendais à du &lt;em&gt;science porn&lt;&#x2F;em&gt;, comme dans &lt;em&gt;Seul sur Mars&lt;&#x2F;em&gt; (du même auteur Andy Weir), et au final, j’ai l’impression d’avoir regardé plutôt une comédie Marvel où Ryan Gosling serait resté dans son rôle de &lt;em&gt;Ken&lt;&#x2F;em&gt; dans Barbie. Fun, mais pas ouf.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=pHHUYwbf5o8&quot;&gt;La France est-elle vraiment à droite ?&lt;&#x2F;a&gt; demande Blast, et le sociologue analytique Tiberj répond : pas tant qu’on le croit, si on observe des sondages sur les mœurs par exemple. Des éclairages qui remettent un peu de baume au cœur, après cette période électorale un peu déprimante.&lt;&#x2F;li&gt;
&lt;li&gt;Découvert la chaîne Youtube de &lt;em&gt;Bread on Penguins&lt;&#x2F;em&gt;, où l’hôtesse nous parle de ses &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=mRT31iYaWOw&quot;&gt;outils favoris&lt;&#x2F;a&gt;, notamment. J’adore son flow très rapide et ses petites démonstrations, et j’ai découvert plusieurs outils sympas à intégrer dans mon usage au quotidien.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé la BD « Les beaux étés », de Zidrou et Lafebre, des feuilletons sur la vie d’une famille belge qui part en vacances dans le sud de la Fronce. Bon, je ne suis pas fan, ça ne me touche pas vraiment, mais j’imagine qu’il y a un public pour ça.&lt;&#x2F;li&gt;
&lt;li&gt;Commencé le livre &lt;em&gt;Multiamory&lt;&#x2F;em&gt;, écrit par Lindgren, Winston et Sotelo Matlak, du podcast éponyme. Croyant lire un livre qui allait parler de polyamour, je découvre en fait un livre sur la communication dans les relations (amoureuses ou non), qui est extrêmement raisonnable et nuancé, et pas du tout spécifique au polyamour. J’adore, jusque là !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kevinboone.me&#x2F;small_web_is_big.html&quot;&gt;The “small web” is bigger than you might think&lt;&#x2F;a&gt; : les blogs personnels des gens reprennent assez d’activité pour que ce soit impossible de lire tous les contenus créés au fur et à mesure qu’ils apparaissent 😎&lt;&#x2F;li&gt;
&lt;li&gt;Des réflexions sur les IAs et les LLMs, en vrac :
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tut-tuuut.github.io&#x2F;2026&#x2F;03&#x2F;27&#x2F;des-verbes.html&quot;&gt;Des Verbes&lt;&#x2F;a&gt;, une réflexion personnelle de Tutut sur ce qui lui plaisait dans le métier de dev, et qui est en train de se predre. J’ai trouvé ça très joliment écrit, et très pertinent ! Pour autant, du mal à m’y retrouver, étant en télétravail depuis mon début de carrière je me rends compte que j’ai rarement créé de lien autour du code, au niveau professionnel.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mariozechner.at&#x2F;posts&#x2F;2026-03-25-thoughts-on-slowing-the-fuck-down&#x2F;&quot;&gt;Thoughts on slowing the fuck down&lt;&#x2F;a&gt;, qui appelle à un usage minimal des LLMs pour le code, parce qu’on perd en contrôle&#x2F;autonomie (&lt;em&gt;agency&lt;&#x2F;em&gt;) avec ces fameux agents programmatiques.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;third-bit.com&#x2F;2026&#x2F;03&#x2F;08&#x2F;cognitive-pollution&#x2F;&quot;&gt;Cognitive Pollution&lt;&#x2F;a&gt; : un regard qui me semble pragmatique sur l’impact des IAs dans notre société, avec un avertissement sain qu’on ne comprendra &lt;em&gt;bien&lt;&#x2F;em&gt; les conséquences de ces technologies que d’ici quelques années. Une citation choisie :
&lt;ol&gt;
&lt;li&gt;AI is useful.&lt;&#x2F;li&gt;
&lt;li&gt;It is already causing harm.&lt;&#x2F;li&gt;
&lt;li&gt;Saying “just don’t use it” isn’t going to have any more effect than saying “just don’t fly” (or preaching abstinence to teenagers).&lt;&#x2F;li&gt;
&lt;li&gt;The people driving the AI goldrush have proven that they don’t care about anything except adulation and profit.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nolanlawson.com&#x2F;2026&#x2F;03&#x2F;22&#x2F;the-diminished-art-of-coding&#x2F;&quot;&gt;The diminished art of coding&lt;&#x2F;a&gt;, où Nolan Lawson continue d’écrire sur son deuil du code comme artisanat, et où il propose de chercher la performance artistique &lt;em&gt;en dehors&lt;&#x2F;em&gt; du développement logiciel.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.xda-developers.com&#x2F;wine-11-rewrites-linux-runs-windows-games-speed-gains&#x2F;&quot;&gt;Wine 11 rewrites how Linux runs Windows games at the kernel level, and the speed gains are massive&lt;&#x2F;a&gt; : l’émulateur de jeux vidéo Wine, sur lequel est basé Proton (et toute la plateforme Steam sous Linux, dont le Steam Deck), sort en version majeure avec plein de nouveautés qui vont améliorer les performances DE OUF. Hâte d’en voir les effets sur Steam 🤩&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=xaGNhFtjaHk&quot;&gt;All the things she said (t.A.T.u), version orchestrale&lt;&#x2F;a&gt; 🤩&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=p_ehywVXZos&quot;&gt;Sabrina Carpenter — Espresso, chanté par tout plein de films&lt;&#x2F;a&gt; 😎&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=qG6Oqna8Py0&quot;&gt;Je survivrai&lt;&#x2F;a&gt;, une reprise Bardcore en français, de I Will Survive de Gloria Gaynor 😁&lt;&#x2F;li&gt;
&lt;li&gt;J’ai commencé à reprendre « All by myself » au piano (version arrangée dans Pianorama 5ème année), et… c’est dur ! Mais très plaisant à jouer, très épique.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Tatayoyoh&#x2F;deezer-tui&quot;&gt;deezer-tui&lt;&#x2F;a&gt;, un lecteur audio en TUI pour écouter Deezer. Écrit par un LLM, mais ça semble bien marcher…&lt;&#x2F;li&gt;
&lt;li&gt;En ce moment je suis un peu curieux de lire les différentes politiques (&lt;em&gt;policies&lt;&#x2F;em&gt;) des entreprises ou mouvements open-source quant à l’usage des LLMs pour le code. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rfd.shared.oxide.computer&#x2F;rfd&#x2F;0576&quot;&gt;Celle d’Oxide&lt;&#x2F;a&gt;, par exemple, me semble très nuancée. Celle de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ghostty-org&#x2F;ghostty&#x2F;blob&#x2F;main&#x2F;AI_POLICY.md&quot;&gt;Ghostty&lt;&#x2F;a&gt; comprend une clause explicite de ne pas générer d’art par IA 💯&lt;&#x2F;li&gt;
&lt;li&gt;Des gens ont commencé à faire &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;small-hack&#x2F;open-slopware&quot;&gt;une liste de logiciels qui utilisent du code généré par IA&lt;&#x2F;a&gt;, ou tolèrent le code généré par IA. J’ai du mal à cerner l’intérêt, étant donné que tous les OS majeurs et tous les navigateurs majeurs (Firefox y compris, oui oui) incluent désormais du code généré par IA. Sans vouloir baisser les bras trop vite, un certain pragmatisme me fait penser que ça devient inévitable d’utiliser des logiciels qui ont utilisé de l’IA lors de leur fabrication (cf les exemples ci-dessus), et que les recommendations d’alternatives peuvent au mieux relever de &lt;em&gt;virtue signaling&lt;&#x2F;em&gt; (« regardez comme moi je suis pur ! i am very intelligent! »), voire pire, être dangereuses (utiliser des versions plus anciennes peut compromettre la sécurité des utilisateur·ices).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;TESCREAL&quot;&gt;TESCREAL&lt;&#x2F;a&gt; est un acronyme qui désigne plus finement toute la clique de la Silicon Valley, avec des qualificatifs plus précis que « tech bro ». Effrayant de voir cette convergence de mouvements et de pensées.&lt;&#x2F;li&gt;
&lt;li&gt;Le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=r444q63EIuk&quot;&gt;Polly Pocket Shuffle&lt;&#x2F;a&gt;, un petit mouvement de danse hyper stylé.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aidesfrance.com&#x2F;&quot;&gt;Aides France&lt;&#x2F;a&gt; est un simulateur qui vous indique toutes les aides auxquelles vous avez droit, en fonction de plein de paramètres. Super chouette pour aider à éviter le non-recours aux aides, plus de 10 milliards d’euros par an !!&lt;&#x2F;li&gt;
&lt;li&gt;Un site avec plein d’instructions de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.foldnfly.com&#x2F;58.html#Arrowhead&quot;&gt;modèles d’avions en papier à plier soi-même&lt;&#x2F;a&gt;. Dingo.&lt;&#x2F;li&gt;
&lt;li&gt;La &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Maison_des_Babayagas&quot;&gt;Maison des Babayagas&lt;&#x2F;a&gt; est une anti-maison de retraite, avec une portée féministe, tenue par des femmes, pour des femmes. Une alternative chouette aux EHPADs et autres mouroirs, ça fait plaisir 😊&lt;&#x2F;li&gt;
&lt;li&gt;Les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Queerplatonic_relationship&quot;&gt;relations queerplatonic&lt;&#x2F;a&gt; sont des relations intimes et engagées entre des partenaires qui n’ont pas de liens romantiques ou sexuels, comme une amitié très proche mais avec un investissement émotionnel beaucoup plus marqué.&lt;&#x2F;li&gt;
&lt;li&gt;Désuet : le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.geekcode.xyz&#x2F;geek.html&quot;&gt;Code Geek&lt;&#x2F;a&gt; était un encodage de certaines caractéristiques personnelles dans sa signature email, utilisée sur usenet et d’autres forums plus anciens. En quelques lettres, on pouvait indiquer si on était plutôt fan d’Emacs, plutôt de gauche ou de droite, etc. Bien que certaines descriptions me semblent tellement clichés qu’elles en sont problématiques, l’idée me semble bonne pour se décrire rapidement et retrouver rapidement ses pairs (mais attention à ne pas créer de barrières futiles).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #69</title>
        <published>2026-03-16T00:00:00+00:00</published>
        <updated>2026-03-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w10/"/>
        <id>https://bouvier.cc/notes/2026-w10/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w10/">&lt;p&gt;Les libertariens aux US, ce que fait l’IA générative aux luttes sociales, la sociologie de la voiture, l’inexistant racisme anti-blanc, les hommes trans sont-ils des salauds comme les autres, &lt;em&gt;Neon White&lt;&#x2F;em&gt; et le retour de la Grande Sécu.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Voici deux semaines d’un coup et j’ai aussi un petit peu changé ma manière de conserver mes liens donc j’ai un petit peu plus de choses à dire sur chacun des liens. Autant vous dire que ça m’a pris un peu plus d’une heure d’écrire ces notes. Vous comprendrez aisément pourquoi je n’arrive pas toujours à soutenir le rythme hebdomadaire… 😁&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.m6.fr&#x2F;enquete-exclusive-p_831&#x2F;ni-taxes-ni-etat-qui-sont-ces-libertariens-qui-revolutionnent-lamerique-c_13142182&quot;&gt;Un documentaire de M6 sur les libertariens aux États-Unis&lt;&#x2F;a&gt; (sur m6 replay, il faut un login et mot de passe mais le site accepte les adresses email &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;yopmail.com&#x2F;&quot;&gt;Yopmail&lt;&#x2F;a&gt; 😇). C’est complètement effrayant ce mode de pensée et c’est vraiment la convergence de l’ultra-libéralisme, du capitalisme, et de l’individualisme. À noter qu’il y a quand même beaucoup de mecs blancs riches, issus du milieu de la tech, dans cette histoire, j’ai l’impression.&lt;&#x2F;li&gt;
&lt;li&gt;Sur le sujet des actions individuelles vs des changements collectifs (sociétaux, ou induits politiquement via la régulation), &lt;em&gt;Philoxime&lt;&#x2F;em&gt; nous propose &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;F7YlkbhYq3s&quot;&gt;une contre-argumentation que les actions individuelles ne sont pas &lt;em&gt;si vaines&lt;&#x2F;em&gt; qu’elles en ont l’air&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Hy7lizsGUOA&quot;&gt;The gender wars are out of control&lt;&#x2F;a&gt; : &lt;em&gt;Alice Cappelle&lt;&#x2F;em&gt; nous parle du &lt;em&gt;hack&lt;&#x2F;em&gt; du site de rencontres pour suprématistes blancs (et je ne marque pas « blanc·hes » pour une raison 😇), puis debunk des théories mascus comme quoi les meufs seraient trop compliquées en termes de rencontres amoureuses. Gloire au Power Rangers rose !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;9FFI9bwYuK0?&quot;&gt;La philosophie morale dans la série &lt;em&gt;The Good Place&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; : un bon petit rappel des cours de philosophie morale, et ça me donne GRAVE ENVIE de re-regarder cette série incroyable 🥰&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre par hasard la chaîne de Naya Ali, qui vulgarisait beaucoup l’anti-racisme il y a déjà 7 ans ! Notamment la série Kesak Oh, en format très court, m’a beaucoup plu : ça commence par le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;TM-tfpDDZWE&quot;&gt;&lt;em&gt;whitewashing&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, et je ne peux que recommander fortement l’épisode sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;b89Z1BtZyNw&quot;&gt;« racisme anti-blanc »&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Une vidéo de sociologie sur l’usage de la voiture et les luttes de classes qui s’articulent autour, en France. C’est passionnant et bien plus nuancé que ce que le titre, volontairement alpagueur, suggère : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;tR6aujaUh_g&quot;&gt;Avoir une voiture, est-ce forcément de droite ?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Je n’avais pas entendu parler de Luc Julia, prétendu « co-inventeur de Siri », mais &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;e5kDHL-nnh4&quot;&gt;cette vidéo de &lt;em&gt;debunk&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; par Mr Phi m’a permis de découvrir l’égo monstre du personnage en question. Si un jour, vous ressentez le syndrôme de l’imposteur, pensez à prendre un centième de l’égo de Luc Julia pour vous rassurer. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;monsieurphi.com&#x2F;2025&#x2F;08&#x2F;22&#x2F;luc-julia-a-t-il-menti-les-temoignages-des-co-fondateurs-de-siri-vs-les-declarations-de-luc-julia&#x2F;&quot;&gt;Petit article supplémentaire&lt;&#x2F;a&gt; suite à la publication de la vidéo.&lt;&#x2F;li&gt;
&lt;li&gt;Une (vieille) &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;fjrtj4F0ziI&quot;&gt;interview de Jancovici sur France Inter&lt;&#x2F;a&gt; (où les hôtes sont toujours aussi énervants dans leurs postures de balanceurs d’huile sur le feu). Jean-Marc me convaincrait beaucoup pluss si son argumentation ne ressemblait pas à une éternelle provocation, mais ses arguments techniques sont relativement solides. Il est clairement politiquement dans une démarche « il faut parler à tous les partis », avec laquelle je ne me retrouve pas, par contre (paradoxe de l’intolérance, tout ça).&lt;&#x2F;li&gt;
&lt;li&gt;La série britannique &lt;em&gt;Lovesick&lt;&#x2F;em&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arte.tv&#x2F;fr&#x2F;videos&#x2F;RC-027503&#x2F;lovesick&#x2F;&quot;&gt;disponible gratuitement sur Arte&lt;&#x2F;a&gt; 🥰 Une comédie romantique très douce. C’est rigolo d’entendre le &lt;em&gt;TADAAAAAM&lt;&#x2F;em&gt; de Netflix au début de chaque vidéo…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pocketcasts.com&#x2F;podcast&#x2F;tech-wont-save-us&#x2F;65057460-6224-0138-97f6-0acc26574db2&#x2F;the-left-doesnt-hate-technology-w-gita-jackson&#x2F;442955d0-4e28-4c74-9cfd-f9924f2590a0&quot;&gt;The left doesn’t hate technology&lt;&#x2F;a&gt;, un épisode du podcast &lt;em&gt;Tech won’t save us&lt;&#x2F;em&gt;, avec Paris Marx (un nom pareil ça ne s’invente pas !) et Gita Jackson, qui nous parlent de comment l’IA pourrit tout, notamment notre relation à la technologie, et contrecarre l’idée que toute la gauche serait &lt;em&gt;contre&lt;&#x2F;em&gt; la technologie en général (un homme de paille souvent ressorti par la droite pro-IA). Très centré sur des anecdotes comme podcast, donc moins mon kiff. Je me suis cependant retrouvé dans la discussion autour des suggestions musicales algorithmiques ; j’ai effectivement changé mes usages, moi qui étais le genre à suivre des blogs de recommendation, écrits par des humain·es, ou échanger des titres dans des cercles de discussions avec des potes, pour finalement ne me laisser bercer que par des nouveautés suggérées par Spotify ou Deezer. Allez, qui veut (re)commencer un cercle de recommendations musicales avec moi ?? (électronique&#x2F;classique&#x2F;pop)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;p&gt;J’ai fini plein de livres que j’avais commencés et dont je vous ai parlés ici, oéééé 🥳 Finie la procrastination !&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Ce livre vous fera gagner du temps&lt;&#x2F;em&gt; de Fabien Olicard. Bon, bah j’aurais dû me méfier au vu du titre (bien évidemment), c’est définitivement un livre cliché de développement personnel : tout aurait pu tenir en un résumé de 2 pages, l’auteur passe beaucoup de temps à se faire mousser sur toutes les grandes choses qu’il fait dans sa vie (ta médaille est dans le courrier, Fabien). Je n’ai pas l’impression d’avoir appris grand chose, mais du fait que je lis beaucoup autant sur le développement personnel fait que j’étais probablement déjà très exposé (et qui sait, peut-être tombe-je dans un biais d’évidence rétrospective, « je savais déjà toutes ces choses vu qu’elles sont très évidentes »). Deux trois petits trucs picorés ici ou là, mais est-ce que ça valait le coup de passer tout ce temps à lire ? Pas sûr…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Les hommes trans sont-ils des salauds comme les autres ?&lt;&#x2F;em&gt; d’Alistair Houdayer, est définitivement un de mes livres favoris de cette année, qui appelle à voir la masculinité autrement et les hommes pas uniquement à travers le prisme du genre, mais comme un groupe très hétérogène à travers différents axes. À bas la misandrie dans les milieux féministes et queers ! Cette misandrie qui cache une transphobie, appelle à une nouvelle hiérarchisation des genres, et donc de nouvelles dynamiques d’oppression. Très intersectionnel, très nuancé, très rationnel et analytique dans son écriture aussi. J’adore ! (À noter que le titre est déconstruit et contrecarré au fur et à mesure de la lecture du livre ; ne croyez pas qu’il s’agisse de la position défendue par l’auteur.)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.hamiltonnolan.com&#x2F;p&#x2F;an-existential-threat-to-organized&quot;&gt;An Existential Threat to Organized Labor’s Ability to Help People&lt;&#x2F;a&gt;. Je mets cet article en haut de la liste, parce qu’il me semble que c’est le plus important que j’ai pu lire de ces deux dernières semaines sur le sujet de l’IA. Il existe donc des entreprises qui proposent d’entraîner des modèles d’IA en recrutant des expert·es qualifié·es sur un sujet pointu en particulier. On a donc des travailleur·euses à distance, payé·es à la tâche, en compétition les un·es avec les autres, dont le travail est supervisé algorithmiquement. Cette transmission de savoir se &lt;em&gt;capitalise&lt;&#x2F;em&gt; pour les entreprises qui entraînent les modèles d’IA, étant donné que l’expertise est accumulée, sans perte&#x2F;disparation possible. Au fur et à mesure que cette expertise est transférée dans les modèles, il faut une expertise de plus en plus pointue pour continuer à « alimenter la machine » : d’où la raréfaction et la disparition du travail des entraîneur·ses, pour ne laisser que les plus expert·es dans ces rôles ; mais aussi du travail qualifié correspondant à ces expertises. En gros, cela devient très compliqué d’aider les personnes impliquées à s’organiser collectivement, alors que cela représente un danger réel et imminent pour l’intégralité de la société. (Et l’auteur admet ne pas avoir de solutions 😔)&lt;&#x2F;li&gt;
&lt;li&gt;Après la vision sociétale et collective, deux articles qui parlent plutôt du rapport individuel de développeur·euses à l’IA générative : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.anildash.com&#x2F;2026&#x2F;03&#x2F;13&#x2F;coders-after-ai&#x2F;&quot;&gt;What do coders do after AI? - Anil Dash&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.lmorchard.com&#x2F;2026&#x2F;03&#x2F;11&#x2F;grief-and-the-ai-split&#x2F;&quot;&gt;Grief and the AI Split&lt;&#x2F;a&gt;. Il y a un certain nombre de choses avec lesquelles je ne suis pas d’accord dans ce premier article, mais pour moi une chose résonne, en accord avec l’auteur : l’IA générative &lt;em&gt;en général&lt;&#x2F;em&gt; pue du cul, notamment en ce qu’elle remplace un travail artistique, agréable, humain par une automatisation froide, basée sur le vol, etc. Mais dans le domaine du développement, cette même IA permet &lt;em&gt;vraiment&lt;&#x2F;em&gt; d’alléger certaines parties pénibles pour ne se concentrer que sur les aspects intéressants. En gros, c’est possible de détester l’IAg en général, mais d’apprécier celle pour le développement en particulier. Dans ce second article, je trouve la notion de &lt;em&gt;séparation&lt;&#x2F;em&gt; entre deux types de devs très percutantes, pour clairement la vivre, même à l’intérieur de ma propre subjectivité : je ne vais pas hésiter à utiliser de l’IA pour les projets pour lesquels j’ai du mal à « me mettre en route », à « démarrer » ; mais pour les projets qui me tiennent à cœur, sur lesquels je m’amuse en termes de développement, je ne pense même pas à utiliser de l’IA. Et c’est sans évoquer toutes les externalités négatives, bien connues et documentées…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;livelaugh.blog&#x2F;posts&#x2F;10-years-of-hotter-and-smarter&#x2F;&quot;&gt;10 years of getting hotter and smarter&lt;&#x2F;a&gt; : ce qui commence apparemment comme une blague de Jenn Schiffer s’avère être une affirmation de soi, très simple, mais qui semble déranger des mascus fragiles. Oh well. Continuons à être plus hot et plus intelligent·es.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Petit essai de &lt;em&gt;Parkitect&lt;&#x2F;em&gt;, une sorte d’évolution moderne de &lt;em&gt;Rollercoaster Tycoon&lt;&#x2F;em&gt;, un des jeux préférés de mon adolescence : on y construit des parcs d’attraction et on y conçoit des montages russes 🤪&lt;&#x2F;li&gt;
&lt;li&gt;Essayé aussi &lt;em&gt;Neon White&lt;&#x2F;em&gt;, une sorte de FPS de &lt;em&gt;parkour&lt;&#x2F;em&gt;, avec des défis de vitesse. Très fun ^^&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;noelwelsh.com&#x2F;posts&#x2F;comptime-is-bonkers&#x2F;&quot;&gt;Parametricity, or Comptime is Bonkers&lt;&#x2F;a&gt; : une analyse comparative des languages de programmation Zig et Rust, par rapport à ce que permet &lt;code&gt;comptime&lt;&#x2F;code&gt; en Zig, et pourquoi ce n’est pas une si bonne chose 👀&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;batsov.com&#x2F;articles&#x2F;2026&#x2F;03&#x2F;09&#x2F;emacs-and-vim-in-the-age-of-ai&#x2F;&quot;&gt;Emacs and Vim in the Age of AI&lt;&#x2F;a&gt; : Une analyse des risques et opportunités pour des éditeurs de code comme Emacs et Vim, au temps de l’IA.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;petitions.assemblee-nationale.fr&#x2F;initiatives&#x2F;i-5254&quot;&gt;Une pétition officielle pour refaire une Grande Sécu™&lt;&#x2F;a&gt; 🥳 Enfin, mettre en place une assurance complémentaire gérée par la Sécurité Sociale, entièrement publique et qui respecte les principes de l’assurance maladie. C’est une très bonne idée ! À voir si les parties de gauche s’en emparent 👀&lt;&#x2F;li&gt;
&lt;li&gt;Vous savez, la chèvre Dolly, qui avait été clonée à partir d’une cellule de glande mammaire d’une autre chèvre ? Vous allez être mal à l’aise en découvrant &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Dolly_(sheep)#Genesis&quot;&gt;l’origine de son nom&lt;&#x2F;a&gt; 🫠🤡&lt;&#x2F;li&gt;
&lt;li&gt;Un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wiktionary.org&#x2F;wiki&#x2F;espace_liminal&quot;&gt;espace liminal&lt;&#x2F;a&gt; est un lieu de transition, vide ou abandonné, souvent étrange ou surréaliste. Comme j’entends ça souvent dans les podcasts de sociologie pour décrire la situation de groupes sociaux entre deux eaux, le « cul coincé entre deux chaises »… 😇&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Handy: privacy-preserving open-source speech-to-text</title>
        <published>2026-03-03T00:00:00+00:00</published>
        <updated>2026-03-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/handy/"/>
        <id>https://bouvier.cc/tech/handy/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/handy/">&lt;p&gt;I’ve recently discovered Handy, a small speech-to-text (dictation) application, that is open source and can use only local AI models on Linux, preserving the privacy of what I’m saying out loud by not sending it to some cloud servers. I found it handy (lol), so I figured that I could share some hardships that I’ve run into while setting it up on ArchLinux.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Handy is a speech-to-text application, which means you can talk out loud and it will render the text on your screen after you’re done. This is especially nice if you are a quick talker but a slow typer; and while I consider that I would be one, I can still type quickly enough, but speech is so much faster and nicer, as a lazy interface. You can learn more about Handy on its &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;handy.computer&#x2F;&quot;&gt;official website&lt;&#x2F;a&gt;, notably how you can install it and so on.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s a small list of all the steps that I’ve had to do for setting it up for ArchLinux:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;installation method&lt;&#x2F;strong&gt;: I’ve installed it using the AUR archive, where it is called &lt;code&gt;handy-bin&lt;&#x2F;code&gt;. For instance, with &lt;code&gt;yay&lt;&#x2F;code&gt;, that would be &lt;code&gt;yay -S handy-bin&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;install a model&lt;&#x2F;strong&gt;: in &lt;code&gt;handy&lt;&#x2F;code&gt;‘s settings, I’ve chosen the &lt;code&gt;Parakeet V3&lt;&#x2F;code&gt; model, which seems to be the best combination of speed and accuracy.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;missing dependency&lt;&#x2F;strong&gt;: At first when starting it in the command line, it would complain about some missing GTK dependency &lt;code&gt;gtk-layer-shell&lt;&#x2F;code&gt; that I’ve installed with &lt;code&gt;yay&lt;&#x2F;code&gt;, which fixed it: &lt;code&gt;yay gtk-layer-shell&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;allow remote interaction&lt;&#x2F;strong&gt;: The first time I’m using Handy, after I’ve recorded a non-empty sentence, the GNOME permission window for remote disk desktop will automatically open up, and it will ask me if I want to allow remote interaction. I need to toggle that permission, and then click share. It seems that this is needed every time I quit and restart the Handy application. So hopefully I don’t have to do it on every single computer startup. But after I’ve done it once when opening Handy for the first time, it will keep on working for the rest of the session.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;GNOME global shortcuts&lt;&#x2F;strong&gt;: After a bit of time I’ve realized that the global shortcuts as defined in the application settings would not work, and that I needed to use the GNOME global keyboard shortcuts configuration instead. So I went ahead and created a new global keyboard shortcut &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that would trigger the following invocation: &lt;code&gt;handy --toggle-transcription&lt;&#x2F;code&gt;. The trick is that it needs to be run once at the beginning of the speech to text transcription, and then once again when you want to stop, as it’s a toggle, but that’s fine.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;paste method&lt;&#x2F;strong&gt;: Finally the last issue that I’ve run into was that the paste method was not working because it was using something related to X11 and I’m using Wayland. As a result, it would remove some individual letters from the output of the transcription, while I could see in the application’s logs that the transcription was in fact correct. So I had to change it to &lt;strong&gt;clipboard&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So I’m happy to report that after all these steps, this is working just fine 🥳 In fact, I’ve used mostly Handy to write this blog post, which is kind of a delight for me! I am not quite sure that this has been faster than typing by hand, but this has been more pleasant, for sure. It is still a bit of a pain when compared to the experience that I’ve had on macOS where I could install a single application called &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;openwhispr.com&#x2F;&quot;&gt;OpenWhispr&lt;&#x2F;a&gt; &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and it just worked from the start, showing me the output in real-time (whereas on Linux it’s displayed after stop-toggling the transcription). Well, Linux on the desktop can be quite an adventure, am I right? At least I do have a proper working solution now, which makes me happy, and probably will help me write ~~~more emails~~~ blog posts in the future.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mamot.fr&#x2F;@Jolivier&#x2F;116165589955911662&quot;&gt;Jolivier&lt;&#x2F;a&gt; who told me about its existence on Mastodon!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;by opening the GNOME Settings application, then keyboard, then “view and customize shortcuts”, then custom shortcuts. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;It’s unclear the application is free forever, even though it’s using local AI models as well, I think that I might be limited to two thousand words per week. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #68</title>
        <published>2026-03-02T00:00:00+00:00</published>
        <updated>2026-03-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w09/"/>
        <id>https://bouvier.cc/notes/2026-w09/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w09/">&lt;p&gt;Une éloge de la Ritaline, des Racines, des théories de l’âge adulte, des IAs pour coder, des clients Matrix et des serveurs IRCv3, et des utilisations de jolies fontes dans le vrai monde.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Trois semaines de nouvelles d’un coup, et en plus de ça j’ai vidé tous mes onglets de mes trois navigateurs principaux : attention, ça va dépôter !&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=MBRqu0YOH14&quot;&gt;Optimistic Nihilism&lt;&#x2F;a&gt;, une (relativement) vieille vidéo de la chaîne Youtube Kurtzgesagt, sur une réponse philosophique possible face à l’angoisse existentielle.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=oXQZ8AVNxnQ&quot;&gt;L’humanité a-t-elle les moyens de s’offrir l’IA ?&lt;&#x2F;a&gt; dans laquelle Tristan Nitot discute de la tension entre les besoins en ressources des intelligences artificielles, et le dépassement des limites planétaires. Je retiendrai que l’optimisation des IAs ne peut pas arriver avant que la bulle spéculative éclate (l’explication est assez intuitive mais efficace). Dommage que la vidéo ne rentre pas du tout dans la discussion de la régulation, qui me semble pourtant essentielle quant au sujet — l’alternative étant d’invidualiser entièrement la responsabilité de l’usage, ce qui me semble, euh, « contre-productif » (pour ne pas dire une approche « idiot utile »).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=psN65JE3iCQ&quot;&gt;Des piles au lithium rechargeables en USB&lt;&#x2F;a&gt; ? Très bonne analyse de ce qui est disponible actuellement, à quel point c’est du marketing (&lt;em&gt;alerte divulgâchis&lt;&#x2F;em&gt; les capacités annoncées ne sont pas mensongères, sauf pour les premiers prix). En gros, à partir d’une vingtaine d’utilisation d’une même pile, ça devient rentable financièrement, mais le gros point positif pour moi c’est vraiment la recharge en USB-C 🤓 Merci à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@Signez&quot;&gt;@Signez&lt;&#x2F;a&gt; pour le partage.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=IdIuGy9JdWc&quot;&gt;Éloge de la Ritaline&lt;&#x2F;a&gt;, une autre vidéo du psychologue critique Za, sur le médicament miracle contre les troubles de l’attention. Où l’on apprend que c’est &lt;em&gt;grosso-modo&lt;&#x2F;em&gt; le même mécanisme à l’œuvre que les anti-dépresseurs, mais qui agit sur la dopamine et la noradrénaline plutôt que la sérotonine.&lt;&#x2F;li&gt;
&lt;li&gt;La saison 2 de la série &lt;em&gt;Fallout&lt;&#x2F;em&gt;, disponible sur Amazon Prime Video. Toujours aussi burlesque et drôle 🤩 Et me redonne toujours autant envie de retourner jouer aux deux premiers volets du jeu vidéo éponyme…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;J’ai arrêté de lire &lt;em&gt;La formule préférée du professeur&lt;&#x2F;em&gt;, un roman de Yōko Ogawa, sur un professeur de maths amnésique. Beaucoup trop feuilletonnant à mon goût, et de nombreux passages sur le base-ball ont eu raison de ma patience. De mémoire, c’est la deuxième fois en 10 ans que j’abandonne un livre ; je fais ça par amour de la lecture, parce que continuer de lire des livres qui ne nous plaisent pas n’est qu’un chemin tout tracé vers un dégoût certain de la lecture (dit-il après avoir lu 60% du livre kon-même).&lt;&#x2F;li&gt;
&lt;li&gt;Par contre, j’ai fini &lt;em&gt;Neuromania&lt;&#x2F;em&gt;, d’Albert Moukheiber, qui m’aura décidément beaucoup plu. La conclusion, qui incite de ne pas s’appuyer uniquement sur les neurosciences mais aussi d’aller en direction de sciences dites plus « douces » (comme la sociologie, ou la psychologie, ou l’anthropologie) m’a beaucoup plu. C’est plein de nuances, c’est très rationnel, ça aide à débunker beaucoup de mythes. Je me souviendrais qu’il est bon de lever un sourcil quand quelqu’un propose une interprétation qui saute de grandeur (par exemple, tirer une conclusion sur un individu en regardant le fonctionnement de son cerveau ; ou généraliser à un groupe en observant le fonctionnement de quelques individus). Et aussi que le changement de comportement est le plus efficace quand il agit structurellement (i.e. sur la société) plutôt que sur les individus (via l’appel aux émotions, aux petits pas, etc.).&lt;&#x2F;li&gt;
&lt;li&gt;J’ai lu la bande dessinée &lt;em&gt;Wash Days — Beautés Crêpues&lt;&#x2F;em&gt;, de Jamila Rowser et Robyn Smith. C’est pour moi une très belle histoire d’amitié entre des femmes racisées, dont on voit des histoires du quotidien dans le Bronx, toujours liées à la coiffure. Je découvre la quantité de soins et le temps nécessaire à entretenir une chevelure crêpue 🤯 Ce qui semble donner l’opportunité de longs moments de socialisation.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai également lu &lt;em&gt;Racines&lt;&#x2F;em&gt; de Lou Lubie, encore une BD sur le thème des cheveux crêpus. Un peu moins dans la narration, mais beaucoup plus riche et dense sociologiquement (et extrêmement bien sourcée) 👌&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bjhess.com&#x2F;posts&#x2F;better-sleep-in-ten-days&quot;&gt;Better Sleep in Ten Days - I am BARRY HESS&lt;&#x2F;a&gt;, un auto-défi par l’auteur de mieux dormir, en seulement 10 jours, en s’astreignant à ne faire que dormir (et euh, autre chose) depuis son lit.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mariobianchi.dev&#x2F;p&#x2F;why-i-moved-my-blog-to-substack&quot;&gt;Why I Moved My Blog to Substack&lt;&#x2F;a&gt;, où l’auteur confronte ses idéaux et la réalité du travail quotidien nécessaire pour maintenir un blog. Mais attendez, c’est quelqu’un qui ne connaît pas Sveltia, ça…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;next.ink&#x2F;226008&#x2F;pour-goldman-sachs-lia-napporte-pas-grand-chose-a-leconomie-des-etats-unis&#x2F;&quot;&gt;Pour Goldman Sachs, l’IA n’apporte pas grand-chose à l’économie des États-Unis&lt;&#x2F;a&gt;, au point de sortir un fonds indexé avec zéro IA à l’intérieur.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;racc.blog&#x2F;self-help-books-suck&#x2F;&quot;&gt;“Self-help” books suck, read fiction&lt;&#x2F;a&gt;, un bon argument pour démontrer la supériorité argumentative des fictions sur les livres de développement personnel.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.lesinrocks.com&#x2F;cinema&#x2F;lilly-wachowski-confirme-que-matrix-est-une-allegorie-sur-la-transidentite-176088-06-08-2020&#x2F;&quot;&gt;Lilly Wachowski confirme que “Matrix” est une allégorie sur la transidentité | Les Inrocks&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.whoz.me&#x2F;non-classe&#x2F;deux-theories-de-lage-adulte&#x2F;&quot;&gt;Deux théories de l’âge adulte | gu:&#x2F;&#x2F;au.me’s blog&lt;&#x2F;a&gt;. Marrant, autant je suis d’accord sur la première théorie, autant je le suis moins sur la deuxième ; pour moi, la deuxième partie d’être adulte, c’est aligner ses actions&#x2F;désirs avec sa volonté propre&#x2F;ses principes (« le bonheur, c’est faire ce que l’on veut, et vouloir ce que l’on fait », comme disait Françoise Giroud).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blogz.zaclys.com&#x2F;irisdessine&#x2F;eloge-de-la-lenteur-l66k&quot;&gt;Éloge de la lenteur&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fantinel.dev&#x2F;blog&#x2F;maple-mono-font&quot;&gt;I have a new favorite coding font&lt;&#x2F;a&gt;, et &lt;em&gt;alerte divulgâchage&lt;&#x2F;em&gt;, c’est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;font.subf.dev&#x2F;en&#x2F;&quot;&gt;Maple Mono&lt;&#x2F;a&gt;. J’ai testé, mais je reste fidèle à &lt;em&gt;Fira Code Nerd Font&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.paris-web.fr&#x2F;2022&#x2F;conferences&#x2F;on-se-leve-et-on-se-cassetour-dhorizon-dun-travail-sans-capital&quot;&gt;On se lève et on se casse&lt;&#x2F;a&gt; : une conférence (&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;miette&#x2F;travail-sans-capital&#x2F;-&#x2F;raw&#x2F;main&#x2F;slides&#x2F;index.pdf?inline=false&quot;&gt;slides&lt;&#x2F;a&gt;) sur d’autres manières de travailler (en dehors du salariat et des entreprises capitalistes), et le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onseleveetonsecasse.fr&quot;&gt;site explicatif qui va avec&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;des-ias-pour-coder&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-ias-pour-coder&quot; aria-label=&quot;Anchor link for: des-ias-pour-coder&quot;&gt;🔗&lt;&#x2F;a&gt;Des IAs pour coder&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nolanlawson.com&#x2F;2026&#x2F;02&#x2F;07&#x2F;we-mourn-our-craft&#x2F;&quot;&gt;We mourn our craft&lt;&#x2F;a&gt;, sur le sentiment diffus de faire le deuil du développement logiciel comme il était avant les LLMs.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bjhess.com&#x2F;posts&#x2F;ai-fatigue&quot;&gt;AI Fatigue&lt;&#x2F;a&gt;, où un dev parle de l’usure à ne faire qu’utiliser des LLMs pour coder.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;next.ink&#x2F;223961&#x2F;de-lenthousiasme-au-burnout-lia-ne-reduit-pas-la-charge-de-travail-mais-lintensifie&#x2F;&quot;&gt;De l’enthousiasme au burnout, l’IA ne réduit pas la charge de travail, mais l’intensifie&lt;&#x2F;a&gt;. Tiens donc, ce ne serait pas un sentiment uniquement partagé par l’auteur ci-dessus…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.benshoemaker.us&#x2F;writing&#x2F;in-defense-of-not-reading-the-code&#x2F;&quot;&gt;In defense of not reading the code | Ben Shoemaker&lt;&#x2F;a&gt;. Qu’est-ce qui pourrait mal se passer ? 🫠&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mitchellh.com&#x2F;writing&#x2F;my-ai-adoption-journey&quot;&gt;My AI Adoption Journey&lt;&#x2F;a&gt;, où l’auteur·ice explique la montée graduelle de l’utilisation de LLMs pour coder, jusqu’à un point qui me semble assez fou.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;406.fail&#x2F;&quot;&gt;Un petit lien&lt;&#x2F;a&gt; à envoyer quand vous recevez une contribution IA de mauvaise qualité (aussi appelée « slop »).&lt;&#x2F;li&gt;
&lt;li&gt;Petite phase de recherche sur la consommation électrique des IAs :
&lt;ul&gt;
&lt;li&gt;Où &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;news&#x2F;build-ai-in-america&quot;&gt;Anthropic&lt;&#x2F;a&gt; (l’entreprise derrière Claude) déclame que, d’ici 2028, le &lt;em&gt;secteur&lt;&#x2F;em&gt; de l’IA aux US devrait avoir besoin de 25 GW pour l’entraînement des modèles, et environ la même quantité pour &lt;em&gt;l’inférence&lt;&#x2F;em&gt; (l’utilisation) quotidienne. Jusque là, des projections futures, mais c’est intéressant de voir les ordres de grandeur de l’entraînement vs inférence.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.simonpcouch.com&#x2F;blog&#x2F;2026-01-20-cc-impact&#x2F;&quot;&gt;Electricity use of AI coding agents&lt;&#x2F;a&gt;, où l’auteur fait plein de calculs de coins de serviette pour estimer le coût en énergie de l’utilisation des IAs. Extrait choisi de la conclusion : “&lt;em&gt;So, if I wanted to analogize the energy usage of my use of coding agents, it’s something like running the dishwasher an extra time each day, keeping an extra refrigerator, or skipping one drive to the grocery store in favor of biking there. To me, this is &lt;em&gt;very&lt;&#x2F;em&gt; different than, in Benjamin Todd’s words, “a terrible reason to avoid” this level of AI use.&lt;&#x2F;em&gt;”&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=xXMiLfxFniA&quot;&gt;Hawaïenne&lt;&#x2F;a&gt;, un petit titre déjanté sur l’hypocrisie des injonctions que l’on peut parfois rencontrer dans les mouvements libertaires.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;edea6cbe-5d56-45bb-ae54-242fdf097a31&quot;&gt;Un épisode de Where should we begin&lt;&#x2F;a&gt;, podcast de psychothérapie sur l’amour (en anglais), qui traite de l’anxiété de performance (en général, pas seulement en amour) causée par des parents exigeants, trop durs. Passionnant.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;super.unholy.tech&#x2F;git-zen&#x2F;&quot;&gt;Git Zen&lt;&#x2F;a&gt;, une petite blague qui prône l’abandon des bonnes pratiques de Git au profit de &lt;em&gt;checks notes&lt;&#x2F;em&gt; prendre du temps pour aller caresser le chat 🥰&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yjeanrenaud&#x2F;yj_nearbyglasses&quot;&gt;Nearby-glasses&lt;&#x2F;a&gt;, une application Android open-source pour détecter les usages de lunettes connectées autour de soi, qui fonctionne en regardant le nom du device bluetooth. Pas parfait (l’auteur l’admet lui-même dans le fichier readme), mais une bonne première protection, au moins pour s’informer de la présence de ce genre d’appareils !&lt;&#x2F;li&gt;
&lt;li&gt;Avec l’exode de Discord suite à leur annonce de vérifier l’âge des utilisateur·ices (en faisant appel à une entreprise proche de Palantir &#x2F; Trump), plein de personnes sont venues essayer &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;Matrix&lt;&#x2F;a&gt;. C’est chouette ! Ça m’a également permis de re-découvrir et re-tester quelques clients Web sympas, comme par exemple &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cinny.in&quot;&gt;Cinny&lt;&#x2F;a&gt; dont l’interface est très épurée et bien pensée ; ou encore &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;commet.chat&#x2F;&quot;&gt;Commet&lt;&#x2F;a&gt;, qui se targue d’être très proche de Discord (mais un peu moins plaisant esthétiquement et complet que Cinny, à mon humble avis).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ergo.chat&#x2F;about&quot;&gt;Ergo&lt;&#x2F;a&gt;, un serveur IRC qui implémente beaucoup de fonctionnalités chouettes d’IRCv3 — dont la spec permet une alternative très viable à Matrix, si vous n’avez pas besoin du chiffrement.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sveltiacms.app&#x2F;en&#x2F;&quot;&gt;Sveltia&lt;&#x2F;a&gt; est un CMS statique basé sur Markdown et Git, en mode &lt;em&gt;bien fait&lt;&#x2F;em&gt;™, avec une belle interface pour créer des pages et des articles. Si je n’avais pas migré récemment sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;, ou si je commençais mon site personnel, j’utiliserais probablement cette technologie.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;allenai.org&#x2F;olmo&quot;&gt;Olmo&lt;&#x2F;a&gt; est un modèle d’IA (type LLM) complètement ouvert : des données d’entraînement (a priori respectueuses), aux poids, etc., tout est disponible, contrairement à la plupart des modèles.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.abbyhaddican.com&#x2F;times-new-resistance&quot;&gt;Times New Resistance&lt;&#x2F;a&gt;, une fonte clônée de Times New Roman mais qui auto-corrige les autocrates. Malin !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=T4Upf_B9RLQ&quot;&gt;Une journée dans la vie d’un enshitifficateur&lt;&#x2F;a&gt; 🥲&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Boaty_McBoatface&quot;&gt;Boaty McBoatface&lt;&#x2F;a&gt;, le nom d’un sous-marin choisi par vote ouvert au grand public, que l’on peut aussi voir comme une fable dont la morale est de ne &lt;em&gt;pas&lt;&#x2F;em&gt; prendre de décisions basées sur des votes ouverts au grand public.&lt;&#x2F;li&gt;
&lt;li&gt;Vidéo mème, à utiliser comme réaction dans vos conversations : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=1-v54g_2ZdU&quot;&gt;« mais moi je veux faire l’amour ! t’es un malade bernard ! »&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;freegogpcgames.com&#x2F;&quot;&gt;Tipiak des jeux vidéos&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vernacular.fr&#x2F;&quot;&gt;Jules Vernacular&lt;&#x2F;a&gt;, une galerie d’utilisations de fontes (polices d’écritures) classées par type. Très agréable de traîner un peu là-dessus.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Tiny new blog features</title>
        <published>2026-02-17T00:00:00+00:00</published>
        <updated>2026-02-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/zola-update-2026/"/>
        <id>https://bouvier.cc/tech/zola-update-2026/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/zola-update-2026/">&lt;p&gt;Anchor links, comments explainer translated in the article’s language, and comments that are topologically ordered 🥳&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Hello, folks! Today I’ve managed to update the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola blog engine&lt;&#x2F;a&gt; binary version in my CI, and I took a bit of time to also improve the blog itself, with some tiny new features. Who doesn’t love a self-indulging meta blog post, sometimes?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;automatic-anchor-insertion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#automatic-anchor-insertion&quot; aria-label=&quot;Anchor link for: automatic-anchor-insertion&quot;&gt;🔗&lt;&#x2F;a&gt;automatic anchor insertion!&lt;&#x2F;h2&gt;
&lt;p&gt;You might have noticed it: headers now have a small anchor icon and link, to their left! This is a new (?) feature of Zola, it’s being auto-inserted thanks to the following configuration option, in the &lt;code&gt;[markdown]&lt;&#x2F;code&gt; section:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9AA5CE;&quot;&gt;insert_anchor_links = &amp;quot;left&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A bit of CSS to customize this anchor’s looks:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;* Put some margin next to the anchor *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;zola-anchor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;    margin-right&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;px&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;* On hover, display a dotted square around the link, and avoid motion of the heading by lowering the right margin *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;zola-anchor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;hover&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;    text-decoration&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; none&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;    border&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;px&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; dotted white&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;    margin-right&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;px&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I like this, as it makes it possible to link to a specific section of a blog post now 🥳 I’ve missed that when moving from &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getpelican.com&#x2F;&quot;&gt;Pelican&lt;&#x2F;a&gt; to Zola, before.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comment-section-translation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#comment-section-translation&quot; aria-label=&quot;Anchor link for: comment-section-translation&quot;&gt;🔗&lt;&#x2F;a&gt;comment section translation!&lt;&#x2F;h2&gt;
&lt;p&gt;Before tonight’s changes, the comment section explainer would be translated using your browser’s favorite language, as defined by the &lt;code&gt;navigator.language&lt;&#x2F;code&gt; DOM property. This was convenient, but led to some inconsistencies: if your browser is configured to receives pages in English, and you’re reading a French article, the content would be in French, but the comment explainer would be in English.&lt;&#x2F;p&gt;
&lt;p&gt;You might say I’ve got too much time on my hands, but that’s fine: I’ve decided that articles in French would now have the explainer in French, while articles without a language (likely in English) would have the explainer in, well, English.&lt;&#x2F;p&gt;
&lt;p&gt;Interestingly, Zola has the notion of language for a &lt;em&gt;section&lt;&#x2F;em&gt;, or for a &lt;em&gt;page&lt;&#x2F;em&gt; (based on the file’s name, that must be suffixed with the language, before the markdown extension). That is, if the site is indeed configured to support multiple languages — i.e. having each page’s content translated in multiple languages! I really didn’t want to go down that path, so I’ve had to resort to a user-defined &lt;code&gt;lang&lt;&#x2F;code&gt; property in the &lt;code&gt;extra&lt;&#x2F;code&gt; section of individual pages (falling back to &lt;code&gt;en&lt;&#x2F;code&gt;, if the property isn’t defined in the page’s frontmatter). By rendering this property with Tera (the template engine) in the JS code, I can use it later to decide what to display&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{{ page.extra.lang | default(value=&amp;#39;en&amp;#39;) }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;topological-ordering-of-mastodon-comments&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#topological-ordering-of-mastodon-comments&quot; aria-label=&quot;Anchor link for: topological-ordering-of-mastodon-comments&quot;&gt;🔗&lt;&#x2F;a&gt;topological ordering of mastodon comments!&lt;&#x2F;h2&gt;
&lt;p&gt;The ordering of comments could be confusing: comments were not sorted client-side, so they were likely ordered by their creation date, as received by the server endpoint. This caused some weirdness, for instance in the following case:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;account A comments, that’s reply 1&lt;&#x2F;li&gt;
&lt;li&gt;account B comments, that’s reply 2&lt;&#x2F;li&gt;
&lt;li&gt;account B comments in reply to 1, that’s reply 3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Since the replies would be rendered in the creation order, it seemed that message 3 was a reply to message 2. This is wrong, so I’ve decided to instead use a topological ordering, implemented by a tiny depth-first search, such that:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;top-level comments are now ordered by time&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;then&lt;&#x2F;em&gt; their replies are topologically ordered (by their parent&#x2F;child reply relationship).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This should make the rendering more consistent with what you’d see on any Fediverse client, by putting the replies just below the post they replied to! Some day, I may add indent levels and guides, based on the reply’s depth, but not today, it’s late already 😌 See ya!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;yep, this is a poor man’s translation system 🥴 I don’t want to bother setting up Zola’s multilingual features. At least today. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Reinstalling Archlinux, btw</title>
        <published>2026-02-15T00:00:00+00:00</published>
        <updated>2026-02-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/reinstalling-archlinux/"/>
        <id>https://bouvier.cc/tech/reinstalling-archlinux/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/reinstalling-archlinux/">&lt;p&gt;One of my SSD disks crashed this weekend. No worries at all, no data was lost during the process, because everything important was in the cloudz.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Here are a few notes from my Linux OS reinstallation process, which are going to be nice reminders for a future self who’d have to do it again.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;finding-the-right-archlinux-distro&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#finding-the-right-archlinux-distro&quot; aria-label=&quot;Anchor link for: finding-the-right-archlinux-distro&quot;&gt;🔗&lt;&#x2F;a&gt;finding the right ArchLinux distro&lt;&#x2F;h2&gt;
&lt;p&gt;While I was willing to reinstall Archlinux, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Installation_guide&quot;&gt;The Hard (but well documented!) Way™&lt;&#x2F;a&gt;, at first, using the fearful CLI, and all. But quickly, I was disenchanted. When it was time to connect network, nothing worked; in fact the network WiFi card wasn’t even detected. It was working just fine on my previous system, but I didn’t recall what I had to do to make it work; or even, &lt;em&gt;if&lt;&#x2F;em&gt; I had to do anything in particular.&lt;&#x2F;p&gt;
&lt;p&gt;I’m too old for spending hours trying to find out what’s the right driver, and finding a way to put it on the live environment. So I figured I could look around at other distributions that are based on ArchLinux and that try to make it simpler to install, with friendly, easy, y’know, graphical installers. I had heard about &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;endeavouros.com&#x2F;&quot;&gt;Endeavour&lt;&#x2F;a&gt; before, but never tried it. When I ran the LiveUSB environment on my machine, it did Just Work™! The network card was immediately detected, WiFi worked immediately. The installation took overall 5 to 10 minutes, &lt;em&gt;at most&lt;&#x2F;em&gt;, so this was super fast. The resulting installation was minimal, which I quite enjoy. I could select which desktop environment I wanted (&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;donate.gnome.org&#x2F;&quot;&gt;GNOME&lt;&#x2F;a&gt; ftw!). Wayland ran out of the box, without me having to do anything to configure it. So that has been super nice so far.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;paru-or-yay-there-is-no-question&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#paru-or-yay-there-is-no-question&quot; aria-label=&quot;Anchor link for: paru-or-yay-there-is-no-question&quot;&gt;🔗&lt;&#x2F;a&gt;paru or yay, there is no question&lt;&#x2F;h2&gt;
&lt;p&gt;In the past, I’ve been using &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;morganamilo&#x2F;paru&quot;&gt;&lt;code&gt;paru&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; as an Archlinux User Repository (AUR) helper, but the preinstalled &lt;code&gt;yay&lt;&#x2F;code&gt; is actually much better. Two things I’ve liked about it, in particular:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I can run the plain command &lt;code&gt;yay&lt;&#x2F;code&gt;, and it will perform the most common command: update the source lists, and propose to upgrade all the installed software. Since that’s the most common action, it makes sense that it runs by default. As far as I can tell, doing the same with &lt;code&gt;pacman&lt;&#x2F;code&gt; or &lt;code&gt;paru&lt;&#x2F;code&gt; requires the &lt;code&gt;-Syu&lt;&#x2F;code&gt; argument, which I had to recall by heart at some point. Nice defaults ftw!&lt;&#x2F;li&gt;
&lt;li&gt;I can also run &lt;code&gt;yay $SOFTWARE_NAME&lt;&#x2F;code&gt;, and it will search and propose me all the softwares that match the name, with a small selection interface, that allows me to then install one or several entries from the list. Super sweet! I’ve even discovered new software that way.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;flashing-the-usb-drive-for-the-live-environment&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#flashing-the-usb-drive-for-the-live-environment&quot; aria-label=&quot;Anchor link for: flashing-the-usb-drive-for-the-live-environment&quot;&gt;🔗&lt;&#x2F;a&gt;flashing the usb drive for the live environment&lt;&#x2F;h2&gt;
&lt;p&gt;I did use &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;unetbootin.github.io&#x2F;&quot;&gt;&lt;code&gt;unetbootin&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; in the past, but it’s been buggy and gave lots and lots of error messages, when I’ve tried to use it this time. I’ve discovered &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;etcher.balena.io&#x2F;&quot;&gt;Balena Etcher&lt;&#x2F;a&gt;, in the meanwhile, which has a super simple interface, binary executables for all major operating systems, and even gave me a nice progress bar with a time estimate until completion. Just Worked™, and that’s nice 😌&lt;&#x2F;p&gt;
&lt;h2 id=&quot;choosing-a-wallpaper&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#choosing-a-wallpaper&quot; aria-label=&quot;Anchor link for: choosing-a-wallpaper&quot;&gt;🔗&lt;&#x2F;a&gt;choosing a wallpaper&lt;&#x2F;h2&gt;
&lt;p&gt;After the install was finished, I’ve gotten back to set up a few of my favorite software, extensions, and generally habits. Of course, I’ve chosen a wallpaper from the super talented artist David Revoy, of Pepper and Carott fame. His list of free (and open-source!) &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.peppercarrot.com&#x2F;en&#x2F;wallpapers&#x2F;index.html&quot;&gt;wallpapers&lt;&#x2F;a&gt; is super nice, but the list of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.peppercarrot.com&#x2F;en&#x2F;artworks&#x2F;artworks.html&quot;&gt;artworks&lt;&#x2F;a&gt; includes plenty of amazing stuff too, include two other pieces I’ve used as wallpapers in the past: &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.peppercarrot.com&#x2F;en&#x2F;viewer&#x2F;misc__2023-09-03_Just-Found-You_by-David-Revoy.html&quot;&gt;Just found you&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.peppercarrot.com&#x2F;en&#x2F;viewer&#x2F;misc__2022-11-13_My-Neighbor-Mastodon_15K_by-David-Revoy.html&quot;&gt;My neighbor Mastodon&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fixing-the-wezterm-crash-due-to-weird-scaling&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fixing-the-wezterm-crash-due-to-weird-scaling&quot; aria-label=&quot;Anchor link for: fixing-the-wezterm-crash-due-to-weird-scaling&quot;&gt;🔗&lt;&#x2F;a&gt;fixing the wezterm crash due to weird scaling&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve installed the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wezterm.org&#x2F;&quot;&gt;wezterm&lt;&#x2F;a&gt; terminal emulator (written in Rust 🦀 so blazingly 😎 fast 🚀), but it was crashing at start with a cryptic error like &lt;code&gt;Wayland protocol error: wl\_surface@44: error 2: Buffer size (907x300) must be an integer multiple of the buffer\_scale (2).&lt;&#x2F;code&gt; Thanks to this &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forums.zotero.org&#x2F;discussion&#x2F;111592&#x2F;linux-wayland-crash-with-fractional-scaling-zotero-7-beta&quot;&gt;forum post&lt;&#x2F;a&gt;, though, I figured that was because I set the display scale to 125%. After resetting it to 100%, it would work correctly again. Using the GNOME Tweaks app, I’ve set the font scale to 1.5, which also scales everything, so it’s a decent workaround for me.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ohnoes-my-ssh-is-full-of-ai-agents-now-owait&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ohnoes-my-ssh-is-full-of-ai-agents-now-owait&quot; aria-label=&quot;Anchor link for: ohnoes-my-ssh-is-full-of-ai-agents-now-owait&quot;&gt;🔗&lt;&#x2F;a&gt;ohnoes my ssh is full of AI agents now???? owait&lt;&#x2F;h2&gt;
&lt;p&gt;After copying my public and private SSH keys to the new machine, I’ve ran into weird errors like this one, when trying to SSH into one of my servers:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sign_and_send_pubkey: signing failed: agent refused operation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I didn’t understand what it meant, what the hell, did we lose SSH to the artificial intelligence fad too? But thanks to this &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;questions&#x2F;44250002&#x2F;how-to-solve-sign-and-send-pubkey-signing-failed-agent-refused-operation&quot;&gt;StackOverflow post&lt;&#x2F;a&gt;, I’ve ran &lt;code&gt;ssh-add&lt;&#x2F;code&gt;, which gave me a better idea of what the actual error was, with an actual user-oriented error message. &lt;em&gt;Something something&lt;&#x2F;em&gt; permissions about the private SSH key; a little &lt;code&gt;chmod 600&lt;&#x2F;code&gt; fixed it, and then I could SSH into my servers back again.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;i-am-once-again-asking-you-to-install-the-printer&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#i-am-once-again-asking-you-to-install-the-printer&quot; aria-label=&quot;Anchor link for: i-am-once-again-asking-you-to-install-the-printer&quot;&gt;🔗&lt;&#x2F;a&gt;i am once again asking you to install the printer&lt;&#x2F;h2&gt;
&lt;p&gt;Fortunately, for this one, I did already write a &lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;brother-printer-linux&#x2F;&quot;&gt;short note&lt;&#x2F;a&gt; about it recently. Unfortunately for me, the printer wasn’t even found in the local network, this time, even after installing &lt;code&gt;cups&lt;&#x2F;code&gt; and &lt;code&gt;cups-browsed&lt;&#x2F;code&gt;. It turns out that I missed the DNSSD resolver, so I’ve installed &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.man7.org&#x2F;linux&#x2F;man-pages&#x2F;man5&#x2F;systemd.dnssd.5.html&quot;&gt;systemd-dnssd&lt;&#x2F;a&gt;. After enabling and starting it, I was delighted to see that not only was my printer recognized, but this time I didn’t even have to fiddle with the URL configuration myself, and it worked out of the box by being globally detected in “print” windows 🥳 Sometimes Linux is nice, even when it comes to printing 😆&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sweet-gnome-extensions&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sweet-gnome-extensions&quot; aria-label=&quot;Anchor link for: sweet-gnome-extensions&quot;&gt;🔗&lt;&#x2F;a&gt;sweet GNOME extensions&lt;&#x2F;h2&gt;
&lt;p&gt;What I dearly missed from my dead SSD is the list of GNOME extensions, carefully found over time. I’ll probably make some kind of pages with all my favorite GNOME extensions, at some point, so this doesn’t happen again. In the meanwhile, here are the ones I’ve installed immediately:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;With the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gnomepomodoro.org&#x2F;&quot;&gt;GNOME Pomodoro&lt;&#x2F;a&gt; app, a simple yet configurable GTK-powered Pomodoro timer, comes a system addon to start and stop pomodori with simple shortcuts, and see the status of the current Pomodoro.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;micheleg.github.io&#x2F;dash-to-dock&#x2F;&quot;&gt;Dash to dock&lt;&#x2F;a&gt; allows to create a dock of currently running and favorite applications, &lt;em&gt;à la&lt;&#x2F;em&gt; MacOS. Turns out, there’s a fork &#x2F; modified version &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;icedman&#x2F;dash2dock-lite&quot;&gt;Dash-to-dock-lite&lt;&#x2F;a&gt; that even has animations on hover, like MacOS, so I like it even better!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;extensions.gnome.org&#x2F;extension&#x2F;4099&#x2F;no-overview&#x2F;&quot;&gt;No overview at startup&lt;&#x2F;a&gt;. Nothing more. I like the sobriety of the description on the extensions website.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ubuntu&#x2F;gnome-shell-extension-appindicator&quot;&gt;AppIndicator&lt;&#x2F;a&gt;, to get all my different little icons on the status bar, at the top right 😍&lt;&#x2F;li&gt;
&lt;li&gt;The simple &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;extensions.gnome.org&#x2F;extension&#x2F;6807&#x2F;system-monitor&#x2F;&quot;&gt;System Monitor&lt;&#x2F;a&gt; indicator, with live status about usage of CPU&#x2F;RAM&#x2F;network and disk.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;that-s-all-folks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#that-s-all-folks&quot; aria-label=&quot;Anchor link for: that-s-all-folks&quot;&gt;🔗&lt;&#x2F;a&gt;that’s all, folks!&lt;&#x2F;h2&gt;
&lt;p&gt;In the next few days, I should receive a new 2TB SSD NVME disk. So I will hopefully be able to reinstall Steam on my machine, making it possible to get rid of Windows, as this was one of the last two usages I had of it (the second being using it for a DAW, in case you wondered). Will 2026 eventually be &lt;em&gt;my&lt;&#x2F;em&gt; year of Linux on the desktop? Let’s see 😌&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #67</title>
        <published>2026-02-11T00:00:00+00:00</published>
        <updated>2026-02-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w06/"/>
        <id>https://bouvier.cc/notes/2026-w06/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w06/">&lt;p&gt;PaperWM, des montagnes russes synchronisées sur Wicked, et des sites perso qu’ils sont très très beaux.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;J’ai été remotivé par le fait de tomber sur de nouvelles notes hebdomadaires écrites par une mutu sur Mastodon, qui rappelait, encore une fois, que l’enjeu n’est pas de faire nécessairement dans la qualité ultime, mais juste de publier régulièrement. Merci à elle 🤗&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;auto-hébergement : je connaissais le &lt;em&gt;reverse proxy&lt;&#x2F;em&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;caddyserver.com&#x2F;&quot;&gt;Caddy&lt;&#x2F;a&gt; uniquement de nom, mais j’ai eu l’occasion de commencer à l’utiliser, et je suis halluciné à quel point c’est plus simple à utiliser et mettre en place que Nginx pour du &lt;em&gt;reverse-proxy&lt;&#x2F;em&gt; de base : la configuration tient en une seule ligne 🤩&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;next.ink&#x2F;222826&#x2F;deezer-demonetise-85-des-ecoutes-de-morceaux-generes-par-ia-et-monetise-leur-detection&#x2F;&quot;&gt;Deezer démonétise partiellement les musiques générées par IA&lt;&#x2F;a&gt;, et invite les autres parties à faire de même. Cela ne sera probablement pas suivi par Spotify, qui gagne trop d’argent à mettre des musiques IA dans ses playlists mises en avant…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;J’ai découvert grâce à la chaine Youtube de &lt;em&gt;Georges Collier&lt;&#x2F;em&gt; (qui présente plein de retranscriptions et de performances musicales assez insolites ou hors du commun) la chanteuse &lt;em&gt;Laufey&lt;&#x2F;em&gt;. Petits coups de cœur pour cette voix qui part aussi bien dans des graves suaves ou des aigus divins. Par exemple, dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=wI3YhWz9-5Y&quot;&gt;Valentine&lt;&#x2F;a&gt; ou &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=wK6gbKC90Ps&quot;&gt;On the sunny side of the street&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;eljojo.github.io&#x2F;rememory&#x2F;&quot;&gt;ReMemory&lt;&#x2F;a&gt; permet de découper un secret en plein de morceaux, qui seront ensuite partagés à plein de gens, qui pourront ensuite reconstituer le secret s’iels le décident collaborativement. Pas mal pour partager un mot de passe principal, en cas de décès par exemple ! On notera le fonctionnement en mode horcrux (fuck les TERFs, nonobstant).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.navidrome.org&#x2F;&quot;&gt;Navidrome&lt;&#x2F;a&gt; permet d’auto-héberger son service de streaming musical, pour avoir son propre Spotify ou son propre Deezer à la maison, le fascisme en moins. Ça a l’air chouette !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wtfutil.com&#x2F;&quot;&gt;WTF&lt;&#x2F;a&gt;, un &lt;em&gt;dashboard&lt;&#x2F;em&gt; au sein du terminal, tout configurable et modulaire, qui a l’air bien chouette si vous adorez les interfaces TUI bien geeky comme il faut.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai découvert grâce à l’ami &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mamot.fr&#x2F;@thibaultamartin&quot;&gt;Thib&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;niri-wm&#x2F;niri&quot;&gt;niri&lt;&#x2F;a&gt;, et ne me sentant pas de changer complètement d’environnement de bureau, j’ai préféré utiliser (au moins pour une période d’essai) l’extension GNOME &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;paperwm&#x2F;PaperWM&quot;&gt;PaperWM&lt;&#x2F;a&gt;, qui en reproduit toutes les grandes idées, très simplement. Comme le note &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jvns.ca&#x2F;blog&#x2F;2020&#x2F;01&#x2F;05&#x2F;paperwm&#x2F;&quot;&gt;Julia Evans&lt;&#x2F;a&gt;, c’est plaisant d’avoir un outil qui Juste Marche™, et pour lequel on n’a pas besoin de passer des heures à le configurer 🥰&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Si vous avez connu le jeu vidéo de construction de montagnes russes Rollercoaster Tycoon, vous aimerez probablement cette vidéo où &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=gNty2y0DQN8&quot;&gt;deux montagnes russes synchronisées dansent une chorégraphie sur la musique de Wicked&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Allez jeter un coup d’œil au magnifique blog d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;astriiid.fr&#x2F;notes&#x2F;2026-w04&#x2F;&quot;&gt;Astrid&lt;&#x2F;a&gt;, qui a par ailleurs commencé également des notes hebdomadaires 🥳&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;storyseedlibrary.org&quot;&gt;StorySeedLibrary&lt;&#x2F;a&gt;, une bibliothèque de très chouettes œuvres graphiques solarpunk et libres de droit.&lt;&#x2F;li&gt;
&lt;li&gt;La page &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ribambelle.club&#x2F;~zoutof&#x2F;&quot;&gt;En Vrac&lt;&#x2F;a&gt; de ribambelle.club, une merveille de nostalgie du Web des années 2000.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #66</title>
        <published>2026-02-02T00:00:00+00:00</published>
        <updated>2026-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w05/"/>
        <id>https://bouvier.cc/notes/2026-w05/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w05/">&lt;p&gt;Novecento : pianiste, la Vilaine Bouche, une nouvelle newsletter tech bien chouette, et la narration par une personne neuro-divergente.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; : petite soirée de contribution avec l’ami Nicofrand ; nous avons fusionné quelques contributions qu’il a faites, après relectures et essais. C’était chouette !&lt;&#x2F;li&gt;
&lt;li&gt;auto-hébergement : Mon serveur se fait attaquer 😱 Plein de tentatives de connexions SSH qui semblent outrepasser les limitations de &lt;em&gt;fail2ban&lt;&#x2F;em&gt; que j’ai pourtant mis en place il y a plusieurs mois. J’ai durci les règles &lt;em&gt;fail2ban&lt;&#x2F;em&gt;, à voir comment ça évolue dans les jours à venir ; des gens m’ont fait des recommendations chouettes également sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tutut.delire.party&#x2F;@bnjbvr&#x2F;116000092092632887&quot;&gt;Mastodon&lt;&#x2F;a&gt; !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Novecento : pianiste&lt;&#x2F;em&gt;, d’Alessandro Baricco, raconte l’histoire d’un prodige du piano qui a passé l’intégralité de sa vie sur un bateau, et jamais mis pied à terre. Une histoire courte, très intense, avec une écriture parlée très agréable et vraie. Très chouette !&lt;&#x2F;li&gt;
&lt;li&gt;Commencé &lt;em&gt;Les hommes trans sont-ils des salauds comme les autres ?&lt;&#x2F;em&gt;, dont seul le titre est provocateur. Cet essai est extrêmement bien argumenté, et bien que je n’en sois qu’à la moitié, il semble me donner une toute nouvelle compréhension de ce que ça veut dire, d’être trans, et rabat les cartes quant à la misandrie que l’on peut rencontrer dans certains milieux queers et féministes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Billie Eilish dit &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;dmRE9VavwuQ&quot;&gt;Fuck ICE&lt;&#x2F;a&gt; à l’annonce des Grammy Awards, et rien que pour ça, je réécoute ses albums au hasard.&lt;&#x2F;li&gt;
&lt;li&gt;Vilaine Bouche, un groupe de deux chanteuses &lt;em&gt;a cappella&lt;&#x2F;em&gt;, vues en concert dans une toute petite salle. C’était top ! Des paroles militantes, des harmonies parfaites, beaucoup d’humour. Je vous laisse découvrir par exemple &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=zyHPXTzXatQ&quot;&gt;C’est comme ça&lt;&#x2F;a&gt;, avec un clip qui appuie bien le propos.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;githubcopilotlitigation.com&#x2F;&quot;&gt;&lt;em&gt;class action&lt;&#x2F;em&gt; contre Microsoft&lt;&#x2F;a&gt; pour l’apprentissage de leur IA &lt;em&gt;Copilot&lt;&#x2F;em&gt; sur des millions de lignes de code &lt;em&gt;open-source&lt;&#x2F;em&gt;. À voir si ça mène à quelque chose ! Pour rappel, il y avait une eu une &lt;em&gt;class action&lt;&#x2F;em&gt; similaire à l’égard d’Anthropic (l’entreprise derrière l’IA &lt;em&gt;Claude&lt;&#x2F;em&gt;), qui s’est soldée par une (petite) victoire pour les auteur·ices de livres, qui ont pu récupérer quelques centaines d’euros par livre qu’iels avaient écrit.&lt;&#x2F;li&gt;
&lt;li&gt;Pendant ce temps-là, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;exclaim.ca&#x2F;music&#x2F;article&#x2F;record-labels-spotify-sue-anna-s-archive-for-13-trillion-alleging-theft&quot;&gt;Spotify &lt;em&gt;ose&lt;&#x2F;em&gt; attaquer la bibliothèque d’Anna pour 13 trillions&lt;&#x2F;a&gt; (millions de milliards, donc) de dollars, soit environ 150,000 dollars &lt;em&gt;par musique&lt;&#x2F;em&gt; qu’Anna a &lt;em&gt;scrapé&lt;&#x2F;em&gt; pour faire son archive de préservation. Mais si ça avait été pour de l’entraînement IA, ça aurait été considéré &lt;em&gt;fair use&lt;&#x2F;em&gt;, non ? 😇&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre le concept de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Port_knocking#Client_script&quot;&gt;&lt;em&gt;port knocking&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, qui consiste à ouvrir un port à une IP donnée, seulement après que celle-ci ait envoyé des paquets à une séquence d’autres ports sur la même machine. Dingue.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;michiel.buddingh.eu&#x2F;enclosure-feedback-loop&quot;&gt;The Enclosure feedback loop&lt;&#x2F;a&gt; : de la captation des données d’entraînement par les entreprises d’IA, qui risquent de devenir leur nouveau pétrole, et d’enfermer leurs client·es dans leurs &lt;em&gt;walled gardens&lt;&#x2F;em&gt;. Hypothèse intéressante.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;micahcantor.com&#x2F;blog&#x2F;bluesky-comment-section.html&quot;&gt;I added a Bluesky comment section to my blog&lt;&#x2F;a&gt; : chouette de voir que des gens ont également eu l’idée d’utiliser des posts Bluesky comme source de commentaires pour leur blog, et que c’est possible d’implémenter ça facilement avec Bluesky également !&lt;&#x2F;li&gt;
&lt;li&gt;L’ami Stan aka @Signez lance sa newsletter bimensuelle et un stream bimensuel sur l’actualité tech, sur son site &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lundi.dev&#x2F;&quot;&gt;lundi.dev&lt;&#x2F;a&gt;, dont le design est extrêmement bien léché, comme à l’habitude du travail de Stan (embauchez-le !).&lt;&#x2F;li&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;european-alternatives.eu&#x2F;&quot;&gt;liste d’alternatives européennes à des produits numériques&lt;&#x2F;a&gt;. Je crois en avoir déjà parlé, mais dans le doute…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;stations.albertguillaumes.cat&#x2F;&quot;&gt;modèles 3D de stations de métro&lt;&#x2F;a&gt;. Fascinant de voir les fameuses stations parisiennes démesurées.&lt;&#x2F;li&gt;
&lt;li&gt;Un papier de recherche sur un sujet de mathématiques très sérieux : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2403.00465&quot;&gt;comment optimiser les temps de rencontre, au sein d’un groupe polyamoureux&lt;&#x2F;a&gt; (aka polycule) ? Ça peut prêter à sourire, mais ce genre de papiers peut probablement trouver des applications dans d’autres champs, étant la généralisation d’un autre problème connu en mathématiques.&lt;&#x2F;li&gt;
&lt;li&gt;Attention, lien pas sûr pour le travail. Des fois on tombe sur des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Corps_%C3%A9tranger_rectal&quot;&gt;articles Wikipedia absurdes&lt;&#x2F;a&gt;, et on s’étonne à quel point ils sont bien sourcés. Bravo la communauté, j’imagine ? 😁&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hanickadot.github.io&#x2F;think-like-me.html&quot;&gt;À quoi ça ressemble la narration par une personne neuro-divergente, dans son esprit&lt;&#x2F;a&gt; ? Chouette utilisation de CSS pour les effets de flou.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #65</title>
        <published>2026-01-22T00:00:00+00:00</published>
        <updated>2026-01-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w03/"/>
        <id>https://bouvier.cc/notes/2026-w03/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w03/">&lt;p&gt;La psychose du développement agentique, un mix d’Antilogic qui tabasse, des sculptures sur coupes afros, et une blague potache de nerds des maths.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=1CrjyQvV3nE&quot;&gt;Ce que cache la bulle de l’IA&lt;&#x2F;a&gt;, une discussion autour de l’impact économique et sociologique (sur le travail) de la bulle de l’IA.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=yrIDUxswsus&quot;&gt;10 raisons d’utiliser la technique Pomodoro&lt;&#x2F;a&gt;, par le psychologue anti-psychiatrique Za ; une vision mesurée, non productiviste, de la méthode Pomodoro, pour les neuroa. On adore !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theoatmeal.com&#x2F;comics&#x2F;ai_art&quot;&gt;Let’s talk about AI art&lt;&#x2F;a&gt;. &lt;em&gt;The Oatmeal&lt;&#x2F;em&gt; explique, en tant qu’artiste, son ressenti sur les « œuvres » générées par IA, et ça tombe très juste, notamment ce sentiment de déception et trahison lorsqu’on découvre qu’une œuvre qui nous a émue était en fait générée par IA.&lt;&#x2F;li&gt;
&lt;li&gt;Le court &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;log.andie.se&#x2F;post&#x2F;26652940513&#x2F;the-short-instructional-manifesto-for-relationship&quot;&gt;manifeste de l’anarchie relationnelle&lt;&#x2F;a&gt;, même si on n’est pas intéressé·es par la non-monogamie éthique, peut permettre d’assainir sa vision des relations amoureuses.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Q3JE4TGTO7I&quot;&gt;reprise &lt;em&gt;a cappella&lt;&#x2F;em&gt; de Hide &amp;amp; Seek, d’Imogen Heap&lt;&#x2F;a&gt;. Assez bluffant, iels arrivent à reproduire les effets de transformation de la voix, vocoder et reverb, notamment, avec un réalisme étonnant.&lt;&#x2F;li&gt;
&lt;li&gt;La dj rennaise Antilogic a sorti &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soundcloud.com&#x2F;tsugimag&#x2F;antilogic-residence-janvier-2026?si=81544095199a42fbbcc7b8f9a55b92b0&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&amp;amp;utm_campaign=social_sharing&quot;&gt;un nouveau mix de global bass &#x2F; us club&lt;&#x2F;a&gt;, et ça me fait taper du pied ou hocher la tête du début à la fin 🥳&lt;&#x2F;li&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=XYeuvbhKy4I&quot;&gt;reprise hyper funky d’&lt;em&gt;I will survive&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; (originellement de Gloria Gaynor) par le groupe de funk &lt;em&gt;Scary Pockets&lt;&#x2F;em&gt;. Merci Alexis pour la découverte 😎&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;En ces temps de guerre froide 2.0, voici une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;european-alternatives.eu&#x2F;&quot;&gt;liste d’alternatives européennes&lt;&#x2F;a&gt; à des services Web américains.&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre que les navigateurs bureau basés sur Gecko, donc Firefox et 🥰 Zen Browser 🥰 notamment, permettent de faire de la traduction locale, sans utiliser de composantes serveurs, en allant sur &lt;code&gt;about:translations&lt;&#x2F;code&gt;. On se retrouve avec une interface de traduction assez simple : langue d’origine, langue de destination ; et la traduction est relativement rapide, et surtout très correcte ! Alors on range ses fourches anti-IA dans Firefox, parce que oui ça en utilise (mais ce ne sont probablement pas des LLMs, au &lt;em&gt;pire&lt;&#x2F;em&gt; des SLMs, mais sûrement juste des &lt;em&gt;deep net&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tools.rmv.fyi&#x2F;&quot;&gt;Delphi tools&lt;&#x2F;a&gt;, une petite collection d’outils en ligne très simples qui font très bien une chose, et une seule : générer un QR code, retirer le fond d’une image, etc.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lucumr.pocoo.org&#x2F;2026&#x2F;1&#x2F;18&#x2F;agent-psychosis&#x2F;&quot;&gt;Agent Psychosis: Are We Going Insane?&lt;&#x2F;a&gt; : un ancien fan très prosélyte des LLMs pour le code, se pose la question d’où est-ce que ça va, de si les gens deviendraient pas un peu dinguo avec ces IAs.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addyosmani.com&#x2F;blog&#x2F;next-two-years&#x2F;&quot;&gt;The Next Two Years of Software Engineering&lt;&#x2F;a&gt; : une réflexion sur les futurs possibles des carrières de développeur·euses, à cause de l’impact des IAs. L’article m’a paru plutôt nuancé, avec pas mal de scénarios possibles, et des conseils qui me semblent raisonnables, dans le cas où « ça prend ».&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Laetitia Ky est une artiste et activiste ivoirienne qui intègre des éléments de culture africaine dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thisiscolossal.com&#x2F;2022&#x2F;05&#x2F;laetitia-ky-hair-sculpture&#x2F;&quot;&gt;des coupes de cheveux qui sont de véritables sculptures&lt;&#x2F;a&gt;. Impressionnant !&lt;&#x2F;li&gt;
&lt;li&gt;Dans la catégorie « les mathématiciens sont des rigolos », David Cox et Steven Zucker se sont rencontrés en fac de maths et se sont dit qu’il fallait absolument qu’ils produisent un théorème ensemble, juste histoire que ce dernier ait un nom rigolo. C’est donc chose faite, il existe la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Machine_de_Cox-Zucker&quot;&gt;Machine de Cox-Zucker&lt;&#x2F;a&gt;. Pas sûr si d’être dédié à une telle blague relève du génie ou du &lt;em&gt;facepalm&lt;&#x2F;em&gt; massif.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #64</title>
        <published>2026-01-12T00:00:00+00:00</published>
        <updated>2026-01-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w02/"/>
        <id>https://bouvier.cc/notes/2026-w02/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w02/">&lt;p&gt;L’arnaque d’une vie réussie, 2026 année de Linux sur le bureau pour certain·es, et des tourelles laser anti-moustique.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Des petites notes hebdo courtes, mais au moins je publie en temps et en heure 😤 Si vous en voulez des plus longues, celles publiées au milieu de la semaine dernière ont beaucoup beaucoup plus de contenu. Bonne semaine à tous·tes !&lt;&#x2F;p&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.huckmag.com&#x2F;article&#x2F;there-is-no-such-thing-as-a-good-landlord&quot;&gt;There is no such thing as a ‘good landlord’&lt;&#x2F;a&gt; : des réponses au relativisme sur la notion de propriétaire bailleur. « Tu vois la différence entre le bon propriétaire bailleur et le mauvais propriétaire bailleur ? »&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;b5d74898-d1a5-48a1-bed0-1bd3e83ea77b&quot;&gt;Réussir sa vie, la plus grande arnaque du siècle ?&lt;&#x2F;a&gt;, Samah Karaki, neuroscientifique, explique le non-sens du concept de « réussir sa vie ». Son discours me semble rejoindre celui de Moukheiber, dont je parlais dans les notes de la semaine dernière.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pocketcasts.com&#x2F;podcast&#x2F;encore-heureux&#x2F;d576afe0-d4a0-013a-d99e-0acc26574db2&#x2F;comment-ne-pas-se-perdre-dans-la-qu%C3%AAte-de-soi&#x2F;62e3aba3-d3e1-4d2f-972d-68e2f50394f6&quot;&gt;Comment ne pas se perdre dans la quête de soi ?&lt;&#x2F;a&gt; — que je trouve mal nommé, si je puis me permettre — où Élodie Emery, journaliste et autrice, parle des dérives du bouddhisme et du yoga, notamment de ses « chefs », de violences sexuelles qui ont été totalement silenciées dans ces communautés. Glace le sang 😨 Mais important de remettre les pendules à l’heure.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Vampire Survivors, encore et toujours. Tellement pratique de pouvoir jouer des petites parties de 30 minutes, entre deux trains.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;burkeholland.github.io&#x2F;posts&#x2F;opus-4-5-change-everything&#x2F;&quot;&gt;Opus 4.5 is going to change everything&lt;&#x2F;a&gt; : je m’interroge quand je vois des gens clairement affichés comme sceptiques de « la grande méchante IA qui va remplacer les codeurs » finalement se dire « ah bah ouais, ça pourrait bien arriver ». Je n’ai pas très peur de ça, cependant, à l’heure actuelle. Par contre, je note que beaucoup d’instructions dans le &lt;em&gt;prompt&lt;&#x2F;em&gt; me semblent applicables également pour des développeur·ses humain·es, et que je considère même qu’un certain ensemble de ces recommandations fasse la différence entre un·e dev &lt;em&gt;junior&lt;&#x2F;em&gt; et &lt;em&gt;senior&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xeiaso.net&#x2F;notes&#x2F;2026&#x2F;year-linux-desktop&#x2F;&quot;&gt;2026 will be my year of the Linux desktop&lt;&#x2F;a&gt;, Xe va passer sur Linux cette année, et &lt;em&gt;alerte divulgâchis&lt;&#x2F;em&gt;, ce n’est pas &lt;em&gt;seulement&lt;&#x2F;em&gt; parce que Linux est devenu très bien. Je vais sûrement faire de même (je dis ça pour faire trembler le dernier Windows qui reste sur une de mes machines).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Rappel : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;Mqu-yZWce8c&quot;&gt;Elle Cordova est hilarante&lt;&#x2F;a&gt;, si vous êtes sapio.&lt;&#x2F;li&gt;
&lt;li&gt;Financement participatif d’une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.indiegogo.com&#x2F;en&#x2F;projects&#x2F;jimwong-38623042&#x2F;worlds-first-portable-mosquito-air-defense&quot;&gt;tourelle laser automatique anti-moustiques&lt;&#x2F;a&gt;. Alors d’un côté, c’est overkill, c’est super cher, c’est moche de buter des insectes qui ont (probablement) une fonction dans les écosystèmes, mais de l’autre… est-ce qu’ils ne l’ont pas un peu cherché quand même ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=1XHXezdnL0A&quot;&gt;Des exercices de coaching vocal qui motivent de ouf &lt;&#x2F;a&gt;! Par l’enthousiaste Cheryl Porter.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #63</title>
        <published>2026-01-07T00:00:00+00:00</published>
        <updated>2026-01-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2026-w01/"/>
        <id>https://bouvier.cc/notes/2026-w01/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2026-w01/">&lt;p&gt;De l’analyse scientifique du beatbox, pas de bonne résolution mais des thèmes pour l’année, un peu de métal, de piano et de hard-tech militante, Tutotal et des œuvres d’art composées de cailloux sur des plages.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Allez, la joyeuse année à tous·tes, avec moult notes hebdomadaires pour les mois à venir. Je kiffe bien de lire les vôtres. Alors continuons ensemble à propager cette tradition de cartes postales numériques 😊&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=aMgkX9O1x3w&quot;&gt;Le capitalisme craint, comment on change les choses ?&lt;&#x2F;a&gt; (titre approximatif, car Youtube me montre une version traduite en anglais, malheureusement) Entre analyse et discours méthodique et d’inspiration, une courte vidéo qui fait plaisir sur les moyens d’actions, la praxis, quand on veut changer les choses 🫶&lt;&#x2F;li&gt;
&lt;li&gt;Plutôt qu’avoir des bonnes résolutions (qui survivent au max jusque la fin du mois de janvier, si vous êtes comme moi), pourquoi ne pas définir un &lt;em&gt;thème&lt;&#x2F;em&gt; pour votre année, et y revenir régulièrement ? C’est l’idée de cette &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=NVGuFdX5guE&quot;&gt;vidéo&lt;&#x2F;a&gt; astucieuse de CGP Grey.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé &lt;em&gt;Neuromania&lt;&#x2F;em&gt; d’Albert Moukheiber, un essai de vulgarisation sur les faussetés qu’on se raconte sur nos cerveaux, comment c’est instrumentisé par le monde du développement personnel, avec beaucoup de neurosciences à l’intérieur. Je n’en suis qu’au chapitre 3, et j’apprécie déjà beaucoup l’écriture de l’auteur, toujours très nuancée.&lt;&#x2F;li&gt;
&lt;li&gt;Commencé &lt;em&gt;La formule préférée du professeur&lt;&#x2F;em&gt;, un roman de l’autrice Yōko Ogawa, qui parle de mathématiques et d’Alzeihmer. Très touchant 🥺&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.lefigaro.fr&#x2F;formation&#x2F;2014&#x2F;08&#x2F;06&#x2F;09006-20140806ARTFIG00028-le-juteux-business-de-l-indicateur-de-personnalite-mbti.php&quot;&gt;Le juteux business de l’indicateur de personnalité MBTI&lt;&#x2F;a&gt;. J’ai presque envie de m’excuser de faire un lien vers le Figaro, mais une fois n’est pas coutume : une critique en français dans le texte du test de personnalité MBTI (aussi appelé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tutut.delire.party&#x2F;@bnjbvr&#x2F;115841943981519937&quot;&gt;« astrologie pour CSP+ »&lt;&#x2F;a&gt;), qui entre autres, n’est pas reproductible, n’a pas de validation scientifique (et est même invalidé scientifiquement), et rapporte beaucoup d’argent aux entreprises de formation associées 👀&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mycabinetofcuriosities.com&#x2F;articles&#x2F;hey-cheri&#x2F;&quot;&gt;Marry me!!! is the last thing you expect at 2am&lt;&#x2F;a&gt; : un court texte très mignon sur une rencontre inattendue entre l’auteur et un mystérieux admirateur nocturne.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ynote.hk&#x2F;mots&#x2F;corps&#x2F;tdah-diagnotic-et-angles-morts.html&quot;&gt;TDAH, diagnostic et angles morts&lt;&#x2F;a&gt; : Fanny parle du diagnostic de TDAH, avec un angle sociétal plutôt qu’individuel et psychologisant. Qu’est-ce qui relève de l’adaptation de soi à la société, pour un enjeu productiviste ? Qu’est-ce qui relève simplement du confort personnel et de la joie de vivre ? J’adore !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Alors, petit (hyper)focus sur le &lt;em&gt;beatbox&lt;&#x2F;em&gt;, ou la capacité de jouer de la musique électronique en utilisant uniquement sa bouche comme instrument de musique. Au départ, tout a commencé avec &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=qlrpeYdm9Ec&quot;&gt;Dopamine&lt;&#x2F;a&gt;, ce titre incroyable du beatboxer Wing, extrêmement entraînant, méga réaliste, avec des effets appliqués à la voix, etc. Déjà, moi ça me fascine qu’on puisse produire des sons pareils en postillonnant et en se tordant la bouche dans tous les sens. Mais vient ensuite la question : comment est-ce possible ? En parallèle de ça, un pote me parle de la chaîne Youtube de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;@TheCharismaticVoice&quot;&gt;The Charismatic Voice&lt;&#x2F;a&gt;, où l’hôte, experte en voix aussi bien du point de vue artistique que scientifique, décrypte des méthodes de chant. Eh ben, devinez quoi ? Elle a analysé cette vidéo de Dopamine, et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=k2mGgmk7MJY&quot;&gt;elle n’en revient pas&lt;&#x2F;a&gt; ! Les explications du pourquoi sont très intéressantes ; elle évoque notamment que le beatboxer émet probablement plusieurs flux d’airs en parallèle. En fait, c’est tellement incompréhensible, même pour elle et son niveau d’expertise, qu’elle appelle une collègue à la rescousse pour refaire une analyse encore plus technique &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=SQsWPpgkxlI&quot;&gt;ici&lt;&#x2F;a&gt;. Complètement fou. Je kiffe de découvrir que ce qui me semblait &lt;em&gt;très bien&lt;&#x2F;em&gt; est en fait &lt;em&gt;absolument fucking amazing&lt;&#x2F;em&gt; 🤩&lt;&#x2F;li&gt;
&lt;li&gt;Du piano doux et onirique : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;link.deezer.com&#x2F;s&#x2F;326faVQPHFswqY1a5Xxfs&quot;&gt;RAIN&lt;&#x2F;a&gt;, de Tony Ann ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;link.deezer.com&#x2F;s&#x2F;326fc1IgRzfwB8btRyMx8&quot;&gt;South Cross Prayer&lt;&#x2F;a&gt;, d’Andrea Tonoli.&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre Devin Townsend, un artiste de métal symphonique (? j’y connais rien) avec une voix d’ange &lt;em&gt;et&lt;&#x2F;em&gt; de démon ??? &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=nubJjB95VdY&quot;&gt;Performance vocale incroyable ici&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jM8dCGIm6yc&quot;&gt;The Hu — Wolf Totem&lt;&#x2F;a&gt;, du métal qui inclut du chant polyphonique mongol 🤯&lt;&#x2F;li&gt;
&lt;li&gt;De la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=-cgIAGHopJo&quot;&gt;hard-tech sur le freestyle de rap du mec fan de Jean-Luc Mélenchon&lt;&#x2F;a&gt;. Parce que pourquoi pas ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Vampire Survivors, toujours. La drogue, c’est mal, m’voyez ?&lt;&#x2F;li&gt;
&lt;li&gt;Mario Kart World, sur Nintendo Switch 2. C’est moi ou le 150CC c’est devenu très dur ??&lt;&#x2F;li&gt;
&lt;li&gt;Broforce. Idéal pour les moments où on a besoin d’éteindre son cerveau et de s’envoler à dos de cochon en faisant tout exploser dans un mood second degré.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vickiboykis.com&#x2F;2025&#x2F;12&#x2F;22&#x2F;2025-in-review&#x2F;&quot;&gt;2025 in review&lt;&#x2F;a&gt; : une personne dev parle de son expérience de dev avec un point de vue très « senior », en entremêlant son texte de références littéraires. Kiffant !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jyn.dev&#x2F;i-m-just-having-fun&#x2F;&quot;&gt;i’m just having fun&lt;&#x2F;a&gt; : Jyn parle de son expérience de la joie en tant que dev, dans un style décontracté, une posture très humble. Ça aussi c’est kiffant. Allez, c’est le mot de la semaine. Le genre d’articles malgré tout si intéressant que j’en ressors avec 5 nouveaux articles Wallabagués. Spécial kiffance pour le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jyn.dev&#x2F;assets&#x2F;it-is-only-computer.png&quot;&gt;guide de la pratique de l’ordinateur&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.mig5.net&#x2F;mig5&#x2F;bouquin&quot;&gt;Bouquin&lt;&#x2F;a&gt;, une app desktop libre de prise de notes, écrite en Python, avec du &lt;em&gt;time logging&lt;&#x2F;em&gt; intégré.&lt;&#x2F;li&gt;
&lt;li&gt;L’organisation caritative &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;futo.org&#x2F;about&#x2F;what-is-futo&#x2F;&quot;&gt;FUTO&lt;&#x2F;a&gt; a financé le développement d’un clavier Android libre, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;keyboard.futo.org&#x2F;&quot;&gt;FUTO Keyboard&lt;&#x2F;a&gt;, avec des fonctionnalités modernes : glisser pour écrire, auto-correction, reconnaissance vocale directement sur le mobile via des modèles téléchargés une fois pour toutes. Ça a l’air pas trop mal, mais un de mes usages favoris de GBoard (je sais, c’est mal) me manque : la capacité d’écrire l’identifiant d’un emoji afin de pouvoir le remplacer par l’emoji en question. (Par exemple, si je tape « banana », le clavier me propose de remplacer ce mot par l’emoji 🍌. Un cas d’usage très fréquent, oui oui oui.)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;openwhispr.com&#x2F;&quot;&gt;OpenWhispr&lt;&#x2F;a&gt; est un outil qui utilise la sacro-sainte IA pour faire de la transcription de voix vers l’écrit, sur votre ordinateur. Il est possible d’y brancher un moteur d’IA locale, pour éviter d’émettre toutes ses données vers les géants. À essayer 👀&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kevinalbs.com&#x2F;spherical_snake&#x2F;&quot;&gt;Un jeu de Snake, mais qui prend place sur une boule&lt;&#x2F;a&gt;. Idéal pour vérifier que passer par les pôles raccourcit les trajets.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.buttsss.com&#x2F;&quot;&gt;Buttsss&lt;&#x2F;a&gt;, une collection de gif animés de culs (mais relativement SFW).&lt;&#x2F;li&gt;
&lt;li&gt;Des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.studio-origin.fr&#x2F;technique-vocale&quot;&gt;ressources en technique vocale&lt;&#x2F;a&gt;, pour celleux qui chantent ou aspirent &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; à chanter.&lt;&#x2F;li&gt;
&lt;li&gt;On rappelle &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Principe_d&amp;#x27;Anna_Kar%C3%A9nine&quot;&gt;le principe d’Anna Karénine&lt;&#x2F;a&gt;, issu de l’incipit du roman éponyme de Tolstoï : « Toutes les familles heureuses se ressemblent, mais chaque famille malheureuse l’est à sa façon. »&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;s2.washingtonpost.com&#x2F;camp-rw&#x2F;?s=695d469d63c1b115695430f3&quot;&gt;Des moyens rigolos de réutiliser du vieux matos numérique&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mymodernmet.com&#x2F;jon-foreman-beach-installations&#x2F;&quot;&gt;œuvres d’art géantes faites avec des cailloux&lt;&#x2F;a&gt; sur le sable des plages 😍&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=slRsexrhbG8&quot;&gt;Half Life et Half Life 2 en 60 secondes&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Coup d’œil dans le rétro. Si vous êtes passé·es à côté de Tutotal, vous avez de la chance de pouvoir le découvrir aujourd’hui : des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=dRapojYIFIk&quot;&gt;détournements&lt;&#x2F;a&gt; de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=GolcMoNvpQE&quot;&gt;tutoriels&lt;&#x2F;a&gt; Youtube pour commenter des bandes annonces de film, en mode absurde et mauvaise foi, par Arte bien sûr. Ça me manque 🥲&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;ha ! jeu de mots accidentel. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #62</title>
        <published>2025-12-29T00:00:00+00:00</published>
        <updated>2025-12-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w52/"/>
        <id>https://bouvier.cc/notes/2025-w52/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w52/">&lt;p&gt;Dernières notes de 2025 ! La solitude des femmes, les traumas qui nous rendent violents, l’accident de chasse, Antilogic et l’orthorexie.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Avec une semaine de retard, mais que voulez-vous, c’est la fin d’année 😌 Bonnes fêtes à vous 🎉&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;JM5JcEo9x9I&quot;&gt;Les applications de rencontre ont-elles tué l’amour ?&lt;&#x2F;a&gt; Une vidéo de vulgarisation de sociologie de l’amour, sur Blast, très intéressante. Marrant d’entendre que ces apps sont une version moderne et ultra libérale des annonces matrimoniales, et que les gens ne se rencontrent principalement &lt;em&gt;pas&lt;&#x2F;em&gt; via ces apps.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Gp15Y_KlBPY&quot;&gt;Changer de regard sur la solitude des femmes&lt;&#x2F;a&gt;, une réflexion sur le double standard qu’il peut exister entre la solitude des hommes (sociétalement bien perçue, comme étant un moment d’introspection, de réflexion, d’analyse) et celle des femmes (sociétalement mal vue, comme un échec). Cette vidéo m’a également aidé à mieux apprécier la solitude, en en mettant en avant les aspects positifs et en déconstruisant les aspects négatifs, souvent appris.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini la BD &lt;em&gt;L’accident de chasse&lt;&#x2F;em&gt;, au dessin si beau, et à l’histoire si tragique.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai acheté de manière impulsive et dévoré &lt;em&gt;Notre besoin de consolation est insatiable&lt;&#x2F;em&gt;, un recueil de nouvelles par l’essayiste anarchiste suédois Stig Dagerman. Quelques nouvelles m’ont marqué, notamment la première éponyme. Beaucoup de réflexions philosophiques sur la nature de la littérature qui me sont passées au-dessus (je ne m’y connais pas assez !), mais d’autres essais fascinants, notamment une description réaliste de la France de 1949, dépeignant notamment les illusions d’après-guerre.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lapresselibre.info&#x2F;next&#x2F;le-141-core-symbole-de-la-radicalisation-ecofasciste&quot;&gt;Le 141 core, symbole de la radicalisation éco-fasciste&lt;&#x2F;a&gt;. Super, encore plus de &lt;em&gt;dog whistle&lt;&#x2F;em&gt; de l’extrême droite à connaître.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pocketcasts.com&#x2F;podcast&#x2F;encore-heureux&#x2F;d576afe0-d4a0-013a-d99e-0acc26574db2&#x2F;nos-traumas-font-ils-de-nous-des-gens-violents&#x2F;47f5dcfe-4601-49d4-a955-bd9c86573d4c&quot;&gt;Nos traumas font-ils de nous des gens violents ?&lt;&#x2F;a&gt; Dans la lignée des vidéos Youtube de Za, Juliet Drouar nous propose une déconstruction du concept de &lt;em&gt;trauma&lt;&#x2F;em&gt;, beaucoup plus fréquent que ce que l’on croit (et totalement absent de la psychanalyse — une autre raison supplémentaire de ne pas fréquenter cette pratique ésotérique). Passionnant.&lt;&#x2F;li&gt;
&lt;li&gt;Albert Moukheiber parle de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pocketcasts.com&#x2F;podcast&#x2F;kaavan-le-podcast-sant%C3%A9-mentale&#x2F;21ae3090-d477-013c-5cf2-0acc26574db2&#x2F;ce-que-ton-cerveau-ne-veut-pas-que-tu-saches-avec-albert-moukheiber&#x2F;8f4fc549-dbab-4c81-a1d0-4e6d238496df&quot;&gt;neurosciences dans le contexte de la santé mentale&lt;&#x2F;a&gt;, et c’est assez fascinant pour que j’ai acheté son livre &lt;em&gt;Neuromania&lt;&#x2F;em&gt; après l’écoute du podcast.&lt;&#x2F;li&gt;
&lt;li&gt;Salomé Saqué parle de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pocketcasts.com&#x2F;podcast&#x2F;kaavan-le-podcast-sant%C3%A9-mentale&#x2F;21ae3090-d477-013c-5cf2-0acc26574db2&#x2F;sois-jeune-et-tais-toi-avec-salom%C3%A9-saqu%C3%A9&#x2F;4ab95bf6-343f-4d10-ab62-0776ecebca71&quot;&gt;son livre &lt;em&gt;Sois-jeune et tais-toi&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, évoquant plein de clichés faux sur la jeunesse. Hyper instructif.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pocketcasts.com&#x2F;podcast&#x2F;encore-heureux&#x2F;d576afe0-d4a0-013a-d99e-0acc26574db2&#x2F;faut-il-faire-de-la-muscu&#x2F;8a04f284-4331-46eb-adb5-067c1937f393&quot;&gt;Faut-il faire de la muscu ?&lt;&#x2F;a&gt; dans lequel Martin Page, auteur du livre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.seuil.com&#x2F;ouvrage&#x2F;douceur-de-la-musculation-martin-page&#x2F;9782487749498&quot;&gt;&lt;em&gt;Douceur de la musculation&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; et Camille Juza, autrice de documentaire radio et réalisatrice de documentaire télévisé, expliquent pourquoi la musculation est si mal appréciée, vue avec dédain comme un sport populaire, alors qu’elle peut être réparatrice et émancipatrice, au contraire.&lt;&#x2F;li&gt;
&lt;li&gt;🎶 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soundcloud.com&#x2F;anti_logic&quot;&gt;Antilogic&lt;&#x2F;a&gt;, deejaytte basée à Rennes, qui joue de la &lt;em&gt;global bass &#x2F; US club&lt;&#x2F;em&gt; (je l’ai entendue décrire ça comme ça). J’ai eu l’occasion de l’entendre en live, et c’était assez dingo comme énergie 🥳&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Broforce&lt;&#x2F;em&gt;, sur Nintendo Switch. Ça ne rend pas plus intelligent, mais ça défoule très efficacement.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Split fiction&lt;&#x2F;em&gt;, par le studio qui avait fait &lt;em&gt;It takes two&lt;&#x2F;em&gt; ; une aventure coopérative à deux, avec du gameplay qui change hyper fréquemment. Très chouette !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;The Pedestrian&lt;&#x2F;em&gt;, un petit jeu de puzzle très conceptuel : on est un personnage d’une pancarte de ville, qui essaie de s’échapper d’un panneau à l’autre.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai découvert &lt;em&gt;Vampire Survivors&lt;&#x2F;em&gt; avec quelques années de retard. Un bon passe-temps, très générateur de dopamine 🤪&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.gnome.org&#x2F;PikaBackup&#x2F;&quot;&gt;Pika Backup&lt;&#x2F;a&gt; une belle application GNOME pour faire des backups de vos disques sur PC.&lt;&#x2F;li&gt;
&lt;li&gt;Telecoop, la coopérative de l’abonnement téléphonique mobile, sort un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;telecoop.fr&#x2F;particuliers&#x2F;forfaits-mobile&#x2F;forfait-mobile-engage&quot;&gt;forfait 80 Go à 20€ par mois&lt;&#x2F;a&gt;, mais dont le prix diminue si vous ne consommez pas tous les gigots. Cela me semble pragmatique (vu que les usages sont plutôt orientés « beaucoup de données » de nos jours) mais avec la bonne incentive. Bien joué !&lt;&#x2F;li&gt;
&lt;li&gt;Blague : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;donlon&#x2F;cloudflare-error-page&quot;&gt;un générateur de fausse page d’erreur CloudFlare&lt;&#x2F;a&gt;, suite aux pannes récentes du géant centralisant du CDN, pour faire croire que votre site est tombé à cause de CloudFlare. Mais qui voudrait faire ça, et pourquoi… J’ai beaucoup de questions.&lt;&#x2F;li&gt;
&lt;li&gt;Julia Evans raconte sa transition de Vim vers Helix, l’éditeur de texte : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jvns.ca&#x2F;blog&#x2F;2025&#x2F;10&#x2F;10&#x2F;notes-on-switching-to-helix-from-vim&#x2F;&quot;&gt;Notes on switching to Helix from vim&lt;&#x2F;a&gt;. Ça donne envie !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;La boîte à outils open-source contre l’anxiété ; plein de techniques pour se recentrer dans le présent, notamment très pertinent si vous avec des réactions traumatiques.&lt;&#x2F;li&gt;
&lt;li&gt;La &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;N%C3%A9ot%C3%A9nie&quot;&gt;néoténie&lt;&#x2F;a&gt; décrit, en biologie, la conservation de caractéristiques juvéniles chez des membres adultes de l’espèce. C’est notamment le cas naturellement de l’axolotl, et il semble que cela arrive également chez les animaux de compagnie, qui sont « sélectionnés » par les humain·es en fonction de leur &lt;em&gt;mignonnitude&lt;&#x2F;em&gt;, ce qui se traduit plus ou moins par l’expression de leurs caractères juvéniles.&lt;&#x2F;li&gt;
&lt;li&gt;En mathématiques, les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Fraction_continue&quot;&gt;fractions continues&lt;&#x2F;a&gt; permettent de représenter n’importe quel nombre réel, avec une série finie ou infinie de sommes et divisions.&lt;&#x2F;li&gt;
&lt;li&gt;Dans un bâtiment situé boulevard Voltaire à Paris se trouve &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.telehouse.fr&#x2F;connectivite-data-center-telehouse&#x2F;france&#x2F;paris&#x2F;telehouse-paris-voltaire&#x2F;&quot;&gt;un des plus gros nœuds du réseau français&lt;&#x2F;a&gt;, soit environ 50% du trafic français (si j’ai bien compris — et croyez-moi quand il s’agit de réseaux, il y a plus de chances que j’ai mal compris).&lt;&#x2F;li&gt;
&lt;li&gt;L’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Orthorexie&quot;&gt;orthorexie&lt;&#x2F;a&gt; (du grec &lt;em&gt;orthos&lt;&#x2F;em&gt; = droit, &lt;em&gt;orexie&lt;&#x2F;em&gt; = appétit) est un trouble du comportement alimentaire qui consiste à se préoccuper de manière excessive de manger sainement. J’ai légèrement vécu ça à un moment de ma vie, au point de ne plus me faire à manger, parce que tout ce qui était à ma disposition n’était pas assez « sain » (ou je ne savais pas comment cuisiner sain). J’ai également testé pour vous : relationner avec quelqu’un comme ça, bah c’était… compliqué. Quelques livres de cuisine et un peu de psychothérapie plus tard, tout ça est derrière moi 😌&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>100 days to offload, un challenge d&#x27;écriture</title>
        <published>2025-12-11T00:00:00+00:00</published>
        <updated>2025-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/100daystooffload2026/"/>
        <id>https://bouvier.cc/notes/100daystooffload2026/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/100daystooffload2026/">&lt;p&gt;Suite à ma publication dans mes &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;2025-w46&#x2F;&quot;&gt;notes hebdomadaires&lt;&#x2F;a&gt; il y a quelques temps, et au fait que l’ami Pierre-Alain a commencé à relever le défi sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;qosgof.fr&#x2F;golb&#x2F;100-jours-pour&#x2F;&quot;&gt;son propre blog&lt;&#x2F;a&gt;, j’ai également commencé le défi &lt;em&gt;100 jours pour se décharger&lt;&#x2F;em&gt;, ou en anglais, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;100daystooffload.com&#x2F;&quot;&gt;100 days to offload&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Le but consiste à écrire 100 billets de blog en un an, en partageant un peu tout et n’importe quoi. Toujours dans cette optique d’essayer de baisser un peu les enjeux quant à la publication de contenus sur nos blogs, et participer à un écosystème de blogs plus riche, pour sortir de l’immédiateté et la récompense dopaminergique des réseaux sociaux. Autant vous dire que ça résonne beaucoup pour moi ; j’adore cette démarche.&lt;&#x2F;p&gt;
&lt;p&gt;Comme l’ami Pierre-Alain, j’ai &lt;em&gt;en fait&lt;&#x2F;em&gt; commencé le défi il y a quelques jours en rajoutant le tag en question à plusieurs de mes billets de blog ; mes dernières notes hebdomadaires, également publiées cette semaine, ainsi qu’une petite note pour expliquer comment j’ai installé mon imprimante (en anglais). Je compte bien continuer sur ma lancée et publier d’autres petits billets.&lt;&#x2F;p&gt;
&lt;p&gt;À voir comment ça tient dans le temps, bien entendu. Je ne compte pas me &lt;strong&gt;mettre la pression&lt;&#x2F;strong&gt;, mais me dire que je fais cela avec plaisir. J’ai mis dans le tag 2026 pour marquer que ce sera sur l’année 2026 que je compte publier ces 100 billets, même si en pratique je triche un petit peu en commençant en décembre. Bah quoi ? Mon blog = mes règles 😎&lt;&#x2F;p&gt;
&lt;p&gt;Si jamais tu te poses la question d’ouvrir ton propre blog, vas-y, lances-toi c’est l’occasion ! Et n’hésite-pas à me pinguer sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tutut.delire.party&#x2F;@bnjbvr&quot;&gt;Mastodon&lt;&#x2F;a&gt;, je serai ravi de suivre ton blog moi-même, et le relayer 🤗 Je kiffe de tomber sur des blogs personnels, découvrir les passions des gens, même juste lire leurs réflexions sur l’actualité, leurs passions. Je pense que cela nous permet de faire communauté, autrement et plus sainement, plus durablement que par le format court.&lt;&#x2F;p&gt;
&lt;p&gt;À ta plume ! Chiche ?&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #61</title>
        <published>2025-12-09T00:00:00+00:00</published>
        <updated>2025-12-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w49/"/>
        <id>https://bouvier.cc/notes/2025-w49/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w49/">&lt;p&gt;Mes Bataclans et les vôtres, l’Accident de Chasse, calm tech et les aliments dont le nom est tiré d’un nom propre.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=00aWverGmPg&quot;&gt;Mes Bataclans et les vôtres&lt;&#x2F;a&gt;, une autre vidéo de psychologie par Za, sur le concept de « trauma », et notamment le fait qu’on a tendance à s’auto-censurer sur ce qui est traumatique ou pas, en s’imaginant que le trauma c’est réservé aux victimes directes de la guerre ou du terrorisme (&lt;em&gt;alerte divulgâchage : non&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=m7TUewww3fo&quot;&gt;Serina, la planète des oiseaux&lt;&#x2F;a&gt; : une expérience de pensée sur ce qui se passerait si on mettait des canaris sur une planète sensiblement similaire à la Terre, sur des millions d’années. On y parle sélection naturelle, biologie, théorie de l’évolution, et c’est passionant !&lt;&#x2F;li&gt;
&lt;li&gt;Vu toute la saison 1 de &lt;em&gt;Twin Peaks&lt;&#x2F;em&gt;. J’aime beaucoup l’ambiance, c’est assez &lt;em&gt;chill&lt;&#x2F;em&gt; et posé malgré un fond d’angoisse constante. Kyle MacLachlan est incroyable dans son rôle d’agent du FBI très calme et intuitif.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé la BD &lt;em&gt;L’accident de chasse&lt;&#x2F;em&gt;, de David L. Carlson et Landis Blair. Le dessin est incroyable, à base de moult petits traits, de quoi faire rougir un Boulet…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bjhess.com&#x2F;posts&#x2F;no-socials-november-fin&quot;&gt;No Socials November Fin&lt;&#x2F;a&gt;, un petit retour de quelqu’un qui a fait un mois sans réseaux sociaux.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gobino.be&#x2F;manual-note-taking-journaling-dilemma&#x2F;&quot;&gt;Manual note-taking&#x2F;journaling dilemma ✍️&lt;&#x2F;a&gt;, sur le fait d’utiliser des systèmes de prise de note sur ordinateur ou physique (sur papier&#x2F;carnet). C’est quelque chose sur lequel je reviens souvent, j’alterne pas mal entre les deux : l’informatique est pratique pour indexer et donc retrouver l’information plus tard, mais beaucoup d’écrits n’ont que peu de valeur dans le temps, donc vivent très bien sur papier. Ce qui relève de l’intime tend à rester dans le domaine du papier également, pour moi.&lt;&#x2F;li&gt;
&lt;li&gt;Elena Rossini parle de ses projets d’auto-hébergement pour 2026 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.elenarossini.com&#x2F;my-so-called-sudo-life&#x2F;my-adventures-in-self-hosting-day-357&#x2F;&quot;&gt;ici&lt;&#x2F;a&gt;. J’ai trouvé le design de son site personnel particulièrement beau, donc je partage avec vous !&lt;&#x2F;li&gt;
&lt;li&gt;Chouette poésie d’Alexis sur son blog : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notmyidea.org&#x2F;apprentissages.html&quot;&gt;Apprentissages&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;alexsci.com&#x2F;blog&#x2F;calm-tech-discover&#x2F;&quot;&gt;Discovering the indie web with calm tech&lt;&#x2F;a&gt;, un article qui présente deux extensions de navigateur qui permettent de trouver des flux RSS sur les pages sur lesquelles on se balade, ou les profils Mastodon de leurs auteur·ices, mais pour autant, sans générer de notification ou attirer l’attention sur ces découvertes. Le principe est qu’une liste se construit en arrière-plan, et on peut aller la consulter plus tard quand on le désire. C’est brillant ! J’adore cette phrase de l’article, qui me parle beaucoup :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;You can’t drown out the noise of social media by shouting louder, you’ve got to whisper.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gochronicles.com&#x2F;dive&#x2F;&quot;&gt;Dive&lt;&#x2F;a&gt;, un petit outil en TUI pour inspecter le contenu des &lt;em&gt;layers&lt;&#x2F;em&gt; d’images Docker. Pratique pour détecter des fichiers inattendus, ou comprendre pourquoi une &lt;em&gt;layer&lt;&#x2F;em&gt; prend tant de place.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;muesli&#x2F;duf&quot;&gt;Duf&lt;&#x2F;a&gt;, un petit outil pour remplacer l’utilitaire &lt;code&gt;du&lt;&#x2F;code&gt;, qui montre l’espace disque restant sur une machine Linux, avec une interface colorée et compréhensible par défaut. (Ahlala, ça en dit long sur l’ergonomie des outils Linux de base…)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;J’en ai parlé sur Mastodon : l’application pour mobile &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jardinmental.fabrique.social.gouv.fr&#x2F;&quot;&gt;Jardin Mental&lt;&#x2F;a&gt;, faite par l’Assurance Maladie, permet de garder un historique de son humeur, et de plein d’autres métriques (énergie, motivation, sommeil, nombre de réveils dans la nuit, et j’en passe et des meilleurs). En fait, ça permet également du suivi d’habitudes basique, du suivi médicamenteux (avec la possibilité de choisir les marques des médicaments directement dans l’interface), il est possible de remplir un questionnaire en mode colonnes de Beck (un exercice classique de TCC pour combattre l’anxiété), et il y a aussi des ressources &lt;em&gt;politisées&lt;&#x2F;em&gt; pour apprendre à prendre soin de sa santé mentale. Le tout n’utilise que des données locales, l’app est open-source. C’est rare que je le dise, alors je vais le dire fort : ça me semble vraiment &lt;em&gt;super&lt;&#x2F;em&gt; bien ! J’ai commencé à l’utiliser il y a quelques jours, et j’en suis pour le moment très content.&lt;&#x2F;li&gt;
&lt;li&gt;Une page Wikipédia pour s’émerveiller un moment : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;List_of_foods_named_after_people&quot;&gt;une liste d’aliments&lt;&#x2F;a&gt; dont le nom est tiré du nom de famille de personnes à qui ces aliments font référence : la sauce Béchamel nommée d’après le maître d’hôtel de Louis XIV, le Carpaccio nommé d’après un peintre qui utilisait des nuances de rouge bien particulières, la Frangipane en l’honneur du marquis italien Frangipani, etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>How to install a Brother DCP L3520CDW series on Linux</title>
        <published>2025-12-09T00:00:00+00:00</published>
        <updated>2025-12-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/brother-printer-linux/"/>
        <id>https://bouvier.cc/tech/brother-printer-linux/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/brother-printer-linux/">&lt;p&gt;What it says on the tin, in case it can be helpful to anyone.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;After years of suffering with an inkjet printer, where ink would always dry, or print heads clog, or whatever, making it unusable, I’ve finally accepted the harsh reality that all I needed was a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;tech&#x2F;641940&#x2F;best-printer-2025-just-buy-a-brother-laser-printer-middle-finger-in-the-air&quot;&gt;Brother laser printer&lt;&#x2F;a&gt;. I’ve found a decently priced LED laser printer in the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;support.brother.com&#x2F;g&#x2F;b&#x2F;downloadtop.aspx?c=as_ot&amp;amp;lang=en&amp;amp;prod=dcpl3520cdw_eu_as&quot;&gt;DCP L3520CDW&lt;&#x2F;a&gt; model &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, with good resolution for black and white prints, and decent resolution for color prints.&lt;&#x2F;p&gt;
&lt;p&gt;To install it on Linux (well, ArchLinux, &lt;em&gt;by the way&lt;&#x2F;em&gt;), I’ve installed the CUPS server first:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; pacman&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; -S&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; cups&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, I’ve moved over to the Web service page to configure it, on http:&#x2F;&#x2F;localhost:631&#x2F;admin, where I’ve had to fill in my (Linux) username and password.&lt;&#x2F;p&gt;
&lt;p&gt;Then, I’ve clicked &lt;code&gt;Add Printer&lt;&#x2F;code&gt;, and despite the printer being automatically found by CUPS, I’ve had to use another way:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;select the discovered printer first, click &lt;code&gt;Continue&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;copy the connection URL. For me, it was &lt;code&gt;lpd:&#x2F;&#x2F;BRW046874F1C81D&#x2F;BINARY\_P1&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;get back to the previous screen where I could select the discovered printer, or other option&lt;&#x2F;li&gt;
&lt;li&gt;select &lt;code&gt;Internet Printing Protocol (ipp)&lt;&#x2F;code&gt; in the list of &lt;code&gt;Other Network Printers&lt;&#x2F;code&gt; options&lt;&#x2F;li&gt;
&lt;li&gt;strip the &lt;code&gt;BINARY_P1&lt;&#x2F;code&gt; suffix from the connection URL, and use the &lt;code&gt;ipp:&#x2F;&#x2F;&lt;&#x2F;code&gt; protocol instead of &lt;code&gt;lpd:&#x2F;&#x2F;&lt;&#x2F;code&gt;, then fill that in the &lt;code&gt;Connection&lt;&#x2F;code&gt; field. For me, it meant filling &lt;code&gt;ipp:&#x2F;&#x2F;BRW046874F1C81D&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;click continue, and you’re done!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Thanks to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bbs.archlinux.org&#x2F;viewtopic.php?id=305003&quot;&gt;this ArchLinux forum post&lt;&#x2F;a&gt; for the trick to use a manual IPP connection instead of the auto-discovered LPD protocol (which would only print garbage, when configured with LPD). It took me way too long to realize the difference in the connection URLs, so I hope this post clarifies it a bit!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;It’s surprisingly hard to find an English-speaking store page, so all I could find on the dot com website was the support page. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #60</title>
        <published>2025-11-21T00:00:00+00:00</published>
        <updated>2025-11-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w46/"/>
        <id>https://bouvier.cc/notes/2025-w46/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w46/">&lt;p&gt;On vide les onglets : dépression, coopropriété et test du marshmallow.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Je me rends compte que j’utilise mes onglets de navigateur comme &lt;em&gt;buffer&lt;&#x2F;em&gt; de mes notes personnelles. Aujourd’hui je suis arrivé à plus de 99 onglets sur Firefox sur Android, ce qui me donne droit à l’&lt;em&gt;easter egg&lt;&#x2F;em&gt; que le nombre d’onglets devient le symbole &lt;em&gt;infini&lt;&#x2F;em&gt;. C’est un bon motivateur pour écrire mes notes personnelles, étant donné que je garde beaucopu de choses que je souhaite partager dans ces notes. Ces onglets regorgent aussi de recommendations de livres, de séries, de BDs que l’on m’a faites, mais aussi de randonnées, ou d’articles que j’aimerais bien m’acheter. C’est un plaisir, une fois de temps en temps, de parcourir toute cette liste, fermer les onglets liées aux choses qui ne m’intéressent plus, et répertorier les choses qui m’intéressent encore dans mes différents systèmes pour-plus-tard (de notes, de médias visuels, ou encore de lectures via l’excellent &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wallabag.org&#x2F;&quot;&gt;Wallabag&lt;&#x2F;a&gt;), qui subiront, en temps venu, le même tri d’intérêt après un peu de temps.&lt;&#x2F;p&gt;
&lt;p&gt;Quelle joie de retomber à un nombre d’onglets raisonnables, de repartir d’une page (presque !) blanche : plus que 13 onglets ouverts !&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jDncvuBprMo&quot;&gt;vidéo&lt;&#x2F;a&gt; sur &lt;del&gt;les carapaces de tortues&lt;&#x2F;del&gt; le &lt;em&gt;burnout&lt;&#x2F;em&gt; neuroatypique, dû au phénomène de &lt;em&gt;masking&lt;&#x2F;em&gt;. La chaine est super bien, il y a plusieurs vidéos en suite à celle-ci avec des compléments d’information intéressants (notamment, est-ce que la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=WtjtHKdXw1M&quot;&gt;fibromyalgie serait un mauvais diagnostic du &lt;em&gt;burnout&lt;&#x2F;em&gt; neuroa&lt;&#x2F;a&gt;, comment &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=pwHAyevDutw&quot;&gt;aimer une personne trauma&#x2F;hypersensible&lt;&#x2F;a&gt;,…), mais je ne sais pas tout cela est véridique et sourcé. En tous cas, ça me parle beaucoup.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;v5YcH5X5Xgo&quot;&gt;À quoi sert la dépression&lt;&#x2F;a&gt; pose la question de « l’utilité », au sens théorie de l’évolution, de la dépression.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=2YR8J1xqDNs&quot;&gt;Et toi ça va ?&lt;&#x2F;a&gt; Une autre vidéo sur la dépression, qui explique un peu les symptômes d’un point de vue subjectif, et dans lesquels je me reconnais beaucoup.&lt;&#x2F;li&gt;
&lt;li&gt;La série humoristique &lt;em&gt;Loot&lt;&#x2F;em&gt; sur Apple TV+, assez légère, nous plonge dans le monde extravagant d’une femme récemment divorcée d’un multi-milliardaire, et qui se retrouve ultra riche et à la tête d’une fondation caritative. Assez chouette, notamment via un casting assez divers.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cafetech.substack.com&#x2F;p&#x2F;les-pertes-abyssales-dopenai-6b9&quot;&gt;Les pertes abyssales d’OpenAI&lt;&#x2F;a&gt;, la bulle qui grossit, et grossit, et grossit…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xeiaso.net&#x2F;notes&#x2F;2025&#x2F;assisted-by-footer&#x2F;&quot;&gt;Using &lt;code&gt;Assisted-by&lt;&#x2F;code&gt; commit footers instead of banning AI tools&lt;&#x2F;a&gt;, une idée intéressante pour permettre d’identifier rapidement (et de manière automatisée, ce qui permet de pouvoir appliquer des labels automatiquement sur les forges logicielles) les propositions de contribution qui font appel à des intelligences artificielles, sans stigmatiser les auteur·ices. (Mais peut-être que c’est pas mal de les stigmatiser un peu, quand même 😈)&lt;&#x2F;li&gt;
&lt;li&gt;Je lis et relis &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ergaster.org&#x2F;til&#x2F;micro-habits-bring-down&#x2F;&quot;&gt;Micro-habits that can bring you down&lt;&#x2F;a&gt;, le résumé par Thib (merci à lui !) d’une vidéo de psychologie.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;link.deezer.com&#x2F;s&#x2F;31FsamI6ONwFOopFSet1t&quot;&gt;Origins&lt;&#x2F;a&gt;, d’Uppermost, est un album d’électro un peu daté (2016) qui m’émeut toujours autant. Gros kiff sur &lt;em&gt;Mistakes&lt;&#x2F;em&gt; et &lt;em&gt;Beautiful Light&lt;&#x2F;em&gt; notamment.&lt;&#x2F;li&gt;
&lt;li&gt;En plus d’être un jeu vidéo de plateforme &#x2F; musical très chouette, la BO de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;link.deezer.com&#x2F;s&#x2F;31FsfBrKmbzrNHP6d5JmL&quot;&gt;Sayonara Wild Heart&lt;&#x2F;a&gt; réchauffe le cœur, par le contraste entre sa &lt;em&gt;synth-pop&lt;&#x2F;em&gt; optimiste et joyeuse, et ses paroles souvent plus mélancoliques.&lt;&#x2F;li&gt;
&lt;li&gt;Moby a mis en ligne plein de musiques d’ambiance gratuites sur le site &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mobygratis.com&#x2F;&quot;&gt;MobyGratis&lt;&#x2F;a&gt;. Je n’ai pas écouté très longtemps, mais j’imagine que ça peut être pas mal comme musique de fond pendant le travail ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Steam &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=OmKrKTwtukE&quot;&gt;annonce&lt;&#x2F;a&gt; plein de nouveau &lt;em&gt;hardware&lt;&#x2F;em&gt; pour le jeu vidéo, y compris un casque VR et l’équivalent d’une console fixe. Je vous laisse lire &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xeiaso.net&#x2F;blog&#x2F;2025&#x2F;valve-is-about-to-win-the-console-generation&#x2F;&quot;&gt;la très bonne analyse de Xe&lt;&#x2F;a&gt; sur le sujet.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;flareapp.moe&#x2F;&quot;&gt;Flare&lt;&#x2F;a&gt; est une application mobile (mais pas que, semble-t-il !) qui permet d’afficher les contenus de plusieurs médias sociaux comme s’il ne s’agissait que d’un seul : une seule interface qui entremêle les posts de Mastodon et de Bluesky, notamment. (Je n’ai pas vraiment le besoin, donc pas testé, mais n’hésitez-pas à me faire savoir ce que vous en pensez, si vous le testez !)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kurrier-org&#x2F;kurrier&quot;&gt;Kurrier&lt;&#x2F;a&gt; est (si j’ai bien compris) un client email auto-hébergeable, avec une interface soignée, et qui permet de se connecter à n’importe quel serveur SMTP&#x2F;IMAP (et autres &lt;em&gt;providers&lt;&#x2F;em&gt; commerciaux comme Mailgun etc.). Ça a l’air bien léché. Encore une fois je n’ai pas testé, hébergeant tous mes emails chez l’australien &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.fastmail.com&#x2F;&quot;&gt;Fastmail&lt;&#x2F;a&gt;, donc l’interface Web est parfaitement satisfaisante, donc encore une fois, je serai friand de vos retours !&lt;&#x2F;li&gt;
&lt;li&gt;Bonfire, le réseau social basé sur ActivityPub, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bonfirenetworks.org&#x2F;posts&#x2F;bonfire-social-1-0-is-here-back-the-community-funded-roadmap&#x2F;&quot;&gt;sort une version 1.0&lt;&#x2F;a&gt; et lance &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.indiegogo.com&#x2F;fr&#x2F;projects&#x2F;bonfire&#x2F;community&quot;&gt;un financement participatif&lt;&#x2F;a&gt; pour la suite des développements 👀&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;retzo.net&#x2F;wakeonstorage&#x2F;&quot;&gt;WakeOnStorage&lt;&#x2F;a&gt; est une solution de stockage de données à froid, avec des disques durs qui restent éteints, tant que les données n’ont pas besoin d’être chargées. Belle idée !&lt;&#x2F;li&gt;
&lt;li&gt;Wikipedia a dû dresser &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Wikipedia:Signs_of_AI_writing&quot;&gt;une liste d’indicateurs (sémantiques, stylistiques, etc.) qui permettent d’imaginer qu’un texte a été écrit par une intelligence artificielle&lt;&#x2F;a&gt;. C’est fascinant, pour le moins ! Et ça pourra peut-être être utile à quelques professeurs 😀&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wheretowatch.meilisearch.com&#x2F;&quot;&gt;WhereToWatch&lt;&#x2F;a&gt; est une petite démonstation technique de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;meilisearch&#x2F;meilisearch&quot;&gt;Meilisearch&lt;&#x2F;a&gt; (un moteur d’indexation &#x2F; de recherche spécialisé, écrit en Rust 🦀🚀😎), qui permet de trouver sur quelle plateforme on peut regarder tel film. Pratique ! J’aurais bien aimé pouvoir aussi y trouver les séries, mais le peu que j’ai cherché n’est pas indexé sur ce site…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Louis Derrac partage &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;louisderrac.com&#x2F;mes-recommandations-pour-consommer-le-plus-responsable-possible&#x2F;&quot;&gt;ses recommendations pour consommer le plus responsablement possible&lt;&#x2F;a&gt;. Très chouette liste, dans plein de domaines.&lt;&#x2F;li&gt;
&lt;li&gt;Un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;piaille.fr&#x2F;@starrybubble&#x2F;115468997818590580&quot;&gt;petit rappel bénéfique pour la compassion à soi&lt;&#x2F;a&gt;, qu’il est bon de lire et relire jusqu’à ce que l’on soit convaincu de ce qui est marqué.&lt;&#x2F;li&gt;
&lt;li&gt;Un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@adhd_coffee&#x2F;114952246605750991&quot;&gt;petit diagramme pour savoir quand dire non&lt;&#x2F;a&gt;. À imprimer et afficher en gros sur son bureau.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cooprietaires.com&#x2F;&quot;&gt;Coopropriétaire&lt;&#x2F;a&gt; est une coopérative d’habitant·es à Lyon, en train de se monter, qui veut mettre en commun des logements pour les sortir du monde capitaliste de l’investissement immobilier. Ce n’est pas de l’habitat partagé, mais bien de la propriété partagée d’un ensemble de logements. Un projet à suivre !&lt;&#x2F;li&gt;
&lt;li&gt;Le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Test_du_marshmallow&quot;&gt;test du marshmallow&lt;&#x2F;a&gt; est une étude de psychologie censée démontrer que la capacité à retarder une gratification est un indicateur de succès. On offre un marshmallow à un enfant, et on indique à l’enfant que s’iel résiste à le manger, on lui en offrira deux plus tard. Ensuite, on mesure le temps que l’enfant résiste avant de manger, et on compare ça à des mesures de « succès ». L’expérience démontrerait que les enfants qui tiennent le plus longtemps sont celleux qui vivraient le plus de « succès » dans leur vie. MAIS ! Il s’avère que l’expérience a été reproduite, et que les conclusions ne sont pas reproductibles. Encore une fois, on peut se méfier d’une explication trop simpliste du « succès ».&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;100daystooffload.com&#x2F;&quot;&gt;100 Days to Offload&lt;&#x2F;a&gt; est un défi d’écriture sur des blogs personnels, qui demande d’écrire 100 blogs en l’espace de 365 jours (coulissants, donc ça peut commencer n’importe quand). J’apprécie que la proposition soit d’écrire sur n’importe quel sujet, tant que ça nous intéresse et nous parle ; finalement, mes notes « hebdomadaires » relèvent un peu de cet acabit, de manière plus condensée.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bionumbers.hms.harvard.edu&#x2F;Search.aspx?task=searchbypop&quot;&gt;Bionumbers&lt;&#x2F;a&gt; liste des statistiques de biologie : combien y a-t-il de cheveux chez un·e humain·e en général ? (entre 90 et 150 000) Et quel diamètre font-ils en moyenne ? (entre 17 et 181μm) Quelle est la durée d’un battement de cils ? (entre 0.1 et 0.4 secondes) Et plein d’autres informations primordiales et croustillantes qui vous feront briller en soirée mondaine.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #59</title>
        <published>2025-11-12T00:00:00+00:00</published>
        <updated>2025-11-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w40/"/>
        <id>https://bouvier.cc/notes/2025-w40/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w40/">&lt;p&gt;Plein de séries et de BDs, la bulle IA à deux doigts d’exploser, et Fix You repris par ce génie de Jacob Collier.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Retour après une longue pause, nécessaire pour se re-centrer un peu. J’ai encore plein de liens à partager, mais j’ai déjà besoin de vider tout ce qui était en attente depuis un petit moment.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jdKm1UrqOZM&quot;&gt;psychiatre vidéotuber favori commente&lt;&#x2F;a&gt; les récentes déclarations de la Maison Blanche quant aux liens entre Tylenol et autisme. J’ai été interpellé par le fait qu’il fasse cela, lui qui présente toujours beaucoup de nuance et de détachement. Et même si sa vidéo commence en mode &lt;em&gt;edge-lord&lt;&#x2F;em&gt; (« hey c’est pas &lt;em&gt;tout&lt;&#x2F;em&gt; faux ce qui est dit »), encore une fois les arguments sont bien posés, et la conclusion est beaucoup beaucoup plus nuancée que les annonces de la Maison Blanche 👀&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Ql2_sO30ITY&quot;&gt;Éloge de la robustesse&lt;&#x2F;a&gt;, en opposition à la performance, dans un contexte de réchauffement climatique. Étrange comme ça résonne aussi psychologiquement…&lt;&#x2F;li&gt;
&lt;li&gt;Cette &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=cjkAkGDNiEk&quot;&gt;vidéo&lt;&#x2F;a&gt; sur les neurosciences de la &lt;em&gt;mindfulness&lt;&#x2F;em&gt; (déso, je sais pas trop comment ça se traduit !) explique les bienfaits de la pratique pour le cerveau et le système nerveux. En particulier, la pratique ne se limite pas à la méditation (quelque chose dont j’étais intimement persuadé !).&lt;&#x2F;li&gt;
&lt;li&gt;Les deux saisons de la série &lt;em&gt;Life and Beth&lt;&#x2F;em&gt; (Disney+), qui parle d’une femme trentenaire qui réinvente sa vie après une épreuve très douloureuse. Autant la première saison m’a parlé et plu, autant la seconde me paraît assez mal écrite, beaucoup trop rapide, même si elle aborde des sujets inédits comme les neuroatypies découvertes à l’âge adulte.&lt;&#x2F;li&gt;
&lt;li&gt;(TW : cancer, mort) La série (en une seule saison, et il n’y en aura pas d’autres) &lt;em&gt;Dying for sex&lt;&#x2F;em&gt; (Disney+), où la narratrice, en phase terminale de cancer, se rend compte qu’elle n’a jamais eu d’orgasme avec quelqu’un d’autre, et décide de tout faire pour changer ça, pendant le temps qui lui reste à vivre. Pour cela, elle passe par une grande phase d’exploration… La série est très très chouette, notamment parce que toute la narration est centrée sur la protagoniste principale, avec &lt;em&gt;son&lt;&#x2F;em&gt; regard (on est bien sur un &lt;em&gt;female gaze&lt;&#x2F;em&gt; très rafraîchissant, forcément déconcertant aussi) et &lt;em&gt;son&lt;&#x2F;em&gt; dialogue interne. Très doux et &lt;em&gt;wholesome&lt;&#x2F;em&gt;, malgré la teneur des sujets évoqués.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Les yeux d’Alex&lt;&#x2F;em&gt; (de Claire Fauvel), une BD féministe qui raconte l’histoire d’Alex, photographe, qui décide de monter une exposition photo dont les protagonistes sont des hommes, pour prendre le &lt;em&gt;male gaze&lt;&#x2F;em&gt; à rebours. Très chouette histoire. Aussi érotique que politique.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Catboy&lt;&#x2F;em&gt; (de Benji Nate), une BD très &lt;em&gt;low-key&lt;&#x2F;em&gt; dans lequel une femme fait le vœu qu’elle puisse traîner et parler avec son chat. Son vœu est exaucé, et son chat devient une sorte d’humanoïde chat, et commence à parler, à participer à ses activités, etc. Au final, pas vraiment d’histoire ou de progression, c’est plutôt une succession de sketches et de situations incongrues, qui vont de l’humour au très sérieux (ça parle aussi de dépression). Je n’ai pas trop apprécié l’absence de fil conducteur ; disons que ça détend, le temps d’une heure.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;La revanche des espèces menacées&lt;&#x2F;em&gt; (d’Ulysse Gry), une petite BD qui se veut « rigolote » sur l’inaction face au réchauffement climatique, avec beaucoup de sources pour référencer tout ce qui est dit (tout est vrai !). Bon, bah moi ça a eu l’effet complètement opposé à l’intention initiale : ça m’a glacé le sang 🫠&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;May the thoughts be with you&lt;&#x2F;em&gt; (de Charlotte Reed) est une petite BD avec des phrases inspirationnelles &lt;em&gt;wholesome&lt;&#x2F;em&gt; et apaisantes, parfaites en cas de besoin d’un petit câlin au cœur.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Nos attentions particulières&lt;&#x2F;em&gt;, recueil d’entretiens par Laure Dasinieres, laisse parler des personnes diagnostiquées avec un trouble de l’attention (avec ou sans hyper-activité), connu aussi sous le nom de TDAH, à l’âge adulte. Le genre de diagnostic qui change une vie. Très chouette de laisser la parole aux concerné·es.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Et travailler et vivre&lt;&#x2F;em&gt;, de Fabien Toulmé, est une BD d’enquête journalistique sur le concept de travail, de sens au travail, avec quelques bribes de sociologie ici et là. Sont entre autres mentionnés : la Grande Démission aux États-Unis, le travail des plateformes en Corée du Sud et le concept horrible et malheureusement fréquent là-bas de &lt;em&gt;gwarosa&lt;&#x2F;em&gt; (mort causée par un burnout généralisé), et la reconversion écologique de la filiale Ylang (une fleur qu’on retrouve dans les parfums) aux Comores. Encore une fois j’ai trouvé ça chouette de laisser la parole aux gens, je n’ai pas l’impression d’avoir appris grand chose de sociologiquement fondamental, mais ça reste enrichissant (parfois glaçant) en termes de découvertes d’autres cultures.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pluralistic.net&#x2F;2025&#x2F;09&#x2F;27&#x2F;econopocalypse&#x2F;#subprime-intelligence&quot;&gt;Pluralistic: The real (economic) AI apocalypse is nigh (27 Sep 2025)&lt;&#x2F;a&gt; : extrait choisi : “So, you’re saying a third of the stock market is tied up in seven AI companies that have no way to become profitable and that this is a bubble that’s going to burst and take the whole economy with it?” 🔥🔥🔥&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lucumr.pocoo.org&#x2F;2025&#x2F;9&#x2F;4&#x2F;996&#x2F;&quot;&gt;996&lt;&#x2F;a&gt; : la Silicon Valley productiviste toxique a sorti un nouveau concept encore plus productiviste et toxique ; qui aurait pu prédire ?&lt;&#x2F;li&gt;
&lt;li&gt;Des spécialistes en bulles spéculatives &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wired.com&#x2F;story&#x2F;ai-bubble-will-burst&#x2F;&quot;&gt;analysent&lt;&#x2F;a&gt; la bulle IA, et devinez quoi ? C’est la bulle la plus bullesque qui soit, avec énorme risque d’implosion.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=RB-RcX5DS5A&quot;&gt;Coldplay — The Scientist&lt;&#x2F;a&gt;. Incroyable ce clip tourné à l’envers, mais dans lequel les lèvres sont parfaitement synchronisées avec les paroles. Ça a dû être une galère d’apprendre tous ces mouvements à l’envers.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=TwC0Db7oerM&quot;&gt;Jacob Collier &amp;amp; Chris Martin — Fix You (Live @ O2 Arena)&lt;&#x2F;a&gt; : reprise incroyable par Jacob Collier, un génie de la musique (j’ai vu dans les commentaires quelqu’un l’appeler le Peter Pan de la musique, c’est : assez adapté), de &lt;em&gt;Fix You&lt;&#x2F;em&gt;, de Coldplay. QUAND TOUT-À-COUP (spoiler alert, c’était sûrement prévu), Chris Martin, le chanteur de Coldplay le rejoint sur scène pour chanter avec lui. Puis Jacob fait ce qu’il préfère faire en concert : il transforme le public en très grande chorale, en leur faisant chanter des harmonies, et ça devient de la beauté à l’état pur 💞&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Hadès 2 ! Avec la sortie de la version 1.0, l’histoire avance enfin 🥳&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #58 — Mais pourquoi au fait ?</title>
        <published>2025-09-29T00:00:00+00:00</published>
        <updated>2025-09-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w39/"/>
        <id>https://bouvier.cc/notes/2025-w39/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w39/">&lt;p&gt;À quoi bon écrire des notes hebdomadaires ? Je me penche et m’épanche sur le sujet.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Je n’ai pas grand chose à partager en termes de liens pour cette semaine, parce qu’il m’est arrivé un bouleversement personnel, source de beaucoup d’émotions fortes, que je n’avais pas anticipé. J’ai envie d’en parler, sans trop en parler — si vous voulez les détails et qu’on est assez proches, vous saurez où me joindre pour en parler, plutôt de vive voix.&lt;&#x2F;p&gt;
&lt;p&gt;Je bute sur la sagesse populaire : les mêmes causes impliquent les mêmes conséquences. Pensée fugace pour mon prof de lycée en philosophie, tendance intello-snob :&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Dans les sagesses populaires, il y a souvent plus de populaire que de sagesse. »&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Mais ce chamboulement pose l’ultime (remise en) question de mes actions : pourquoi je fais ce que je fais ? Toutes ces habitudes, toutes ces pratiques répétées autant de fois, à quoi servent-elles ? Me servent-elles, ou sont-elles force de l’habitude ? Que font-elles pour moi ? L’intensité de ce quotidien, si rapide, si prenant, me fait perdre cette perspective, me plonge dans l’écume des jours. Pilote automatique, sauf à certains rares moments de respiration, qui se transforment vite en moments de réflexion, de remise en question.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;donc-pourquoi-des-notes-hebdos&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#donc-pourquoi-des-notes-hebdos&quot; aria-label=&quot;Anchor link for: donc-pourquoi-des-notes-hebdos&quot;&gt;🔗&lt;&#x2F;a&gt;donc, pourquoi des notes hebdos&lt;&#x2F;h2&gt;
&lt;p&gt;Je n’ai rien inventé : j’ai copié les approches de (notamment) &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.notmyidea.org&#x2F;notes-hebdo.html&quot;&gt;Alexis&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;juliebrillet.fr&#x2F;2025&#x2F;2025_notes_143&#x2F;&quot;&gt;Julie&lt;&#x2F;a&gt;, avec un &lt;em&gt;patron&lt;&#x2F;em&gt; similaire, pour commencer : d’une part, &lt;strong&gt;ce qui m’était arrivé et comment je l’avais vécu&lt;&#x2F;strong&gt; ; ensuite &lt;strong&gt;parler de mes projets&lt;&#x2F;strong&gt;, puis &lt;strong&gt;des liens que j’ai vus passer&lt;&#x2F;strong&gt;. En réalité, le format est libre. Tout est à inventer. D’autres parleront plus en détails de leurs vies, ou de leurs performances sportives, ou de ce qui est les passionne. Chaque format est source d’inspiration, et passionnant à découvrir et à lire.&lt;&#x2F;p&gt;
&lt;p&gt;J’aimais beaucoup l’idée de parler de ce qui m’était arrivé, de mon quotidien au format hebdomadaire. Comme une carte postale envoyée au monde, notamment pour maintenir une connexion avec tou·stes ces potes délaissé·es dans ma ville d’origine, celleux qui sont loin. Partager mon monde intérieur aussi, même avec celleux qui sont proches, car iels ne peuvent pas toujours être là, ne peuvent pas toujours lire à travers les mailles de mon introversion.&lt;&#x2F;p&gt;
&lt;p&gt;Avec tous les désavantages d’une carte postale, également : tout est public. Le concept de jardin secret n’existe plus vraiment, car tout est absolument public pour tout le monde. Je crois avoir la chance de ne pas compter beaucoup d’ennemi·es (dévoilé·es, en tous cas), mais un ami me raisonne à juste titre que tous mes partages associés à mon patronyme deviennent aussi des armes qui s’accumulent pour des &lt;em&gt;futur·es&lt;&#x2F;em&gt; ennemi·es, notamment des potentiels futurs gouvernements fascistes. À raison, probablement. Le choix le plus prudent a toujours rétroactivement raison, mais le choix le plus prudent a aussi le défaut ici d’être source d’inaction, initiatrice du désespoir. Je continue de partager des liens en rapport parfois avec mes combats militants, mes centres d’intérêts, en m’imaginant que je n’aurai jamais assez d’importance pour être une cible. Espérons que le futur m’accorde cela ; en tant qu’homme blanc cis, j’ai le privilège de ne pas trop m’en inquiéter.&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, ce caractère universel du partage ne pratique pas de ségrégation entre celleux qui me connaissent de près, et les parfait·es inconnu·es. Par conséquent, je me retrouve dans une position de vulnérabilité très forte face à des gens que je n’ai jamais rencontré·es. C’est cette vulnérabilité qui appelle à l’empathie, MAIS. En l’évoquant sur Mastodon, on me répond parfois apprécier et éprouver de la connivence, mais aussi imaginer une forme de gêne à l’idée de me rencontrer « pour de vrai ». L’asymétrie de l’échange rend cette correspondance para-sociale. J’imagine la même asymétrie entre des &lt;em&gt;stars&lt;&#x2F;em&gt; et leurs &lt;em&gt;fanzouzes&lt;&#x2F;em&gt;. Ma célébrité se mesurant à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;blog-urls&#x2F;#first-a-nice-trick-tracking-atom-feed-subscribers-server-side-with-nginx&quot;&gt;environ 34 abonnements au flux RSS de mes notes&lt;&#x2F;a&gt;, la comparaison s’arrêtera là.&lt;&#x2F;p&gt;
&lt;p&gt;Je me gêne de cette asymétrie, et au courant de l’année, décide de supprimer la plupart de mes résumés « intimes » de ces semaines qui s’écoulent. Je me tourne vers un format plus factuel, plus orienté partage d’informations. Tant pis ; celleux qui veulent des nouvelles n’ont qu’à m’en demander. Aujourd’hui, je rétablis cette asymétrie, le temps d’une futile publication. Je ne me suis pas encore décidé si cette réflexion entrecoupera mes notes, ou les achèvera, du moins pendant un temps. C’est OK, c’est moi qui instille mes propres règles ici.&lt;&#x2F;p&gt;
&lt;p&gt;On en arrive donc à une autre motivation, celle de la &lt;strong&gt;réappropriation du Web&lt;&#x2F;strong&gt; . Ces 10 à 20 dernières années, les plateformes algorithmiques nous ont imposé un format d’expression : 500 caractères max ici, 80 ou 160 là-bas chez les nazis, un format si court que les messages doivent se suivre, former des fils, en réalités des chaînes. On se met à confondre « page Facebook™ » et « site Web ». On m’assure que des cafés du coin publient leurs agendas sur leurs sites, quand il s’agit de leurs pages Instagram™. On publie selon les desiderata des algorithmes, selon des formats attendus, pour finir noyé·es dans une liste infinie de pièges à dopamine. Et nous on arrive avec nos petits chevaux, nos notes hebdo, sur nos blogs personnels, on cultive notre petit jardin numérique, notre petit bout de Web, on fait tourner ça entre afficionados. Entre humain·es, loin du bruit des bots (si apprécié des techno-fascistes), des IAs génératives, des algorithmes de recommendations. Façonnons ce coin comme il nous fait envie ! Exprimons notre créativité, notre liberté, (é)coulons l’encre de nos cœurs comme on le désire. Reprenons le &lt;em&gt;pouvoir&lt;&#x2F;em&gt; aux plateformes en asseyant notre &lt;em&gt;puissance&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, pour moi qui ne bloggue pas beaucoup car trouver des sujets ou m’étendre sur lesdits sujets pouvant être chronophage (malsain perfectionnisme oblige), je ne le fais pas régulièrement. Les notes hebdomadaires sont mon &lt;em&gt;cheat code&lt;&#x2F;em&gt;, et me permettent de publier plus fréquemment, tout en réduisant la « pression » &#x2F; l’enjeu de blogguer. Encre numérique &#x2F; ancre numérique. Quelque chose que je peux pointer du doigt. Diantre, j’ai même célébré plus tôt la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;2025-w27&#x2F;&quot;&gt;50ème édition&lt;&#x2F;a&gt; au cours de l’année. Pour moi qui n’arrive pas à maintenir une Bonne Habitude™ plus de 3 jours à la suite, c’est une petite victoire sur mon attention gesticulante, vacillante et foisonnante.&lt;&#x2F;p&gt;
&lt;p&gt;Je me suis très froidement posé la question de l’utilité de ces notes dans un contexte professionnel. Pourraient-elles me servir à obtenir un autre travail, quand le besoin sera là, quand le moment sera venu ? Je ne pense pas. Même si ces notes peuvent exposer ma &lt;em&gt;veille technologique&lt;&#x2F;em&gt;, elles montrent beaucoup aussi &lt;em&gt;qui je suis&lt;&#x2F;em&gt;, (in)directement, et je ne crois pas vouloir arborer en pleine face de mes employeur·ses (même si l’information leur est disponible en quelques &lt;del&gt;coups de cuillères à pot&lt;&#x2F;del&gt; clics de souris, la plupart ne feront pas l’effort d’aller aussi loin). À quel point est-ce important de segmenter cela, étant donné que cette identité resurgira à la première occasion ? Ma réflexion n’est pas terminée là-dessus, mais clairement, ce n’est pas ma motivation à l’heure actuelle ; le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Personal_branding&quot;&gt;&lt;em&gt;personal branling&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; attendra.&lt;&#x2F;p&gt;
&lt;p&gt;Concrètement, qu’est-ce que ça m’apporte, en dehors de ces motivations intrinsèques ? Peut-être quelques commentaires positifs par ci par là, sur Mastodon, parfois en privé, souvent des mêmes personnes, des mêmes profils. C’est OK. Je crois que ne pas rechercher de récompense extérieure, c’est assez sain et bénéfique, d’autant plus dans une époque où les réseaux sociaux semblent nous pousser perpétuellement à la comparison sociale.&lt;&#x2F;p&gt;
&lt;p&gt;Ces notes hebdomadaires n’assouvissent généralement pas mon envie pédante d’écriture savante, ce soir étant l’exception 🤓 Je n’apprécie pas la contrainte en général, et très vite la routine devient contrainte. Le sort de ces notes hebdomadaires est donc incertain. Honnêtement, je n’ai pas plus de certitude après avoir écrit ce pavé. Se pose aussi la question du coût d’opportunité : qu’est-ce que je pourrais faire &lt;em&gt;pour moi&lt;&#x2F;em&gt; à la place de passer ces 30 minutes par semaine à écrire ces notes ? Page blanche immédiate ; synonyme de possibilités, de réinvention, d’horizons chatoyants.&lt;&#x2F;p&gt;
&lt;p&gt;D’aucuns diraient que j’ai trop de temps libre, pour me concentrer sur ce genre de réflexions — mais ils se trompent. Mes micro-obsessions sont un trait qui me caractérisent. Ces notes reflètent une part de moi (et pourtant ! je ne vous partage pas tout non plus), cette réflexion constitue aussi une part de moi, ce site est une part de moi.&lt;&#x2F;p&gt;
&lt;p&gt;Je souhaite que cette part de moi fasse aussi résonner une part de vous ; sur vos blogs, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;about&#x2F;#hello-get-in-touch&quot;&gt;dans nos échanges&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;me déconstruire.&lt;&#x2F;li&gt;
&lt;li&gt;me reconstruire.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini « Les carnets de l’apothicaire », un &lt;em&gt;anime&lt;&#x2F;em&gt; très chill sur Netflix (saison 1) &#x2F; Crunchyroll (saison 2), avec une protagoniste au moins aussi intelligente qu’introvertie. Beaucoup de scènes assez dérangeantes représentant des dynamiques de domination, mais de nombreuses galipettes narratives nous évitent un scénario romantique trop évident et attendu, au moins.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=bnaZSnlipgQ&quot;&gt;Talia Rae — No surprises&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=avabPY3XgRc&quot;&gt;Antony &amp;amp; The Johnsons — Hope there’s someone&lt;&#x2F;a&gt;. Tellement d’admiration pour ce &lt;em&gt;tremolo&lt;&#x2F;em&gt; dans la voix, présent du début à la fin de la chanson. Juste si bien écrit, si intense.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=oUFJJNQGwhk&quot;&gt;The cinematic orchestra — To build a home&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=5YXVMCHG-Nk&quot;&gt;Damien Rice — The blower’s daughter&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=xBQb8Qz6yNI&quot;&gt;AG — No expectations&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Jw2XwhMxPqU&quot;&gt;Woodkid — In your likeness&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Hadès 2 est sorti en version 1.0. Je répète. Ceci n’est pas un exercice. Blague à part, j’apprécie de pouvoir &lt;em&gt;enfin&lt;&#x2F;em&gt; avancer dans l’histoire, même si je galère toujours autant à progresser sur les combats.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Je découvre le sens du terme &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wiktionary.org&#x2F;wiki&#x2F;coasting&quot;&gt;&lt;em&gt;coasting&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, littéralement « en roue libre » en anglais, et en apprécie qu’il porte à la fois une signification positive ou négative : être en roue libre c’est se mouvoir sans effort, mais sans effort ça signifie aussi sans engagement, sans implication personnelle — détaché, donc. Ce terme, en anglais, peut aussi bien s’appliquer à des relations interpersonnelles, mais aussi au comportement d’employé·es au sein d’une entreprise (honnêtement, c’est tout le mal que je vous souhaite), ou encore des client·es d’une entreprise.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;realitycheckk.com&#x2F;week1&quot;&gt;Reality Checkk&lt;&#x2F;a&gt;, un petit quizz en ligne où vous devez indiquer si une image a été générée par IA ou est authentique. J’ai eu 55% de réponses correctes cette semaine ; c’est fou comme c’est dur…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #57</title>
        <published>2025-09-23T00:00:00+00:00</published>
        <updated>2025-09-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w38/"/>
        <id>https://bouvier.cc/notes/2025-w38/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w38/">&lt;p&gt;Duo post-apo Silo vs Terra Nil, Apocalypse bébé, la bulle d’IA élargie par les renouvellements des &lt;em&gt;data centers&lt;&#x2F;em&gt;, intérêt spécifique Jujutsu, et les types d’énergies produites en France en temps quasi réel.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; : plusieurs petites &lt;em&gt;releases&lt;&#x2F;em&gt; après la grosse &lt;em&gt;release&lt;&#x2F;em&gt;, pour réparer des petits bugs qu’on avait trouvés. Pfiou !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; : mise à jour de l’action Github, pour qu’elle télécharge le dernier binaire de release, plutôt qu’elle le compile de zéro avec &lt;code&gt;cargo install&lt;&#x2F;code&gt;. Le temps d’exécution chute à 5 secondes par run, alors qu’on était plutôt sur du 45 secondes auparavant 😎&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé &lt;em&gt;Silo&lt;&#x2F;em&gt;, sur AppleTV, une série de science-fiction où une communauté humaine s’est réfugiée dans un abri souterrain suite à… bah on ne sait pas trop quoi, qui s’est passé dans le monde extérieur (mais qui semble asphyxier les gens). Sous forme d’enquêtes croisées, certaines personnes découvrent qu’on leur occulte la vérité quant à la raison pour laquelle iels vivent dans le silo, et qu’il se trame des jeux de pouvoir quant à la direction réelle du silo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini le tome 1 de &lt;em&gt;La Quête d’Ewilan&lt;&#x2F;em&gt;, un roman d’heroic-fantasy qu’on m’avait recommandé. À la base, ce n’est pas vraiment mon style de prédilection, mais là j’en viens même à me demander pourquoi on me l’avait recommandé…&lt;&#x2F;li&gt;
&lt;li&gt;J’ai donc commencé &lt;em&gt;Apocalypse Bébé&lt;&#x2F;em&gt; de Virginie Despentes, une enquête policière sur fond queer. J’apprécie tout autrement la plume de l’autrice…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;futurism.com&#x2F;data-centers-financial-bubble&quot;&gt;There’s a Stunning Financial Problem With AI Data Centers&lt;&#x2F;a&gt; : le coût des &lt;em&gt;data centers&lt;&#x2F;em&gt; liés à l’intelligence artificielle est complètement sous-estimé, et le renouvellement du matériel dans ces centres (principalement des cartes graphiques) devrait coûter, à terme, plus cher que le chiffre d’affaires des entreprises qui « vendent » de l’IA. Donc…. c’est une industrie à perte, il y a une bulle d’investissement ÉNORME. Cela dit : ce n’est pas la première fois que quelqu’un s’en rend compte (là, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wheresyoured.at&#x2F;pop-culture&#x2F;&quot;&gt;Ed Zitron&lt;&#x2F;a&gt;, en Juillet 2024), et Jusque Là Tout Va Bien™.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;The Last Epoch&lt;&#x2F;em&gt;, encore et encore ; maintenant que j’ai fini le jeu avec un type de personnage, il me reste les autres à explorer 🥳&lt;&#x2F;li&gt;
&lt;li&gt;Essayé &lt;em&gt;Terra Nil&lt;&#x2F;em&gt;, un jeu plutôt &lt;em&gt;chill&lt;&#x2F;em&gt; en vue 3D isométrique, où l’on aménage un environnement complètement inhabitable (on imagine bien « suite à un changement climatique &#x2F; de la pollution trop forte ») pour le réhabiliter, le re-verdir, et y faire revenir des animaux. Très calme, j’apprécie beaucoup l’esthétique et les modèles 3D.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lowlighter&#x2F;metrics&quot;&gt;lowmetrics&lt;&#x2F;a&gt; permet de générer une page de profil Github avec tout plein de statistiques, pour les nerds et pour celleux qui ont un besoin névrotique de &lt;em&gt;personal branling&lt;&#x2F;em&gt; 😙&lt;&#x2F;li&gt;
&lt;li&gt;Mastodon va &lt;em&gt;enfin&lt;&#x2F;em&gt; introduire les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.joinmastodon.org&#x2F;2025&#x2F;09&#x2F;introducing-quote-posts&#x2F;&quot;&gt;&lt;em&gt;quote posts&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, et ce avec un contrôle fin de qui peut citer, avec la possibilité de se rétracter en citant, et d’autres joyeusetés. Ça a mis le temps, mais ça semble bien fait 👏&lt;&#x2F;li&gt;
&lt;li&gt;Je me suis mis à &lt;em&gt;Jujutsu&lt;&#x2F;em&gt; pour la gestion de versions. Imaginez si &lt;code&gt;git&lt;&#x2F;code&gt; était ergonomique à utiliser, en gros. Ça semble pas grand chose, mais y a beaucoup d’améliorations : tous les &lt;em&gt;rebase&lt;&#x2F;em&gt; fonctionnent toujours (les &lt;em&gt;commits&lt;&#x2F;em&gt; sont marqués comme ayant des conflits, on peut les résoudre plus tard), il n’y a pas de &lt;em&gt;staging area&lt;&#x2F;em&gt; (tout est commité tout le temps). J’ai donc parcouru &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;steveklabnik.github.io&#x2F;jujutsu-tutorial&#x2F;introduction&#x2F;introduction.html&quot;&gt;ce tutorial&lt;&#x2F;a&gt; de Steve Klabnik (éminent dans la communauté Rust), mais aussi parcouru &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jj-vcs.github.io&#x2F;jj&#x2F;latest&#x2F;&quot;&gt;la doc officielle&lt;&#x2F;a&gt;, qui est très bonne. J’expérimente aussi avec des interfaces TUI pour savoir si l’une d’entre elles peut me simplifier la tâche, par exemple &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;idursun&#x2F;jjui&quot;&gt;jjui&lt;&#x2F;a&gt; qui semble très bien, ou encore &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Cretezy&#x2F;lazyjj&quot;&gt;lazyjj&lt;&#x2F;a&gt;. Et pis j’ai lu plein de billets très intéressants :
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;arne.me&#x2F;blog&#x2F;jj-in-practice&quot;&gt;Jujutsu in practice&lt;&#x2F;a&gt; : une sorte de TL;DR des commandes et &lt;em&gt;workflows&lt;&#x2F;em&gt; récurrents.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zerowidth.com&#x2F;2025&#x2F;what-ive-learned-from-jj&#x2F;&quot;&gt;What I’ve learned from jj&lt;&#x2F;a&gt; : des réflexions plus haut niveau sur les apports de &lt;em&gt;jujutsu&lt;&#x2F;em&gt; (notamment, rien n’est dangereux ou destructif, c’est très facile de revenir en arrière).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zerowidth.com&#x2F;2025&#x2F;jj-tips-and-tricks&#x2F;&quot;&gt;jj tips and tricks&lt;&#x2F;a&gt;, des trucs et astuces un peu plus avancées.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2025&#x2F;09&#x2F;10&#x2F;rust-compiler-performance-survey-2025-results&#x2F;&quot;&gt;Rust compiler performance survey 2025 results&lt;&#x2F;a&gt; : en plus de statistiques sur les ressentis des gens quant aux performances des temps de compilation du langage Rust, beaucoup de petites astuces ici et là pour améliorer ses temps de compilation ou ses usages de Rust. J’en ai tooté quelques-uns, et visiblement ils n’étaient pas bien connus.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rte-france.com&#x2F;en&#x2F;eco2mix&#x2F;power-generation-energy-source&quot;&gt;graphique&lt;&#x2F;a&gt; qui montre les types d’énergies électriques produites en France, en temps quasi réel. Fascinant.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #56</title>
        <published>2025-09-11T00:00:00+00:00</published>
        <updated>2025-09-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w36/"/>
        <id>https://bouvier.cc/notes/2025-w36/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w36/">&lt;p&gt;Moi réincarné en distributeur automatique saison 2, Bohemian Rhapsody isiZulu… Jujutsu ? Je vais apprendre le jujutsu ?&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;1000 points Internet seront offerts à celleux qui comprennent la dernière ref de la phrase ci-dessus ; j’attends vos propositions dans les commentaires de ce très long billet de notes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;J’ai repris l’anime absurde &lt;em&gt;Reborn as a vending machine&lt;&#x2F;em&gt;, la saison 2 étant arrivée sur Crunchyroll. Vraiment n’importe quoi cet &lt;em&gt;anime&lt;&#x2F;em&gt; ^^.&lt;&#x2F;li&gt;
&lt;li&gt;Je ne me souviens plus si j’en avais parlé, mais j’ai aussi entamé &lt;em&gt;Solo Camping for Two&lt;&#x2F;em&gt;, également un &lt;em&gt;anime&lt;&#x2F;em&gt; sur Crunchyroll. L’histoire raconte un expert de camping en solitaire, qui aime se retrouver face à lui-même et à la nature, et pratique cette activité depuis moult années. Un soir, il rencontre une campeuse qui commence tout juste… Malgré certains clichés, ça donne bien envie de partir en randonnée sur plusieurs jours pour faire la même chose. Très &lt;em&gt;feel good&lt;&#x2F;em&gt; donc, avec un petit côté tutoriel — on apprend notamment tous les détails sur comment bien faire un beau feu 😁&lt;&#x2F;li&gt;
&lt;li&gt;Continué la saison 8 de &lt;em&gt;Rick et Morty&lt;&#x2F;em&gt;. Après les casseroles au cul du doubleur principal, la voix de Rick a changé 🥳 Toujours beaucoup d’imagination, et les grandes lignes de l’histoire se terminent ; serait-ce la dernière saison ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Une reprise fantastique de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=gbljPQbxtTQ&quot;&gt;Bohemian Rhapsody&lt;&#x2F;a&gt;, par la Ndlovu Youth Choir : danse, costumes, chorégraphie, décors, tout est incroyable !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;J’ai surtout joué à emballer des cartons puis les déballer, cette semaine.&lt;&#x2F;li&gt;
&lt;li&gt;Mais j’ai aussi fini l’excellent &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;1382070&#x2F;Viewfinder&#x2F;&quot;&gt;Viewfinder&lt;&#x2F;a&gt;, un petit jeu de réflexion à la première personne, où l’on peut prendre des photos avec un appareil photo maaaaagique, puis ensuite les « appliquer » à l’environnement autour de soi. Très fun, et pas trop compliqué ; parfait pour moi ! Aujourd’hui à -60% sur Steam, franchement si vous avez aimé &lt;em&gt;Portal&lt;&#x2F;em&gt; ou d’autres casses-têtes à la première personne, allez-y les yeux fermés !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=MR6KSB6I_60&amp;amp;t=2s&quot;&gt;Petit tutoriel vidéo&lt;&#x2F;a&gt; pour découvrir &lt;code&gt;jujutsu&lt;&#x2F;code&gt;, une surcouche ergonomique de Git (mais bien plus encore).&lt;&#x2F;li&gt;
&lt;li&gt;Moment auto-promotion (ou pour celleux qui préfèrent la langue de Shakespeare outrancière, &lt;em&gt;self-branling&lt;&#x2F;em&gt;) : ma conférence sur les temps de compilation en &lt;em&gt;Rust&lt;&#x2F;em&gt;, que j’ai eu la chance de donner à Rust in Paris, a été &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=EHu15-E89YY&quot;&gt;mise en ligne sur Youtube&lt;&#x2F;a&gt; récemment. Vous pouvez donc tous·tes profiter de ma chaude voix pendant 44 minutes ; à noter que le créneau était de 30 minutes, questions incluses 😱😇 Les gens ont été très sympas, personne n’a soufflé (trop) fort dans l’assistance \o&#x2F;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Bandcamp propose désormais des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bandcamp.com&#x2F;about_clubs&quot;&gt;&lt;em&gt;clubs&lt;&#x2F;em&gt; de musique&lt;&#x2F;a&gt;, où il est possible de suivre un·e expert·e lié·e à un style musical, qui fera une recommandation d’album par mois, et l’album arrive directement dans votre bibliothèque. En plus de ça, un rendez-vous est programmé pour pouvoir discuter de l’album du mois avec d’autres fans, et la page parle également d’un entretien exclusif avec les artistes de l’album. J’aime l’idée de recommendation par des &lt;em&gt;humain·es&lt;&#x2F;em&gt;, de pousser à essayer de re-créer du lien autour de la consommation musicale. Merci à @MutoKenji pour le partage !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #55</title>
        <published>2025-09-02T00:00:00+00:00</published>
        <updated>2025-09-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w35/"/>
        <id>https://bouvier.cc/notes/2025-w35/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w35/">&lt;p&gt;Pas Sage En Steir, les deux vitesses de la pensée, &lt;em&gt;date&lt;&#x2F;em&gt; sur fond de Titanic, Paheko, et Sara-qui ?&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Un petit post rapide après quelques semaines d’absence ! Il se passe beaucoup de choses dans ma vie en ce moment : rentrée d’une association (dont j’ai rejoint le bureau, cette année !), déménagement quasiment en même temps,… Et pis il a fait beau dehors, donc j’ai profité de cette période d’absorption de la vitamine D pour passer un peu plus de temps loin des écrans 😎 Et vous, comment s’est passé votre été ?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; : yay une nouvelle version de Kresus est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;blog&#x2F;kresus-version-0-23-0.html&quot;&gt;sortie&lt;&#x2F;a&gt; ! Avec notamment la gestion des vues personnalisées, qui permet de manipuler les données de plusieurs comptes en même temps : avoir des graphiques sur plusieurs comptes, mais également des budgets, ou encore la liste des transactions. Une fonctionnalité demandée depuis longtemps, donc ça fait très plaisir d’avoir pu la sortir ! Gros respect à @nicofrand, qui a tout implémenté 👏&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; : petite vague de relectures, sortie d’une nouvelle version, etc. J’ai commencé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&#x2F;pull&#x2F;188&quot;&gt;une PR&lt;&#x2F;a&gt; pour que les Github Actions téléchargent le binaire depuis les repos Github, afin de faire que l’action s’exécute plus rapidement : on passe d’environ 1 minute 15 pour l’exécution de l’action, à… 17 secondes ⏩&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;Element&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt; : les &lt;em&gt;threads&lt;&#x2F;em&gt; continuent d’avancer dans le SDK Rust (et donc dans ElementX). Une grosse partie sur laquelle je travaille se termine : le fait de pouvoir &lt;em&gt;s’inscrire&lt;&#x2F;em&gt; à des threads, pour ne recevoir les notifications que de ceux-là. Ça devrait aider à la gestion des notification des threads, notamment. Vivement que ça arrive dans ElementX 👀&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;J’ai eu l’occasion d’aller à Pas Sage En Steir, petite conférence sur Internet et le numérique, au Centre des Abeilles, à Quimper. Les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;video.passageenseine.fr&#x2F;c&#x2F;4bc3ac4e-1bc7-4fbc-96fc-a7f56613b595&#x2F;videos&quot;&gt;vidéos sont en ligne&lt;&#x2F;a&gt;, et je recommande, &lt;em&gt;a minima&lt;&#x2F;em&gt;, vivement les vidéos sur les stratégies médiatiques du front réactionnaire 👌&lt;&#x2F;li&gt;
&lt;li&gt;Encore des vidéos de psychologie de HealthyGamer: cette fois-ci, sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=unUt3qyluDQ&quot;&gt;« l’incapacité apprise »&lt;&#x2F;a&gt; (&lt;em&gt;learned helplessness&lt;&#x2F;em&gt; dans la langue de Shakespeare, et non je n’aime pas la traduction officielle française) et sur la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=bRBd7wTjoJg&quot;&gt;« motivation intrinsèque »&lt;&#x2F;a&gt; (faire les choses pour soi, plutôt que pour obtenir une validation ou une récompense externe). Très bonne cuvée.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé &lt;em&gt;Thinking, fast and slow&lt;&#x2F;em&gt; (en français : « les deux vitesses de la pensée ») de Daniel Kahneman, un livre de vulgarisation sur la psychologie, bien centré sur les biais cognitifs si j’ai bien compris. Mais c’est peut-être mon &lt;em&gt;heuristique de disponibilité&lt;&#x2F;em&gt; qui s’exprime : je n’ai lu que l’intro pour le moment 🤡&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notes.jeddacp.com&#x2F;outgrowing-friendships&#x2F;&quot;&gt;Outgrowing Friendships&lt;&#x2F;a&gt; : une réflexion sur le fait que toutes les amitiés ne sont pas faites pour durer nécessairement toute la vie 🥲&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notes.jeddacp.com&#x2F;on-making-friends-as-an-adult&#x2F;&quot;&gt;On Making Friends as an Adult&lt;&#x2F;a&gt; : de la même autrice ; de la complexité à se faire des ami·es une fois adulte.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;today-my-brain-wanted-to-think-about-one-of-the-first-dates-i-ever-went-on&#x2F;&quot;&gt;Today my brain wanted to think about one of the first dates I ever went on&lt;&#x2F;a&gt; : Keenan nous parle d’un de ses &lt;em&gt;date&lt;&#x2F;em&gt; adolescents sur fond de Titanic, avec ce petit mélange si personnel de tendresse et d’humour.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Last Epoch&lt;&#x2F;em&gt;, hack’n’slash avec voyage dans le temps, a sorti une nouvelle mise à jour, avec quelques nouveaux chapitres dans l’histoire ! Quelques heures de fun en perspective 👀&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;newpublic.substack.com&#x2F;p&#x2F;how-blacksky-grew-to-millions-of&quot;&gt;Social media’s next evolution: decentralized, open-source, and scalable&lt;&#x2F;a&gt; : une présentation de &lt;em&gt;Blacksky&lt;&#x2F;em&gt;, une « surcouche » de Bluesky qui promeut les voix et la sécurité de personnes noires, par ses propres créateur·ices. Et le mieux, c’est sans avoir eu à débourser un seul centime !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;catskull.net&#x2F;what-the-hell-is-going-on-right-now.html?trk=feed_main-feed-card_comment-text&quot;&gt;What the hell is going on right now?&lt;&#x2F;a&gt; : une réflexion sur la bulle de l’IA, à deux doigts d’exploser (mais depuis quelques temps déjà, là, non ? Allez là ?).&lt;&#x2F;li&gt;
&lt;li&gt;J’ai commencé à utiliser &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;paheko.cloud&#x2F;&quot;&gt;Paheko&lt;&#x2F;a&gt;, un logiciel libre de gestion d’association, très complet sur tous les aspects de comptabilité, mais qui tend à remplir tous les besoins d’une association : gestion des membres, édition d’un site Web en ligne, réservations pour des événements, etc. Hyper complet, et la communauté a l’air &lt;em&gt;au taquet&lt;&#x2F;em&gt; pour répondre à des demandes d’aides sur les listes emails. Je recommande chaudement 💪&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;L’application de blocage d’appels téléphoniques bon sollicités avec le meilleur nom de tous les temps : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.cbouvat.android.saracroche&quot;&gt;Saracroche&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Petit vestige de la période confinements du COVID : un site qui propose des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;virtualvacation.us&#x2F;walk&quot;&gt;balades à pied filmées&lt;&#x2F;a&gt;, dans plein de coins sympas dans le monde, comme si on y était.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #54</title>
        <published>2025-08-12T00:00:00+00:00</published>
        <updated>2025-08-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w32/"/>
        <id>https://bouvier.cc/notes/2025-w32/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w32/">&lt;p&gt;Des entretiens d’embauche par IA, combattre l’insomnie, Last Epoch, et des grafitis de postures acrobatiques.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Je suis en train de re-regarder &lt;em&gt;Rick &amp;amp; Morty&lt;&#x2F;em&gt; en ce moment, la série de science-fiction aux blagues problématiques (et au doubleur principal plein de casseroles au cul), mais avec des idées fascinantes, un humour acide et un rythme effrené. Je suis arrivé à la saison 3, sur l’épisode d’anthologie « Pickle Rick », et je reste fasciné par le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=VvB8h5LNpwA&quot;&gt;discours de la psy sur le &lt;em&gt;care&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; ; un moment qui n’a un peu rien à faire dans cette série, et qui vient contredire tous les comportements de Rick au sein des autres épisodes.&lt;&#x2F;li&gt;
&lt;li&gt;Fini la dernière saison de &lt;em&gt;Squid Games&lt;&#x2F;em&gt; aussi cette semaine. Dur à imaginer que ça puisse continuer encore longtemps ; le rythme s’essoufle un peu. Légère ouverture pour une version US de la série (à la &lt;em&gt;The Office&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZjC4wXT0buQ&quot;&gt;Un expert sur le sommeil parle d’insomnie&lt;&#x2F;a&gt; sur Youtube. Ne prêtez pas trop attention au montage des premières minutes, qui se veut sensationnaliste, pour essayer de vous accrocher. Le reste de l’entretien est beaucoup plus nuancé et intéressant, avec des explications sur les mécanismes de l’insomnie, notamment chez les parents, notamment chez les enfants, etc. Ça m’a bien aidé pour combattre mes propres insomnies, je peux donc recommander sans problème 👍&lt;&#x2F;li&gt;
&lt;li&gt;J’en profite pour remettre un lien vers un épisode (« court », seulement 30 minutes) du podcast d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=lIo9FcrljDk&quot;&gt;Huberman Lab sur le sommeil&lt;&#x2F;a&gt;, avec une explication des mécanismes neuro-biologiques liés au sommeil, et des techniques pour également l’améliorer.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;grisebouille.net&#x2F;fakir-et-lia-ya-rien-qui-va&#x2F;&quot;&gt;Fakir et l’IA : y’a rien qui va&lt;&#x2F;a&gt; : je n’avais pas vu passer cette histoire. Fakir &#x2F; Guillaume Meurice ont sorti un livre de coloriage dont les dessins ont été générés par une intelligence artificielle. Mais pire que ça, Fakir a commencé par démentir l’utilisation de l’IA avec un ton condescendant, avant de retourner sa veste quand iels se sont rendus compte qu’on les avait cramés. Faire une erreur c’est OK, mais la stratégie du déni hautain, c’est un grand non.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.tadzik.net&#x2F;the-importance-of-offtopic.html&quot;&gt;The importance of offtopic | blog.tadzik.net&lt;&#x2F;a&gt; : de l’importance d’avoir des conversations légères au travail, surtout quand on travaille à distance. Chouette 👍&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.tadzik.net&#x2F;use-ai-or-else.html&quot;&gt;Use AI - or else!&lt;&#x2F;a&gt; : sur le même blog, une réaction assez marrante au CEO de Github (enfin l’ancien, vu que depuis il a annoncé sa démission), qui hurlait qu’il fallait utiliser l’intelligence artificielle ou quitter la profession. Hahaha.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fortune.com&#x2F;2025&#x2F;08&#x2F;03&#x2F;ai-interviewers-job-seekers-unemployment-hiring-hr-teams&#x2F;&quot;&gt;AI is doing job interviews now—but candidates say they’d rather risk staying unemployed than talk to another robot&lt;&#x2F;a&gt; : comment ? passer des entretiens avec des recruteurs robotiques IA serait hyper irrespecteux des candidat·es, qui préfèreraient encore ne pas avoir de travail plutôt que de subir une telle humiliation ? les bras m’en tombent &#x2F; qui aurait pu prédire &#x2F; surprisedpikachu.jpg &#x2F; pas de merde, sherlock.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Grosses sessions sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;899770&#x2F;Last_Epoch&#x2F;&quot;&gt;&lt;em&gt;Last Epoch&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, un ARPG &#x2F; hack’n’slash avec du voyage dans le temps. (Présence de &lt;em&gt;spoilers&lt;&#x2F;em&gt; dans la suite de ce texte.) Eh bien, autant les mécaniques de jeu sont satisfaisantes et plaisantes (c’est notamment moins complexe que &lt;em&gt;Path of Exile&lt;&#x2F;em&gt; et ses 250000 systèmes), les rendus graphiques font kiffer mes yeux, et j’ai pu y prendre plaisir pendant des heures… Mais quel est le bin’z avec cette histoire qui s’arrête en plein milieu ? On dirait que l’équipe derrière le jeu n’a pas eu le temps de finir, s’est arrêté au chapitre 9 sur 12 en se disant « si ça marche, on fera la suite », tant l’histoire s’interrompt nettement sur un &lt;em&gt;cliffhanger&lt;&#x2F;em&gt;. Mais le jeu n’est pas une pré-release ; et il n’y a aucune indication que la suite de l’histoire arrivera un jour ou l’autre. Plutôt décevant, du coup ?!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.plakar.io&#x2F;&quot;&gt;Plakar&lt;&#x2F;a&gt; a l’air d’être une solution de &lt;em&gt;backup&lt;&#x2F;em&gt; qui a l’air simple à mettre en place et très efficace : déduplication, compression, chiffrement bout-à-bout. Comme si quelqu’un avait conçu un &lt;em&gt;borgbackup&lt;&#x2F;em&gt; facile et plaisant à utiliser. Ça me donne très envie de l’essayer pour mes serveurs perso…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thisiscolossal.com&#x2F;2025&#x2F;08&#x2F;artez-acrobatic-murals&#x2F;&quot;&gt;graffs impressionnants&lt;&#x2F;a&gt; de personnes dans des postures acrobatiques, woah !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #53</title>
        <published>2025-08-05T00:00:00+00:00</published>
        <updated>2025-08-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w31/"/>
        <id>https://bouvier.cc/notes/2025-w31/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w31/">&lt;p&gt;Signal, Matrix, ATProto, la MDMA, le COVID long, des vélos à assistance autonome, et des papas qui font semblant.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; :
&lt;ul&gt;
&lt;li&gt;Kresus fêtait ses 11 ans la semaine dernière ! Pour fêter l’occasion, on va sûrement sortir une petite release dans les jours à venir.&lt;&#x2F;li&gt;
&lt;li&gt;Pour l’occasion, j’ai fait un peu de &lt;em&gt;bugfix&lt;&#x2F;em&gt; sur le projet, et relu une PR qui &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1730&quot;&gt;simplifiera l’usage des graphiques par catégories&lt;&#x2F;a&gt; (et a fermé un ticket vieux de 8 ans, ouhlala).&lt;&#x2F;li&gt;
&lt;li&gt;Nicofrand a aussi commencé à travailler sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1731&quot;&gt;une version multi-utilisateur·ices&lt;&#x2F;a&gt; de Kresus, dans un contexte où la gestion de l’authentification est laissée à un service proxy, comme YunoHost, ou Authelia, etc. Ce système fonctionnera en laissant l’admin définir le nom du &lt;em&gt;header HTTP&lt;&#x2F;em&gt; utilisé pour authentifier un·e utilisateur·ice.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; :
&lt;ul&gt;
&lt;li&gt;Plusieurs relectures de PRs cette semaine également ! Mais j’ai toujours un peu de dette de relecture. Je devrais ouvrir un ticket pour expliciter que je voudrais de l’aide sur la maintenance du projet, parce que je n’ai pas envie d’y passer trop de temps, et que je le considère complet et suffisamment fonctionnel pour moi.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Une petite vidéo qui présente et explique le fonctionnement de la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=S53p0lBBC3Q&quot;&gt;MDMA&lt;&#x2F;a&gt;, aussi connu sous le nom d’extasy. On y apprend notamment que l’exta est la quatrième drogue illégale la plus consommée en France, après le cannabis, le poppers (!) et la cocaïne (!!!).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé et fini &lt;em&gt;L’arnaque des nouveaux pères&lt;&#x2F;em&gt;, une BD de sociologie &#x2F; féminisme sur le phénomène des papas très impliqués (en surface) dans la vie de famille ; mais bien entendu, la réalité est malheureusement assez différente. J’aime bien la posture des auteurs, qui situent leurs privilèges et se remettent en question régulièrement au cours de la BD. Et les réflexions et pistes de solutions évoquées également, qui passent beaucoup par des changements structurels (légaux notamment).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.radiofrance.fr&#x2F;franceculture&#x2F;podcasts&#x2F;carnets-de-sante&#x2F;qu-est-ce-que-le-covid-long-comment-l-expliquer-quelle-est-sa-prise-en-charge-4227372&quot;&gt;Dominique Salmon-Ceron : “Le Covid long c’est une petite mort invisible”&lt;&#x2F;a&gt; : 2 millions de personnes en France seraient atteintes de COVID long, à savoir des effets rémanents du COVID, même après en avoir guéri. Quand on voit l’étendue des symptômes, difficile pour moi de ne pas se poser de questions.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.politico.com&#x2F;newsletters&#x2F;digital-future-daily&#x2F;2023&#x2F;12&#x2F;01&#x2F;5-questions-for-meredith-whittaker-00129677&quot;&gt;5 questions for Meredith Whittaker&lt;&#x2F;a&gt; : une interview de la présidente de Signal, qui date de 2023, et qui refait des tours ces derniers temps sur les Internets digitaux. Plein de vérités qui ont très bien vieilli.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What’s a technology that you think is overhyped?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I’m going to give a sideways answer to this, which is that the venture capital business model needs to be understood as requiring hype.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=XVLVeGK16so&quot;&gt;I think about you not thinking about me&lt;&#x2F;a&gt;, une vidéo de piano trouvée par les hasards de l’algo de recommandation de Youtube.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;link.deezer.com&#x2F;s&#x2F;30FETKU5Uekabx14Yzzem&quot;&gt;Summer&lt;&#x2F;a&gt;, de Lavinia Meijer, EP de guitare classique très chill.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;La messagerie sécurisée Signal propose de limiter ses métadonnées de manière extrême, notamment en limitant ses propres connaissances de qui envoie quels messages à qui, une fonctionnalité appelée &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;signal.org&#x2F;blog&#x2F;sealed-sender&#x2F;&quot;&gt;&lt;em&gt;Sealed Senders&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;. Petit souci : si quelqu’un pouvait avoir accès aux logs réseau de Signal (&lt;em&gt;cough cough&lt;&#x2F;em&gt; comme un gouvernement américain par exemple &lt;em&gt;cough cough&lt;&#x2F;em&gt;), alors cela permettrait de retrouver les gens dans une même conversation en utilisant &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.ndss-symposium.org&#x2F;wp-content&#x2F;uploads&#x2F;2021-180-paper.pdf&quot;&gt;une technique statistique basée sur l’émission des confirmations de réception&lt;&#x2F;a&gt;. Et l’envoi des confirmations de réception n’est pas désactivable. Oups. (À titre d’honnêteté intellectuelle : Matrix ne propose rien d’équivalent aux &lt;em&gt;sealed senders&lt;&#x2F;em&gt;, à l’heure actuelle, donc fait strictement moins bien que Signal, sur ce point précis.)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blogs.mediapart.fr&#x2F;xcli&#x2F;blog&#x2F;160725&#x2F;trop-de-bruit-avec-signal-les-metadonnees-en-cause-dans-les-messageries-chiffrees&quot;&gt;Trop de bruit avec Signal : les métadonnées en cause dans les messageries chiffrées&lt;&#x2F;a&gt; : bien que Signal reste l’une des meilleures messageries sécurisées, l’auteur indique que les métadonnées sont (encore !) trop exploitables, même sur cette app, même malgré ses efforts. Dur dur, la cybersécurité…&lt;&#x2F;li&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.bsky.app&#x2F;showcase&quot;&gt;liste de projets basés sur le protocole ATProto&lt;&#x2F;a&gt;, donc utilisé par le service de micro-blogging BlueSky, mais qui permet des usages bien au-delà du microblogging. Après avoir passé quelques heures à en discuter avec &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bsky.app&#x2F;profile&#x2F;signez.fr&#x2F;&quot;&gt;@Signez&lt;&#x2F;a&gt; et à lire sur le sujet, j’ai l’impression que beaucoup des soucis d’ActivityPub sont résolus par ATProto 👀&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.germnetwork.com&#x2F;blog&#x2F;germdm-atproto-now-beta&quot;&gt;Germ DM x ATProto is Now in Beta — Germ Network&lt;&#x2F;a&gt; : une implémentation de messagerie sécurisée (chiffrée bout-à-bout) dont une partie de la mise en relation (si j’ai bien suivi) se passe via le protocole ATProto (BlueSky).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;massive.box&#x2F;blog&#x2F;decentralized-comms&#x2F;&quot;&gt;The present and future of decentralized communications platforms | MassiveBox&lt;&#x2F;a&gt; : il y a eu beaucoup de gens qui ont médit sur Matrix &#x2F; Element (sur lesquels je travaille) récemment. Cette critique comparative des différents protocoles (principalement ActivityPub, ATProto et Matrix) et leurs plateformes analyse plusieurs aspects et critères différents. Difficile d’en tirer des conclusions, au vu de la posture assumée de « personne qui rage sur Internet ».&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pi-pop.fr&#x2F;produit&#x2F;pipopg3-blanc&#x2F;&quot;&gt;Pi Pop&lt;&#x2F;a&gt; : Des vélos électriques à assistance autonome. Pas de recharge de vélo, celui-ci se recharge automatiquement lors du pédalage, freinage etc. L’idée semble plutôt bonne ! Si jamais vous avez testé, je suis curieux de vos retours là-dessus 😊&lt;&#x2F;li&gt;
&lt;li&gt;Un petit graphique de décision pour &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@adhd_coffee&#x2F;114952246605750991&quot;&gt;s’aider à savoir quand dire non&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #52</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w30/"/>
        <id>https://bouvier.cc/notes/2025-w30/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w30/">&lt;p&gt;La manière optimale de faire une « bombe » à la piscine, la friction dans la tech, et quitter Substack.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=EyC5yJVLlUM&quot;&gt;vidéo Youtube&lt;&#x2F;a&gt; sur des micro-habitudes qui entretiennent un état dépressif. À garder pas trop loin de soi, pour les moments où le moral est bas.&lt;&#x2F;li&gt;
&lt;li&gt;Fini la saison 2 et commencé la 3ème de &lt;em&gt;Squid Games&lt;&#x2F;em&gt; (Netflix). J’avais du mal à imaginer comment la saison 2 pourrait se renouveler dans l’esprit, mais malgré une histoire qui part en vrille, l’exercice est réussi, et je reste accroché. Ce début de saison 3 me donne l’impression qu’une conclusion de toute la série approche.&lt;&#x2F;li&gt;
&lt;li&gt;Fini &lt;em&gt;Les Carnets de l’Apothicaire&lt;&#x2F;em&gt;, un anime feel good (disponible sur Netflix, mais probablement ailleurs également). J’ai apprécié le côté très scientifique et rationnel de la protagoniste principale, et le fait que le scénario évite à tous prix des romances faciles impliquant la personnage principale.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai regardé un épisode de l’adaptation animée de &lt;em&gt;Strange Planet&lt;&#x2F;em&gt; (sur AppleTV, par &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nathanwpyle.art&#x2F;&quot;&gt;Nathan Pyle&lt;&#x2F;a&gt;), mais je n’ai pas été très happé. L’esprit est bien là, mais l’effet de nouveauté est complètement passé.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Sachez-le, il existe une manière optimale de faire des « bombes » à la piscine. Ça s’appelle le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=nI0uafp70lc&quot;&gt;&lt;em&gt;saut Manu&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, et c’est inspiré des maoris. Les pratiquant·es manifestent des projections d’eau à une dizaine de mètres, en sautant d’un plongeoir de 5 mètres environ. Impressionnant ! J’ai entendu parler de cela dans l’excellent podcast &lt;em&gt;We Have Concerns&lt;&#x2F;em&gt;, lors de l’épisode glorieusement intitulé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wehaveconcerns.com&#x2F;the-science-of-big-splashes&#x2F;&quot;&gt;The Science Of Big Splashes&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thunepodcast.fr&#x2F;index.php&#x2F;2025&#x2F;07&#x2F;03&#x2F;bipolaire-autiste-et-millionnaire-sa-strategie-boursiere&#x2F;&quot;&gt;Bipolaire, autiste et multi-millionnaire : sa stratégie boursière&lt;&#x2F;a&gt;, un épisode du podcast &lt;em&gt;Thunes&lt;&#x2F;em&gt; pour le moins surprenant.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tante.cc&#x2F;2025&#x2F;07&#x2F;30&#x2F;friction-and-not-being-touched&#x2F;&quot;&gt;Friction and not being touched&lt;&#x2F;a&gt; : de la notion de « friction », ce que révèle le fait que toutes les entreprises tech essaient de la supprimer, retirer, faire disparaître. Chouette métaphore, et &lt;em&gt;alerte divulgâchis&lt;&#x2F;em&gt;, ça parle des IAs génératives aussi 😏&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;paddy.carvers.com&#x2F;posts&#x2F;2025&#x2F;07&#x2F;ai&#x2F;&quot;&gt;I’m Tired of Talking About AI&lt;&#x2F;a&gt;. Comme je te comprends. L’auteur·ice expose plein d’arguments entendus en faveur de l’IA générative, et les démonte un par un. Une sorte de foire aux arguments face à la question « pourquoi t’es pas fan de l’IA » 👏&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docmost.com&quot;&gt;Docmost&lt;&#x2F;a&gt; : encore une alternative open-source à Notion &#x2F; Confluence et consorts. Si jamais quelqu’un l’a testé, faites-moi signe 👋&lt;&#x2F;li&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;endof10.org&#x2F;fr&#x2F;&quot;&gt;initiative&lt;&#x2F;a&gt; pour aider à remplacer des ordinateurs avec Windows 10, jugés « trop anciens » par Microsoft, pour proposer à leurs utilisateur·ices d’installer et utiliser du Linux à la place. J’aime bien l’idée de rencontrer les gens physiquement, pour leur proposer un vrai support et leur montrer comment utiliser leur nouvel OS.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;leavesubstack.com&#x2F;&quot;&gt;You should probably leave Substack&lt;&#x2F;a&gt;, une petite page qui explique pourquoi Substack™ est une plateforme plutôt toxique, et propose des alternatives gratuites ou payantes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #51</title>
        <published>2025-07-22T00:00:00+00:00</published>
        <updated>2025-07-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w29/"/>
        <id>https://bouvier.cc/notes/2025-w29/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w29/">&lt;p&gt;Retour de vacances 😎 Un peintre de mèmes, le jeu de calamar du Gonggi, une forge Git (vraiment) fédérée, et des reprises d’Einaudi à la harpe.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; : les vues personnalisées sont arrivées dans l’interface 🥳 Il sera donc possible, dans la prochaine version stable, de sélectionner plusieurs comptes et de les afficher ensemble dans les rapports d’opérations, ou encore dans les graphiques ou les budgets. Trop bien ! Merci à Nicofrand pour tout le travail d’implémentation effectué.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; : j’ai plein de propositions de contributions en ce moment, et très peu d’énergie ou de volonté pour les relire. Il est temps de trouver des co-mainteneur·ses.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;La première saison de &lt;em&gt;Squid Game&lt;&#x2F;em&gt;, très violent (trop, par moments) mais très addictif. Ça m’évoque vaguement le film &lt;em&gt;Parasite&lt;&#x2F;em&gt;, puisque l’existence de tels jeux ne se justifie que par une société très cruelle qui n’aide pas les gens dans la pauvreté.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini le tome 3 de &lt;em&gt;Tant que le café est encore chaud&lt;&#x2F;em&gt;, &lt;em&gt;Le café où vivent les souvenirs&lt;&#x2F;em&gt;. Bon, finalement j’aurais été vraiment enchanté par le premier tome, le troisième était plutôt longuet et répétitif à mon sens, la magie n’opère plus ; il est tant de lire autre chose !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wrotethis.org&#x2F;posts&#x2F;2025-07-17-doomerism&#x2F;&quot;&gt;Doomerism&lt;&#x2F;a&gt;, article très court sur la posture cynique du catastrophisme.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;frustrationmagazine.fr&#x2F;budget-bayrou&#x2F;&quot;&gt;Budget Bayrou : qu’est-ce qu’on attend pour foutre le feu ?&lt;&#x2F;a&gt;, snoop dog, snoop doggy dog, alors qu’est-ce qu’on attend ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tomrenner.com&#x2F;posts&#x2F;llm-inevitabilism&#x2F;&quot;&gt;The sound of inevitability&lt;&#x2F;a&gt; : encore une fois, le “there is no alternative” cache un agenda politique ; qui aurait pu prédire !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;commentisfree&#x2F;2025&#x2F;jul&#x2F;07&#x2F;europe-financial-sector-house-prices-politics&quot;&gt;Across Europe, the financial sector has pushed up house prices. It’s a political timebomb | Tim White&lt;&#x2F;a&gt; : les fonds de pension et institutions financières rachètent le parc immobilier en Europe et font exploser les loyers. Quand le droit au logement est bafoué, quelles sont les conséquences politiques ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mariobianchi.dev&#x2F;title&#x2F;the-advent-of-stupid-tech&quot;&gt;The advent of stupid tech&lt;&#x2F;a&gt;, un témoignage direct et efficace de l’inutilité de la « tech » moderne.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mariobianchi.dev&#x2F;title&#x2F;leaving-a-trace-embarassment-and-perfectionism&quot;&gt;Leaving a trace&lt;&#x2F;a&gt; : se débarrasser du perfectionnisme et de la gêne pour pouvoir avancer et laisser une trace dans la vie.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.optoutproject.net&#x2F;stop-the-scroll&#x2F;&quot;&gt;What to do on your (social media) vacation?&lt;&#x2F;a&gt; Qui ne rêve pas d’une petite pause des médias sociaux ? Voici des activités à faire pendant cette pause, au cas où vous vous demanderiez.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Je découvre l’artiste French Fuse, qui s’amuse à reprendre des vidéos courtes de chansons, et ajoute une instru par dessus. Ici, une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=4QkqRu4h1V4&quot;&gt;bossa nova très cool&lt;&#x2F;a&gt; sur un chant entre (supposément) une fille et son père.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Passagio&lt;&#x2F;em&gt;, album de reprises à la harpe de Ludivico Einaudi, par &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.deezer.com&#x2F;us&#x2F;artist&#x2F;4064821&quot;&gt;Lavinia Meijer&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=LCEmiRjPEtQ&quot;&gt;Software is changing (again)&lt;&#x2F;a&gt; : une vidéo par un chantre de l’IA sur une manière de voir les LLMs. Intéressant d’entendre le point de vue d’un spécialiste du sujet sur les tendances à venir : pas d’intelligence artificielle générale de sitôt, et les « agents » sont encore très mauvais par rapport à la hype qu’ils suscitent. Attention, il a du techno-solutionnisme plein les yeux, ça en fait un discours assez déconnecté de la réalité aussi : aucune critique négative réelle des LLMs.&lt;&#x2F;li&gt;
&lt;li&gt;Découverte de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.tangled.sh&#x2F;intro&quot;&gt;tangled.sh&lt;&#x2F;a&gt;, une forge Git &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.tangled.sh&#x2F;pulls&quot;&gt;fédérée&lt;&#x2F;a&gt; qui utilise le protocol ATProto (celui derrière Bluesky, donc). En plus de la fédération, la forge semble apporter des nouvelles idées sur la gestion des contributions à un projet open-source. Très tentant !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;metr.org&#x2F;blog&#x2F;2025-07-10-early-2025-ai-experienced-os-dev-study&#x2F;&quot;&gt;Une étude sur l’IA&lt;&#x2F;a&gt; a beaucoup fait parler d’elle récemment, sur le fait que les devs qui utilisaient l’IA étaient &lt;em&gt;plus lents&lt;&#x2F;em&gt; à faire leur travail que s’iels n’utilisaient pas d’IA. Pire encore : iels ont l’impression d’aller plus vite, bien que ce soit l’inverse qui soit vrai. J’apprécie la mesure de l’étude, notamment tout l’encart où elle explicite clairement ce qu’elle ne prouve pas. Je suis aussi tombé sur un article d’un dev qui remet en question cette étude via son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.lmorchard.com&#x2F;2025&#x2F;07&#x2F;10&#x2F;ai-tools-slowdown&#x2F;&quot;&gt;expérience personnelle&lt;&#x2F;a&gt; (un échantillon de taille N=1). TL;DR : l’IA ça peut être utile pour des problèmes bien contenus ou des projets qui partent de zéro, peut-être ?&lt;&#x2F;li&gt;
&lt;li&gt;IA partout, justice nulle part : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;futurism.com&#x2F;companies-fixing-ai-replacement-mistakes&quot;&gt;Companies That Tried to Save Money With AI Are Now Spending a Fortune Hiring People to Fix Its Mistakes&lt;&#x2F;a&gt; (lol), &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thealgorithmicbridge.com&#x2F;p&#x2F;im-losing-all-trust-in-the-ai-industry&quot;&gt;I’m Losing All Trust in the AI Industry&lt;&#x2F;a&gt; (lol^2).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Je découvre qu’il est possible, sur Android, par défaut, de cacher dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.numerama.com&#x2F;tech&#x2F;1629956-comment-cacher-ses-photos-dans-son-telephone-android-pour-eviter-les-indiscretions.html&quot;&gt;un dossier sécurisé des photos sensibles&lt;&#x2F;a&gt; (par exemple, des images de nus artistique, &lt;em&gt;nudes&lt;&#x2F;em&gt; en anglais), afin qu’elles soient cachées aux apps d’une part, et affichables uniquement après une mesure de sécurité plus forte (chez moi, validation via la biométrie). Certaines sources sur le Web semblent dire que les photos seraient mêmes chiffrées sur la carte SD. Pratique !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Joseph_Ducreux&quot;&gt;Joseph Ducreux&lt;&#x2F;a&gt; était un peintre qui a commis quelques auto portraits très expressifs, au point que l’un devienne un mème en 2009.&lt;&#x2F;li&gt;
&lt;li&gt;Le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.m.wikipedia.org&#x2F;wiki&#x2F;Millenarianism&quot;&gt;Millenarianism&lt;&#x2F;a&gt; est la croyance que tout va changer dans la société après un évènement donné. On pensera au grand soir par exemple, mais aussi à tous les apôtres de l’IA qui bavent sur l’intelligence artificielle générale. Rien à voir avec les millennials, donc.&lt;&#x2F;li&gt;
&lt;li&gt;Grâce à &lt;em&gt;Squid games&lt;&#x2F;em&gt;, je découvre le jeu du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Gonggi&quot;&gt;Gonggi&lt;&#x2F;a&gt;, une sorte de jeu des osselets, mais joué dans des pays orientaux (? je répète bêtement ce que dit Wikipedia, parce que c’est un jeu que même mon père ne doit pas connaître). Je trouve ça &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;1N-O98l1Q5A&quot;&gt;très beau&lt;&#x2F;a&gt; à regarder.&lt;&#x2F;li&gt;
&lt;li&gt;Pour rappel, il est possible d’avoir une réduction, une fois par an, pour des billets de train pour les vacances d’été. Bien entendu, la demande ne se fait pas de manière automatique, histoire d’ajouter un peu de friction ; il est nécessaire de passer par &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sncf-voyageurs.com&#x2F;fr&#x2F;voyagez-avec-nous&#x2F;en-france&#x2F;tarifs-grandes-lignes&#x2F;billet-conge-annuel&#x2F;&quot;&gt;un formulaire pour une demande manuelle&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;La &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Bo%C3%AEte_de_Skinner&quot;&gt;boîte de Skinner&lt;&#x2F;a&gt; est un dispositif expérimental inventé pour automatiser l’étude des conditionnements (à la Pavlov) des rats. Rien à voir avec le proviseur de l’école des Simpsons, donc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #50</title>
        <published>2025-07-08T00:00:00+00:00</published>
        <updated>2025-07-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w27/"/>
        <id>https://bouvier.cc/notes/2025-w27/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w27/">&lt;p&gt;CECI N’EST PAS UNE BLAGUE, VOICI LES 50ÈMES NOTES HEBDOMADAIRES!!!1! Ted Lasso se finit en beauté, « sommes-nous les méchants » se demande un chantre néolibéral du capitalisme de surveillance, et des gens qui se retrouvent à l’HP après avoir trop utilisé ChatGPT 😱&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Et oui, 50èmes notes hebdomadaires, ce qui veut dire un peu plus d’un an de publications, plus ou moins hebdomadaires. Je suis à la fois assez fier d’avoir atteint ce nombre, même si ça parait relativement « peu » dans le grand ordre des choses. Mais faire preuve de régularité (même partielle) comme ça, pour moi, ce n’est pas rien. On savoure les petites victoires 😊&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; : les vues personnalisées ont enfin été fusionnées 🥳 Avec cette fonctionnalité, il est possible de regrouper plusieurs comptes de son choix (même si celles-ci sont dans plusieurs banques différentes) dans une &lt;em&gt;vue&lt;&#x2F;em&gt; unifiée, et d’observer les rapports &#x2F; graphiques &#x2F; budgets pour cette vue-là. Bientôt chez vous dans une version stable 😎&lt;&#x2F;li&gt;
&lt;li&gt;auto-hébergement : j’ai testé la mise en place d’un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;LiberaForms&#x2F;server&quot;&gt;Liberaforms&lt;&#x2F;a&gt;, alternative à Google Forms auto-hébergeable, sur mon serveur, et ça semble assez solide, avec une très bonne UX, et les bases pour la modération : la possibilité d’être prévenu pour tout nouveau formulaire, et de les désactiver à distance en cas de souci. Chouette 👍&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini la saison 3 de &lt;em&gt;Ted Lasso&lt;&#x2F;em&gt;. Quelques larmes pour ces derniers épisodes, définitivement une bonne série très &lt;em&gt;feel good&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Commencé &lt;em&gt;Dark Matter&lt;&#x2F;em&gt; (sur AppleTV+, oui encore). Bon thriller psychologique, un peu effrayant parfois (à ne pas regarder avant de se coucher 😅).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mariobianchi.dev&#x2F;title&#x2F;leaving-a-trace-embarassment-and-perfectionism&quot;&gt;Leaving a trace&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;2025&#x2F;07&#x2F;03&#x2F;opinion&#x2F;trump-bill-clean-energy-china.html?unlocked_article_code=1.Tk8.Y_zH.nNl8ZeQo4Oj9&quot;&gt;Opinion | How Trump’s ‘Big, Beautiful Bill’ Will Make China Great Again&lt;&#x2F;a&gt; : il semblerait que Trump se soit tiré une balle dans le pied avec sa grande loi sur l’économie. Et pendant ce temps-là, Musk veut lancer son propre parti. Bon bah on n’est pas sortis des ronces.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;geohot.github.io&#x2F;&#x2F;blog&#x2F;jekyll&#x2F;update&#x2F;2025&#x2F;07&#x2F;05&#x2F;are-we-the-baddies.html&quot;&gt;Are we the baddies?&lt;&#x2F;a&gt; : un article très drôle de par son ironie. Un chantre du néolibéralisme se rend compte, via son expérience sur les apps de rencontre, que la surexploitation capitaliste via le virtuel, ça pue du cul ??? qui aurait pu prédire ???&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;n.survol.fr&#x2F;n&#x2F;je-ne-crains-pas-de-perdre-mon-travail&quot;&gt;Je ne crains pas de perdre mon travail&lt;&#x2F;a&gt; : je redécouvre le blog d’Éric Daspé, et j’aime beaucoup ses &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;n.survol.fr&#x2F;n&#x2F;lacher-les-couts&quot;&gt;publications&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;n.survol.fr&#x2F;n&#x2F;approche-des-couts-et-des-opportunites&quot;&gt;récentes&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;special-ia&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#special-ia&quot; aria-label=&quot;Anchor link for: special-ia&quot;&gt;🔗&lt;&#x2F;a&gt;special IA&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;allenpike.com&#x2F;2025&#x2F;coding-agents&quot;&gt;Spending Too Much Money on a Coding Agent&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;n.survol.fr&#x2F;n&#x2F;ia-lelephant-dans-le-couloir-ter&quot;&gt;IA : L’élé­­phant dans le couloir (ter)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ordep.dev&#x2F;posts&#x2F;writing-code-was-never-the-bottleneck&quot;&gt;Writing Code Was Never The Bottleneck&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;futurism.com&#x2F;commitment-jail-chatgpt-psychosis?ref=maaikebrinkhof.nl&quot;&gt;People Are Being Involuntarily Committed, Jailed After Spiraling Into “ChatGPT Psychosis”&lt;&#x2F;a&gt; : effrayante histoire. À cause de la tendance sycophantique des LLMs à être toujours d’accord &#x2F; bienveillant avec ce que disent leurs utilisateuri·ces, certaines personnes plongent dans des psychoses, parfois avec illusions de grandeur, parce que les IAs ne les remettent en question à aucun moment. Moralité : des gens se retrouvent incarcérés ou en hôpitaux psy, après avoir trop utilisé des IAs, alors qu’iels n’avaient aucun trouble de santé mentale préalablement détecté.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.maaikebrinkhof.nl&#x2F;pen-and-paper-are-superior-to-your-ai-bullshit&#x2F;&quot;&gt;Pen and paper are superior to your AI bullshit.&lt;&#x2F;a&gt; “The fearmongering around how I’m supposedly missing out on increased productivity leaves me cold, tbh. The book &lt;em&gt;Four Thousand Weeks&lt;&#x2F;em&gt; has drilled into me that &lt;em&gt;things take the time they take&lt;&#x2F;em&gt;. Rushing things so you can do more things (for the sake of doing more things, so you can….profit…how….???) is a trap.”&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;arstechnica.com&#x2F;tech-policy&#x2F;2025&#x2F;07&#x2F;pay-up-or-stop-scraping-cloudflare-program-charges-bots-for-each-crawl&#x2F;&quot;&gt;Pay up or stop scraping: Cloudflare program charges bots for each crawl&lt;&#x2F;a&gt;. Cloudflare va bloquer les &lt;em&gt;crawlers&lt;&#x2F;em&gt;
IA par défaut, et proposer à ses client·es de vendre leurs données pour le scraping. Une potentielle contre-offensive au &lt;em&gt;scraping&lt;&#x2F;em&gt; irrespectueux des IAs ? Ça pourrait bien fonctionner, malheureusement parce que Cloudflare est un si gros acteur des proxy Web.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;grisebouille.net&#x2F;lhdg28-lia-ne-sen-ira-pas&#x2F;&quot;&gt;LHDG28. L’IA ne s’en ira pas&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;colanode.com&#x2F;&quot;&gt;Colanode&lt;&#x2F;a&gt; est une alternative open source à Notion &lt;em&gt;et&lt;&#x2F;em&gt; Slack, avec un logiciel desktop pour MacOS ou Windows, mais pas de version Linux ou Web. Très très peu de documentation, le projet semble très frais, mais à suivre !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tinyauth.app&#x2F;&quot;&gt;TinyAuth&lt;&#x2F;a&gt; est un proxy d’authentification écrit en Go et qui se dit très léger.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Un petit &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;georapbox.github.io&#x2F;meme-generator&#x2F;&quot;&gt;générateur de mèmes&lt;&#x2F;a&gt; disponibles en version Web, gratuit, offline, qui fonctionne avec des templates personnalisés. Top !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #49</title>
        <published>2025-07-01T00:00:00+00:00</published>
        <updated>2025-07-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w26/"/>
        <id>https://bouvier.cc/notes/2025-w26/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w26/">&lt;p&gt;On ne dirait pas qu’on se noie quand on se noie, une théorie féministe des grands singes de cinéma, moult logiciels libres et des recettes pour une Aeropress’que parfaite.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Cette semaine j’ai fermé des onglets de navigateur pour fermer des onglets mentaux. Donc y a des liens. Beaucoup de liens.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Je continue à dévorer les séries d’Apple TV : la saison 3 de &lt;em&gt;Ted Lasso&lt;&#x2F;em&gt; (toujours aussi &lt;em&gt;wholesome&lt;&#x2F;em&gt;, en s’essoufflant un peu), la saison 1 de &lt;em&gt;Fondation&lt;&#x2F;em&gt; (que j’ai commencé par attachement aux livres, mais pas certain de la continuer au vu des longueurs), la saison 1 de &lt;em&gt;Dark Matter&lt;&#x2F;em&gt; (très bonne surprise !).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini &lt;em&gt;Le café du temps retrouvé&lt;&#x2F;em&gt;, de Toshikazu Kawaguchi, deuxième tome de la série &lt;em&gt;Tant que le café est encore chaud&lt;&#x2F;em&gt;. Je commence un peu à me lasser, mais les personnages sont attachants, et l’ambiance douce-amère est toujours bonne compagnon d’insomnie.&lt;&#x2F;li&gt;
&lt;li&gt;Fini &lt;em&gt;King Kong Théorie&lt;&#x2F;em&gt; de Virginie Despentes. Excellent essai autobiographique et féministe, il aura notamment basculé mon regard sur la prostitution (en particulier que sa non-légalisation constitue en gros un autre moyen de contrôle économique des femmes par les hommes).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;slate.com&#x2F;technology&#x2F;2013&#x2F;06&#x2F;rescuing-drowning-children-how-to-know-when-someone-is-in-trouble-in-the-water.html&quot;&gt;Drowning Doesn’t Look Like Drowning&lt;&#x2F;a&gt; : des bons rappels que ce que l’on imagine de la noyade (des gens qui battent des bras dans tous les sens), c’est très cinématique et pas du tout réaliste. L’article explique que les noyades se passent malheureusement beaucoup plus dans le calme le plus total, et c’est pour ça que plein de gens ne remarquent même pas que quelqu’un se noie à proximité. Quelques conseils pour repérer les vrais signes de noyages ; important à lire et garder en tête.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;p&gt;Rien de particulier, mais pour rappel, c’est les soldes d’été Steam en ce moment ! L’occasion d’acheter plein de jeux auxquels on ne touchera pas pendant plusieurs mois 🙃&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MrMugame&#x2F;silversearch&quot;&gt;Silversearch&lt;&#x2F;a&gt;, un plugin &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;Silverbullet&lt;&#x2F;a&gt; pour avoir de la recherche en temps réel sur toutes ses notes. Puissant 💪&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fx.wtf&#x2F;&quot;&gt;fx&lt;&#x2F;a&gt; est un outil en ligne de commande pour naviguer dans du JSON, de manière plus ergonomique que &lt;code&gt;jq&lt;&#x2F;code&gt;. J’ai jamais compris la syntaxe de jq ; là au moins c’est du pur JavaScript, si je comprends bien ; ça devrait m’être plus facile.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;healthchecks.io&#x2F;&quot;&gt;Healthchecks&lt;&#x2F;a&gt; est un système pour implémenter du &lt;em&gt;monitoring&lt;&#x2F;em&gt; de tâches &lt;em&gt;cron&lt;&#x2F;em&gt; ; dans la tâche cron, on ping un endpoint ; si on ne le fait pas (ce qui veut dire que la tâche cron ne tourne pas), healthchecks nous envoie un email. Efficace, pour des cas d’usages simples 👌&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;about.leaflet.pub&#x2F;&quot;&gt;Leaflet&lt;&#x2F;a&gt; est un système de publication de contenu, avec un éditeur en bloc (à la Notion&#x2F;Obsidian, donc), qui se veut très simple à utiliser. Encore assez jeune, ça a l’air d’être un beau projet à suivre pour le futur…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;depado&#x2F;smallblog&quot;&gt;Smallblog&lt;&#x2F;a&gt; est un autre système de publication de contenu, plutôt pour des blogs, basés sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.smallweb.run&#x2F;&quot;&gt;Smallweb&lt;&#x2F;a&gt; si je suis bien ; les changements dans le fichier de votre ordinateur sont refletés en quasi temps réel sur votre blog ! Moi perso, maintenant que j’ai passé des heures à me faire un système de publication dingo sur Silverbullet, je ne cherche plus d’autre solution technique pour publier ☺️&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;RoastBeefer00&#x2F;evilhelix&quot;&gt;evilhelix&lt;&#x2F;a&gt; est un &lt;em&gt;fork&lt;&#x2F;em&gt; de l’éditeur modal en ligne de commande &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;helix-editor&#x2F;helix&quot;&gt;Helix&lt;&#x2F;a&gt;, qui réutilise les commandes de (neo)vim. À tester 👀&lt;&#x2F;li&gt;
&lt;li&gt;Personne m’a prévenu qu’il existait &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.astral.sh&#x2F;uv&#x2F;&quot;&gt;uv&lt;&#x2F;a&gt;, un super gestionnaire de paquets pour Python, hyper rapide car écrit en Rust 😎🦀 ? Ah si, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notmyidea.org&#x2F;&quot;&gt;Alexis&lt;&#x2F;a&gt; m’a prévenu ; merci à toi ! Maintenant, vous savez aussi.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;atuin.sh&#x2F;&quot;&gt;Atuin&lt;&#x2F;a&gt;, un outil pour améliorer l’historique de son shell, voire le synchroniser entre plusieurs machines. Est-ce que j’ai vraiment besoin, quand j’ai déjà &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;fzf&quot;&gt;fzf&lt;&#x2F;a&gt; qui me permet de chercher dans l’historique de commandes ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;answer.apache.org&#x2F;&quot;&gt;Apache Answer&lt;&#x2F;a&gt; est un système de questions&#x2F;réponses, à la &lt;em&gt;StackOverflow&lt;&#x2F;em&gt;, mais libre et auto-hébergeable. Découvert grâce à la mise en place par la communauté &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ergol.org&quot;&gt;ErgoL&lt;&#x2F;a&gt; (une disposition alternative de clavier, pensée pour l’ergonomie en français) pour proposer un espace de discussion. Stylé !&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre aussi le projet &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;LiberaForms&#x2F;server&#x2F;&quot;&gt;Liberaforms&lt;&#x2F;a&gt;, qui propose une alternative libre et auto-hébergeable aux &lt;em&gt;Google Form&lt;&#x2F;em&gt; et consorts. Le projet a l’air vivant et bien fait, pas trop dur à auto-héberger.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obeli.sk&#x2F;blog&#x2F;introducing-obelisk&#x2F;&quot;&gt;Introducing Obelisk deterministic workflow engine&lt;&#x2F;a&gt; : un moteur de &lt;em&gt;workflows&lt;&#x2F;em&gt; open-source, celui-ci supporte des modules WebAssembly, pour à la fois permettre l’écriture des activités en plein de langages, mais aussi contrôler avec beaucoup de précision les permissions données à chaque activité. Tentant à essayer 👀&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aeroprecipe.com&#x2F;&quot;&gt;Un site de recettes d’Aeropress&lt;&#x2F;a&gt;. Allez les nerds du café, on met dans les &lt;em&gt;bookmarks&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #48</title>
        <published>2025-06-24T00:00:00+00:00</published>
        <updated>2025-06-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w25/"/>
        <id>https://bouvier.cc/notes/2025-w25/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w25/">&lt;p&gt;J’entends des voix mais c’est normal, de la musique lofi jouée à la main, et des faux amis qui causent des quiproquos.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Encore plein de projets perso qui avancent bien, et m’enchantent. Des spectacles de fin d’année qui se sont très bien passés aussi ☺️&lt;&#x2F;p&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini le tome 2 de &lt;em&gt;Tant que le café est encore chaud&lt;&#x2F;em&gt;, nommé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.babelio.com&#x2F;livres&#x2F;Kawaguchi-Le-Cafe-du-temps-retrouve&#x2F;1456678&quot;&gt;&lt;em&gt;Le café du temps retrouvé&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;. Toujours aussi doux-amer, toujours aussi bon pour m’aider à me rendormir après des insomnies 😌&lt;&#x2F;li&gt;
&lt;li&gt;Je continue &lt;em&gt;King Kong Théorie&lt;&#x2F;em&gt; de Virginie Despentes, mais c’est trop intellectuel à lire pendant mes insomnies 🙃&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=mT4g0paZ5gI&quot;&gt;De la musique lofi, mais savamment joué à la main&lt;&#x2F;a&gt;. J’aime beau l’idée d’une réappropriation acoustique d’un style tellement robotique qu’il en est souvent généré par ordinateur.&lt;&#x2F;li&gt;
&lt;li&gt;La version podcast de cet &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Og56hmAspV8&quot;&gt;épisode de Huberman Lab&lt;&#x2F;a&gt;, qui parle des « voix intérieures » d’un point de vue scientifique et neuro-scientifique. Le plus inédit finalement sera que : tout le monde entend des voix (et c’est normal), tout le monde a des pensées intrusives hyper sombres (et c’est normal). Bref, tout le monde est normal (et c’est normal).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft lance son équivalent d’app Android &#x2F; app bundle de MacOS &#x2F; flatpak &#x2F; snap. Ça s’appelle &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;fr-fr&#x2F;windows&#x2F;msix&#x2F;overview&quot;&gt;MSIX&lt;&#x2F;a&gt;, et ça devrait remplacer à terme les exécutables en &lt;strong&gt;.exe&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.swift.org&#x2F;blog&#x2F;swift-at-apple-migrating-the-password-monitoring-service-from-java&#x2F;&quot;&gt;Swift at Apple: Migrating the Password Monitoring service from Java&lt;&#x2F;a&gt; : comment des ingés Apple ont réécrit un service Java en Swift et résolu la paix dans le monde grâce à ça.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.cyrneko.eu&#x2F;matrix-is-cooked&quot;&gt;matrix is cooked&lt;&#x2F;a&gt; : des gens ont des opinions absolument non sourcées sur Matrix, et ne comprennent pas les incentives économiques les plus basiques. Oh well 🤷&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.miguelgrinberg.com&#x2F;post&#x2F;why-generative-ai-coding-tools-and-agents-do-not-work-for-me&quot;&gt;Why Generative AI Coding Tools and Agents Do Not Work For Me&lt;&#x2F;a&gt; : des bons arguments pour ne pas utiliser d’IAs pour le code.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;simonwillison.net&#x2F;2025&#x2F;Jun&#x2F;16&#x2F;the-lethal-trifecta&#x2F;&quot;&gt;The lethal trifecta for AI agents: private data, untrusted content, and external communication&lt;&#x2F;a&gt; : un manuel pour créer des failles de sécurité avec des IAs.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lucumr.pocoo.org&#x2F;2025&#x2F;6&#x2F;10&#x2F;genai-criticism&#x2F;&quot;&gt;GenAI Criticism and Moral Quandaries&lt;&#x2F;a&gt; : un absolutiste de l’IA pour coder la défend becs et ongles, avec des arguments d’inspiration libérale. Surprise, surprise.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Ne pas confondre la locution latine &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Quid_pro_quo&quot;&gt;quid pro quo&lt;&#x2F;a&gt; avec le terme français quiproquo, surtout en anglais où la première est souvent utilisée.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #47</title>
        <published>2025-06-17T00:00:00+00:00</published>
        <updated>2025-06-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w24/"/>
        <id>https://bouvier.cc/notes/2025-w24/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w24/">&lt;p&gt;La masculinité mise à mâle, des pubs dans WhatsApp, une démo d’un potentiel futur Element Web, et la spaghettification.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Beaucoup de temps passé loin des écrans et dans la vraie vie cette semaine, avec beaucoup de projets personnels qui commencent ou se terminent ces temps-ci. Une note hebdo plutôt courte, du coup 😎&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;Element&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt; : des gens de mon entreprise ont &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=DC6_rm2fO0c&quot;&gt;proposé une démo d’une refonte d’Element Web&lt;&#x2F;a&gt; qui utiliserait le SDK Rust ; codé en deux jours, c’est un beau prototype, et ce serait tellement cool qu’on puisse continuer là-dessus, pour enfin n’avoir qu’un seul SDK pour les gouverner tous (et dans la lumière, les patcher).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arte.tv&#x2F;fr&#x2F;videos&#x2F;RC-026088&#x2F;viril&#x2F;&quot;&gt;Viril, la masculinité mise à mâle&lt;&#x2F;a&gt; : un format court d’Arte, percutant, avec des interviews très classes, sur la masculinité (et ses soit-disantes crises). Super bien ! Si jamais des gens savent où trouver les entretiens complets, ça m’intéresserait ☺️&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé le tome 2 de &lt;em&gt;Tant que le café est encore chaud&lt;&#x2F;em&gt; : &lt;em&gt;Le Café du temps retrouvé&lt;&#x2F;em&gt;, pour accompagner mes insomnies c’est pas mal d’avoir une histoire douce et légère qui capte mon attention mais pas trop.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;WhatsApp va &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;noyb.eu&#x2F;en&#x2F;whatsapp-getting-ads-using-personal-data-instagram-and-facebook&quot;&gt;inclure des pubs basées&lt;&#x2F;a&gt; sur les informations partagées avec Instagram et Facebook. Il est temps de se désinscrire, pourquoi pas passer sur une messagerie sécurisée comme Signal ou Element 👀&lt;&#x2F;li&gt;
&lt;li&gt;Petite vidéo d’explication sur le fonctionnement d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xeiaso.net&#x2F;talks&#x2F;2025&#x2F;bsdcan-anubis&#x2F;&quot;&gt;Anubis&lt;&#x2F;a&gt;, aka le système de la petite infirmière manga qui évite les pics de trafic par des IAs sur ses sites web.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Spaghettification&quot;&gt;spaghettification&lt;&#x2F;a&gt;, un phénomène de physique spatial qui n’est autre que le phénomène des marées mais appliqué à tous les objets. Si j’ai bien compris, et autant vous dire que c’est de la physique, c’est sûrement pas le cas ^^&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=co7b8Y71BlE&quot;&gt;Stopping AI from taking your job by taking AI’s job&lt;&#x2F;a&gt;, une petite idée qui peut aller loin, très loin…&lt;&#x2F;li&gt;
&lt;li&gt;Bon comme j’ai pas grand chose cette semaine, voici &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;shorts&#x2F;rBlRZYtbuOI?si=b08occ75hWoaPanF&quot;&gt;un short d’un mec qui fait du beatbox avec son chien qui grogne en mode métal&lt;&#x2F;a&gt;. Voilà, bonne semaine à tous·tes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #46</title>
        <published>2025-06-09T00:00:00+00:00</published>
        <updated>2025-06-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w23/"/>
        <id>https://bouvier.cc/notes/2025-w23/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w23/">&lt;p&gt;Riposte aux crawlers d’IA, une grande bouche, des rythmes ternaires qui claquent, et une liste de soignant·es féministes en France.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Un projet trop cool se met en place dans ma vie, et ça m’enthousiasme énormément 😄&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;auto-hébergement :
&lt;ul&gt;
&lt;li&gt;mise en place d’une instance de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;goaccess.io&#x2F;&quot;&gt;Goaccess&lt;&#x2F;a&gt; pour avoir une idée vague du trafic réseau sur l’ensemble des services du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;&quot;&gt;Délire&lt;&#x2F;a&gt;. J’ai vu, comme plein d’autres avant moi, un trafic &lt;em&gt;énorme&lt;&#x2F;em&gt; (on parle de quasi un gigot-octets quotidien) causé par des &lt;em&gt;crawlers IA&lt;&#x2F;em&gt; sur notre instance de Forgejo. Donc mise en place d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;anubis.techaro.lol&#x2F;&quot;&gt;Anubis&lt;&#x2F;a&gt; sur notre instance de Forgejo, ce qui a fait descendre le trafic quotidien dessus à environ 2 Mo par jour. Ouf :)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;La dernière saison (et saison finale) de &lt;em&gt;Big Mouth&lt;&#x2F;em&gt;, sur Netflix. Bien que le dessin soit grossier, et que l’animé présente généralement un vernis de grossièreté, c’est aussi beaucoup de contenu très inclusif, très &lt;em&gt;sex-positive&lt;&#x2F;em&gt; d’éducation sexuelle. Notamment, je pense que c’est la première fois où j’ai vu de la représentation de personnes asexuelles, ou de discussions sur la sexualité de personnes autistes.&lt;&#x2F;li&gt;
&lt;li&gt;Le thème de Thomas le petit train est vraiment trop bien, et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=og1Pbn8OufI&quot;&gt;cette vidéo&lt;&#x2F;a&gt; décortique pourquoi il est si satisfaisant musicalement.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai découvert la chaîne de &lt;em&gt;synthet&lt;&#x2F;em&gt;, qui explique des trucs et astuces de production musicale, parfois en lien avec la théorie de l’harmonie (comme cette vidéo hypnotisante sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=fERehUJGNiQ&quot;&gt;les rythmes ternaires&lt;&#x2F;a&gt;), toujours avec une énergie et un rythme très entraînants, comme dans cette vidéo sur les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=MqqKtwdHAGw&quot;&gt;&lt;em&gt;ear candy&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; ou une trouvaille dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=MqqKtwdHAGw&quot;&gt;la structure rythmique de &lt;em&gt;Despacito&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;On continue &lt;em&gt;King kong théorie&lt;&#x2F;em&gt;, de Virginie Despentes. Mais, séries oblige, moins de temps pour la lecture ces derniers jours…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.jeetmehta.com&#x2F;posts&#x2F;thrive-in-obscurity&quot;&gt;Thrive in obscurity&lt;&#x2F;a&gt; : des bons conseils pour bloggueur·euses anonymes. Encore et toujours écrire pour soi, parce que le contenu que l’on écrit maintenant pourra être re-découvert par d’autres plus tard.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pagefind.app&#x2F;&quot;&gt;Pagefind&lt;&#x2F;a&gt; est un système pour ajouter de la recherche &lt;em&gt;full-text&lt;&#x2F;em&gt; à un site statique (genre un blog statique comme celui-ci, par exemple). Ça a l’air très simple à mettre en place !&lt;&#x2F;li&gt;
&lt;li&gt;Un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;raindrop.io&#x2F;guillaume11&#x2F;ia-tl-dr-55999307&quot;&gt;ensemble de liens cools sur l’IA&lt;&#x2F;a&gt; ; merci à Guillaume11 pour ce travail de curation !&lt;&#x2F;li&gt;
&lt;li&gt;Une vidéo explicative d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=wjZofJX0v4M&quot;&gt;introduction à la technologie sous-jacente des LLMs&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.engadget.com&#x2F;ai&#x2F;it-turns-out-you-can-train-ai-models-without-copyrighted-material-174016619.html?src=rss&quot;&gt;It turns out you can train AI models without copyrighted material&lt;&#x2F;a&gt; : dans la série « tiens donc, qui l’eût cru, qui aurait pu prédire » : si on essaie d’entraîner des IAs de manière « éthique » (sans voler le contenu d’entraînement, donc), on arrive à des performances pas dingues 🙃&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Oldie but goldie: &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theoatmeal.com&#x2F;comics&#x2F;brain_compliments&quot;&gt;pourquoi c’est toujours étrange de recevoir un compliment&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Un calendrier alternatif basé sur un découpage de l’année en 24 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;smallseasons.guide&#x2F;&quot;&gt;petites saisons&lt;&#x2F;a&gt;. Je suis né le premier jour d’une petite saison !!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.exemplaire-editions.fr&#x2F;exemplaire&#x2F;projets&#x2F;financement-participatif&#x2F;neoruraux&#x2F;contribute&quot;&gt;Néoruraux&lt;&#x2F;a&gt;, une BD de Julie &amp;amp; Kek, en financement participatif auprès des éditions Exemplaires 🤩&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Letraset&quot;&gt;Letraset&lt;&#x2F;a&gt; était une entreprise britannique qui fabriquait des caractères typographiques qu’on pouvait appliquer un par un en décalcomanies.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gynandco.wordpress.com&#x2F;&quot;&gt;gynandco&lt;&#x2F;a&gt;, une liste et carte de soignant·es féministes en France.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #45</title>
        <published>2025-06-03T00:00:00+00:00</published>
        <updated>2025-06-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w22/"/>
        <id>https://bouvier.cc/notes/2025-w22/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w22/">&lt;p&gt;Une interview de la présidente de Signal, de l’importance d’avoir des backups 🥲, les IAs de Google devenues lanceuses d’alertes, et Evangélion rencontre Stromaé.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Parmi les petits plaisirs : comme j’étais à Lyon en ce long weekend pour y retrouver des proches, j’ai profité de ma présence pour aller voir une présentation de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Meredith_Whittaker&quot;&gt;Meredith Whittaker&lt;&#x2F;a&gt;, la présidente de la fondation Signal (comme Mozilla, Signal a une entreprise adossée à une fondation distincte), en marge des Nuits Sonores, festival de musique électronique auquel elle assistait. C’était largement une conférence improvisée, mais j’ai beaucoup apprécié la profondeur et l’étendue de sa réflexion, à la fois historique, sociologique et psychologique sur le sujet du numérique (et peu des IAs, grand peine en fasse à Tariq Krim qui posait les questions 🙃). Ça me motive à découvrir ses autres présentations et billets de blog. En plus, elle nous a teasé un article maxi intéressant qu’elle est en train d’écrire 😍&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;auto-hébergement :
&lt;ul&gt;
&lt;li&gt;😥 J’ai perdu le contenu entier d’une note dans mon instance de &lt;em&gt;Silverbullet&lt;&#x2F;em&gt;, à cause d’un bug de l’interface Web (qui a remplacé le contenu de cette note par une autre, et synchronisé ça immédiatement sur le serveur distant). La note en question contenait un brouillon &lt;strong&gt;complet&lt;&#x2F;strong&gt; de billet de blog, écrit en anglais (donc beaucoup plus compliqué et long à écrire pour moi), ce qui me frustre particulièrement. Je suis donc hésitant à continuer de l’utiliser. Affaire à suivre, sauf si j’arrive à trouver un moyen automatique de sauvegarder des &lt;em&gt;backups&lt;&#x2F;em&gt; facilement de mes fichiers à intervalles très réguliers, genre toutes les 5 minutes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;p&gt;Petite pause dans les séries et films cette semaine, et comme à chaque fois : j’ai l’impression de regagner énormément de temps pour moi, peut-être d’avoir un peu plus d’énergie également, et ça fait beaucoup de bien 🥳&lt;&#x2F;p&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini &lt;em&gt;Peplum&lt;&#x2F;em&gt;, d’Amélie Nothomb. Bon, pas grand chose à en dire, je crois que je me suis lassé vers le milieu du livre de cette longue conversation, et n’y ai pas trouvé l’émerveillement ou l’intelligence que j’imaginais y voir.&lt;&#x2F;li&gt;
&lt;li&gt;Fini &lt;em&gt;Ils abusent grave&lt;&#x2F;em&gt;, d’Erell Hannah et Fred Cham, une BD de féminisme et sciences humaines. Sur la forme, je n’ai pas tant aimé le format où les sujets sont parfois traités de manière trop succinte, ce qui marche bien pour un blog BD mais peut-être pas autant pour un format livre. Par contre, le contenu était bouleversant, révélateur, et plusieurs fois m’a fait réaliser ou remettre en question mes comportements : très efficace pour muscler son féminisme et son empathie 😌&lt;&#x2F;li&gt;
&lt;li&gt;Commencé &lt;em&gt;King Kong théorie&lt;&#x2F;em&gt;, de Virginie Despentes, un essai féministe (partiellement auto-biographique aussi j’ai l’impression). Rien que la première phrase du bouquin était magistrale 👌&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dustri.org&#x2F;b&#x2F;my-experience-with-canonicals-interview-process.html&quot;&gt;My experience with Canonical’s interview process&lt;&#x2F;a&gt; : quelqu’un raconte son entretien d’embauche chez Canonical, l’entreprise derrière Ubuntu, et wow ça fait peur.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;bliki&#x2F;SayYourWriting.html&quot;&gt;Say Your Writing&lt;&#x2F;a&gt; : un conseil d’écriture assez simple mais puissant : relis-toi à voix haute, et écris comme si tu parlais à quelqu’un d’autre !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.lmorchard.com&#x2F;2025&#x2F;05&#x2F;27&#x2F;only-metrics-care&#x2F;&quot;&gt;Only the Metrics Care&lt;&#x2F;a&gt; : une lamentation à juste titre sur une des raisons pour lesquelles le Web propose du contenu de plus en plus pourri. &lt;em&gt;Alerte divulgâchis&lt;&#x2F;em&gt;, ça avait commencé bien avant que les LLMs n’accélèrent le processus !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mariobianchi.dev&#x2F;title&#x2F;slow-is-smooth-and-smooth-is-fast-vibe-coding&quot;&gt;Slow is smooth and smooth is fast | mariobianchi.dev&lt;&#x2F;a&gt; : j’ai découvert le blog de Mario récemment, et j’ai apprécié beaucoup d’articles, dont celui-ci en particulier, sur le sujet d’arrêter d’apprendre à faire les choses, ou les réparer. Hop, dans les flux RSS !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Cette semaine on continue de se casser les dents sur &lt;em&gt;Céleste&lt;&#x2F;em&gt; pour essayer de manger toutes les fraises (et puis surtout avancer dans l’histoire, pour commencer).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ki-editor.github.io&#x2F;ki-editor&#x2F;docs&#x2F;pitch&#x2F;&quot;&gt;Ki&lt;&#x2F;a&gt;, un autre éditeur modal de texte et code, à la Vim, écrit en Rust, avec des choix de conception intéressants. (Mais sûrement pas assez pour me faire changer d’éditeur.)&lt;&#x2F;li&gt;
&lt;li&gt;Des hackers font dire aux IAs de Google &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@ekis&#x2F;114607730454964102&quot;&gt;des « vérités » dérangeantes&lt;&#x2F;a&gt; en l’échappant de son prompt. Fun et révélateur, mais s’agit-il de vrais documents, d’hallucinations, ou de biais de confirmation ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=amhgdU-5dnQ&quot;&gt;Evangelion x Stromae - A cruel papa’s thesis&lt;&#x2F;a&gt;. Mashup incroyable, et le montage c’est la cerise sur le gâteau.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=_3qwrUiHaWQ&quot;&gt;Michael Scott dans Severance&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #44</title>
        <published>2025-05-26T00:00:00+00:00</published>
        <updated>2025-05-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w21/"/>
        <id>https://bouvier.cc/notes/2025-w21/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w21/">&lt;p&gt;Des &lt;em&gt;brave spaces&lt;&#x2F;em&gt;, des IAs thérapeutes 😱 ou candidates à des postes de dev 😱, et Eminem chanté par 331 films.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Fini la saison 2 de &lt;em&gt;Ted Lasso&lt;&#x2F;em&gt;. Un peu trop feuilletonnant au milieu à mon goût, l’intérêt est revenu en fin de saison. Je continue d’adorer le côté &lt;em&gt;feel-good&lt;&#x2F;em&gt;, oui-oui les gentil·les aussi peuvent gagner.&lt;&#x2F;li&gt;
&lt;li&gt;Fini la dernière saison de &lt;em&gt;Mythic Quest&lt;&#x2F;em&gt;. Une fin de saison qui pourrait conclure la série, ou ouvrir sur des &lt;em&gt;spinoffs&lt;&#x2F;em&gt; ou d’autres saisons. Des ficelles de taille énorme par moments, on ne va pas se mentir ; c’est &lt;em&gt;sympa&lt;&#x2F;em&gt; mais pas transcendant.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foundersatwork.posthaven.com&#x2F;find-your-people&quot;&gt;Find Your People&lt;&#x2F;a&gt;. Écoutez, que voulez-vous, j’aime bien les discours inspirationnels de graduation, même quand c’est des fondatrices de YCombinator qui les font.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;iresmo.jimdofree.com&#x2F;2021&#x2F;03&#x2F;21&#x2F;pourquoi-des-brave-spaces&#x2F;&quot;&gt;Pourquoi des brave spaces&lt;&#x2F;a&gt; : pour compléter le concept de &lt;em&gt;safe space&lt;&#x2F;em&gt;, bell hooks défend l’idée du &lt;em&gt;brave space&lt;&#x2F;em&gt;, qui incite à exprimer sa parole personnelle, et donc à se faire critiquer avec bienveillance et empathie — ce qui nécessite du courage, d’où &lt;em&gt;brave&lt;&#x2F;em&gt; space. Cela me semble très pertinent, dans une démarche de responsabilisation et de clarification de ses idéaux collectifs. Qui veut monter un &lt;em&gt;brave space&lt;&#x2F;em&gt; pas loin de chez moi ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;library.xandra.cc&#x2F;moderation&#x2F;&quot;&gt;Moderation.txt&lt;&#x2F;a&gt; : des bonnes indications pour mettre en place une modération efficace et éviter les nazis de s’installer dans nos communautés.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;53056f6c-4262-4d10-bda4-c369ce59c682&quot;&gt;How safe is AI therapy?&lt;&#x2F;a&gt; Apparemment, de plus en plus de gens utilisent les LLMs pour de la thérapie personnelle. Qu’est-ce qui pourrait mal se passer ? Et d’un côté, quand on voit les difficultés d’accès pour certain·es thérapeutes spécialisé·es, une part de moi comprend. Pour autant, cela me semble très très risqué, étant donné les biais des LLMs à ne pas remettre en question, à être à côté de la plaque ou à complètement partir dans le mensonge ou le jugement sans aucun recul.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;migalmoreno.com&#x2F;projects&#x2F;tubo.html&quot;&gt;Tubo&lt;&#x2F;a&gt; est un &lt;em&gt;frontend&lt;&#x2F;em&gt; Youtube auto-hébergeable, avec gestion des &lt;em&gt;playlist&lt;&#x2F;em&gt;, et une instance publique sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tubo.media&#x2F;&quot;&gt;Tubo.media&lt;&#x2F;a&gt;. Alors que la plupart des &lt;em&gt;frontends&lt;&#x2F;em&gt; Web ont tendance à se prendre des erreurs de limitations de lecture, et donc ne plus fonctionner assez rapidement, j’ai réussi à jouer plusieurs vidéos sans problème. À suivre, pour voir si c’est un remplacement viable de youtube.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;newsletter.pragmaticengineer.com&#x2F;p&#x2F;ai-fakers&quot;&gt;AI fakers exposed in tech dev recruitment: postmortem&lt;&#x2F;a&gt;. Terrifiant : des gens candidatent à des entretiens d’embauche en utilisant des IAs pour répondre aux questions, et lors des entretiens vidéos en utilisant des filtres IAs (ou carrément des flux vidéos &lt;em&gt;deepfakes&lt;&#x2F;em&gt; ? pas certain). À l’ère du télétravail complet, j’imagine que certains acteurs malveillants voient une aubaine dans le fait de se faire embaucher à plein d’endroits, même pour des courtes périodes. L’IA gâche tout, une fois de plus.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fredbenenson.medium.com&#x2F;the-perverse-incentives-of-vibe-coding-23efbaf75aee&quot;&gt;The perverse incentives of vibe coding&lt;&#x2F;a&gt; : un·e dev qui utilise beaucoup les IAs pour son travail s’est rendu compte que le code généré avait tendance à être massif en quantité, et très verbeux. Et pour cause, c’est dans l’intérêt économique des acteurs qui proposent ces services : plus il y a de code généré, plus les requêtes suivantes incluent du code en &lt;em&gt;contexte&lt;&#x2F;em&gt;, plus les requêtes suivantes sont donc chères. On peut donc s’attendre à ce que les IAs de code chient du code en masse, et que les entreprises qui les vendent ne fassent rien pour régler cela. L’IA gâche tout, une fois de plus.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;n.survol.fr&#x2F;n&#x2F;ia-lelephant-dans-le-couloir-bis&quot;&gt;IA : L’élé­phant dans le couloir (bis)&lt;&#x2F;a&gt;. Une analyse écologique des coûts estimés des IAs, avec pas mal de nuance, et pas de parti pris.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;eyes-au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eyes-au-passage&quot; aria-label=&quot;Anchor link for: eyes-au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;👀 Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theoatmeal.com&#x2F;comics&#x2F;taking_care&quot;&gt;Grief&lt;&#x2F;a&gt;, l’illustration par &lt;em&gt;The Oatmeal&lt;&#x2F;em&gt; d’un poème de Callista Buchen sur le deuil 😥&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=xYtaBfwpg_k&quot;&gt;Lose yourself d’Eminem&lt;&#x2F;a&gt;, chanté par 331 films. Dingo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #43</title>
        <published>2025-05-19T00:00:00+00:00</published>
        <updated>2025-05-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w20/"/>
        <id>https://bouvier.cc/notes/2025-w20/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w20/">&lt;p&gt;Édith Diams, une chanson Douce que me chantait Clara Ysé, et des adieux à l’indécision et &lt;em&gt;Docker rootless&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; : des petites MRs de correction de bugs côté client, après la fusion de la fonctionnalités de &lt;em&gt;vues personnalisées&lt;&#x2F;em&gt;. Est-ce qu’on s’approcherait pas d’une &lt;em&gt;release&lt;&#x2F;em&gt; ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;Element&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt; : retour au travail cette semaine. Plusieurs refactorings qui se passent &lt;em&gt;très bien&lt;&#x2F;em&gt;, ferment des boucles mentales ouvertes depuis longtemps, et nous permettront de mieux gérer les évènements dans les threads, en temps réel.&lt;&#x2F;li&gt;
&lt;li&gt;auto-hébergement :
&lt;ul&gt;
&lt;li&gt;Mise en place d’une instance de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forgejo.org&#x2F;&quot;&gt;Forgejo&lt;&#x2F;a&gt;, avec un &lt;em&gt;runner&lt;&#x2F;em&gt; pour avoir de la CI&#x2F;CD sur ma propre infrastructure. Le blog ainsi que &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;&quot;&gt;delire.party&lt;&#x2F;a&gt; sont désormais mis en ligne depuis la CI, c’est satisfaisant 😊&lt;&#x2F;li&gt;
&lt;li&gt;Beaucoup de mouvement sur mon blog, notamment en rajoutant le support pour les séries après avoir lu &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;enricorisa.me&#x2F;blog&#x2F;handling-series-with-zola&#x2F;&quot;&gt;cet article&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai également re-découvert que &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.funkwhale.audio&#x2F;&quot;&gt;Funkwhale&lt;&#x2F;a&gt; permettait d’héberger des &lt;em&gt;playlists&lt;&#x2F;em&gt; partageables publiquement. J’ai donc utilisé cela pour partager &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;music&#x2F;&quot;&gt;mes créations musicales&lt;&#x2F;a&gt; de ces 20 dernières années ; oreilles sensibles s’abstenir.&lt;&#x2F;li&gt;
&lt;li&gt;Mon « CHATONS » &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;&quot;&gt;delire.party&lt;&#x2F;a&gt; utilisait, pour son architecture de services, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.com&#x2F;engine&#x2F;security&#x2F;rootless&#x2F;&quot;&gt;Docker en mode &lt;em&gt;rootless&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, ce afin d’améliorer la sécurité, dans une optique de bonnes pratiques. À cause de performances réseau terriblement mauvaises, on en est revenus pour repasser sur un mode… bah pas &lt;em&gt;rootless&lt;&#x2F;em&gt;, quoi. Les performances réseau se sont nettement améliorées : les médias audios et vidéos se jouent instantanément sur les services qui en hébergent ; les actions Forgejo sont beaucoup plus rapides à télécharger et &lt;em&gt;upload&lt;&#x2F;em&gt; des données. C’est le feu, et la transition s’est passée toute en douceur 😌&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Encore plein de &lt;em&gt;Ted Lasso&lt;&#x2F;em&gt; sur &lt;em&gt;Apple TV&lt;&#x2F;em&gt;. Après une saison 1 qui me foutait les larmes quasi à chaque épisode, je trouve cette deuxième saison plus feuilletonnante, plus lente, et avec des ficelles très grosses (mais j’espère bien me tromper !). À suivre 👀&lt;&#x2F;li&gt;
&lt;li&gt;Continué &lt;em&gt;Mythic Quest&lt;&#x2F;em&gt;, plus doucement.&lt;&#x2F;li&gt;
&lt;li&gt;Pour rappel : n’oubliez-pas Dj Cheloutte, et son featuring &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=OJszshrB3qY&quot;&gt;&lt;em&gt;Edith Diams&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, savoureux mélange entre la Môme et la Boulette. Non, non non non, non, génération non-non 🎶 Merci à Radio Nova de financer ce genre d’émissions 🥰&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=YNOQzE1XTdU&quot;&gt;This is why you’re indecisive&lt;&#x2F;a&gt;, où le psychiatre qui tient &lt;em&gt;HealthyGamer&lt;&#x2F;em&gt; déconstruit l’indécision, ce qui nous pousse à le faire, et compare cela avec le fait de ne pas être indécis. Pour moi, ça recoupe le discours d’Eva Illouz sur le fait qu’on utilise beaucoup des stratégies de &lt;em&gt;maximisation&lt;&#x2F;em&gt; dans nos choix : on cherche le &lt;em&gt;meilleur&lt;&#x2F;em&gt;, plutôt que chercher quelque chose qui nous &lt;em&gt;satisfait&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Commencé &lt;em&gt;Péplum&lt;&#x2F;em&gt;, d’Amélie Nothomb.&lt;&#x2F;li&gt;
&lt;li&gt;Commencé &lt;em&gt;Ils abusent grave&lt;&#x2F;em&gt;, d’Erell Hannah et Fred Cham, une BD de vulgarisation de sciences humaines et de féminisme. Je n’en suis qu’au début, mais c’est déjà claque sur claque.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;commentisfree&#x2F;2025&#x2F;may&#x2F;12&#x2F;for-silicon-valley-ai-isnt-just-about-replacing-some-jobs-its-about-replacing-all-of-them&quot;&gt;For Silicon Valley, AI isn’t just about replacing some jobs. It’s about replacing all of them&lt;&#x2F;a&gt; : les entreprises et investisseurs de la Silicon Valley sont de plus en plus claires vis-à-vis de leur objectif final : remplacer toute l’économie par des robots (pour le travail du primaire et du secondaire) et des IAs (pour le travail du tertiaire). Bien entendu, sans proposition sociale aucune pour imaginer ce que deviendrait tous·tes ces humain·es sans travail ; &lt;em&gt;alerte divulgâchis&lt;&#x2F;em&gt;, on ne risque pas de se tourner les pouces.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bonfirenetworks.org&#x2F;posts&#x2F;slow_software_for_a_burning_world&#x2F;&quot;&gt;🐌 Slow Software for a Burning World 🔥&lt;&#x2F;a&gt; : une vision du développement Web rafraîchissante, basée sur des principes zapatistes. On aime on vous en parle.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;yordi.me&#x2F;nobody-has-the-manual&#x2F;&quot;&gt;Nobody Has the Manual&lt;&#x2F;a&gt; : il n’y a pas de règles, personne n’a le manuel, et la vie peut devenir plus simple et douce une fois que vous vous en êtes rendus compte.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;headphones-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#headphones-ecoute&quot; aria-label=&quot;Anchor link for: headphones-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;🎧 Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dzr.page.link&#x2F;paJ5DRxaYMVrgQxc6&quot;&gt;Clara Ysé - Douce&lt;&#x2F;a&gt;. Quelle maîtrise vocale.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Tu parles de ma résilience&lt;br &#x2F;&gt;
Mais tu ignores combien je pense&lt;br &#x2F;&gt;
Que la colère et l’arrogance&lt;br &#x2F;&gt;
Nous soignent autant que le silence&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;J’ai débloqué mon permis A dans &lt;em&gt;Burnout: Paradise City&lt;&#x2F;em&gt;, AMA.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;nerd-veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nerd-veille-tech&quot; aria-label=&quot;Anchor link for: nerd-veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;🤓 Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;immich.app&#x2F;&quot;&gt;Immich&lt;&#x2F;a&gt;, un gestionnaire de photos libre et auto-hébergeable. Pas testé, je suis satisfait de mon Nextcloud pour ça 😎&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien du 16 mai 2025 : ce qu&#x27;on ne devrait pas faire sur nos blogs</title>
        <published>2025-05-16T00:00:00+00:00</published>
        <updated>2025-05-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien-2025-05-16/"/>
        <id>https://bouvier.cc/notes/bloguidien-2025-05-16/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien-2025-05-16/">&lt;p&gt;&lt;em&gt;Je me prends au jeu du Bloguidien, sans garantie de le tenir dans la durée, ou de l’appliquer au plus près des règles proposées (plutôt qu’imposées). Pour vous résumer l’idée, il s’agit d’une opportunité d’écrire à travers des propositions de sujet, chaque jour, publiées sur le site du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;&quot;&gt;Bloguidien&lt;&#x2F;a&gt; et à travers son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pleroma.lord.re&#x2F;users&#x2F;bloguidien&quot;&gt;pendant social robotique&lt;&#x2F;a&gt;. Viens nous rejoindre pour cette aventure ?!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Qu’est-ce qu’on devrait tous faire un peu moins sur nos blogs ?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Je vois beaucoup de gens &lt;strong&gt;s’excuser de ne pas poster aussi souvent qu’iels le voudraient&lt;&#x2F;strong&gt;. Ce n’est pourtant pas du tout un problème, selon moi. D’où vient cette injonction ? L’impression ou l’envie d’être &lt;em&gt;célèbre&lt;&#x2F;em&gt; ? Et alors, ça vous rapporterait quoi, des points Internet™ ? En tant qu’auteur·ice de blog, vous ne devez rien à personne. Et je suis même intimement persuadé que la &lt;em&gt;blogosphère&lt;&#x2F;em&gt; gagnerait à s’extraire complètement de la pression auto-infligée de se sentir &lt;em&gt;obligé&lt;&#x2F;em&gt; de poster, ou de ne poster que du contenu parfaitement quali tout le temps. Après tout, à moins que votre succès commercial&#x2F;professionnel n’en dépende, vous publiez sans aucune obligation, et à ce titre, cela devrait venir d’une autre motivation. Il pourrait être nécessaire de se poser la question « &lt;em&gt;pourquoi je continue à blogger, si cela ne me sert pas ? Au service de quoi ou de qui le fais-je ?&lt;&#x2F;em&gt; ». À noter que cette question s’applique plus généralement, afin de s’assurer que l’on sait pourquoi on fait ce que l’on fait 🤓&lt;&#x2F;p&gt;
&lt;p&gt;L’autre chose que je vois souvent, et que j’ai envie de critiquer ici — plutôt parce que ce n’est pas de mon goût, et pas tant parce que C’est Mal™ — c’est le &lt;strong&gt;méta-commentaire sur le blog&lt;&#x2F;strong&gt;, c’est-à-dire l’écriture &lt;em&gt;au sujet du blog&lt;&#x2F;em&gt;, pour parler des technologies qui le propulsent ou des manières d’écrire. Et j’applique très bien cette critique à mon sujet ; après tout, j’ai même inauguré une « série » sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;series&#x2F;le-blog&#x2F;&quot;&gt;Le Blog&lt;&#x2F;a&gt; récemment, pour mettre en avant justement ces articles auto-centrés, vu qu’ils tournent autour d’un thème commun. Bien que cela me soit plaisant de temps à autre d‘en apprendre plus sur les fondations techniques d’un blog, &lt;strong&gt;n’avoir &lt;em&gt;que&lt;&#x2F;em&gt; ces billets &lt;em&gt;pourrait&lt;&#x2F;em&gt; être le signe d’une peur d’écrire sur d’autres sujets&lt;&#x2F;strong&gt;. Peur du jugement ? Peur de ne pas être intéressant·e ? Encore une fois, peut-être le signe d’une pression qui gagnerait à être abandonnée. Cela peut constituer une fuite &lt;em&gt;facile&lt;&#x2F;em&gt; aussi, vers un sujet simple, froid et technique, plutôt que se concentrer sur l’écriture d’articles plus profonds ou plus intimes, dont l’écriture prendrait plus de temps, ou dont la publication exposerait sa propre vulnérabilité. Cela dit, si vous avez un blocage à écrire et le seul sujet qui vous vient à l’esprit est de parler de votre blog, n’hésitez-pas à le faire ! Après tout, on est là pour se faire plaiz’ aussi 😎&lt;&#x2F;p&gt;
&lt;p&gt;Bref, &lt;strong&gt;écrivez si ça vous fait plaisir, sur les sujets qui vous font plaisir&lt;&#x2F;strong&gt; 😆&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #42</title>
        <published>2025-05-12T00:00:00+00:00</published>
        <updated>2025-05-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w19/"/>
        <id>https://bouvier.cc/notes/2025-w19/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w19/">&lt;p&gt;Une quête mythique, un navigateur qu’il est Zen, des traîneaux tunés, et autres micro-pensées.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;hammer-pick-des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hammer-pick-des-projets&quot; aria-label=&quot;Anchor link for: hammer-pick-des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;⚒️ Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;kresus&lt;&#x2F;a&gt; : plein de relectures de code, une petite contribution également pour améliorer le support des &lt;em&gt;vues&lt;&#x2F;em&gt; (= des regroupements de comptes définis par l’utilisateur·ice). Bientôt dans vos Kresus 😎&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; : Relu les deux &lt;em&gt;pull requests&lt;&#x2F;em&gt; actives sur le projet, ce qui fait que je ne suis plus en « dette » de relectures 🥳&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;tv-regarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tv-regarde&quot; aria-label=&quot;Anchor link for: tv-regarde&quot;&gt;🔗&lt;&#x2F;a&gt;📺 Regardé&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;OzgkisPNHz8&quot;&gt;Visitez l’appartement du futur : 0 déchêts, 100% vivant !&lt;&#x2F;a&gt; Une expérience d’appartement très efficient qui consomme le moins d’énergie possible (et produit donc le moins de CO2 possible). Il y a des choses qui me parlent, d’autres beaucoup moins (manger des grillons c’est non merci).&lt;&#x2F;li&gt;
&lt;li&gt;Regardé &lt;em&gt;Mythic Quest&lt;&#x2F;em&gt;, sur Apple tv, une série fictionnelle humoristique sur le fonctionnement d’un studio de jeux vidéos. Très fun et assez réaliste 😁&lt;&#x2F;li&gt;
&lt;li&gt;Commencé &lt;em&gt;Ted Lasso&lt;&#x2F;em&gt;, aussi sur Apple tv, une série comédie dramatique avec un héros qui utilise la bienveillance et la psychologie positive comme arme à tout va. Très très feel good, et une trame qui donne envie de continuer, avec des personnages bien écrits.&lt;&#x2F;li&gt;
&lt;li&gt;J’avais aussi commencé &lt;em&gt;Prime target&lt;&#x2F;em&gt; sur Apple TV, mais j’ai trouvé le premier épisode assez mal écrit et&#x2F;ou joué, donc j’ai vite arrêté. Dommage, le sujet avait un potentiel très élevé de me plaire…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;closed-book-lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closed-book-lu&quot; aria-label=&quot;Anchor link for: closed-book-lu&quot;&gt;🔗&lt;&#x2F;a&gt;📕 Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Lu &lt;em&gt;Koko n’aime pas le capitalisme à la plage&lt;&#x2F;em&gt; de l’artiste TiensTiens (bonjour à toi si tu passes par là !). Comme d’habitude, c’est très beau, assez profond politiquement, une chouette porte d’entrée pour des lectures politiques (grâce notamment à l’index à la fin qui référence des œuvres), toujours aussi bien ancré dans le situationnisme, et avec des participations d’autres artistes pour cette édition. Une lecture légère que je recommande pour tous·tes 🥰&lt;&#x2F;li&gt;
&lt;li&gt;Lu &lt;em&gt;Tant que le café est encore chaud&lt;&#x2F;em&gt;, un roman fantastique de Toshikazu Kawaguchi et Miyako Slocombe. Un bon mélange de légèreté et de profondeur, j’ai bien aimé pour agréablement passer le temps de mes insomnies. Je cite la 4ème de couverture : à Tokyo se trouve un petit établissement au sujet duquel circulent mille légendes. On raconte notamment qu’en y dégustant un délicieux café, on peut retourner dans le passé. Mais ce voyage comporte des règles : il ne changera pas le présent et dure tant que le café est encore chaud…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;spider-web-articles-et-blog-posts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#spider-web-articles-et-blog-posts&quot; aria-label=&quot;Anchor link for: spider-web-articles-et-blog-posts&quot;&gt;🔗&lt;&#x2F;a&gt;🕸️ Articles et blog posts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gomakethings.com&#x2F;purpose-goals-and-burnout&#x2F;&quot;&gt;Purpose, goals, and burnout&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notes.jeddacp.com&#x2F;micro-thoughts-explained&#x2F;&quot;&gt;Micro Thoughts - Explained&lt;&#x2F;a&gt;, où l’idée de garder une trace sur son &lt;em&gt;blog&lt;&#x2F;em&gt; des petites notes, des &lt;em&gt;toots&lt;&#x2F;em&gt; ou des tweets (je ne juge pas !) que l’on poste sur les réseaux sociaux de micro-blogging. Finalement, ces notes hebdomadaires représentent un peu cela pour moi : une sorte de résumé étendu de mes &lt;em&gt;toots&lt;&#x2F;em&gt; sur Mastodon.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ergaster.org&#x2F;posts&#x2F;2025&#x2F;05&#x2F;07-deep-work-reconciled-personal-growth&#x2F;&quot;&gt;Deep Work reconciled me with personal growth books&lt;&#x2F;a&gt;, où Thib raconte les points saillants de &lt;em&gt;Deep Work&lt;&#x2F;em&gt; de Cal Newport. Je kiffe qu’il ait partagé ses notes et que je puisse les importer dans mes systèmes de notes, des années après avoir lu &lt;em&gt;Deep Work&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;video-game-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-game-joue&quot; aria-label=&quot;Anchor link for: video-game-joue&quot;&gt;🔗&lt;&#x2F;a&gt;🎮 Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Considérez ceci comme un &lt;em&gt;coming out&lt;&#x2F;em&gt; ou pas, mais : j’aime les jeux de voitures-tunées-bébé. J’ai repris &lt;em&gt;Burnout Paradise&lt;&#x2F;em&gt; après avoir découvert qu’il était compatible SteamDeck, et c’est toujours un gros kiff (mêlé d’une légère honte mais OSEF je joue à ce que je veux, t’es pas mon géniteur 1 d’abord). &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=-v7Mwds1Ikk&quot;&gt;Et puis on peut être déconstruit &lt;em&gt;et&lt;&#x2F;em&gt; aimer collectionner les traîneaux&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Repris &lt;em&gt;Céleste&lt;&#x2F;em&gt; sur SteamDeck cette semaine. C’est dur. Très dur.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Je me suis emmouraché du navigateur Zen Browser, basé sur Firefox, et j’ai écrit &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;zen-browser-love-letter&#x2F;&quot;&gt;un petit billet&lt;&#x2F;a&gt; pour en parler plus en détail. Je suis aussi tombé sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cheff.dev&#x2F;?blog=01&quot;&gt;Building a browser that respects you&lt;&#x2F;a&gt;, un des instigateurs du fork, et je me sens complètement aligné avec son approche 🥳&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cartes.app&quot;&gt;cartes.app&lt;&#x2F;a&gt;, une alternative à Google Maps qui utilise les données de cartographie d’OpenStreetMap, avec une interface sympa pour découvrir les lieux d’intérêts autour d’un lieu donné. Et c’est Froncé et hébergé en Fronce, semble-t-il !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;filekey.app&#x2F;&quot;&gt;Filekey&lt;&#x2F;a&gt; est un système qui permet de chiffrer (et déchiffrer) voire partager des fichiers, depuis votre navigateur, en utilisant uniquement des &lt;em&gt;passkeys&lt;&#x2F;em&gt; avec votre gestionnaire de mots de passe ou votre OS favori. Sympa !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribe.cemea.org&#x2F;&quot;&gt;Scribe&lt;&#x2F;a&gt; par les CEMEA est un outil de transcription audio&#x2F;vidéo libre et gratuit. Un usage acceptable des IAs à mon sens, pour une meilleure accessibilité 😎 J’avais découvert aussi &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.whispernote.ai&#x2F;&quot;&gt;WhisperNote&lt;&#x2F;a&gt; qui fait sensiblement la même chose, sans fioritures.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cnap.fr&#x2F;sites&#x2F;faune&#x2F;&quot;&gt;Faune&lt;&#x2F;a&gt;, une des fontes sur lesquelles TiensTiens s’est basée pour l’écriture de &lt;em&gt;Koko n’aime pas le capitalisme à la plage&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Une lettre d&#x27;amour pour le Zen Browser</title>
        <published>2025-05-07T00:00:00+00:00</published>
        <updated>2025-05-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/zen-browser-love-letter/"/>
        <id>https://bouvier.cc/tech/zen-browser-love-letter/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/zen-browser-love-letter/">&lt;p&gt;Comment je suis passé de Firefox comme navigateur Web principal au Zen Browser.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;grandeur-et-decadence-des-pandas-roux&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#grandeur-et-decadence-des-pandas-roux&quot; aria-label=&quot;Anchor link for: grandeur-et-decadence-des-pandas-roux&quot;&gt;🔗&lt;&#x2F;a&gt;grandeur et décadence des pandas roux&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;em&gt;Longtemps, j’ai utilisé le navigateur Web Firefox de bonne heure&lt;&#x2F;em&gt;. Depuis mon adolescence, environ. À l’époque, parce qu’il révolutionnait les performances dans les navigateurs, face à Internet Explorer 6, permettant de naviguer à toute vitesse, avant que Google Chrome n’arrive et ne chamboule tout. Plus tard, je suis parti pour Chrome, finalement revenu pour Firefox, pour ses promesses quant à la protection de la vie privée des utilisateur·ices, son absence d’intérêts commerciaux à la direction de Mozilla. Encore plus tard, j’ai même eu la &lt;em&gt;chance&lt;&#x2F;em&gt; de travailler pour Mozilla, d’apprécier la puissance intellectuelle &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; des devs de Firefox et des autres produits de Mozilla, de pouvoir discuter avec les divers PDG, voire l’une des personnes à l’origine de l’initiative Mozilla &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mitchell_Baker&quot;&gt;Mitchell Baker&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Mais tout n’a pas été rose tout du long. Même en tant qu’utilisateur, j’ai eu plusieurs fois des remontées acides, des grimaces de dégoût, et ce, indépendamment de mon licenciement économique en 2020 (causé par La Crise™, qui frappait fortement le monde de la publicité du fait des confinements liés au COVID19). Le rachat de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getpocket.com&quot;&gt;Pocket&lt;&#x2F;a&gt; a été pour moi très marquant : un produit pas open-source, qui a galéré à le devenir complètement (de mémoire, la mise à disposition du code serveur est arrivée au cours de l’année 2024, quasiment plus de 10 ans après le rachat). Pendant ce temps-là, une autre équipe en interne avait créé une liste d’articles à lire plus tard, &lt;em&gt;directement intégrée dans le navigateur&lt;&#x2F;em&gt;. Cette même équipe était en train de créer des fondations techniques très solides et une vision cohérente pour une éventuelle plateforme de &lt;em&gt;cloud personnel&lt;&#x2F;em&gt;, à une période où je rêvais d’un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nextcloud.com&quot;&gt;Nextcloud&lt;&#x2F;a&gt; ou d’un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;fr&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; pour tous·tes, et où je me racontais que Mozilla avait la possibilité de vraiment changer les choses. Si seulement nous mettions à disposition des services cloud personnels estampillés Mozilla, absolument tout libres, infogérés par Mozilla, nous aurions même un angle &lt;em&gt;business&lt;&#x2F;em&gt; possible derrière ça : fournir quelques méga- ou giga-octets de stockage gratuit, puis faire payer les suivants. Mais d’autres décisions techniques et organisationnelles m’ont également marqué. Les virages et détours au sujet de Firefox OS, qui a finalement vécu sa meilleure vie une fois extirpé de Mozilla. Le choix de désinvestir dans Rust et Servo (un moteur de navigateur réécrit de zéro, en Rust), quand d’autres projets qui me semblaient moins prometteurs mais beaucoup plus « dans l’air du temps » (entendez : 🤮 metaverse 🤮 ou IA 🤮 déjà) ont été largement préférés. Pas besoin de revenir sur les différents épisodes, ou de trop me justifier ; disons que les derniers en date, notamment la cacophonie sur la notice liée à la vie privée, et l’arrivée d’IA nativement intégrée, ont un peu fini de me dégoûter, et ont rendu très compliqué pour moi le fait de continuer de défendre Mozilla malgré tout.&lt;&#x2F;p&gt;
&lt;p&gt;Parce que oui, je continuerai à défendre &lt;em&gt;l’outsider&lt;&#x2F;em&gt; Mozilla, tant au niveau technologique ou au niveau organisationnel. Technologique, parce que c’est l’un des trois derniers participants à encore créer un &lt;em&gt;moteur de rendu&lt;&#x2F;em&gt;, en gros toute la machinerie qui permet de faire un navigateur Web, et l’un des deux à tenter de combattre l’hégémonie de celui de Google. Organisationnel, parce qu’il s’agit (toujours, malgré tout) d’une entreprise « à mission »&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; adossée à une fondation. Pas d’actionnaires auprès de qui il serait nécessaire de rendre des comptes ou d’offrir des dividendes ; pas d’objectif de s’enrichir à milliards. Juste une nécessité de gagner assez d’argent pour se maintenir en vie, et &lt;em&gt;faire des trucs™&lt;&#x2F;em&gt; : payer les devs, proposer des initiatives d’éducation populaire au numérique et aux enjeux de protection de la vie privée.&lt;&#x2F;p&gt;
&lt;p&gt;Du moins, ça c’est là où je les attendrais ; en pratique, l’entreprise a tendance à s’éparpiller, à s’accrocher à n’importe quel qualificateur porteur de &lt;em&gt;hype&lt;&#x2F;em&gt; de la Silicon Valley, et essayer d’en tirer un profit pour se désolidariser du financement de Google pour la publicité offerte. D’où le metaverse ; d’où les initiatives un peu surprenantes sur l’IA. Je comprends le pourquoi et partage la motivation de prendre de la distance par rapport au financement via Google. Ça en devient absurde : aux USA, des procès &lt;em&gt;antitrust&lt;&#x2F;em&gt; ont actuellement lieu pour empêcher Google de financer les navigateurs à coups de millions pour être le moteur de recherche principal, ce afin de permettre aux &lt;em&gt;autres&lt;&#x2F;em&gt; moteurs de recherche d’être plus compétitifs™. Mais c’est une telle source de revenus pour Mozilla, que &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.omgubuntu.co.uk&#x2F;2025&#x2F;05&#x2F;mozilla-says-google-search-deal-vital-to-firefoxs-survival&quot;&gt;Mozilla en vient à &lt;em&gt;défendre&lt;&#x2F;em&gt; Google pour que Big G puisse continuer ce genre de pratiques&lt;&#x2F;a&gt;, sinon quoi la survie de Firefox (via son financement) serait menacée directement. Paradoxe de la compétition en effet. Bref, vivement que Mozilla puisse être plus tranquille financièrement, et idéalement pas en vendant de l’IA ou des produits inutiles ou en prenant des décisions qui ont l’air &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.zdnet.com&#x2F;article&#x2F;the-firefox-i-loved-is-gone-how-to-protect-your-privacy-on-it-now&#x2F;&quot;&gt;au mieux absurdes au pire effrayantes&lt;&#x2F;a&gt;, et aussi je voudrais la paix dans le monde et un poney, ce sera tout, un café et l’addition merci.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ok-bon-alors-on-va-ou-on-fait-quoi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ok-bon-alors-on-va-ou-on-fait-quoi&quot; aria-label=&quot;Anchor link for: ok-bon-alors-on-va-ou-on-fait-quoi&quot;&gt;🔗&lt;&#x2F;a&gt;ok bon, alors on va où, on fait quoi ?&lt;&#x2F;h2&gt;
&lt;p&gt;Les plus malin·gnes auront lu le titre de l’article, et les plus pressé·es pourront aller au sous-titre suivant. En attendant, un peu d’état de l’art sur les navigateurs existants.&lt;&#x2F;p&gt;
&lt;p&gt;Si vous êtes sur un MacOS ou un iOS, je pense assez sincèrement qu’Apple fait un bon boulot de protection de la vie privée avec Safari, et ça peut être une solution &lt;em&gt;satisfaisante&lt;&#x2F;em&gt;, si vous ignorez le fait que l’entreprise cherche à tout prix à vous enclaver dans son jardin doré, et fera tout pour éviter de vous faire voir ailleurs. Après tout, une application Web, c’est une application qui n’est pas dans l’App Store d’Apple, et qui donc ne rapporte pas d’argent à Apple, pourquoi s’embêter à soutenir une telle plateforme 😏&lt;&#x2F;p&gt;
&lt;p&gt;Et sinon, eh bien on ne va pas aller chez Chrome non plus, hein. Ce serait comme dire « ohlala la démocratie est en danger en France, si c’est comme ça je me casse en Chine &#x2F; Corée du Nord &#x2F; États-Unis&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; ».&lt;&#x2F;p&gt;
&lt;p&gt;Émerge donc un besoin de cohérence, pour moi : je veux continuer à utiliser &lt;em&gt;Gecko&lt;&#x2F;em&gt;, le moteur de rendu de Firefox, et je veux continuer à utiliser un navigateur qui protège ma vie privée (et ne s’engouffre pas dans l’IA à la première occasion). Il existe bien des variantes de Firefox (&lt;em&gt;forks&lt;&#x2F;em&gt;) dans le monde du libre : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;gnuzilla&#x2F;&quot;&gt;IceCat&lt;&#x2F;a&gt; (anciennement &lt;em&gt;IceWeasel&lt;&#x2F;em&gt;), &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;librewolf.net&#x2F;&quot;&gt;LibreWolf&lt;&#x2F;a&gt; me viennent à l’esprit, mais il en existe également d’autres d’après &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Gecko_(software)#Usage&quot;&gt;cette page Wikipédia&lt;&#x2F;a&gt;. Ces &lt;em&gt;forks&lt;&#x2F;em&gt; ont tendance à réutiliser principalement les mêmes concepts de navigateurs tels que nous les connaissons, et s’évertuent à supprimer les fonctionnalités dont l’impact est considéré comme étant néfaste vis-à-vis de la vie privée : télémétrie, toutes les méthodes directes ou indirectes de &lt;em&gt;tracking&lt;&#x2F;em&gt; même si c’est pour Mozilla, IA intégrée, et j’en passe et des meilleures.&lt;&#x2F;p&gt;
&lt;p&gt;D’aucuns disent à juste titre qu’abandonner Firefox pour aller sur un &lt;em&gt;fork&lt;&#x2F;em&gt;, c’est comme arrêter de boire de l’eau du robinet et ne consommer que l’eau mise en bouteille par le voisin un peu conspi et réac. Il y a effectivement un risque inhérent que les devs de ces projets s’amusent à mettre en place des bouts de code malveillants dans leur projet, ou le fassent par inadvertance. Le résultat est le même : les utilisateur·ices de ces forks seraient alors mis en danger, et l’utilisation d’un navigateur alternatif serait même contre-productive quant à l’intention initiale de mieux protéger sa vie privée des caprices des créateur·ices de Firefox. Mais la même question se poserait vis-à-vis de Firefox lui-même, si l’on ne savait pas que ce dernier est maintenu par la vénérable entreprise Mozilla ; la question de la confiance en le code est réglée, au vu des principes de l’entreprise. Ou « était » réglée ? L’intégration d’outils d’IA pourrait relever d’une trahison au niveau du code (la recette de fabrication de Firefox), remettant justement en question la confiance accordée par les utilisateur·ices. Je ne tiens pas à plonger dans l’aspect philosophique de la question. Pour moi, le fait que Firefox ou ses &lt;em&gt;forks&lt;&#x2F;em&gt; soient &lt;em&gt;open-source&lt;&#x2F;em&gt; garantit qu’il n’y aura pas de mauvaise surprise, parce que des gens plus paranoïaques que moi vont vérifier que le code ne fait pas n’importe quoi, à plus ou moins grande échelle. Cependant, même avec les plus belles intentions du monde, il est important que ces &lt;em&gt;forks&lt;&#x2F;em&gt; se remettent à jour sur Firefox régulièrement et rapidement. Je reviens là-dessus plus bas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.davidrevoy.com&#x2F;data&#x2F;images&#x2F;blog&#x2F;2025&#x2F;2025-02-27_how-my-firefox-became-a-librewolf.jpg&quot; alt=&quot;Illustration BD de LibreWolf par le talenteux David Revoy&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pour un usage général, je pense que l’option &lt;em&gt;LibreWolf&lt;&#x2F;em&gt; ferait très bien le boulot : pas d’intégration d’outils de protection de la vie privée qui rendraient l’usage imbitable pour des néophytes, des bons choix par défaut, très sensés, recommandé dans le dessin ci-dessus par le brillant &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.davidrevoy.com&#x2F;&quot;&gt;David Revoy&lt;&#x2F;a&gt;, bref, c’est Très Bien&#x2F;10.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pendant-ce-temps-la-a-vera-cruz&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#pendant-ce-temps-la-a-vera-cruz&quot; aria-label=&quot;Anchor link for: pendant-ce-temps-la-a-vera-cruz&quot;&gt;🔗&lt;&#x2F;a&gt;pendant ce temps-là, à Vera Cruz,&lt;&#x2F;h2&gt;
&lt;p&gt;Pendant ce temps-là, donc, du côté des navigateurs pas open-source et conçus par des entreprises qui veulent engranger de la Grosse Caillasse™, il y a un petit nouveau, nommé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;arc.net&#x2F;&quot;&gt;Arc Browser&lt;&#x2F;a&gt;. Bien entendu, basé sur Chrome. Mais qui apporte un peu de renouveau et de fraîcheur dans le monde des navigateurs. Par exemple, cette barre d’onglets &lt;em&gt;verticale&lt;&#x2F;em&gt; sur le côté, sans barre d’URL au dessus du site, pour une esthétique assez minimaliste, qui donne toute la place au site. Des &lt;em&gt;espaces&lt;&#x2F;em&gt; différents, avec des répertoires d’onglets, pour contenir et regrouper les innombrables onglets ouverts navigués dans des contextes différents, et limiter l’expansion de la charge cognitive de tout avoir sous les yeux tout le temps. La possibilité de découper la vue de la page en deux, pour pouvoir naviguer sur deux sites différents, côte-à-côte.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;arc.net&#x2F;theme-picker.png&quot; alt=&quot;Capture d’écran du navigateur Arc&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Miam miam ; enfin un peu d’innovation dans les navigateurs, qui n’est pas sans rappeler &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vivaldi.com&#x2F;fr&#x2F;&quot;&gt;le navigateur Vivaldi&lt;&#x2F;a&gt; (aussi basé sur Chrome 🥲). Au final, quels sont ses défauts, pour moi ? D’une part il est basé sur Chrome, et participe de l’hégémonie de son moteur de rendu. D’autre part, il est maintenu par une entreprise qui injecte de l’IA à toutes balles dans la version mobile du navigateur. Enfin, il n’est pas disponible sous Linux, système d’exploitation que j’affectionne tout particulièrement pour l’utiliser au quotidien 🤓&lt;&#x2F;p&gt;
&lt;h2 id=&quot;la-lettre-d-amour-rohlala-enfin-on-n-en-pouvait-plus&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-lettre-d-amour-rohlala-enfin-on-n-en-pouvait-plus&quot; aria-label=&quot;Anchor link for: la-lettre-d-amour-rohlala-enfin-on-n-en-pouvait-plus&quot;&gt;🔗&lt;&#x2F;a&gt;la lettre d’amour (rohlala enfin, on n’en pouvait plus)&lt;&#x2F;h2&gt;
&lt;p&gt;Et c’est là qu’entre en jeu &lt;del&gt;notre seigneur et sauveur&lt;&#x2F;del&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-5-1&quot;&gt;&lt;a href=&quot;#fn-5&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zen-browser.app&#x2F;&quot;&gt;Zen Browser&lt;&#x2F;a&gt;. Pas besoin de tergiverser, vu que sa conception semble directement inspirée d’&lt;em&gt;Arc&lt;&#x2F;em&gt;, il contient peu ou prou les mêmes fonctionnalités, et même mieux :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Ce navigateur est &lt;strong&gt;basé sur Firefox et donc Gecko&lt;&#x2F;strong&gt;. En soi, il soutient donc indirectement la puissance technologique de Mozilla. Plus pragmatiquement, il est &lt;em&gt;compatible avec l’écosystème d’addons Firefox&lt;&#x2F;em&gt; (si vous n’avez pas encore installé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;ublock-origin&#x2F;&quot;&gt;uBlock Origin&lt;&#x2F;a&gt;, allez-y, prenez votre temps, je vous attends tranquillement ici) et permet de &lt;em&gt;se synchroniser avec un compte Mozilla&lt;&#x2F;em&gt; classique (pour partager ses favoris &#x2F; mots de passe etc. avec les autres instances de &lt;em&gt;Zen Browser&lt;&#x2F;em&gt;… ou de Firefox !).&lt;&#x2F;li&gt;
&lt;li&gt;Il est &lt;strong&gt;disponible sur Linux, MacOS et Windows&lt;&#x2F;strong&gt;, donc globalement partout.&lt;&#x2F;li&gt;
&lt;li&gt;Il y a donc une &lt;strong&gt;barre d’onglets verticale&lt;&#x2F;strong&gt;, sur le côté, qui laisse toute la place au contenu. Pas de barre d’URL en haut ; celle-ci existe bien, mais elle est plus discrète, en haut de la pile des onglets. Il est même possible de déplacer cette barre d’onglets sur la droite de l’écran. J’adore ça, personnellement, puisque ça donne la place principale sur mon écran pour l’application Web que je suis en train de regarder, et ça a même tendance à me faire croire que l’application Web est en fait une app native.&lt;&#x2F;li&gt;
&lt;li&gt;En appuyant sur &lt;code&gt;Ctrl+Alt+C&lt;&#x2F;code&gt;, j’enclenche le &lt;strong&gt;mode compact&lt;&#x2F;strong&gt;, qui cache même cette barre d’onglets, pour n’avoir vraiment plus que le site en face des yeux. C’est très reposant et très &lt;em&gt;zen&lt;&#x2F;em&gt; (j’approuve le nom &lt;em&gt;de facto&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Il est aussi possible d’&lt;strong&gt;épingler&lt;&#x2F;strong&gt; des sites favoris, ce qui va n’afficher que leur icône, en très gros, tout en haut de la barre d’onglets. Idéal pour les sites sur lesquels je reviens souvent, notamment le tchat Matrix, mes emails, le lecteur musical etc.&lt;&#x2F;li&gt;
&lt;li&gt;Le navigateur essaie très activement de &lt;strong&gt;décharger automatiquement les onglets&lt;&#x2F;strong&gt;, notamment ceux qui n’ont pas été visités depuis un petit moment (alors que le navigateur était ouvert). Dans la barre d’onglets verticaux, il est même possible de séparer les onglets qui ne doivent pas être déchargés (au dessus d’une petite barre horizontale) de ceux qui peuvent l’être à n’importe quel moment (en dessous de cette même barre horizontale). Autant vous dire que la &lt;em&gt;mémoire vive&lt;&#x2F;em&gt; (RAM) de votre ordinateur appréciera 🥰&lt;&#x2F;li&gt;
&lt;li&gt;La &lt;strong&gt;gestion des onglets en espaces&lt;&#x2F;strong&gt; permet de compartimentaliser et de séparer les différents contextes liés à des onglets. Après quelques semaines d’utilisation sur cette machine, j’ai 3 espaces : un pour la navigation « au quotidien » que j’essaie de vider régulièrement, un pour &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; (🎶 un gestionnaire de finances personnelles libre, qu’il est trop bien 🎶) avec des liens vers des &lt;em&gt;merge requests&lt;&#x2F;em&gt; à relire ou finir, un pour des pages et sites que j’aimerais lire ou explorer plus tard, mais moins prioritaires.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Le découpage de la vue en plusieurs sous-vues&lt;&#x2F;strong&gt; (&lt;em&gt;split view&lt;&#x2F;em&gt;) est hyper pratique pour consulter deux pages en même temps. On clique sur deux onglets (ou plus), puis par exemple on presse &lt;code&gt;Ctrl+Alt+V&lt;&#x2F;code&gt; pour les afficher côte-à-côte verticalement. Dans mes cas d’utilisation récurrents, je noterai le fait de prendre des notes (dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;Silverbullet&lt;&#x2F;a&gt; par exemple) pendant que je regarde une vidéo instructive sur Youtube (et oui) ; ou de faire une comparaison de deux sites au niveau de leur contenu. Il est possible de découper la vue jusque 4 fois, donc j’imagine aussi bien un cas d’usage de &lt;em&gt;tableau de bord&lt;&#x2F;em&gt; avec plein de sites importants qu’on veut garder sous les yeux.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;video width=&quot;100%&quot; height=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;zen-browser.app&#x2F;_astro&#x2F;SplitViews.Cc2YPNMw.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
&lt;&#x2F;video&gt;
&lt;ul&gt;
&lt;li&gt;L’une de mes fonctionnalités favorites, c’est &lt;strong&gt;l’ouverture d’un lien en mode aperçu&lt;&#x2F;strong&gt; (&lt;em&gt;glance&lt;&#x2F;em&gt;). Pour cela, on clique sur un lien en maintenant pressé &lt;code&gt;Alt&lt;&#x2F;code&gt;. Cela ouvre une plus petite vue de ce site &lt;em&gt;au-dessus du site que l’on visite&lt;&#x2F;em&gt;, et cette petite vue peut être fermée via une presse de la touche &lt;code&gt;Échap&lt;&#x2F;code&gt; ou en cliquant en dehors de cette vue ; ce qui nous ramène au site précédent. Il est également possible d’étendre une vue &lt;em&gt;aperçu&lt;&#x2F;em&gt; en un véritable onglet, pour naviguer plus normalement dessus. Ça ne paraît pas grand chose comme ça, mais pour moi c’est &lt;em&gt;très très utile&lt;&#x2F;em&gt; : souvent je suis sur des sites avec beaucoup de liens, et j’en suis parfois certains pour aller voir ce qui se trame derrière, avant de revenir au site. Avec ce mode d’aperçu, je reste &lt;em&gt;dans le contexte&lt;&#x2F;em&gt; de ce que je regardais avant, et je passe moins de temps à jongler entre plein d’onglets ; je n’ai qu’un seul onglet ouvert tout du long de ma navigation.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;video width=&quot;100%&quot; height=&quot;100%&quot; controls&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;zen-browser.app&#x2F;_astro&#x2F;Glance.DMRcYdXi.webm&quot; type=&quot;video&#x2F;webm&quot;&gt;
&lt;&#x2F;video&gt;
&lt;ul&gt;
&lt;li&gt;Le &lt;em&gt;fork&lt;&#x2F;em&gt; est &lt;strong&gt;maintenu par des passionné·es, pas par une entreprise&lt;&#x2F;strong&gt; ; ce qui pourrait être un désavantage, mais l’activité autour du projet est très élevée. D’une part, beaucoup de &lt;em&gt;commits&lt;&#x2F;em&gt; récents dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zen-browser&#x2F;desktop&#x2F;commits&#x2F;dev&#x2F;&quot;&gt;l’historique du dépôt de code&lt;&#x2F;a&gt;…&lt;&#x2F;li&gt;
&lt;li&gt;…Et ce qui est le plus important, selon moi : &lt;strong&gt;les mises à jour de &lt;em&gt;rattrapage&lt;&#x2F;em&gt; de Firefox sont hyper rapides&lt;&#x2F;strong&gt;. Le problème est le suivant, quand vous maintenez un navigateur basé sur Firefox, il est nécessaire de récupérer &lt;em&gt;régulièrement&lt;&#x2F;em&gt; les changements de votre projet source (on parle d’&lt;em&gt;upstream&lt;&#x2F;em&gt;), ici Firefox, afin de les intégrer dans votre projet. Si ce n’est pas fait assez rapidement, vous risquez très rapidement d’utiliser un logiciel qui a des failles de sécurité rendues publiques. &lt;em&gt;Or&lt;&#x2F;em&gt;, de ce que j’observe, les devs de Zen Browser ont tendance à intégrer les nouvelles versions de Firefox &lt;em&gt;très&lt;&#x2F;em&gt; vite ; la dernière version de Firefox (la 138.0.1) est sortie le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;138.0.1&#x2F;releasenotes&#x2F;&quot;&gt;1er mai&lt;&#x2F;a&gt;, la version correspondante de Zen Browser (basée sur la 138.0.1) est sortie &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zen-browser&#x2F;desktop&#x2F;releases&#x2F;tag&#x2F;1.12b&quot;&gt;le 3 mai&lt;&#x2F;a&gt; (voire le soir du 2 mai). Pour moi, c’est gage de qualité, d’autant plus que c’est donc maintenu par des gens qui font ça &lt;em&gt;sur leur temps libre, pour le plaisir&lt;&#x2F;em&gt;, c’est particulièrement honorable 🙏&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;oui-mais-quid-de-ceci-benjamin-quid-de-cela&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#oui-mais-quid-de-ceci-benjamin-quid-de-cela&quot; aria-label=&quot;Anchor link for: oui-mais-quid-de-ceci-benjamin-quid-de-cela&quot;&gt;🔗&lt;&#x2F;a&gt;oui mais quid de ceci, Benjamin, quid de cela ?&lt;&#x2F;h2&gt;
&lt;p&gt;Ohlala je vous vois arriver avec vos gros sabots. Non, le &lt;em&gt;Zen Browser&lt;&#x2F;em&gt; n’est pas parfait, et c’est OK. Oui, c’est risqué qu’un navigateur, un des logiciels les plus centraux dans nos utilisations bureautiques modernes, soit maintenu par une poignée de gentils geeks avec trop de temps libre. Oui, Firefox pourrait sûrement faire la même chose avec 15 personnalisations de &lt;code&gt;about:config&lt;&#x2F;code&gt;, un thème personnalisé en CSS et une plâtrée d’addons &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-4-1&quot;&gt;&lt;a href=&quot;#fn-4&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Je reviendrais sûrement sur Firefox, si jamais l’activité autour de &lt;em&gt;Zen Browser&lt;&#x2F;em&gt; venait à diminuer, ou bien au premier mouvement de drague à destination de l’IA, ou bien à la première faille de sécurité pas ou mal gérée.&lt;&#x2F;p&gt;
&lt;p&gt;En attendant, c’est &lt;strong&gt;rafraîchissant&lt;&#x2F;strong&gt; d’avoir de nouveau du plaisir à utiliser un navigateur Web moderne, avec des fonctionnalités innovantes, tout en ne faisant aucun compromis sur ma vie privée. J’utilise maintenant &lt;em&gt;Zen Browser&lt;&#x2F;em&gt; depuis quelques semaines sur une machine, et &lt;strong&gt;je suis tout bonnement ravi&lt;&#x2F;strong&gt;, au point que je pense l’installer un peu partout rapidement, en complément&#x2F;remplacement de Firefox.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai tendance à être de moins en moins prosélyte quant à l’utilisation de logiciels, libres ou non. Chacun·e fait bien comme iel veut, on ne part pas toustes du même endroit, on a bien le droit de prioriser d’autres sujets avant celui de l’utilisation de tel ou tel logiciels. Mais c’est une des premières fois depuis un moment que je remarque un logiciel libre si cool et innovant que j’adore l’utiliser, que j’ai envie d’en parler et de vous le partager ; voilà qui est chose faite 😊 Pour télécharger le navigateur &lt;em&gt;Zen Browser&lt;&#x2F;em&gt;, c’est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zen-browser.app&#x2F;download&#x2F;&quot;&gt;par ici&lt;&#x2F;a&gt;. Si comme moi vous êtes fans, n’hésitez-pas à soutenir le développement avec &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zen-browser.app&#x2F;donate&#x2F;&quot;&gt;un don&lt;&#x2F;a&gt; !&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;bac +5 les enfants, comme disait le cowboy &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;j’emploie des guillemets ici, parce qu’il me semble que le terme a une signification bien précise aux USA, mais ce n’est pas celle que j’utilise ici. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;too soon 🥲 &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-5&quot;&gt;
&lt;p&gt;roh le cliché de libriste, c’est moche. &lt;a href=&quot;#fr-5-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-4&quot;&gt;
&lt;p&gt;il y a quelques semaines j’ai essayé de supprimer la barre d’URL en haut de Firefox pour la cacher, ou ne l’afficher qu’au survol ; sachez qu’il n’existe pas de solution officielle, et toutes les solutions officieuses (à base de &lt;em&gt;Greasemonkey&lt;&#x2F;em&gt; ou autres billevesées) sont fragiles comme un égo de mec. &lt;a href=&quot;#fr-4-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #41</title>
        <published>2025-05-05T00:00:00+00:00</published>
        <updated>2025-05-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w18/"/>
        <id>https://bouvier.cc/notes/2025-w18/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w18/">&lt;p&gt;Beaucoup de fnu avec &lt;em&gt;Silverbullet&lt;&#x2F;em&gt;, de la productivité lente, des applications Gnome hyper stylées, et l’heure bleue. Bref, c’est toujours les vacances 😎&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Quelques relectures de PRs de Nicofrand, et un peu de contribution de ma part ! Ça fait du bien de se remettre dans le code 😎&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Je me suis remis très activement à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;Silverbullet&lt;&#x2F;a&gt; pour la prise de notes ! D’ailleurs, cet article même a été écrit depuis Silverbullet, en utilisant des petits scripts par ci et par là, et notamment une intégration Git pour publier directement depuis le confort de mon interface Web. Je reviendrai sûrement là-dessus dans un billet plus long, si j’arrive à me motiver 🥲&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📚 J’ai fini &lt;em&gt;Slow productivity&lt;&#x2F;em&gt; de Cal Newport, un livre de « développement personnel » (donc résumable en une page A4) mais avec une approche &lt;em&gt;apaisante&lt;&#x2F;em&gt; : comment peut-on atteindre un état de productivité suffisante sans s’aliéner mais en y trouvant du plaisir ? Le texte me semble un peu longuet par moments, du fait d’une approche avec beaucoup d’extraits d’histoires de personnalités célèbres (le biais du survivant si cher au développement personnel !), et &lt;em&gt;Deep Work&lt;&#x2F;em&gt; ou &lt;em&gt;Digital Minimalism&lt;&#x2F;em&gt; du même auteur raviront probablement plus, pour une première lecture.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini la saison 2 de la série &lt;em&gt;Shrinking&lt;&#x2F;em&gt;, sur Apple TV+. Assez &lt;em&gt;feel good&lt;&#x2F;em&gt;, bien que le sujet principal soit plutôt lourd (&lt;em&gt;trigger warning&lt;&#x2F;em&gt; mort).&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.spacebar.news&#x2F;data-hoarding-more-important-than-ever&#x2F;&quot;&gt;Data hoarding is more important than ever&lt;&#x2F;a&gt; : si j’ai bien compris, et sans mauvaise foi aucune, le piratage c’est bien pour préserver la culture.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;circle.gnome.org&#x2F;&quot;&gt;Gnome Circle&lt;&#x2F;a&gt;, une liste d’applications open-source pour Gnome (et sous forme de &lt;em&gt;Flatpak&lt;&#x2F;em&gt; aussi, donc probablement disponibles sur d’autres plateformes) très chics : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.gnome.org&#x2F;NewsFlash&#x2F;&quot;&gt;Newsflash&lt;&#x2F;a&gt;, un lecteur de flux RSS ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.gnome.org&#x2F;Health&#x2F;&quot;&gt;Health&lt;&#x2F;a&gt;, pour suivre ses indicateurs de santé ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.gnome.org&#x2F;DejaDup&#x2F;&quot;&gt;Déjà Dup&lt;&#x2F;a&gt; pour faire des backups automatiquement ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.gnome.org&#x2F;Keypunch&#x2F;&quot;&gt;Keypunch&lt;&#x2F;a&gt; pour s’entraîner à taper rapidement au clavier ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.gnome.org&#x2F;Tuba&#x2F;&quot;&gt;Tuba&lt;&#x2F;a&gt;, pour naviguer sur le Fediverse ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.gnome.org&#x2F;Blanket&#x2F;&quot;&gt;Blanket&lt;&#x2F;a&gt; pour mettre du bruit blanc en arrière-plan. Et j’en passe, et pas des moindres.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zextras.com&#x2F;fr&#x2F;carbonio-community-edition&quot;&gt;Carbonio&lt;&#x2F;a&gt;, une solution collaborative open-source (et française, Môdame Môssieur !) pour remplacer Google Apps. Pas testé, mais ça a l’air plutôt chouette et complet. À voir si c’est plus rapide qu’un Nextcloud 🙃&lt;&#x2F;li&gt;
&lt;li&gt;J’ai essayé de mettre en place du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.debian.org&#x2F;Bonding&quot;&gt;&lt;em&gt;network bonding&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; sur une machine, pour pouvoir combiner mon ADSL (oh oui la joie de vivre dans un village du 15ème siècle) et ma connexion 5G (vous sentez l’anachronisme ?) partagée en wifi. Sans succès ; la connexion wifi n’était jamais utilisée. Si jamais quelqu’un sait comment faire marcher ça, faites-moi signe 😊&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Heure_bleue&quot;&gt;L’heure bleue&lt;&#x2F;a&gt; est la période entre le jour et la nuit où le ciel se remplit presque entièrement d’un bleu plus foncé que le bleu ciel du jour.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@bouletcorp2&#x2F;114448793680029041&quot;&gt;La recette du udon aux cacahuètes&lt;&#x2F;a&gt;, de Boulet, très roborative.&lt;&#x2F;li&gt;
&lt;li&gt;🎶 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;c.im&#x2F;@clarissadelune&#x2F;112842799528446792&quot;&gt;Are you depressed? Or is it C. A. P. I. T. A. L. I. S. M&lt;&#x2F;a&gt; 🎵&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #40</title>
        <published>2025-04-30T00:00:00+00:00</published>
        <updated>2025-04-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w16/"/>
        <id>https://bouvier.cc/notes/2025-w16/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w16/">&lt;p&gt;Un mois de notes hebdos, des Faiseuses du Web, une pause de réseaux sociaux, Severance &amp;amp; Shrinking, tout et son contraire sur l’IA pour les devs.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Ça fait un bail ! Depuis la dernière fois, j’ai eu la chance d’aller à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;faiseuses-du-web-maiwann-b39e3ee6f707e0427d112d9d1b3b0c497acec1.monpetitsite.org&#x2F;&quot;&gt;Faiseuses du Web&lt;&#x2F;a&gt;, qui a été une conférence très plaisante : des sujets de discussions improvisés grâce à un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;M%C3%A9thodologie_Forum_Ouvert&quot;&gt;forum ouvert&lt;&#x2F;a&gt;, des gens passionnant·es et indubitablement sympathiques, des activités pour &lt;em&gt;faire&lt;&#x2F;em&gt; et sortir de nos cérébralités impétueuses. Et tout ça dans la charmante bourgade de Dinan, en Bretagne. Que des bonnes raisons d’y retourner l’année prochaine ! N’hésitez-pas à aller lire &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;linuxfr.org&#x2F;users&#x2F;bookynette&#x2F;journaux&#x2F;tour-des-gull-etape-11-les-faiseuses-du-web&quot;&gt;l’article de Bookynette&lt;&#x2F;a&gt; pour en découvrir plus sur cette micro-conférence.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai une nouvelle problématique avec mes notes hebdos : maintenant que j’ai baissé le rythme de publication pour quelque chose qui est plus soutenable pour moi, beaucoup de temps peut s’écouler entre la lecture d’articles, et la phase de rédaction de mon avis &#x2F; mon résumé dans ces petites notes. En attendant de trouver une solution plus efficace (parce que oui, en tant que nerd, je vais probablement m’inventer un processus adossé à du code), je vais simplement poster les liens par catégories, avec un minimum de commentaires ici.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;series-tv&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#series-tv&quot; aria-label=&quot;Anchor link for: series-tv&quot;&gt;🔗&lt;&#x2F;a&gt;Séries 📺&lt;&#x2F;h2&gt;
&lt;p&gt;Je me suis abonné à Apple TV+. Après quelques semaines, beaucoup de séries me semblent de bonne qualité.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai notamment (re)dévoré la saison 1 de &lt;em&gt;Severance&lt;&#x2F;em&gt;, la série qui explore la vacuité du travail et l’imbécilité du monde &lt;em&gt;corporate&lt;&#x2F;em&gt; avec un vernis de &lt;em&gt;thriller psychologique&lt;&#x2F;em&gt; ; ainsi que la saison 2, découverte mais moins rassasiante à mon goût : à chaque mystère s’ajoute sa propre pile de nouveaux mystères, on n’en sort plus.&lt;&#x2F;p&gt;
&lt;p&gt;J’adore &lt;em&gt;Shrinking&lt;&#x2F;em&gt;, une comédie dramatique sur l’histoire d’un psychologue qui a perdu sa femme lors d’un accident de voiture, et se retrouve au fond du trou psychologiquement. La série explore le sujet du deuil d’un côté, et les relations entre le personnage principal, sa fille, son voisinage, ses collègues, le tout avec beaucoup d’humour malgré tout (mention spéciale au personnage de &lt;em&gt;Gaby&lt;&#x2F;em&gt; qui me fait régulièrement exploser de rire).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-youtube&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-youtube&quot; aria-label=&quot;Anchor link for: vu-youtube&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Youtube&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=dNKQYjsxgPU&quot;&gt;The 4 Types of Introvert - Which one are you?&lt;&#x2F;a&gt; : une petite typologie des introverti·es, qui va au delà de « les introverti·es sont des personnes socialement absentes ».&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=HdQlLjI6PcQ&quot;&gt;Severance, honest trailer&lt;&#x2F;a&gt; : ⚠️ beaucoup de &lt;em&gt;spoilers&lt;&#x2F;em&gt; (dilvulgâchages) dans cette vidéo hilarante qui propose une bande-annonce très honnête (trop ?) de la série &lt;em&gt;Severance&lt;&#x2F;em&gt;. À ne regarder qu’après avoir vu la saison 2 inclus, ou après avoir abandonné l’idée de regarder entièrement.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=XW-02QiiHDM&quot;&gt;Why Software Devs Keep Burning Out - YouTube&lt;&#x2F;a&gt; : une explication assez convaincante de ce qui fait que les devs partent souvent en &lt;em&gt;burnout&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lu&quot; aria-label=&quot;Anchor link for: lu&quot;&gt;🔗&lt;&#x2F;a&gt;Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;brilliantcrank.com&#x2F;eject-disk&#x2F;&quot;&gt;Eject disk&lt;&#x2F;a&gt;. Comment décrire cela : un court manifeste anti-&lt;em&gt;burnout&lt;&#x2F;em&gt; dans l’entreprise ? Comme une bouée de sauvetage envoyée par l’auteur·ice à soi, et aux autres qui pourraient en avoir besoin.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;supernuclear.substack.com&#x2F;p&#x2F;stoop-coffee-how-a-simple-idea-transformed&quot;&gt;Stoop coffee: how a simple idea transformed my neighborhood&lt;&#x2F;a&gt;. Des gens proposent à leurs voisin·es de se retrouver tous les jours devant chez elleux, pour prendre le café ensemble et discuter. Pouf tada, une communauté se forme.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.optoutproject.net&#x2F;smarter-watch&#x2F;&quot;&gt;Who’s Watching Your Watch?&lt;&#x2F;a&gt; : une réflexion sur les montres connectées et toutes les données qu’elles dévoilent, et l’importance, si vous choisissez d’avoir une montre connectée, d’avoir un modèle en lequel vous pouvez avoir confiance. Bref, une grosse pub pour les nouvelles montres &lt;em&gt;Pebble&lt;&#x2F;em&gt; 😄&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;axxuy.xyz&#x2F;blog&#x2F;posts&#x2F;2025&#x2F;attention&#x2F;&quot;&gt;Blogging for attention&lt;&#x2F;a&gt;, sur les motivations d’écrire des billets de blog.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;no-more-armchairing&#x2F;&quot;&gt;No More Armchairing&lt;&#x2F;a&gt; : allez, on arrête de commenter pour dire comment on aurait mieux fait les choses différemment, et on se pose la question de pourquoi les choses ont été faites telles qu’elles ont été faites. Particulièrement pertinent pour le développement logiciel, où tout est très vite qualifié de &lt;em&gt;dette technique&lt;&#x2F;em&gt; à tort et à travers.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ergaster.org&#x2F;posts&#x2F;2025&#x2F;04&#x2F;15-social-media-affect-me&#x2F;&quot;&gt;Social media affect me more than I thought&lt;&#x2F;a&gt; : pareil, Thib 🤝 J’en ai donc profité pour me faire un régime sévère sans médias sociaux, et : ça fait énormément de bien.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cdlt.kessel.media&#x2F;posts&#x2F;pst_9449c7ed221a420b98faf9bfa49e3e1d&#x2F;faire-taire-les-femmes-et-si-cetait-pour-notre-bien&quot;&gt;Faire taire les femmes : et si c’était pour notre bien ?&lt;&#x2F;a&gt; + &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.motherjones.com&#x2F;media&#x2F;2018&#x2F;10&#x2F;homer-women-speaking-mary-beard-elizabeth-warren-hillary-clinton-christine-blasey-ford-trump-vocal-fry&#x2F;&quot;&gt;Men Have Been Telling Women to Shut Up for at Least 3,000 Years – Mother Jones&lt;&#x2F;a&gt; : le premier article est &lt;em&gt;hilarant&lt;&#x2F;em&gt; (vraiment), et le deuxième (mis en lien dans le premier) est terrifiant.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soatok.blog&#x2F;2025&#x2F;04&#x2F;03&#x2F;the-authenticity-drought&#x2F;&quot;&gt;The Authenticity Drought - Dhole Moments&lt;&#x2F;a&gt; : sur la perte en authenticité dans les médias sociaux, le Web, à cause de l’IA, etc. Très très bon.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=0Vtg245ZDbU&quot;&gt;JB Kampf sur Kyber&lt;&#x2F;a&gt; : un des auteurs très médiatisé de VLC présente leur nouveau projet &lt;em&gt;Kyber&lt;&#x2F;em&gt;, un protocole de streaming vidéo basé sur QUIC. Prometteur, mais pas encore &lt;em&gt;open-source&lt;&#x2F;em&gt; 🥲&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blogz.zaclys.com&#x2F;depuis-les-gorces&#x2F;pourquoi-cest-si-dur-de-quitter-facebook-et-instagram&quot;&gt;Quitter Facebook et Instagram ? — Depuis les Gorces&lt;&#x2F;a&gt;, un billet didactique et pragmatique sur les raisons de quitter l’univers Meta, la culpabilisation en moins, et l’ouverture vers des propositions d’alternatives. Très chic, autant sur le fond que sur la méthode.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.joinmastodon.org&#x2F;2025&#x2F;02&#x2F;bringing-quote-posts-to-mastodon&#x2F;&quot;&gt;Bringing Quote Posts to Mastodon - Mastodon Blog&lt;&#x2F;a&gt; : j’apprécie que l’ajout des &lt;em&gt;quote posts&lt;&#x2F;em&gt; s’accompagne de nouvelles options de modération pour savoir qui peut répondre &#x2F; &lt;em&gt;quote post&lt;&#x2F;em&gt; et autres ; certaines options déjà présentes sur &lt;em&gt;Bluesky&lt;&#x2F;em&gt; de ce que je comprends.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;alexgaynor.net&#x2F;2025&#x2F;apr&#x2F;08&#x2F;putting-a-price-tag-on-open-source&#x2F;&quot;&gt;Putting a Price Tag on Open Source · Alex Gaynor&lt;&#x2F;a&gt; : une analyse économique des raisons pour lesquelles c’est compliqué d’imaginer pour du logiciel libre. Après l’avoir lu, je m’étais dit que c’était intéressant mais un peu faussé, et comme ça fait longtemps que je l’ai lu, je ne me souviens plus pourquoi j’ai pensé ça 🙃&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.paulgraham.com&#x2F;submarine.html&quot;&gt;The Submarine&lt;&#x2F;a&gt; : d’où viennent les articles de presse « mondaine » . Une enième preuve, s’il en fallait une, de l’emprise du capital sur les médias à des fins de propagande.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;special-ia&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#special-ia&quot; aria-label=&quot;Anchor link for: special-ia&quot;&gt;🔗&lt;&#x2F;a&gt;Spécial IA&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hmSsFVPmHKA&quot;&gt;Vibe coding&#x2F;CHOPing a YAML patching library using Cursor.ai and Big Daddy - YouTube&lt;&#x2F;a&gt; : le dev de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;Silverbullet&lt;&#x2F;a&gt;, une app open-source de prise de notes que j’aime bien, montre comment il utilise une IA générative pour ajouter une fonctionnalité à &lt;em&gt;Silverbullet&lt;&#x2F;em&gt;. Alerte divulgâchis : l’IA insère un bug que le dev n’a pas remarqué, et qui est donc parti en production. Je reparlerai de mon expérience avec les agents d’IA pour développer, mais honnnêtement ? Je ne pense pas être remplacé par Terminator de sitôt.&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;agent-feedback-loops&#x2F;&quot;&gt;Agent Feedback Loops&lt;&#x2F;a&gt; : le même explique la nécessité de boucles de rétroaction lors des dialogues avec ces IAs.&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;levels-of-ai-coder-adoption&#x2F;&quot;&gt;Levels of AI Coder Adoption&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.gardinerbryant.com&#x2F;servo-is-about-to-get-sloppy&#x2F;&quot;&gt;Servo is about to get sloppy…&lt;&#x2F;a&gt; : &lt;em&gt;I can confidently say that there is no ethical usage of GitHub Copilot.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theregister.com&#x2F;2025&#x2F;04&#x2F;12&#x2F;ai_code_suggestions_sabotage_supply_chain&#x2F;&quot;&gt;AI code suggestions sabotage software supply chain • The Register&lt;&#x2F;a&gt; : les IAs hallucinent des noms de bibliothèques logicielles ; des acteurs malveillants décident de mettre en ligne des bibliothèques frauduleuses mais avec ces noms ; kaboom 💥&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sourcegraph.com&#x2F;blog&#x2F;revenge-of-the-junior-developer&quot;&gt;Revenge of the junior developer | Sourcegraph Blog&lt;&#x2F;a&gt; : écoutez, moi je trouve ça fascinant qu’une boîte qui vend de l’IA pour faire du développement logiciel m’explique très ouvertement et simplement que (1) je suis un raté si je suis un dev qui n’utilise pas de l’IA pour faire du développement logiciel, et (2) que ça va permettre de faire des économies sur la masse salariale d’avoir des agents IA vu qu’il sera possible de n’avoir qu’un seul dev (et plein d’IAs à son service) plutôt que plein de devs (partie 4 de l’article). Le capitalisme prédateur n’a même plus besoin de cacher ses intentions, c’est formidable.&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lucianonooijen.com&#x2F;blog&#x2F;why-i-stopped-using-ai-code-editors&quot;&gt;Why I stopped using AI code editors · Luciano Nooijen&lt;&#x2F;a&gt; : de la perte en compétence liée à l’usage de l’IA.&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nolanlawson.com&#x2F;2025&#x2F;04&#x2F;02&#x2F;ai-ambivalence&#x2F;&quot;&gt;AI ambivalence | Read the Tea Leaves&lt;&#x2F;a&gt; : la position la plus mesurée, et que je rejoins le plus facilement, quant à l’usage de l’IA pour le développement logiciel.&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xeiaso.net&#x2F;notes&#x2F;2025&#x2F;amazon-crawler&#x2F;&quot;&gt;Making sure you’re not a bot!&lt;&#x2F;a&gt; : suite au &lt;em&gt;scraping&lt;&#x2F;em&gt; trop violent de son site, l’autrice a créé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;anubis.techaro.lol&#x2F;&quot;&gt;Anubis&lt;&#x2F;a&gt;, un système qui évite la plupart du &lt;em&gt;scraping&lt;&#x2F;em&gt; en demandant au navigateur qui visite de faire &lt;em&gt;un peu de travail&lt;&#x2F;em&gt; (entendez : quelques calculs dont les résultats seront vérifiés puis jetés) avant d’avoir accès à un site. Le plus effrayant, c’est que &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xeiaso.net&#x2F;notes&#x2F;2025&#x2F;anubis-works&#x2F;&quot;&gt;des organisations comme l’UNESCO et plein d’entités libristes&lt;&#x2F;a&gt; ont mis en place son système. Le web n’est-il plus traversé majoritairement que par des robots ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ecoute&quot; aria-label=&quot;Anchor link for: ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Le dernier album de Jamie XX, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dzr.page.link&#x2F;dSNQVCrW1DQkZQ9o9&quot;&gt;&lt;em&gt;In Waves&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, avec son enchaînement parfait entre les pistes 6 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dzr.page.link&#x2F;oiJdunRNn9hoFKau5&quot;&gt;&lt;em&gt;Still Summer&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; et 7 &lt;em&gt;Life&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Cette intense reprise de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dzr.page.link&#x2F;6gZuC3R96Jgg2pQN6&quot;&gt;No Surprises&lt;&#x2F;a&gt; par Talia Rae.&lt;&#x2F;li&gt;
&lt;li&gt;Cet album d’Odesza, nommé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dzr.page.link&#x2F;ZBeQyKqR7E7tNSom9&quot;&gt;Music To Refine To: A Remix Companion to Severance&lt;&#x2F;a&gt;. Comment ça, mono-maniaque ??&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Framasoft sort un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framamemes.org&#x2F;&quot;&gt;générateur de mèmes libres&lt;&#x2F;a&gt;. J’hésite à prendre en photo tout mon entourage dans des poses absurdes pour ensuite leur proposer de devenir des &lt;em&gt;templates&lt;&#x2F;em&gt; de mèmes.&lt;&#x2F;li&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;toki.social&#x2F;public&#x2F;local&quot;&gt;instance de Mastodon en Toki Pona&lt;&#x2F;a&gt;, la langue aux 14 phonèmes et 137 mots. Aussi une traduction du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jgcodes2020&#x2F;jaki-kiwen&quot;&gt;langage de programmation Rust en Toki Pona&lt;&#x2F;a&gt;, owi owi.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #39</title>
        <published>2025-04-02T00:00:00+00:00</published>
        <updated>2025-04-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w13/"/>
        <id>https://bouvier.cc/notes/2025-w13/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w13/">&lt;p&gt;Une critique efficace du développement personnel, des femmes sous algorithmes, aimer dans le régime du néolibéralisme, le rire des gens riches, un artiste ASMR discute salaire à vie, et une chanson de bus &lt;em&gt;drum’n’bass&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;J’ai mis en place un &lt;em&gt;pont&lt;&#x2F;em&gt; entre Matrix et Signal, pour mon compte perso. J’en parle un peu &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;signal-matrix&#x2F;&quot;&gt;ici&lt;&#x2F;a&gt;, en anglais, notamment sur quelques implications en termes de sécurité. Si nous avons des discussions communes sur Signal je vous invite à le lire !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📖 J’ai oublié de vous dire la semaine dernière : j’ai fini &lt;em&gt;La pythie vous parle&lt;&#x2F;em&gt;, de Liv Stromquist, et franchement c’est génial. Si vous avez une petite passion, coupable ou non, pour le développement personnel, la psychothérapie, cette BD peut être une lecture enrichissante. Je me suis senti plusieurs fois remis en question, et comme à chaque fois j’ai apprécié la capacité de vulgarisation et d’explications de l’autrice Liv Stromquist (honnêtement j’ai trouvé toutes ses BDs excellentes, sans raffoler du dessin, les contenus sont précieux). À mettre dans les ouiches-listes !&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arte.tv&#x2F;fr&#x2F;videos&#x2F;106118-007-A&#x2F;femmes-sous-algorithmes&#x2F;&quot;&gt;Femmes sous algorithmes&lt;&#x2F;a&gt;, ou comment Youtube propage une culture qui porter toute la responsabilité du monde sur les épaules des femmes qui chercheraient juste comment se faire un beau trait d’&lt;em&gt;eye-liner&lt;&#x2F;em&gt; ou comment être un peu plus organisées. Fascinant, notamment les épisodes &lt;em&gt;Miracle Morning&lt;&#x2F;em&gt; et &lt;em&gt;Bullet Journal&lt;&#x2F;em&gt; résonnent fortement avec le propos de &lt;em&gt;La pythie vous parle&lt;&#x2F;em&gt;. Porté (entre autres) par Titiou Lecoq, à qui on doit &lt;em&gt;Les grandes oubliées&lt;&#x2F;em&gt; ou &lt;em&gt;Libérées&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arte.tv&#x2F;fr&#x2F;videos&#x2F;117234-014-A&#x2F;croyons-nous-encore-a-l-amour&#x2F;&quot;&gt;Croyons-nous encore à l’amour ?&lt;&#x2F;a&gt;. La série documentaire Arte &lt;em&gt;Les idées larges&lt;&#x2F;em&gt; invite la sociologue et autrice Eva Illouz, pour parler du sujet de l’amour, de l’intrusion du néolibéralisme dans le champs des relations, de la stratégie de maximisation dans ses relations, de l’explosion du choix qui mène à l’angoisse, et de la place compliquée de l’éthique là-dedans. Passionnant, ça me donne envie de lire ses livres !&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arte.tv&#x2F;fr&#x2F;videos&#x2F;113629-009-A&#x2F;et-si-on-etait-paye-a-ne-rien-faire&#x2F;&quot;&gt;Et si on était payé à ne rien faire ?&lt;&#x2F;a&gt; Encore dans &lt;em&gt;Les idées larges&lt;&#x2F;em&gt;, cette fois-ci c’est Bernard Friot (&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=0KbD1Z91cxw&quot;&gt;artiste de lofi ASMR&lt;&#x2F;a&gt;, mais aussi sociologue et économiste sur son temps libre), qui vient nous parler du salaire à vie, en quoi c’est différent du revenu de base, nous rappelle l’origine de beaucoup de victoires des travailleur·euses au 20ème siècle (et comment la modernité néolibérale essaie de les détricoter) : salaire fixe plutôt que paiement à l’acte, fonctionnariat, retraite, système de cotisations. Génial.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dev.sunfox.org&#x2F;stacks&#x2F;&quot;&gt;Handy font stacks&lt;&#x2F;a&gt; : des listes de typographies &#x2F; fontes qui &lt;del&gt;vont bien ensemble&lt;&#x2F;del&gt; se ressemblent, et peuvent se servir de &lt;em&gt;fallbacks&lt;&#x2F;em&gt; les unes aux autres tout en garantissant un support multi-plateforme (merci Ana pour la précision). Chouette !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nicolargo.github.io&#x2F;glances&#x2F;&quot;&gt;Glances&lt;&#x2F;a&gt; est un petit outil de monitoring tout en un, comme un &lt;code&gt;htop&lt;&#x2F;code&gt; sous stéroïdes, qui permet d’observer toutes les métriques sur l’usage de sa machine.&lt;&#x2F;li&gt;
&lt;li&gt;Petite saga dans l’univers de Pixelfed : d’abord &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fokus.cool&#x2F;2025&#x2F;03&#x2F;25&#x2F;pixelfed-vulnerability.html&quot;&gt;une faille qui expose potentiellement des posts privés à d’autres membres de son instance&lt;&#x2F;a&gt;, puis &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bajsicki.com&#x2F;blog&#x2F;loops-video-terms&#x2F;&quot;&gt;une analyse des conditions d’utilisation de Loops&lt;&#x2F;a&gt;, le prochain projet du créateur, qui s’avèrent pour le moins… catastrophiques. Dur d’avoir confiance en Pixelfed ou tous les autres projets de son auteur, désormais 😔&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fungal.page&#x2F;&quot;&gt;Fungal.page&lt;&#x2F;a&gt; est une page Wikipédia sur des champignons, un tout petit peu particulière 👀&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gam.onl&#x2F;&quot;&gt;Plein d’émulateurs de consoles de jeux&lt;&#x2F;a&gt; qui tournent directement dans le navigateur 😎 À vous la chute de productivité !&lt;&#x2F;li&gt;
&lt;li&gt;Puisque vous avez aimé la porte qui grince drum’n’bass, vous aimerez sûrement &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=z9-p06yiJ6Q&quot;&gt;la chanson enfantine de bus version drum’n’bass&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Jim Carrey nous montre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=EffPnse4WQs&quot;&gt;la différence dans la manière de rire&lt;&#x2F;a&gt; entre les gens normaux et les gens riches. Je ne peux m’empêcher de penser &lt;em&gt;directement&lt;&#x2F;em&gt; à quelqu’un de ma famille.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>From Signal to Matrix, and conversely</title>
        <published>2025-03-25T00:00:00+00:00</published>
        <updated>2025-03-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/signal-matrix/"/>
        <id>https://bouvier.cc/tech/signal-matrix/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/signal-matrix/">&lt;p&gt;Tonight, I’ve configured and set up a bridge linking my &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;Matrix&lt;&#x2F;a&gt; account to my &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;signal.org&#x2F;&quot;&gt;Signal&lt;&#x2F;a&gt; account. The bridge is an instance of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mautrix&#x2F;signal&quot;&gt;Mautrix-Signal&lt;&#x2F;a&gt;, running on my collective server. As such, it’s configured to work only with users of this server.&lt;&#x2F;p&gt;
&lt;p&gt;What does it mean? From now on, every message, reaction, media etc. sent to my Signal account will be forwarded to a mirrored Matrix room, where the Signal user has a Matrix “puppeted” equivalent user.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;This has a few implications in terms of security, so if we belong in a Signal conversation together, please double-check your threat model after ingesting the security information below, and if you’re uncomfortable chatting with me on Signal, that’s fine; feel free to remove me from any conversation we had together (ideally, please let me know about it so I’m not totally confused 😁).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;security-implications&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#security-implications&quot; aria-label=&quot;Anchor link for: security-implications&quot;&gt;🔗&lt;&#x2F;a&gt;security implications&lt;&#x2F;h2&gt;
&lt;p&gt;Matrix and Signal both use end-to-end encryption, but it would be too simple if the encryption layer was implemented exactly the same way, and thus was interoperable (although, this might be in the works, thanks to initiatives like &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Messaging_Layer_Security&quot;&gt;MLS&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;So, with this bridging enabled, the following happens:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Signal messages will be relayed in encrypted form, from Signal to my server.&lt;&#x2F;li&gt;
&lt;li&gt;The bridge software will decrypt it using Signal encryption, in memory.&lt;&#x2F;li&gt;
&lt;li&gt;The bridge software will re-encrypt it with Matrix encryption.&lt;&#x2F;li&gt;
&lt;li&gt;The bridge software will send it to the Matrix server, in its encrypted format.&lt;&#x2F;li&gt;
&lt;li&gt;(Later, my matrix apps will receive the Matrix-encrypted message.)&lt;&#x2F;li&gt;
&lt;li&gt;The message is then forgotten from the server; it only exists in clear form on my Signal apps and my Matrix apps, from this point.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is breaking &lt;em&gt;end-to-end encryption&lt;&#x2F;em&gt;, since the message appears in clear-text during processing, for some short time, on my server. Some people call this paradigm &lt;em&gt;end-to-bridge&lt;&#x2F;em&gt; encryption. This is strictly better than keeping the messages in clear on the server, and I find the tradeoff worthy of my requirements and preferences.&lt;&#x2F;p&gt;
&lt;p&gt;Note that some metadata &lt;em&gt;is&lt;&#x2F;em&gt; encrypted in Signal, and is &lt;em&gt;not&lt;&#x2F;em&gt; encrypted in Matrix. This includes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;user display names&lt;&#x2F;li&gt;
&lt;li&gt;who are the members of a room, when did they joined, etc.&lt;&#x2F;li&gt;
&lt;li&gt;who can do what, in a given room (post, invite others, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;a room’s name and description&lt;&#x2F;li&gt;
&lt;li&gt;(everything that the Matrix specification calls “state events”, or also apparently &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;spec.matrix.org&#x2F;unstable&#x2F;client-server-api&#x2F;#room-events&quot;&gt;“room events”&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Again, if this is a problem for you: it’s absolutely fine to remove me from any conversation we had in common. I’m still available via some other mediums, if needs be.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#why&quot; aria-label=&quot;Anchor link for: why&quot;&gt;🔗&lt;&#x2F;a&gt;why?&lt;&#x2F;h2&gt;
&lt;p&gt;As a long term Matrix user, I have always been interested in Matrix’s promise to replace &lt;em&gt;most&lt;&#x2F;em&gt; messaging apps. I already had a &lt;em&gt;WhatsApp&lt;&#x2F;em&gt; (evil but somehow encrypted) and a &lt;em&gt;Telegram&lt;&#x2F;em&gt; (just plain bad) bridge, which allowed me to chat with folks using these platforms. And these days, more and more people are moving over to Signal, for good reasons, so the number of Signal conversations started growing a lot.&lt;&#x2F;p&gt;
&lt;p&gt;This is something I’ve been wanting to do for a long while. Before, setting up the bridge required instantiating an Android virtual machine on the server, that would run the Android Signal app in the backbground. Now, this is not required anymore, because Signal can have secondary devices that are connected to the main app, and that’s great news.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Overall, I’m quite happy that I could enable it in the matter of 30 minutes or so. With backfill enabled, I even obtained the history for the previous messages that were sent on Signal &lt;em&gt;before&lt;&#x2F;em&gt; enabling the bridge, which is super nice. Connecting my account added one room for each Signal conversation, so I received around 80 invites for new conversations, which took a bit of time to handle in the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-x-ignition&#x2F;&quot;&gt;ElementX application&lt;&#x2F;a&gt; (that I’ve been working on for almost two years!). Now I can mute (hopefully!) forever the Signal app’s notifications on all my devices, and &lt;em&gt;mostly&lt;&#x2F;em&gt; use only Matrix 😎&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #38</title>
        <published>2025-03-24T00:00:00+00:00</published>
        <updated>2025-03-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w12/"/>
        <id>https://bouvier.cc/notes/2025-w12/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w12/">&lt;p&gt;Une méditation énergisante pour se réchauffer, une méditation musicale à base de visuels abstraits, une méditation sur les horreurs causées par les IAs.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=mwyBMxad-vU&quot;&gt;Approaches to meditation&lt;&#x2F;a&gt;, de la chaîne &lt;em&gt;HealthyGamer&lt;&#x2F;em&gt; (contrairement à ce que le nom cringe laisse penser, c’est un psychiatre qui s’exprime dans cette chaîne), m’a fait découvrir des types de méditation qui ne relèvent pas de la « relaxation » : la méditation &lt;em&gt;Tummo&lt;&#x2F;em&gt;, pour se réchauffer le corps et s’énergiser — ou encore la méditation &lt;em&gt;Shoonya&lt;&#x2F;em&gt;, qui favoriserait l’expérience de mise à distance de son corps (comme quand on prend de la drogue ??). Fascinant.&lt;&#x2F;li&gt;
&lt;li&gt;🎶 J’ai eu l’occasion d’aller voir un concert de &lt;em&gt;Max Cooper&lt;&#x2F;em&gt; récemment, artiste de musique électronique très onirique. La particularité du concert était de proposer un show visuel hyper intense, diffusé sur deux écrans (un devant, et un derrière l’artiste), avec la projection de clips parfaitement synchronisés à la musique. Ces clips montraient un univers hyper riche, intense, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=nBuJUPWRLwE&quot;&gt;haut en couleurs&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=tNYfqklRehM&quot;&gt;très abstrait&lt;&#x2F;a&gt; souvent, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=4aNrOSp7KLg&quot;&gt;parfois angoissant&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=GcmHXo4isWQ&quot;&gt;parfois purement esthétique&lt;&#x2F;a&gt;. Après deux (2!) heures de projections hautement dopaminergiques, j’étais complètement vidé mais pleinement satisfait, après ce concert 😊 Direct dans le top 3 de mes concerts &lt;em&gt;de tous les temps&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drewdevault.com&#x2F;2025&#x2F;03&#x2F;17&#x2F;2025-03-17-Stop-externalizing-your-costs-on-me.html&quot;&gt;Please stop externalizing your costs directly into my face&lt;&#x2F;a&gt; : où les entreprises d’intelligence artificielles se mettent à être tellement agressives dans leurs méthodes de récupération de données (&lt;em&gt;scraping&lt;&#x2F;em&gt;) qu’elles mettent à mal des projets communautaires. Quel enfer 😔 Encore une raison de plus de ne pas utiliser des IAs, point final.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sethmlarson.dev&#x2F;i-fear-for-the-unauthenticated-web&quot;&gt;I fear for the unauthenticated web&lt;&#x2F;a&gt; : en rapport avec l’article précédent, l’auteur·ice exprime sa peur que tout le Web accessible sans authentification se fasse matraquer par des IAs qui cherchent à tout prix à récupérer les moindres données pour s’entraîner. Une peur pas injustifiée, à mon sens : vu que les IAs atteignent un plafond en termes de capacités, et à moins d’une évolution algorithmique &lt;em&gt;majeure&lt;&#x2F;em&gt;, la seule possibilité de leur amélioration semble relever d’une acquisition encore plus massive de données, &lt;em&gt;quoi qu’il en coûte&lt;&#x2F;em&gt;™. Quel enfer, x2 😔&lt;&#x2F;li&gt;
&lt;li&gt;L’auteur de Silverbullet, une app open-source de prise de notes très orientée &lt;em&gt;hacker mindset&lt;&#x2F;em&gt; (vous écrivez des &lt;em&gt;scripts&lt;&#x2F;em&gt; pour mettre en place les fonctionnalités dont vous avez besoin) parle d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;community.silverbullet.md&#x2F;t&#x2F;real-talk-silverbullet-2-0&#x2F;&quot;&gt;une réécriture vers une version 2.0&lt;&#x2F;a&gt;, qui lui permet de &lt;em&gt;supprimer&lt;&#x2F;em&gt; beaucoup de fonctionnalités. Une mentalité assez rare et admirable pour être applaudie, au vu de l’envie de &lt;em&gt;toujours plus&lt;&#x2F;em&gt;, notamment dans le libre.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Internet reste encore surprenant dans sa beauté : quelqu’un partage une vidéo courte d’une porte d’immeuble qui grince énormément, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=JPKjo3vGBTk&quot;&gt;quelqu’un en fait un remix drum’n’bass super deep&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #37</title>
        <published>2025-03-19T00:00:00+00:00</published>
        <updated>2025-03-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w11/"/>
        <id>https://bouvier.cc/notes/2025-w11/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w11/">&lt;p&gt;La semaine des évidences bonnes à rappeler : la tech continue d’être politique, les hommes n’ont pas d’amis, diversifier ses médias sociaux ça demande des efforts, le développement personnel peut être aliénant, néolibéral et individualisant, et les jeux vidéos c’est le bien.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Hey, ça fait longtemps ! Dont acte : la mise à jour d’aujourd’hui est &lt;em&gt;très&lt;&#x2F;em&gt; longue, et m’a pris beaucoup de temps à écrire. Est-ce que vous trouvez de l’intérêt à ces notes ? Est-ce qu’il y a des parties qui vous intéressent beaucoup plus que d’autre, et si oui, lesquelles ? N’hésitez-pas à me l’indiquer en réponse au &lt;em&gt;toot&lt;&#x2F;em&gt; associé, ou &lt;a href=&quot;mailto:benjamin+blog@bouvier.cc&quot;&gt;par email&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Je reviens d’un petit tunnel où j’ai passé beaucoup de mon temps libre à préparer une présentation pour la conférence &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rustinparis.com&#x2F;&quot;&gt;Rust in Paris&lt;&#x2F;a&gt;. Beaucoup d’heures à lire des billets, de la documentation, écouter des podcasts également, pour apprendre plein de choses sur la compilation des projets Rust et faire des petites expériences. Malgré un petit revirement de dernière minute (moi qui décide la veille que mes &lt;em&gt;slides&lt;&#x2F;em&gt; ne sont pas bons, et décide de les reprendre de zéro vers minuit), je suis &lt;em&gt;plutôt&lt;&#x2F;em&gt; satisfait ; outre un dépassement honteux du temps de présentation (50% de plus que ce qui m’était alloué, dans un esprit de soldes — 2 quarts d’heures achetés, le 3ème offert), j’ai eu des retours positifs de la part de plein de gens — et les orgas étaient assez généreux pour ne pas m’en vouloir. Je posterai un lien vers la vidéo sur les médias sociaux, quand elle sortira.&lt;&#x2F;p&gt;
&lt;p&gt;Je vais (peut-être ?) pouvoir reprendre une activité normale, à base de notes hebdomadaires, et j’aimerais reprendre l’écriture de mon article sur Spotify, quitte à découper en plusieurs articles pour me motiver. Affaire à suivre.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 Vu &lt;em&gt;Bref&lt;&#x2F;em&gt;, saison 2 (sur Disney+), la série qui n’est plus brève, vu que les épisodes durent désormais 40 minutes environ. Alors certes une très bonne ouverture à la déconstruction masculine, mais je trouve que ça reste des problèmes « de mec », pas abordés avec tant de profondeur que ça. Une série par les mecs, pour les mecs 🙃&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Beaucoup joué à &lt;em&gt;Balatro&lt;&#x2F;em&gt; ces derniers temps, un jeu de poker très addictif où l’on peut placer des &lt;em&gt;jokers&lt;&#x2F;em&gt; qui permettent de changer les règles. D’aucuns le décrivent comme un jeu à machine de Rupe Goldberg (du style &lt;em&gt;Les incroyables machines du professeur Tim&lt;&#x2F;em&gt;), et je vois bien pourquoi. En tous cas, gros kiff sur ce jeu à cycle de dopamine très très court, parties rapides à jouer, courbe d’apprentissage très basse. Très bien&#x2F;10.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Commencé aussi &lt;em&gt;Nobody saves the world&lt;&#x2F;em&gt;, un jeu de plateforme dans lequel on incarne Nobody, un·e personnage sans pouvoirs, mais qui acquiert rapidement une baguette magique qui lui permet de se transformer en d’autres personnages plus ou moins farfelus (j’ai débloqué : rat, garde, limace, rôdeuse, et jument pour le moment). Le jeu se transforme donc lui-même en un RPG avec plusieurs personnages, et on peut (et en fait, doit) passer son temps à intervertir d’un personnage à l’autre. Très cool comme concept, à voir si ce n’est pas lassant sur la suite. A priori pas trop mon style de jeu, vu que je ne suis pas très &lt;em&gt;platformer 2D&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Hey mais en fait c’est les soldes &lt;em&gt;Steam&lt;&#x2F;em&gt;. J’ai aussi commencé le célèbre precision platformer &lt;em&gt;Celeste&lt;&#x2F;em&gt;, comme j’apprécie de pouvoir jouer « en mode console » sur mon SteamDeck (je n’avais pas trop apprécié sur PC).&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Aussi commencé &lt;em&gt;Cult of the Lamb&lt;&#x2F;em&gt;, à mi-chemin entre un &lt;em&gt;hack’n’slash&lt;&#x2F;em&gt; et un &lt;em&gt;simulateur de construction&lt;&#x2F;em&gt;, où l’on incarne un petit mouton qui se voit offrir un pouvoir diabolique afin de monter une secte. Très décalé, marrant, cynique : c’est fun !&lt;&#x2F;li&gt;
&lt;li&gt;📚 Commencé &lt;em&gt;Slow Productivity&lt;&#x2F;em&gt; de Cal Newport, dans la lignée de &lt;em&gt;Deep Work&lt;&#x2F;em&gt;. L’auteur invite à repenser la productivité non pas d’un point de vue capitaliste, mais plutôt du point de vue de l’efficacité et pour éviter l’aliénation liée à la pseudo-productivité (passer tout son temps à faire des choses visibles pour ses patron·nes, mais pas vraiment utiles ou accomplissantes en soi), dans les métiers dits « du savoir ». Pas pour tout le monde, clairement ; mais j’adore l’approche originale et les outils inédits pour s’accomplir dans le travail. Et vu que c’est quasi la moitié de mon temps éveillé…&lt;&#x2F;li&gt;
&lt;li&gt;📚 Commencé également la BD &lt;em&gt;La pythie vous parle&lt;&#x2F;em&gt;, de Liv Stromquist. Encore un excellent traité de sociologie &#x2F; psychologie &#x2F; féminisme, cette fois centré sur beaucoup de notions de développement personnel, qui est analysé et déconstruit avec une finesse toujours très juste. Moi qui suis &lt;em&gt;très&lt;&#x2F;em&gt; consommateur de ce genre d’ouvrages, c’est une lecture qui remet les pendules à l’heure. C’est dur de le conseiller, au vu de la méta-critique des « conseils » présente dans l’ouvrage, mais franchement, si une déconstruction du développement personnel vous intéresse, foncez !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;articles-et-billets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#articles-et-billets&quot; aria-label=&quot;Anchor link for: articles-et-billets&quot;&gt;🔗&lt;&#x2F;a&gt;Articles et billets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@jencoates&#x2F;i-am-a-transwoman-i-am-in-the-closet-i-am-not-coming-out-4c2dd1907e42&quot;&gt;I am a transwoman I am in the closet I am not coming out&lt;&#x2F;a&gt; : une femme trans qui décide de ne pas se dévoiler, et se prend des grosses chasses, dans des milieux soit-disant bienveillants et féministes. Même dans des milieux militants, on retrouve des positions autoritaires, de sachant·es, de légitimes ou non — pas une nouveauté, mais dur à lire dans le contexte de cette histoire si particulière.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;repeindre.info&#x2F;2019&#x2F;05&#x2F;23&#x2F;les-hommes-nont-pas-damis-et-les-femmes-en-portent-le-fardeau&#x2F;&quot;&gt;Les hommes n’ont pas d’amis et les femmes en portent le fardeau – Tiens, ils ont repeint.&lt;&#x2F;a&gt; : sur l’impossibilité des hommes à faire lien entre eux, et l’injonction qui en découle, portée sur les femmes d’entretenir la santé mentale des hommes. Aïe aïe aïe, ça pique. Je commence à me convaincre de la pertinence de groupes de parole pour hommes, moi qui étais naturellement très méfiant par rapport à ça au préalable, y voyant le risque d’une porte d’entrée vers la sphère mascu-viriliste. Alors je cherche et découvre des « cercles d’hommes » dans mon coin, qui parlent d’« énergie sacrée » et de « l’essence » d’être un homme. Aïe aïe aïe x2 ; outre le mysticisme qui ne m’attire pas personnellement, ça pue le discours essentialiste à plein nez. L’impression que si je veux un groupe de paroles, il va falloir le mettre en place moi-même. Mais peut-être faut-il leur laisser le bénéfice du doute, et tenter d’y aller.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;miriam.codes&#x2F;2025&#x2F;02&#x2F;12&#x2F;tech-ai-wtf&#x2F;&quot;&gt;Tech continues to be political&lt;&#x2F;a&gt; : excellent article, très bien argumenté, sur les dérives vers une extrême droite libertarienne du monde de la tech, entre une intelligence artificielle dont le dessein est de supprimer des pans entiers d’emplois (avec toujours des propositions de pansements sociétaux et de solutions politiques, mais rien jamais mis en place), et une clique de tech-bros américains complètement décomplexée depuis l’élection de l’horreur orange.&lt;&#x2F;li&gt;
&lt;li&gt;En parlant de la menace orange, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;2025&#x2F;02&#x2F;02&#x2F;opinion&#x2F;ezra-klein-podcast-trump-column-read.html&quot;&gt;Don’t Believe Him&lt;&#x2F;a&gt; dévoile une stratégie classique de l’apprenti dictateur : noyer les médias sous trop d’informations et trop d’annonces de politiques misogynes&#x2F;racistes&#x2F;transphobes qu’il ne peut pas mettre en place, sans se prendre &lt;em&gt;théoriquement&lt;&#x2F;em&gt; les contre-pouvoirs. Mais comme il est hyper important de gagner &lt;em&gt;l’aval&lt;&#x2F;em&gt; du peuple américain, et de lui &lt;em&gt;faire croire&lt;&#x2F;em&gt; qu’il a ce pouvoir, il continue, d’où l’importance de &lt;em&gt;ne pas le croire&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Encore des odes à la blogosphère, à l’écriture personnelle : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rknight.me&#x2F;blog&#x2F;the-web-is-fantastic&#x2F;&quot;&gt;The Web is Fantastic&lt;&#x2F;a&gt;, extrêmement inspirant — vous risquez de vouloir commencer un blog après avoir lu ça, si ce n’est pas encore le cas. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;qosgof.fr&#x2F;golb&#x2F;bloguer-sans-pression-pour-bloguer-davantage&#x2F;&quot;&gt;Bloguer sans pression pour bloguer davantage ?&lt;&#x2F;a&gt; aussi une bonne idée pour « s’y mettre » plus régulièrement. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nazhamid.com&#x2F;journal&#x2F;less-precious&#x2F;&quot;&gt;Less Precious&lt;&#x2F;a&gt; met en avant notre impossibilité de contrôle des plateformes sociales où nous postons, et notre croyance qu’elles sont inévitables ; et bien entendu propose le site personnel comme alternative plus précieuse, sous notre contrôle.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.couchet.org&#x2F;blog&#x2F;index.php?post&#x2F;2025&#x2F;01&#x2F;25&#x2F;Shabbeek&quot;&gt;Shabbeek - Frédéric Couchet&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bjhess.com&#x2F;posts&#x2F;socials-free-february&quot;&gt;Socials-free February - I am BARRY HESS&lt;&#x2F;a&gt; : des gens qui veulent arrêter les réseaux sociaux, soit pour faire une diète, soit pour éviter le trop-plein de malheur projeté en pleine face. Je me rends compte que j’ai paradoxalement tendance à passer trop de temps sur les médias sociaux, un peu par réflexe d’ennui — &lt;em&gt;et en même temps&lt;&#x2F;em&gt;™, en souffrir au vu de l’actualité qui est très (trop) présente et m’assomme complètement. Il est aussi temps de faire une pause pour moi.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Le compilateur TypeScript a été réécrit pour utiliser le langage de programmation Go, ce qui le rend 10x plus rapide. Quelques analyses de la part de Steve Klabnik, qui discute du choix du langage ; et une réponse assez complémentaire à son article : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;steveklabnik.com&#x2F;writing&#x2F;choosing-languages&#x2F;&quot;&gt;Choosing Languages&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.wedrop.it&#x2F;blog&#x2F;reply-deliberate-wrong-tool&#x2F;&quot;&gt;Deliberately choosing the wrong tool&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.laquadrature.net&#x2F;narcotraficotage&#x2F;&quot;&gt;Contre la loi surveillance et narcotraficotage&lt;&#x2F;a&gt;, la Quadrature du Net effectue encore un travail de vulgarisation et d’éclairage important. Et qui semble avoir payé, vu que depuis la publication de l’article, beaucoup des amendements problématiques ont été supprimés (j’avoue ne pas avoir suivi en détail où ça en est, étant un peu dépité de toute cette actualité fascisante).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.alexcamilleri.com&#x2F;introducing-mastodon-proportional&#x2F;&quot;&gt;I wanted to analyze the gender distribution of my social profile, so I wrote some code. Introducing Mastodon Proportional.&lt;&#x2F;a&gt;. Un ancien collègue a écrit un outil qui se connecte à votre compte Mastodon, va chercher dans les profils des informations sur le genre des personnes que vous suivez et qui vous suivent. Fascinant pour découvrir ses propres biais, autant vous dire que c’est pas la folie en termes d’inclusivité, de mon côté. Rien de nouveau sous le soleil, la diversité ça se travaille, ça se provoque ; allez, au boulot.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tweek.so&#x2F;&quot;&gt;Tweek&lt;&#x2F;a&gt; est une petite app de &lt;em&gt;todo-list&lt;&#x2F;em&gt; et gestion d’agenda, très minimaliste, utilisable gratuitement en ligne.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mojeek.com&#x2F;&quot;&gt;Mojeek&lt;&#x2F;a&gt;, un moteur de recherche qui se dit respectueux de la vie privée. Il classe notre projet open-source de gestion de finances personelles Kresus avant les « concurrents » homonymes ; rien que pour ça, moi je dis, 10&#x2F;10.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;logiciels-libres&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#logiciels-libres&quot; aria-label=&quot;Anchor link for: logiciels-libres&quot;&gt;🔗&lt;&#x2F;a&gt;Logiciels libres&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Comme Mozilla &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;en&#x2F;products&#x2F;firefox&#x2F;firefox-news&#x2F;firefox-terms-of-use&#x2F;&quot;&gt;fait&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@sarahjamielewis&#x2F;114072293410465140&quot;&gt;des siennes&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adhd.irenes.space&#x2F;@ireneista&#x2F;statuses&#x2F;01JN30FTK045MWJH4H56TJE572&quot;&gt;de nouveau&lt;&#x2F;a&gt; (et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;en&#x2F;products&#x2F;firefox&#x2F;update-on-terms-of-use&#x2F;&quot;&gt;essaie de rattraper le coup&lt;&#x2F;a&gt;, et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@sarahjamielewis&#x2F;114084248065159887&quot;&gt;se plante de nouveau&lt;&#x2F;a&gt;), je regarde doucement des navigateurs alternatifs, basés sur Gecko, le même moteur de rendu&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; : il existe donc &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;librewolf.net&#x2F;&quot;&gt;LibreWolf&lt;&#x2F;a&gt;, ou le resplendissant et minimaliste &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zen-browser.app&#x2F;&quot;&gt;Zen&lt;&#x2F;a&gt;. Au final, je resterai probablement sur Firefox, histoire de recevoir les dernières mises à jour de sécurité le plus vite possible, comme je porte une confiance très élevée en les équipes &lt;em&gt;techniques&lt;&#x2F;em&gt; de Firefox.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;b3log.org&#x2F;siyuan&#x2F;en&#x2F;&quot;&gt;SiYuan&lt;&#x2F;a&gt;, un logiciel open-source de gestion de notes qu’il a l’air bien — pas de synchronisation dans la version gratuite auto-hébergeable.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mimiri.io&#x2F;&quot;&gt;Mimiri&lt;&#x2F;a&gt;, autre logiciel de prise de notes open source, avec synchronisation cloud, chiffrement bout à bout, version Web. Ne semble pas très beau, et très minimaliste, mais doit bien faire le taf.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai joué un peu avec &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tabby.tabbyml.com&#x2F;&quot;&gt;TabbyML&lt;&#x2F;a&gt;, un système permettant de répliquer une IA pour l’écriture de code localement, après avoir utilisé Copilot (oui Micro$oft, c’est mal, m’voyez). Très bonne intégration avec Vim, mais il faut des modèles très solides pour arriver à des résultats intéressants. Et ces modèles ne peuvent pas tourner sur ma machine, au delà de 7 milliards de paramètres — tant pis ! Sur les petits modèles, la plupart de mes complétions suggérées était hors sujet, ou hallucinait des fonctions inexistantes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;même si c’est un peu équivalent à arrêter d’utiliser les réseaux d’eau publique pour boire l’eau mise en bouteille par son voisin complotiste. En théorie tout est &lt;em&gt;open-source&lt;&#x2F;em&gt;, en pratique c’est facile de glisser un bug de sécurité qui mènerait à la compromission de la machine, volontairement ou non. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>I&#x27;ve switched blog engines and now every post has 100 million valid URLs</title>
        <published>2025-03-09T00:00:00+00:00</published>
        <updated>2025-03-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/blog-urls/"/>
        <id>https://bouvier.cc/tech/blog-urls/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/blog-urls/">&lt;p&gt;Another very self-centered update post about me merging my personal and work blogs, and some fun facts about the changes in URLs this caused.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;first-a-nice-trick-tracking-atom-feed-subscribers-server-side-with-nginx&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#first-a-nice-trick-tracking-atom-feed-subscribers-server-side-with-nginx&quot; aria-label=&quot;Anchor link for: first-a-nice-trick-tracking-atom-feed-subscribers-server-side-with-nginx&quot;&gt;🔗&lt;&#x2F;a&gt;First, a nice trick: tracking Atom feed subscribers server-side, with Nginx&lt;&#x2F;h2&gt;
&lt;p&gt;Did you know that using the Nginx reverse proxy, it’s quite easy to have a rough idea of the number of subscribers to an RSS (or an Atom) feed?&lt;&#x2F;p&gt;
&lt;p&gt;Find the logs, usually in &lt;code&gt;&#x2F;var&#x2F;logs&#x2F;nginx&lt;&#x2F;code&gt;, then in the access log of the given website, look for the feed URL. For me it’s &lt;code&gt;atom.xml&lt;&#x2F;code&gt;, so I can run this line to get the number of regular subscribers:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; awk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;&#x2F;atom&#x2F; { print $1 }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; bouvier.cc.log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; sort&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; -u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; wc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; -l&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This can be decomposed as such:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo&lt;&#x2F;code&gt; because reading files in this directory requires root access on my server.&lt;&#x2F;li&gt;
&lt;li&gt;the &lt;code&gt;awk&lt;&#x2F;code&gt; bit of the command will find all the lines that include “atom”, in the &lt;code&gt;bouvier.cc.log&lt;&#x2F;code&gt; file, and select the first word, aka set of characters split by a space (&lt;code&gt;print $1&lt;&#x2F;code&gt;) — in this case, the IP address of the visitor.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;sort -u&lt;&#x2F;code&gt; will sort and group the IP addresses (i.e. removes duplicates).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;wc -l&lt;&#x2F;code&gt; will count the number of lines, that is, the number of unique IP addresses.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This makes the assumption that one IP address = one visitor, but this can be wrong in multiple ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;any local network using NAT will appear as a single IP address, while there can be many users in that network: for instance, on a university network, etc.&lt;&#x2F;li&gt;
&lt;li&gt;feed aggregator Web services may access the blog from a unique IP, and re-dispatch a blog’s feed to many users.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Ok cool, so the good news is that it’s an underestimate, at worst 😎&lt;&#x2F;p&gt;
&lt;h2 id=&quot;merging-notes-bouvier-cc-with-this-blog-because-ain-t-nobody-got-time-for-that&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#merging-notes-bouvier-cc-with-this-blog-because-ain-t-nobody-got-time-for-that&quot; aria-label=&quot;Anchor link for: merging-notes-bouvier-cc-with-this-blog-because-ain-t-nobody-got-time-for-that&quot;&gt;🔗&lt;&#x2F;a&gt;Merging notes.bouvier.cc with this blog because ain’t nobody got time for that&lt;&#x2F;h2&gt;
&lt;p&gt;So, to the 35 regular readers of &lt;code&gt;notes.bouvier.cc&lt;&#x2F;code&gt; — my former French rather personal blog — and to the 48 regular readers of this blog &lt;code&gt;bouvier.cc&lt;&#x2F;code&gt; &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, I’ve got great news: I’m merging my two blogs back into one, because I don’t see the point anymore of having two blogs, and as such the overhead of maintaining two workflows&#x2F;blogs&#x2F;themes isn’t worth it.&lt;&#x2F;p&gt;
&lt;p&gt;Posting anything personal on the Internet makes it public forever and more, thanks to search engines, the &lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;blog-urls&#x2F;web.archive.org&quot;&gt;Wayback Machine&lt;&#x2F;a&gt;, and &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Large_language_model&quot;&gt;LLM&lt;&#x2F;a&gt;s trained on that content. As such, there’s not really a point in half-hiding “personal notes”, as long as they’re tied to my name, more or less closely. Better anonymity would only happen with using the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.torproject.org&#x2F;download&#x2F;&quot;&gt;Tor browser&lt;&#x2F;a&gt;, a pseudonym, and an hosted blog platform — things I don’t consider are worth it, at this point, nor that I am interested in doing.&lt;&#x2F;p&gt;
&lt;p&gt;To be honest, this may be slightly disruptive only to people who followed this blog via the Atom feed, as they’ll get all the notes in French, now. I’ve made use of &lt;em&gt;tags&lt;&#x2F;em&gt; and &lt;em&gt;sections&lt;&#x2F;em&gt; to try to keep the content tidy, so there are actually new feeds:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tags&#x2F;notes&#x2F;atom.xml&quot;&gt;This Atom feed, for notes&lt;&#x2F;a&gt;: this is equivalent to the Atom feed for &lt;code&gt;notes.bouvier.cc&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;atom.xml&quot;&gt;This Atom feed, for tech posts&lt;&#x2F;a&gt;: this is equivalent to the former Atom feed for &lt;code&gt;bouvier.cc&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;atom.xml&quot;&gt;Now this website’s feed&lt;&#x2F;a&gt; (that you can get by clicking “atom feed”) includes both kinds of posts.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So how did I get there?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;switching-domain-name-because-now-i-m-a-grownup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#switching-domain-name-because-now-i-m-a-grownup&quot; aria-label=&quot;Anchor link for: switching-domain-name-because-now-i-m-a-grownup&quot;&gt;🔗&lt;&#x2F;a&gt;Switching domain name because now I’m a grownup&lt;&#x2F;h2&gt;
&lt;p&gt;First of all, the 3 people &lt;em&gt;really&lt;&#x2F;em&gt; following this blog for a long time may have noticed that I’ve changed the domain name &lt;code&gt;benj.me&lt;&#x2F;code&gt; to move to this new one, &lt;code&gt;bouvier.cc&lt;&#x2F;code&gt;. The main reason was that &lt;code&gt;benj.me&lt;&#x2F;code&gt; was from a previous era where I found it cool to have a &lt;code&gt;.me&lt;&#x2F;code&gt; website, as it was supposed to be the pinacle of personal sites.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve also hosted email addresses on that domain. But over the years, I’ve started to feel a tiny bit silly&#x2F;unhinged when I read out &lt;code&gt;benj.me&lt;&#x2F;code&gt; to my banker or in some other formal settings — &lt;code&gt;benj&lt;&#x2F;code&gt; sounds rather familiar to me, as a shorthand for Benjamin, and there are some boundaries that are sane to set up between me and my bank account manager.&lt;&#x2F;p&gt;
&lt;p&gt;But more importantly, my user experience of spelling &lt;code&gt;address@benj.me&lt;&#x2F;code&gt; out loud was terrible, especially on the phone:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;benj.me&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;yes, like the 4 first letters of Benjamin, B, E, N, J.&lt;&#x2F;li&gt;
&lt;li&gt;no, not G, but J&lt;&#x2F;li&gt;
&lt;li&gt;no I, by the way&lt;&#x2F;li&gt;
&lt;li&gt;no, not M, but N, like Nadine&lt;&#x2F;li&gt;
&lt;li&gt;dot me, not &lt;code&gt;mi&lt;&#x2F;code&gt; &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And later I would not receive the email, because they sent it to &lt;code&gt;benji.me&lt;&#x2F;code&gt;, or &lt;code&gt;benjamin.me&lt;&#x2F;code&gt;, or &lt;code&gt;benj.ne&lt;&#x2F;code&gt;. Uhhh.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve had enough of that, and wanted to have a new domain name that sounded serious and would say “Now you shall call me Sir, or else! I have a tie and I won’t hesitate using it (&lt;em&gt;conditions apply&lt;&#x2F;em&gt;)”, and at the same time be unambiguous to spell out loud, both in French and in English. &lt;code&gt;bouvier.cc&lt;&#x2F;code&gt; was the perfect match for these two conditions: includes my name (which is quite common in France, so still too not targeting me &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;), and &lt;code&gt;dot cc&lt;&#x2F;code&gt; may be a bit surprising, but at least people don’t ask me to repeat it multiple times. Mission accomplished 💪&lt;&#x2F;p&gt;
&lt;h2 id=&quot;migrating-from-pelican-snake-to-zola-crab-because-now-i-m-a-zealot&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#migrating-from-pelican-snake-to-zola-crab-because-now-i-m-a-zealot&quot; aria-label=&quot;Anchor link for: migrating-from-pelican-snake-to-zola-crab-because-now-i-m-a-zealot&quot;&gt;🔗&lt;&#x2F;a&gt;Migrating from Pelican 🐍 to Zola 🦀 because now I’m a zealot&lt;&#x2F;h2&gt;
&lt;p&gt;On &lt;code&gt;benj.me&lt;&#x2F;code&gt;, where my previous blog was hosted, I was using the blog engine &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getpelican.com&#x2F;&quot;&gt;Pelican&lt;&#x2F;a&gt;, originally authored by a friend and former colleague &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.notmyidea.org&#x2F;&quot;&gt;Alexis Metaireau&lt;&#x2F;a&gt;. Not only it was doing its job perfectly, but its name was also based on the anagram of &lt;code&gt;calepin&lt;&#x2F;code&gt;, French for a small notebook, and I find a good pun is always the cherry on top of software that does a great job at what it’s supposed to be doing. Over the years, I’ve started to become an irritating Rust 🦀 Evangelism 🙏 Task 🚀 Force 😎 member though, so I’ve moved over to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;, which brought a few other benefits. More about this in a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;publish-zola-with-gitlab-ci&#x2F;&quot;&gt;previous blog post&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There showed the first backwards compatibility issue. I had my Pelican-deployed blog at &lt;code&gt;blog.benj.me&lt;&#x2F;code&gt;, and I really wanted the URLs to still be valid, because URLs are one of the most important things to preserve on the Internet: they tend to be visited quite a long time after they’ve been created, people create &lt;em&gt;links&lt;&#x2F;em&gt; to them so they’d better be valid to not break all existing links — while &lt;em&gt;some&lt;&#x2F;em&gt; people may spent a bit of time if they’re really interested in a post, &lt;em&gt;most&lt;&#x2F;em&gt; people would likely just close the tab if they ran into a 404 error “page not found”. So, easy, right? I just have to use an &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.nginx.org&#x2F;blog&#x2F;creating-nginx-rewrite-rules&quot;&gt;Nginx redirect rule&lt;&#x2F;a&gt; to redirect all my posts over to the new domain, right? 👧😁&lt;&#x2F;p&gt;
&lt;p&gt;😏😏😏&lt;&#x2F;p&gt;
&lt;p&gt;RIGHT? 👧🥴&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;nginx&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;server&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;	# (other non interesting details removed from this excerpt)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;	server_name&lt;&#x2F;span&gt;&lt;span&gt; blog.benj.me&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;	return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 301&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;scheme&lt;&#x2F;span&gt;&lt;span&gt;:&#x2F;&#x2F;bouvier.cc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;request_uri&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, the thing is that my Pelican included the post’s date in the URL. For instance, a post on my previous blog was hosted at &lt;code&gt;https:&#x2F;&#x2F;blog.benj.me&#x2F;2021&#x2F;02&#x2F;17&#x2F;cranelift-codegen-primer&lt;&#x2F;code&gt;. Zola does &lt;em&gt;not&lt;&#x2F;em&gt; include this URL — or more precisely, maybe it can do it, but I decided I wanted to drop the dates from URLs, to make my posts look more mysterious, and my URLs look shorter and cooler. So the same post URL, generated with Zola, would be &lt;code&gt;https:&#x2F;&#x2F;bouvier.cc&#x2F;cranelift-codegen-primer&lt;&#x2F;code&gt;, after switching the domain name &lt;em&gt;and&lt;&#x2F;em&gt; removing the date information. How do I make sure that all my links remain backwards-compatible, then?&lt;&#x2F;p&gt;
&lt;p&gt;One solution could have been to manually create directories in my Zola source, that reflect the years and months and days structures, for each blog post I had written in the previous blog. Like, for the above example, create a directory called &lt;code&gt;2021&lt;&#x2F;code&gt;, in which I create another directory &lt;code&gt;02&lt;&#x2F;code&gt;, in which I create another directory &lt;code&gt;17&lt;&#x2F;code&gt;, and then I’d put the &lt;code&gt;cranelift-codegen-primer&lt;&#x2F;code&gt; markdown source in there. But that’s a lot of work, for each blog post, and as I said I don’t really care about having the dates in the URLs (they’re still useful to have in the content, to make sure something isn’t wildly outdated, though).&lt;&#x2F;p&gt;
&lt;p&gt;So I looked into a more general and contrived solution, using a more imaginative rewrite rule, that would match any combination of base domain, then 4 numbers (the year), then 2 numbers (the month), the 2 numbers (the day), and redirect all these URLs to the Zola one that doesn’t have the numbers. That is, remove the &lt;code&gt;&#x2F;2021&#x2F;02&#x2F;17&lt;&#x2F;code&gt; part of the URL in the above example. With Nginx, it would look like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;nginx&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;server&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;	server_name&lt;&#x2F;span&gt;&lt;span&gt; bouvier.cc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;	location&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; &#x2F;rss &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;		# Maintain compatibility with Pelican&amp;#39;s feed URL.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;		try_files&lt;&#x2F;span&gt;&lt;span&gt; atom.xml &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;uri&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;uri&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;		default_type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; &amp;quot;application&#x2F;rss+xml&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;	location&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; &#x2F; &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;		# Maintain compatibility with Pelican URLs.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;		rewrite&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; &amp;quot;^&#x2F;[0-9]{4}&#x2F;[0-9]{2}&#x2F;[0-9]{2}&#x2F;(.*)$&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; last;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;		try_files&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;uri&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;uri&lt;&#x2F;span&gt;&lt;span&gt;&#x2F; &#x2F;index.html&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;	}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now for the fun thing part. Not only &lt;code&gt;https:&#x2F;&#x2F;blog.benj.me&#x2F;2021&#x2F;02&#x2F;17&#x2F;cranelift-codegen-primer&lt;&#x2F;code&gt; will be redirected to &lt;code&gt;https:&#x2F;&#x2F;bouvier.cc&#x2F;cranelift-codegen-primer&lt;&#x2F;code&gt;, but also will &lt;code&gt;https:&#x2F;&#x2F;blog.benj.me&#x2F;2025&#x2F;03&#x2F;09&#x2F;cranelift-codegen-primer&lt;&#x2F;code&gt;, or even &lt;code&gt;https:&#x2F;&#x2F;blog.benj.me&#x2F;1337&#x2F;42&#x2F;42&#x2F;cranelift-codegen-primer&lt;&#x2F;code&gt;. In fact, since digit can be a value from 0 to 9, and there are 8 such digits, that means we have 10**8 = 100,000,000 = 100 million valid URLs for each post.&lt;&#x2F;p&gt;
&lt;p&gt;Yes, you read that right. A one, then 8 zeroes behind it.&lt;&#x2F;p&gt;
&lt;p&gt;And since this rewrite rule doesn’t only apply to old posts, but to new ones as well, this is true of this post as well. Each post on this blog has one hundred million valid URLs, and one extra: the one that doesn’t have any date prefix.&lt;&#x2F;p&gt;
&lt;p&gt;You may not like it, but this is what peak URLing looks like. Growth mindset at its maximum. I got 99,999,999 problems, but keeping URLs alive ain’t one.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;appendix-maintaining-url-backwards-compatibility-for-notes-bouvier-cc&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#appendix-maintaining-url-backwards-compatibility-for-notes-bouvier-cc&quot; aria-label=&quot;Anchor link for: appendix-maintaining-url-backwards-compatibility-for-notes-bouvier-cc&quot;&gt;🔗&lt;&#x2F;a&gt;Appendix: maintaining URL backwards compatibility for &lt;code&gt;notes.bouvier.cc&lt;&#x2F;code&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Now, all the posts on &lt;code&gt;notes.bouvier.cc&#x2F;XYZ&lt;&#x2F;code&gt; now live in &lt;code&gt;bouvier.cc&#x2F;notes&#x2F;XYZ&lt;&#x2F;code&gt;. Compared to the above abomination, this was a rather simple Nginx rewrite rule, with an exception for the Atom feed:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;nginx&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;server&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;	server_name&lt;&#x2F;span&gt;&lt;span&gt; notes.bouvier.cc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;	# Redirect feed users (with a 301).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    rewrite&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B4F9F8;&quot;&gt; ^&#x2F;atom.xml$&lt;&#x2F;span&gt;&lt;span&gt; https:&#x2F;&#x2F;bouvier.cc&#x2F;tags&#x2F;notes&#x2F;atom.xml &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;permanent;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;	# Redirect non feed users.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 301&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;scheme&lt;&#x2F;span&gt;&lt;span&gt;:&#x2F;&#x2F;bouvier.cc&#x2F;notes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;request_uri&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;probably the 35 are part of the 48 🥲 &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;in French, &lt;code&gt;me&lt;&#x2F;code&gt; pronounced in English or &lt;code&gt;mi&lt;&#x2F;code&gt; may sound pretty close. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;in the city where I come from, there are at least 15 or 20 other Benjamin Bouvier, so I’m totally incognito there. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #36</title>
        <published>2025-02-25T00:00:00+00:00</published>
        <updated>2025-02-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w08/"/>
        <id>https://bouvier.cc/notes/2025-w08/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w08/">&lt;p&gt;L’intelligence artificielle a besoin de votre aide, ce site Web est en construction, et que faire quand on se sent comme de la merde.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Encore plusieurs semaines d’un coup. Je baisse un peu le rythme en ce moment, disposant de moins de choses à partager publiquement 😌 Je bosse sur un article pour parler de la situation de Spotify, et ce qui devait être « un petit article avec deux trois paragraphes » est en train de tourner à la pièce d’exposition journalistique. Affaire à suivre.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;element&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#element&quot; aria-label=&quot;Anchor link for: element&quot;&gt;🔗&lt;&#x2F;a&gt;Element&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;Mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;employeur actuel&lt;&#x2F;a&gt;, une société qui promeut le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;protocole Matrix&lt;&#x2F;a&gt; et propose des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;synapse&#x2F;&quot;&gt;serveurs&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-x-android&quot;&gt;clients&lt;&#x2F;a&gt; haute performance. Je travaille dans l’équipe &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt;, à l’heure où j’écris ces lignes.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Un peu refait de &lt;em&gt;profiling&lt;&#x2F;em&gt; et de &lt;em&gt;benchmarking&lt;&#x2F;em&gt; ces derniers temps, l’occasion d’améliorer la performance drastiquement de choses que l’on n’avait jamais regardées. Comme toujours, la première étape de l’optimisation c’est l’observation, afin de mettre en exergue les points problématiques, qui s’avèrent parfois très simples à optimiser.&lt;&#x2F;li&gt;
&lt;li&gt;L’occasion de mentionner les outils que j’ai utilisés pour ça : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;flamegraph-rs&#x2F;flamegraph&quot;&gt;flamegraph-rs&lt;&#x2F;a&gt;, spécifique à l’écosystème Rust ; et le &lt;em&gt;frontend&lt;&#x2F;em&gt; de l’outil Linux &lt;em&gt;perf&lt;&#x2F;em&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;KDAB&#x2F;hotspot&quot;&gt;Hotspot&lt;&#x2F;a&gt;, superbement rapide et efficace pour interagir avec le résultat d’un profil.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1701&quot;&gt;Première fusion&lt;&#x2F;a&gt; d’une contribution en plusieurs étapes sur les &lt;em&gt;vues clientes&lt;&#x2F;em&gt;, une fonctionnalité demandée depuis un moment et qui permet de regrouper plusieurs banques selon une vue, et naviguer dans les écrans de Kresus en fonction de ça. Beaucoup de code, mais ça s’annonce très bien pour la suite !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;cargo-machete&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cargo-machete&quot; aria-label=&quot;Anchor link for: cargo-machete&quot;&gt;🔗&lt;&#x2F;a&gt;cargo-machete&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; est un outil qui permet de détecter rapidement des dépendances inutilisées dans des projets Rust.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Sorti &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&#x2F;releases&#x2F;tag&#x2F;v0.8.0&quot;&gt;une nouvelle version 0.8.0&lt;&#x2F;a&gt; pour être compatible avec une option de la nouvelle édition 2024 de Rust.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cartes.app&#x2F;blog&#x2F;relocalisation-numerique&quot;&gt;Relocalisation numérique&lt;&#x2F;a&gt; : même si certains arguments me semblent mauvais (voire fallacieux), le message véhiculé me semble important à considérer pour nos décideurs pressés. Mais sortir de la béatitude &#x2F; soumission devant les GAFAMs, ça demande une remise en question d’intérêts financiers que nos chers politiques ont bien du mal à exécuter…&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;localghost.dev&#x2F;blog&#x2F;this-page-is-under-construction&#x2F;&quot;&gt;This page is under construction&lt;&#x2F;a&gt; : encore une ode aux sites personnels, une mise en perspective des réseaux sociaux et du Web moderne, avec un fort esprit nostalgeek (ohlala Alain Damasio tu serais fier de moi) et une invitation à reprendre soin de nos blogs (encore une fois !). On notera le sélecteur de thème CSS en haut à droite, et on cliquera sur chacun des thèmes disponibles pour apprécier le talent de l’autrice, et la beauté des différents thèmes. C’est extrêmement satisfaisant.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Découvert le jeu &lt;em&gt;Balatro&lt;&#x2F;em&gt;, qui a pourtant eu un gros succès, et dont beaucoup d’amis me parlaient. Gros shot de dopamine à chaque partie, parfait pour mon attention courte.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Et aussi &lt;em&gt;Hadès 2&lt;&#x2F;em&gt;, que j’ai acheté en version &lt;em&gt;early&lt;&#x2F;em&gt; (une sorte de bêta, où le contenu arrive au fur et à mesure, en attendant la version finale), a sorti une &lt;em&gt;grosse&lt;&#x2F;em&gt; mise à jour avec plein de nouveaux contenus, des nouveaux boss, etc. 🤩&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;savethe.ai&#x2F;&quot;&gt;AI Needs Your Help - Save the AI&lt;&#x2F;a&gt;, un site (parodique) qui explique comment aider à la prolifération des intelligences artificielles, en limitant son impact sur les ressources dont celles-ci ont besoin, en tant qu’humain. Beaucoup de nombres très intéressants sur les quantités d’eau ou d’énergie pour faire tourner les IAs ; c’est effarant, d’autant plus quand on sait que c’est pour une utilité si limitée 😱&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pocketbase.io&#x2F;&quot;&gt;PocketBase - Open Source backend in 1 file&lt;&#x2F;a&gt;, un backend open-source de serveur Web, en un seul fichier, et qui a l’air plutôt simple à utiliser. À tester.&lt;&#x2F;li&gt;
&lt;li&gt;Tombé sur des projets open-source de gestion de finances personnelles, « concurrents » à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;maybefinance.com&#x2F;&quot;&gt;MaybeFinance&lt;&#x2F;a&gt;, qui a l’air assez bien foutu et complet ; mais aussi un gestionnaire d’abonnements (donc une sous-partie très spécifique de Kresus, que l’on appelle les &lt;em&gt;transactions récurrentes&lt;&#x2F;em&gt;) nommé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wallosapp.com&#x2F;&quot;&gt;Wallos&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ekzhang&#x2F;rustpad&quot;&gt;Rustpad&lt;&#x2F;a&gt; : un Etherpad réécrit en Rust, ça donne envie.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;saturn.kim&#x2F;&quot;&gt;saturn&lt;&#x2F;a&gt;, un client natif alternatif Deezer. Pas eu l’occasion de tester encore, l’installateur Mac me cause des soucis (apparemment le package n’est pas signé), l’installation Linux aussi sur ma machine de travail qui &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;SaturnMusic&#x2F;PC&#x2F;issues&#x2F;42&quot;&gt;interdit l’exécution de code dans &#x2F;tmp&lt;&#x2F;a&gt;, mais ça avait l’air prometteur 🥲&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nathom&#x2F;streamrip&quot;&gt;streamrip&lt;&#x2F;a&gt;, un script pour télécharger des musiques sur Qobuz, Tidal, SoundCloud, et Deezer. Ne faites surtout pas tourner, les ayant-droits n’aiment pas ça. (En vrai, le droit à la copie privée est payé&#x2F;inclus dans les abonnements de streaming, donc faites tourner.)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youfeellikeshit.com&#x2F;&quot;&gt;you feel like shit&lt;&#x2F;a&gt;, un petit questionnaire dont vous êtes le héros ou l’héroïne, qui vous apprend les bases de comment prendre soin de soi (en anglais).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #35</title>
        <published>2025-02-11T00:00:00+00:00</published>
        <updated>2025-02-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w07/"/>
        <id>https://bouvier.cc/notes/2025-w07/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w07/">&lt;p&gt;Un multi-milliardaire radicalisé sur Internet, les naz{i,e}s qui mettent le monde à feu et à sang, l’infinie déception post-licenciement, et des &lt;em&gt;reply-guys&lt;&#x2F;em&gt; devant les chantiers de construction italiens.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lithub.com&#x2F;the-making-of-an-anti-woke-zealot-how-elon-musk-was-infected-with-the-maga-mind-virus&#x2F;&quot;&gt;The Making of an Anti-Woke Zealot: How Elon Musk Was Infected with the MAGA Mind-Virus&lt;&#x2F;a&gt; : comment Elon Musk a plongé dans l’extrême droite, depuis la transition de sa fille au rachat de Twitter. Fascinant et effrayant 😨&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tante.cc&#x2F;2025&#x2F;02&#x2F;03&#x2F;innovation-is-a-distraction&#x2F;&quot;&gt;Innovation is a distraction&lt;&#x2F;a&gt; : l’innovation comme excuse pour retarder le travail pénible qu’il est nécessaire de faire. À mettre en lien avec le combat contre le changement climatique 🥲&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.henrikkarlsson.xyz&#x2F;p&#x2F;start-a-blog&quot;&gt;Advice for a friend who wants to start a blog&lt;&#x2F;a&gt; : des conseils très simples et humains pour écrire un blog 😊&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mertbulan.com&#x2F;2025&#x2F;01&#x2F;26&#x2F;once-you-are-laid-off-you-will-never-be-the-same-again&#x2F;&quot;&gt;Once You’re Laid Off, You’ll Never Be the Same Again – Mert Bulan&lt;&#x2F;a&gt; : la désillusion du travail salarié après un licenciement. J’ai testé pour vous, et j’approuve ce message 🥲&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;commentisfree&#x2F;2025&#x2F;jan&#x2F;16&#x2F;i-knew-one-day-id-have-to-watch-powerful-men-burn-the-world-down-i-just-didnt-expect-them-to-be-such-losers&quot;&gt;I knew one day I’d have to watch powerful men burn the world down – I just didn’t expect them to be such losers | Rebecca Shaw&lt;&#x2F;a&gt; : une pièce revancharde mais assez hilarante sur la décrépitude des &lt;em&gt;tech-bro&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bjhess.com&#x2F;posts&#x2F;ddosing-yourself-with-to-dos-and-reminders&quot;&gt;DDoS’ing Yourself with To-dos and Reminders - I am BARRY HESS&lt;&#x2F;a&gt; : dans les méthodes à GTD, comment avoir trop de tâches et de listes de tâches peut être contre-productif.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini la saison 5 de &lt;em&gt;House of Cards&lt;&#x2F;em&gt;, le scénario s’essouffle trop, et mon temps est trop précieux pour des séries qui s’essoufflent : j’arrête 🚭&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini la saison 2 de &lt;em&gt;House of the Dragon&lt;&#x2F;em&gt;, là on parle ! Mais épuisante cette saison qui se termine par un épisode tout entier dont la fonction n’est que d’être un immense &lt;em&gt;cliffhanger&lt;&#x2F;em&gt; pour la saison suivante 😭&lt;&#x2F;li&gt;
&lt;li&gt;📚 Commencé &lt;em&gt;Les féministes t’encouragent à quitter ton mari, tuer tes enfants, pratiquer la sorcellerie, détruire le capitalisme et devenir trans-pédé-gouine&lt;&#x2F;em&gt; d’Alex Tamécylia (après &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.opportunis.me&#x2F;@lila_bliblu&#x2F;113872855503110851&quot;&gt;une recommandation Masto&lt;&#x2F;a&gt;, merci !). À mi-chemin entre l’essai et la poésie, j’adore le format pour le moment.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;seldo.com&#x2F;posts&#x2F;what-ive-learned-about-writing-ai-apps-so-far&quot;&gt;What I’ve learned about writing AI apps so far&lt;&#x2F;a&gt; : un retour d’expérience sur les applications à base d’intelligence artificielle qui « marchent bien », selon l’auteur·ice. En gros, tout ce qui permet du &lt;em&gt;condenser du texte&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;artificialworlds.net&#x2F;blog&#x2F;2024&#x2F;12&#x2F;04&#x2F;message-order-in-matrix&#x2F;&quot;&gt;Message order in Matrix: right now, we are deliberately inconsistent | Andy Balaam’s Blog&lt;&#x2F;a&gt; : l’ordre des messages dans Matrix n’est pas consistent, et c’est un choix, et c’est compliqué d’avoir quelque chose de consistent, pour plein de raisons. Si jamais vous avez eu le problème des marqueurs de lecture bloqués sur « non lu » dans Element Web, voici une des raisons principales !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;emilyliu.me&#x2F;blog&#x2F;open-network&quot;&gt;Benefits of an open network&lt;&#x2F;a&gt; : une explication de la différence entre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bsky.app&#x2F;&quot;&gt;Bluesky&lt;&#x2F;a&gt; et les autres réseaux sociaux. Bluesky sépare la &lt;em&gt;possession des données&lt;&#x2F;em&gt; de leur &lt;em&gt;présentation et utilisation&lt;&#x2F;em&gt;, comme l’ont déjà tenté plus tôt &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;indieweb.org&#x2F;Tent.io&quot;&gt;tent.io&lt;&#x2F;a&gt; ou même &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;Matrix&lt;&#x2F;a&gt; (dans une certaine mesure — le cas d’utilisation de la messagerie est très honnêtement totalement prévalent avec ce protocole).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mkorostoff.github.io&#x2F;1-pixel-wealth&#x2F;&quot;&gt;Wealth, shown to scale&lt;&#x2F;a&gt;, une représentation visuelle assez étourdissante des inégalités de patrimoine. En comparaison, la version française avec &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lafortunedebernard.fr&#x2F;&quot;&gt;la fortune de Bernard Arnault&lt;&#x2F;a&gt; en nombre de SMICs.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Umarell&quot;&gt;Umarell - Wikipedia&lt;&#x2F;a&gt; est un phénomène observé en Italie de personnes qui observent des constructions dans des lieux publics, et donnent des conseils non sollicités. Du &lt;em&gt;reply guy&lt;&#x2F;em&gt; dans la vraie, sur les travaux publics. Dingo. On appréciera les concepts voisins de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Back-seat_driver&quot;&gt;back-seat driver&lt;&#x2F;a&gt; ou encore d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Armchair_general&quot;&gt;armchair general&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #34</title>
        <published>2025-01-13T00:00:00+00:00</published>
        <updated>2025-01-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w02/"/>
        <id>https://bouvier.cc/notes/2025-w02/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w02/">&lt;p&gt;Dans la maison de Simone Giertz, un méta cookie-clicker sur le thème de la dopamine, et il faut être deux pour danser le tango.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;element&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#element&quot; aria-label=&quot;Anchor link for: element&quot;&gt;🔗&lt;&#x2F;a&gt;Element&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;Mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;employeur actuel&lt;&#x2F;a&gt;, une société qui promeut le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;protocole Matrix&lt;&#x2F;a&gt; et propose des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;synapse&#x2F;&quot;&gt;serveurs&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-x-android&quot;&gt;clients&lt;&#x2F;a&gt; haute performance. Je travaille dans l’équipe &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt;, à l’heure où j’écris ces lignes.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Une résolution de &lt;em&gt;bug&lt;&#x2F;em&gt; très compliquée : les crashs ne s’affichaient plus dans nos logs, c’est maintenant &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;pull&#x2F;4485&quot;&gt;réglé&lt;&#x2F;a&gt;. Outre la résolution du problème, plutôt banale, la principale difficulté a été de comprendre que c’était un &lt;em&gt;crash&lt;&#x2F;em&gt; silencieux qui causait un autre bug, assez incompréhensible (et sur lequel j’ai passé beaucoup de temps à fomenter d’autres hypothèses).&lt;&#x2F;li&gt;
&lt;li&gt;Les perspectives de travailler sur de la stabilisation de notre SDK et de nos apps me réjouissent.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;C’est reparti pour des relectures de fonctionnalités implémentées par le seul et unique Nicofrand !
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1693&quot;&gt;feat(recurring-transactions): move everything to dropdown menu (step forward views)&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;cargo-machete&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cargo-machete&quot; aria-label=&quot;Anchor link for: cargo-machete&quot;&gt;🔗&lt;&#x2F;a&gt;cargo-machete&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; est un outil qui permet de détecter rapidement des dépendances inutilisées dans des projets Rust.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Petite relecture d’une PR pour supporter le nouveau type de &lt;em&gt;resolver&lt;&#x2F;em&gt; dans Cargo qui deviendra la valeur par défaut dans l’édition 2024 de Rust, à savoir un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;nightly&#x2F;cargo&#x2F;reference&#x2F;resolver.html#rust-version&quot;&gt;&lt;em&gt;resolver&lt;&#x2F;em&gt; conscient des versions minimales de Rust nécessaire pour faire tourner une dépendence&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arretsurimages.net&#x2F;chroniques&#x2F;clic-gauche&#x2F;luigi-mangione-lerreur-404-pour-la-presse&quot;&gt;Luigi Mangione, l’erreur 404 pour la presse - Par Thibault Prévost | Arrêt sur images&lt;&#x2F;a&gt; : une analyse encore très intéressante de la vision médiatique du fameux tueur de CEO aux États-Unis, l’homme plein de contradictions mais cependant admiré sur Internet, pour un geste si compréhensible.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7vAiloW7phc&quot;&gt;Inside Inventor Simone Giertz’s Small Los Angeles Home, 58sqm&#x2F;630sqft - YouTube&lt;&#x2F;a&gt; : la maison insolite de la géniale Simone Giertz, avec que des meubles fabriqués sur mesure, qui répondent à des incongruités de sa maison. Quelle créativité. Ça donnerait presque envie de se mettre à la menuiserie.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=0UcwagdRLEM&quot;&gt;The Science Behind Morning Depression (And What to Do About It) - YouTube&lt;&#x2F;a&gt; : TL;DR, si vous avez une petite déprime le matin avant le fameux saut du lit, c’est peut-être une histoire de &lt;em&gt;cortisol&lt;&#x2F;em&gt; (« l’hormone du stress »), et le moyen de combattre ça c’est &lt;em&gt;check notes&lt;&#x2F;em&gt; d’aller prendre le soleil????? 😎&lt;&#x2F;li&gt;
&lt;li&gt;📺 Continué &lt;em&gt;House of cards&lt;&#x2F;em&gt; et &lt;em&gt;House of the dragons&lt;&#x2F;em&gt;, mais à tout petit feu.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai lu mon premier livre de 2025 !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;flowkeeper.org&#x2F;&quot;&gt;Flowkeeper&lt;&#x2F;a&gt; est un outil open-source qui permet de garder une trace de ses &lt;em&gt;pomodoros&lt;&#x2F;em&gt;, si vous êtes adepte de la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Technique_Pomodoro&quot;&gt;technique&lt;&#x2F;a&gt; éponyme.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neal.fun&#x2F;stimulation-clicker&#x2F;&quot;&gt;Stimulation clicker&lt;&#x2F;a&gt; : si vous suivez ce blog, vous savez que je me méfie de ce genre de trucs, mais… cette instance-là part d’une excellent idée, très second degré : c’est un &lt;em&gt;cookie clicker&lt;&#x2F;em&gt;, donc un jeu à très court cycle de libération de dopamine, sur le thème de… la stimulation, donc exactement de « l’addiction » à la dopamine. Such meta, very wow 🐶 Ironique que j’y ai joué pendant tout un meeting professionnel (qui demandait peu d’attention 😇), me faisant griller au bout de 13 secondes, et que j’ai fini le jeu pendant le meeting ; un bon &lt;em&gt;cookie clicker&lt;&#x2F;em&gt;, c’est un &lt;em&gt;cookie clicker&lt;&#x2F;em&gt; qui se termine &lt;em&gt;vite&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tangogame.org&#x2F;&quot;&gt;Tango Game&lt;&#x2F;a&gt; : un petit jeu de casse-tête qui nous vient du monde &lt;del&gt;merveilleux&lt;&#x2F;del&gt; professionnel de LinkedIn. J’ai mis un peu de temps à comprendre une tactique primordiale, et une fois que c’était assimilé, j’ai roulé sur le jeu (record perso de 24 secondes ^^ et vous ?). Et non, il ne faut pas être deux pour (jouer à) Tango.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #33</title>
        <published>2025-01-07T00:00:00+00:00</published>
        <updated>2025-01-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2025-w01/"/>
        <id>https://bouvier.cc/notes/2025-w01/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2025-w01/">&lt;p&gt;Beaucoup de séries de Maisons (mais pas Dr Maison), de la joie du travail moderne, des types de fatigues et de repos, SQLite est complètement dingo, le train s’emmerdifie, et la nouvelle année commence : pas ouf.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tristramg.eu&#x2F;merdification&#x2F;&quot;&gt;Merdification des transports en France&lt;&#x2F;a&gt; : un ancien de Capitaine Train (coucou Tristram !) parle de la dégradation de l’expérience de l’achat et l’utilisation du train en France. Ça fait beaucoup, là, non ?&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theconversation.com&#x2F;la-france-inegale-qui-vote-fn-pas-forcement-ceux-a-qui-lon-pense-75977&quot;&gt;La France inégale : Qui vote FN ? Pas forcément ceux à qui l’on pense&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.joanwestenberg.com&#x2F;modern-work-fucking-sucks&#x2F;&quot;&gt;Modern Work Fucking Sucks.&lt;&#x2F;a&gt; : le travail consiste-il désormais à prétendre produire pour satisfaire ses supérieur·es, à travers une myriade d’outils à abonnements qui communiquent les uns les autres ? Dur de ne pas se dire que je fais partie du &lt;em&gt;système&lt;&#x2F;em&gt;, travaillant moi-même sur une messagerie d’entreprise.
&lt;ul&gt;
&lt;li&gt;
&lt;blockquote&gt;
&lt;p&gt;And let’s not forget the meetings. Every modern tool seems designed to make meetings happen faster, more frequently, and with less purpose. You’re called into a Zoom call to discuss the updates you wrote in Notion about the tasks you logged in Trello. Half the attendees aren’t paying attention because they’re already drowning in Slack messages from the last meeting they were in, and the other half are trying to share their screens but can’t figure out how to unmute themselves. By the end of the hour, everyone agrees to “circle back” later, which is just shitspeak for “let’s waste another hour next week having the exact same conversation.”&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;no-more-mandatory&#x2F;&quot;&gt;No More Mandatory&lt;&#x2F;a&gt; : sur l’obligation de venir en meetings (justement), et le fait qu’en tant que manager, Zef arrête d’imposer ça aux gens (et attend la même chose des autres). Ça pointe ce qui pêche, encore une fois. Aussi, résumé du livre &lt;em&gt;Drive&lt;&#x2F;em&gt; sur les 3 composantes principales de la motivation (maîtrise, autonomie, sens) 👀&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé &lt;em&gt;House of the Dragons&lt;&#x2F;em&gt;, le &lt;em&gt;spinoff&lt;&#x2F;em&gt; de &lt;em&gt;Game of Thrones&lt;&#x2F;em&gt; dédié à la famille Targaryen. On reste dans le gore, le malaisant, l’incestueux ; l’esprit de GoT est définitivement présent.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Après une saison 4 franchement palpitante, j’ai commencé la cinquième saison de &lt;em&gt;House of Cards&lt;&#x2F;em&gt;, et ça commence à traînasser sur l’histoire principale, avec de plus en plus de protagonistes et de trames secondaires, mais de moins en moins de jus. Dommage.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Revu &lt;em&gt;Yannick&lt;&#x2F;em&gt;, de Quentin Dupieux (aka &lt;em&gt;Mr Oizo&lt;&#x2F;em&gt;), un film relativement court, huis-clos sur l’intervention d’un jeune homme « de banlieue » lors d’une représentation de théâtre qui ne lui convient pas. Malgré l’apparente dénonciation d’un &lt;em&gt;classisme&lt;&#x2F;em&gt; présent dans le milieu du théâtre, je n’arrive pas à m’empêcher d’être gêné de la représentation du héros, présenté comme particulièrement benêt ; la tendresse que l’on se met à éprouver pour lui relève-t-elle d’une sorte de mépris ? À voir pour vous forger votre propre opinion.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé &lt;em&gt;Konosuba&lt;&#x2F;em&gt;, un anime &lt;em&gt;isekai&lt;&#x2F;em&gt; où quelqu’un se retrouve dans un monde fantaisie, mais sans super pouvoir, ou avec des super pouvoirs à la con. Pas vraiment accroché, même si l’absurde me fait sourire.&lt;&#x2F;li&gt;
&lt;li&gt;🧵 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;piaille.fr&#x2F;@lapsyrevoltee&#x2F;113582849443703943&quot;&gt;Fil sur le repos&lt;&#x2F;a&gt;, du point de vue de la psychologie de la santé, par LaPsyRévoltée. On y parle types de fatigues, modes et formes de repos. Très utile pour conscientiser ce dont on a besoin à un instant donné !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🧰 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;TheBigRoomXXL&#x2F;tinyfeed&quot;&gt;TinyFeed&lt;&#x2F;a&gt; est un script qui permet de charger des contenus RSS et les publier sur une page statique, qui peut être visitée plus tard. Ultra minimaliste et très simple — probablement trop pour mon usage ; j’apprécie toujours de pouvoir ajouter des flux à la main avec mon instance de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;miniflux.app&#x2F;&quot;&gt;Miniflux&lt;&#x2F;a&gt;, également très minimaliste dans l’esprit.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.jim-nielsen.com&#x2F;2024&#x2F;nothing-is-something&#x2F;&quot;&gt;Nothing Is Something&lt;&#x2F;a&gt;: de l’incapacité des IAs à dire « je ne sais pas ».&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;avi.im&#x2F;blag&#x2F;2024&#x2F;sqlite-facts&#x2F;&quot;&gt;Collection of insane and fun facts about SQLite - blag&lt;&#x2F;a&gt;: plein de faits assez fous sur sqlite ; c’est complètement dans les communs (domaine public), mais pas vraiment ouvert à la contribution ? Le code ne contient pas de license, mais des prières ? Assez dingue, pour une des bases de code les plus utilisées au monde.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎮 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=XAkJl9XLDJU&quot;&gt;Modulus&lt;&#x2F;a&gt;, un nouveau jeu de simulation d’usine qui ravira tous les &lt;em&gt;nerds&lt;&#x2F;em&gt; fans de &lt;em&gt;Factorio&lt;&#x2F;em&gt;, &lt;em&gt;Satisfactory&lt;&#x2F;em&gt; et consorts.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=AY0uqU-LADk&quot;&gt;The Bustling World&lt;&#x2F;a&gt; est un RPG en monde ouvert avec une vue en 3D isométrique très choupie, encore en cours de production.&lt;&#x2F;li&gt;
&lt;li&gt;🧵 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@jeanbaptistemarie&#x2F;113752211178805250&quot;&gt;Fil du mainteneur de 12train&lt;&#x2F;a&gt;, concurrent de Trainline &#x2F; SNCF Connect, qui mérite à être plus (+) connu. À mettre en lien avec le billet sur la merdification du transport en train en France, cité ci-dessus 😇&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #32</title>
        <published>2024-12-29T00:00:00+00:00</published>
        <updated>2024-12-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w52-bis/"/>
        <id>https://bouvier.cc/notes/2024-w52-bis/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w52-bis/">&lt;p&gt;La fin d’année on kiffe, on peint virtuellement, on ne se laisse pas faire, on distingue le toi du moi et du nous.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📚 Fini le livre « Seul sur Mars », d’Andy Weir, qui m’avait été recommandé par un ami. Très technique, un peu sec parfois, où j’avais l’impression de lire quelqu’un me lire à haute voix un manuel technique. Par contre, très palpitant sur la fin.&lt;&#x2F;li&gt;
&lt;li&gt;📺 J’en ai profité pour revoir le film « Seul sur Mars » avec Matt Daaaaaaaamon &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. J’aime comparer les adaptations avec les originaux. Eh bien, c’était une bonne chose de comparer : le personnage du film est beaucoup plus émotif et moins rationnel-optimiste (ce qui n’est pas un mal, hein — simplement une autre palette d’émotions). Il rencontre &lt;em&gt;beaucoup&lt;&#x2F;em&gt; moins de soucis que le héros du livre. Le film est généralement plus rocambolesque et haut en couleurs, et je comprends le parti pris, qui nuance justement la sécheresse relative du livre.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 J’ai commencé et fini &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;1634150&#x2F;Behind_the_Frame_Les_plus_beaux_paysages&#x2F;&quot;&gt;&lt;em&gt;Behind the Frame&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, un &lt;em&gt;point-n-click&lt;&#x2F;em&gt; en mode enquête, très chou, relativement simple, avec une belle narration sur une histoire d’amour et peinture. Très très chill, parfait pour cette période de fêtes, et super court (fini en environ une heure et demie).&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.slate.fr&#x2F;sante&#x2F;tdah-trouble-deficitaire-attention-hyperactivite-foire-opportunistes-influenceurs-marques-pseudo-experts-pratiques-predatrices-tiktok-neuropsychologie-diagnostic&quot;&gt;Ces pseudo-experts et opportunistes qui s’engouffrent dans le champ du TDAH | Slate.fr&lt;&#x2F;a&gt; : une analyse intéressante des arnaques au TDAH, avec une statistique effarante : 95% des contenus liés au TDAH relayés sur TikTok seraient faux 😨&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;8facdf13-2e2a-4edc-8b98-36eac2221ca5&quot;&gt;There’s You, There’s Me, There’s US - Where Should We Begin? with Esther Perel&lt;&#x2F;a&gt; : imaginez pouvoir être une petite mouche posée contre un mur, lors d’une séance de psychothérapie assez intense ; c’est ce que nous propose ce podcast en général. Dans l’épisode d’aujourd’hui, une intense session entre&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;em&gt;Je ne me laisserai pas faire&lt;&#x2F;em&gt;, un film que j’ai conseillé la semaine dernière, et gratuit sur Arte TV toute la semaine. Eh bien on me l’avait recommandé plusieurs fois, et j’ai compris pourquoi  : entre la fable revancharde et une représentation malheureusement réaliste de la condition de femme dans une culture du viol, on s’attache beaucoup à tous·tes les personnages. Brillant.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=gnPWJOJYVKc&quot;&gt;America : Fuck Yeah&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #31</title>
        <published>2024-12-23T00:00:00+00:00</published>
        <updated>2024-12-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w52/"/>
        <id>https://bouvier.cc/notes/2024-w52/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w52/">&lt;p&gt;3 semaines d’un coup : l’oracle des accents, à quoi servent les libristes, comment acheter avec intention, et l’hétérosexualité comme mouvement sectaire. Joyeuses fêtes de fin d’année à tous·tes !&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Gros weekend de contributions sur le projet avec Nicofrand, en personne ! Beaucoup de plaisir à se retrouver, contribuer ensemble, avancer vite sur des sujets (notamment un gros projet dont on a envie depuis plusieurs années : les regroupements de comptes en « vues »), fermer des vieux tickets, et boire des coups aussi 🥳&lt;&#x2F;li&gt;
&lt;li&gt;On a donc sorti une nouvelle version, pardon deux, vu que la première a vite présenté quelques petits soucis pas remarqués lors de nos sessions de tests : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;blog&#x2F;kresus-version-0-22-0.html&quot;&gt;Kresus 0.22&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=Wgr_Z3nsxU8&quot;&gt;Viktorovitch - Allocution : La communication perverse d’Emmanuel Macron&lt;&#x2F;a&gt; : Clément beugle un peu contre la caméra parce qu’il n’est pas content du discours de Macron, et compare sa communication à celle d’un pervers narcissique. Important pour remettre quelques pendules à l’heure.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=G7jVyKEOdmk&quot;&gt;Psykocouac - Comprendre la personnalité avec la métaphore de la classe&lt;&#x2F;a&gt; : une métaphore intéressante pour comprendre et analyser ses différentes voix, ses contradictions internes, etc.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;860146c8-c399-40b0-a50d-358a4dce345f&quot;&gt;The Cult of Heterosexuality - Sounds Like A Cult&lt;&#x2F;a&gt; : je continue à écouter des épisodes du podcast &lt;em&gt;Sounds like a cult&lt;&#x2F;em&gt;, où les hôtes comparent un phénomène de société à un mouvement sectaire, et jugent si ce mouvement sectaire est dangereux ou non. Un épisode assez magistral.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;omny.fm&#x2F;shows&#x2F;sounds-like-a-cult&#x2F;the-cult-of-self-help&quot;&gt;The Cult of Self-Help - Sounds Like A Cult - Omny.fm&lt;&#x2F;a&gt; : et encore un autre épisode sur le mouvement du &lt;em&gt;développement personnel&lt;&#x2F;em&gt;, au sens large — où l’on découvre qu’il y a eu effectivement de vraies sectes autour de ce mouvement. N’oublions-pas que c’est avant tout une manne financière pour plein d’entreprises, d’auteur·ices, de formateur·ices. Les conclusions à la fin de l’épisode portent un regard très juste sur la pratique en elle-même du développement personnel.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stephango.com&#x2F;buy-wisely&quot;&gt;Buy wisely — Steph Ango&lt;&#x2F;a&gt; : des heuristiques pour choisir quoi acheter, et comment choisir les produits que l’on va acheter.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lbrito.ca&#x2F;blog&#x2F;2023&#x2F;12&#x2F;leaving-amazon.html&quot;&gt;A Developer’s Notebook - Leaving Amazon&lt;&#x2F;a&gt; : un·e dev anciennement chez Amazon parle d’à quoi ça ressemble à l’intérieur ; toujours fascinant de voir l’envers du décors de ces postes qui &lt;em&gt;a priori&lt;&#x2F;em&gt; font rêver bien des ingés.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=uUScyWlkJg8&quot;&gt;Au Revoir Mon Monde&lt;&#x2F;a&gt;, court-métrage en animation 3D très choupi sur la fin du monde (oui oui).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mart-e.be&#x2F;2024&#x2F;12&#x2F;la-licence-mit-cest-un-truc-de-droite&quot;&gt;mart-e - La licence MIT, c’est un truc de droite&lt;&#x2F;a&gt;  : TOI AUSSI RENCONTRE DES OPINIONS CHAUDES DANS TA RÉGION. Pas vraiment d’accord avec l’analyse du truc, étant donné que les problématiques citées ne seraient certainement pas résolues simplement par des choix de licenses. Le libre en tant qu’objet politique a un pouvoir bien plus limité que ses défenseur·ses le proclament.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.cyphergoat.net&#x2F;blog&#x2F;%C3%A0-quoi-servent-les-libristes&#x2F;&quot;&gt;À quoi servent les libristes ?&lt;&#x2F;a&gt; : encore des opinions chaudes, cette fois-ci contre les prosélytes libristes, avec une conclusion assez mesurée, et que je rejoins de plus en plus : aider à l’accompagnement s’il est demandé.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nora.zone&#x2F;manifesto.html&quot;&gt;The Website Manifesto&lt;&#x2F;a&gt; : ayez un site Web à vous, reprenez le contrôle sur vos médias sociaux. Peut-être irréaliste à grande échelle, cependant très enthousiasmant, dans une démarche &lt;em&gt;IndieWeb&lt;&#x2F;em&gt; très excitante.&lt;&#x2F;li&gt;
&lt;li&gt;💻 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;markwhen.com&#x2F;&quot;&gt;Markwhen&lt;&#x2F;a&gt;, un éditeur Markdown spécialisé dans la rédaction de contenus qui s’inscrivent dans un contexte &lt;em&gt;temporel&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.anew.social&#x2F;hello-social-web&#x2F;&quot;&gt;Hello, Social Web 👋🏼&lt;&#x2F;a&gt;, une nouvelle fondation pour promouvoir le « Web ouvert social », notamment pour travailler sur la compatibilité entre les différents protocoles ouverts ActivityPub et ATProto (Bluesky), via le développement et la promotion de l’outil &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fed.brid.gy&#x2F;&quot;&gt;BridgyFed&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 Dans la même veine, le site &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rss-parrot.net&#x2F;&quot;&gt;RSS Parrot&lt;&#x2F;a&gt; peut créer un compte Mastodon pour n’importe quel site Web muni de flux RSS, permettant ainsi de suivre ses flux RSS directement depuis Mastodon. Choupi.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;goaccess.io&#x2F;&quot;&gt;GoAccess&lt;&#x2F;a&gt; est un visualisateur de logs de serveur Web, pour avoir des statistiques détaillées sur les visites de son site sans n’avoir à mettre en place quelconque forme de tracking côté client. À essayer !&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;ba5cc0a7-5a24-4cca-a42e-ed9413daadb1&quot;&gt;Serial Mytho 1&#x2F;4 - Passages&lt;&#x2F;a&gt; : histoire vraie d’un effroyable mytho. Toute la série donne froid dans le dos, quant au niveau de manipulation atteint.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.monde-diplomatique.fr&#x2F;cartes&#x2F;PPA&quot;&gt;Médias français, qui possède quoi ?&lt;&#x2F;a&gt;, la carte mise à jour annuellement du Monde Diplomatique qui montre le pouvoir d’influence des milliardaires français et internationaux.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adsb.exposed&#x2F;?zoom=3&amp;amp;lat=41.3849&amp;amp;lng=20.8301&amp;amp;query=db8cbf1694bf177e57d6f10886107859&quot;&gt;Une visualisation des vols en avions&lt;&#x2F;a&gt; qui ont lieu dans le monde. Je ne comprends pas vraiment ce que je regarde, mais le rendu coloré est à la fois très beau, et c’est très rageant qu’il y ait toujours autant de vols en avions, en dépit de l’impact CO2 très fort que ces derniers causent.&lt;&#x2F;li&gt;
&lt;li&gt;Des harpes &#x2F; guitares minimalistes représentées par des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;string.spiel.com&#x2F;&quot;&gt;cordes&lt;&#x2F;a&gt;, qui nous jouent des airs connus. Extrêmement satisfaisant.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;start.boldvoice.com&#x2F;accent-oracle&quot;&gt;Accent oracle&lt;&#x2F;a&gt; vous demande de lire un petit texte en anglais, puis une IA (?) vous indique si vous avez un accent, et à quel point elle est certaine de votre accent. Eh bien sachez-le : j’ai un accent hyper franco-français, moi qui croyais moins l’avoir que pas mal de collègues autour de moi 🥲.&lt;&#x2F;li&gt;
&lt;li&gt;La semaine de 4 jours c’est bien, mais si on allait plus loin et qu’on inversait les concepts de week-end et de semaine de travail avec une semaine de 3 jours ? &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;3jours.work&quot;&gt;Chui chaud&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Le film « Je ne me laisserai plus faire » est disponible gratuitement sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arte.tv&#x2F;fr&#x2F;videos&#x2F;113548-000-A&#x2F;je-ne-me-laisserai-plus-faire&#x2F;&quot;&gt;Arte&lt;&#x2F;a&gt; jusque février 2025, et on m’en a dit beaucoup de bien.&lt;&#x2F;li&gt;
&lt;li&gt;Allez, un autre cookie clicker, mais cette fois-ci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;redgem.games&#x2F;wigmaker&#x2F;&quot;&gt;on fabrique des perruques&lt;&#x2F;a&gt;. Je cite : “there is glamour, and then there are wigs”. On clique, on essaie 2 minutes, puis on court vers le premier bateau en direction de n’importe où, on change de pays et d’identité pour que le cookie clicker ne nous retrouve pas. Allez.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #30</title>
        <published>2024-12-02T00:00:00+00:00</published>
        <updated>2024-12-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w48/"/>
        <id>https://bouvier.cc/notes/2024-w48/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w48/">&lt;p&gt;Une semaine calme : la secte d’Apple, une app pour rendre son téléphone chiant (mais c’est pas sans danger), et tous les matins à 10 heures une nouvelle fuite de données.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;62b91e01-801c-4828-a462-8ce1c01d8a9b&quot;&gt;The Cult of Dating Apps - Sounds Like A Cult&lt;&#x2F;a&gt; : j’ai donc continué les épisodes du podcast &lt;em&gt;Sounds like a cult&lt;&#x2F;em&gt;, qui détermine à chaque épisode si un phénomène de société est un mouvement sectaire. Outre le questionnement posé, j’ai trouvé pertinent beaucoup de remarques des hôtes et invité·es ; les apps de rencontre sont horribles mais « y a presque plus d’autre choix » ; les apps de rencontre sont des jeux mobiles avec pour thème central, la drague. J’ai aussi découvert le terme de &lt;em&gt;caspering&lt;&#x2F;em&gt; ; comme du &lt;em&gt;ghosting&lt;&#x2F;em&gt;, mais après, la personne qui ghoste revient, et est toute gentille, comme si elle t’avait jamais ghosté. Basé sur l’histoire réelle de Casper, le gentil fantôme.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;6f41a312-c639-47f6-95e8-136296a1256a&quot;&gt;The Cult of Apple - Sounds Like A Cult&lt;&#x2F;a&gt; : est-ce qu’Apple est un culte ? Je découvre qu’aux États-Unis, il semblerait qu’Apple ait une aura encore plus radieuse que dans le reste du monde, avec une majorité de gens qui utilisent leurs appareils. Outre la marque, cela m’a fait poser la question « est-ce que l’open-source est un mouvement sectaire », et pour des raisons très similaires à celles évoquées dans cet épisode : je pense que &lt;em&gt;oui&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini la saison 2 de &lt;em&gt;Rings of Power&lt;&#x2F;em&gt;. ENFIN l’explication du nom « Le seigneur des anneaux » 😆 La saison 1 m’avait laissé relativement indifférent, la deuxième s’est avérée plus intéressante, car plus reliée au Seigneur des Anneaux. À suivre donc.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini la saison 1 de &lt;em&gt;House of Cards&lt;&#x2F;em&gt;. Merde fait chier que ce soit Kevin Spacey et toutes ses casseroles au cul — mais on vit dans une sociétouille, et l’histoire est très bien écrite, et que c’est kiffant de détester le héros. Grr.&lt;&#x2F;li&gt;
&lt;li&gt;📚 Commencé &lt;em&gt;Seul sur Mars&lt;&#x2F;em&gt;. Je découvre le concept de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Hard_science-fiction&quot;&gt;hard-scifi&lt;&#x2F;a&gt;, où les technologies expliquées sont relativement réalistes, ou bien où les faits scientifiques énoncés sont réalistes. Un peu technique par moments, mais un bon rythme, et beaucoup d’entrain.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Le 20 janvier 2025, participez à la campagne &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;helloquittex.com&#x2F;MANIFESTO-HelloQuitteX.html&quot;&gt;“Hello, quitte X”&lt;&#x2F;a&gt; : l’idée est que plein de gens se désinscrivent en môsse de X le même jour, avec comme alternative de rejoindre Mastodon ou Bluesky, et de re-former des réseaux dans des endroits plus sûrs, loin des manipulations politiques de l’autre facho.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;korben.info&#x2F;the-boring-mode-app-transforme-smartphone-telephone-basique.html&quot;&gt;Heineken&lt;&#x2F;a&gt; sort &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.heineken.theboringmode&amp;amp;hl=en_US&quot;&gt;une&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;fr&#x2F;app&#x2F;the-boring-mode&#x2F;id6479634148&quot;&gt;application&lt;&#x2F;a&gt; pour rendre votre téléphone chiant, afin que vous passiez plus de temps dans la vraie vie. Cool idée, mais le nombre de permissions nécessaires pour qu’un truc pareil tourne me fait un peu trop douter des bonnes intentions de la marque.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tomsguide.com&#x2F;ai&#x2F;meet-daisy-the-ai-generated-granny-helping-to-trap-scammers&quot;&gt;Daisy, la grand-mère virtuelle générée par IA&lt;&#x2F;a&gt;, qui emmerde les scammeurs téléphoniques. Alors on sourie pour l’idée, mais au vu de la consommation d’énergie de l’IA, on ne peut pas vraiment applaudir le rapport coût &#x2F; bénéfice.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bonjourlafuite.eu.org&#x2F;&quot;&gt;Bonjour la fuite&lt;&#x2F;a&gt;, ce site liste une nouvelle fuite de données, &lt;del&gt;tous les jours, à 10 heures&lt;&#x2F;del&gt; assez régulièrement. Une preuve de plus que la question n’est pas tant de savoir &lt;em&gt;si&lt;&#x2F;em&gt; vos données vont fuiter mais &lt;em&gt;quand&lt;&#x2F;em&gt; elles vont fuiter. Et le corollaire pour les informaticien·nes : les seules données qui ne fuitent pas, c’est celles qu’on ne récolte pas, clin d’œil clin d’œil. Merci à Ivan pour la découverte !&lt;&#x2F;li&gt;
&lt;li&gt;Vieille redécouverte : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cocktailpueblo.bandcamp.com&#x2F;album&#x2F;g-n-rique-de-g-n-rique&quot;&gt;Générique de Générique&lt;&#x2F;a&gt;, quand les parties répétitives des génériques de dessins animés s’emballent comme un disque rayé, comme un disque rayé, comme un disque rayé, comme un disque rayé. Attention, risque de psychose &lt;em&gt;TRÈS&lt;&#x2F;em&gt; rapide.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #29</title>
        <published>2024-11-28T00:00:00+00:00</published>
        <updated>2024-11-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w47/"/>
        <id>https://bouvier.cc/notes/2024-w47/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w47/">&lt;p&gt;J’ai fait le ménage, donc j’ai écouté &lt;em&gt;beaucoup&lt;&#x2F;em&gt; de podcasts : &lt;em&gt;Vallée du Silicium&lt;&#x2F;em&gt; est-il un torchon ? Les fans de RuPaul Drag Race forment-iels un culte ? Comment voler pour 1,000€ de courses par mois ?&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1670&quot;&gt;gros travail de refactoring&lt;&#x2F;a&gt; effectué entièrement par Nicofrand, bravo à lui !&lt;&#x2F;li&gt;
&lt;li&gt;Et j’ai fait une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1672&quot;&gt;petite contribution&lt;&#x2F;a&gt; pour pouvoir désactiver la synchronisation automatique d’un compte, si celui-ci nécessite une 2FA de manière systématique (comme c’est le cas pour moi, au Crédit Mutuel). Au delà de la contribution en soi, ça me fait plaisir vu que ça faisait un moment que j’avais pas ajouté de fonctionnalité dans Kresus 🥳&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Il serait peut-être temps de faire une &lt;em&gt;release&lt;&#x2F;em&gt; 🤔&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;alexwlchan.net&#x2F;2024&#x2F;how-i-name-my-computers&#x2F;&quot;&gt;How I name my computers – alexwlchan&lt;&#x2F;a&gt; : mignon !&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=cnnWimwTduM&quot;&gt;J’ai une idée pour réduire l’empreinte environnementale du numérique par 4 - YouTube&lt;&#x2F;a&gt; : Tristan Nitot évoque la loi de Moore, et sa disparition récente. &lt;em&gt;Alerte divulgâchis&lt;&#x2F;em&gt;, l’idée c’est d’optimiser le logiciel, avec le point de vigilance qu’il ne sert à rien de trop optimiser. J’apprécie l’idée, fondamentalement anticapitaliste dans son essence (produire du travail de qualité, et non pas jouer la course des nouvelles fonctionnalités à plein régime tout le temps, &lt;em&gt;wink wink&lt;&#x2F;em&gt;). Mais je me pose la question de la viabilité long terme, à cause de l’intuition de Pareto : les premiers 80% d’optimisation demanderont 20% d’effort, et les 20% d’optimisation supplémentaire pourraient nécessiter 80% d’effort supplémentaire.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Fini &lt;em&gt;Gris&lt;&#x2F;em&gt;, un jeu vidéo de &lt;em&gt;puzzle&lt;&#x2F;em&gt; assez simple, esthétique et contemplatif. Ça manque un peu de dopamine pour moi, mais très détendu (et ça fait plaisir d’arriver au bout d’un jeu au bout de 5 heures).&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;04f3d046-7c8c-4dcd-8a08-3c544262ae04&quot;&gt;Essentials: How Your Brain Works &amp;amp; Changes - Huberman Lab&lt;&#x2F;a&gt; : le podcast à croisée du développement personnel et des neuro-sciences revient, dans un format plus court et condensé. C’est vraiment bien comme démarrage pour comprendre le fonctionnement du système nerveux (dont le cerveau, mais pas que), avec des bonnes métaphores 👍&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;a0318ae4-7847-46d4-85e4-eebb8aab5e60&quot;&gt;Julien, 34 ans : “Je vole pour 1000 euros par mois dans les magasins” - Thune&lt;&#x2F;a&gt; : fascinant, ça donnerait presque l’impression que c’est facile. La discussion sur l’éthique du vol est rigolote également. Je me demande si le podcast contient assez d’informations pour retrouver qui est l’interviewé dans la vraie vie ; ou bien si ça peut avoir un impact quelconque de publiciser ce genre de comportements, et rendre les contrôles &#x2F; la législation plus sévère. Après tout en France, on est les spécialistes de la législation suite à un fait divers…&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;612a1bc6-7a31-4f62-a9e2-65f7c350e820&quot;&gt;Vallée du silicium - Alain Damasio - Torchon&lt;&#x2F;a&gt; : une critique très bien posée, construite et justifiée du dernier roman de Damasio. J’apprécie parce que la critique s’étend &lt;em&gt;hyper&lt;&#x2F;em&gt; bien à toutes les apparitions publiques &#x2F; interviews de Damasio. Je découvre ce podcast de critique littéraire par la même occasion, et la forte impression qu’il me fait me donne envie de continuer de l’écouter. Vous pouvez y aller les yeux fermés 👍&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;fc9324be-2279-49c3-9a31-12dcc998b027&quot;&gt;The Cult of RuPaul’s Drag Race - Sounds Like A Cult&lt;&#x2F;a&gt; : et donc, lors de l’écoute du pocast précédente, les hôtes réagissent à la question de considérer les fans de la marque &lt;em&gt;Apple&lt;&#x2F;em&gt; comme un culte, soulevée par Damasio. Il s’avère que (selon les hôtes), Damasio fait une mauvaise analyse, très peu justifiée ; mais il s’avère qu’il existe ce podcast, &lt;em&gt;Sounds like a cult&lt;&#x2F;em&gt;, menée par deux hôtes, dont une experte en mouvements sectaires, et qui en a tiré une très bonne analyse. Curieux, j’écoute un épisode au hasard parce que la popularité du sujet me fait sourire, et je ressors convaincu : à la fois une analyse brillante, et ça reste fun en même temps. On aime.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;alexwlchan.net&#x2F;2024&#x2F;digital-decluttering&#x2F;&quot;&gt;Digital decluttering – alexwlchan&lt;&#x2F;a&gt; : le fait de pouvoir stocker numériquement des données fait que l’on ne se pose plus la question de si c’est utile de stocker ou pas. Alex explique ici avoir fait un grand ménage, en se posant la question de si c’est utile ou non de stocker ; une friction supplémentaire, mais qui permet de faire un choix conscient, et de faciliter la recherche future (tout en minimisant la charge cognitive). Stylé.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bryanbraun.com&#x2F;2024&#x2F;10&#x2F;25&#x2F;before-you-buy-a-domain-name-first-check-to-see-if-its-haunted&#x2F;&quot;&gt;Before you buy a domain name, first check to see if it’s haunted | Bryan Braun - Frontend Developer&lt;&#x2F;a&gt; : bonne pratique avant d’acheter un nom de domaine : vérifier qu’il n’a pas été utilisé par le passé pour des raisons frauduleuses 👌&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bryanbraun.com&#x2F;2024&#x2F;11&#x2F;02&#x2F;setting-up-your-now-page-with-an-rss-feed&#x2F;&quot;&gt;Setting up your &#x2F;now page with an RSS feed | Bryan Braun - Frontend Developer&lt;&#x2F;a&gt; : un gentil détournement des flux RSS pour créer facilement sa page &lt;code&gt;&#x2F;now&lt;&#x2F;code&gt;, j’adore 🤓&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #28</title>
        <published>2024-11-18T00:00:00+00:00</published>
        <updated>2024-11-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w46/"/>
        <id>https://bouvier.cc/notes/2024-w46/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w46/">&lt;p&gt;Combien ça coûte d’être une &lt;em&gt;drag-queen&lt;&#x2F;em&gt;, un monde sans fin, et les photos matinales des livreur·ses d’Ouest France.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;element&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#element&quot; aria-label=&quot;Anchor link for: element&quot;&gt;🔗&lt;&#x2F;a&gt;Element&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;Mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;employeur actuel&lt;&#x2F;a&gt;, une société qui promeut le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;protocole Matrix&lt;&#x2F;a&gt; et propose des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;synapse&#x2F;&quot;&gt;serveurs&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-x-android&quot;&gt;clients&lt;&#x2F;a&gt; haute performance. Je travaille dans l’équipe &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt;, à l’heure où j’écris ces lignes.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Quasiment fini la mise en place des « échos locaux pour l’envoi des médias ». Non je ne suis pas en train d’avoir une crise cardiaque : cela signifie simplement qu’on est désormais capable d’afficher un média en cours d’envoi directement dans l’écran d’une &lt;em&gt;room&lt;&#x2F;em&gt;, avant qu’il ne soit réellement téléversé au serveur — et en cas d’échec&#x2F;redémarrage de l’app, on est capable de le reprendre également.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;1629482a-7343-4107-9f19-df419f139141&quot;&gt;Thune &amp;amp; drag queens : sous les paillettes, le stress ! - Thune&lt;&#x2F;a&gt; : combien ça coûte d’être &lt;em&gt;drag queen&lt;&#x2F;em&gt; ? Est-ce que faire &lt;em&gt;Drag Race France&lt;&#x2F;em&gt; c’est un bon investissement ? Combien ça rapporte ? Où l’on apprend que la marge sur les faux cils dans les magasins spécialisés est &lt;em&gt;démente&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;996ad0b6-19c4-411e-862e-5a879b8e7456&quot;&gt;Who is an Ethical Slut? - Poly Pages&lt;&#x2F;a&gt; : des gens qui lisent des chapitres du livre &lt;em&gt;The Ethical Slut&lt;&#x2F;em&gt; (&lt;em&gt;le&lt;&#x2F;em&gt; livre de référence du polyamour), le résument et commentent. Très mal mixé ce premier épisode, j’espère que ça s’améliore sur les suivants…&lt;&#x2F;li&gt;
&lt;li&gt;📚 Lu la BD &lt;em&gt;Un monde sans fin&lt;&#x2F;em&gt; de Jancovici et Blain. J’ai eu peur que ça parte direct en culte de la personnalité à la page 6, mais le contenu est très riche finalement, aussi bien que j’ai partagé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;mondesansfin&#x2F;&quot;&gt;mes notes de lecture sur mon autre blog&lt;&#x2F;a&gt;. J’aurais bien aimé plus de sources, et un peu moins de ce ton typique, mi assertif mi condescendant. Mais très bien quand même.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé la série &lt;em&gt;Nobody Wants This&lt;&#x2F;em&gt; sur Netflix. Le chassé-croisé amoureux archétypique, avec de nouvelles représentations de mecs, au premier abord plus doux (quitte à être lâches), moins viril(iste)s dans leurs attitudes (mais pas dans l’apparence, faut pas déconner non plus). Mais finalement, beaucoup de clichés hétéropatriarcaux : impossibilité d’amitiés homme&#x2F;femme, concurrence entre les femmes pour « conquérir » des hommes (qui se retrouvent alors juges tout puissants), manipulations anodines, violences verbales hyperboliques au moindre désaccord, non-respect de limites posées clairement, voire &lt;em&gt;gaslighting&lt;&#x2F;em&gt; évident. Pour la comédie romantique choupi de Noël, on repassera 🤮&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;f417eaf1-49ea-4be1-970c-8133750cebe6&quot;&gt;Ep. 299: Our Love&#x2F;Hate Relationship with Personal Productivity - Deep Questions with Cal Newport&lt;&#x2F;a&gt; : un historique récent de l’histoire moderne du concept de « productivité », au travers du prisme de la Silicon Valley, par… un auteur de livres de productivité de la Silicon Valley. Ne vous attendez pas à un contenu sociologique riche ; il s’agit plutôt d’une vague analyse des tendances des 20 dernières années. Intéressant de noter que l’on tire de plus en plus vers de la productivité qui fait « sens » (accomplit les gens), plutôt qu’une recherche désespérée de production à tout prix, voire l’abandon de la recherche de productivité (dans un courant marxiste&#x2F;nihiliste). À mettre en relation avec le &lt;em&gt;zeitgeist&lt;&#x2F;em&gt; antiwork&#x2F;changement climatique&#x2F;confinements.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;flathub.org&#x2F;apps&#x2F;io.github.efogdev.mpris-timer&quot;&gt;MPRIS Timer&lt;&#x2F;a&gt; est une application de minuteur pour l’environnement de bureau GNOME (Linux), qui utilise les contrôles médias pour mettre en pause et reprendre un &lt;em&gt;timer&lt;&#x2F;em&gt; en cours. Malin 🤓&lt;&#x2F;li&gt;
&lt;li&gt;Des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;european-alternatives.eu&#x2F;alternatives-to&quot;&gt;alternatives européennes&lt;&#x2F;a&gt; à des produits tech américains. Très chouette de voir Element (le produit sur lequel je bosse, au sens large) mis en avant comme alternative à Teams (mais pas à WhatsApp, étrangement 🤔) ; c’est effectivement créé en France et au Royaume-Uni principalement.&lt;&#x2F;li&gt;
&lt;li&gt;Les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;grisebouille.net&#x2F;illustrations-pour-mediation-numerique&#x2F;&quot;&gt;illustrations&lt;&#x2F;a&gt; faites par l’ami Gee pour la médiation numérique, très chouettes.&lt;&#x2F;li&gt;
&lt;li&gt;En Python, les modules publiés s’appellent des &lt;em&gt;wheels&lt;&#x2F;em&gt;. Pourquoi donc ? Initialement, Pypi s’appelait &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.python.org&#x2F;moin&#x2F;CheeseShop&quot;&gt;&lt;em&gt;Cheese Shop&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, en référence à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Hz1JWzyvv8A&quot;&gt;un sketch des Monty Python&lt;&#x2F;a&gt; ; et que stocke-t-on dans un magasin de fromage ? Des meules, soit en anglais, &lt;em&gt;wheels&lt;&#x2F;em&gt; (&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=AQsZsgJ30AE&amp;amp;t=886s&quot;&gt;source&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stretchmytimeoff.com&#x2F;&quot;&gt;Stretch my time off&lt;&#x2F;a&gt; permet d’optimiser la durée de ses congés, en fonction des jours fériés nationaux. En plus de fonctionner avec les congés français, ça marche également pour d’autres pays. L’idée, c’est qu’une semaine où il y a un jour férié, vous pouvez poser 4 jours au lieu de 5 (si vous travaillez à temps plein), ce qui vous fait économiser un jour de congé et avoir 9 jours de pause en échange (en incluant les week-ends avant&#x2F;après). Alors ce que tout le monde fait naturellement, le site Web propose d’industrialiser le traitement. Pourquoi pas !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=0KbD1Z91cxw&quot;&gt;Bernard Friot x ASMR&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Les livreur·ses de journaux de Ouest France partagent des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.ouest-france.fr&#x2F;communaute&#x2F;galerie-photo&#x2F;2024-10-14-concours-photo-porteurs-80-ans&#x2F;&quot;&gt;photos matinales de leurs livraisons&lt;&#x2F;a&gt; 🤩&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Le monde sans fin - notes de lecture</title>
        <published>2024-11-16T00:00:00+00:00</published>
        <updated>2024-11-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/mondesansfin/"/>
        <id>https://bouvier.cc/notes/mondesansfin/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/mondesansfin/">&lt;p&gt;Voici mes notes de lecture de la BD &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Le_Monde_sans_fin&quot;&gt;Le monde sans fin&lt;&#x2F;a&gt;, avec un dessin de Christophe Blain, qui discute du changement climatique avec Jean-Marc Jancovici. Paru en 2022, je crois qu’on me l’a offert cette année-là, et je viens seulement de le lire, oops.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Même en étant relativement baigné au sein d’un milieu et d’un environnement très au courant du changement climatique, où on en parle beaucoup, etc., j’ai été un peu secoué par cette lecture. À ce titre, je pense qu’il est nécessaire d’en parler, de faire tourner la BD &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, de parler des solutions évoquées en fin de livre. Même si certains points peuvent paraître techno-solutionnistes aux premiers abords, on est très très loin de la science-fiction (des solutions existent et peuvent être mises en place maintenant), et la nuance apportée par l’analyse constante des avantages vs inconvénients rend le tout très pragmatique à mes yeux.&lt;&#x2F;p&gt;
&lt;p&gt;Je vous partage donc mes notes de lecture, un peu brutes, très denses volontairement, sur les statistiques et sujets qui m’ont interpellé. Je n’avais pas prévu de les partager initialement, mais l’importance du sujet me fait me dire que si j’arrive à vous donner envie de creuser un sujet, de lire toute la BD, de remettre en question une préconception, ça sera toujours ça de gagné collectivement 😊.&lt;&#x2F;p&gt;
&lt;p&gt;Bonne lecture !&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;ul&gt;
&lt;li&gt;6 : ouhlala ça part en culte de la personnalité de Jancovici ?
&lt;ul&gt;
&lt;li&gt;A cofondé le &lt;em&gt;Shift project&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;A cofondé &lt;em&gt;Carbone4&lt;&#x2F;em&gt;, cabinet de conseil stratégie bas carbone et changement climatique&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;8 : Jancovici a créé le concept de &lt;em&gt;bilan carbone&lt;&#x2F;em&gt; réutilisé globalement&lt;&#x2F;li&gt;
&lt;li&gt;14 : énergie = entre 5 à 7% des revenus français (2020)
&lt;ul&gt;
&lt;li&gt;5% du PIB mondial&lt;&#x2F;li&gt;
&lt;li&gt;énergie primaire = qu’on trouve dans la nature = charbon, pétrole, gaz&lt;&#x2F;li&gt;
&lt;li&gt;électricité n’en est pas une, elle est un produit de la transformation d’une énergie primaire&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;15 : 5% des coûts de la SNCF = achat d’énergie, mais si on lui enlève, elle perd 100% de sa valeur.&lt;&#x2F;li&gt;
&lt;li&gt;18 : énergie = quantification des changements d’état (température, vitesse, forme)
&lt;ul&gt;
&lt;li&gt;mesure la transformation du monde qui nous entoure&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;19 : loi de conservation de l’énergie : à l’intérieur d’un système qui ne communique pas avec l’extérieur, on ne peut ni créer ni détruire de l’énergie.&lt;&#x2F;li&gt;
&lt;li&gt;21 : notion de convertisseur d’énergie en une autre
&lt;ul&gt;
&lt;li&gt;un humain convertit ce qu’il consomme (nourriture) en force physique (énergie &lt;em&gt;mécanique&lt;&#x2F;em&gt;) + chaleur&lt;&#x2F;li&gt;
&lt;li&gt;autres exemples : moulin, animaux de ferme, moteurs&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;27 : mesure de l’énergie = joule.
&lt;ul&gt;
&lt;li&gt;1 joule = 100g qui montent d’1 mètre environ (soulever une tablette de chocolat d’environ 1 mètre)&lt;&#x2F;li&gt;
&lt;li&gt;1 L d’essence qui brûle = 36M de joules = 10 kWh
&lt;ul&gt;
&lt;li&gt;combustion d’essence = énergie &lt;em&gt;thermique&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;1 kWh = énergie pour alimenter une machine de puissance 1kW pendant 1h&lt;&#x2F;li&gt;
&lt;li&gt;puissance = énergie &#x2F; temps
&lt;ul&gt;
&lt;li&gt;plus une machine est &lt;em&gt;puissante&lt;&#x2F;em&gt;, plus elle « transforme le monde » (consomme de l’énergie) en peu de temps&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;28 : travailleur de force (humain) peut fournir entre 10 et 100kWh par &lt;em&gt;an&lt;&#x2F;em&gt;
&lt;ul&gt;
&lt;li&gt;1L d’essence = 10 kWh d’énergie thermique, transformés en 3 à 4 kWh d’énergie mécanique, en comparaison, pour 1.5€ environ (2020)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;30 : pas d’énergie verte, toute source devient sale à grande échelle
&lt;ul&gt;
&lt;li&gt;choisir une source d’énergie, c’est un arbitrage&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;33 : énergie est gratuite, ce qu’on paye c’est le travail pour l’extraire
&lt;ul&gt;
&lt;li&gt;critères d’une énergie « pratique » 
&lt;ul&gt;
&lt;li&gt;très concentrée&lt;&#x2F;li&gt;
&lt;li&gt;peu de barrières séparant l’accès à la source&lt;&#x2F;li&gt;
&lt;li&gt;facile à utiliser&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Le pétrole est une énergie &lt;em&gt;très&lt;&#x2F;em&gt; pratique 😭&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;34 : coût de l’éolien sans stockage : 4 à 6c le kWh
&lt;ul&gt;
&lt;li&gt;avec stockage (batteries) : multiplié par 3 ou 4, environ 15c&lt;&#x2F;li&gt;
&lt;li&gt;pétrole : 0.3c par kWh&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;37 : comparaison énergie fournies
&lt;ul&gt;
&lt;li&gt;humains : jambes =~ 100W, bras =~ 10W&lt;&#x2F;li&gt;
&lt;li&gt;tracteur = 60 kW&lt;&#x2F;li&gt;
&lt;li&gt;engins de chantier = 100 kW&lt;&#x2F;li&gt;
&lt;li&gt;camion = 400 kW&lt;&#x2F;li&gt;
&lt;li&gt;avion = 100 000 kW = 100 MW&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;38 : la conso de bois n’a fait que baisser au cours du temps&lt;&#x2F;li&gt;
&lt;li&gt;39 : la conso de charbon n’a fait qu’augmenter au cours du temps (~5000 kWh par terrien par an)
&lt;ul&gt;
&lt;li&gt;charbon = énergie qui produit le plus de CO2&#x2F;kWh&lt;&#x2F;li&gt;
&lt;li&gt;centrales à charbon mondiales = 40 fois la puissance des centrales nucléaires françaises&lt;&#x2F;li&gt;
&lt;li&gt;toutes les centrales à charbon doivent avoir disparu pour 2050, si on veut limiter à 2C le réchauffement climatique&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;41 : l’essence l’a emporté sur l’électricité, pour les moteurs de voiture, car plus facile à transporter
&lt;ul&gt;
&lt;li&gt;l’essence est liquide à température ambiante&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;42 : chaque terrien consomme environ 22 000 kWh par an
&lt;ul&gt;
&lt;li&gt;équivalent à 200 esclaves qui travaillent pour nous tout le temps 😱&lt;&#x2F;li&gt;
&lt;li&gt;sans machine, il faudrait 1400 milliards d’humains sur terre
&lt;ul&gt;
&lt;li&gt;(+ les humains pour répondre aux besoins des nouveaux humains = infini)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;43 : 22 000 kWh&#x2F;an = environ 200 esclaves
&lt;ul&gt;
&lt;li&gt;si 1 esclave a une puissance de 100W, alors un 1 esclave annuel = 876 kWh
&lt;ul&gt;
&lt;li&gt;~25 esclaves par an&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;or, Janco dit 8x plus 👀
&lt;ul&gt;
&lt;li&gt;si on prendre 220 jours travaillés annuels, à 7h&#x2F;jour, 143 esclaves&lt;&#x2F;li&gt;
&lt;li&gt;p28 : 1 travailleur de force = entre 10 et 100 kWh &lt;em&gt;par an&lt;&#x2F;em&gt; ✅&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;45 : machines modernes nécessitent du pétrole, énergie qui provient du sous-sol, donc libèrent de la surface au sol
&lt;ul&gt;
&lt;li&gt;énergies renouvelables nécessitent de la surface au sol
&lt;ul&gt;
&lt;li&gt;ravivent conflits sur les territoires&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;46 : France = 3x la moyenne mondiale, donc ~66 000 kWh&#x2F;an (~600 esclaves)&lt;&#x2F;li&gt;
&lt;li&gt;47 : ce ne sont pas les petits gestes et petites solutions qui aident
&lt;ul&gt;
&lt;li&gt;vrai impact = chauffage, déplacement, mode de consommation&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;51 : augmentation de la quantité de mouvement produite par même quantité d’énergie absorbée (&lt;em&gt;rendement&lt;&#x2F;em&gt; qui augmente, donc ?)
&lt;ul&gt;
&lt;li&gt;mais parc de machines augmente en taille en contrepartie&lt;&#x2F;li&gt;
&lt;li&gt;entre 1930 et 2000, x10 sur la conso d’énergie des machines, x50 sur la puissance&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;59 : (thèse principale) le passage de la civilisation renouvelable (pré industrialisation, donc force de travail = mécanique humaine animale principalement) à civilisation fossile a permis la multiplication d’actions sur l’environnement, par un ordre de grandeur de plusieurs centaines
&lt;ul&gt;
&lt;li&gt;proportionnellement, création des sous-produits indésirables de cette capacité d’action&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;62 : avant mécanisation, l’outil est un auxiliaire de l’homme ; après mécanisation, c’est l’inverse.&lt;&#x2F;li&gt;
&lt;li&gt;66 : la part du nombre de personnes travaillant dans l’agriculture et l’industrie n’a fait que baisser, la part dans le tertiaire ne fait qu’augmenter (biais pays « développés »)&lt;&#x2F;li&gt;
&lt;li&gt;67 : part de personnes dans le tertiaire a augmenté, en parallèle de la création de CO2 émis par personne
&lt;ul&gt;
&lt;li&gt;donc les emplois de service ne sont pas la clé d’un monde « sobre »&lt;&#x2F;li&gt;
&lt;li&gt;« c’est l’inverse : plus un système est fait d’objets nombreux et complexes, plus on a besoin de gens pour s’en occuper »&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;69 : comparaison des émissions en équivalent CO2 de plusieurs types d’aliments
&lt;ul&gt;
&lt;li&gt;les machines au service de l’agriculture ont permis d’augmenter le rendement des surfaces cultivées&lt;&#x2F;li&gt;
&lt;li&gt;80% de ce qui pousse en France sert à nourrir les animaux, 50% du blé&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;70 : poids de la valeur réelle de la nourriture dans la grande distrib : entre 3 et 30% de la facture payée 😨
&lt;ul&gt;
&lt;li&gt;reste des coûts : publicité, salaire des caissiers&#x2F;magasiniers&#x2F;livreurs&#x2F;ingénieurs qui ont bossé sur le système de paiement, revenus actionnaires…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;72 : plus un moyen de transport est récent, plus il pollue
&lt;ul&gt;
&lt;li&gt;un aller-retour Paris New-York en avion = 300 à 400L de pétrole par personne
&lt;ul&gt;
&lt;li&gt;1 baignoire de pétrole 🤯&lt;&#x2F;li&gt;
&lt;li&gt;conso annuelle d’une personne qui prend sa voiture tous les jours&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;74 : plus de terriens vivent en ville =&amp;gt; plus d’émissions de CO2 par habitant par an
&lt;ul&gt;
&lt;li&gt;Un peu rapide comme raccourci, et deuxième fois qu’il le fait ? 🧐&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;76 : les machines libèrent du temps libre
&lt;ul&gt;
&lt;li&gt;pour les loisirs, + moderne = + énergivore&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;77 : augmentation de la durée de vie, du revenu individuel ; diminution du temps de travail&lt;&#x2F;li&gt;
&lt;li&gt;84 : Jean-Baptiste Say, un des pères fondateurs des sciences économiques, déclare que les ressources sont inépuisables, par manque de connaissances à l’époque principalement
&lt;ul&gt;
&lt;li&gt;seul le travail humain est limité, donc à étudier (« valeur du travail »)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;86 : économistes modernes pensent toujours pareil, et partent du postulat d’une croissance infinie (quitte à réinjecter de l’argent dans le système)
&lt;ul&gt;
&lt;li&gt;n’imaginent pas l’idée d’une pénurie de ressources naturelles&lt;&#x2F;li&gt;
&lt;li&gt;ignorants d’abord, puis dans le déni&lt;&#x2F;li&gt;
&lt;li&gt;« croissance à tout prix » devenue un dogme politique&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;88 : consommation d’énergie mondiale est un bon indicateur de l’évolution du PIB mondial&lt;&#x2F;li&gt;
&lt;li&gt;92 : pétrole = plancton des océans tombée sur le plancher océanique
&lt;ul&gt;
&lt;li&gt;puis recouverts par des minéraux, restes de coquilles, alluvions, poussières&lt;&#x2F;li&gt;
&lt;li&gt;puis entrainés vers les profondeurs par la tectonique des plaques,&lt;&#x2F;li&gt;
&lt;li&gt;puis décomposés dans des poches souterraines de la &lt;em&gt;roche mère&lt;&#x2F;em&gt; (résidus minéraux agglomérés) sous forme de gaz &#x2F; huile (+ autres produits inexploitables)&lt;&#x2F;li&gt;
&lt;li&gt;sous l’effet de la pression, le gaz et l’huile remontent à la surface à travers la roche mère ; le gaz s’évapore, l’huile décomposée se fait manger par les bactéries&lt;&#x2F;li&gt;
&lt;li&gt;mais si la roche au dessus est imperméable, les gaz&#x2F;huiles sont bloqués dans une &lt;em&gt;roche réservoir&lt;&#x2F;em&gt; = piégée sous terre = puits de pétrole&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;95 : gaz de schiste &#x2F; fracking (USA principalement)
&lt;ul&gt;
&lt;li&gt;pétrole contenu dans de la roche mère imperméable&lt;&#x2F;li&gt;
&lt;li&gt;forage en coude sous la terre (d’abord vertical, puis horizontal), avec des &lt;em&gt;fractures&lt;&#x2F;em&gt; causées par de l’eau sous pression (dans lequel on injecte du sable, pour éviter que les fissures se referment) pour récupérer de l’huile&lt;&#x2F;li&gt;
&lt;li&gt;demande trop de moyens pour l’extraction, coûts &amp;gt; revenus, arrêté en 2020&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;97 : sables bitumeux : du pétrole accumulé dans du sable
&lt;ul&gt;
&lt;li&gt;a perdu ses composants volatils pour devenir un bitume&lt;&#x2F;li&gt;
&lt;li&gt;mines à ciel ouvert (Canada &#x2F; Venezuela)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;98 : pas de lien entre volume de pétrole produit et prix du baril au litre, même pas une vague corrélation
&lt;ul&gt;
&lt;li&gt;principe économique que le prix est déterminé par offre et demande ne s’applique pas 🙃&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;99 : économie entièrement dépendante du transport, notamment voiture individuelle (« vie de tous les jours ») et camions (transports de marchandises)&lt;&#x2F;li&gt;
&lt;li&gt;100 : pourquoi pas des voitures à gaz ?
&lt;ul&gt;
&lt;li&gt;dans un même volume de gaz, 1000x moins de kWh que le pétrole&lt;&#x2F;li&gt;
&lt;li&gt;dur à transporter : soit tuyaux, soit méthanier (bateau, avec usine de liquéfaction au départ et de re-gazéification à l’arrivée)&lt;&#x2F;li&gt;
&lt;li&gt;GPL = gaz de pétrole liquéfié&lt;&#x2F;li&gt;
&lt;li&gt;aubaine pour les producteurs de pétrole, car sous-produit de l’extraction pétrolière, inutilisé auparavant&lt;&#x2F;li&gt;
&lt;li&gt;transport du GPL compliqué, donc principalement régional&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;102 : charbon
&lt;ul&gt;
&lt;li&gt;fougères fossilisées&lt;&#x2F;li&gt;
&lt;li&gt;très lourd, donc très dur à transporter
&lt;ul&gt;
&lt;li&gt;possible de l’utiliser pour bateaux ou trains car peu de frottement&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;donc centrales proches des mines&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;103 : 40% des émissions mondiales de CO2 sont dues à la production d’électricité fossile (charbon, gaz, pétrole)
&lt;ul&gt;
&lt;li&gt;dont 33% pour le charbon&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;climat-106&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#climat-106&quot; aria-label=&quot;Anchor link for: climat-106&quot;&gt;🔗&lt;&#x2F;a&gt;Climat (106)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Effet de serre
&lt;ul&gt;
&lt;li&gt;Le soleil envoie des rayonnements sur Terre qui dégagent de la chaleur&lt;&#x2F;li&gt;
&lt;li&gt;La Terre renvoie une partie de ces rayonnements&lt;&#x2F;li&gt;
&lt;li&gt;qui sont bloqués par les gaz à effet de serre&lt;&#x2F;li&gt;
&lt;li&gt;Phénomène nécessaire pour la vie en général (à savoir, maintenir une température OK dans les zones à l’ombre)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Gaz à effet de serre produits par l’humanité
&lt;ul&gt;
&lt;li&gt;CO2
&lt;ul&gt;
&lt;li&gt;85% : utilisation de combustibles fossiles&lt;&#x2F;li&gt;
&lt;li&gt;10% : déforestation (du fait que les forêts capturent le CO2)&lt;&#x2F;li&gt;
&lt;li&gt;5% : fabrication du ciment&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Méthane CH4
&lt;ul&gt;
&lt;li&gt;32% : Estomacs des ruminants, via les rôts (pas les pets !)&lt;&#x2F;li&gt;
&lt;li&gt;23% : Rizières&lt;&#x2F;li&gt;
&lt;li&gt;15% : exploitation du charbon (le fameux gaz qu’on ventile pour éviter les coups de grisou)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Protoxyde d’azote NO2&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;108 : échanges de CO2
&lt;ul&gt;
&lt;li&gt;Le CO2 est inerte tant qu’il n’entre pas en contact avec le sol&lt;&#x2F;li&gt;
&lt;li&gt;Mais fait partie d’un cycle : il est absorbé et ré-émis au cours du temps&lt;&#x2F;li&gt;
&lt;li&gt;L’humanité cause un surplus de CO2
&lt;ul&gt;
&lt;li&gt;Au bout de 100 ans, il reste 40% du surplus de CO2&lt;&#x2F;li&gt;
&lt;li&gt;1000 ans, 20%&lt;&#x2F;li&gt;
&lt;li&gt;10000 ans, 10%&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;L’océan absorbe le CO2 &lt;em&gt;si&lt;&#x2F;em&gt; il y a surplus dans l’atmosphère &lt;em&gt;et&lt;&#x2F;em&gt; il y a de la place dans les océans
&lt;ul&gt;
&lt;li&gt;Phénomène réversible, dans les conditions inverses&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Les plantes absorbent du CO2 pour se nourrir ; et le rejettent quand elles respirent, ou meurent (feux de forêt particulièrement grave à cause de ça)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;109 : vapeur d’eau aussi un gaz à effet de serre
&lt;ul&gt;
&lt;li&gt;principalement dû à l’évaporation des océans, en cycle court&lt;&#x2F;li&gt;
&lt;li&gt;impact indirect de l’humain : plus il fait chaud, plus il y a d’évaporation
&lt;ul&gt;
&lt;li&gt;plus il y a de vapeur d’eau =&amp;gt; effet d’emballement&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;111 : la température augmentera de 1.5x à 2x plus vite sur les continents que sur les océans. Avec le réchauffement global, nous gagnerons plutôt entre 5 et 10C.
&lt;ul&gt;
&lt;li&gt;De plus en plus de canicules, plus longues, avec des températures de plus en plus élevées&lt;&#x2F;li&gt;
&lt;li&gt;Épisodes de froid extrême tardif, moins fréquents que les canicules&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;113 : carte du monde du nombre de jours où il sera impossible de survivre en extérieur, en cas de réchauffement &lt;em&gt;moyen&lt;&#x2F;em&gt; de 4C par rapport à aujourd’hui
&lt;ul&gt;
&lt;li&gt;Équateur extrêmement en danger, à cause d’un surplus d’humidité&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Carte du monde de l’évolution de l’humidité des sols ; l’Europe s’assèche !
&lt;ul&gt;
&lt;li&gt;Moins d’humidité = moins de rendement pour l’agriculture = famine = déplacements migratoires ou grosse mortalité&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;114
&lt;ul&gt;
&lt;li&gt;les microbes aiment les environnements chauds et humides = des maladies tropicales “remontent” au Nord&lt;&#x2F;li&gt;
&lt;li&gt;plus de CO2 dans les océans = acidification = grosse pression pour la survie des coquillages &#x2F; planctons &#x2F; écosystèmes marins&lt;&#x2F;li&gt;
&lt;li&gt;fonte du Groenland, du permafrost qui contient des gaz à effet de serre (risque d’amplification, impossible à évaluer)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;117 : différence de température entre basse atmosphère (troposphère, qui contient les gaz à effet de serre) et haute atmosphère (stratosphère) causent les phénomènes de vents violents (tornades, ouragans, etc.).&lt;&#x2F;li&gt;
&lt;li&gt;120 : l’énergie permet à court terme de contrer les effets négatifs du réchauffement climatique
&lt;ul&gt;
&lt;li&gt;d’où le fait qu’un ouragan cause « peu » de morts aux USA mais énormément au Bangladesh : dépend du fait d’avoir des secours qu’on peut véhiculer rapidement, des hôpitaux, une capacité à reconstruire rapidement etc.&lt;&#x2F;li&gt;
&lt;li&gt;on peut se prémunir des risques en s’adaptant à l’environnement&lt;&#x2F;li&gt;
&lt;li&gt;mais accumulation de la dépendance à l’énergie !
&lt;ul&gt;
&lt;li&gt;de plus en plus de déchêts, alors qu’on va avoir de moins en moins d’énergie&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;121 : fin 2018, 2250 Gt de CO2 dans l’atmosphère = +1.3C de réchauffement inévitable
&lt;ul&gt;
&lt;li&gt;Pour ne pas dépasser les +2C, rester en dessous de 3000 Gt&lt;&#x2F;li&gt;
&lt;li&gt;Émissions de gaz à effet de serre doivent diminuer de 4% par an
&lt;ul&gt;
&lt;li&gt;équivalent à 1 COVID (confinement, j’imagine) par an 😅&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;122 : équation de l’émission des gaz à effet de serre, par Yoichi Kaya
&lt;ul&gt;
&lt;li&gt;GES = (GES&#x2F;E) x (E&#x2F;PIB) x (PIB&#x2F;POP) x POP&lt;&#x2F;li&gt;
&lt;li&gt;E = énergie
&lt;ul&gt;
&lt;li&gt;GES&#x2F;E = quantité de GES émise par une quantité donnée d’énergie&lt;&#x2F;li&gt;
&lt;li&gt;E&#x2F;PIB = énergie nécessaire à la production totale de biens et services dans le monde&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;POP = population&lt;&#x2F;li&gt;
&lt;li&gt;Baisser les gaz à effet de serre, c’est faire levier sur ces composantes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;123 : réduire la population ?
&lt;ul&gt;
&lt;li&gt;famine&#x2F;pandémie&#x2F;guerre 😟 (météorite wtf)&lt;&#x2F;li&gt;
&lt;li&gt;contrôle des naissances = sujet « merdeux »&lt;&#x2F;li&gt;
&lt;li&gt;donc à population constante, chacune des autres composantes doit baisser d’un facteur 3.75.
&lt;ul&gt;
&lt;li&gt;Moins de croissance ? En France, stabilité du régime de retraite basé sur une croissance à 2%&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;125 : pauvreté et sobriété sont deux manières de « consommer moins » : l’une subie, l’autre choisie.
&lt;ul&gt;
&lt;li&gt;Sobriété est « organisée »&lt;&#x2F;li&gt;
&lt;li&gt;Pauvreté s’accompagne de déstabilisation sociale (situation à la Mad Max)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;energies-non-carbonees-126&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#energies-non-carbonees-126&quot; aria-label=&quot;Anchor link for: energies-non-carbonees-126&quot;&gt;🔗&lt;&#x2F;a&gt;Énergies non carbonées (126)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Éolien, solaire, hydroélectricité, nucléaire
&lt;ul&gt;
&lt;li&gt;Ne &lt;em&gt;remplacent&lt;&#x2F;em&gt; pas des consommations d’énergie existantes, mais s’y &lt;em&gt;ajoutent&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;et les sources fossiles n’ont fait que croître, historiquement&lt;&#x2F;li&gt;
&lt;li&gt;Peu denses, diffuses, prennent beaucoup de place&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;127 : énergie renouvelable (ENR) &lt;em&gt;pilotable&lt;&#x2F;em&gt; = à la demande : hydroélectrique, nucléaire
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;fatale&lt;&#x2F;em&gt; = dépend des conditions extérieures (vent, soleil) = éolien, solaire&lt;&#x2F;li&gt;
&lt;li&gt;Il faut du &lt;em&gt;pilotable&lt;&#x2F;em&gt; pour pouvoir supplanter au &lt;em&gt;fatal&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;128 : « je sens que tu vas me vendre des centrales nucléaires » — « l’enjeu est de remettre les problèmes dans l’ordre »&lt;&#x2F;li&gt;
&lt;li&gt;129 
&lt;ul&gt;
&lt;li&gt;explication de la réaction en chaîne (nucléaire)&lt;&#x2F;li&gt;
&lt;li&gt;pour avoir une réaction &lt;em&gt;stable&lt;&#x2F;em&gt; (pas d’emballement), barres de contrôles qui absorbent les neutrons en excès&lt;&#x2F;li&gt;
&lt;li&gt;en France, utilisation d’uranium 235 à 3%, &lt;em&gt;enrichi&lt;&#x2F;em&gt;, pas de risque d’explosion&lt;&#x2F;li&gt;
&lt;li&gt;énergie &lt;em&gt;très concentrée&lt;&#x2F;em&gt; = toute petite quantité de matière produit une très grande quantité d’énergie
&lt;ul&gt;
&lt;li&gt;contrairement au solaire&#x2F;éolien
&lt;ul&gt;
&lt;li&gt;nécessite beaucoup de surface&lt;&#x2F;li&gt;
&lt;li&gt;nécessite beaucoup de matériaux de construction (métal, ciment)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;132 : coûts en amont de l’utilisation de l’uranium (analyse du cycle de vie)
&lt;ul&gt;
&lt;li&gt;extraction (mines), enrichissement, construction (béton pour la centrale)
&lt;ul&gt;
&lt;li&gt;très bas, par rapport à la quantité d’énergie produite = au final, peu de CO2 par kWh = 6g de CO2 &#x2F; kWh&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;éolienne : 10g de CO2 &#x2F; kWh&lt;&#x2F;li&gt;
&lt;li&gt;solaire : 20 à 50g&lt;&#x2F;li&gt;
&lt;li&gt;charbon : 800 à 1000g&lt;&#x2F;li&gt;
&lt;li&gt;gaz : 400g&lt;&#x2F;li&gt;
&lt;li&gt;hydroélectrique : 6g 🤯&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;133 : stockage nécessite des batteries, qui nécessitent de la chimie et métallurgie
&lt;ul&gt;
&lt;li&gt;50 à 100g de CO2&#x2F;kWh stocké et restitué&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;135 : radioactivité mesurée en &lt;em&gt;Sieverts&lt;&#x2F;em&gt;, unité &lt;code&gt;Sv&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;rayonnement naturel cosmique, en France : 3 mSv&#x2F;an
&lt;ul&gt;
&lt;li&gt;plus élevé en altitude (entre 5 et 20mSv&#x2F;an pour des pilotes d’avion)&lt;&#x2F;li&gt;
&lt;li&gt;plus élevé près de roches naturellement radioactives
&lt;ul&gt;
&lt;li&gt;granit en Bretagne 😨&lt;&#x2F;li&gt;
&lt;li&gt;Kerala en Inde, entre 50 et 100 mSv &#x2F; an&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;scanner = entre 10 et 20 mSv&lt;&#x2F;li&gt;
&lt;li&gt;radiothérapie = quelques 10aines ou 100aines de Sv pour tuer une tumeur
&lt;ul&gt;
&lt;li&gt;localisé, j’imagine ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Risques
&lt;ul&gt;
&lt;li&gt;moins de 200 mSv dans l’année = aucun risque à court ou long terme&lt;&#x2F;li&gt;
&lt;li&gt;risque de mort dans de brefs délais à 5 ou 10 Sv&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;plusieurs pages sur les accidents, pourquoi le risque est très bas pour les centrales françaises, pourquoi il y en a eu à Tchernobyl &#x2F; Fukushima, conséquences dans les deux villes
&lt;ul&gt;
&lt;li&gt;UNSCEAR ~= GIEC du nucléaire&lt;&#x2F;li&gt;
&lt;li&gt;142 : explication de l’accident de Fukushima&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;144 : conséquence de l’accident de Fukushima : + psychologique et politique, qu’environnemental
&lt;ul&gt;
&lt;li&gt;L’Allemagne diminue son approvisionnement en nucléaire et remet en route des centrales à charbon en 2021 🤦&lt;&#x2F;li&gt;
&lt;li&gt;800 Mt de CO2 produites qui auraient pu être évitées&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;145 : Nucléaire présenté comme une solution pragmatique, + sécurisée&lt;&#x2F;li&gt;
&lt;li&gt;146 : tous les déchêts nucléaires dangereux, à vie très longue, jamais produits, tiennent dans une piscine olympique (&amp;lt; 3500m3)
&lt;ul&gt;
&lt;li&gt;ce qui prend de la place, c’est le contenant (« colis »), cylindre en inox qui contient les déchêts fondus et vitrifiés&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;148 : pas de risque de polluer les nappes phréatiques avec des déchêts enfouis, car enfoui beaucoup plus bas sous Terre, et la terre bloque toute radioactivité
&lt;ul&gt;
&lt;li&gt;à l’heure actuelle, assez d’uranium pour faire fonctionner le parc quelques centaines d’années&lt;&#x2F;li&gt;
&lt;li&gt;génération suivante de réacteurs (avec surgénérateurs, utilisant de l’uranium 238 appauvri) permettrait des milliers d’années, en produisant 100x plus d’énergie par quantité d’uranium&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;150 : en France, en hiver, par vent de Nord-Est, on hérite des particules fines émises par la production des centrales à charbon allemandes et polonaises.&lt;&#x2F;li&gt;
&lt;li&gt;152 : construction du nucléaire = temps long
&lt;ul&gt;
&lt;li&gt;Risques de non-aboutissements à cause de changements politiques&lt;&#x2F;li&gt;
&lt;li&gt;Donc banques refusent de prêter, à cause du risque de défaut
&lt;ul&gt;
&lt;li&gt;parce que oui, la production d’électricité nucléaire est privatisée 😥&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;153 : auparavant, EDF = monopole d’état gérant la production et la distribution
&lt;ul&gt;
&lt;li&gt;Démantelé à cause de l’UE qui voulait de la &lt;em&gt;concurrence&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;155
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;monopole naturel&lt;&#x2F;em&gt; = ça n’a pas de sens d’avoir de la concurrence dans le domaine en question
&lt;ul&gt;
&lt;li&gt;hôpital, électricité, eau, transports (train)… tous les projets d’infrastructure lourde.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;expérience montre que démantèlement coûte + cher et fonctionne - bien.
&lt;ul&gt;
&lt;li&gt;LOLOLOL SNCF&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;158 : quand il y a du nucléaire en plus d’ENR, on a tendance à arrêter le nucléaire quand les ENRs produisent
&lt;ul&gt;
&lt;li&gt;mais coût d’infra du nucléaire constant, qu’il y ait production ou non&lt;&#x2F;li&gt;
&lt;li&gt;donc maintenance plus difficile à financer&lt;&#x2F;li&gt;
&lt;li&gt;l’adossement est un &lt;em&gt;risque&lt;&#x2F;em&gt; pour le nucléaire !
&lt;ul&gt;
&lt;li&gt;« on ne remplace pas un système par un autre, on ajoute un système sur un autre »&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;compagnies de gaz se frottent les mains de l’arrivée des ENR, car gaz = énergie pilotable la moins chère à construire 🙃&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;160 : les ENRs ont aussi des défauts
&lt;ul&gt;
&lt;li&gt;Hydroélectrique perturbe les écosystèmes fluviaux, noie des surfaces&lt;&#x2F;li&gt;
&lt;li&gt;Solaire artificialise des surfaces importantes&lt;&#x2F;li&gt;
&lt;li&gt;Éolien demande beaucoup d’espace, dégrade les sols agricoles, gêne des écosystèmes aériens&lt;&#x2F;li&gt;
&lt;li&gt;S + E nécessitent du métal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Arbitrage : avec l’énergie qu’on utilise pour 8G d’habitant·es sur Terre, il faut choisir ses inconvénients&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;la-culpabilite-l-agriculture&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-culpabilite-l-agriculture&quot; aria-label=&quot;Anchor link for: la-culpabilite-l-agriculture&quot;&gt;🔗&lt;&#x2F;a&gt;La culpabilité &#x2F; l’agriculture&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;165 : culpabilité est inhibitrice de l’action
&lt;ul&gt;
&lt;li&gt;nécessaire que chaque Français·e divise par 2 ou 3 la quantité de viande&#x2F;produits laitiers consommée.&lt;&#x2F;li&gt;
&lt;li&gt;manger moins mais de meilleure qualité ~= même coût pour les ménages&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;167 : garantir une meilleure rémunération des producteur·ices
&lt;ul&gt;
&lt;li&gt;avec labels comme AOP, bio…&lt;&#x2F;li&gt;
&lt;li&gt;État pourrait absorber dettes et proposer reconversions&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;169 : relocaliser&#x2F;prioriser la production &lt;em&gt;locale&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;170 : écoles d’agro devraient avoir des dizaines d’heures de cours sur le changement climatique et ses conséquences sur l’agriculture et les forêts
&lt;ul&gt;
&lt;li&gt;ne pas faire porter le chapeau aux producteur·s non-bio : iels ont implémenté une volonté collective d’il y a 40 ans !&lt;&#x2F;li&gt;
&lt;li&gt;volonté collective passe par la consommation, qui dirige la production&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;les-transports-172&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#les-transports-172&quot; aria-label=&quot;Anchor link for: les-transports-172&quot;&gt;🔗&lt;&#x2F;a&gt;Les transports (172)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;45Mt pétrole&#x2F;an en France
&lt;ul&gt;
&lt;li&gt;50% voiture, 10% aérien, 17% transport logistique, 18% utilitaire&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;173 : Avion n’a pas de concurrence pour les trajets longue distance, souvent de loisirs
&lt;ul&gt;
&lt;li&gt;Tandis qu’il &lt;em&gt;peut&lt;&#x2F;em&gt; être possible de prendre le train plutôt que la voiture&lt;&#x2F;li&gt;
&lt;li&gt;Supprimer les déplacements &lt;em&gt;business&lt;&#x2F;em&gt; en avion&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;174 : 10% des trajets en voiture sont professionnels =&amp;gt; principalement du loisir
&lt;ul&gt;
&lt;li&gt;il faudrait tripler le nombre de passagers par train, construire plus de trains, mieux remplir les autocars&lt;&#x2F;li&gt;
&lt;li&gt;comparaison coût : 150G€ pour
&lt;ul&gt;
&lt;li&gt;doubler tout le réseau ferroviaire français (impact très fort)&lt;&#x2F;li&gt;
&lt;li&gt;subventionner éolien et solaire (impact moindre)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;175 : mieux remplir les voitures. Taux de remplissage des voitures :
&lt;ul&gt;
&lt;li&gt;2.8 personnes &#x2F; voiture sur la route des vacances&lt;&#x2F;li&gt;
&lt;li&gt;1.1 personne pour les déplacements quotidiens (aller au boulot !)&lt;&#x2F;li&gt;
&lt;li&gt;marges de manœuvre individuelle : télétravail, bus, covoiturage, vélo, train
&lt;ul&gt;
&lt;li&gt;tout le monde n’est pas égal quant à la capacité de s’émanciper de la voiture ! plus facile en ville (transports en commun).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;176 : en milieu rural, une &lt;em&gt;petite&lt;&#x2F;em&gt; voiture électrique est le + efficace&#x2F;simple et - cher
&lt;ul&gt;
&lt;li&gt;même en prenant en compte la fabrication des batteries (70g de CO2&#x2F;Km, vs 160g pour une voiture thermique)&lt;&#x2F;li&gt;
&lt;li&gt;vélo électrique très bonne solution également
&lt;ul&gt;
&lt;li&gt;malgré fabrication des batteries, 100x moins d’émissions que pour une voiture&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;177 : perspectives futures quand au travail d’infrastructure lié :
&lt;ul&gt;
&lt;li&gt;reconversion des voies pour transports en commun + voies douces&lt;&#x2F;li&gt;
&lt;li&gt;reconversion de parking en garages vélos&lt;&#x2F;li&gt;
&lt;li&gt;taxi vélos, ateliers entretien&#x2F;vente&#x2F;réparation de vélos&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;179 : Janco démonte les moteurs à hydrogène
&lt;ul&gt;
&lt;li&gt;pour produire 1t d’hydrogène, production de 10t de CO2&lt;&#x2F;li&gt;
&lt;li&gt;besoin de doubler la production électrique française&lt;&#x2F;li&gt;
&lt;li&gt;puis transports routiers (gazoducs impensables)&lt;&#x2F;li&gt;
&lt;li&gt;besoin de construire des stations de recharge partout (parce qu’autonomie des véhicules moindre)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;le-logement-180&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-logement-180&quot; aria-label=&quot;Anchor link for: le-logement-180&quot;&gt;🔗&lt;&#x2F;a&gt;Le logement (180)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;20% des émissions de GES françaises proviennent des chaudières à gaz ou fuel
&lt;ul&gt;
&lt;li&gt;Besoin de mieux isoler&lt;&#x2F;li&gt;
&lt;li&gt;Et utiliser des pompes à chaleur réversibles (…techno-solutionnisme ?)
&lt;ul&gt;
&lt;li&gt;émission de GES légères si bien entretenu et production précautionneuse (?)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;182 : « chaudière à bois très bien en milieu rural » !!!
&lt;ul&gt;
&lt;li&gt;si on ne brûle pas plus de bois qu’on en plante, bilan carbone neutre&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Besoin d’aménager le territoire plus intelligemment
&lt;ul&gt;
&lt;li&gt;Moins de bâtiments à la périphérie des villes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;184 : inconcevable de faire la leçon de morale aux pays moins développés (néo-colonialisme)
&lt;ul&gt;
&lt;li&gt;meilleur pari est d’être exemplaires&lt;&#x2F;li&gt;
&lt;li&gt;pour éviter la surpopulation
&lt;ul&gt;
&lt;li&gt;favoriser l’accès à l’éducation des femmes
&lt;ul&gt;
&lt;li&gt;plus les femmes maîtrisent leur destin, moins elles ont d’enfants 🧠&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;accès à la contraception&lt;&#x2F;li&gt;
&lt;li&gt;accès au système de solidarité (retraites notamment, pour éviter l’incentive d’avoir des enfants pour qu’iels s’occupent de nous plus tard)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;le-striatum-185&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-striatum-185&quot; aria-label=&quot;Anchor link for: le-striatum-185&quot;&gt;🔗&lt;&#x2F;a&gt;Le striatum (185)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Neurosciences
&lt;ul&gt;
&lt;li&gt;cortex cérébral : création, abstraction, planification&lt;&#x2F;li&gt;
&lt;li&gt;vs &lt;em&gt;striatum&lt;&#x2F;em&gt; : désir brut, motivation
&lt;ul&gt;
&lt;li&gt;ce qui génère la dopamine quand on fait ce qu’il nous demande&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;186 : objectifs du striatum, et conséquences néfastes (p188) quand c’est en excès
&lt;ul&gt;
&lt;li&gt;nous faire manger (survie à court terme)
&lt;ul&gt;
&lt;li&gt;obésité&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;nous faire nous reproduire (survie à long terme)
&lt;ul&gt;
&lt;li&gt;pornographie (?)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;nous faire acquérir un statut social
&lt;ul&gt;
&lt;li&gt;SUV, réseaux sociaux&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;nous faire minimiser l’effort pour pouvoir se reposer
&lt;ul&gt;
&lt;li&gt;réduction de la friction partout, tout le temps&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;nous abreuver d’information pour comprendre son environnement
&lt;ul&gt;
&lt;li&gt;manque de concentration, addiction à la notification, à l’instantanéité&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;187 :
&lt;ul&gt;
&lt;li&gt;« dans la course de la sélection naturelle, il faut arriver à faire plus de copies de son ADN que le voisin, donc avoir plus de relations sexuelles »
&lt;ul&gt;
&lt;li&gt;à mon avis, une erreur d’interprétation de la théorie de Darwin&lt;&#x2F;li&gt;
&lt;li&gt;historiquement, une population qui aime le sexe va avoir plus d’enfants (parce que peu de contraception efficace historiquement), et donc plus de chances d’être à l’origine d’une population qui aime le sexe (…en imaginant qu’aimer le sexe est une composante génétique ou sociale)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;188 : &lt;em&gt;cortex cingulaire&lt;&#x2F;em&gt;
&lt;ul&gt;
&lt;li&gt;cherche à optimiser la prédictabilité de l’environnement&lt;&#x2F;li&gt;
&lt;li&gt;mise en place des habitudes individuelles ou collectives (rites)&lt;&#x2F;li&gt;
&lt;li&gt;cause le stress ! (quand l’environnement n’est pas prédictible)&lt;&#x2F;li&gt;
&lt;li&gt;stratégies d’adaptation pour apaiser le cortex cingulaire : déni, croyance, greenwashing, etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;191 : dissonance cognitive !
&lt;ul&gt;
&lt;li&gt;le &lt;em&gt;striatum&lt;&#x2F;em&gt; veut toujours plus, plus vite&lt;&#x2F;li&gt;
&lt;li&gt;le &lt;em&gt;cortex cingulaire&lt;&#x2F;em&gt; stresse à cause des conséquences et des dangers à venir&lt;&#x2F;li&gt;
&lt;li&gt;« téléscopage du désir et de la raison »&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;192 : ce qui nous rend individualiste, c’est que l’aide des autres n’est plus indispensable &lt;em&gt;en apparence&lt;&#x2F;em&gt; pour assurer notre subsistance
&lt;ul&gt;
&lt;li&gt;le comportement de consommateur affranchit de coopérer&lt;&#x2F;li&gt;
&lt;li&gt;si la technique (énergie) n’est plus là pour assurer notre sécurité, il faut la retrouver dans &lt;em&gt;l’entraide&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;la &lt;em&gt;résilience&lt;&#x2F;em&gt; ce n’est pas compter sur ses propres forces, mais construire un réseau&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Ça tombe bien en termes de calendrier, il y a bientôt une fête de la consommation, askip. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #27</title>
        <published>2024-11-12T00:00:00+00:00</published>
        <updated>2024-11-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w45/"/>
        <id>https://bouvier.cc/notes/2024-w45/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w45/">&lt;p&gt;On se souvient mieux quand on l’écrit, l’architecture technique de Bluesky, et plein de BDs de gauche.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;9f603887-2ee1-43c3-a20d-ae3ed53aa3c3&quot;&gt;Erreur de diagnostic: regarder sa vie avec de mauvaises lunettes - Dingue ‐ RTS&lt;&#x2F;a&gt; : quand un médecin diagnostique un trouble psy à la va-vite, se trompe complètement, et cause encore plus de souffrances chez la personne qu’il aide. &lt;em&gt;Alerte divulgachâge&lt;&#x2F;em&gt; (français pour &lt;em&gt;spoiler alert&lt;&#x2F;em&gt;) : encore une fois, la Ritaline™ semble être « la vie en mode facile » pour les gens avec un TDAH 👀.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;7420356b-bfed-418c-bb0f-afac23e1f6f4&quot;&gt;Handwriting Your Memories - We Have Concerns&lt;&#x2F;a&gt; : où l’on discute du fait qu’écrire avec un papier et un crayon permettrait de mieux mémoriser les informations écrites. C’est rare qu’un épisode de &lt;em&gt;We Have Concerns&lt;&#x2F;em&gt; parle aussi peu du sujet mentionné dans le titre, mais toutes ces digressions rendent l’écoute hilarante. Posséder un serpent fait de vous quelqu’un d’exceptionnel &lt;em&gt;et&lt;&#x2F;em&gt; stupide ; Obsidian est une poubelle à souvenirs ; les gens avec leur disposition de claviers personnelle sont de mauvais évangélistes, et autres billevesées.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé &lt;em&gt;les Anneaux de Pouvoir&lt;&#x2F;em&gt; (saison 2) sur Amazon Prime Video ; dur dur de rattraper tout ce qu’il s’est passé pendant la première saison, mais ça repart vite et fort 🧝‍♀&lt;&#x2F;li&gt;
&lt;li&gt;📚 Continué &lt;em&gt;Le royaume aux milles réformes&lt;&#x2F;em&gt;, la BD de gauche dont vous êtes le héros&#x2F;l’héroïne ; c’est fun, mais dur à parcourir ce labyrinthe de possibilités…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;En parlant de souvenirs, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;archivebox.io&#x2F;&quot;&gt;ArchiveBox&lt;&#x2F;a&gt; est une application Web open-source auto-hébergeable qui permet d’archiver du contenu Web, pour ne pas avoir à le perdre. Si &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wallabag.org&#x2F;&quot;&gt;Wallabag&lt;&#x2F;a&gt; permet de sauvegarder et stocker des articles afin de les pérenniser, ArchiveBox généralise ça, à la sauvegarde de pages complètes (tout le CSS&#x2F;JS&#x2F;images etc), de dépôts de codes, etc. Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;social.dryusdan.fr&#x2F;users&#x2F;Dryusdan&quot;&gt;Dryusdan&lt;&#x2F;a&gt; pour la découverte 👋&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;newsletter.pragmaticengineer.com&#x2F;p&#x2F;bluesky&quot;&gt;Building Bluesky: a Distributed Social Network (Real-World Engineering Challenges)&lt;&#x2F;a&gt; : une explication historique et technique de l’architecture de Bluesky ; ça me semble très solide et robuste. Le découpage des fonctions par type de service a l’air plus efficace et robuste que l’architecture d’ActivityPub. (Merci à Jean-Michel Replyguy de pas argumenter des heures en réponse ^^.) Et plus sérieusement, merci à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@Signez&quot;&gt;Stan&lt;&#x2F;a&gt; pour le partage.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Dans Mastodon, il m’était fréquent de suivre des comptes qui postaient si souvent, qu’ils cachaient l’intégralité des autres posts des autres comptes suivis. J’ai re-découvert récemment qu’il était possible d’ajouter ces comptes dans une liste (que j’ai baptisée &lt;em&gt;hyperactive posters&lt;&#x2F;em&gt;), puis depuis l’interface de Mastodon elle-même, de paramétrer la liste pour “cacher ces publications sur le fil principal”. Moralité, je peux suivre ces comptes hyperactifs sans qu’ils inondent mon fil principal, et je peux quand même aller voir leurs contenus profiliques quand je m’ennuie 🙌&lt;&#x2F;li&gt;
&lt;li&gt;📚 Bientôt un financement participatif pour &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.ulule.com&#x2F;koko-a-la-plage&quot;&gt;&lt;em&gt;Koko n’aime pas le capitalisme à la plage&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, la suite de l’excellent &lt;em&gt;Koko n’aime pas le capitalisme&lt;&#x2F;em&gt; ; un superbe cadeau de Noël pour vos ami·es islamogauchowokistes 🛠 On soutient &lt;em&gt;TiensTiens&lt;&#x2F;em&gt; et on s’abonne ou on achète, vite vite vite !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;static.fnac-static.com&#x2F;multimedia&#x2F;Images&#x2F;FR&#x2F;NR&#x2F;23&#x2F;19&#x2F;d6&#x2F;14031139&#x2F;1520-1&#x2F;tsp20220103132041&#x2F;Koko-n-aime-pas-le-capitalisme-et-autres-histoires.jpg&quot; alt=&quot;Un extrait de Koko n’aime pas le capitalisme.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien 12 novembre : le repas préféré</title>
        <published>2024-11-12T00:00:00+00:00</published>
        <updated>2024-11-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien-repas-prefere/"/>
        <id>https://bouvier.cc/notes/bloguidien-repas-prefere/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien-repas-prefere/">&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;bloguidien-du-mardi-12-novembre-2024&quot;&gt;Quel est ton repas préféré de la journée, si tu n’en avais qu’un à prendre ?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Attention, ce post donne faim (ou vous dégoûtera, au choix).&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Sans surprise pour celleux qui connaissent mon addiction emmourachée du sucre : le petit-déjeuner.&lt;&#x2F;p&gt;
&lt;p&gt;Une avalanche de &lt;em&gt;pancakes&lt;&#x2F;em&gt;, des tartines au beurre &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, un pain au chocolat, un croissant ou une
chocolatine, un avocat coupé en petits morceaux avec un peu d’huile d’olive et du gros sel parsemé
abondemment au dessus &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, quelques pommes de terre nouvelles sautées éventuellement, du &lt;em&gt;bacon&lt;&#x2F;em&gt;
les jours indulgents du flexitarisme, du fromage blanc avec des oléagineux et&#x2F;ou quelques fruits
coupés en minuscules rondelles, du muesli croustillant, le café de spécialité qui coule à volonté,
et bien entendu des tonnes de pâtes à tartiner de toutes les sortes : faux Nutella™ bio, Croustinut™
&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, purée d’amandes, Coconut™ et j’en passe et des meilleurs.&lt;&#x2F;p&gt;
&lt;p&gt;C’est possible de se faire péter le bide, de se claquer la panse, de se taper la cloche, d’avoir
les dents du fond qui baignent en un seul repas, bien amplement déséquilibré, bien largement
sur-sucré, puis ensuite de partir sur un régime intermittent tout le reste de la journée jusqu’au
lendemain matin, après un long coma canapé-ique arrosé de lectures, podcasts, séries, jeux vidéos,
longues discussions.&lt;&#x2F;p&gt;
&lt;p&gt;Encore plus satisfaisant de le partager à plusieurs, avec les gens qu’on aime, un peu hagard·es à
la sortie des bras de Morphée, un peu excité·es par le cortisol matinal et l’engouement d’un jour
balbutiant et qui promet son lot de nouveautés.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;salé, bien entendu ; je veux pas de problèmes avec mes voisin·es. &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;on n’échappe pas à sa réputation de millenial. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;attention, c’est une &lt;strong&gt;drogue&lt;&#x2F;strong&gt; tellement c’est bon. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #26</title>
        <published>2024-11-05T00:00:00+00:00</published>
        <updated>2024-11-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w44/"/>
        <id>https://bouvier.cc/notes/2024-w44/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w44/">&lt;p&gt;Kresus avance, qui sont les vrai·es gamers, c’est la saison du calculateur à raclette, et un train vers la fin du monde.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;element&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#element&quot; aria-label=&quot;Anchor link for: element&quot;&gt;🔗&lt;&#x2F;a&gt;Element&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;Mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;employeur actuel&lt;&#x2F;a&gt;, une société qui promeut le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;protocole Matrix&lt;&#x2F;a&gt; et propose des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;synapse&#x2F;&quot;&gt;serveurs&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-x-android&quot;&gt;clients&lt;&#x2F;a&gt; haute performance. Je travaille dans l’équipe &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt;, à l’heure où j’écris ces lignes.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Pour la première fois depuis un bout de temps, j’ai passé plus de temps à réfléchir à une fonctionnalité qu’à l’implémenter. Pour anticiper les problèmes, imaginer un bon &lt;em&gt;design technique&lt;&#x2F;em&gt;, etc. Et ça a plutôt bien marché, étant donné que l’implémentation m’a pris seulement quelques jours et a fonctionné (quasiment) du premier coup. Très satisfaisant 😊&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Quelques relectures pour avancer sur des sujets de fond. Ça fait plaisir d’avoir l’impression d’avancer.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Oublié de le mentionner précédemment, mais j’ai éteint définitivement mon instance personnelle de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;TeamPiped&#x2F;Piped&quot;&gt;Piped&lt;&#x2F;a&gt;. Google&#x2F;Youtube ont rendu trop difficile le fait d’avoir un serveur proxy pour charger les vidéos, ce qui a enlevé tout intérêt ; de plus, tous mes &lt;em&gt;devices&lt;&#x2F;em&gt; n’avaient pas accès au site, ce qui compliquait encore les choses. J’utilise finalement une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;fr&#x2F;firefox&#x2F;addon&#x2F;ublock-origin&#x2F;&quot;&gt;ribambelle&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;reisxd&#x2F;TizenTube&quot;&gt;de&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;revanced.app&#x2F;&quot;&gt;hacks&lt;&#x2F;a&gt; pour ne plus avoir de pubs sur Youtube sur tous mes terminaux.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;blogs-persos&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#blogs-persos&quot; aria-label=&quot;Anchor link for: blogs-persos&quot;&gt;🔗&lt;&#x2F;a&gt;blogs persos&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notes.bouvier.cc&#x2F;bloguidien-chose-changer-blog&#x2F;&quot;&gt;Bloguidien 1er novembre : les changements sur mon blog&lt;&#x2F;a&gt;, qui m’a mené à écrire un article sur mon blog technique…&lt;&#x2F;li&gt;
&lt;li&gt;…&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;publish-zola-with-gitlab-ci&#x2F;&quot;&gt;Publish a Zola blog with Gitlab CI, real fast&lt;&#x2F;a&gt; où j’explique comment ces blogs sont publiés depuis Framagit en 20 secondes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📚 Fini &lt;em&gt;Unmasking autism&lt;&#x2F;em&gt;. J’ai beaucoup apprécié la découverte plus en profondeur du trouble du spectre autistique, l’aspect très engagé et politisant du livre, très dédramatisant. Le discours général sur le fait de ne pas cacher qui l’on est vraiment me parle beaucoup. J’essaierai &lt;em&gt;peut-être&lt;&#x2F;em&gt; de faire un article avec mes citations favorites.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;beckyisj.substack.com&#x2F;p&#x2F;the-corporate-letdown&quot;&gt;The Corporate Letdown - by Becky Isjwara - Beck At It&lt;&#x2F;a&gt;, quand l’aliénation au travail à travers le fait de « se donner à fond » ne rapporte rien.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 Quelques articles du blog de Zef, toujours le juste mélange de mordant et malin : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;more-direct-feedback&#x2F;&quot;&gt;More Direct Feedback&lt;&#x2F;a&gt; sur la nécessité d’être plus direct dans ses retours aux autres ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;tinkerware&#x2F;&quot;&gt;TinkerWare&lt;&#x2F;a&gt; sur le plaisir de bricoler des petites choses sans but élaboré mais juste pour le plaisir de les faire ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;the-oc&#x2F;&quot;&gt;The OC&lt;&#x2F;a&gt; sur le coût d’opportunité des choses (à mon sens c’est trop capitaliste de réfléchir toujours comme ça parce qu’on part vite sur un biais productiviste, et on oublie que se détendre et passer du bon temps avec des proches est important &lt;em&gt;et&lt;&#x2F;em&gt; a une utilité sociétale).&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;230c3127-f94f-421d-8c64-7f1ce154828a&quot;&gt;Reimagining Life with Friendship at the Center with Rhaina Cohen - Multiamory: Rethinking Modern Relationships&lt;&#x2F;a&gt; : et si on donnait plus d’importance à nos amitiés, à quoi ressembleraient nos relations ? Une interrogation sur nos besoins affectifs, et la nécessité de se détacher du modèle dominant de la relation romantique comme prisme unique. Les liens avec l’anarchisme relationnel ne sont pas loin…&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;5e35022e-8dcb-4ce7-9ec0-971686beb947&quot;&gt;Aidez-moi, est-ce que je suis gamer ? - Soluce&lt;&#x2F;a&gt; : premier épisode de &lt;em&gt;Soluce&lt;&#x2F;em&gt;, podcast qui mêle brillamment sociologie et jeux vidéo. Dans cet épisode, on parle du malaise double autour du terme &lt;em&gt;gamer&lt;&#x2F;em&gt; ; pourquoi certain·es ont du mal à le revendiquer par peur de leur légitimité ; pourquoi d’autres le refusent à cause de son historique peu reluisant.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 Des blogs sur le blogging 🤯 : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kristoff.it&#x2F;blog&#x2F;static-site-paradox&#x2F;&quot;&gt;The Static Site Paradox | Loris Cro’s Blog&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bacardi55.io&#x2F;2024&#x2F;07&#x2F;25&#x2F;rambling-on-blogging-motivations-and-energy&#x2F;&quot;&gt;Rambling on blogging motivations and energy | Bacardi55’s Web Cave&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bacardi55.io&#x2F;2024&#x2F;07&#x2F;01&#x2F;do-people-irl-know-you-have-a-blog&#x2F;&quot;&gt;Do people IRL know you have a blog? | Bacardi55’s Web Cave&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 Des blogs où les gens parlent d’elleux de manière très touchante : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;i-pierced-my-fucking-nose&#x2F;&quot;&gt;I pierced my fucking nose&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;evrowe.com&#x2F;posts&#x2F;forty&quot;&gt;Forty - Evan’s Cool Website&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;100daysof.blog&#x2F;2024&#x2F;10&#x2F;10&#x2F;im-okay-with.html&quot;&gt;100 Days of Blog - I’m okay with me.&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini &lt;em&gt;Train to the end of the world&lt;&#x2F;em&gt;, un anime déjanté, très créatif, sur l’amitié, les blessures amicales, et comment les gérer.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Pas mal joué cette semaine (notamment parce que je suis désormais l’heureux propriétaire d’un SteamDeck™), notamment à &lt;em&gt;Hadès 2&lt;&#x2F;em&gt; (toujours en &lt;em&gt;preview&lt;&#x2F;em&gt; mais avec de plus en plus de contenu) ainsi qu’à &lt;em&gt;Viewfinder&lt;&#x2F;em&gt; (un firts-person puzzle qui retourne le cerveau).&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thrillist.com&#x2F;travel&#x2F;nation&#x2F;digital-nomads-criticism-locals-exploitation&quot;&gt;How Digital Nomads Are Exploiting the World - Thrillist&lt;&#x2F;a&gt; : un billet qui met le doigt sur ce qui ne va pas avec le &lt;em&gt;nomadisme digital&lt;&#x2F;em&gt; (c’est une pente glissante libertarienne).&lt;&#x2F;li&gt;
&lt;li&gt;📚 Commencé &lt;em&gt;Le royaume aux milles réformes&lt;&#x2F;em&gt;, de la collection &lt;em&gt;Bandes Détournées&lt;&#x2F;em&gt; ; une bande dessinée dont vous êtes l’héro·ïne ; en théorie j’aime bien, en pratique, mon envie de &lt;em&gt;tout&lt;&#x2F;em&gt; parcourir fait que je passe beaucoup de temps à faire des aller-retours dans tous les sens, et ça rend le tout légèrement moins fun. Mais je ne me vois pas ne prendre qu’un chemin, finir la BD, et le recommencer plus tard…&lt;&#x2F;li&gt;
&lt;li&gt;📚 Parcouru en diagonale &lt;em&gt;Fasting&lt;&#x2F;em&gt;, un livre (de boîte à livres 🎉) sur le régime intermittent. Dommage qu’il y ait tout une grossophobie latente, un enrobage marketing &#x2F; développement personnel à vomir, parce que le livre est par ailleurs très bien documenté et sourcé, et recoupe beaucoup d’informations que j’ai lues &#x2F; entendues par ailleurs de sources scientifiques qui me semblaient sérieuses.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vikunja.io&quot;&gt;Vikunja&lt;&#x2F;a&gt; est une Web app auto-hébergeable open-source (AGPLv3) de gestion de tâches, qui priorise la vitesse et la simplicité, et permet des vues en Kanban &#x2F; Gantt de vos tâches. Pas mon usage, mais ça pourrait intéresser certain·es.&lt;&#x2F;li&gt;
&lt;li&gt;Je n’avais pas vu que la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pine64.org&#x2F;2024&#x2F;10&#x2F;02&#x2F;september_2024&#x2F;#pinenote&quot;&gt;PineNote&lt;&#x2F;a&gt;, tablette eInk libre, était de retour dans une version non plus réservée aux développeur·ses, mais pour un usage quotidien facile. Bonne nouvelle.&lt;&#x2F;li&gt;
&lt;li&gt;Cory Doctorow explique &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pluralistic.net&#x2F;2024&#x2F;11&#x2F;02&#x2F;ulysses-pact&#x2F;&quot;&gt;pourquoi il ne rejoindra jamais Bluesky&lt;&#x2F;a&gt; ; on y parle, sans surprise, d’&lt;em&gt;enshitification&lt;&#x2F;em&gt;, et du concept d’économie comportementale de &lt;em&gt;pacte d’Ulysse&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Une belle idée : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;alexwlchan.net&#x2F;2024&#x2F;static-websites&#x2F;&quot;&gt;utiliser des petits sites statiques pour se faire des archives localement&lt;&#x2F;a&gt;, et bénéficier de plus de fonctionnalités, ciblées pour notre usage, qu’une simple arborescence de répertoires.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Du linge qui pend et donne vie à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thisiscolossal.com&#x2F;2024&#x2F;10&#x2F;helga-stentzel-clothes-illusions&#x2F;&quot;&gt;des animaux surréalistes&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Allô bonjour ? Ah, c’est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;intouch.family&#x2F;fr&quot;&gt;l’IA dystopique qui veut parler à mon grand père&lt;&#x2F;a&gt; ? Arrêtez d’appeler, on ne veut plus de votre technosolutionnisme à mourir de dégoût.&lt;&#x2F;li&gt;
&lt;li&gt;C’est la saison de la raclette, donc c’est le retour du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;raclette.world&#x2F;&quot;&gt;calculateur de quantités de raclette et accompagnements&lt;&#x2F;a&gt;. (N’oubliez pas qu’une raclette carnée, c’est environ 2.5 Kg de CO2 produit par personne, d’après une recherche de 2 minutes dans mon moteur favori.)&lt;&#x2F;li&gt;
&lt;li&gt;Quelqu’un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Mansplaining&quot;&gt;mecsplique&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.world&#x2F;@jeffowski&#x2F;113417438041388445&quot;&gt;la Servante Écarlate à son autrice&lt;&#x2F;a&gt;. Imaginez avoir cette confiance en soi &#x2F; cette déconnexion de la réalité.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien 1er novembre : les changements sur mon blog</title>
        <published>2024-11-02T00:00:00+00:00</published>
        <updated>2024-11-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien-chose-changer-blog/"/>
        <id>https://bouvier.cc/notes/bloguidien-chose-changer-blog/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien-chose-changer-blog/">&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;bloguidien-du-vendredi-01-novembre-2024&quot;&gt;Quelle chose voudrais-tu changer sur ton blog ?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Grâce notamment au Bloguidien, et à la redécouverte de blogs personnels extrêmement riches (comme
celui de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;&quot;&gt;Keenan&lt;&#x2F;a&gt; ou celui d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;anniemueller.com&#x2F;&quot;&gt;Annie&lt;&#x2F;a&gt;), j’ai
envie de réinvestir dans l’aspect &lt;em&gt;communautaire&lt;&#x2F;em&gt; des blogs.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;remettre-en-place-un-blog-roll&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#remettre-en-place-un-blog-roll&quot; aria-label=&quot;Anchor link for: remettre-en-place-un-blog-roll&quot;&gt;🔗&lt;&#x2F;a&gt;Remettre en place un &lt;em&gt;blog roll&lt;&#x2F;em&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Remettre en place un &lt;em&gt;blog roll&lt;&#x2F;em&gt;, c’est-à-dire une liste de recommendations de blogs (ou autre
sites), pourquoi pas de manière automatisée à partir des flux RSS suivis, comme l’a fait
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dryusdan.space&#x2F;blogroll&quot;&gt;Dryusdan&lt;&#x2F;a&gt;. Je crois que je préfère l’idée d’une version élargie,
de partage de &lt;em&gt;liens&lt;&#x2F;em&gt; de manière générale. Pas besoin d’un service pour ça, juste une page serait
suffisante, comme ça je pourrais aussi y inclure les sites que j’apprécie, mais aussi beaucoup de
liens marque-pages, pour me permettre de les retrouver facilement plus tard. J’utilise un peu mes
notes hebdomadaires comme marque-pages, mais ce n’est pas facile de s’y retrouver ; avoir une page
avec &lt;em&gt;tous&lt;&#x2F;em&gt; les liens collectés pourrait s’avérer utile. Et pour éviter une copie manuelle, je
pense dans un réflexe à de l’automatisation — mais peut-être que passer par une étape manuelle
serait une friction qui ne m’inciterait qu’à garder le meilleur du meilleur, ce qui me semble
vraiment important. La friction peut être notre alliée, quand elle permet de conscientiser la
valeur d’un effort, et mener à éviter une accumulation irréfléchie (minimalisme, tout ça…).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mettre-en-place-des-webmentions&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mettre-en-place-des-webmentions&quot; aria-label=&quot;Anchor link for: mettre-en-place-des-webmentions&quot;&gt;🔗&lt;&#x2F;a&gt;Mettre en place des &lt;em&gt;WebMentions&lt;&#x2F;em&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;L’idée de la WebMention, c’est une notification émise de manière automatique par un logiciel, quand
un site en “mentionne” un autre. Une mention, ça peut être mettre un lien vers un page, ça peut
être un &lt;em&gt;like&lt;&#x2F;em&gt;, ou encore d’autres concepts définis dans la
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;indieweb.org&#x2F;Webmention&quot;&gt;spécification&lt;&#x2F;a&gt; du système, proposée par la communauté
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;indieweb.org&#x2F;&quot;&gt;IndieWeb&lt;&#x2F;a&gt;. Cela permet de mettre en place un &lt;em&gt;réseau&lt;&#x2F;em&gt; complètement
décentralisé, qui ne passe pas par une plateforme de média social (comme Mastodon ou Twitter
(nouvellement X)). Nos espaces à nous, nos interactions à nous ; cela me semble être l’essence
même du Web, qui se perd un peu avec les plateformes centralisées (libres ou non).&lt;&#x2F;p&gt;
&lt;p&gt;La mise en place n’est pas &lt;em&gt;extrêmement&lt;&#x2F;em&gt; compliquée, mais pas triviale non plus. Recevoir des
WebMentions nécessite un serveur qui les écoute, et l’on peut utiliser un serveur central comme
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;webmention.io&#x2F;&quot;&gt;Webmention.io&lt;&#x2F;a&gt;, ou un système auto-hébergé, pour les enregistrer .&lt;&#x2F;p&gt;
&lt;p&gt;Ensuite, je pourrais choisir de les afficher sur mon blog perso, généré statiquement . Pour cela,
il y aurait soit besoin d’une tâche récurrente spécialisée (par exemple, une tâche Gitlab ou Github
CI) qui pousserait des nouveaux &lt;em&gt;commits&lt;&#x2F;em&gt; sur le dépôt source de ce blog ; soit un morceau de
JavaScript qui irait chercher les mentions en utilisant l’API du serveur mentionné ci-dessus, qui
les afficherait en &lt;em&gt;live&lt;&#x2F;em&gt; sur mon blog (comme c’est fait actuellement pour les commentaires
Mastodon).&lt;&#x2F;p&gt;
&lt;p&gt;Une idée qui me tente également, c’est de garder les WebMentions pour moi ; éventuellement avoir un
script qui les télécharge et me les envoie par email, que je sache qui m’a mentionné. Parce que je
ne suis pas sûr que le monde ait besoin de savoir qu’un de mes billets ait été cité par un site
externe, d’autant plus que je n’ai aucune garantie de la bienveillance de la personne qui l’a
cite : et si la WebMention en question relève de la diffamation, de l’insulte, ou pire, le site
émetteur héberge du contenu illégal, amoral, ou simplement contraire à mes valeurs ? La publication
sans modération &lt;em&gt;a priori&lt;&#x2F;em&gt; me semble légèrement dangereuse, d’autant plus si le serveur qui reçoit
et mémorise les mentions n’est pas sous mon contrôle.&lt;&#x2F;p&gt;
&lt;p&gt;Et ensuite il y a la seconde partie, l’émission des WebMentions. Je pense que cela pourrait
nécessiter moins d’efforts. Au moment de la publication d’un billet (c’est-à-dire un &lt;em&gt;commit&lt;&#x2F;em&gt; sur
le dépôt source de mon blog statique), je pourrais scanner tous les liens mentionnés avec un bête
&lt;em&gt;parser Markdown&lt;&#x2F;em&gt;, et ensuite avec un petit script envoyer des WebMentions. Cette version naïve
fonctionne, parce que la spécification recommende de ré-envoyer une WebMention lors d’une mise à
jour d’un billet. Mais quand un billet est supprimé, il faut également prévenir les sites
Webmentionnés afin qu’ils oublient les pages qui les ont mentionnés. Ce n’est donc pas aussi
trivial que ça en a l’air.&lt;&#x2F;p&gt;
&lt;p&gt;La complexité de mise en place et l’aspect modération me font baisser les bras. C’est probablement beaucoup de
travail, et une fantasmagorie geek, pour relativement peu d’impact. Je ne suis pas sûr que qui ce
soit utiliserait des WebMentions émises par mon billet ; à part Dryusdan qui en parle, forcément,
coucou 👋 et le site du Bloguidien qui les utilise pour indiquer qui a répondu à un sujet.&lt;&#x2F;p&gt;
&lt;p&gt;Mais ça me tente malgré tout ; un petit projet fun, avec une spec qui doit se lire en grand maximum
une heure, une excuse pour apprendre un nouveau langage de programmation côté serveur, par
exemple, et tout ce que l’on fait n’a pas nécessité à être utile (parole de privilégié, ou
d’artiste amateur, restons sur le choix plus glorieux). Pourquoi pas ^^&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ameliorer-le-design&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ameliorer-le-design&quot; aria-label=&quot;Anchor link for: ameliorer-le-design&quot;&gt;🔗&lt;&#x2F;a&gt;Améliorer le design&lt;&#x2F;h2&gt;
&lt;p&gt;J’ai principalement &lt;del&gt;piqué&lt;&#x2F;del&gt; réutilisé un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ayushnix&#x2F;kangae&quot;&gt;design open-source&lt;&#x2F;a&gt;
pour ce site statique, et bien qu’il soit correct, il ne me satisfait pas entièrement. J’ai appris
au cours des années à me méfier de CSS assez fort pour ne pas avoir envie de m’y mettre, mais
peut-être qu’un cours de CSS moderne, je pourrais m’y remettre. Si jamais vous avez des
recommandations, je suis preneur ^^&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ecrire-plus&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ecrire-plus&quot; aria-label=&quot;Anchor link for: ecrire-plus&quot;&gt;🔗&lt;&#x2F;a&gt;Écrire plus&lt;&#x2F;h2&gt;
&lt;p&gt;Comme toujours. Parler de manière &lt;em&gt;méta&lt;&#x2F;em&gt; de son blog, comme je le fais ici, est une distraction
pour nier l’évidence qu’écrire à propos de sujets bien précis est la partie réellement &lt;em&gt;compliquée&lt;&#x2F;em&gt;, ce qui &lt;em&gt;prend du
temps&lt;&#x2F;em&gt;, ce qui nécessite un travail de recherche, d’inventivité, d’approfondissement, de
clarification, d’édition, de publicité. À quoi bon optimiser la lecture de son blog, si ce n’est
que pour parler de l’optimisation de la lecture de son blog ? 🙃&lt;&#x2F;p&gt;
&lt;p&gt;Si tu as lu jusqu’ici malgré tout, lecteur·ice, merci ; je ne pensais pas moi-même que ce serait
aussi long…&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;em&gt;Je me prends au jeu du Bloguidien, sans garantie de le tenir dans la durée, ou de l’appliquer au
plus près des règles proposées (plutôt qu’imposées). Pour vous résumer l’idée, il s’agit d’une
opportunité d’écrire à travers des propositions de sujet, chaque jour, publiées sur le site du
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;&quot;&gt;Bloguidien&lt;&#x2F;a&gt; et à travers son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pleroma.lord.re&#x2F;users&#x2F;bloguidien&quot;&gt;pendant social
robotique&lt;&#x2F;a&gt;. Viens nous rejoindre pour cette aventure ?!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Publish a Zola blog with Gitlab CI, real fast</title>
        <published>2024-11-02T00:00:00+00:00</published>
        <updated>2024-11-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/publish-zola-with-gitlab-ci/"/>
        <id>https://bouvier.cc/tech/publish-zola-with-gitlab-ci/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/publish-zola-with-gitlab-ci/">&lt;p&gt;The two or three regular visitors of this blog (hi friends!) might have noticed I’ve changed the
design, as of this year. I’ve actually moved from using the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getpelican.com&#x2F;&quot;&gt;Pelican&lt;&#x2F;a&gt;
static blog generator to using &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;. This article shows the continuous
integration I’ve set up to automatically build and push content to my server, Real Fast™.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Was there anything wrong with &lt;code&gt;Pelican&lt;&#x2F;code&gt;? Not really. It has served me well over the years, and its
naming coming from an anagram of &lt;code&gt;calepin&lt;&#x2F;code&gt;, French for a “small notebook”, is still just genius.
Installing on a new machine was a bit of a pain as I needed to recall which Python &#x2F; virtualenv
&#x2F; etc. commands were required to install dependencies, but over the years I’ve made a Makefile to simplify that. And it
didn’t happen that often though; at most I’d run such a command once every two years or so (which
is, arguably, already a lot if that’s the frequency at which one switches machines).&lt;&#x2F;p&gt;
&lt;p&gt;I mostly moved to Zola because I’m a zealot &#x2F; member of the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;rustjerk&#x2F;comments&#x2F;av5pog&#x2F;higherres_rust_evangelism_strike_force_image&#x2F;&quot;&gt;Rust evangelism strike
force&lt;&#x2F;a&gt;
on my spare time, and want to support tools created with Rust, which are usually blazing 😎 fast 🚀
&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, in addition to being super safe. And, having a statically linked binary is super convenient,
and notably super nice for continuous integration and deployment purposes. Indeed, it’s trivial to
cache a single binary in CI, and not have to worry about installing&#x2F;caching dependencies and so on.
In addition to that, Zola supports front-matter annotations with TOML &lt;em&gt;or&lt;&#x2F;em&gt; YAML, so it offered a
nice migration path from Pelican, who uses YAML for frontmatters.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve been using &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;&quot;&gt;Gitlab&lt;&#x2F;a&gt;, notably the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;&quot;&gt;Framagit&lt;&#x2F;a&gt;
instance hosted by the good fellows at &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soutenir.framasoft.org&quot;&gt;Framasoft&lt;&#x2F;a&gt; (give them
money to support them!), for the repository hosting the sources of my blog. As such, I’ve wanted to
be able to push to the repository, and have the CI build and publish to my website.&lt;&#x2F;p&gt;
&lt;p&gt;Now, let me explain how I’ve did it. These instructions are valid for &lt;em&gt;GitLab Community Edition
v17.5.1&lt;&#x2F;em&gt; ; some things may change in newer versions, so I can’t guarantee they’ll work forever.
There’s a first stage that will build the public website using a cached Zola binary, if possible,
or grab it from the Github releases website otherwise.
The second stage&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; will upload it to the server, using &lt;code&gt;rsync&lt;&#x2F;code&gt;. I’d recommend creating a new user
just for this task, with limited SSH access to a single directory, that is, where the generated
HTML will live. With caching, each stage takes at most 10 seconds to run, which I find…
acceptable 😁.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s the &lt;code&gt;.gitlab-ci.yml&lt;&#x2F;code&gt; file I’ve checked in, heavily commented for your (and my future self’s) best
understanding:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;default&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  image&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; debian:stable-slim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;variables&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # The runner will be able to pull your Zola theme when the strategy is&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # set to &amp;quot;recursive&amp;quot;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  GIT_SUBMODULE_STRATEGY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;recursive&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # If you don&amp;#39;t set a version here, your site will be built with the latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # version of Zola available in GitHub releases.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # Use the semver (x.y.z) format to specify a version. For example: &amp;quot;0.17.2&amp;quot; or &amp;quot;0.18.0&amp;quot;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  ZOLA_VERSION&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;    description&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;The version of Zola used to build the site.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;    value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;0.19.1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  stage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # Cache the Zola binary based on its version, to avoid conflicts between different versions.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  cache&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;    key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; $ZOLA_VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;    paths&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;     # $CI_PROJECT_DIR is the current working directory in subsequent steps.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;$CI_PROJECT_DIR&#x2F;zola&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;      if [ ! -e &amp;quot;$CI_PROJECT_DIR&#x2F;zola&amp;quot; ]; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        echo &amp;quot;Downloading Zola…&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        # Download enough to use `wget`.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        apt-get update --assume-yes &amp;amp;&amp;amp; apt-get install --assume-yes --no-install-recommends wget ca-certificates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        if [ $ZOLA_VERSION ]; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;          zola_url=&amp;quot;https:&#x2F;&#x2F;github.com&#x2F;getzola&#x2F;zola&#x2F;releases&#x2F;download&#x2F;v$ZOLA_VERSION&#x2F;zola-v$ZOLA_VERSION-x86_64-unknown-linux-gnu.tar.gz&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;          if ! wget --quiet --spider $zola_url; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;            echo &amp;quot;A Zola release with the specified version could not be found.&amp;quot;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;            exit 1;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;          fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;          github_api_url=&amp;quot;https:&#x2F;&#x2F;api.github.com&#x2F;repos&#x2F;getzola&#x2F;zola&#x2F;releases&#x2F;latest&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;          zola_url=$(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;            wget --output-document - $github_api_url |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;            grep &amp;quot;browser_download_url.*linux-gnu.tar.gz&amp;quot; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;            cut --delimiter : --fields 2,3 |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;            tr --delete &amp;quot;\&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;          )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        wget $zola_url&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        tar -xzf *.tar.gz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;      else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;        echo &amp;quot;Reusing cached Zola…&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;      fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;      $CI_PROJECT_DIR&#x2F;zola build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # The built artifacts will be put in the `public&#x2F;` directory, and reused during the next stage.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  artifacts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;    paths&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; public&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;    expire_in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; 1 day&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;deploy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  stage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; deploy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  only&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  dependencies&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F7768E;&quot;&gt;  script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # Install rsync and ssh, if needs be.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; apt-get update -qq &amp;amp;&amp;amp; apt-get install -y -qq rsync&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;which ssh-agent || ( apt-get update -y &amp;amp;&amp;amp; apt-get install openssh-client -y )&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; eval $(ssh-agent -s)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # Set SSH private key, and define the right permissions to not trigger security errors.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; echo &amp;quot;$SSH_PRIVATE_KEY&amp;quot; | tr -d &amp;#39;\r&amp;#39; | ssh-add - &amp;gt; &#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; mkdir -p ~&#x2F;.ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; chmod 700 ~&#x2F;.ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # Set SSH known hosts, and define the right permissions to not trigger security errors.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; echo &amp;quot;$SSH_KNOWN_HOSTS&amp;quot; &amp;gt; ~&#x2F;.ssh&#x2F;known_hosts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; chmod 644 ~&#x2F;.ssh&#x2F;known_hosts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # Run rsync.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;  # Note: -avzh = append &#x2F; verbose &#x2F; compress &#x2F; human-readable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; rsync -avzh --delete public&#x2F;* -e &amp;quot;ssh -p $SSH_PORT&amp;quot; $SSH_USERNAME@$SSH_HOST:$SSH_TARGET_DIR&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After you’ve set this up, you need to fill some secrets on your CI, by going to &lt;code&gt;Settings&lt;&#x2F;code&gt;,
then &lt;code&gt;CI&#x2F;CD&lt;&#x2F;code&gt;, then fill all the following variables under &lt;code&gt;Variables&lt;&#x2F;code&gt;. Make sure to create them
as &lt;code&gt;Masked&lt;&#x2F;code&gt; variables, if not &lt;code&gt;Masked and hidden&lt;&#x2F;code&gt;, unless you’d like the SSH private key to
leak 🤡.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SSH_HOST&lt;&#x2F;code&gt;: server’s host, e.g. &lt;code&gt;mysupersecretserver.bouvier.cc&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SSH_PORT&lt;&#x2F;code&gt;: the port to be used for connecting with SSH, e.g. 22 by default.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SSH_KNOWN_HOSTS&lt;&#x2F;code&gt;: a copy of a simplified &lt;code&gt;~&#x2F;.ssh&#x2F;known_hosts&lt;&#x2F;code&gt; file, stripped down to only
contain lines related to the above &lt;code&gt;SSH_HOST&lt;&#x2F;code&gt;. This is to avoid having the CI task to confirm “Are
you sure you want to trust this host” when connecting for the first time to the server.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SSH_TARGET_DIR&lt;&#x2F;code&gt;: the final directory where the generated HTML should live, e.g. &lt;code&gt;&#x2F;var&#x2F;www&#x2F;myblog&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SSH_USERNAME&lt;&#x2F;code&gt;: the username of the (Unix) user used in the CI task to upload generated artifacts
to your Web server…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SSH_PRIVATE_KEY&lt;&#x2F;code&gt;: …and its private key.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Hope this was useful!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;Don’t pay attention to the emojis, they’re a meme at this point. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Using two stages is inherited from my previous setup using Pelican, and might be overkill
since the each stage takes at most 10 seconds to run, with a hot cache. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #25</title>
        <published>2024-10-28T00:00:00+00:00</published>
        <updated>2024-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w43/"/>
        <id>https://bouvier.cc/notes/2024-w43/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w43/">&lt;p&gt;Vous l’attendiez avec impatience : deux semaines de notes quotidiennes pour le prix d’une. L’usine à trombones contrôlée par IA, les prix IgNobel 2024, une résurgence de blog personnels, et une collection dantesque de ressources Tipiak.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Deux semaines d’un coup, car je n’ai tout simplement pas eu (ou pris) le temps la semaine dernière 😊&lt;&#x2F;p&gt;
&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Une nouvelle contribution d’un nouveau dev, pour avoir un bouton pour fusionner tous les doublons ! Vous aussi développez sur Kresus et apparaissez dans ma newsletter, CECI N’EST PAS UNE BLAGUE 😎&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=uD4izuDMUQA&quot;&gt;TIMELAPSE OF THE FUTURE: A Journey to the End of Time (4K) - YouTube&lt;&#x2F;a&gt; : une magnifique simulation qui a de quoi ranimer toutes les flammes nihilistes.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;1a974cc7-f548-41a5-82b7-fd8f688fa131&quot;&gt;The Strangest Science of 2024 - We Have Concerns&lt;&#x2F;a&gt; : en même temps que les prix Nobel de la Science sont aussi délivrés les prix IgNobel, sur des sujets décidés comme étant les plus fous de l’année. On y parle d’une explication plausible hilarante sur le concept de &lt;em&gt;zones bleues&lt;&#x2F;em&gt;, notamment.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;ac7f6de0-d221-4304-bdbd-789c31b23f39&quot;&gt;Wakeful Sleeping - We Have Concerns&lt;&#x2F;a&gt; : où l’on apprend que les Australien·nes claquent leurs chaussures l’une contre l’autre tous les soirs pour retirer les araignées qui se seraient logées dedans ; et que leur plus grande peur consiste à se réécouter un enregistrement d’elleux en karaoké. Sinon, parle également d’une explication pourquoi certaines personnes dorment &lt;em&gt;mais&lt;&#x2F;em&gt; ont l’impression de ne pas avoir dormi de la nuit, et ne se sentent donc pas reposé 😨&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;b74472e6-4e85-460a-97ab-37debd58a41c&quot;&gt;Lightning Milk - We Have Concerns&lt;&#x2F;a&gt; : où l’on apprend que le tonnerre fait tourner le lait ; histoire exemplaire d’une &lt;em&gt;fake news&lt;&#x2F;em&gt; scientifique qui a mis des centaines d’années à être &lt;em&gt;débunkée&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZP7T6WAK3Ow&quot;&gt;L’horreur existentielle de l’usine à trombones. - YouTube&lt;&#x2F;a&gt; : ne cherchez pas à jouer à &lt;em&gt;Universal Paperclips&lt;&#x2F;em&gt;, c’est un puits de temps sans fond. Sinon, la vidéo est super intéressante sur les intelligences artificielles, notamment le fait que personne ne soit assez&#x2F;trop effrayé des super-intelligences, ou encore la logique de duel du prisonnier entre toutes les grandes nations, qui mène à un &lt;em&gt;statut quo&lt;&#x2F;em&gt; indésirable pour l’humanité.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini la saison 3 de &lt;em&gt;Heartstopper&lt;&#x2F;em&gt;. Ah, c’est si chou 🥰&lt;&#x2F;li&gt;
&lt;li&gt;📺 Fini la saison 3 de &lt;em&gt;Mr Robot&lt;&#x2F;em&gt; aussi. Ok en fait je réalise où passe tout mon temps 🤔&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé l’&lt;em&gt;anime&lt;&#x2F;em&gt; &lt;em&gt;Ranma ½&lt;&#x2F;em&gt; sur Netflix ; adapté d’un manga de Rumiko Takahashi, datant de 1987 (!). Remis dans le contexte de son année de sortie, c’est ultra moderne !&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé aussi &lt;em&gt;Train to the end of the world&lt;&#x2F;em&gt;, un &lt;em&gt;anime&lt;&#x2F;em&gt; dont le plot commence par la mise en place de la 7G (comme ce qui vient après la 5G), qui tourne mal et déforme complètement la réalité. Léger et déjanté.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 La série sur la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theoatmeal.com&#x2F;comics&#x2F;creativity_things&quot;&gt;créativité&lt;&#x2F;a&gt; de The Oatmeals, très inspirante. Beaucoup d’amour pour &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theoatmeal.com&#x2F;comics&#x2F;creativity_breathing&quot;&gt;l’épisode 3 sur la respiration&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 Je suis retombé dans l’imaginaire romanesque de l’écriture de blogs personnels, notamment grâce à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sarajoy.dev&#x2F;blog&#x2F;write-websites&#x2F;&quot;&gt;everybody’s free to write websites&lt;&#x2F;a&gt; ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;birming.com&#x2F;blog-painter&#x2F;&quot;&gt;blog like a painter&lt;&#x2F;a&gt;. Quelques articles de blogs d’inconnu·es, qui parlent de manière touchante avec leur voix, leur perspective, leur nuance : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;anniemueller.com&#x2F;posts&#x2F;i-love-getting-older&quot;&gt;i love getting older&lt;&#x2F;a&gt; ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;json.blog&#x2F;2024&#x2F;10&#x2F;07&#x2F;a-messy-deeply.html&quot;&gt;a messy, deeply personal struggle with October 7th&lt;&#x2F;a&gt; ; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;niclake.me&#x2F;7-9&#x2F;&quot;&gt;7 == 9&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Nom de dieu, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lvsl.fr&#x2F;les-racines-communistes-dhayao-miyazaki&#x2F;&quot;&gt;Hayao Miyazaki, vous êtes un communiste&lt;&#x2F;a&gt;, ça crève les yeux ? (Pas tant que ça.)&lt;&#x2F;li&gt;
&lt;li&gt;📝 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bytedrum.com&#x2F;posts&#x2F;art-of-finishing&#x2F;&quot;&gt;The Art of Finishing&lt;&#x2F;a&gt;, un billet sur la charge cognitive induite par les projets en attente, et la libération causée par le fait de s’en détacher.
&lt;blockquote&gt;
&lt;p&gt;Every unfinished project takes up mental space. It’s like having dozens of browser tabs open—each one uses a little bit of your mental RAM, leaving you with less capacity for new ideas and focused work. This mental clutter can be a significant drain on your creativity and productivity.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=4EmstuO0Em8&quot;&gt;DEF CON 32 - Disenshittify or die! How hackers can seize the means of computation - Cory Doctorow - YouTube&lt;&#x2F;a&gt;. Présentation extrêmement claire de Cory Doctorow sur le concept d’&lt;em&gt;enshitification&lt;&#x2F;em&gt; (« emmerdification » en français), la dégradation des services Web que nous utilisions régulièrement au profit des actionnaires et directeurs des boîtes tech. Le déroulé est magistral, avec une présentation de tous les cas d’école, les aspects économiques, marketing, régulations ; tout y est. C’est brillant.&lt;&#x2F;li&gt;
&lt;li&gt;📝 Dryusdan explique comment mettre en place les Webmentions sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;dryusdan.space&#x2F;mettre-en-place-les-webmentions&quot;&gt;son blog&lt;&#x2F;a&gt;. Je découvre les principes d’IndieWeb et je me ravis de la renaissance des blogs, leurs blogrolls, nos espaces à nous &lt;em&gt;et&lt;&#x2F;em&gt; ensemble 🥰&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;citiesandmemory.com&#x2F;obsolete-sounds&#x2F;&quot;&gt;collection de sons anciens&lt;&#x2F;a&gt;, désuets, qui ont été chacun remixés dans une courte musique.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fmhy.net&#x2F;&quot;&gt;freemediaheckyeah&lt;&#x2F;a&gt;, une incroyable librairie de ressources gratuites sur le Web, assurez-vous d’avoir bien enfilé vos jambes de bois, vos cache-œil et votre fausse main-crochet avant d’aller sur un tel site 🏴‍☠&lt;&#x2F;li&gt;
&lt;li&gt;Avis aux &lt;em&gt;coffee nerds&lt;&#x2F;em&gt; : il semblerait qu’il soit possible de faire une mousse de lait excellente en &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;m.youtube.com&#x2F;watch?v=WeNoDCWezls&quot;&gt;utilisant… une &lt;em&gt;French press&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; 🤯&lt;&#x2F;li&gt;
&lt;li&gt;La page &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ynote.hk&#x2F;fr&#x2F;freelance&#x2F;comment-je-travaille&#x2F;&quot;&gt;« Comment je travaille »&lt;&#x2F;a&gt; de Fanny. J’aime beaucoup l’idée d’expliciter très clairement sa manière de travailler, ses moyens de communication préférés 👌 Si jamais je devenais &lt;em&gt;freelance&lt;&#x2F;em&gt; un jour, je pratiquerais probablement.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adarkroom.synth.download&#x2F;&quot;&gt;Ceci&lt;&#x2F;a&gt; n’est pas un autre cookie clicker qui va dévorer une autre après-midi de ma vie, qu’est-ce qu’on a dit Benjamin sur les cookie clickers, enfin, BENJAMIN, REPOSE CE COOKIE CLICKER TOUT DE SUITE.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien #5: L&#x27;objet disparu de mon enfance</title>
        <published>2024-10-18T00:00:00+00:00</published>
        <updated>2024-10-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien5/"/>
        <id>https://bouvier.cc/notes/bloguidien5/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien5/">&lt;p&gt;&lt;em&gt;Je me prends au jeu du Bloguidien, sans garantie de le tenir dans la durée, ou de l’appliquer au plus près des règles proposées (plutôt qu’imposées). Pour vous résumer l’idée, il s’agit d’une opportunité d’écrire à travers des propositions de sujet, chaque jour, publiées sur le site du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;&quot;&gt;Bloguidien&lt;&#x2F;a&gt; et à travers son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pleroma.lord.re&#x2F;users&#x2F;bloguidien&quot;&gt;pendant social robotique&lt;&#x2F;a&gt;. Viens nous rejoindre pour cette aventure ?!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;bloguidien-du-vendredi-18-octobre-2024&quot;&gt;Quel objet de ton enfance et qui n’est plus utilisé aujourd’hui, regrettes-tu ?&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Encore une fois, deux manières d’interpréter la question : un objet qui est devenu désuet aujourd’hui, ou un objet qui existe encore mais que simplement je n’utilise plus personnellement. Je ne suis pas sûr d’avoir d’histoire signifiante vis-à-vis d’objets qui existent encore mais que je n’aurais plus à raconter ; des peluches, certes, mais probablement comme beaucoup ? Concentrons-nous donc sur la désuétude.&lt;&#x2F;p&gt;
&lt;p&gt;Me vient à l’esprit tout ce qui touche aux supports physiques de médias : cassettes, DVD, Bluray, et leurs lecteurs. J’adorais mon &lt;em&gt;Walkman&lt;&#x2F;em&gt; (lecteur de CD), puis mon &lt;em&gt;iPod&lt;&#x2F;em&gt;, ou lecteur de mp3 au format clé USB, que je transportais diligemment avec moi, partout, pour m’enfermer dans ma bulle musicale à n’importe quel moment. Nous nous prêtions des CDs avec des ami·es, gravions nos compilations, partagions nos cassettes VHS. Il semblait exister beaucoup moins de contenu, dans cette époque pré-numérique ; ce n’était pas nécessairement une bonne ou une mauvaise chose, c’était simplement différent.&lt;&#x2F;p&gt;
&lt;p&gt;Je m’étonne d’un couple d’ami·es qui possède encore une bibliothèque complète de Bluray, et continue d’en acheter malgré leur prix apparemment exorbitant. Le choix d’un film ou d’une série à regarder devient beaucoup plus conscient, et moins consumériste, plus limité par défaut, étant donné qu’il faut s’approprier le support, voter avec son portefeuille pour l’acheter. Leurs soirées films sont un grand moment de partage et de satisfaction familiale, du moins vu de l’extérieur.&lt;&#x2F;p&gt;
&lt;p&gt;Peut-être qu’iels ont raison ; &lt;em&gt;l’enshittification&lt;&#x2F;em&gt; des plateformes à la Netflix ou Spotify n’est plus la panacée au piratage et à l’achat de supports physiques. Les films et séries apparaissent et disparaissent de la plateforme, les contenus sont limités par géolocalisation, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;23901586&#x2F;streaming-service-prices-netflix-disney-hulu-peacock-max&quot;&gt;les tarifs augmentent régulièrement sans alternative possible que se désinscrire&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;about.netflix.com&#x2F;en&#x2F;news&#x2F;announcing-basic-with-ads-us&quot;&gt;des publicités s’invitent même dans les tarifs les plus bas&lt;&#x2F;a&gt;, les créateur·ices des médias ne sont pas bien rémunérés, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tomsguide.com&#x2F;entertainment&#x2F;streaming&#x2F;max-officially-announces-password-sharing-crackdown-is-coming-what-you-need-to-know&quot;&gt;les comptes ne se « prêtent » plus aussi facilement&lt;&#x2F;a&gt;. Finalement, l’achat de supports physiques redevient attractif, en plus d’être un acte militant en faveur du prêt, du partage (impossible avec les médias en ligne), du soutien aux créateur·ices qui sont généralement mieux payés par &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bandcamp.com&#x2F;&quot;&gt;les plateformes de vente directe&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien #4: Le setup pour écrire</title>
        <published>2024-10-17T00:00:00+00:00</published>
        <updated>2024-10-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien4/"/>
        <id>https://bouvier.cc/notes/bloguidien4/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien4/">&lt;p&gt;&lt;em&gt;Je me prends au jeu du Bloguidien, sans garantie de le tenir dans la durée, ou de l’appliquer au plus près des règles proposées (plutôt qu’imposées). Pour vous résumer l’idée, il s’agit d’une opportunité d’écrire à travers des propositions de sujet, chaque jour, publiées sur le site du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;&quot;&gt;Bloguidien&lt;&#x2F;a&gt; et à travers son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pleroma.lord.re&#x2F;users&#x2F;bloguidien&quot;&gt;pendant social robotique&lt;&#x2F;a&gt;. Viens nous rejoindre pour cette aventure ?!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;bloguidien-du-jeudi-17-octobre-2024&quot;&gt;Quel est ton setup pour écrire ? logiciel &#x2F; matériel spécifique &#x2F; lieu &#x2F; musique &#x2F; ambiance &#x2F; isolement &#x2F; parsemé de pauses&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;J’aime cette question qui me permet une double interprétation : il y a d’une part les billets de blog, sporadiques pour moi jusqu’à la découverte des notes hebdos et des défis d’écriture ; et d’autre part ces journaux, plus ou moins intimes, que je chéris et nourris de mes passions depuis des années.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;blog&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#blog&quot; aria-label=&quot;Anchor link for: blog&quot;&gt;🔗&lt;&#x2F;a&gt;Blog&lt;&#x2F;h2&gt;
&lt;p&gt;Pour ce qui est du &lt;em&gt;blogging&lt;&#x2F;em&gt;, donc, j’utilise principalement &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obsidian.md&#x2F;&quot;&gt;Obsidian&lt;&#x2F;a&gt;, dans lequel j’ai créé un &lt;em&gt;template&lt;&#x2F;em&gt; (natif, sans plugin) pour le bloguidien, qui inclut l’en-tête YAML, le texte d’intro au dessus de la question, et la citation préparée qui contiendra la question. Cela me permet de commencer à écrire très rapidement. J’écris mes billets de blog, en général (c’est-à-dire hors bloguidien) dans Obsidian également ; d’un côté parce que j’apprécie particulièrement l’édition Markdown avec rendu immédiat, de l’autre parce que la source d’inspiration et le plus gros du contenu de mes billets devraient se trouver déjà dans de précédentes notes (ou sinon, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.soenkeahrens.de&#x2F;en&#x2F;takesmartnotes#zettelkasten-en&quot;&gt;à quoi bon le Zettelkasten&lt;&#x2F;a&gt; ?).&lt;&#x2F;p&gt;
&lt;p&gt;L’écriture sur ordinateur se fait depuis mon MacBook Air, et bien que je sois un afficionado complètement allumé aux claviers mécaniques, j’utilise donc le clavier du Mac dans cette situation ; ironie. Mais voyez, se trimballer le clavier en plus de l’ordi portable, c’est trop d’effort 😎.&lt;&#x2F;p&gt;
&lt;p&gt;La publication se fait (pour le moment) soit en copiant le fichier Markdown vers le dépôt du blog statique que j’utilise, soit en ouvrant l’interface Web de la forge logicielle (en l’occurrence Framagit, merci Framasoft) et en y créant un fichier à la main. Chaque &lt;em&gt;push&lt;&#x2F;em&gt; sur le dépôt publie également sur mon site, après avoir produit le contenu HTML. J’ai quelques étapes manuelles supplémentaires, que j’aimerais automatiser par la suite : publier un &lt;em&gt;toot&lt;&#x2F;em&gt; avec une micro-intro &#x2F; un extrait rapide, puis copier l’ID du toot dans le front YAML du billet, histoire que le système de commentaires basés sur le Fediverse soit visible pour ce billet.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;journal&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#journal&quot; aria-label=&quot;Anchor link for: journal&quot;&gt;🔗&lt;&#x2F;a&gt;Journal&lt;&#x2F;h2&gt;
&lt;p&gt;Pour écrire physiquement, j’utilise un de mes innombrables carnets. J’ai eu à une période une folie collectrice des carnets, les amassant plus vite que je ne les remplissais ; il se peut bien que j’en ai accumulé assez pour une vie, ou pour en offrir à toustes mes ami·es, ainsi que leurs ami·es, ainsi que leurs familles sur 8 générations (plus ou moins 2).&lt;&#x2F;p&gt;
&lt;p&gt;J’ai notamment un Moleskine A5 que j’apprécie beaucoup, qui subit mes invasions uniquement pour des grands moments, depuis presque 10 ans. J’ai également une passion déraisonnable pour les tout petits carnets, ceux sur lesquels 10 lignes de 5 mots tiendraient à l’apogée de leur succès ; très pratique quand on se balade, ou pour ne pas oublier une idée, une impression, une mélodie, griffonner un dessin, quelques lignes, au hasard.&lt;&#x2F;p&gt;
&lt;p&gt;Pour les stylos, de simples Bics pour l’efficacité et ne pas me soucier de salir et baver ; ou un Roller quand je me sens pointilleux et ai envie d’assouvir un besoin esthétique.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;commun-aux-deux&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#commun-aux-deux&quot; aria-label=&quot;Anchor link for: commun-aux-deux&quot;&gt;🔗&lt;&#x2F;a&gt;Commun aux deux&lt;&#x2F;h2&gt;
&lt;p&gt;En termes d’ambiance, j’aime, comme pour n’importe quelle autre forme de &lt;em&gt;travail&lt;&#x2F;em&gt;, écouter de la musique sans parole, minimale. Musique classique, électronique, lo-fi : bref, tout ce qui est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;musicforprogramming.net&quot;&gt;dédié à la concentration&lt;&#x2F;a&gt;. Le silence me plaît parfois, dans certains moments où n’importe quel son est distraction.&lt;&#x2F;p&gt;
&lt;p&gt;En termes de lieu, je suis souvent sur la table ou le canapé de mon salon. C’est important pour moi d’être dans une autre pièce que le bureau dans lequel je travaille, qui par ailleurs est bien rempli par moult papiers, carnets, claviers, et autres accessoires dédiés à ma profession. Le canapé, en plus de m’offrir le confort de sa douceur, m’emplit d’une joie romanesque d’être un auteur du dimanche.&lt;&#x2F;p&gt;
&lt;p&gt;Je n’arrive pas très bien à écrire depuis des lieux publics, à cause des yeux qui traînent, des bouches qui s’expriment. Étant facilement distrait, j’ai tendance à préférer vouloir écrire en une seule fois, mode &lt;em&gt;hyperfocus&lt;&#x2F;em&gt; activé, on commence et on termine en une seule passe, pas le temps de niaiser, on n’est pas ici pour être ailleurs.&lt;&#x2F;p&gt;
&lt;p&gt;Pour les bloguidiens, une relecture grand max ; l’objectif n’est pas de sortir le prochain Damasio — même si cette grandiloquence nietzschéenne m’attire comme une cyberllule dans un techno-âtre de boulevard (j’ai bon ?).&lt;&#x2F;p&gt;
&lt;p&gt;Pour l’intime, pas besoin de relecture ; l’acte de s’exprimer importe beaucoup plus que la future éventuelle relecture.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien #3 : le salaire à vie</title>
        <published>2024-10-16T00:00:00+00:00</published>
        <updated>2024-10-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien3/"/>
        <id>https://bouvier.cc/notes/bloguidien3/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien3/">&lt;p&gt;&lt;em&gt;Je me prends au jeu du Bloguidien, sans garantie de le tenir dans la durée, ou de l’appliquer au plus près des règles proposées (plutôt qu’imposées). Pour vous résumer l’idée, il s’agit d’une opportunité d’écrire à travers des propositions de sujet, chaque jour, publiées sur le site du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;&quot;&gt;Bloguidien&lt;&#x2F;a&gt; et à travers son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pleroma.lord.re&#x2F;users&#x2F;bloguidien&quot;&gt;pendant social robotique&lt;&#x2F;a&gt;. Viens nous rejoindre pour cette aventure ?!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Salaire à vie, tu n’es pas obligé·e d’avoir un travail subordonné. Tu fais quoi de tes journées ?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Je fais partie d’une sphère extrêmement privilégiée (ou aliénée, au choix), étant donné que j’imagine continuer le &lt;em&gt;travail&lt;&#x2F;em&gt; que j’effectue sur le logiciel libre et open-source. Mon travail est une ancienne passion. Un·e sage a dit une fois « fais de ta passion ton travail, et tu n’auras jamais l’impression de travailler un seul jour de ta vie » ; quelqu’un d’encore plus sage a corrigé en « fais de ta passion ton travail, et tu n’auras plus jamais l’occasion de profiter de ta passion un seul jour de ta vie ». Mon travail reste passion, parfois, mais il arrive effectivement qu’il soit frustrant, que si j’avais une autonomie parfaite et un contrôle entier sur mes tâches, je ne ferais pas exactement ce que je fais en ce moment, au quotidien. La conséquence d’un salaire à vie, garanti, pour moi, serait donc son action libératrice, réjuvénatrice, re-ludifiante, sur ma passion. Je passerai probablement plus de temps sur mes &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;projets&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;trinity&quot;&gt;personnels&lt;&#x2F;a&gt;, et je m’amuserai beaucoup plus de l’informatique, à essayer de comprendre comment les choses marchent, à tester, à créer pour le fun, sans contrepartie.&lt;&#x2F;p&gt;
&lt;p&gt;Comme beaucoup de penseur·euses du salaire à vie &#x2F; revenu inconditionnel l’ont mentionné par le passé, une réflexion se pose par rapport à ce que l’on appelle les « métiers pénibles » : qui les ferait encore ? Le chapitre sur ce sujet dans &lt;em&gt;Ce que nos salaires disent de nous&lt;&#x2F;em&gt; de Baptiste Mylondo déconstruit brillamment les sous-entendus de la question, et révèle les choix sociétaux sous-jacents, acceptés comme un &lt;em&gt;statu quo&lt;&#x2F;em&gt; gêné. Sans dévoiler le raisonnement, la conclusion que j’en ai tirée est qu’un salaire à vie s’accompagne indubitablement d’un &lt;em&gt;partage de la pénibilité&lt;&#x2F;em&gt;. Je prendrai donc ma part de travaux pénibles. Mais pourquoi ne pas le faire dés maintenant alors…? Aucune idée du comment.&lt;&#x2F;p&gt;
&lt;p&gt;Et sans se mentir, je profiterai également de tout ce temps &lt;em&gt;libre&lt;&#x2F;em&gt; à me prélasser, à me distraire, à passer du temps avec des ami·es et des êtres aimés, à rire, jusqu’à n’avoir plus soif. Personne ne peut s’épancher d’oisiveté indéfiniment (et si quelqu’un y arrive, sincèrement tant mieux pour iel 😊), donc j’imagine toujours revenir à un moment à des activités ou hobbies qui ressembleraient un peu plus à du travail, ou nécessiteraient un minimum d’effort ou de concentration supplémentaire. Avec toujours, à la clé, l’assurance d’un repos d’une durée aussi longue que souhaitée. Le chill 😎&lt;&#x2F;p&gt;
&lt;p&gt;Bon, c’est quand, le salaire à vie, déjà ?&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien #2 : un voyage que tu regrettes</title>
        <published>2024-10-15T00:00:00+00:00</published>
        <updated>2024-10-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien2/"/>
        <id>https://bouvier.cc/notes/bloguidien2/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien2/">&lt;p&gt;&lt;em&gt;Je me prends au jeu du Bloguidien, sans garantie de le tenir dans la durée, ou de l’appliquer au plus près des règles proposées (plutôt qu’imposées). Pour vous résumer l’idée, il s’agit d’une opportunité d’écrire à travers des propositions de sujet, chaque jour, publiées sur le site du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;&quot;&gt;Bloguidien&lt;&#x2F;a&gt; et à travers son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pleroma.lord.re&#x2F;users&#x2F;bloguidien&quot;&gt;pendant social robotique&lt;&#x2F;a&gt;. Viens nous rejoindre pour cette aventure ?!&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un voyage que tu regrettes ? Pourquoi ?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Je ne regrette aucun voyage que j’ai fait. Même un voyage qui se serait mal passé aura été l’opportunité d’un apprentissage, d’une découverte, d’une remise en question, d’une altération relationnelle, et tout ça aura eu un impact certain sur ma vie, dans un futur plus ou moins proche.&lt;&#x2F;p&gt;
&lt;p&gt;Disons qu’à une période, je confesse avoir été complètement insensible aux enjeux du réchauffement climatique ; il y a des voyages professionnels effectués en avion que j’aurais rechigné ou combattu, avec mon état d’esprit actuel, et ceux-là, en cet aspect-là, je les regrette un minimum.&lt;&#x2F;p&gt;
&lt;p&gt;Mais sinon : non, rien de rien, non, je ne regrette rien 🎶&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #24</title>
        <published>2024-10-14T00:00:00+00:00</published>
        <updated>2024-10-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w41/"/>
        <id>https://bouvier.cc/notes/2024-w41/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w41/">&lt;p&gt;Les effets des drogues sur le bonheur, un jeu vidéo qui souffle mon esprit, un gros kiff sur Mr Robot, et une pub incongrue pour un environnement JavaScript.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Mise à jour de Mastodon vers la version 4.3.0 sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;&quot;&gt;Délire&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;ddb495d2-c383-4c24-a309-b09c2834fb0f&quot;&gt;Learn Nervous System Regulation And Improve Your Life - Relationship Advice&lt;&#x2F;a&gt; : du lien entre le corps et l’esprit, et des techniques de respiration &#x2F; relaxation &#x2F; &lt;em&gt;mindfulness&lt;&#x2F;em&gt; pour se recentrer et se sentir moins en danger. AAAAAA on n’est pas loin du développement personnel, mais qu’est-ce que vous voulez, une gourde vide ne peut pas remplir celles des autres, etc.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Revu l’intégralité de la saison 1 de &lt;em&gt;Mr Robot&lt;&#x2F;em&gt;. Sûrement un de mes séries favorites de tous les temps, entre les personnages qui sont toustes à deux doigts de péter un câble, l’ambiance très introvertie, la narration à travers le flux de pensée du protagoniste, et cette esthétique si particulière, ces dialogues où chaque personnage parle seul depuis un coin de l’image à son interlocuteur·ice que l’on ne voit pas, le tout sur fond de discours anticapitaliste. J’adore 🤩&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=zcAmgNoWzVk&quot;&gt;HAPPINESS: A Guide to the Drugs That Can Help You Get There - YouTube&lt;&#x2F;a&gt; : les neurotransmetteurs de base et les effets des drogues sur ceux-ci. J’ai bien aimé comment le discours du commercial tech est interrompu en mode « on a demandé à une personne qui sait de quoi elle parle, plutôt » 😆&lt;&#x2F;li&gt;
&lt;li&gt;🎮 J’ai commencé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;683320&#x2F;GRIS&#x2F;&quot;&gt;Gris&lt;&#x2F;a&gt;, après une réduction Steam (-90% !) et un commentaire élogieux observé par hasard sur le Fediverse. Très beau, et des petits puzzles sympas, sans stress ; un peu mou pour mon besoin irrémédiable de dopamine explosive.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 J’ai également profité qu’il était en réduction pour acheter &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;1382070&#x2F;Viewfinder&#x2F;&quot;&gt;Viewfinder&lt;&#x2F;a&gt;, un &lt;em&gt;first-person puzzle&lt;&#x2F;em&gt; à la &lt;em&gt;Portal&lt;&#x2F;em&gt;. Le principe est qu’il est possible de prendre des photos de l’environnement &lt;em&gt;pour ensuite les appliquer sur l’environnement et le modifier&lt;&#x2F;em&gt;. Genre, tu tiens une photo d’un coin de pièce dans ta main ; tu peux la positionner et l’appliquer dans ton champ de vision, pour ensuite aller te balader dans la pièce en question. Esprit soufflé 🤯&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé la saison 3 de &lt;em&gt;Heartstopper&lt;&#x2F;em&gt;, qui a repris récemment. C’est très chou, comme attendu.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;La nouvelle version de Mastodon 4.3 permet des liens vers des contenus à leurs auteur·ices. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rknight.me&#x2F;blog&#x2F;setting-up-mastodon-author-tags&#x2F;&quot;&gt;La technique est expliquée ici&lt;&#x2F;a&gt; et nécessite à la fois un changement côté contenu (par exemple, votre blog statique) et côté Mastodon. Ce site l’utilise désormais 😎&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=swXWUfufu2w&quot;&gt;Cette pub pour le runtime Deno&lt;&#x2F;a&gt; (auquel participe notamment le créateur de NodeJS) est surprenante, et drôle, au premier ou au second degré. Tentant !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tendingpaths.wordpress.com&#x2F;2022&#x2F;12&#x2F;12&#x2F;updated-autism-adhd-giftedness-venn-diagram&#x2F;&quot;&gt;Un diagramme de Venn&lt;&#x2F;a&gt; (2022) qui montre les traits communs à différents troubles du neuro-développements. À ne pas utiliser pour le diagnostic, mais…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;2113850&#x2F;Spirit_City_Lofi_Sessions&#x2F;&quot;&gt;Spirit City: Lofi Sessions&lt;&#x2F;a&gt; est une application de todo-list glorifiée et embellie avec une esthétique lofi, &lt;em&gt;vendue sur Steam&lt;&#x2F;em&gt;, et qui semble avoir rencontré un beau succès. La fusion entre le jeu vidéo et l’application de « productivité » est inattendue, mais pas &lt;em&gt;mal venue&lt;&#x2F;em&gt; à mon sens. Ce qui fait également que Steam n’est plus seulement une plateforme de jeux vidéos, mais bien une plateforme de vente de logiciels, au même titre que l’App Store de MacOS.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Bloguidien #1 : l&#x27;article préféré de mon blog</title>
        <published>2024-10-14T00:00:00+00:00</published>
        <updated>2024-10-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/bloguidien1/"/>
        <id>https://bouvier.cc/notes/bloguidien1/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/bloguidien1/">&lt;p&gt;Je me prends au jeu du Bloguidien, sans garantie de le tenir dans la durée, ou de l’appliquer au plus près des règles proposées (plutôt qu’imposées). Pour vous résumer l’idée, il s’agit d’une opportunité d’écrire à travers des propositions de sujet, chaque jour, publiées sur le site du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bloguidien.fr&#x2F;&quot;&gt;Bloguidien&lt;&#x2F;a&gt; et à travers son &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pleroma.lord.re&#x2F;users&#x2F;bloguidien&quot;&gt;pendant social robotique&lt;&#x2F;a&gt;. J’essaie pour aujourd’hui, minimum de relecture pour ne pas y passer trop de temps. Viens nous rejoindre pour cette aventure ?!&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Quelle est l’article &#x2F; la série de ton blog que tu apprécies le plus ?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notes.bouvier.cc&#x2F;ecriture-personnelle&#x2F;&quot;&gt;billet sur l’écriture personnelle&lt;&#x2F;a&gt; est le reflet d’un renouveau voulu depuis longtemps, l’envie d’une « libération » quant aux attentes extérieures. J’ai longtemps porté un masque froid, professionnalisant, technique, sur mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;&quot;&gt;blog principal&lt;&#x2F;a&gt;, en même temps que j’alimentais mon compte Twitter (nouvellement X). À un moment donné, j’ai souhaité pouvoir exprimer des sujets plus personnels. Alors j’ai créé un compte Mastodon, où je me suis permis de m’exprimer plus en accord avec ma propre voix, et moins en essayant de correspondre aux attentes présupposées des gens qui me suivraient.&lt;&#x2F;p&gt;
&lt;p&gt;Plus tard, j’ai publié l’article ci-dessus sur mon blog principal, avec une volonté fière, presque arrogante. Qui s’est malheureusement évanouie rapidement, réprimée par une nouvelle vague de peur du jugement, un malaise porté par l’entrelacement des articles techniques, et des billets plus personnels, accueillis souvent plus silencieusement, à mon petit désarroi.&lt;&#x2F;p&gt;
&lt;p&gt;Finalement, j’ai supprimé mon compte Twitter pour ne garder que ce compte Mastodon. J’ai décidé que ce n’était pas mon problème si le contenu que je postais ne correspondait pas à des attentes, des envies. J’ai probablement été victime du biais cognitif institué par &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Effet_de_projecteur&quot;&gt;l’effet de projecteur&lt;&#x2F;a&gt;. La réalité, c’est que la plupart des gens ignorent nos actions et nos paroles publiques. Tout le monde est obsédé par l’opinion des autres. Tout le monde juge tout le temps les autres, mais peu osent le faire de manière bruyante quand c’est négatif, de peur d’un retour de bâton ; un contrat social bancal, mais qui semble marcher dans son ensemble.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai finalement résolu cette tension qui flottait comme une vibration, en toile de fond, en séparant mon blog personnel de mon blog « professionnel ». L’un en français, l’autre en anglais. L’un personnel et émotionnel, l’autre technique et impartial. L’un pour être, l’autre pour paraître. Des fonctions bien précises, distinctes en apparence, et pourtant si intriquées et inversables quand on s’y penche.&lt;&#x2F;p&gt;
&lt;p&gt;Cela a ouvert une brèche, et permis de commencer la série des notes personnelles, inspiration prise des blogs de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;juliebrillet.fr&#x2F;notes&#x2F;&quot;&gt;Julie&lt;&#x2F;a&gt; et d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.notmyidea.org&#x2F;notes-hebdo.html&quot;&gt;Alexis&lt;&#x2F;a&gt;, comme un ensemble de cartes postales laissées à des ami·es un peu éloigné·es de mon quotidien, ou des parfaits inconnues qui pourraient s’immiscer dans le &lt;em&gt;glamour&lt;&#x2F;em&gt; de mes secousses émotives et la surprise de mes aberrantes découvertes relayées. J’éprouve une légère fierté à me dire que c’est une nouvelle constante dans ma vie, une pratique répétée sur plusieurs mois, moi qui ai du mal avec toutes les routines et les répétitions en général.&lt;&#x2F;p&gt;
&lt;p&gt;Écrire de manière personnelle, c’est se montrer vulnérable, c’est donc aussi donner des armes pour se faire battre, libérer des arguments qui pourront se retourner, tout ce que vous direz pourra et sera retenu contre vous. Mais ça va, pour le moment ; soit tout le monde est bienveillant, soit tout le monde s’en fout, ça me va parfaitement 😁. À bas les masques, et vive l’écriture personnelle !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #23</title>
        <published>2024-10-08T00:00:00+00:00</published>
        <updated>2024-10-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w40/"/>
        <id>https://bouvier.cc/notes/2024-w40/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w40/">&lt;p&gt;Pourquoi c’est drôle, la métaphore du figuier, l’invention du carnet, et la mythique course entre le lièvre et la tortue enfin rejouée 🐢🐰&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;p&gt;En pause, cette semaine 😎&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Z8c7cRuNlxQ&quot;&gt;Ça sert à quoi l’humour ? - Psykonnaissance #48 - YouTube&lt;&#x2F;a&gt; : pourquoi l’humour c’est drôle ? Des explications du point de vue de la psychologie, notamment sur le soit-distant « humour » oppressif, ce qui fait que quelque chose est drôle ou non (avec des exemples qui ne montent pas aux arbres !), et le rôle de l’humour en psychologie. Ça débunk aussi les théories entre santé long terme et rire, donc ça casse les « thérapies par le rire » et consorts. Très cool.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Bcu2QmOzzXU&quot;&gt;Why Sylvia Plath’s Fig Tree Metaphor Haunted Me | The Bell Jar - YouTube&lt;&#x2F;a&gt; : que serait notre vie si l’on avait fait des choix différents à un moment donné ? La métaphore du figuier donne le vertige, mais pose des questions intéressantes, que cette analyse permet de creuser et résoudre de manière brillante. Hashtag existentialisme.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;a33ae02b-537f-4614-8cd7-b7df791848f4&quot;&gt;Paper Trails: How Notebooks Changed The World | Roland Allen - The Daily Stoic&lt;&#x2F;a&gt; : on ne se pose pas nécessairement la question, mais quelqu’un a bien dû inventer le carnet, cet objet mythique ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bonpote.com&#x2F;albert-moukheiber-le-cerveau-est-instrumentalise-a-des-fins-ideologiques-ou-mercantiles&#x2F;&quot;&gt;Albert Moukheiber : “le cerveau est instrumentalisé à des fins idéologiques ou mercantiles”&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rohan.ga&#x2F;blog&#x2F;early-internet&#x2F;&quot;&gt;I wish I didn’t miss the 90s&#x2F;00s internet&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theconversation.com&#x2F;i-investigated-millions-of-tweets-from-the-kremlins-troll-factory-and-discovered-classic-propaganda-techniques-reimagined-for-the-social-media-age-237712&quot;&gt;I investigated millions of tweets from the Kremlin’s ‘troll factory’ and discovered classic propaganda techniques reimagined for the social media age&lt;&#x2F;a&gt;. Effrayant.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wheresyoured.at&#x2F;how-our-need-for-attention-online&#x2F;&quot;&gt;How Our Need For Attention Online Drives Us Crazy&lt;&#x2F;a&gt;. Comment les réseaux sociaux affectent nos besoins de validation et nous rendent faux, nous font nous trahir pour le compte des autres.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.thirstybear.co.uk&#x2F;2024&#x2F;04&#x2F;your-ai-code-generators-are-your-new.html&quot;&gt;Your AI code generators are your new net-negative developers&lt;&#x2F;a&gt; : l’intelligence artificielle des assistants IDE produit du code médiocre, probablement inadapté à la base de code sur laquelle on travaille (vu qu’il est la moyenne de code trouvé sur le Web, lui-même moyen, par essence).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;molily.de&#x2F;something-went-wrong&#x2F;&quot;&gt;Something went wrong – Ways out of the JavaScript crisis&lt;&#x2F;a&gt; : pourquoi tout le monde est aussi rageux envers JavaScript ? Qu’est-ce qu’il s’est passé ? Comment sortir de cette crise du JavaScript ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;BeAmazed&#x2F;comments&#x2F;1fsjuq0&#x2F;real_life_rabbit_and_tortoise_race&#x2F;&quot;&gt;La mythique course entre le lièvre et la tortue rejouée&lt;&#x2F;a&gt;. Trop chou. À faire tourner au monde entier.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;notebooklm&#x2F;comments&#x2F;1fr31h8&#x2F;notebooklm_podcast_hosts_discover_theyre_ai_not&#x2F;&quot;&gt;NotebookLM Podcast Hosts Discover They’re AI, Not Human—Spiral Into Terrifying Existential Meltdown : r&#x2F;notebooklm&lt;&#x2F;a&gt; : les hôtes d’un podcast généré par IA découvrent qu’ils sont des intelligences artificielles et tombent dans un profond désarroi existentiel. Fun.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #22</title>
        <published>2024-09-30T00:00:00+00:00</published>
        <updated>2024-09-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w39/"/>
        <id>https://bouvier.cc/notes/2024-w39/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w39/">&lt;p&gt;Un salaire à vie, le cimetière des projets Mozilla, I got a record player that was made in 2014, et de la compassion envers soi.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;cargo-machete&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cargo-machete&quot; aria-label=&quot;Anchor link for: cargo-machete&quot;&gt;🔗&lt;&#x2F;a&gt;cargo-machete&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; est un outil qui permet de détecter rapidement des dépendances inutilisées dans des projets Rust.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Petite release de la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&#x2F;releases&#x2F;tag&#x2F;v0.7.0&quot;&gt;version 0.7.0&lt;&#x2F;a&gt;, après quelques péripéties avec les &lt;em&gt;runners&lt;&#x2F;em&gt; de Github Actions pour construire la version MacOS (je demandais des machines sous MacOS 11, qui ne sont visiblement plus (trop) disponibles sur Github Actions).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Mise à jour du serveur du Délire vers la dernière version d’Ubuntu LTS (24.04), sans backups 😱. Tout s’est bien passé, alors j’en ai profité…&lt;&#x2F;li&gt;
&lt;li&gt;Mise à jour de plein de services : Synapse (Matrix) en v0.1.115, Funkwhale depuis l’image AIO Docker vers un ensemble d’images (et ça a été : extrêmement galère), plusieurs migrations de bases de données qui utilisaient des vieilles versions de Postgres, etc.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai réussi à refaire marcher mon instance de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;TeamPiped&#x2F;Piped&#x2F;&quot;&gt;Piped&lt;&#x2F;a&gt;. Youtube arrivait à détecter l’usage automatisé et l’interdisait, la solution consiste à utiliser un proxy Cloudflare 🤮 côté serveur pour que les IPs utilisées ne soient pas marquées comme étant utilisées par des bots. Très galère, et pas sûr que ça vaille le coup, étant donné que Piped ne fonctionne pas sur tous mes &lt;em&gt;devices&lt;&#x2F;em&gt;. L’anti-biais des coûts irrécupérables me dit que j’aurais mieux fait de me prendre un abonnement payant il y a des mois, mais je &lt;em&gt;refuse&lt;&#x2F;em&gt; de refiler des thunes à Google…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;le-blog&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-blog&quot; aria-label=&quot;Anchor link for: le-blog&quot;&gt;🔗&lt;&#x2F;a&gt;le blog&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;J’ai mis en place une belle page &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;notes.bouvier.cc&#x2F;about&#x2F;&quot;&gt;about&lt;&#x2F;a&gt; sur ce blog, après la découverte des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;slashpages.net&#x2F;&quot;&gt;slashpages&lt;&#x2F;a&gt; il y a quelques semaines. L’occasion de partager les meilleurs moyens de me contacter, et d’expliquer rapidement pourquoi ce blog de notes personnelles est détaché de l’autre blog.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=UuirU5b8L1Q&quot;&gt;SALAIRE À VIE, REVENU DE BASE ET SI ON CHANGEAIT TOUT ? - YouTube&lt;&#x2F;a&gt; : où Baptiste Mylondo propose un TL;DR de son livre « ce que nos salaires disent de nous », cité dans des notes précédentes. Un bon rappel, et chouette de voir le même message relayé à travers plusieurs médias différents.&lt;&#x2F;li&gt;
&lt;li&gt;🎵 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=3x2xtPV9oxQ&quot;&gt;Daisy the Great x AJR — Record Player&lt;&#x2F;a&gt;. Prenez le « refrain » &lt;em&gt;a cappella&lt;&#x2F;em&gt;, ajoutez un écho qui oscille sur la panoramique entre la gauche et la droite, et obtenez quelque chose d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=F93qhM5qP5g&quot;&gt;étrangement envoûtant&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🎵 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=PB3RbO7updc&quot;&gt;Une reprise complète&lt;&#x2F;a&gt; de Bohemian Rhapsody au ukulélé par Jake Shimabukuro. C’est cette vidéo qui m’a donné envie d’en acheter un, ça m’a fait plaisir de partager cela avec quelqu’un récemment 😊&lt;&#x2F;li&gt;
&lt;li&gt;🎵 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=u5CVsCnxyXg&quot;&gt;Et&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=-e_3Cg9GZFU&quot;&gt;plein&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=QB0ordd2nOI&quot;&gt;d’autres&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=cHSk606yFas&quot;&gt;musiques&lt;&#x2F;a&gt; pendant les insomnies.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pgautoupgrade&#x2F;docker-pgautoupgrade&#x2F;&quot;&gt;Pgautoupgrade&lt;&#x2F;a&gt; est une image Docker de la base de données PostgreSQL avec la capacité de s’auto-mettre à jour. N’oubliez-pas de faire des backups cependant, &lt;em&gt;wink wink nudge nudge say no more&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=DXv1boalsDI&quot;&gt;How Signal Instant Messaging Protocol Works (&amp;amp; WhatsApp etc) - Computerphile - YouTube&lt;&#x2F;a&gt; : comment se met en place une conversation sur une app de messagerie sécurisée (comme Signal, mais ça se retrouve plutôt bien dans Element&#x2F;Matrix en général).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.spacebar.news&#x2F;the-mozilla-graveyard&#x2F;&quot;&gt;The Mozilla Graveyard&lt;&#x2F;a&gt; : on parle beaucoup des projets Google abandonnés, mais Mozilla a également son lot de projets abandonnés ; une absence de vision produit et de compréhension de ses utilisateur·ices, peut-être ? 😇 (Aussi réalistement : une absence de fonds pour financer le développement de ses projets.)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stocktune.com&#x2F;&quot;&gt;Stocktune&lt;&#x2F;a&gt;, un site avec des tonnes de musiques (générées par IA 😔) libres de droit. Plein de musiques d’ambiance, super chouette si vous avez besoin de quelque chose très &lt;em&gt;low-key&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;crowbackup.ch&#x2F;en&#x2F;&quot;&gt;CrowBackup&lt;&#x2F;a&gt;, un système décentralisé de backups chiffrés entre ami·es : on s’ajoute comme connaissances mutuelles, on alloue de l’espace pour les sauvegardes de nos ami·es, et c’est parti. Ça a l’air extrêmement puissant, qui veut essayer avec moi ?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;olgasteinepreis.art&#x2F;i-ve-had-a-dream&quot;&gt;I’ve had a dream&lt;&#x2F;a&gt; relate, en texte et en malins photomontages, la pression des attentes sociétales liées au rôle de la « bonne mère » face au besoin de réalisation personnelles. Enfin, ze crois.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #21</title>
        <published>2024-09-24T00:00:00+00:00</published>
        <updated>2024-09-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w38/"/>
        <id>https://bouvier.cc/notes/2024-w38/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w38/">&lt;p&gt;Matrix conference, sortir de l’amour romantique, et une comparaison réaliste des voitures thermiques et électriques.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;element&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#element&quot; aria-label=&quot;Anchor link for: element&quot;&gt;🔗&lt;&#x2F;a&gt;Element&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;Mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;employeur actuel&lt;&#x2F;a&gt;, une société qui promeut le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;&quot;&gt;protocole Matrix&lt;&#x2F;a&gt; et propose des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;synapse&#x2F;&quot;&gt;serveurs&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-x-android&quot;&gt;clients&lt;&#x2F;a&gt; haute performance. Je travaille dans l’équipe &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;Rust SDK&lt;&#x2F;a&gt;, à l’heure où j’écris ces lignes.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Cette semaine c’était la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;2024.matrix.org&#x2F;&quot;&gt;Matrix Conference&lt;&#x2F;a&gt; à Berlin ! J’ai eu la chance d’y aller et de pouvoir rencontrer mes collègues. Notamment des gens avec qui je travaille depuis plus d’un an, mais que je n’avais jamais rencontré dans la vraie vie. Beaucoup de conférences et de discussions intéressantes, notamment avec d’autres développeur·ses de clients Matrix. J’ai un peu mal géré mon temps et pas su prendre assez de temps pour moi, pour profiter de la ville notamment. Et le temps de trajet en train (environ 14 heures à l’aller, la même au retour) ne valait pas les 3 jours passés sur place. Au final, beaucoup beaucoup de fatigue, tant nerveuse que sociale. Tant pis, ce seront des apprentissages pour éviter qu’une autre fois je refasse les mêmes erreurs !&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;_GDX36KvlkA&quot;&gt;Mon plan pour sauver la génération Z&lt;&#x2F;a&gt;: Léo Duff résume très rapidement quelques années de podcast de Huberman, aka tous les conseils de grand-mère pour se sentir bien dans sa vie. Je suis extrêmement gêné par le fait que d’une part, il ne cite pas la plupart des sources, et que d’autre part, il se place en position de sauveur ; c’est comme ça que comment les cultes de la personnalité. Tant pis, adios le coaching de droite 👋&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;50nkp1l4e30&quot;&gt;SORTIR DE L’AMOUR ROMANTIQUE COMME SEUL MODÈLE DE SOCIÉTÉ - YouTube&lt;&#x2F;a&gt; : vous aurez repéré au titre tout en majuscules, irritant marqueur, qu’il s’agit d’une vidéo du média Blast. L’amour romantique est trop mis en avant dans notre société, trop célébré, au dessus de tout ; l’invitée explique d’autres visions de société. J’apprécie beaucoup, et ça rejoint une de mes lectures précédentes de The School Of Life, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theschooloflife.com&#x2F;shop&#x2F;relationships&#x2F;&quot;&gt;Relationships&lt;&#x2F;a&gt;, qui rentrait beaucoup plus dans le détail du point de vue psychologique.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;AYu_6B8UI0E&quot;&gt;The failed utopia of the tiny house movement - YouTube&lt;&#x2F;a&gt; : une critique intéressante du mouvement des &lt;em&gt;tiny houses&lt;&#x2F;em&gt; comme ne pouvant pas être un &lt;em&gt;mouvement social&lt;&#x2F;em&gt;, mais plutôt un &lt;em&gt;phénomène de mode&lt;&#x2F;em&gt;. Rejoint la critique générale du minimalisme, souvent un luxe quand il est choisi, et une porte d’entrée pour des visions encore plus libérales (comme le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Mouvement_FIRE&quot;&gt;mouvement FIRE&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;DPfdoDjR8SY&quot;&gt;Body politics: self-diagnosis against biopower - YouTube&lt;&#x2F;a&gt; : comment l’appropriation de la santé peut constituer une lutte politique efficace. Grosse critique de la psychologie, mais les commentaires remettent les choses en ordre.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;climobil.connecting-project.lu&quot;&gt;Climobil&lt;&#x2F;a&gt;, un site pour comparer la création de gaz à effet de serre lors du cycle de vie complet d’une voiture thermique à celle d’une voiture électrique. À noter : les batteries pèsent lourd en termes de CO2, et plus une voiture électrique a une grosse autonomie, plus longtemps il faut l’utiliser pour compenser sa production.&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre qu’il est toujours possible d’avoir Youtube sans pubs sur Android, en utilisant l’application &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;revanced.app&#x2F;&quot;&gt;Revanced&lt;&#x2F;a&gt;, qui a pris la relève de Youtube Vanced. En gros, il faut d’abord télécharger un APK de Youtube à la bonne version indiquée par le logiciel (par exemple &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.apkmirror.com&#x2F;apk&#x2F;google-inc&#x2F;youtube&#x2F;youtube-19-16-39-release&#x2F;&quot;&gt;ici&lt;&#x2F;a&gt;, à l’heure où j’écris ces lignes), puis cliquer sur « Patcher », puis le sélectionner depuis le stockage local, valider, puis installer l’APK patché, puis installer les services microG. Bon, peut-être que c’est plus simple de payer Youtube Premium, finalement, mais je refuse catégoriquement de donner plus d’argent à Google ; je paye déjà bien assez par d’autres manières.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #20</title>
        <published>2024-09-16T00:00:00+00:00</published>
        <updated>2024-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w37/"/>
        <id>https://bouvier.cc/notes/2024-w37/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w37/">&lt;p&gt;20ème édition 💪 Les liens entre la colère et l’anxiété, l’interview d’un &lt;em&gt;product manager&lt;&#x2F;em&gt; dans une entreprise en train de crever, et l’&lt;em&gt;IkeaHack Megadesk&lt;&#x2F;em&gt; 🤯&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mediapart.fr&#x2F;journal&#x2F;politique&#x2F;070924&#x2F;avec-le-rn-les-gens-s-entendent-dire-que-les-choses-vont-s-ameliorer-sans-qu-ils-n-aient-rien-changer&quot;&gt;« Avec le RN, les gens s’entendent dire que les choses vont s’améliorer sans qu’ils n’aient rien à changer » | Mediapart&lt;&#x2F;a&gt; : une théorie qui expliquerait pourquoi les gens votent pour le RN serait la définition d’un ennemi double face aux « honnêtes gars bien de chez nous » (dans leur imaginaire). Théorie intéressante sur l’imaginaire de l’extrême droite.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;em&gt;Kaos&lt;&#x2F;em&gt;, série sur Netflix qui reprend l’idée de dieux de la mythologie grecque qui existeraient à notre époque, et seraient encore vénérés par des humain·es. Comme si &lt;em&gt;Hadès&lt;&#x2F;em&gt; rencontrait &lt;em&gt;American Gods&lt;&#x2F;em&gt; (en moins trash, quand même). Je l’ai &lt;em&gt;binge-watch&lt;&#x2F;em&gt; (benj-watch ?) en une semaine. J’ai bien apprécié, et comme beaucoup de bonnes séries maintenant, son plus gros défaut c’est le &lt;em&gt;cliffhanger&lt;&#x2F;em&gt; qui nous laisse suspendus à la fin de la saison, et me laisse sur ma faim de saison.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;a9.io&#x2F;glue-comic&#x2F;&quot;&gt;Une réflexion en BD&lt;&#x2F;a&gt;sur ce qui pourrait constituer des meilleurs systèmes de messagerie, plutôt que ce que les Slack et consorts nous offrent avec des tours de texte (avec à l’occasion des détours dans des fils de discussion). Inspirant, mais probablement très niche.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;6ad97cf6-9df8-47e4-835b-4b4a5637fd71&quot;&gt;Anger &amp;amp; Anxiety: The Unexpected Couple Ruining Your Relationships - Multiamory: Rethinking Modern Relationships&lt;&#x2F;a&gt; : la recherche en psychologie et neurosciences a déterminé qu’il y avait un lien très fort entre la colère et l’anxiété, dans les deux sens. Je me souviens notamment du pourquoi, dans le sens de l’anxiété vers la colère : à cause de la peur, le corps se met en mode « attaque ou fuite », et si c’est l’attaque qui est choisie, c’est la colère quasi assurée ! Fascinant.&lt;&#x2F;li&gt;
&lt;li&gt;📖 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.babelio.com&#x2F;livres&#x2F;Price-Unmasking-Autism&#x2F;1470039&quot;&gt;Unmasking Autism - Devon Price&lt;&#x2F;a&gt; : toujours dans le trou du lapin de la neuro-diversité, je découvre cet ouvrage de sociologie déguisé en ouvrage d’aide psychologique. C’est très très sourcé, très bien documenté pour le moment. Et apparemment, son autrice suggère de le pirater sur son Instagram. C’est dit.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Commencé &lt;em&gt;Extraordinary Attorney Woo&lt;&#x2F;em&gt; sur Netflix. Vous sentez un thème ? Bref, très attendri dés les 10 premières minutes environ, je crois que ça va me plaire.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;botsin.space&#x2F;@UncleClive&quot;&gt;Uncle Clive&lt;&#x2F;a&gt; est un compte Mastodon à qui l’on peut envoyer des programmes écrits en BASIC, et qui renvoie une vidéo du rendu de leur exécution en réponse. De la &lt;em&gt;demoscene&lt;&#x2F;em&gt; participative sur le Fediverse, en quelque sorte.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;v4lpt&#x2F;TPC&#x2F;blob&#x2F;master&#x2F;README.md&quot;&gt;Tomato Potato Clock&lt;&#x2F;a&gt;, une app de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Technique_Pomodoro&quot;&gt;&lt;em&gt;pomodoro&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; avec un touiste : “If you found this app, you know what kind of person you are ;). Hence, there no options at all and you also cannot pause the timer. This is part of the design of this app.”&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;modem.io&#x2F;blog&#x2F;blog-monetization&#x2F;&quot;&gt;How to monetize your blog&lt;&#x2F;a&gt; : ne vous laissez pas avoir par le titre ; ce billet de blog est une brillante œuvre d’art post-moderne et un fier affichage de compétences quasi-divines en CSS.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitbutler.com&#x2F;&quot;&gt;Git Butler&lt;&#x2F;a&gt; est une interface native qui permet d’effectuer des actions Git plutôt compliquées avec une UI alléchante, et qui permet aussi de gérer des « branches virtuelles » par-dessus Git. Aucune idée de si ça marche bien etc., vu que j’utilise trop amoureusement &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;lazygit&quot;&gt;lazygit&lt;&#x2F;a&gt;, mais ça pourrait en intéresser d’autres.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nownownow.com&#x2F;about&quot;&gt;nownownow&lt;&#x2F;a&gt; : une idée intéressante, et si en plus d’avoir une page « &#x2F;about » comme on en voit souvent sur les sites perso, on avait aussi une page « &#x2F;now » ? Celle-ci donnerait un instantané de qui l’on est, ce que l’on fait&#x2F;lit&#x2F;écoute &lt;em&gt;en ce moment&lt;&#x2F;em&gt;, au sens large. J’apprécie beaucoup l’idée, et me questionne de préférer cela aux notes hebdomadaires, qui montrent le film plutôt que l’instantané, avec des avantages et des inconvénients à l’un et à l’autre.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=YeNBsW0Slrk&quot;&gt;Interview of a Product Manager in a Dying Company&lt;&#x2F;a&gt; : satirique, mais sonne bien trop vrai 🥲&lt;&#x2F;li&gt;
&lt;li&gt;L’excellent film &lt;em&gt;Everything Everywhere All At Once&lt;&#x2F;em&gt; est disponible sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.france.tv&#x2F;films&#x2F;films-suspense&#x2F;6434609-everything-everywhere-all-at-once.html&quot;&gt;FranceTV&lt;&#x2F;a&gt; jusqu’à la fin du mois. Faites-vous du bien, allez le voir, c’est gratouit.&lt;&#x2F;li&gt;
&lt;li&gt;Connaissez-vous &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ikeahackers.net&#x2F;2019&#x2F;05&#x2F;bekant-sit-stand-desk-memory.html&quot;&gt;IkeaHackers&lt;&#x2F;a&gt;, le site où les gens utilisent de manière inventive des produits Ikea, ou les améliore d’une manière ou d’une autre, et partagent leurs recettes en open-source ? Je découvre qu’il est possible d’ajouter une mémoire à la table à hauteur réglable &lt;em&gt;Bekant&lt;&#x2F;em&gt;, avec le projet &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gcormier&#x2F;megadesk&quot;&gt;Megadesk&lt;&#x2F;a&gt;. Tentant.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #19</title>
        <published>2024-09-10T00:00:00+00:00</published>
        <updated>2024-09-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w36/"/>
        <id>https://bouvier.cc/notes/2024-w36/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w36/">&lt;p&gt;Ce que nos salaires disent de nous, de quoi les flux RSS ont besoin, et ton bleu n’est pas le même que le mien.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.eleanorkonik.com&#x2F;p&#x2F;themed-logs-are-still-more-useful&quot;&gt;Themed logs are more useful than daily notes&lt;&#x2F;a&gt; : une réflexion sur la prise de notes par la brillante Eleanor Konik, influenceuse 😁 dans le microcosme &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obsidian.md&#x2F;&quot;&gt;Obsidian&lt;&#x2F;a&gt;. Ici, une réflexion intéressante sur le fait que d’avoir des notes de journal quotidiennes pour elle ne lui sert pas, mais qu’elle préfère regrouper les notes par thèmes. J’ai mis en place quelque chose de similaire pour avoir une idée des jours difficiles mentalement, pour avoir quelque chose de concret à répondre aux psys qui me demandent « pourquoi venez-vous me voir aujourd’hui ? ».&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sarahraad.substack.com&#x2F;p&#x2F;the-subtle-shift-of-a-30-day-challenge&quot;&gt;The subtle shift of 30 days challenges&lt;&#x2F;a&gt; : lié dans l’article précédent, l’autrice parle d’un système de « défis » qui durent 30 jours, pour éviter de se dire que quelque chose doit être pratiqué « pour la vie » ; on teste pour voir pendant un temps donné, et on ne garde que ce qui plaît et est utile. J’aime cette approche détendue du développement personnel.&lt;&#x2F;li&gt;
&lt;li&gt;📖 Un guide touristique sur ma ville, qui mentionnait généreusement les personnages illustres, et met donc en lumière l’origine des noms de rue, de places, et l’histoire des bâtiments touristiques. J’adore lire ces &lt;em&gt;origin stories&lt;&#x2F;em&gt; qui font des anecdotes alléchantes quand des ami·es viennent visiter la ville.&lt;&#x2F;li&gt;
&lt;li&gt;📖 Fini « Ce que nos salaires disent de nous » (merci Adrian pour le prêt !), de Baptiste Mylondo. Un argumentaire qui essaie de comprendre et creuser la notion de justice salariale, avec (&lt;em&gt;spoiler alert &#x2F; alerte divulgâchage&lt;&#x2F;em&gt;) une ouverture &#x2F; défense du revenu inconditionnel. Parfois un peu dense et dur à suivre (l’ouvrage d’un universitaire 🙃), malgré tout une excellente vulgarisation en philosophie économique&#x2F;politique. Beaucoup de réflexions fascinantes sur le rôle de la pauvreté dans les sphères sociales et économiques, l’utilité sociale, les catégories de justices, et le rôle fondamental de la belote coinchée dans notre société.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mnot.net&#x2F;blog&#x2F;2024&#x2F;08&#x2F;25&#x2F;feeds&quot;&gt;What RSS needs&lt;&#x2F;a&gt; : les flux RSS sont une invention brillante et une manière très utile de parcourir le Web, mais qui ne rencontrent pas le succès qu’ils mériteraient. Comment faire pour augmenter leur impact, et faire renaître une technologie avec un potentiel énorme ?&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sdr-podcast.com&#x2F;episodes&#x2F;cranelift&#x2F;&quot;&gt;How usable is the Rust Cranelift backend today?&lt;&#x2F;a&gt; : des gens de la commu Rust qui parlent de l’ancien projet sur lequel j’ai travaillé beaucoup de temps chez Mozilla, à savoir Cranelift. Satisfaisant de voir que l’on s’approche d’un usage possible au quotidien 💪&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ismy.blue&#x2F;&quot;&gt;Est-ce que votre bleu est le même que mon bleu ?&lt;&#x2F;a&gt; Pour moi, le turquoise, c’est du bleu : malgré tout, je vois plus vert que 85% de la population.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;back-on-track.eu&#x2F;night-train-map&#x2F;&quot;&gt;Une carte des trains de nuit en Europe&lt;&#x2F;a&gt;, avec tous les arrêts.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #18</title>
        <published>2024-09-02T00:00:00+00:00</published>
        <updated>2024-09-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w35/"/>
        <id>https://bouvier.cc/notes/2024-w35/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w35/">&lt;p&gt;Le nouveau Trainline, l’anarchie relationnelle, apprendre à aimer la cuisine en détruisant sa vie, et appelle-moi par ton nom.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;728cc58b-145a-4413-a951-71f9c4dc096b&quot;&gt;Convo with a Relationship Anarchist Ft. Claire, Poly Pages&lt;&#x2F;a&gt; : même si l’on n’est pas intéressé·es par la pratique de l’anarchie relationnelle et&#x2F;ou du polyamour, c’est fascinant d’écouter les pratiquant·es sur ces sujets, dont le niveau de maturité émotionnelle et de communication ouverte et transparent crève le plafond. Hyper inspirant.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;everythingchanges.us&#x2F;blog&#x2F;the-gift-of-accountability&#x2F;&quot;&gt;The gift of accountability - Everything changes&lt;&#x2F;a&gt; : et si on arrêtait de voir la responsabilité (&lt;em&gt;accountability&lt;&#x2F;em&gt;, pas meilleure traduction en français ?) comme une charge, mais plutôt comme une opportunité ?&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.frustrationmagazine.fr&#x2F;neoruraux&#x2F;&quot;&gt;Néoruraux : comment les classes dominantes transforment les campagnes&lt;&#x2F;a&gt;. Aïe ça pique.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mediapart.fr&#x2F;journal&#x2F;economie-et-social&#x2F;270824&#x2F;la-sinistre-clarification-d-emmanuel-macron&quot;&gt;La sinistre clarification d’Emmanuel Macron&lt;&#x2F;a&gt; (Mediapart) : « la République règne, mais ne gouverne pas. Celui qui gouverne, c’est le capital et il gouverne même en l’absence de gouvernement. »&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;i-learned-to-love-cooking-and-all-i-had-to-do-was-destroy-my-entire-life&#x2F;&quot;&gt;I learned to love cooking, and all I had to do was destroy my entire life&lt;&#x2F;a&gt; : encore une pièce brillamment écrite, touchante, émouvante, sur le blog de Keenan. Si vous aimez les blogs personnels, inscrivez-vous au flux RSS. Vraiment. Attention, ça parle un peu de trauma d’enfance.&lt;&#x2F;li&gt;
&lt;li&gt;🎥 &lt;em&gt;Call me by your name&lt;&#x2F;em&gt; : après avoir vu Dune 2 la semaine dernière, j’avais envie de voir d’autres films avec Timothée Chalamet. Pas déçu du tout, je comprends pourquoi ce film l’a propulsé au sommet. Une histoire d’amour très touchante.&lt;&#x2F;li&gt;
&lt;li&gt;🧝‍♀ Je continue l’anime &lt;em&gt;Gloutons et Dragons&lt;&#x2F;em&gt;, sur Netflix, dont le pitch se résume à « des aventuriers de donjons et dragons découvrent que les monstres qu’iels pourchassent sont par ailleurs très bons ». Ça passe le temps efficacement (ce qui doit bien équivaloir à un 6.5&#x2F;10).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cohost.org&#x2F;tef&#x2F;post&#x2F;298638-sure-it-didn-t-work&quot;&gt;Sure, it didn’t work for Email, XMPP, or even Diaspora, but maybe it’ll work for us!&lt;&#x2F;a&gt; : tef commente sur l’échec de protocoles fédérés, et explique selon lui pourquoi ça ne risque pas de changer avec ActivityPub &#x2F; Mastodon. Je crois que je partage la croyance que « au pire vous crééz votre instance » est une fausse alternative, par contre je ne suis pas d’accord que la fédération ne sert qu’une élite ; ça reste un moyen efficace de dispersion du pouvoir des gros acteurs (GAFAM etc.), à défaut d’être un moyen équitable de partage du pouvoir.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.12train.com&#x2F;&quot;&gt;12Train&lt;&#x2F;a&gt; est le nouveau Trainline (nouveau nouveau Voyage SNCF) pour commander des billets en ligne rapidement. Espérons que le site reste sans pisteur et sans fioritures comme ça. On appréciera la possibilité de choisir une gare de correspondance, pratique pour éviter certaines villes (&lt;em&gt;cough cough&lt;&#x2F;em&gt; Paris &lt;em&gt;cough cough&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;L’ergothérapie (en anglais &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Occupational_therapy&quot;&gt;&lt;em&gt;Occupational therapy&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;) vise, de manière plus générale, la promotion de la santé et du bien-être des individus et des communautés au travers de leurs occupations.&lt;&#x2F;li&gt;
&lt;li&gt;La newsletter de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.zsa.io&#x2F;voyager&quot;&gt;ZSA&lt;&#x2F;a&gt; est pleine de bonnes surprises, même si vous n’avez que faire des claviers mécaniques qu’ils vendent : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;strudel.cc&#x2F;&quot;&gt;coder des musiques&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;grantkot.com&#x2F;draw&#x2F;&quot;&gt;bousculer des particules dans tous les sens&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;entertrained.app&#x2F;&quot;&gt;s’entraîner à taper au clavier en lisant des livres du domaine public&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #17</title>
        <published>2024-08-26T00:00:00+00:00</published>
        <updated>2024-08-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w34/"/>
        <id>https://bouvier.cc/notes/2024-w34/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w34/">&lt;p&gt;Le lobbying TDAH sur TikTok, &lt;em&gt;a very good blog&lt;&#x2F;em&gt;, et de la charge mentale en moins.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;cargo-machete&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cargo-machete&quot; aria-label=&quot;Anchor link for: cargo-machete&quot;&gt;🔗&lt;&#x2F;a&gt;cargo-machete&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; est un outil qui permet de détecter rapidement des dépendances inutilisées dans des projets Rust.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;« Oh non Benjamin, cela fait des mois et des mois que tu as 5 &lt;em&gt;pull requests&lt;&#x2F;em&gt; ouvertes, tu dois sûrement les relire pour les fusionner ! » Il s’avère qu’en fait j’avais déjà relu 3, que pour l’une d’entre elles les tests ne passent pas, et que la dernière était juste parfaite et prête à fonctionner. Une bonne chose de faite, un peu de charge mentale en moins.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;J’avais imaginé utiliser &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;Silverbullet&lt;&#x2F;a&gt; en parallèle d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obsidian.md&#x2F;&quot;&gt;Obsidian&lt;&#x2F;a&gt;, notamment pour sa capacité à gérer des « bases de données » bien mieux que ne le fait Obsidian (même avec le plugin &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blacksmithgu.github.io&#x2F;obsidian-dataview&#x2F;&quot;&gt;Dataview&lt;&#x2F;a&gt;), mais finalement c’est quand même beaucoup plus simple de tout avoir au même endroit (et quelques petites choses manquent à Silverbullet pour avoir un usage équivalent). Un peu de simplification, c’est un peu de charge mentale en moins aussi.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=3a_as1UDDwU&quot;&gt;La maladie propagée sur Tiktok&lt;&#x2F;a&gt; : l’excellent Léo Duff lève le voile sur des entreprises américaines qui ont dépensé des sommes folles en publicité pour convaincre une jeune population qu’elle était atteinte de troubles de l’attention (TDA). Tiens donc, ces entreprises se sont mises à vendre des médicaments contre les TDA, en ligne, suite à une levée des restrictions sur la vente de l’Aderall aux USA pendant la période COVID. Ce qui ne veut pas dire que tous les gens qui pensent avoir un TDA n’en ont pas, mais qu’il y a &lt;em&gt;beaucoup&lt;&#x2F;em&gt; de désinformation sur les médias sociaux, et que cela peut mener à une médication hasardeuse. Difficile de s’y retrouver.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;switowski.com&#x2F;blog&#x2F;no-hello-no-quick-call-no-agendaless-meetings&#x2F;&quot;&gt;No hello, no quick call, no meetings without an agenda&lt;&#x2F;a&gt; : plein de bonnes pratiques sur le télétravail.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai découvert le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;&quot;&gt;blog de Keenan&lt;&#x2F;a&gt;, dont les articles sont à la fois &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;fellas-is-it-gay-to-like-pop-music&#x2F;&quot;&gt;drôles mais intimes&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;untitled-1-aka-vaka&#x2F;&quot;&gt;touchants&lt;&#x2F;a&gt;, et écrits avec une plume très subtile. Vraiment la quintessence du blog personnel, pour moi ; ça part direct dans les abonnements RSS, merci Keenan.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;em&gt;Umbrella Academy&lt;&#x2F;em&gt;, saison 4 : quelques bonnes idées, mais ça surfe beaucoup sur la hype actuelle autour des multivers, et ça manque parfois de cohérence, voire de consistence. Bonne idée de clôre la série, ça commençait à lambiner un peu.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.chiark.greenend.org.uk&#x2F;~sgtatham&#x2F;quasiblog&#x2F;code-review-antipatterns&#x2F;&quot;&gt;Code review antipatterns&lt;&#x2F;a&gt; : comment ennuyer les personnes dont vous relisez le code au maximum. Une liste d’antipatterns à éviter, donc, sauf si vous êtes une personne cruelle et sadique.&lt;&#x2F;li&gt;
&lt;li&gt;🐘 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hashtag.place&#x2F;&quot;&gt;hashtag.place&lt;&#x2F;a&gt; est une instance ActivityPub pour lequel chaque compte représente un &lt;em&gt;hashtag&lt;&#x2F;em&gt; (mot-dièse, pour les puristes de la langue de Molière), que l’on peut suivre pour accéder à plus de contenu utilisant lesdits hashtags. Pratique pour les petites instances Mastodon comme la mienne.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #16</title>
        <published>2024-08-20T00:00:00+00:00</published>
        <updated>2024-08-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w33/"/>
        <id>https://bouvier.cc/notes/2024-w33/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w33/">&lt;p&gt;De la kora, les fantômes de Tokyo, un grand tri avec Johnny Decimal, et Damasio refait la science-fiction.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Je reviens finalement sur un usage unique de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wallabag.org&#x2F;&quot;&gt;Wallabag&lt;&#x2F;a&gt;, au détriment de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;readeck.org&#x2F;&quot;&gt;Readeck&lt;&#x2F;a&gt;. Alors que je préfère l’interface, les fonctionnalités et les performances du dernier, l’absence d’application mobile pour Android pour lire hors ligne et resynchroniser l’état de lecture une fois en ligne est un gros no-go pour moi. Mais je surveille le développement, et croise les doigts que quelqu’un (?) développe une app Android, ou implémente l’API d’une autre app qui aurait une version mobile offline.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📖 La semaine dernière, j’ai fini &lt;em&gt;Building a second brain&lt;&#x2F;em&gt;, de Tiago Forte, commencé il y a… des mois. Beaucoup de passages en mode développement personnel sensationnaliste, MAIS finalement des méthodes très complètes, détaillées, pour commencer à construire un système personnel de gestion de l’information, basé sur l’action, et avec le moins de structure possible. Difficile de dire si je le recommande vraiment ; &lt;em&gt;How to take smart notes&lt;&#x2F;em&gt; était beaucoup plus utile, dense et complet, mais peut-être trop froid et pas aussi orienté action. N’hésitez-pas à me demander de vous le prêter.&lt;&#x2F;li&gt;
&lt;li&gt;📖 J’ai ensuite continué mes lectures de bouquin avec &lt;em&gt;Ce que nos salaires disent de nous&lt;&#x2F;em&gt;, un essai court (150 pages) de Baptiste Mylondo, fer de lance du revenu de base. J’en suis à la moitié environ, mais j’apprécie beaucoup la réflexion sur les critères qui déterminent actuellement les salaires, et pourquoi ces critères sont quasi tous pétés : utilité sociale (mais alors pourquoi les financiers gagnent si bien leurs vies ?), formation (apanage de la bourgeoisie financière), etc.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;adrian.gaudebert.fr&#x2F;blog&#x2F;post&#x2F;The-frustration-of-%28never-really%29-finishing-Dawnmaker&quot;&gt;The frustration of (never really) finishing Dawnmaker&lt;&#x2F;a&gt; : l’ami Adrian revient sur les fonctionnalités qui ne sont pas arrivées dans son jeu &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;2749100&#x2F;Dawnmaker&#x2F;&quot;&gt;Dawnmaker&lt;&#x2F;a&gt;, sorti récemment. Pour ma part, je trouve le jeu très bien réussi, et peaufiné ; visiblement je ne suis pas le seul, au vu des 95% d’opinions positives (au jour où j’écris) 😊&lt;&#x2F;li&gt;
&lt;li&gt;🎧 Encore des épisodes de Dingue, le podcast sur les neurodiversités : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rts.ch&#x2F;audio-podcast&#x2F;2022&#x2F;audio&#x2F;trouble-de-la-personnalite-borderline-hypersensibilite-et-intensite-25880299.html&quot;&gt;trouble de la personnalité borderline&lt;&#x2F;a&gt;, la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rts.ch&#x2F;audio-podcast&#x2F;2024&#x2F;audio&#x2F;dependance-affective-attachement-et-reciprocite-28449501.html&quot;&gt;dépendance affective&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ici.radio-canada.ca&#x2F;recit-numerique&#x2F;5860&#x2F;solitude-isolement-ermite-hikikomori-syndrome&quot;&gt;Les fantômes de Tokyo&lt;&#x2F;a&gt; : un article fascinant sur les &lt;em&gt;hikikomori&lt;&#x2F;em&gt;, personnes en marge de la société et repliées sur elles-mêmes, au Japon.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;write.as&#x2F;ashleynewman&#x2F;how-i-reward-myself-with-good-habits-the-kozukai-method&quot;&gt;How I reward myself with good habits&lt;&#x2F;a&gt; : et si on gamifiait le changement d’habitudes en se donnant droit à de l’argent virtuel à dépenser pour chaque bonne habitude pratiquée ? C’est l’idée derrière la méthode &lt;em&gt;Kozukai&lt;&#x2F;em&gt; inventée par l’auteur·ice. Au delà de la méthode en elle-même, c’est la pratique d’inventer sa propre motivation qui me plaît dans sa démarche.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;marcusolsson.dev&#x2F;the-power-of-busywork&#x2F;&quot;&gt;The power of busywork: boosting neurodivergent motivation&lt;&#x2F;a&gt; : pour tou·tes mes lecteur·ices neuroatypiques, ou généralement les gens qui souffriraient d’un manque de motivation à commencer les choses. Le fait d’accomplir des tâches peu importantes pourrait aider à libérer de la dopamine et aider à se motiver à s’attaquer à d’autres tâches plus importantes.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;cd6496ce-0a00-4b53-a1f1-ecacef833fcf&quot;&gt;Le code a changé : avec Damasio on refait la science-fiction&lt;&#x2F;a&gt; : en plus d’être une master-classe de montage de podcast, l’entretien est comme attendu, brillant sur les champs philosophiques, politiques, métaphysiques, poétiques. À écouter, en n’oubliant pas les défauts de l’auteur pour ne pas l’idéaliser.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;C’est connu et pénible : les Smart TV Samsung (comme la mienne) n’utilisent pas Android mais un système d’exploitation personnalisé. Donc pas possible d’installer facilement des apps personnalisées facilement, notamment pour avoir accès à Youtube sans pub. Cela dit, j’ai découvert &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;reisxd&#x2F;TizenTube&quot;&gt;TizenTube&lt;&#x2F;a&gt;, un hack fait par un étudiant turc (le talent !) qui permet d’installer un module pour avoir un Youtube sans pub. L’auteur a contribué à Youtube Vanced (« Youtube Advanced, mais sans ad », vous l’avez ?), donc je suis relativement confiant quant à la qualité et la protection de la vie privée du logiciel.&lt;&#x2F;li&gt;
&lt;li&gt;Je suis tombé sur un sale bug dans la synchro de mon client Nextcloud, et content d’être tombé sur la solution dans des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nextcloud&#x2F;desktop&#x2F;issues&#x2F;4378&quot;&gt;commentaires de tickets Github&lt;&#x2F;a&gt;. Cela me fait malheureusement me dire que l’outil est encore très loin d’être grand public, puisque la solution nécessite d’aller faire le ménage sur le serveur.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;yazi-rs.github.io&#x2F;&quot;&gt;Yazi&lt;&#x2F;a&gt; est un outil en TUI (terminal, donc) pour naviguer rapidement dans sa hiérarchie de fichiers, avec tout plein de raccourcis clavier (à la &lt;em&gt;Vim&lt;&#x2F;em&gt;), un peu comme le font &lt;em&gt;Midnight Commander&lt;&#x2F;em&gt; ou &lt;em&gt;Ranger&lt;&#x2F;em&gt;, si ça vous parle. Mais celui-ci est écrit en Rust 🦀 donc forcément, &lt;em&gt;blazingly 🚀 fast 😎&lt;&#x2F;em&gt; (j’attends mon chèque de la part de la &lt;em&gt;Rust Evangelism Task Force&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;raould.github.io&#x2F;pn0gstr0m&#x2F;&quot;&gt;Pn0gstr0m&lt;&#x2F;a&gt;, une variante du jeu Pong dans le navigateur, où la balle se multiplie en deux à chaque fois qu’elle touche le bloc d’un joueur. À jouer sur PC, pas sur mobile 😁&lt;&#x2F;li&gt;
&lt;li&gt;Diablo, premier du nom, est désormais &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;d07riv.github.io&#x2F;diabloweb&#x2F;&quot;&gt;jouable intégralement dans un navigateur Web&lt;&#x2F;a&gt;. Fier d’avoir participé à l’aventure WebAssembly pour rendre ce genre de choses possibles, moi qui étais un fan de Diablo III il y a quelques années 😌&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;johnnydecimal.com&#x2F;&quot;&gt;Johnny Decimal&lt;&#x2F;a&gt; est un système de catégorisation universel, qui pourrait être utile pour classifier des notes, ou simplement ses données personnelles, et réutilisable de manière globale. À comparer avec la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fortelabs.com&#x2F;blog&#x2F;para&#x2F;&quot;&gt;méthode PARA&lt;&#x2F;a&gt; (projets &#x2F; areas &#x2F; ressources &#x2F; archives), mais ça me semble plus me parler.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #15</title>
        <published>2024-08-14T00:00:00+00:00</published>
        <updated>2024-08-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w32/"/>
        <id>https://bouvier.cc/notes/2024-w32/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w32/">&lt;p&gt;Des vacances chill, encore un Wallabag-like qui me fait de l’œil, l’éclatement de la bulle IA, et on est tous·tes un peu &lt;em&gt;Dingue&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;J’ai fini de remettre à plat mon auto-hébergement &lt;em&gt;personnel&lt;&#x2F;em&gt;, à part donc de celui du collectif &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;&quot;&gt;Delire.Party&lt;&#x2F;a&gt;. J’y héberges quelques services très personnels, pour lesquels je préfère avoir la mainmise sur le serveur, et aucun partage de ces données sensibles avec d’autres utilisateur·ices, afin de réduire les risques. Par exemple, il y a une instance de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; qui tourne avec mes données bancaires dessus.&lt;&#x2F;li&gt;
&lt;li&gt;Fini ma migration de serveur 😎 Hyper content et soulagé d’avoir pu faire ça en quelques jours, notamment peur que Nextcloud (et tous les 700 Go de données utilisateur·ices) prennent des jours à migrer, et causent des longues indisponibilités. Mais au final, Nextcloud a été migré en moins de 24 heures ; on remerciera les connexions des serveurs à 100 MBits 💪 (&lt;em&gt;Benji cries in ADSL&lt;&#x2F;em&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎶 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=sp3B97N67Cw&quot;&gt;Hania Rani’s piano day Arte&lt;&#x2F;a&gt; : très doux, le genre qui me plonge dans des états de concentration maximale.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.simplermachines.com&#x2F;why-you-need-a-wtf-notebook&#x2F;&quot;&gt;Why you need a WTF journal at work&lt;&#x2F;a&gt; : comment améliorer les processus et problèmes des autres équipes sans passer pour un connard. Plusieurs suggestions pour développer son empathie au travail.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theatlantic.com&#x2F;ideas&#x2F;archive&#x2F;2024&#x2F;07&#x2F;white-collar-meetings-more-frequent&#x2F;678941&#x2F;&quot;&gt;White collars work is just meetings now&lt;&#x2F;a&gt; : je rejoins les conclusions de cet article, notamment la grosse difficulté à me re-concentrer après un meeting, et l’impression de perdre mon temps dans des meetings &lt;em&gt;rituels&lt;&#x2F;em&gt; type &lt;em&gt;standups&lt;&#x2F;em&gt;, qui pourraient simplement être des emails &#x2F; newsletters. Je pense que j’accepterais une réduction de salaire de 10% pour ne plus avoir un seul de ces meetings performatifs, ainsi que ceux ayant lieu &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.paulgraham.com&#x2F;makersschedule.html&quot;&gt;en milieu de demi-journée&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 Plein d’épisodes de &lt;em&gt;Dingue&lt;&#x2F;em&gt;, le podcast sur les neurodivergences : cette semaine, les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rts.ch&#x2F;audio-podcast&#x2F;2023&#x2F;audio&#x2F;trouble-du-spectre-de-l-autisme-defis-de-sociabilisation-et-interets-specifiques-26114644.html&quot;&gt;troubles du spectre de l’autisme&lt;&#x2F;a&gt;, le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rts.ch&#x2F;audio-podcast&#x2F;2023&#x2F;audio&#x2F;trouble-anxieux-generalise-inquietude-constante-et-preoccupations-multiples-26109894.html&quot;&gt;trouble anxieux généralisé&lt;&#x2F;a&gt;, les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rts.ch&#x2F;audio-podcast&#x2F;2023&#x2F;audio&#x2F;vivre-avec-une-constellation-de-troubles-mentaux-26132429.html&quot;&gt;comorbidités&lt;&#x2F;a&gt; (ou « constellations » comme préfère les appeler l’hôte). Toujours fascinant, et aide à relativiser des suspicions auto-diagnostiquées 😇&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Vieux mais très bon : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nora.codes&#x2F;post&#x2F;scaling-mastodon-in-the-face-of-an-exodus&#x2F;&quot;&gt;comment ajouter du traitement parallèle&lt;&#x2F;a&gt; aux sidekiq de Mastodon. Comme mon instance de Mastodon a été éteinte pendant 10 heures lors de la migration des serveurs, il y avait &lt;em&gt;beaucoup&lt;&#x2F;em&gt; de tâches de fond à effectuer pour les sidekiq, environ 6000. J’ai activé pendant deux minutes 10 workers, qui ont vidé la liste de tâches de fond à effectuer, et bim bada boum, mon Mastodon était de nouveau réactif. Merci Leonora Tindall pour l’astuce !&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;anytype.io&quot;&gt;Anytype&lt;&#x2F;a&gt; est une solution open-source alternative à Notion. J’ai rapidement essayé, ça a l’air très complet, avec la même complexité inhérente à Notion pour créer des types, collections, etc. Pas sûr que j’utilise, parce que l’investissement initial me semble énorme, et entre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obsidian.md&#x2F;&quot;&gt;Obsidian&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;Silverbullet&lt;&#x2F;a&gt;, j’ai déjà de quoi faire.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;omnivore.app&#x2F;&quot;&gt;Omnivore&lt;&#x2F;a&gt; est &lt;em&gt;encore&lt;&#x2F;em&gt; une autre app open-source de lecture pour plus tard (comme &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wallabag.org&quot;&gt;Wallabag&lt;&#x2F;a&gt; ou &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;readeck.org&#x2F;en&#x2F;&quot;&gt;Readeck&lt;&#x2F;a&gt;, dont j’ai déjà parlé, donc), mais qui intègre également la lecture des flux RSS et la réception de &lt;em&gt;newsletters&lt;&#x2F;em&gt; qui sont converties en nouvelles entrées. Ça a vraiment l’air d’être l’application ultime dont je rêve depuis un moment, mais apparemment c’est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.omnivore.app&#x2F;self-hosting&#x2F;self-hosting.html&quot;&gt;compliqué&lt;&#x2F;a&gt;, voire &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.omnivore.app&#x2F;p&#x2F;deploying-a-minimal-self-hosted-omnivore&quot;&gt;impossible à auto-héberger complètement avec toutes les fonctionnalités&lt;&#x2F;a&gt;. À suivre pour l’installer dans le futur, donc.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.spacebar.news&#x2F;mozilla-firefox-privacy-preserving-attribution&#x2F;&quot;&gt;What is Firefox supposed to do?&lt;&#x2F;a&gt;: une explication nuancée du compromis nécessaire, de la part de Mozilla, entre protection de la vie privée des utilisateur·ices et « asservissement » aux pratiques standards des publicitaires. Utiliser Firefox c’est donner plus de pouvoir à Mozilla pour faire pencher la balance du bon côté, donc n’hésitez-pas à le tester et en faire votre navigateur par défaut.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wheresyoured.at&#x2F;pop-culture&#x2F;&quot;&gt;Pop Culture&lt;&#x2F;a&gt; : excellente analyse sur l’échec commercial des IAs génératives, d’après une lecture d’un rapport de Goldman Sachs. Il est temps que la bulle de hype éclate !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #14</title>
        <published>2024-07-23T00:00:00+00:00</published>
        <updated>2024-07-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w29/"/>
        <id>https://bouvier.cc/notes/2024-w29/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w29/">&lt;p&gt;Migration de serveurs, l’esthétique du code et le backend de Pocket (enfin !) open-source.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;J’ai bien avancé dans la migration du serveur du &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;&quot;&gt;Délire&lt;&#x2F;a&gt;. Dans l’épisode précédent : OVH avait décidé de suspendre le serveur Kimsufi que nous louions, et nous avions trouvé un serveur chez Hetzner à la place, au tarif avantageux malgré une puissance très élevée.&lt;&#x2F;li&gt;
&lt;li&gt;Je me suis notamment attelé à ce qui me rendait le plus anxieux : la mise en place d’un serveur email avec &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;haraka.github.io&#x2F;&quot;&gt;Haraka&lt;&#x2F;a&gt;. Eh bien c’était très agréable, car très simple à mettre en place — beaucoup plus simple que Postfix ! Pour la première fois, j’ai pu activer SPF, DKIM et DMARC en moins de quelques heures ; ce qui m’avait pris &lt;em&gt;des semaines&lt;&#x2F;em&gt; à faire, de manière itérative, en prenant des pauses et des aspirines, avec Postfix. N’en tirez-pas la conclusion que Postfix serait moins bien ; je pense que ce dernier offre des fonctionnalités dont je n’ai pas besoin, et que mon inexpérience avec sa configuration a été la principale source de frustration auparavant. Bref, expérience satisfaisante, notamment parce que les emails envoyés par ce serveur obtiennent un score de 10&#x2F;10 sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mail-tester.com&#x2F;&quot;&gt;Mail Tester&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;J’ai aussi eu le petit kiff de commencer à migrer des services, basés sur Docker. Oui, le Délire utilise &lt;em&gt;beaucoup&lt;&#x2F;em&gt; Docker pour l’hébergement. Les étapes, en résumé :
&lt;ul&gt;
&lt;li&gt;On éteint le service machine source.&lt;&#x2F;li&gt;
&lt;li&gt;On copie tous les volumes de la machine source vers la machine destination avec &lt;code&gt;rsync&lt;&#x2F;code&gt;, par exemple.&lt;&#x2F;li&gt;
&lt;li&gt;Sur la machine destination, changement de permissions.&lt;&#x2F;li&gt;
&lt;li&gt;Puis remise en place du service avec les mêmes paramètres.&lt;&#x2F;li&gt;
&lt;li&gt;C’est presque trop facile.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=lPrjP4A_X4s&quot;&gt;We Need to Rethink Exercise – The Workout Paradox&lt;&#x2F;a&gt; : faire du sport ne ferait pas perdre de calories de manière substantiellement différente qu’être au repos ; à partir de là, une seule solution pour « perdre du poids » : manger moins. Argh.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;aa9b9306-9db4-4f25-a775-15683079e860&quot;&gt;Le code a changé : l’esthétique du code&lt;&#x2F;a&gt; : une balade philosophique et artistique sur ce qui rend le code beau, avec des aller-retours entre la programmation et la littérature. Un peu pédant par moments, mais intellectuellement stimulant.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 Cet &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;b8cf7785-d547-4d77-98a1-efce0726e179&quot;&gt;épisode&lt;&#x2F;a&gt; du Huberman Podcast sur le &lt;em&gt;growth mindset&lt;&#x2F;em&gt; était très enrichissant. J’en retiendrai surtout l’esprit d’un bon mentor : avoir des hauts standards, et être dans le soutien&#x2F;Care en même temps.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sli.dev&#x2F;&quot;&gt;Slidev&lt;&#x2F;a&gt;, encore un aout e système de slides rédigés en Markdown. Pas testé, mais ça a l’air prometteur, notamment d’avoir un beau rendu sans trop d’efforts.&lt;&#x2F;li&gt;
&lt;li&gt;Le backend de Pocket, racheté par Mozilla il y a au moins 2500 ans, a été &lt;em&gt;enfin&lt;&#x2F;em&gt; rendu &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Pocket&#x2F;pocket-monorepo&quot;&gt;open-source&lt;&#x2F;a&gt;. Est-ce que ça veut dire que je vais abandonner mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wallabag.org&#x2F;&quot;&gt;Wallabag&lt;&#x2F;a&gt; &#x2F; mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;readeck.org&#x2F;en&#x2F;&quot;&gt;Readeck&lt;&#x2F;a&gt; ? Je ne pense pas ; déjà parce que migrer ça demande du temps, et que je suis satisfait des deux autres solutions (bien que pas décidé sur laquelle je privilégie pour le futur) ; ensuite parce que la liste des prérequis et des services à mettre en place a l’air longue comme le bras…&lt;&#x2F;li&gt;
&lt;li&gt;Avant de commencer à migrer Mastodon, j’aurais aimé tomber sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ricard.dev&#x2F;improving-mastodons-disk-usage&#x2F;&quot;&gt;cet article&lt;&#x2F;a&gt;, qui explique comment amoindrir l’espace disque occupé par le service, en vidant beaucoup de caches locaux. Ça m’aurait évité de migrer plusieurs dizaines de milliers d’emojis customs, de &lt;em&gt;cards previews&lt;&#x2F;em&gt;, ou encore d’autres médias distants.&lt;&#x2F;li&gt;
&lt;li&gt;Notion parle des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.notion.so&#x2F;fr-fr&#x2F;blog&#x2F;how-we-sped-up-notion-in-the-browser-with-wasm-sqlite&quot;&gt;optimisations&lt;&#x2F;a&gt; faites dans le navigateur pour charger plus rapidement les pages avec une base SQLite côté client avec WASM. À ce niveau-là, la complexité de la tâche ressemble à une problématique système.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Day Progress, une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;us&#x2F;app&#x2F;day-progress&#x2F;id6450280202?mt=12&quot;&gt;app Mac&lt;&#x2F;a&gt; ou une autre extension &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;extensions.gnome.org&#x2F;extension&#x2F;7042&#x2F;day-progress&#x2F;&quot;&gt;Gnome Shell&lt;&#x2F;a&gt; qui permet d’afficher le pourcentage de temps restant de la journée, sur votre barre d’état. Un moyen rigolo de rester conscient du temps qui passe. D’ailleurs je vous laisse, il me reste 27% de ma journée, c’est le moment d’éteindre l’ordinateur et d’aller prendre l’air.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #13</title>
        <published>2024-07-15T00:00:00+00:00</published>
        <updated>2024-07-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w28/"/>
        <id>https://bouvier.cc/notes/2024-w28/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w28/">&lt;p&gt;L’autre côté de chaque chose, le désenchantement Mozilla et les boîtes à livre pillées.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mediapart.fr&#x2F;journal&#x2F;politique&#x2F;090724&#x2F;ce-qui-nourri-et-nourrira-encore-la-menace-rn&quot;&gt;Ce qui a nourri et nourrira encore le RN&lt;&#x2F;a&gt;, quelques étapes importantes qui permettent d’expliquer le vote d’extrême droite. On notera la trahison des socialistes en 1983, très bien documentée dans la BD Le choix du chômage.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;AAZMzW2H9cI&quot;&gt;Pas de concessions : une nouvelle constitution&lt;&#x2F;a&gt; : bonne analyse stratégique de Viktorovich. Les évènements des derniers jours me laissent plutôt pessimistes quant à la réalisation d’un tel projet.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.politico.eu&#x2F;article&#x2F;magnificent-mind-emmanuel-macron-france-legislative-election&#x2F;&quot;&gt;The magnificent mind of Emmanuel Macron&lt;&#x2F;a&gt; : super pièce journalistique, très belle écriture. C’est fascinant de lire un avis assez extérieur, provenant d’un pays étranger, sur le personnage. Notamment avec quelques commentaires d’un·e psychiatre sur la psyché du personnage.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;theconversation.com&#x2F;pillages-de-boites-a-livres-le-don-devore-par-la-logique-marchande-234047&quot;&gt;Pillages de boîtes à livres : le don dévoré par la logique marchande&lt;&#x2F;a&gt;. J’avais déjà entendu dire qu’à Lyon, les boîtes à livre se faisaient piller par les bouquinistes des quais de Rhône, mais il semblerait que ce soit un phénomène plus généralisé. Peut-être à relativiser du fait d’UNE expérience dans UN lieu, pour cet article, mais je ne serais pas étonné d’une généralisation. Je ne vois pas de bonne solution non techno-solutionniste ou surveillante, et vous ?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;La dernière version de Firefox, la 128 donc, a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@mcc&#x2F;112775362045378963&quot;&gt;intégré une nouvelle option&lt;&#x2F;a&gt; pour « autoriser les sites à effectuer des mesures publicitaires respectueuses de la vie privée ». D’une part, c’est un peu choquant en soi, parce qu’on s’attend à ce que Firefox essaie à tout prix d’empêcher la publicité (mais ce n’est pas le cas, Firefox &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&#x2F;@gabrielesvelto&#x2F;112779506156690032&quot;&gt;a toujours été financé par la pub&lt;&#x2F;a&gt;) ; d’autre part, c’est probablement une violation du RGPD parce que l’option a été activée par défaut, et il est donc nécessaire de la désactiver dans les Paramètres, section Vie privée &#x2F; sécurité. J’espère vivement que cette option va être &lt;em&gt;a minima&lt;&#x2F;em&gt; désactivée par défaut (« opt-in », quitte à mettre un écran qui explique&#x2F;propose de l’activer au prochain démarrage).&lt;&#x2F;li&gt;
&lt;li&gt;Dans des nouvelles plus cool côté Firefox, il est maintenant possible d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.omgubuntu.co.uk&#x2F;2024&#x2F;06&#x2F;firefox-127-weather-new-tab-feature&quot;&gt;afficher la météo locale&lt;&#x2F;a&gt; dans la page de nouvel onglet de Firefox, depuis la version 127.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;omriharel&#x2F;deej&quot;&gt;Deej&lt;&#x2F;a&gt;, une petite &lt;em&gt;board&lt;&#x2F;em&gt; open-source pour contrôler le volume de ses applications. Ça a l’air très chouette, si j’avais le matos de fabrication et un peu plus de compétences, je me fabriquerais sûrement quelque chose comme ça…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cobalt.tools&#x2F;&quot;&gt;Cobalt&lt;&#x2F;a&gt;, un outil pour télécharger les vidéos depuis d’autres plateformes ; comme yt-dlp, mais dans une interface Web simple et belle, donc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.flowtunes.app&#x2F;&quot;&gt;FlowTunes&lt;&#x2F;a&gt; est un site qui joue du lofi généré par de l’IA en continu. Pour les amateur·ices de musique d’ascenseur.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wificard.io&#x2F;&quot;&gt;Une petite page&lt;&#x2F;a&gt; pour imprimer son QR code qui permet un login rapide sur un réseau WiFi. Ce serait cool, si seulement ~~~ma machine du diable~~~ mon imprimante fonctionnait.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;citations&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#citations&quot; aria-label=&quot;Anchor link for: citations&quot;&gt;🔗&lt;&#x2F;a&gt;Citations&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;interstellar-ego-and-deeply-insecure&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#interstellar-ego-and-deeply-insecure&quot; aria-label=&quot;Anchor link for: interstellar-ego-and-deeply-insecure&quot;&gt;🔗&lt;&#x2F;a&gt;Interstellar ego and deeply insecure&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;He’s a man of interstellar ego who is deeply insecure; a kind, charming and warm person with almost no friends; a retail politician who cannot connect with or relate to the French public.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.politico.eu&#x2F;article&#x2F;magnificent-mind-emmanuel-macron-france-legislative-election&#x2F;&quot;&gt;The magnificent mind of Emmanuel Macron&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-other-side-of-anything&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-other-side-of-anything&quot; aria-label=&quot;Anchor link for: the-other-side-of-anything&quot;&gt;🔗&lt;&#x2F;a&gt;The other side of anything&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;…“What’s on the other side of anything?” said the scorpion. “A new beginning.”&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sadoeuphemist.tumblr.com&#x2F;post&#x2F;615521935528460288&#x2F;a-scorpion-not-knowing-how-to-swim-asked-a-frog&quot;&gt;A scorpion not knowing how to swim asked a frog…&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;police-du-ton-tone-policing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#police-du-ton-tone-policing&quot; aria-label=&quot;Anchor link for: police-du-ton-tone-policing&quot;&gt;🔗&lt;&#x2F;a&gt;Police du ton (&lt;em&gt;tone policing&lt;&#x2F;em&gt;)&lt;&#x2F;h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Selon ce point de vue féministe, demander de supprimer les affects de colère a pour effet de favoriser un mode de communication spécifique souvent associé à des traits tels que la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; title=&quot;Masculinité&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Masculinit%C3%A9&quot;&gt;masculinité&lt;&#x2F;a&gt;, un haut niveau d’études et un style d’expression détaché et imaginé comme rationnel&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Police_du_ton#cite_note-:0-13&quot;&gt;[11]&lt;&#x2F;a&gt;. Dans cette vision des choses, exiger d’une personne qu’elle adopte un style de communication particulier peut involontairement renforcer les inégalités sociales existantes, y compris celles enracinées dans l’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; title=&quot;Colonialisme&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Colonialisme&quot;&gt;histoire coloniale&lt;&#x2F;a&gt;, les structures &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; title=&quot;Suprématie blanche&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Supr%C3%A9matie_blanche&quot;&gt;suprémacistes blanches&lt;&#x2F;a&gt;, le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; title=&quot;Hétéropatriarcat&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;H%C3%A9t%C3%A9ropatriarcat&quot;&gt;cis-hétéro-patriarcat&lt;&#x2F;a&gt;, et les systèmes &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; title=&quot;Capitalisme&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Capitalisme&quot;&gt;capitalistes&lt;&#x2F;a&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Police_du_ton#cite_note-:1-14&quot;&gt;[12]&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Police_du_ton&quot;&gt;Wikipedia&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #12</title>
        <published>2024-07-08T00:00:00+00:00</published>
        <updated>2024-07-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w27/"/>
        <id>https://bouvier.cc/notes/2024-w27/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w27/">&lt;p&gt;Pas assez de temps, beaucoup d’auto-hébergement, du métal indien et de la cithare sur table.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Mise en place le nouveau blog sur lequel vous lisez ces notes, en utilisant &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;, un moteur de blog statique écrit en Rust 🦀&lt;&#x2F;li&gt;
&lt;li&gt;Port également de mon blog technique vers Zola (au revoir et merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getpelican.com&quot;&gt;Pelican&lt;&#x2F;a&gt;), en réutilisant ce même thème. Beaucoup de petites modifications à faire dans les articles historiques pour les porter vers le nouveau système. Le sujet du moteur de blog est clairement une échappatoire.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;le-delire&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-delire&quot; aria-label=&quot;Anchor link for: le-delire&quot;&gt;🔗&lt;&#x2F;a&gt;Le Délire&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;OVH a gentiment décidé de décommissionner le serveur de mon pseudo-&lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;2024-w27&#x2F;chatons.org&quot;&gt;CHATONS&lt;&#x2F;a&gt; le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;%E2%80%AF&quot;&gt;Délire&lt;&#x2F;a&gt; ; cette semaine j’ai trouvé un nouveau serveur chez &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.hetzner.com&#x2F;&quot;&gt;Hetzner&lt;&#x2F;a&gt; qui permettra de le remplacer. La migration commence doucement.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=FMIgIJV8wmQ&quot;&gt;🦏 DÉMOCRATIE : LE DÉBUT DE LA FIN&lt;&#x2F;a&gt; : un épisode de &lt;em&gt;Rhinocéros&lt;&#x2F;em&gt;, de Blast, qui devine à quoi ressemblerait la Fronce si un gouvernement autoritaire fasciste venait à prendre le pouvoir. Terrifiant, comme d’hab, mais important malgré tout. On notera la nouvelle coupe « fraîche » d’Usul.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.ladn.eu&#x2F;media-mutants&#x2F;comment-la-russie-a-aide-la-france-a-basculer-vers-lextreme-droite&#x2F;&quot;&gt;Comment la Russie a aidé la France à basculer vers l’extrême-droite&lt;&#x2F;a&gt;, où l’on apprend le concept d’&lt;em&gt;astroturfing&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🕸️ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;absolument-tout.net&#x2F;nous-y-voila&#x2F;&quot;&gt;Nous y voilà&lt;&#x2F;a&gt; : le genre de billets qui te remue un peu, et qui te fait dire « fichtre, cette personne a raison ». Lauréat du Pullitzer 2024 pour la phrase suivante :
&lt;ul&gt;
&lt;li&gt;La réunion elle-même a été extrêmement décevante — championnat de France de « Oui OK ça marche en pratique, mais est-ce que ça marche en théorie ? »&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gkeenan.co&#x2F;avgb&#x2F;i-really-like-everyone-on-my-blogroll-but-im-sorry-to-say-that-it-must-die&#x2F;#fnref1&quot;&gt;I really like everyone on my blog roll, but I’m sorry to say that it must die.&lt;&#x2F;a&gt; Très belle écriture, sur le thème du blog, avec un fond d’anxiété.&lt;&#x2F;li&gt;
&lt;li&gt;🎶 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=mi106DZJhuQ&quot;&gt;If System of a Down were from India&lt;&#x2F;a&gt; : et si du chant classique indien rencontrait des extraits guitare rock de System of a Down, à quoi ça ressemblerait ? Ça parle de monter un projet entre le guitariste et les deux sœurs chanteuses, et J’ADORERAI écouter ça à longueur de journée.&lt;&#x2F;li&gt;
&lt;li&gt;🎶 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=aKJvbTEnp0I&quot;&gt;LIGHT IN BABYLON - Hinech Yafa&lt;&#x2F;a&gt; : il y a des musiques qui vous prennent aux tripes, ici, entre la voix puissante de la chanteuse, ses rythmes impeccables au tambour (?), et l’envoûtante mélodie au &lt;em&gt;santour&lt;&#x2F;em&gt;, une cithare sur table.&lt;&#x2F;li&gt;
&lt;li&gt;🎮 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=NlU3PrmOLUo&quot;&gt;Trailer du jeu&lt;&#x2F;a&gt; des copains. Très bien réussi, ohlala c’est pro. Bravo &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;adrian.gaudebert.fr&#x2F;&quot;&gt;Adrian&lt;&#x2F;a&gt; !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Hetzner: cheap auction servers, and how to find them</title>
        <published>2024-07-08T00:00:00+00:00</published>
        <updated>2024-07-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/hetzner-auction-server-script/"/>
        <id>https://bouvier.cc/tech/hetzner-auction-server-script/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/hetzner-auction-server-script/">&lt;p&gt;Lately, I’ve had to find a hosting server to replace the server we rented for delire.party,
our self-hosting collective of friends. Indeed, OVH decided, with no extra explanations, to
decomission our Kimsufi server at the end of the year, and to have us pay a few euros more per
month until then. This kind of practices irritates me, so I’ve decided to pull out
the plug (metaphorically speaking — the OVH server will still be online for the time of the
migration) and have our next server live at Hetzner.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Hetzner is a German company, they’ve been relying on &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.hetzner.com&#x2F;unternehmen&#x2F;nachhaltigkeit&#x2F;&quot;&gt;renewable energy for a
while&lt;&#x2F;a&gt;, and they have this interesting system
of server auctions, with prices lowering until a server has been rented out. For a regular human
being, that would mean checking the website multiple times a day to find a cheap server with the
right specification. I, for one, am a nerd, so I’ve looked for ways to automate this.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few scripts for this on the Internet, but I made a relatively short one that was
perfectly suited for my constraints. I wanted to only see servers with a price tag less than 50€
per month, and at least 2TB of NVME storage. I also wanted email notifications, so that I can stay
in the comfort of my email client to check out the new deals. The script doesn’t account for deals
it’s already seen, but using it for three days (running it once per day) was sufficient to find a
satisfying deal, so I didn’t even have to bother implementing that.&lt;&#x2F;p&gt;
&lt;p&gt;The script is written in JavaScript (based on the one I’ve taken inspiration from), and it has two
dependencies: &lt;code&gt;request&lt;&#x2F;code&gt; to run the HTTP requests, and &lt;code&gt;nodemailer&lt;&#x2F;code&gt; to send me the email.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; nodemailer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;nodemailer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; dataUrl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; = &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;https:&#x2F;&#x2F;www.hetzner.com&#x2F;_resources&#x2F;app&#x2F;jsondata&#x2F;live_data_sb.json&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    smtp_host&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;mail.example.com&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    smtp_port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    smtp_username&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    smtp_password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    smtp_accept_unauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    email_from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;hetzner-deals@example.com&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    email_to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;your-email@example.com&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;smtp_host&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Please specity SMTP host&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    process&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;email_to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Please specify the email address to send notifications to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    process&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; transporter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; nodemailer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;createTransport&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;({&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    host&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;smtp_host&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;smtp_port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        user&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;smtp_username&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        pass&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;smtp_password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;    tls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        rejectUnauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;smtp_accept_unauthorized&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;})&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; jar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;jar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;defaults&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;({&lt;&#x2F;span&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt; jar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; jar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; })&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;dataUrl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; resp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; body&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; resp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;statusCode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; !==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 200&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Error: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Response code: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; resp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;statusCode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        process&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; json&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; JSON&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;parse&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; of&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; json&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;server&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; Here, `s` is the data representing a single server.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; You can look at it and make up your own filtering&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; criteria based on its shape.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; console.log(s);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; This holds the total size of NVME storage.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; sumNvme&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;serverDiskData&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;nvme&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;reduce&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; Rough approximation of the monthly price, based on the hourly price.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; monthlyPrice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;hourly_price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 24&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 31&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; renting an IPv4 costs around 2.02&#x2F;month&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        monthlyPrice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 2.02&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; round to second decimal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        monthlyPrice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; ((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; monthlyPrice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;sumNvme&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 2000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; monthlyPrice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 50&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;- &lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;id}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;    RAM=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;ram_size}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;GB&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;    NVME=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;sumNvme&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;GB&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;    PRICE=~&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;monthlyPrice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;€&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;information}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; mailOptions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;email_from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;email_to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        subject&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Hetzner Server deal found&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Found deals:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;\n\n&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;join&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;\n&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    transporter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;sendMail&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;mailOptions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; info&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Error sending email notification: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            process&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Email notification sent: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; info&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;response&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    })&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;})&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Hope this may be useful to some of you too!&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #11</title>
        <published>2024-07-03T00:00:00+00:00</published>
        <updated>2024-07-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w26/"/>
        <id>https://bouvier.cc/notes/2024-w26/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w26/">&lt;p&gt;Auto-hébergement, passage à Lyon et grosse rando, La Route et porcherie 2024.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#projets&quot; aria-label=&quot;Anchor link for: projets&quot;&gt;🔗&lt;&#x2F;a&gt;Projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;auto-hébergement&lt;&#x2F;h3&gt;
&lt;p&gt;J’ai commencé une grande remise à plat de mon auto-hébergement, en imaginant quels services personnels (qui tournent sur un serveur personnel) j’allais arrêter de faire tourner, ou migrer vers notre pseudo-&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.chatons.org&#x2F;&quot;&gt;CHATONS&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;delire.party&#x2F;&quot;&gt;Delire.Party&lt;&#x2F;a&gt;. Moralité : quatre ou cinq services arrêtés ou migrés depuis ma machine perso, un peu d’unification entre plusieurs autres services qui faisaient doublons (Nextcloud + &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;syncthing.net&#x2F;&quot;&gt;Syncthing&lt;&#x2F;a&gt;). J’y reviendrai peut-être plus en détail dans un billet plus long.&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, je me suis aussi acheté des nouveaux noms de domaines, dont celui que vous pouvez voir sur ce blog. &lt;code&gt;benj.me&lt;&#x2F;code&gt; ne me représentait plus, il date d’une époque où je trouvais le pseudonymat plutôt cool, mais en réalité 1. c’est difficile à dicter au téléphone, 2. je n’avais pas d’anonymat puisque mon identité était affichée en gros sur mon site perso, 3. je n’aime pas la sonorité de ce nom de domaine, tout simplement. Autant « l’assumer » plus ouvertement, et utiliser un nom de domaine public plus facile à dicter, et plus « adulte ».&lt;&#x2F;p&gt;
&lt;p&gt;Vivement les outils pour migrer en masse les adresses email utilisées lors des inscriptions aux services en ligne 🙃 J’imagine qu’une telle migration prendra des mois, si ce n’est des années. En migrant au fur et à mesure de la réception d’emails aux adresses de l’ancien domaine, j’ai déjà migré la plus grosse partie.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.iheart.com&#x2F;podcast&#x2F;1119-on-purpose-with-jay-shett-30589432&#x2F;episode&#x2F;if-youve-been-feeling-drained-listen-187748093&#x2F;&quot;&gt;If You’ve Been Feeling Drained… Listen To This (9 Steps To Recover And Avoid Burnout)&lt;&#x2F;a&gt; : des petites astuces pour gérer la fatigue un peu extrême. Pas de grosse nouveauté, mais ça fait du bien à entendre.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;podcasts.konbini.com&#x2F;konbini-small-talk-konbini&#x2F;202402070500-waly-dia-et-le-morphotype-la-mode&quot;&gt;Waly Dia et le morphotype à la mode&lt;&#x2F;a&gt; : un épisode de &lt;em&gt;Smalltalk&lt;&#x2F;em&gt; (présenté par David Castello Lopez) assez fun, qui me fait encore plus apprécier Waly Dia (que j’avais découvert par ses chroniques percutantes sur France Inter).&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=2toFzsyQJs4&quot;&gt;Becoming confident: why we don’t feel good enough&lt;&#x2F;a&gt; : un épisode de &lt;em&gt;Feelosophy&lt;&#x2F;em&gt;, d’Elizabeth Filips, dont j’avais parlé déjà dans ma rétrospective annuelle il y a quelques années, pour ses vidéos qui proposent une vision non toxique de la productivité. Ça résonne pas mal en moi, notamment cet aspect de ne jamais se poser de questions quant à une proposition de devenir une meilleure personne ; qui pourrait être signe de l’internalisation profonde d’une mésestime de soi.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;7btkkqiy&quot;&gt;8 Ways to Decide Which Friendships to Invest In &amp;amp; Which Friendships to Let Go Of&lt;&#x2F;a&gt; : toujours enchanté d’entendre des podcasts parler sérieusement d’amitiés, notamment des amitiés qui se terminent ou tournent mal. Malgré les pubs intégrées d’On Purpose, grr.&lt;&#x2F;li&gt;
&lt;li&gt;📖 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.babelio.com&#x2F;livres&#x2F;Larcenet-La-Route-BD&#x2F;1615602&quot;&gt;La Route&lt;&#x2F;a&gt;, de Manu Larcenet : BD post-apocalyptique sur un père et son enfant qui essaient de survivre. Adaptation BD d’un roman éponyme de Cormac McCarthy. Le dessin est complètement dingue, par endroits on a l’impression de voir des plaques photographiques qui auraient été exposées à la lumière.&lt;&#x2F;li&gt;
&lt;li&gt;🎵 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=nRhLCT5nV1Q&quot;&gt;Riposte Populaire — Porcherie 2024&lt;&#x2F;a&gt; : B******A ? PORCHERIE 🎶&lt;&#x2F;li&gt;
&lt;li&gt;📖 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.babelio.com&#x2F;livres&#x2F;Evens-Le-roi-Meduse&#x2F;1605635&quot;&gt;Le roi méduse&lt;&#x2F;a&gt;, de Brecht Evens. Le dessin est toujours aussi incroyable et mériterait de classer cette BD dans la catégorie des œuvres d’art, et l’histoire est toujours aussi &lt;em&gt;cringe&lt;&#x2F;em&gt;. Bref, c’est bien du Brecht Evens.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.24joursdeweb.fr&#x2F;2023&#x2F;juste-place-vs-juste-prix&#x2F;&quot;&gt;Juste place vs. juste prix ?&lt;&#x2F;a&gt; : une réflexion intéressante pour les indépendant·es, sur les notions de salaire idéal, de tarif militant, de salaire confortable.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zef.plus&#x2F;focus-mode&#x2F;&quot;&gt;Focus Mode&lt;&#x2F;a&gt; : l’auteur de Silverbullet a une plume acerbe et fun, et parle ici de sa propre propension à faire autre chose pendant les appels vidéos. Je m’y retrouve, et j’apprécie son auto-dérision et sa plume érudite.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #10</title>
        <published>2024-06-24T00:00:00+00:00</published>
        <updated>2024-06-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w25/"/>
        <id>https://bouvier.cc/notes/2024-w25/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w25/">&lt;p&gt;Grosse fatigue, #Silverbullet et logiciels de bookmarking open-source.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Passé quelques jours dans les bureaux d’Element (mon employeur), à Rennes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;podcast.projets-libres.org&#x2F;@projetslibres&#x2F;posts&#x2F;fe7e060d-3680-4d1d-a6f9-5f4c9356bd64&quot;&gt;Financer le logiciel libre en Europe, avec NLNet&lt;&#x2F;a&gt; : ça m’a permis de mieux comprendre comment fonctionnait NLNet, et m’a fait poser question si ça vaudrait le coup de demander un petit financement pour Kresus par la suite.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;uq4Vi8PyBFM&quot;&gt;Clothes are so much worse now&lt;&#x2F;a&gt; : où l’on apprend qu’un pull haute gamme et très cher de nos jours vaut au mieux un pull moyenne gamme cousu main d’il y a 50 ans. La faute du &lt;em&gt;fast-fashion&lt;&#x2F;em&gt;, de la réduction des coûts à tout prix et de l’industrialisation de la fabrication.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=E15S580IeP4&quot;&gt;🦏 DÉSASTRE MÉDIATIQUE : LES CHIENS ABOIENT… POUR QUE LE RN PASSE&lt;&#x2F;a&gt; : ohlala c’est la merde, frère.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=5eul6RTwRyg&quot;&gt;Récupérer l’information, la boussole et l’oseille - La chronique de Waly Dia&lt;&#x2F;a&gt; : pour la dernière du Grand Dimanche Soir (et oui, Charline a annoncé démissionner), Waly Dia est une fois de plus magistral, et toujours aussi juste.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;Silverbullet&lt;&#x2F;a&gt; est une (n-ième !) application Web de prise de notes open-source et auto-hébergeable, avec une approche très &lt;em&gt;hacker-friendly&lt;&#x2F;em&gt; : vous définissez les blocs de base dont vous avez besoin (objets, tags, templates, et j’en passe) pour créer des usages qui vous correspondent parfaitement. Peu de chances que je bouge d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;obsidian.md&#x2F;&quot;&gt;Obsidian&lt;&#x2F;a&gt; juste pour ça, mais je vais probablement utiliser ça pour mes collections personnelles de médias. Le nom est plutôt fun, vu que l’expression anglaise “silver bullet” désigne une solution &lt;em&gt;ultime&lt;&#x2F;em&gt; à un problème donné.&lt;&#x2F;li&gt;
&lt;li&gt;À l’occasion de l’utilisation du langage de &lt;em&gt;templating&lt;&#x2F;em&gt; de Silverbullet, je découvre l’API &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tc39.es&#x2F;proposal-temporal&#x2F;docs&#x2F;&quot;&gt;Temporal&lt;&#x2F;a&gt; en JavaScript, encore expérimentale (stage 3&#x2F;4), qui permettra de manipuler des dates plus facilement. Ouf…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;readeck.org&#x2F;&quot;&gt;Readeck&lt;&#x2F;a&gt; est un logiciel de &lt;em&gt;bookmarking&lt;&#x2F;em&gt; open-source auto-hébergeable, pour sauver le contenu des articles que l’on aimerait lire plus tard, mais également pour sauvegarder des vidéos que l’on aimerait voir plus tard. Fonctionnalités qui m’intéressent particulièrement, par rapport à l’excellent &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wallabag.org&#x2F;&quot;&gt;Wallabag&lt;&#x2F;a&gt; : la possibilité d’enregistrer des &lt;em&gt;surlignages&lt;&#x2F;em&gt; de certains passages nativement ; la possibilité d’ajouter des vidéos Youtube à voir plus tard ; la possibilité de changer de manière fine les réglages typographiques (j’ai dû mettre en place un style personnalisé sur le Wallabag Web pour trouver ça lisible !). Pas d’application Android, sinon ç’aurait été un remplacement parfait directement 😊&lt;&#x2F;li&gt;
&lt;li&gt;Je découvre également &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;readwise.io&#x2F;read&quot;&gt;Readwise Read&lt;&#x2F;a&gt; (non libre 😥), qui permet d’avoir une interface unique pour la consultation des flux RSS, l’archivage des pages (à la Wallabag), mais aussi l’intégration des fichiers epub&#x2F;PDF (j’ai effectivement un répertoire rempli de PDFs que je pense n’avoir &lt;em&gt;jamais&lt;&#x2F;em&gt; consulté de ma vie), transcription des vidéos Youtube, et la possibilité d’enregistrer des surlignages également intégrés dans leur app originelle Readwise. Je vais pas vous mentir, ça me donne &lt;em&gt;très&lt;&#x2F;em&gt; envie, et je suis à deux doigts de lancer un nouveau projet libre.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;ok&quot;&gt;OK&lt;&#x2F;a&gt;, un langage de programmation parodique dont le README est très fun à lire (si vous vous y connaissez un peu en développement, du moins).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #9</title>
        <published>2024-06-17T00:00:00+00:00</published>
        <updated>2024-06-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w24/"/>
        <id>https://bouvier.cc/notes/2024-w24/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w24/">&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Quelques petites relectures de bug fix sur mobile par Nicofrand (merci à lui !).&lt;&#x2F;li&gt;
&lt;li&gt;Fusion d’une MR (encore de Nicofrand, bravo 👏) qui simplifie &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1637&quot;&gt;l’affichage de la balance&lt;&#x2F;a&gt; 🥰&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;scribouilli-2024&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#scribouilli-2024&quot; aria-label=&quot;Anchor link for: scribouilli-2024&quot;&gt;🔗&lt;&#x2F;a&gt;Scribouilli 2024&lt;&#x2F;h3&gt;
&lt;p&gt;Derrière ce nom de code se cache un projet de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framapiaf.org&#x2F;@maiwann&quot;&gt;Maiwann&lt;&#x2F;a&gt; pour aider les candidat·es aux élections législatives à se faire des mini-sites de présentation. Toutes les explications &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;legislatives-2024-maiwann-a1cb0e879ab8bab2bc243d3e9f46955f92cb8.monpetitsite.org&#x2F;&quot;&gt;ici&lt;&#x2F;a&gt;. Un peu sur un coup de tête, en mode dernière minute et parce que je ressentais les bienfaits de l’empouvoirement à essayer de se réapproprier cette situation politique inextricable, et le plaisir du collectif, j’ai modestement aidé avec mes compétences de sysadmin à mettre en place l’instance, désormais disponible &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;2024.scribouilli.org&#x2F;&quot;&gt;ici&lt;&#x2F;a&gt;. À noter que tout le crédit du développement revient à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lechappeebelle.team&#x2F;&quot;&gt;l’Échappée Belle&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Y2GFFTaBP5w&quot;&gt;🦏 FRANCE TV, RADIO FRANCE : LA MISE À MORT PROGRAMMÉE DU SERVICE PUBLIC&lt;&#x2F;a&gt;. Je n’avais pas du tout entendu parler de cette réforme, mais bonne nouvelle, elle est en pause suite aux décisions impétueuses de notre petit père des peuples bien aimé…&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pca.st&#x2F;episode&#x2F;b53be1a3-54bc-4c81-a577-a5c5884100f2&quot;&gt;6 Small Changes You Can Make Immediately To Have a Big Impact On Your Mental Wellbeing&lt;&#x2F;a&gt; : vraiment dommage que ce podcast &lt;em&gt;On purpose&lt;&#x2F;em&gt; ait autant de publicités incluses maintenant, parce que le contenu est généralement plutôt bon et bienveillant (même si, en soi, cet épisode ne présente rien d’extraordinaire ou de très nouveau).&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;dmMDikbHgTc&quot;&gt;Capitalism and ego formation&lt;&#x2F;a&gt;: comment nos esthétiques (styles, au sens large) sont devenues des produits comme les autres, pourquoi le minimalisme n’échappe pas à ça, pourquoi on a besoin de ces esthétiques.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=7JZSSCKbs9M&quot;&gt;L’appel unitaire d’Olivier Besancenot - L’invité politique&lt;&#x2F;a&gt;, assez rafraîchissant de voir avec un peu de recul cet appel à l’union des gauches… quelques semaines avant les élections européennes. Un bon cours magistral sur la décolonisation également.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.multiamory.com&#x2F;podcast&#x2F;455-my-brain-understands-but-my-body-is-panicking-with-orit-krug&quot;&gt;My brain understands, but my body’s panicking&lt;&#x2F;a&gt; : un épisode de &lt;em&gt;Multiamory&lt;&#x2F;em&gt; sur le trauma, mais aussi sur le concept que le corps garde le change, et parfois l’intellect ment et raconte une histoire en décalage par rapport à celle du corps. M’a donné envie de lire &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.besselvanderkolk.com&#x2F;resources&#x2F;the-body-keeps-the-score&quot;&gt;The Body Keeps The Score&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.iheart.com&#x2F;podcast&#x2F;1119-grown-up-stuff-how-to-adu-114754620&#x2F;episode&#x2F;plan-for-retirement-like-a-grown-up-115221334&#x2F;&quot;&gt;Plan for retirement like a Grown-up&lt;&#x2F;a&gt; : un nouveau podcast que je tente, &lt;em&gt;Grown up stuff&lt;&#x2F;em&gt;, et qui parle des sujets dont on ne parle pas à l’école. Celui-ci, sur le financement de la retraite, était très américano-centré, et ne s’applique que très moyennement en dehors. Et puis y a tous les débats d’ici : est-ce que la retraite existera encore quand je serais vieux ? Est-ce que la droite n’aura pas fini de massacrer la retraite publique pour la rendre inutile ? Est-ce que ça vaut le coup de garder de l’argent pour quand je n’aurai quasiment plus d’énergie pour en faire quoi que ce soit, ou mieux vaut-il tout crâmer maintenant pour les causes, les gens, et les choses que j’aime ? Le seul point qui m’a fait lever un sourcil, c’est l’heuristique de budget 20&#x2F;30&#x2F;50 : 50% pour le loyer, 30% pour les commodités, 20% pour l’épargne (mais ça ne s’applique pas bien du tout aux budgets faibles ou élevés).&lt;&#x2F;li&gt;
&lt;li&gt;📺 Suite à des conversations avec une proche qui me dit “ma banquière m’a dit que les taux d’intérêts allaient baisser”, je me pose la question de quelles sont les mécaniques qui font varier les taux d’intérêt, et me retrouve dans une spirale auto-didacte sur la macro-économie ; la chaîne Youtube Heurêka reste une référence pour moi (ici &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=KsfjIFE4ce4&quot;&gt;l’épisode sur l’inflation&lt;&#x2F;a&gt;, là l’épisode sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=uTox1bXamW0&quot;&gt;&lt;em&gt;moneycopter&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; — balancer de l’argent depuis un hélicoptère, en sortie de COVID), d’autant plus qu’avec le temps l’hôte devient de plus en plus ouvertement critique du modèle communément accepté.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Je découvre par hasard des &lt;em&gt;shorts&lt;&#x2F;em&gt; de Sam Reich (connu par CollegeHumor, ohlala ça nous rajeunit pas mes adelphes), qui &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;3uXaQlD3cjg&quot;&gt;bouclent&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;9ixhbcRy2Z4&quot;&gt;parfaitement&lt;&#x2F;a&gt;. Extrêmement satisfaisant.&lt;&#x2F;li&gt;
&lt;li&gt;📺… et grâce à un ami, je découvre le site &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dropout.tv&#x2F;&quot;&gt;Dropout&lt;&#x2F;a&gt;, chaîne humoristique (payante, mais les patron·nes invitent ouvertement au partage de codes) montée par des ancien·nes de CollegeHumor, avec beaucoup d’impro, avec un niveau tellement impressionnant. Les épisodes du jeu &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=vT-zZsjwZKk&quot;&gt;&lt;em&gt;Game Changer&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; notamment me font &lt;em&gt;beaucoup&lt;&#x2F;em&gt; rire.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Je découvre une interface terminal (TUI) pour faciliter l’utilisation de Docker, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;lazydocker&quot;&gt;&lt;code&gt;lazydocker&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, dans le même esprit que &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;lazygit&quot;&gt;&lt;code&gt;lazygit&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; qui améliore grandement l’utilisabilité de git pour le geek que je suis (et j’adore !).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;revolt.chat&#x2F;&quot;&gt;Revolt Chat&lt;&#x2F;a&gt;, un &lt;em&gt;copycat&lt;&#x2F;em&gt; open-source de Discord.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;difftastic.wilfred.me.uk&#x2F;&quot;&gt;Difftastic&lt;&#x2F;a&gt; est un outil qui permet de faire des &lt;em&gt;diffs&lt;&#x2F;em&gt; contextuels de la syntaxe du langage « diffé », pour remplacer les diffs bêtes et méchants des gestionnaires de versions comme &lt;code&gt;git&lt;&#x2F;code&gt;. À tester.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Vous connaissez la marque de papier à cigarettes &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;OCB&quot;&gt;OCB&lt;&#x2F;a&gt; ? Mais est-ce que vous saviez que le B dans OCB veut dire Bolloré, du nom du vendeur, grand père de notre très cher Vincent ? Tryo nous avait &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.paroles.net&#x2F;tryo&#x2F;paroles-pompafric&quot;&gt;prévenus&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Rappel que &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;q6INdD1kerA&quot;&gt;ce remix de slogan de manif&lt;&#x2F;a&gt; existe.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #8</title>
        <published>2024-06-10T00:00:00+00:00</published>
        <updated>2024-06-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w23/"/>
        <id>https://bouvier.cc/notes/2024-w23/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w23/">&lt;p&gt;Une semaine qui me semble être passée très vite.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Changement de formateur du code Python pour utiliser &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;black.readthedocs.io&#x2F;en&#x2F;stable&#x2F;#&quot;&gt;Black&lt;&#x2F;a&gt;, qui est rapide et avec des valeurs par défaut très raisonnables.&lt;&#x2F;li&gt;
&lt;li&gt;4 relectures de code (le lundi).&lt;&#x2F;li&gt;
&lt;li&gt;Une simplification pour éviter un bug subtil lors du changement de thème sombre&#x2F;clair.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;podcasts.konbini.com&#x2F;konbini-small-talk-konbini&#x2F;202211090600-sophie-marie-larrouy-et-la-mafia-du-bois&quot;&gt;Sophie Marie Larrouy et la mafia du bois&lt;&#x2F;a&gt;, un épisode du podcast &lt;em&gt;Small Talk&lt;&#x2F;em&gt;. Sophie-Marie Larrouy me fait beaucoup rire par moments parce qu’elle est extrêmement spontanée et inventive. Mais plus ça va, moins je trouve d’intérêt à ce podcast en général.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 Encore un&#x2F;des épisodes de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rts.ch&#x2F;audio-podcast&#x2F;2022&#x2F;emission&#x2F;dingue-25855488.html&quot;&gt;Dingues&lt;&#x2F;a&gt;, le podcast de la RTS sur les troubles cognitifs. Trop intéressant.&lt;&#x2F;li&gt;
&lt;li&gt;📖 J’ai continué un peu « Building a second brain », un livre sur la prise de notes pour externaliser sa mémoire. Quelques bonnes idées et découvertes au milieu de beaucoup de froufrou. Je continue, cependant, c’est de plus en plus riche en information (et de plus en plus pauvre en froufrou).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;une-citation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#une-citation&quot; aria-label=&quot;Anchor link for: une-citation&quot;&gt;🔗&lt;&#x2F;a&gt;Une citation&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the most cited psychology papers of the 1990s found that “translating emotional events into words leads to profound social, psychological, and neural changes” … No one had to read or respond to what these people wrote down — the benefits came just from the act of writing.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;— &lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.buildingasecondbrain.com&#x2F;book&quot;&gt;Building a second brain&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;D’où l’intérêt d’écrire dans un journal intime, ou encore de publier ses notes hebdomadaires 😊&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #7</title>
        <published>2024-06-03T00:00:00+00:00</published>
        <updated>2024-06-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w22/"/>
        <id>https://bouvier.cc/notes/2024-w22/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w22/">&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Quelques petites relectures de code.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;cargo-machete&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cargo-machete&quot; aria-label=&quot;Anchor link for: cargo-machete&quot;&gt;🔗&lt;&#x2F;a&gt;cargo-machete&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;cargo-machete&lt;&#x2F;a&gt; est un outil qui permet de détecter rapidement des dépendances inutilisées dans des projets Rust.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Plusieurs relectures et fusions de contributions.&lt;&#x2F;li&gt;
&lt;li&gt;Je suis partagé entre une envie de demander de l’aide pour la maintenance, et une légère peur de perdre le contrôle et de ne plus suivre le projet si je le fais 🤔&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute-joue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute-joue&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute-joue&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté &#x2F; Joué&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.jayshetty.me&#x2F;podcast&#x2F;4-ways-to-know-if-it-is-time-to-end-your-relationship-when-the-signs-are-not-clear-and-things-are-not-bad&quot;&gt;4 Ways to Know if It Is Time To End Your Relationship&lt;&#x2F;a&gt; : les titres des épisodes du podcast de Jay Shetty « On purpose » sont souvent plus affriolants qu’ils ne sont réalistes ; dans cet épisode on parle de (in)sécurité émotionnelle et d’intimité relationnelle, et on entend parler des statistiques sur les raisons qui font que les gens &lt;em&gt;restent&lt;&#x2F;em&gt; ensemble autant que les raisons qui les font se &lt;em&gt;séparer&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=gn0QsUDgUY0&quot;&gt;Comment fonctionne une voiture (pour résumer)&lt;&#x2F;a&gt; : l’impression que plein de mots que j’ai entendu des milliards de fois forment enfin un système compréhensible.&lt;&#x2F;li&gt;
&lt;li&gt;📖 Fini « Extases », de JeanLouis Tripp, bande dessinée où l’auteur décrit sa sexualité débridée sans se cacher.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=bQGEDKDK3oc&quot;&gt;Face à l’extrême droite, il est minuit moins le quart&lt;&#x2F;a&gt; : Sophie Binet évoque le programme des Jours Heureux du Conseil National de la Résistance, et effectue un rapprochement avec notre situation politique actuelle. C’est rafraîchissant.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bonpote.com&#x2F;on-a-besoin-de-pirates-pour-saboter-les-datacenters-damazon-pour-bloquer-les-plateformes-duber-ou-de-airbnb&#x2F;&quot;&gt;On a besoin de pirates pour saboter les datacenters d’Amazon, pour bloquer les plateformes d’Uber ou de Airbnb&lt;&#x2F;a&gt; : entretien entre Bon Pote et Alain Damasio sur la technocritique, la perte de puissance inconsciemment tolérée, quelques aberrations dans les réponses, bref, du Damasio.&lt;&#x2F;li&gt;
&lt;li&gt;🕸&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;basta.media&#x2F;salaire-au-besoin-egalite-salariale-alternative-cooperative-Scop-boulangerie-Le-Pain-des-Cairns-reconnaissance-du-travail&quot;&gt;Salaire unique ou « salaire au besoin » : une coopérative boulangère repense la notion de rémunération&lt;&#x2F;a&gt; : une réflexion sur les manières alternatives de se payer, dans des coopératives.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=PjyMdQptGYI&quot;&gt;Photographic Memory: My System to Remember Everything&lt;&#x2F;a&gt;: une interne (?) en médecine explique des techniques de mémorisation qui s’appliquent bien aux sciences « dures ».&lt;&#x2F;li&gt;
&lt;li&gt;🎮 Une démo du jeu &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;2198150&#x2F;Tiny_Glade&#x2F;&quot;&gt;Tiny Glade&lt;&#x2F;a&gt; créé par d’ancien·nes collègues d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.embark-studios.com&#x2F;&quot;&gt;Embark Studios&lt;&#x2F;a&gt; est sortie cette semaine. Si vous cherchez un petit jeu de construction &lt;em&gt;chill&lt;&#x2F;em&gt;, relaxant, très beau et très intuitif, je vous le recommande vivement ! Et surprise, un de mes auteurs de BD favoris, Boulet, l’a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;octodon.social&#x2F;@Bouletcorp&#x2F;112534714648872675&quot;&gt;encensé sur Masto&lt;&#x2F;a&gt; 😊&lt;&#x2F;li&gt;
&lt;li&gt;🎮 J’ai aussi essayé des jeux que j’avais achetés depuis un moment, notamment le jeu absurde en vue première personne &lt;em&gt;The Stanley Parable&lt;&#x2F;em&gt; et le city-builder &lt;em&gt;Fabledom&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;📺 Continué la saison 2 de &lt;em&gt;Sense8&lt;&#x2F;em&gt;. En fait cette série est une expérience de pensée de ce que ça représente de ne plus avoir de barrière du tout, d’être complètement vulnérable constamment auprès d’un groupe. Sûrement idéalisé, parce que ça passe quand même trop bien pour tout le monde 😌&lt;&#x2F;li&gt;
&lt;li&gt;🎧 Je découvre le podcast &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.rts.ch&#x2F;audio-podcast&#x2F;2022&#x2F;emission&#x2F;dingue-25855488.html&quot;&gt;Dingue&lt;&#x2F;a&gt;, de la RTS. Super intéressant, avec un format d’un épisode par neuroatypie, beaucoup de témoignages de personnes concernées, de proches. À suivre !&lt;&#x2F;li&gt;
&lt;li&gt;📺 J’ai binge-watché (benj-watché ?) la série &lt;em&gt;Fiasco&lt;&#x2F;em&gt; sur Netflix. Une seule chose à dire : meh 🤷‍♂.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=QCphS4_Rp3w&quot;&gt;Honest Government Ad — Democracy&lt;&#x2F;a&gt;. J’aime déprimer le dimanche soir en découvrant l’état catastrophique de « démocraties » qui tiennent des élections cette année.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=C48PbGgqyDo&quot;&gt;INSTITUTS BIDONS, INFLUENCEURS FORMATÉS : DERRIÈRE L’EXTRÊME DROITE, LE RÉSEAU ATLAS&lt;&#x2F;a&gt;. J’aime déprimer le dimanche soir en découvrant les manigances d’un think-tank libertarien d’extrême droite, qui élargit la fenêtre d’Overton un peu plus vers la droite depuis des années, et en bonus, ne se cache même pas de ses exactions.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=sxduiuBFXEU&quot;&gt;Pourquoi le franglais nous énerve autant&lt;&#x2F;a&gt; : je me rends compte que j’ai acquis beaucoup de ces tics et mésusages agaçants. Très cool de ré-entendre cette statistique de jusquà 60% des mots anglais proviendraient de l’ancien français.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;veille-tech&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#veille-tech&quot; aria-label=&quot;Anchor link for: veille-tech&quot;&gt;🔗&lt;&#x2F;a&gt;Veille tech&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;GetPublii&#x2F;Publii&quot;&gt;Publii&lt;&#x2F;a&gt; est une application de bureau qui permet de modifier des blogs statiques générés à la main. Notez qu’il existe également &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scribouilli.github.io&#x2F;scribouilli&#x2F;&quot;&gt;Scribouilli&lt;&#x2F;a&gt; qui permet de faire sensiblement la même chose en ligne, en rendant le tout très très simple à utiliser.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;affine.pro&#x2F;&quot;&gt;Affine&lt;&#x2F;a&gt; est une alternative open-source à Notion et Miro, utilisable dans un navigateur Web. La version open-source est relativement restreinte (pas plus de 3 utilisateur·ices par &lt;em&gt;workspace&lt;&#x2F;em&gt;), mais le logiciel semble prometteur : collaboration temps réel, édition en bloc, mode dessin (comme Miro), bases de données intégrées (comme Notion), et tout plein d’autres fonctionnalités. Quelques petits désagréments m’en rendraient l’usage désagréable sur le long terme, mais ça me semble être globalement une bonne alternative pour un usage personnel.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mihaigalos&#x2F;dusage&quot;&gt;dusage&lt;&#x2F;a&gt; est une alternative réécrite en Rust 🦀 à l’outil en ligne de commande &lt;code&gt;du&lt;&#x2F;code&gt;, avec une interface plus moderne.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dalance&#x2F;procs&quot;&gt;procs&lt;&#x2F;a&gt; est une alternative à &lt;code&gt;ps&lt;&#x2F;code&gt; réécrite en Rust 🦀. Bon on commence à connaître la chanson.&lt;&#x2F;li&gt;
&lt;li&gt;🕸 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ntietz.com&#x2F;blog&#x2F;lets-say-instead-of-auth&#x2F;&quot;&gt;Instead of auth, say Login and Permissions&lt;&#x2F;a&gt; (technique) : le titre du billet révèle bien son point, le terme &lt;code&gt;auth&lt;&#x2F;code&gt; peut dire deux choses, donc utilisons deux mots différents à la place. Basique. Simple.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.editdit.com&#x2F;&quot;&gt;Editdit&lt;&#x2F;a&gt;, pour générer des images mème sans watermark. Très important si on pratique l’art du &lt;em&gt;shitposting&lt;&#x2F;em&gt; (ou en langue de Molière, la &lt;em&gt;publicacation&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Lors de mes recherches sur le fonctionnement des voitures, je m’intéresse au concept de « couple moteur », et découvre sur la page de désambiguation que le terme « couple » comme une paire &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cnrtl.fr&#x2F;definition&#x2F;couple&quot;&gt;peut être utilisé au genre féminin&lt;&#x2F;a&gt;. On peut donc dire une couple de chiens, une couple de colombe, une couple d’œufs…&lt;&#x2F;li&gt;
&lt;li&gt;La &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;M%C3%A9tonymie&quot;&gt;métonymie&lt;&#x2F;a&gt; est une figure de style qui renomme un terme&#x2F;concept en utilisant un autre, qui a une relation logique, de continuité, ou d’appartenance avec le premier. J’ai lu un Zola, j’ai bu un verre, je suis monté sur un deux-roues, j’ai croisé le fer, j’ai été refroidi.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ailleurs&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ailleurs&quot; aria-label=&quot;Anchor link for: ailleurs&quot;&gt;🔗&lt;&#x2F;a&gt;Ailleurs&lt;&#x2F;h2&gt;
&lt;p&gt;Chez &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;juliebrillet.fr&#x2F;notes&#x2F;2024_05_31_notes&#x2F;&quot;&gt;Julie&lt;&#x2F;a&gt;, chez &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.notmyidea.org&#x2F;notes-hebdo-32.html&quot;&gt;Alexis&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #6</title>
        <published>2024-05-27T00:00:00+00:00</published>
        <updated>2024-05-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w21/"/>
        <id>https://bouvier.cc/notes/2024-w21/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w21/">&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;J’ai remis en place mes environnements de développement, pour découvrir qu’ils ne marchaient plus sur mes deux machines, à cause de dépendences incompatibles d’un côté, et d’incompatibilité avec le noyau Linux de l’autre 🫠&lt;&#x2F;li&gt;
&lt;li&gt;Mais c’était assez trivial de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;commit&#x2F;332f0d40accc8f0976bfc742ad496a7269fdb423&quot;&gt;changer la dépendance problématique&lt;&#x2F;a&gt; 🥳 Je peux de nouveau développer et tester Kresus sur une de mes machines, ouf.&lt;&#x2F;li&gt;
&lt;li&gt;Petite tentative de mettre à jour &lt;code&gt;yarn&lt;&#x2F;code&gt;, puis de le remplace par &lt;code&gt;npm&lt;&#x2F;code&gt; de nouveau dans nos scripts de CI, mais aïe aïe aïe, c’est compliqué.&lt;&#x2F;li&gt;
&lt;li&gt;L’écosystème JavaScript me fatigue un peu ; ces derniers temps je passe plus de temps à maintenir l’infrastructure de ce projet qu’à le développer.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;soundcloud.com&#x2F;arte-radio-1&#x2F;inventer-une-therapie-feministe&quot;&gt;Inventer une thérapie féministe&lt;&#x2F;a&gt; : merci Alexis pour la découverte de ce podcast et de cet épisode, riche en témoignages sur des psychologues qui amoindrissent les problèmes des patient·es, et aident le patriarcat à faire système. À mettre en lien sur le pouvoir qu’on donne aux psys en général, cf mes notes de la semaine dernière.&lt;&#x2F;li&gt;
&lt;li&gt;📖 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bikepacking.com&#x2F;plog&#x2F;man-or-bear-debate&#x2F;&quot;&gt;A Woman Who Left Society to Live With Bears Weighs in on Man or Bear&lt;&#x2F;a&gt; : Il y a un débat aux US sur le fait que des femmes questionnées dans la rue « préfériez-vous être coincé dans une forêt avec un homme ou un ours ? » préfèrent répondre un ours, parce que les hommes les effraient. Ce billet relate l’opinion inédite d’une cycliste qui se retrouve souvent seule dans des forêts, littéralement entourée d’ours. Une belle pièce sur cette immondice qu’est le patriarcat, et le rapport à la nature.&lt;&#x2F;li&gt;
&lt;li&gt;📖 Commencé « Extases », de JeanLouis Tripp, bande dessinée où l’auteur décrit sa sexualité débridée sans se cacher.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lsd-rs&#x2F;lsd&quot;&gt;LSD&lt;&#x2F;a&gt; est un remplacement à la command &lt;code&gt;ls&lt;&#x2F;code&gt; sous Linux, écrit en Rust 🦀 avec plein de fonctionnalités qui le rendent très attrayant.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kagi.com&#x2F;&quot;&gt;Kagi&lt;&#x2F;a&gt; est un moteur de recherche payant aux résultats qui semblent intéressants ; bien que je ne sois pas convaincu de payer les montants indiqués pour faire si peu de recherches, en faisant beaucoup dans le cadre de mon travail, j’applaudis l’effort d’une indexation alternative du Web.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;une-citation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#une-citation&quot; aria-label=&quot;Anchor link for: une-citation&quot;&gt;🔗&lt;&#x2F;a&gt;Une citation&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Boundaries are the distance at which I can love you and me simultaneously&lt;&#x2F;p&gt;
&lt;p&gt;— Prentis Hemphill&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #5</title>
        <published>2024-05-22T00:00:00+00:00</published>
        <updated>2024-05-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w20/"/>
        <id>https://bouvier.cc/notes/2024-w20/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w20/">&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Publication d’une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;blog&#x2F;kresus-version-0-21-0.html&quot;&gt;nouvelle version&lt;&#x2F;a&gt;, avec des petits changements. L’occasion de voir que quelques scripts de publication étaient cassés 🥴&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=x4ieMzbXiRA&quot;&gt;TikTok Gave Me Autism: The Politics of Self Diagnosis&lt;&#x2F;a&gt; : Est-ce que l’auto-diagnostic des troubles du neuro-développement a une validité ? Et si non, qu’est-ce que ça dit sur notre société, le pouvoir, et le concept de « la maladie mentale » ? J’ai trouvé certains passages de philosophie&#x2F;sociologie un peu durs à suivre, mais j’ai tout de même apprécié les réflexions sur l’épistémologie et les constructions sociales.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=kcNpBNpvyc4&quot;&gt;ASDF movie, full collection&lt;&#x2F;a&gt; : si vous aimez les cartoons d’humour un peu trash &#x2F; gore &#x2F; cynique, c’est fait pour vous. Bien que ça date un peu (et ça se sent sur certaines blagues), j’ai adoré le rythme et la créativité.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ai25&#x2F;conduit&quot;&gt;Conduit&lt;&#x2F;a&gt; est une application Web open-source qui sert de vue alternative à Youtube : on peut y regarder des vidéos Youtube, sans être sur la page de youtube.com, et sauvegarder ses listes de vidéos, son historique de vue, etc. C’est basé sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;TeamPiped&#x2F;Piped&quot;&gt;Piped&lt;&#x2F;a&gt;, qui est une autre vue alternative que j’utilise avec satisfaction depuis plusieurs années.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Argos&lt;&#x2F;em&gt; est un nouveau logiciel open-source de supervision massive de très nombreux services, et qui a l’air très simple à configurer. Interview des « inventeurs » sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framablog.org&#x2F;2024&#x2F;05&#x2F;16&#x2F;argos-panoptes-linterview&#x2F;&quot;&gt;Framablog&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #4</title>
        <published>2024-05-14T00:00:00+00:00</published>
        <updated>2024-05-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w19/"/>
        <id>https://bouvier.cc/notes/2024-w19/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w19/">&lt;p&gt;Une semaine de vacances bien plaisante, avec une escapade vers des paysages magnifiques 🤩&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu-lu-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;Mqu-yZWce8c&quot;&gt;Podcasters profoundly saying nothing&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;eGhAlNnDDmY&quot;&gt;Side effects (remix)&lt;&#x2F;a&gt; &#x2F; &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;shorts&#x2F;7KuY233zT-M&quot;&gt;Just a quick lil treat&lt;&#x2F;a&gt;: je deviens de plus en plus fan des vidéos humoristiques d’Elle Cordova. J’y apprécie autant sa diction, sa vélocité, son &lt;em&gt;flow&lt;&#x2F;em&gt; que son érudition dans le choix d’un vocabulaire raffiné.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=VXycYC2xqrE&quot;&gt;Procès médiatique en antisémitisme, peut-on encore défendre les insoumis ?&lt;&#x2F;a&gt; : bon, quand une vidéo est recommandée par email, puis sur Mastodon, puis dans les notes personnelles de plusieurs personnes, on ne fait pas l’impasse dessus. Fascinant et effrayant.&lt;&#x2F;li&gt;
&lt;li&gt;…Ce qui me permet de découvrir &lt;em&gt;Rhinoceros&lt;&#x2F;em&gt;, une émission d’analyse des médias (?) sur Blast, avec Lumi et Usul. 📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ObdXww-PX1A&quot;&gt;Transphobie, la nouvelle panique des médias et de l’extrême-droite&lt;&#x2F;a&gt;. Comment des anciennes féministes se transforment en les plus abominables TERFs et leurs discours sont régulièrement servis sur un plateau… TV.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=20umeSUspn8&quot;&gt;Doctor Tracey Marks — Stop fixing, start listening&lt;&#x2F;a&gt; : comment être plus dans l’écoute active et l’empathie plutôt que la proposition d’aide non-sollicitée lors de discussions émotionnelles compliquées. Un domaine sur lequel je sens que j’ai besoin de m’améliorer, que ce soit envers moi ou les autres.&lt;&#x2F;li&gt;
&lt;li&gt;📖 &lt;em&gt;De polyamour et d’eau fraîche&lt;&#x2F;em&gt;, d’Elsa Hebert, Cookie Kalkair et Cristina Rodriguez. Une petite foire aux questions sous forme de BD sur le concept de polyamour. Un concept nommé qui m’a le plus marqué est celui de &lt;em&gt;compersion&lt;&#x2F;em&gt; : à l’opposé de la jalousie, il s’agit du fait d’être authentiquement heureux quand quelque chose de bien arrive à quelqu’un d’autre. Quelque chose de communément ressenti pour des ami·es ou de la famille, cette idée prend une dimension inédite dans le cadre du polyamour.&lt;&#x2F;li&gt;
&lt;li&gt;📖 Fini la BD &lt;em&gt;Frontiers&lt;&#x2F;em&gt; de Singelin.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stickertrade.me&#x2F;&quot;&gt;Stickertrade&lt;&#x2F;a&gt;, un site pour échanger des stickers avec des gens de par le monde.&lt;&#x2F;li&gt;
&lt;li&gt;Le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Chansigne&quot;&gt;Chansigne&lt;&#x2F;a&gt; (en anglais, &lt;em&gt;Sign Singing&lt;&#x2F;em&gt;) consiste à interpréter les paroles d’une chanson, jouée en arrière-plan, en langue des signes, en live. Découvert à l’occasion de la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mstdn.social&#x2F;@NaMi&#x2F;112428006306182460&quot;&gt;stupéfiante prestation&lt;&#x2F;a&gt; d’une interprète dans le cadre de l’Eurovision.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ailleurs&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ailleurs&quot; aria-label=&quot;Anchor link for: ailleurs&quot;&gt;🔗&lt;&#x2F;a&gt;Ailleurs&lt;&#x2F;h2&gt;
&lt;p&gt;Chez &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;juliebrillet.fr&#x2F;notes&#x2F;2024_05_13_notes&#x2F;&quot;&gt;Julie&lt;&#x2F;a&gt;, chez &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.notmyidea.org&#x2F;notes-hebdo-28.html&quot;&gt;Alexis&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #3</title>
        <published>2024-05-06T00:00:00+00:00</published>
        <updated>2024-05-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w18/"/>
        <id>https://bouvier.cc/notes/2024-w18/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w18/">&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt; est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Préparation d’une petite &lt;em&gt;release&lt;&#x2F;em&gt; avant de s’atteler à des chantiers plus gros et des changements plus « risqués ».
&lt;ul&gt;
&lt;li&gt;Mise à jour des banques accessibles, avec migration si besoin.&lt;&#x2F;li&gt;
&lt;li&gt;Une relecture du changelog en vue de cette &lt;em&gt;release&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;framasoft-penguin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#framasoft-penguin&quot; aria-label=&quot;Anchor link for: framasoft-penguin&quot;&gt;🔗&lt;&#x2F;a&gt;Framasoft 🐧&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasoft.org&#x2F;fr&quot;&gt;Framasoft&lt;&#x2F;a&gt; est une association d’éducation populaire aux enjeux du numérique, qui développe, héberge des services libres.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Discussion interne pour trouver des tâches où aider 💪&lt;&#x2F;li&gt;
&lt;li&gt;Réflexion technique autour de la conception d’un schéma de base de données 🤔&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;3T7_2JwNtH0?si=uhSnkOAmkEiqe1H_&quot;&gt;L’évolution du ton des journalistes à la télévision&lt;&#x2F;a&gt;. Un cours magistral d’imitation, pour vous aussi sonner comme un publicitaire dans les années 50.&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;1b-KUdT5bU8&quot;&gt;Demain sera meilleur&lt;&#x2F;a&gt;. Court-métrage très onirique et à la musique électronique envoûtante.&lt;&#x2F;li&gt;
&lt;li&gt;🎵 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=qHGxrPi1rUE&quot;&gt;The Ink Spots - Maybe (cover)&lt;&#x2F;a&gt;, découverte grâce au Joueur du Grenier dans sa vidéo commémorant Fallout.&lt;&#x2F;li&gt;
&lt;li&gt;📖 Commencé la BD &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bdfugue.com&#x2F;frontier&quot;&gt;Frontiers&lt;&#x2F;a&gt;, qui envisage un futur où les entreprises semblent avoir conquis l’espace. À suivre.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;« &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Derviche&quot;&gt;Derviche&lt;&#x2F;a&gt; » signifie « mendiant &#x2F; pauvre » en persan. La pauvreté à laquelle il est fait mention n’est pas tant matériel, mais peut être spirituelle quand elle est comparée à la richesse de l’entité religieuse vénérée. Le terme d’origine arabe « fakir » désigne une pauvreté similaire. Ces termes peuvent maintenant servir à désigner les membres de confréries religieuses, tels les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Ordre_mevlevi&quot;&gt;derviches tourneurs&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #2</title>
        <published>2024-04-29T00:00:00+00:00</published>
        <updated>2024-04-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w17/"/>
        <id>https://bouvier.cc/notes/2024-w17/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w17/">&lt;h2 id=&quot;des-projets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-projets&quot; aria-label=&quot;Anchor link for: des-projets&quot;&gt;🔗&lt;&#x2F;a&gt;Des projets&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kresus-pig&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-pig&quot; aria-label=&quot;Anchor link for: kresus-pig&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus 🐷&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;Kresus est un gestionnaire de finances personnelles gratuit et libre.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Installation de l’environnement de développement sur ma nouvelle machine 🥳&lt;&#x2F;li&gt;
&lt;li&gt;Une relecture d’une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;kresusapp&#x2F;kresus&#x2F;-&#x2F;merge_requests&#x2F;1630&quot;&gt;contribution&lt;&#x2F;a&gt; de Nicofrand, qui améliore l’affichage des opérations futures dans le graphique de solde 📈&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vu-lu-ecoute&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu-lu-ecoute&quot; aria-label=&quot;Anchor link for: vu-lu-ecoute&quot;&gt;🔗&lt;&#x2F;a&gt;Vu &#x2F; Lu &#x2F; Écouté&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;📺 La série &lt;em&gt;Fallout&lt;&#x2F;em&gt;, produite notamment par Jonathan Nolan (&lt;em&gt;Persons of Interest&lt;&#x2F;em&gt;, &lt;em&gt;Westworld&lt;&#x2F;em&gt;), qui reprend bien l’esprit cynique et l’ambiance post-apocalyptique des jeux vidéo.&lt;&#x2F;li&gt;
&lt;li&gt;📝 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ash.mataroa.blog&#x2F;blog&#x2F;on-remembering-advice&#x2F;&quot;&gt;On remembering advice&lt;&#x2F;a&gt; : Encore une approche qui désarme l’anxiété, orientée sur la mémorisation des nombreux conseils que l’on peut recevoir.&lt;&#x2F;li&gt;
&lt;li&gt;📚 En train de lire &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.buildingasecondbrain.com&#x2F;&quot;&gt;Building a Second Brain&lt;&#x2F;a&gt;, de Tiago Forte. Pour le moment, très orienté développement personnel (« cette technique fera de vous un·e héro·ïne ! »), et c’est dommage — là où &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.soenkeahrens.de&#x2F;en&#x2F;takesmartnotes&quot;&gt;How to take smart notes&lt;&#x2F;a&gt; me semblait plus méthodique et appuyé sur des données scientifiques dés le début.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 L’épisode « Êtes vous un bon coup ? » du podcast &lt;em&gt;Émotions&lt;&#x2F;em&gt;. Découverte du concept d’&lt;em&gt;anxiété de performance&lt;&#x2F;em&gt;, applicable bien en dehors du champ de la sexualité : l’inquiétude constante de toujours devoir &lt;em&gt;bien&lt;&#x2F;em&gt; faire, et qui paradoxalement… empêche de bien faire.&lt;&#x2F;li&gt;
&lt;li&gt;🎧 L’épisode « Gringe et la nostalgie de Cergy » du podcast &lt;em&gt;Smalltalk&lt;&#x2F;em&gt;. Je m’explique enfin cette punchline de &lt;em&gt;Casseurs Flowers Infinity&lt;&#x2F;em&gt; : « j’ai jamais investi dans la crypto &#x2F; du coup j’ai sorti un bouquin sur les schizos ».&lt;&#x2F;li&gt;
&lt;li&gt;📺 &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;E1Dn3F7Ili8&quot;&gt;Est-ce que c’est vraiment devenu cool d’être LGBT — ou pourquoi Squeezie a un look queer&lt;&#x2F;a&gt;: excellente vulgarisation de sociologie sur le &lt;em&gt;queer&lt;&#x2F;em&gt; « acceptable » et l’appropriation de cette culture par le capitalisme et les « nouvelles » masculinités (post mot-dièse MeToo). Merci à Stan pour &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@Signez&#x2F;112321390338259393&quot;&gt;la reco&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Les &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Saints_de_glace&quot;&gt;Saints de Glace&lt;&#x2F;a&gt; sont une période climatologique située autour des dates du 11, 12 et 13 mai. Il ne faut pas les interpréter comme une période de grand froid, mais plutôt les considérer comme (approximativement) la dernière période où le refroidissement nocturne peut générer du gel en plaine.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;moodist.app&#x2F;&quot;&gt;Moodist&lt;&#x2F;a&gt; génère et combine des bruits de fond d’ambiance. Petit kiff sur le son d’intérieur de train. Une alternative Web (et aussi open-source !) à l’excellente application de bureau Linux &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rafaelmardojai&#x2F;blanket&quot;&gt;Blanket&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Notes hebdomadaires #1</title>
        <published>2024-04-22T00:00:00+00:00</published>
        <updated>2024-04-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/2024-w16/"/>
        <id>https://bouvier.cc/notes/2024-w16/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/2024-w16/">&lt;p&gt;Je tente l’exercice d’écrire quelques notes hebdomadaires, inspiré par les blogs d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.notmyidea.org&#x2F;notes-hebdo-25.html&quot;&gt;Alexis&lt;&#x2F;a&gt; ou de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;juliebrillet.fr&#x2F;notes&#x2F;2024_04_08_notes-copie&#x2F;&quot;&gt;Julie&lt;&#x2F;a&gt;. Normaliser le partage des émotions, apprivoiser et désacraliser l’écriture en décrivant le quasi-quotidien, célébrer les petites victoires. Je ne sais pas combien de temps ça durera, mais il n’y a pas d’enjeu.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vu&quot; aria-label=&quot;Anchor link for: vu&quot;&gt;🔗&lt;&#x2F;a&gt;Vu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=XBQBKseozuY&quot;&gt;The most extreme minimalist’s apartment&lt;&#x2F;a&gt;. 200 objets max, rangés en 13 minutes, et une chemise qui contient assez de poches pour ne plus avoir besoin de sac à dos (pour &lt;em&gt;seulement&lt;&#x2F;em&gt; 28,600 yens, soit environ 170 euros).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=RozUGiu4mO0&quot;&gt;Elle Cordova’s “A thought experiment”&lt;&#x2F;a&gt; : la tension existentielle comme moteur pour se bouger le cul hors de son canapé (ou y rester, mais consciemment).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=xpRgR-tZEpk&quot;&gt;Malagueña — Lucas Imbiriba&lt;&#x2F;a&gt; : découverte du flamenco. Je citerai uniquement un commentaire : “I used to be a fan, but after hearing this masterpiece, I’m a whole air conditioner”.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;lu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lu&quot; aria-label=&quot;Anchor link for: lu&quot;&gt;🔗&lt;&#x2F;a&gt;Lu&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;home.adelphi.edu&#x2F;sbloch&#x2F;class&#x2F;adages&#x2F;joy.html&quot;&gt;The joys and woes the (programming) craft&lt;&#x2F;a&gt; : un extrait du &lt;em&gt;Mythical Man Month&lt;&#x2F;em&gt; de Fred Brooks. Donne bien envie de lire tout le livre.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gu.illau.me&#x2F;posts&#x2F;how-to-organise-a-meetup&#x2F;&quot;&gt;How to organize a meetup?&lt;&#x2F;a&gt; : quelques notes bienvenues d’un ancien collègue de Mozilla (coucou !) sur comment organiser une rencontre. Me (re)motive à mettre ça en place ici.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;write.as&#x2F;ashleynewman&#x2F;in-the-past-few-weeks-i-have-been-thinking-a-lot-about-how-my-mentality&quot;&gt;Inner Flux&lt;&#x2F;a&gt; : en admettant que l’on change constamment, plus besoin de s’accrocher à des opinions passées ou des objectifs auxquels on ne tient plus.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;ajkprojects.com&#x2F;when-to-stop&quot;&gt;When to stop&lt;&#x2F;a&gt; : en imaginant que l’on a une barre d’énergie (créative&#x2F;physique&#x2F;etc.) utilisée par son travail, s’arrêter de travailler non pas quand la barre est vidée, mais plutôt quand elle est remplie à “30%” (valeur relative dont la saveur est laissée libre aux lecteur·ices). De même, s’arrêter dans les loisirs et l’auto-gratification avant d’atteindre le mode &lt;em&gt;zombie&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ash.mataroa.blog&#x2F;blog&#x2F;communication-exhaustion-and-being-alone&#x2F;&quot;&gt;Communication exhaustion and being alone&lt;&#x2F;a&gt; : encore un billet sur le même blog (superbe découverte !). J’apprécie particulièrement, en tant qu’introverti confirmé, cette description des activités qui demandent de l’énergie ou qui en redonnent.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.editions2024.com&#x2F;livres&#x2F;le-livre-oracle&quot;&gt;Le Livre Oracle&lt;&#x2F;a&gt;, bande dessinée de Xavier Bouyssou. Plein de très courtes histoires qui imaginent une vision de l’avenir, souvent avec beaucoup de malice. Comme si &lt;em&gt;Black Mirror&lt;&#x2F;em&gt; avait un pendant bande dessinée un peu chill.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;au-passage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#au-passage&quot; aria-label=&quot;Anchor link for: au-passage&quot;&gt;🔗&lt;&#x2F;a&gt;Au passage&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Le nom “&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.m.wikipedia.org&#x2F;wiki&#x2F;Flamenco&quot;&gt;flamenco&lt;&#x2F;a&gt;” viendrait d’une nomination attribuée à des populations gitanes d’ethnie rom, venues s’installer en Espagne, et qui auraient introduit le style de guitare éponyme.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.m.wikipedia.org&#x2F;wiki&#x2F;Aficionado&quot;&gt;Aficionado&lt;&#x2F;a&gt; désigne à la base un·e amateur·ice de corrida (bouh), mais par extension tout amateur d’une pratique.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;spotube.krtirtho.dev&#x2F;&quot;&gt;Spotube&lt;&#x2F;a&gt;, un faux client Spotify Premium qui utilise l’API Spotify pour les recherches&#x2F;les paroles, mais ensuite Youtube pour l’écoute ; Spotify Premium mais gratuit, donc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Une rétrospective colorée de 2023</title>
        <published>2024-02-07T00:00:00+00:00</published>
        <updated>2024-02-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/retrospective-2023/"/>
        <id>https://bouvier.cc/notes/retrospective-2023/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/retrospective-2023/">&lt;p&gt;Une période calendaire se termine ; et même si le temps n’est qu’une arbitraire abstraction utile
comme contrat social, laissez-moi me prêter à cet exercice facétieux de la rétrospective annuelle.
Plutôt qu’une répartition par catégories de types ou de genres, je fais le choix de voir, pour ce
qui relève du personnel, 2023 comme une année de renaissance, de redécouverte des émotions, de
réaffirmation de ma propre puissance nietzschéenne (ça commence fort). La lente sortie d’une
période sombre et grise, pour réapprendre le goût des couleurs. Voici donc quelques couleurs qui
ont teinté 2023. Comme l’année dernière, ce ne sont pas nécessairement des créations datant de
cette année-là ; il s’agit de l’année de leur découverte cependant.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;l-orange-et-le-rouge-de-petite-plume&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#l-orange-et-le-rouge-de-petite-plume&quot; aria-label=&quot;Anchor link for: l-orange-et-le-rouge-de-petite-plume&quot;&gt;🔗&lt;&#x2F;a&gt;L’orange et le rouge de Petite Plume&lt;&#x2F;h1&gt;
&lt;p&gt;Une découverte que j’attribue à Maiwann, Petite Plume est une bande dessinée en deux tomes, écrite
par Lyne Hehlen, aka &lt;em&gt;ly boo&lt;&#x2F;em&gt;. On y partage le vécu, de l’enfance à l’âge adulte, d’un garçon de
lignée royale, destiné à gouverner, et dont la famille est frappée d’une mystérieuse malédiction.
Pas du tout naïve, l’histoire nous y parle beaucoup du masque des apparences, de l’injonction de se
conformer aux attentes des autres, du manque de place pour s’affirmer soi-même, être soi, de la
difficulté d’assumer la puissance de sa propre identité. Outre l’histoire que j’ai appréciée pour
ces sujets, j’ai surtout été touché par cette peinture numérique, aux couleurs saillantes et
intenses. Et qui alterne avec des planches entièrement dessinées aux crayons pastel (mais je n’y
connais rien, donc aussi bien je suis à côté de la plaque), invoquant la candeur, la simplicité,
l’enfance, tout en me rappelant la brutalité de l’épopée Blast. Parfois je suis resté béat devant
une planche, de par la chaleur de ces couleurs presque saturées, toujours chaleureuses. Une très
bonne expérience sensorielle. Le tout se lit en ligne &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;petite-plume.hens-world.com&#x2F;&quot;&gt;ici&lt;&#x2F;a&gt;,
il y a eu quelques impressions mais je ne les vois pas sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;shop.ly-boo.com&#x2F;&quot;&gt;la boutique en
ligne&lt;&#x2F;a&gt; de l’autrice, que je recommande par ailleurs pour ses &lt;em&gt;prints&lt;&#x2F;em&gt;
délicieuses.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;retrospective-2023&#x2F;reco2023-petiteplume1.png&quot; alt=&quot;Une page de Petite Plume volume 1, au crayon pastel&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;retrospective-2023&#x2F;reco2023-petiteplume2.png&quot; alt=&quot;Une autre page de Petite Plume volume 1, peinture digitale pardon numérique&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-dore-dans-this-is-what-feels-like&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-dore-dans-this-is-what-feels-like&quot; aria-label=&quot;Anchor link for: le-dore-dans-this-is-what-feels-like&quot;&gt;🔗&lt;&#x2F;a&gt;Le doré dans This is what ____ feels like&lt;&#x2F;h2&gt;
&lt;p&gt;Découvert grâce à mon nouveau prof de chorale de cette année (merci !), JVKE est un chanteur de pop
qui, à premier lieu, ressemble exactement au type à produire de la soupe &lt;em&gt;mainstream&lt;&#x2F;em&gt; avec laquelle
les radios nous étoufferaient jusqu’au foie gras. Et c’est probablement le cas, dans une certaine
mesure ; je ne l’ai pas entendu sur les radios françaises, mais les pratique-je tant que ça ? Or,
quand on écoute l’intégralité de l’album &lt;em&gt;This is what ____ feels like&lt;&#x2F;em&gt;, on découvre l’histoire
complète d’une personne qui tombe amoureuse, s’exalte de cette nouvelle relation, découvre la
trahison, sombre dans la tristesse, puis petit-à-petit s’en défait pour finalement re-découvrir
cette euphorie amoureuse. &lt;em&gt;This is what falling in love feels like&lt;&#x2F;em&gt; commence par une introduction
orchestrale, chatoyante, digne d’un Disney (dixit Adrian), puis dérive sur une pop d’abord
lancinante, puis dansante. &lt;em&gt;I’m not okay&lt;&#x2F;em&gt; m’évoque toutes les étapes de l’introspection, de la
dissection des faits à la conclusion éponyme, en passant par une palette complète d’émotions,
brillamment retranscrites musicalement. &lt;em&gt;ghost town&lt;&#x2F;em&gt; parle de la relation ambiguë avec un lieu où
les souvenirs sont trop envahissants pour y rester, sentiment que je ressens pour la ville dont je
suis originaire. &lt;em&gt;I can’t help it&lt;&#x2F;em&gt; fournit une conclusion extrêmement positive, joyeuse, et
grandiloquente à cette épopée romantique, avec un refrain qui pourrait rester en tête pendant des
heures, si ce n’est des jours. Mais ce qui m’a fait choisir ce titre, c’est le titre &lt;em&gt;golden hour&lt;&#x2F;em&gt;,
un titre imposant de prestance, qui démarre par une mélodie de valse (?) jouée au piano, puis
propose une montée en puissance orchestrale et vocale, épique, onirique, intense en émotions. Bref,
tout l’album vaut le coup, et s’écoute rapidement, au vu de la courte durée de chaque titre. De par
la palette d’émotions, j’aurais pu nommer ce paragraphe L’arc-en-ciel, mais l’hypothétique lobby
LGBT ne m’a pas envoyé de pot-de-vin suffisamment convaincant pour en arriver là.&lt;&#x2F;p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;PEM0Vs8jf1w?si=8NbNFDehZKijMXnL&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;h2 id=&quot;tout-le-pastel-d-asteroid-city&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tout-le-pastel-d-asteroid-city&quot; aria-label=&quot;Anchor link for: tout-le-pastel-d-asteroid-city&quot;&gt;🔗&lt;&#x2F;a&gt;Tout le pastel d’Asteroid City&lt;&#x2F;h2&gt;
&lt;p&gt;Un père et ses quatre enfants arrivent et séjournent dans Asteroid City, une ville au milieu du
désert, le temps que leur voiture soit réparée, avant de reprendre la route pour rejoindre le
grand-père des petits. Plusieurs hics : la mère est morte et les enfants ne le savent pas, beaucoup
des personnes présentes à Asteroid City sont des personnages retentissants, et un alien se pose
pour effectuer quelque action surprenante, sans que personne n’y comprenne rien.&lt;&#x2F;p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;9FXCSXuGTF4?si=UGTzuFXbfzb_WCQo&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;p&gt;Les films de Wes Anderson sont particulièrement satisfaisants pour mon esprit surchauffé et à
l’attention vacillante. L’esthétique pastel toujours présente qui rend l’intégralité parfaitement
douce et surréaliste, une écriture des dialogues perpétuellement délicieuse avec une diction qui
supprime presque toutes les espaces de silence sans qu’il n’y ait jamais d’interruption, un casting
qui transmettrait le syndrôme de l’imposteur à n’importe quel réalisateur de films Avenger™, cette
capacité à entremêler et imbriquer les histoires les unes dans les autres comme dans un &lt;em&gt;Pulp
Fiction&lt;&#x2F;em&gt;. Bref, tout est là, comme d’habitude pour tous les films récents de Mr. Anderson que j’ai
vus depuis &lt;em&gt;Grand Budapest Hotel&lt;&#x2F;em&gt;, c’est brillant du début à la fin. Mon seul reproche à sa
cinématographie serait que son intensité est telle, que le retour au monde réel pique un petit peu,
de par sa lenteur, son ennui, ses personnages attendus et son gris.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-violet-et-le-bleu-de-sayonara-wild-hearts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-violet-et-le-bleu-de-sayonara-wild-hearts&quot; aria-label=&quot;Anchor link for: le-violet-et-le-bleu-de-sayonara-wild-hearts&quot;&gt;🔗&lt;&#x2F;a&gt;Le violet et le bleu de Sayonara Wild Hearts&lt;&#x2F;h2&gt;
&lt;p&gt;Éteinte depuis la mort précipitée de la série des Guitar Hero, ma flamme pour les jeux musicaux ou
dit « de rythme » s’est ravivée depuis la découverte de &lt;em&gt;Rhythm Doctor&lt;&#x2F;em&gt; il y a quelques années, par
l’entremise de l’excellent magazine Canard PC. &lt;em&gt;Sayonara Wild Hearts&lt;&#x2F;em&gt;, découvert grâce à Maiwann
(merci 🫶), est un jeu d’arcade disponible sur Nintendo Switch. La narration y prend une place très
importante : la protagoniste commence avec le cœur brisé, l’entraînant dans un puits sans fond de
tristesse, dont on va l’aider à se dépêtrer, principalement en combattant (mais pas que…) ses
propres démons intérieurs. On appréciera la voix off de Queen Latifah en tant que conteuse.
L’environnement s’avère onirique grâce à une forte mystique évoquée par des divinités de ce monde
intérieur, la présence de tarots, voire quelques évocations d’astrologie. La bande-son consiste en
une très grande piste de synth-pop &#x2F; glitch, douce et chaleureuse, qui nous accompagne, rythme les
niveaux et à l’occasion, justifie quelques &lt;em&gt;quick time events&lt;&#x2F;em&gt;. Côté &lt;em&gt;gameplay&lt;&#x2F;em&gt;, la caméra passe
son temps à nous faire valser dans toutes les directions, et il s’agit tantôt d’un jeu de course en
vue troisième personne, et aussi d’un jeu de moto, de voiture, de conduite aérienne, de combat,
parfois en vue à la première personne, parfois vu d’en face, parfois en 2D. J’ai été constamment
surpris de toutes les manières dont le &lt;em&gt;gameplay&lt;&#x2F;em&gt; se réinvente, d’un niveau au suivant, pour ne pas
nous laisser nous ennuyer une seule seconde.&lt;&#x2F;p&gt;
&lt;p&gt;Mais surtout, si &lt;em&gt;Sayonara Wild Hearts&lt;&#x2F;em&gt; a sa place dans cette liste, c’est par son esthétique
&lt;em&gt;low-poly&lt;&#x2F;em&gt; baignant dans un océan de fuchsia, bleu, violet, rose, intensément entrecoupé de tons
plus clairs et plus discordants, du jaune au blanc. Bien que l’histoire soit relativement courte,
et le nombre de niveaux donc limité, j’en suis ressorti sensoriellement émerveillé, et ragaillardi
par cette démonstration efficace d’un retour progressif à la surface. Et si l’on souhaite y passer
plus de temps, un ensemble d’&lt;em&gt;achievements&lt;&#x2F;em&gt; sous forme d’énigmes se débloque une fois l’histoire
passée, étendant largement la durée de vie totale à de longues heures de plaisir. Gros coup de
coeur vidéoludique de cette année, donc.&lt;&#x2F;p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;e6Ums_N7QrA?si=EnylRDxoXT3x4j2V&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;h2 id=&quot;les-challengers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#les-challengers&quot; aria-label=&quot;Anchor link for: les-challengers&quot;&gt;🔗&lt;&#x2F;a&gt;Les challengers&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;le-violet-d-a-propos-d-amour&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-violet-d-a-propos-d-amour&quot; aria-label=&quot;Anchor link for: le-violet-d-a-propos-d-amour&quot;&gt;🔗&lt;&#x2F;a&gt;Le violet d’À propos d’amour&lt;&#x2F;h3&gt;
&lt;p&gt;Venant clore un cycle de lectures et de podcasts sur les relations interpersonnelles, ce livre
écrit par l’autrice afro-féministe &lt;em&gt;bell hooks&lt;&#x2F;em&gt;, à la couverture violette dans sa réédition, a été
un plaisir, un bouleversement, un cours magistral, une pièce journalistique qu’on lit avec un café
et beaucoup de plaisir, un témoignage sans présomption autoritaire. Qu’est-ce que l’amour ? Pour
pouvoir le pratiquer vraiment, autant faut-il pouvoir commencer à pouvoir le définir. Mériterait un
article entier à part ; non pas que je vous garantis que ça arrive.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;la-peinture-multicolore-de-zom-100-bucket-list-of-the-dead&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-peinture-multicolore-de-zom-100-bucket-list-of-the-dead&quot; aria-label=&quot;Anchor link for: la-peinture-multicolore-de-zom-100-bucket-list-of-the-dead&quot;&gt;🔗&lt;&#x2F;a&gt;La peinture multicolore de Zom 100 - Bucket list of the dead&lt;&#x2F;h3&gt;
&lt;p&gt;Mon fournisseur officiel de recommendations d’animes Nox a encore déniché une petite perle. Dans un
futur proche, une classique maladie de zombies infeste le monde et tout le monde se transforme
petit à petit. Le héros se retrouve projeté au milieu de ça, et met un peu de temps à s’en rendre
compte, du fait qu’il est complètement épuisé et aliéné par son travail, et se comporte donc
lui-même comme un &lt;em&gt;zombie&lt;&#x2F;em&gt;. Une fois convaincu qu’il sera transformé lui aussi en zombie un jour,
il établit une liste des choses à faire avant de devenir un zombie, pour le meilleur et pour le
pire. Point esthétique pour le sang des zombies, toujours de couleurs très vives, formant des
hémorragies multicolores très vivaces. Une critique assez directe du capitalisme, et une série
tranche-de-vie &#x2F; &lt;em&gt;coming-of-age&lt;&#x2F;em&gt; très satisfaisante et &lt;em&gt;feel good&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chez-les-ami-es&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#chez-les-ami-es&quot; aria-label=&quot;Anchor link for: chez-les-ami-es&quot;&gt;🔗&lt;&#x2F;a&gt;Chez les ami·es&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;adrian.gaudebert.fr&#x2F;blog&#x2F;post&#x2F;L-%C3%A9tat-de-l-Adrian-2023&quot;&gt;L’état de l’Adrian en 2023&lt;&#x2F;a&gt;,
qui a l’outrecuidance de citer le livre &lt;em&gt;How to read smart notes&lt;&#x2F;em&gt; comme son favori de l’année, sans
mentionner que je lui ai recommandé 😠😗. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;marienfressinaud.fr&#x2F;mes-jeux-2023.html&quot;&gt;Les jeux 2023 de
Marien&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Des recommendations de 2022</title>
        <published>2023-07-12T00:00:00+00:00</published>
        <updated>2023-07-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/recommandations2022/"/>
        <id>https://bouvier.cc/notes/recommandations2022/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/recommandations2022/">&lt;p&gt;Quel délice de retomber sur &#x2F; d’achever le brouillon de ce billet que je voulais publier &lt;em&gt;en Janvier 2023&lt;&#x2F;em&gt;. Je n’interromprais son précédent chapeau que de manière minimale, afin de savourer avec vous la douce ironie qui s’en dégage.&lt;&#x2F;p&gt;
&lt;p&gt;Pour ce début d’année 2023, plutôt que de vous faire une rétrospective des contributions ou productions que j’aurais effectuées l’année précédente, j’aimerais revenir sur quelques médias et oeuvres que j’ai appréciés au cours de l’année 2022 et que je voudrais maintenant partager avec vous. Ce qui aurait pu être une tempête de &lt;em&gt;toots&lt;&#x2F;em&gt; prendra la forme d’un billet de blog, pour renouer avec la tradition originelle de l’expression personnelle à travers le blog, et mettre de côté l’aridité froide et robotique des billets techniques qui ont conquis ce domaine et son nom.&lt;&#x2F;p&gt;
&lt;p&gt;Si vous avez dépassé un certain seuil de temps en ma présence, il y a des chances que je vous ai déjà parlé d’au moins une, si ce n’est l’intégralité, de ces recommandations. Et comme il me semble qu’une recommandation n’a de valeur que si elle est un tant soit peu unique, ou à défaut, rare, dans sa catégorie, j’essaierai de limiter le nombre d’items que je mettrais en avant à deux. En suivant la divise du minimalisme : moins serait impossible, plus serait superflu. Je me laisse un droit divin à enfreindre la règle que j’aurais auparavant créée, plaisir égoïste du dramaturge.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;livres&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#livres&quot; aria-label=&quot;Anchor link for: livres&quot;&gt;🔗&lt;&#x2F;a&gt;Livres&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;l-elegance-du-herisson-muriel-barbery&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#l-elegance-du-herisson-muriel-barbery&quot; aria-label=&quot;Anchor link for: l-elegance-du-herisson-muriel-barbery&quot;&gt;🔗&lt;&#x2F;a&gt;L’élégance du hérisson - Muriel Barbery&lt;&#x2F;h3&gt;
&lt;p&gt;Je lis relativement peu de fiction, et j’ai un fétiche pour la belle écriture, celle qui abuse de la license poétique, du vocabulaire abscond, de tournures pédantes, qui référence ouvertement et cligne des yeux aux Grand·e·s Auteur·ice·s. L’Élegance du Hérisson est une œuvre de ce groupe. Ce livre raconte l’histoire d’une enfant surdouée qui planifie son suicide pour échapper à la vacuité de la vie d’adulte ; et de sa rencontre avec une concierge d’immeuble qui feint une imbécilité présupposée par sa situation sociale, mais cache une passion pour la grande littérature et une capacité d’analyse féconde. Attention, ce livre nécessite la proximité d’un dictionnaire, tant l’autrice s’exalte à utiliser un jargon soutenu, parfois désuet, souvent resplendissant. J’ai d’abord apprécié ce livre par empathie avec la personne qui me l’a recommandé, par appréciation de cette écriture si riche, puis en progressant dans ma lecture, pour son histoire courte, intense, et ses personnages principaux, délicats et subtils. Askip l’adaptation cinématographique ne vaut pas vraiment le coup.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ministry-for-the-future-kim-stanley-robinson-en-anglais&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ministry-for-the-future-kim-stanley-robinson-en-anglais&quot; aria-label=&quot;Anchor link for: ministry-for-the-future-kim-stanley-robinson-en-anglais&quot;&gt;🔗&lt;&#x2F;a&gt;Ministry For The Future - Kim Stanley Robinson (en anglais)&lt;&#x2F;h3&gt;
&lt;p&gt;Un livre d’anticipation politique dans un sous-genre de la science-fiction, découvert avec ce roman : la &lt;em&gt;cli-fi&lt;&#x2F;em&gt;, ou &lt;em&gt;climate fiction&lt;&#x2F;em&gt; dans la langue de Shakespeare, soit de la science-fiction climatique dans la langue de Molière. Le prémisse initial est qu’une catastrophe liée au changement climatique a lieu dans une nation très peuplée. Ses gouvernant·e·s ne supportent plus de subir les effets de l’inaction politique mondiale, et décident d’utiliser des méthodes disproportionnées et radicales pour atténuer les effets du changement climatique. Les autres pays ne peuvent pas laisser faire, et décident de fonder ensemble une institution trans-gouvernementale, pensez du niveau de l’O.N.U., afin de prendre en commun ce genre de décisions, et dont la mission est de préserver l’avenir des générations futures de toutes les espèces vivantes, humain·e·s ou non : le Ministère pour le Futur, d’où le roman tire son nom.
Ce roman se présente donc comme une immense expérience de pensée politique et stratégique, racontée des points de vue de multiples héros et héroïnes, portée par une répartition d’un chapitre par protagoniste. Même si la forme peut parfois donner du fil à retordre, le fond est extrêmement crédible : il n’y a pas d’invention miracle qui sauve tout le monde en un clin d’œil, toute la science décrite semble correcte pour l’œil inavisé que j’y porte. Les angles abordés sont exhaustifs, alternant moyens de pressions économiques (presque envie de croire que la méthode de &lt;em&gt;crédit carbone&lt;&#x2F;em&gt; pourrait fonctionner), solutions purement techniques d’ingénierie climatique (décrites avec beaucoup d’ironie), mais aussi les moyens plus transgressifs, comme l’éco-terrorisme (le vrai, hein, pas celui qu’un gouvernement trop réel fantasme en paniquant). Gros coup de cœur de cette année. Inclus, en bonus : Toutes Les Méthodes Pour Sauver Votre Iceberg Favori D’Une Fonte Un Peu Trop Rapide ; La Numéro 4 Va Vous Étonner.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bandes-dessinees&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bandes-dessinees&quot; aria-label=&quot;Anchor link for: bandes-dessinees&quot;&gt;🔗&lt;&#x2F;a&gt;Bandes dessinées&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;47-cordes-1ere-partie&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#47-cordes-1ere-partie&quot; aria-label=&quot;Anchor link for: 47-cordes-1ere-partie&quot;&gt;🔗&lt;&#x2F;a&gt;47 cordes (1ère partie)&lt;&#x2F;h3&gt;
&lt;p&gt;Timothée Leboucher, l’auteur du fantastique (et fantastique) &lt;em&gt;Ces jours qui disparaissent&lt;&#x2F;em&gt;, revient avec une histoire du même acabit. Malgré un dessin que je trouvais parfois froid, de par ses tons pastel, l’histoire racontée s’avère fascinante, un ultime thriller fantastique, des personnages complexes qui évoluent au cours du temps, plusieurs sous-trames qui tournent les unes autour des autres et semblent vouloir se découper. Mon seul reproche sera d’avoir découvert seulement à la fin que l’histoire ne se finissait pas, et qu’il y aurait au moins un autre tome. Bien joué Timothée.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;grandeur-et-decadence&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#grandeur-et-decadence&quot; aria-label=&quot;Anchor link for: grandeur-et-decadence&quot;&gt;🔗&lt;&#x2F;a&gt;Grandeur et Décadence&lt;&#x2F;h3&gt;
&lt;p&gt;Relecture de l’album de Liv Stromquist, autrice de bande dessinée suédoise. Malgré une expression graphique trop brute, simpliste et abusant du collage à mon goût, j’ai apprécié de relire cette excellente vulgarisation de sociologie, morcelée de psychologie et d’éclats de philosophie politique. Notamment découvrir cette étude qui décrypte pourquoi les mouvements progressistes ne gagnent pas les élections politiques. On y parle de morale du Prince ou de l’Esclave (merci Nietzsche), de triomphe du moralisme avant la politique. Très bon à lire si vous vivez mal votre (im)pureté militante. Plusieurs autres sujets y sont abordés : déconstruction de la philosophie individualiste néolibérale d’Ayn Rand, ainsi que plusieurs sujets toujours proches de thèmes féministes et sociétaux.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;videos-en-ligne&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#videos-en-ligne&quot; aria-label=&quot;Anchor link for: videos-en-ligne&quot;&gt;🔗&lt;&#x2F;a&gt;Vidéos en ligne&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;la-chaine-d-elizabeth-filips-en-anglais&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-chaine-d-elizabeth-filips-en-anglais&quot; aria-label=&quot;Anchor link for: la-chaine-d-elizabeth-filips-en-anglais&quot;&gt;🔗&lt;&#x2F;a&gt;La chaîne d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;@elizabethfilips&quot;&gt;Elizabeth Filips&lt;&#x2F;a&gt; (en anglais)&lt;&#x2F;h3&gt;
&lt;p&gt;Ce qui, à la première apparence, ressemble à une pénultième chaîne de &lt;em&gt;productivity porn&lt;&#x2F;em&gt; en est, finalement, presque tout le contraire : une critique des clichés du productivisme individualiste irréfléchi, avec malgré tout quelques techniques efficaces, au moins pour elle qui présente. J’ai apprécié comment la chaîne s’engouffre dans la psychologie, notamment dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;fi5Dbzxfjvc&quot;&gt;cette vidéo&lt;&#x2F;a&gt;. Et avec en bonus, ce débit de parole soutenu et rapide, appréciable pour mon attention volatile.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;la-chaine-de-tom-nicholas-en-anglais&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-chaine-de-tom-nicholas-en-anglais&quot; aria-label=&quot;Anchor link for: la-chaine-de-tom-nicholas-en-anglais&quot;&gt;🔗&lt;&#x2F;a&gt;La chaîne de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;@Tom_Nicholas&quot;&gt;Tom Nicholas&lt;&#x2F;a&gt; (en anglais)&lt;&#x2F;h3&gt;
&lt;p&gt;Malgré une légère propension au titre racoleur, un ton vaguement hautain mais peut-être uniquement dû à un accent caractéristique de son Royaume-Uni natal, Tom Nicholas explique des phénomènes de société avec une argumentation extrêmement logique, souvent irréfutable et toujours très bien soutenue. Voyez plutôt : &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;fHxV_YURY28&quot;&gt;comment Big Pharma prolonge la pandémie&lt;&#x2F;a&gt; ? Voilà une vidéo qui exprime bien la dualité entre la &lt;em&gt;forme&lt;&#x2F;em&gt;, titre aux accents complotistes et attrape-cliquons, et &lt;em&gt;le fond&lt;&#x2F;em&gt;, un contenu dense, strictement bien structuré, raisonnable et brillant.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;la-chaine-d-alice-cappelle-en-anglais&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-chaine-d-alice-cappelle-en-anglais&quot; aria-label=&quot;Anchor link for: la-chaine-d-alice-cappelle-en-anglais&quot;&gt;🔗&lt;&#x2F;a&gt;La chaîne d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;@AliceCappelle&#x2F;&quot;&gt;Alice Cappelle&lt;&#x2F;a&gt; (en anglais)&lt;&#x2F;h3&gt;
&lt;p&gt;Je m’étais promis de briser ma règle de deux recommandations maximum par catégorie. Alors pour la chaîne, en anglais, de la française Alice Cappelle, j’entorserai la loi. Déjà, parce que j’ai une fascination pour ce tee-shirt lisant &lt;em&gt;Biloute&lt;&#x2F;em&gt; sur un design Obey-esque. Ensuite, parce que son analyse de la situation politique en France y est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;oy3F1IbjdKU&quot;&gt;si limpide&lt;&#x2F;a&gt; que j’utilise régulièrement ses vidéos auprès de mes connaissances anglophones comme exposé succinct et complet de notre démocratie en perdition. Enfin, pour toutes les vidéos passionnantes qui traitent de sujets de société et de sociologie qui me sont parfois étrangers, parfois plus proches mais pour autant pas familiers. Au point que je lui donne régulièrement via son Patreon pour la soutenir dans cette activité. Bravo &#x2F; merci Alice.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jeux-videos&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jeux-videos&quot; aria-label=&quot;Anchor link for: jeux-videos&quot;&gt;🔗&lt;&#x2F;a&gt;Jeux vidéos&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;stray&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#stray&quot; aria-label=&quot;Anchor link for: stray&quot;&gt;🔗&lt;&#x2F;a&gt;Stray&lt;&#x2F;h3&gt;
&lt;p&gt;Quand je tombe sur un jeu de simulation de chat comme celui-ci, je me dis qu’on est félins pour l’autre. Dans un futur dystopique aux néons cyber-punks, on incarne un pôti-chat perdu, à la recherche de ses pairs, se faufilant dans un monde habité par des robots désœuvrés (mais pas assez déconnectés pour ne pas câliner le matou). On s’amusera à gratter aux portes, à griffer des tapis, à pousser très doucement des objets d’un revers de la patoune afin de causer leur chute sur le sol. Une grande déambulation esthétique. Pas mal, non ? C’est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hk-devblog.com&#x2F;&quot;&gt;français&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;films&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#films&quot; aria-label=&quot;Anchor link for: films&quot;&gt;🔗&lt;&#x2F;a&gt;Films&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;sans-filtre-triangle-of-sadness&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sans-filtre-triangle-of-sadness&quot; aria-label=&quot;Anchor link for: sans-filtre-triangle-of-sadness&quot;&gt;🔗&lt;&#x2F;a&gt;Sans Filtre (Triangle of Sadness)&lt;&#x2F;h3&gt;
&lt;p&gt;Le réalisateur Ruben Östlund avait déjà sorti &lt;em&gt;Force Majeure&lt;&#x2F;em&gt; et &lt;em&gt;The Square&lt;&#x2F;em&gt; quelques années plus tôt, des films qui m’avaient stupéfait de par leur absurdité. Ici, c’est reparti pour un tour : bien sûr, en commençant par des dialogues ahurissants pour se mettre &lt;em&gt;dans le bain&lt;&#x2F;em&gt;, une bonne dose d’humour trash, avant un renversement complet du scénario et des rôles. Suite à un accident sur un yacht de grand &lt;em&gt;standing&lt;&#x2F;em&gt;, des personnalités bourgeoises se retrouvent ramenées à une condition d’humain·e·s obsédé·e·s par leur survie au jour le jour, aux côtés d’autres survivant·e·s, prolétaires, dont les rôles étaient de servir les premières. Vraiment fun ; pas nécessairement une critique du capitalisme si profonde que ça, comme le décrivaient certain·e·s. C’est par ce film que je découvre pour la première fois l’artiste de musique électronique &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;l4UkYBr1NnA&quot;&gt;Fred Again&lt;&#x2F;a&gt;, un de mes coups de cœur de ce début 2023.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;series&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#series&quot; aria-label=&quot;Anchor link for: series&quot;&gt;🔗&lt;&#x2F;a&gt;Séries&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;the-dropout&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-dropout&quot; aria-label=&quot;Anchor link for: the-dropout&quot;&gt;🔗&lt;&#x2F;a&gt;The Dropout&lt;&#x2F;h3&gt;
&lt;p&gt;Un biopic, en une saison, sur la vie d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Elizabeth_Holmes&quot;&gt;Elizabeth Holmes&lt;&#x2F;a&gt;, dont la carrière professionnelle a décrit un parcours de montagnes russes. Après avoir quitté Stanford avant d’obtenir son diplôme (&lt;em&gt;The Dropout&lt;&#x2F;em&gt;, vous l’avez ?), elle créé une startup de &lt;em&gt;bio-tech&lt;&#x2F;em&gt;, revendiquant un appareil de diagnostic médical très précis, qui ne nécessite pour son dessein, qu’une simple goutte de sang (&lt;em&gt;The Drop out&lt;&#x2F;em&gt;, vous l’avez ?). Depuis, la justice a tranché : il s’agissait d’une arnaque auprès du grand public et d’investisseurs trop zélés. Bien sûr, un biopic est partial, et l’accusation rétrospective est toujours facile. Pour autant, j’ai apprécié la description de cette descente aux enfers : partant de l’empathie initiale d’une envie grandiloquente de changer le monde positivement, pour, sans qu’un vrai déclic ne se fasse, ne devenir vite qu’un mensonge se renfermant contre une protagoniste qui s’obstine dans une fantaisie sans limite. Ça se &lt;em&gt;binge-watch&lt;&#x2F;em&gt; très bien, et de ce que j’ai compris de la page Wikipedia sur l’affaire, ça colle plutôt à la réalité des évènements.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;severance&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#severance&quot; aria-label=&quot;Anchor link for: severance&quot;&gt;🔗&lt;&#x2F;a&gt;Severance&lt;&#x2F;h3&gt;
&lt;p&gt;Une série fantastique, sur plusieurs saisons, a priori. Vous connaissez le concept d’équilibre vie-privée &#x2F; vie-professionnelle ? Maintenant, imaginez qu’il est possible, par la force de la Science à travers une opération chirurgicale appelée la &lt;em&gt;Severance&lt;&#x2F;em&gt;, de dissocier complètement ces deux aspects &lt;em&gt;au sens premier du terme&lt;&#x2F;em&gt;. Une fois au travail, plus aucun souvenir de la vie personnelle ; une fois revenu, plus aucun souvenir du travail. En partant d’une expérience de pensée aux ramifications édifiantes, la série se prolonge avec une découverte des personnalités duales de chacun·e de ses protagonistes. Notamment le principal, joué par un Adam Scott qui, après l’avoir connu dans des rôles plus légers dans Parks &amp;amp; Recs ou The Good Place, abandonne ici toute velléité humoristique, et emprunte les traits d’un dépressif chronique en plein deuil, difficilement reconnaissable. Avant de découvrir un complot dans l’entreprise qui embauche son avatar professionnel… L’esthétique, très appréciable, se veut rétro-futuriste positiviste, catégoriquement minimale, très Apple TV. On notera notamment la police de caractères du titre, qui ressemble à la classique Helvetica de la marque à la pomme, légèrement remaniée. Une série palpitante.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#podcasts&quot; aria-label=&quot;Anchor link for: podcasts&quot;&gt;🔗&lt;&#x2F;a&gt;Podcasts&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;we-have-concerns&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#we-have-concerns&quot; aria-label=&quot;Anchor link for: we-have-concerns&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wehaveconcerns.com&#x2F;&quot;&gt;We Have Concerns&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Deux acteurs de théâtre d’improvisation, amis de longue date, montent un podcast ensemble, et choisissent de traiter des découvertes scientifiques les plus absurdes. Par émission, un ou deux sujets tirés de papiers de recherche ou de journaux scientifiques récents, sont disséqués, rapidement expliqués et commentés avec moult mauvaise foi et sarcasme. Il arrive qu’après un épisode, on ait vaguement retenu une statistique ou un &lt;em&gt;fun fact&lt;&#x2F;em&gt; qui nous feront briller en soirée mondaine. Petite pensée émue pour Nical, l’ami qui m’a fait découvrir ce podcast, et qui rappelle, à qui veut l’entendre, ce fait étonnant appris lors d’un épisode qu’environ 7% de la population humaine à avoir jamais vécu, est toujours en vie. Après s’être répété la phrase trois fois dans sa tête, on se dit, oui Nical, c’est effectivement étonnant ; plus sérieusement, merci à lui de me l’avoir fait découvrir. Il s’agit, pour moi, du mélange idéal entre vulgarisation de science étonnante, frisant l’absurde, et d’improvisation humoristique talentueuse et inspirante. Un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wehaveconcerns.com&#x2F;71-200-pc&#x2F;&quot;&gt;vieil épisode&lt;&#x2F;a&gt; relativement court vous indiquera votre niveau d’accointance avec le podcast. Personnellement, j’aime tant qu’ils font partie des rares créateur·ice·s que je soutiens financièrement, alors je ne peux que fortement vous le recommander.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;huberman-lab&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#huberman-lab&quot; aria-label=&quot;Anchor link for: huberman-lab&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hubermanlab.com&#x2F;&quot;&gt;Huberman Lab&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;D’accord, j’avoue tout, je suis encore en rémission de mon addiction au développement personnel, d’autant plus quand il est amené sur un plateau en Ag(47) avec des sources scientifiques solides comme du graphène. Comment optimiser son sommeil, d’après les dernières recherches sur le sujet ? Comment améliorer son humeur, d’après une méta-analyse des meilleurs papiers dans le domaine ? Les questions sont variées et toujours abordées sous plusieurs angles : des simples changements comportementaux “faciles” à mettre en place, mais aussi l’impact de la nutrition, jusqu’à l’usage de compléments alimentaires pour les plus empiriques et aventurièr·e·s d’entre nous ; bah oui, faut bien caser sa publicité ! &lt;em&gt;Spoiler alert&lt;&#x2F;em&gt; quant aux conclusions, nos grands-parents avaient raison : l’important, au final, c’est toujours de faire du sport (beaucoup), bien dormir (pas trop), s’exposer au soleil (un peu), manger varié et équilibré (toujours). Mais maintenant, au moins, chaque conseil s’appuie individuellement sur 3 heures exhaustives et scrupuleusement justifiées, pondérées, interprétées, validées, contre-validées, 3 heures par épisode de podcast donc, et ça, ça fait plaisir au gestionnaire borné, rebelle et contrôlant qu’est mon cerveau indocile.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;et-pour-finir-seulement-deux-titres-de-musique&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#et-pour-finir-seulement-deux-titres-de-musique&quot; aria-label=&quot;Anchor link for: et-pour-finir-seulement-deux-titres-de-musique&quot;&gt;🔗&lt;&#x2F;a&gt;Et pour finir, seulement deux titres de musique&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;h3aSLoj6KY8&quot;&gt;J’ai Essayé - Vianney&lt;&#x2F;a&gt; : &lt;em&gt;j’aime pas les chanteurs de droite, mais ça j’aime bien&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=2bIVHpJFc3M&quot;&gt;What You Will Leave Behind - MaxLL&lt;&#x2F;a&gt; : la bande-son du jeu vidéo &lt;em&gt;Spiritfarer&lt;&#x2F;em&gt;, apothéose du jeu, sensible à tous les niveaux.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>De l&#x27;écriture personnelle</title>
        <published>2023-05-21T00:00:00+00:00</published>
        <updated>2023-05-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/ecriture-personnelle/"/>
        <id>https://bouvier.cc/notes/ecriture-personnelle/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/ecriture-personnelle/">&lt;p&gt;Trop longtemps j’ai laissé ce blog à l’abandon, alors que trop longtemps j’ai eu des choses à dire. Cheesy.&lt;&#x2F;p&gt;
&lt;p&gt;D’aussi loin que je m’en souvienne, j’ai toujours adoré l’écriture. C’est comme ça que j’ai commencé l’informatique. Une dizaine d’années, un document Word, et c’était parti pour une multitude d’extraits, juste quelques lignes à chaque fois, quelques mots. Ici, une micro-nouvelle avec un rebondissement surprenant. Là, une formule qui provoque un soulèvement inopiné de sourcils ou un écarquillement oculaire involontaire. Toujours une signature qui suggère qu’il s’agit d’un extrait d’un livre plus long, plus complet, jamais écrit. Une idée empruntée au design des cartes Magic The Gathering, et leurs extraits toujours et mystérieusement incomplets.&lt;&#x2F;p&gt;
&lt;p&gt;Puis l’écriture m’a servi comme outil thérapeutique. Enclencher la méta-cognition, prendre du recul, mettre à plat la mélancolie pour mieux la mettre à bas. Alterner les rôles de la complainte entière et décomplexée, et celui de l’ami·e qui la questionne et l’absout. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;betterhumans.pub&#x2F;better-than-meditation-12532d29f6cd&quot;&gt;Se forcer à écrire &lt;em&gt;beaucoup&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; pour que les pensées noires généralement évitées aient l’opportunité de ressurgir. Contrairement à d’autres méthodes cathartiques, comme la pratique musicale, la friction est minimale : tant que traînent, à proximité, un clavier et la machine qu’il alimente. Ou pour les plus &lt;em&gt;low-tech&lt;&#x2F;em&gt; d’entre nous, le vieux Bic que l’on avait oublié, et le vide serein d’une page blanche. Parfois je me surprends au rêve dactylographique d’une machine à écrire, fantasmant les cliquetis abrupts qu’imitent maladroitement mes claviers mécaniques ; ignorant sciemment l’entretien que nécessite cette complexe horlogerie.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai tellement épuisé cet usage que j’en ai oublié les autres aspects de l’écriture. Le &lt;em&gt;plaisir&lt;&#x2F;em&gt; d’écrire, pour raconter l’histoire de soi ou celle des autres. Parfois mentir aux lecteur·ice·s. Pour émouvoir sans autre fin que d’émouvoir. Pour la joie coquette de peaufiner une formulation, de sélectionner pointilleusement le mot parfait, l’idiome pas idiot qui y donne l’idée idéale.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai oublié le &lt;em&gt;partage&lt;&#x2F;em&gt; par l’écriture, des connaissances, des expériences, des ressentis. Même quand on relit sur un sujet connu, parfois une formulation différente va résonner en nous et provoquer l’eurêka tant espéré ; ce serait dommage et vain de se contraindre à écrire uniquement l’inédit. J’aimerais écrire ce que j’aurais aimé lire plus jeune : en finir avec le syndrôme de l’imposteur, proposer des recommandations des médias que j’ai appréciés les années précédentes, (faire) découvrir la neuro-diversité en français dans le texte, écrire la critique d’une œuvre consommée récemment, en tentant d’y instiguer plus de profondeur qu’un prompt jugement manichéen, simplement partager des extraits qui me touchent. Écrire sans enjeu, sans garantie de qualité ou de résultat, &lt;em&gt;as is&lt;&#x2F;em&gt; comme aiment à le clamer les licences libres, sans s’imbiber de la pression sociale des réseaux asociables. Le prochain Pullitzer ne sera pas un article de blog, et c’est : O.K. Fracasser la barrière à l’entrée est libérateur.&lt;&#x2F;p&gt;
&lt;p&gt;Alors je tente l’expérience de remettre l’écriture au centre de ce blog. Probablement, certain·e·s ne s’y reconnaîtront pas, et ce n’est pas grave. Pour d’autres, ce serait l’occasion de briser la glace derrière l’écran, et de se tendre la main.&lt;&#x2F;p&gt;
&lt;p&gt;J’espère vous avoir enthousiasmé avec cette volonté de renouveau, pour vous également. J’ai une seule délicate demande : si vous vous étiez arrêté d’écrire par peur que ce ne soit sans intérêt, je vous incite&#x2F;invite à recommencer. Que l’on remette l’écriture personnelle au cœur des blogs, que l’on retisse un réseau social désuet à base de chaînes de liens et d’échanges de bannières, que l’on s’abonne aux infatigables flux RSS, que l’on savoure nos écritures, que l’on s’échange des pensées vagabondes, et que l’on échappe aux enclos numériques de ces géants qui nous appâtent pour mieux nous dévorer.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>cargo-machete, find unused dependencies quickly</title>
        <published>2022-04-27T23:17:23+00:00</published>
        <updated>2022-04-27T23:17:23+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/cargo-machete/"/>
        <id>https://bouvier.cc/tech/cargo-machete/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/cargo-machete/">&lt;p&gt;&lt;code&gt;cargo-machete&lt;&#x2F;code&gt; is a new Cargo tool that detects unused dependencies in Rust
projects, in a fast (yet imprecise) way. As of today you can install it with
&lt;code&gt;cargo install cargo-machete&lt;&#x2F;code&gt; and then run it with &lt;code&gt;cargo machete&lt;&#x2F;code&gt; from any
folder that contains a workspace or crate, to find if you have potentially
unused dependencies. Beware, it can report a few false positives!&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;problem-statement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#problem-statement&quot; aria-label=&quot;Anchor link for: problem-statement&quot;&gt;🔗&lt;&#x2F;a&gt;Problem statement&lt;&#x2F;h2&gt;
&lt;p&gt;When developers hack on code, it’s a pretty common to reuse software that
already exists and has been written, optimized, and battle-tested by many
others. In fact, that’s a core idea of the open-source movement, and one
historical reason for its existence.&lt;&#x2F;p&gt;
&lt;p&gt;When zooming in into the Rust programming language case, my opinion is that it
is also a key reason why Rust has been so successful: having plenty of crates
doing everything you might need, already implemented for you and at hand’s
reach on &lt;code&gt;crates.io&lt;&#x2F;code&gt;. Plus, having the wonder of a one-does-it-all Cargo tool
that makes it very easy to use those crates as dependencies in your project.
&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;However, this comes with a price: sometimes you add a dependency because it’s
useful at a particular point in time. Much later, it’s not useful anymore, but
you may have forgotten about it. And then, the dependency remains as a zombie
in your &lt;code&gt;Cargo.toml&lt;&#x2F;code&gt; file. Cargo will include it in the compilation graph,
despite the compilation artifacts not being used at all. The unused dependency
will just stay there, silently weep, waiting for you to recall it exists.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, the problem can even become worse: maybe you maintain several crates
that have unused dependencies. Or maybe you work with many crates as part of a
workspace, and each may have unused dependencies. Or simply you use many
dependencies yourself, and some may include unused dependencies. If you’ve
published your crates and others use those, then everyone could also compile
unused dependencies. At the scale of the entire Rust crates ecosystem, it can
have a huge impact on the compile times, produced heat and wasted energy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;have-you-heard-about-our-lord-and-savior-cargo-udeps&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#have-you-heard-about-our-lord-and-savior-cargo-udeps&quot; aria-label=&quot;Anchor link for: have-you-heard-about-our-lord-and-savior-cargo-udeps&quot;&gt;🔗&lt;&#x2F;a&gt;Have you heard about our lord and savior, &lt;code&gt;cargo-udeps&lt;&#x2F;code&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;There’s already a nice tool for this in the ecosystem:
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;est31&#x2F;cargo-udeps&quot;&gt;&lt;code&gt;cargo-udeps&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. It will compile your
crate (or workspace) and then infer from the compiled artifacts what
dependencies are used by your project, and thus show you which dependencies are
&lt;em&gt;unused&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;That’s great, but the way it works forces a few tradeoffs:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;it requires to compile the whole crate with the Rustc &lt;code&gt;nightly&lt;&#x2F;code&gt; compiler. For
me that means recompiling the whole project from scratch, most of the time,
since I’m mostly using stable rustc as my daily driver.&lt;&#x2F;li&gt;
&lt;li&gt;if you compile for multiple targets (i.e. different combinations of CPU
flavor, OS, environment, etc.), you’d need to run &lt;code&gt;cargo-udeps&lt;&#x2F;code&gt; on each of
those to find per-target unused dependencies. For instance, if a dependency
is only configured when compiling for x86_64 machines, then it may be flagged
as unused on every other configuration.&lt;&#x2F;li&gt;
&lt;li&gt;most of all, since it look at compilation artifacts, it cannot know if a
specific dependency is directly used by your crate, or indirectly, leading to
somehwat mystifying results in the case of workspaces.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Let’s dive a bit deeper into the last item, which I’ll refer to as &lt;em&gt;the
transitively-used dependencies problem&lt;&#x2F;em&gt;. Say you have your project &lt;code&gt;AAA&lt;&#x2F;code&gt; that
contains a dependency to &lt;code&gt;serde&lt;&#x2F;code&gt; in its &lt;code&gt;Cargo.toml&lt;&#x2F;code&gt; file, while it’s not
directly used by your code. In fact, if you did a text-search of &lt;code&gt;serde&lt;&#x2F;code&gt; in
&lt;code&gt;AAA&lt;&#x2F;code&gt;’s code with &lt;code&gt;grep&lt;&#x2F;code&gt;, you wouldn’t find a single match&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. But now &lt;code&gt;AAA&lt;&#x2F;code&gt;
is using another crate, &lt;code&gt;AB&lt;&#x2F;code&gt;, that itself depends on &lt;code&gt;serde&lt;&#x2F;code&gt;. &lt;code&gt;cargo-udeps&lt;&#x2F;code&gt;
will see that &lt;code&gt;serde&lt;&#x2F;code&gt; is used &lt;em&gt;overall&lt;&#x2F;em&gt;, so it cannot let you know that &lt;code&gt;AAA&lt;&#x2F;code&gt;’s
&lt;code&gt;Cargo.toml&lt;&#x2F;code&gt; file references an unused dependency to &lt;code&gt;serde&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;cargo-machete&#x2F;unused.png&quot; alt=&quot;Graph of crates containing one unused crate&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;How is this a problem? After all, if the workspace uses &lt;code&gt;serde&lt;&#x2F;code&gt; even
indirectly, then we &lt;em&gt;will&lt;&#x2F;em&gt; have to compile it at some point, so it’s not like
it’s &lt;em&gt;really&lt;&#x2F;em&gt; unused.&lt;&#x2F;p&gt;
&lt;p&gt;First of all, the &lt;code&gt;AAA&lt;&#x2F;code&gt; crate might be using a different version of &lt;code&gt;serde&lt;&#x2F;code&gt;
than the &lt;code&gt;AB&lt;&#x2F;code&gt; crate, and this could result in different copies of the same
crate in your workspace. Note there are other nice tools that automatically
detect this kind of situation (hi there
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;EmbarkStudios&#x2F;cargo-deny&#x2F;&quot;&gt;cargo-deny&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Second, the order in which crates are compiled has an impact on compilation
parallelism, and having unused dependencies may add spurious synchronization
points in the compilation graph. When a Rust crate gets compiled by Cargo,
Cargo proceeds in two phases:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;first, it collects information so as to unlock the compilation of other
crates further down the road that may depend on this particular one. I don’t
know precisely what it entails, but one can make educated guesses: parse the
code, analyze which items are &lt;code&gt;pub&lt;&#x2F;code&gt;lic, compute memory layouts for public
types, collect type information and so on and so forth.&lt;&#x2F;li&gt;
&lt;li&gt;then, it does the actual compilation: optimize and generate the actual
machine code for that particular crate, that will be later linked with other
artifacts to form the final executable program.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The advantage of this two-phases scheme is that once Cargo is done with phase 1
for a particular crate, it can kick off the same process for other crates up
the dependency tree, while it runs phase 2 concurrently. With a multi-core
machine as is the norm on desktop computers, it’s almost certain that this will
bring speedups!&lt;&#x2F;p&gt;
&lt;p&gt;For instance, consider the following &lt;code&gt;Cargo.toml&lt;&#x2F;code&gt; file from our previous
example project:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;dependencies&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;serde&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; = &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then a possible compilation graph could look like that:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;cargo-machete&#x2F;phases.png&quot; alt=&quot;Compilation graph showing phases&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In this case, &lt;code&gt;ab&lt;&#x2F;code&gt; phase 1 can start as soon as &lt;code&gt;serde&lt;&#x2F;code&gt; phase 1 has finished,
while &lt;code&gt;serde&lt;&#x2F;code&gt;’s compilation phase 2 happens in the background.&lt;&#x2F;p&gt;
&lt;p&gt;If you’re interested in reducing the overall compile times of your Rust
project, I would strongly suggest to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;nightly&#x2F;cargo&#x2F;reference&#x2F;unstable.html#timings&quot;&gt;go read Rust’s documentation around
timings
visualization&lt;&#x2F;a&gt;.
Crates which spend lots of time in the first phase (or more generally, in both
phases) are basically pipelining bottlenecks, so identifying&#x2F;removing&#x2F;working
around them overall speeds up compile times.&lt;&#x2F;p&gt;
&lt;p&gt;Back to our small unused dependency problem: an unused dependency in your
&lt;code&gt;Cargo.toml&lt;&#x2F;code&gt; may block the compilation of other crates up the dependency tree,
and thus may slow down the whole compilation process by creating useless check
points.&lt;&#x2F;p&gt;
&lt;p&gt;Consider a crate &lt;code&gt;C&lt;&#x2F;code&gt; that depends on crates &lt;code&gt;A&lt;&#x2F;code&gt; and &lt;code&gt;B&lt;&#x2F;code&gt;, with &lt;code&gt;B&lt;&#x2F;code&gt; actually
unused:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;cargo-machete&#x2F;pipeline-stall.png&quot; alt=&quot;Pipeline stall&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here, the compilation of the crate &lt;code&gt;C&lt;&#x2F;code&gt; could start way earlier, but it’s
blocking waiting for the compilation of &lt;code&gt;B&lt;&#x2F;code&gt; to finish first, while it’s not
even used!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;solving-this-the-naive-way&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#solving-this-the-naive-way&quot; aria-label=&quot;Anchor link for: solving-this-the-naive-way&quot;&gt;🔗&lt;&#x2F;a&gt;Solving this, the naive way&lt;&#x2F;h2&gt;
&lt;p&gt;So when I was trying to confirm whether crates found by &lt;code&gt;cargo-udeps&lt;&#x2F;code&gt; were
actually used or not in my Rust projects, the thing I’d do would be to &lt;code&gt;grep&lt;&#x2F;code&gt;
(or better, use the blazingly fast Rust replacement
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BurntSushi&#x2F;ripgrep&quot;&gt;ripgrep&lt;&#x2F;a&gt;) the crate’s name in the
project. After all, the crate’s name is in the source directory, if and only if
the crate is used, right?&lt;&#x2F;p&gt;
&lt;p&gt;The answer is… mostly, yes. If we exclude dynamic code loading via mechanisms
like &lt;code&gt;dlopen&lt;&#x2F;code&gt; or WebAssembly, then there aren’t so many ways to use other
crates &lt;em&gt;directly&lt;&#x2F;em&gt;, in Rust code. In fact, we can exhaustively enumerate all the
syntax items to use other dependencies in Rust:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; my_crate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; your_crate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;as&lt;&#x2F;span&gt;&lt;span&gt; my_crate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;use {&lt;&#x2F;span&gt;&lt;span&gt; your_crate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;as&lt;&#x2F;span&gt;&lt;span&gt; my_crate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;extern&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt; crate&lt;&#x2F;span&gt;&lt;span&gt; my_crate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;    my_crate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;something&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I’ve looked at a bit of Rust code now, and I haven’t seen other direct forms;
if I am missing any, please let me know! Now, these are the most &lt;em&gt;frequent&lt;&#x2F;em&gt;
ways to use a dependency, but there are in fact other ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;build.rs&lt;&#x2F;code&gt; scripts can generate code that could use other crates, and that
would not be visible through a text search in the &lt;code&gt;src&#x2F;&lt;&#x2F;code&gt; directory, as the
generated code is somewhere inside the &lt;code&gt;target&#x2F;build&#x2F;&lt;&#x2F;code&gt; directory.&lt;&#x2F;li&gt;
&lt;li&gt;macros (procedural or not) can expand to code that’s using other crates,
while the source code doesn’t &lt;em&gt;explicitly&lt;&#x2F;em&gt; mention them. For instance, the
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Luthaf&#x2F;log-once&quot;&gt;&lt;code&gt;log_once&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; crate uses the &lt;code&gt;log&lt;&#x2F;code&gt; macros
in its own macros, but &lt;code&gt;log_once&lt;&#x2F;code&gt; doesn’t depend on &lt;code&gt;log&lt;&#x2F;code&gt; explicitly. It’s a
bold and smart move: it breaks the coupling with the specific version of
&lt;code&gt;log&lt;&#x2F;code&gt; , and as long as the high-level API of &lt;code&gt;log&lt;&#x2F;code&gt; is stable (which is the
case), then &lt;code&gt;log_once&lt;&#x2F;code&gt; works with &lt;em&gt;any&lt;&#x2F;em&gt; version of &lt;code&gt;log&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And then, there’s still a bit of room for some false positives:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;raw text submatches: e.g. if a crate is named &lt;code&gt;bar&lt;&#x2F;code&gt;, then &lt;code&gt;foobar::&lt;&#x2F;code&gt; would be
a match if we’re doing a raw &lt;code&gt;grep&lt;&#x2F;code&gt; search&lt;&#x2F;li&gt;
&lt;li&gt;text search isn’t syntaxic analysis, and we wouldn’t know if a match is in a
comment (&lt;code&gt;&#x2F;&#x2F; use foo;&lt;&#x2F;code&gt;), or a string (&lt;code&gt;String::from(&quot;use foo;&quot;)&lt;&#x2F;code&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;But that would do &lt;em&gt;most of the job&lt;&#x2F;em&gt;, wouldn’t it? In particular, compared to
&lt;code&gt;cargo-udeps&lt;&#x2F;code&gt;, this approach doesn’t suffer from the &lt;em&gt;transitively-used
dependencies&lt;&#x2F;em&gt; problem. If you look for a crate’s name in the &lt;code&gt;src&#x2F;&lt;&#x2F;code&gt; directory
and it’s not there, it’s likely not used by your crate. The End.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-tedious-process-calls-for-automation-so-i-made-a-tool&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-tedious-process-calls-for-automation-so-i-made-a-tool&quot; aria-label=&quot;Anchor link for: a-tedious-process-calls-for-automation-so-i-made-a-tool&quot;&gt;🔗&lt;&#x2F;a&gt;A tedious process calls for automation, so I made a tool&lt;&#x2F;h2&gt;
&lt;p&gt;And I’ve called it &lt;code&gt;cargo-machete&lt;&#x2F;code&gt;. Like a machete, it is very useful for
quickly weeding out things, but it is very imprecise and you wouldn’t trust it
at 100%.&lt;&#x2F;p&gt;
&lt;p&gt;The gist of it is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;find directories that might contain Rust projects, as indicated by the
presence of a &lt;code&gt;Cargo.toml&lt;&#x2F;code&gt; file&lt;&#x2F;li&gt;
&lt;li&gt;for each dependency, create an absolutely ugly regular expression that
matches any of the syntaxic forms presented above. The regular expression
does better than just raw text search, in particular it doesn’t run into the
text submatch issue.
&lt;ul&gt;
&lt;li&gt;then for each file in the project, try to match the regular expression
against each line of any source file, and stop at the first successful
match (which means the dependency &lt;em&gt;is&lt;&#x2F;em&gt; used)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This tool is &lt;em&gt;fast&lt;&#x2F;em&gt;, because it combines the core library behind &lt;code&gt;ripgrep&lt;&#x2F;code&gt; for
matching regular expressions, with &lt;em&gt;rayon&lt;&#x2F;em&gt; for running it in parallel across
all the dependencies of a project. On my machine, the problem is CPU-bound,
because of the execution of the regular expression (and maybe thanks to my NVME
storage too). That’s only one data point, but on this particular beefy desktop
I use, it scans the entirety of the &lt;code&gt;rust-lang&#x2F;rust&lt;&#x2F;code&gt; repository in 1.08
seconds, or all of &lt;code&gt;BytecodeAlliance&#x2F;wasmtime&lt;&#x2F;code&gt; in 0.58 seconds.&lt;&#x2F;p&gt;
&lt;p&gt;The tool is &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;cargo-machete&quot;&gt;&lt;em&gt;open source&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, of course.&lt;&#x2F;p&gt;
&lt;p&gt;As is the tradition for Cargo tools, it can be installed with:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cargo install cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;machete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;and then can be used, from any directory that contains Rust code (be it a
workspace, a single project, or a directory on top of many Rust projects), with
the following line:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cargo machete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here’s an output example:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; cargo machete&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Looking&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; for crates in this directory and analyzing their dependencies...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;&#x2F;home&#x2F;ben&#x2F;code&#x2F;cargo-machete&#x2F;integration-tests&#x2F;with-bench&#x2F;Cargo.toml&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; --&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; no package, must be a workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;just-unused&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; --&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; &#x2F;home&#x2F;ben&#x2F;code&#x2F;cargo-machete&#x2F;integration-tests&#x2F;just-unused&#x2F;Cargo.toml:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;	log&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;unused-transitive&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; --&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; &#x2F;home&#x2F;ben&#x2F;code&#x2F;cargo-machete&#x2F;integration-tests&#x2F;unused-transitive&#x2F;Cargo.toml:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;	lib1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Done!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There are &lt;em&gt;false positives&lt;&#x2F;em&gt;: code generated via macros or build scripts aren’t
inspected as they’re not in the &lt;code&gt;src&#x2F;&lt;&#x2F;code&gt; directory and &lt;code&gt;cargo-machete&lt;&#x2F;code&gt; doesn’t
run any compile step. For instance, if a project depends on &lt;code&gt;log&lt;&#x2F;code&gt; , but uses it
only through &lt;code&gt;log_once&lt;&#x2F;code&gt;, then &lt;code&gt;cargo-machete&lt;&#x2F;code&gt; will incorrectly flag &lt;code&gt;log&lt;&#x2F;code&gt; as an
unused dependency.&lt;&#x2F;p&gt;
&lt;p&gt;The good news is that, thanks to a contribution from &lt;code&gt;@daniel5151&lt;&#x2F;code&gt;, you can
specify &lt;em&gt;known false positives&lt;&#x2F;em&gt; in the &lt;code&gt;Cargo.toml&lt;&#x2F;code&gt; file of your crate,
allowing use of &lt;code&gt;cargo-machete&lt;&#x2F;code&gt; in CI setups:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;package&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;metadata&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cargo-machete&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ignored&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt; # false positive, used by log_once! macro&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As far as I know, the risk for &lt;em&gt;false negatives&lt;&#x2F;em&gt; (i.e. crates that are unused,
but the tool thinks they’re used) is pretty low. One such instance would be a
multi-line string containing one of the &lt;code&gt;use&lt;&#x2F;code&gt; forms, but that seems rather
unlikely to be present in most Rust projects.&lt;&#x2F;p&gt;
&lt;p&gt;The tool is still a bit rough, but it’s been already quite useful for some
projects I’ve been working on! In a particular work project, most unused
dependencies were transitively used and compiled, but the rejiggering of the
compilation graph lead to a 5% compile time speedup overall. Good impact over
effort ratio.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-about-other-languages&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-about-other-languages&quot; aria-label=&quot;Anchor link for: what-about-other-languages&quot;&gt;🔗&lt;&#x2F;a&gt;What about other languages?&lt;&#x2F;h2&gt;
&lt;p&gt;What makes this possible in Rust, and could it be extended to other languages?&lt;&#x2F;p&gt;
&lt;p&gt;Dynamic languages by nature dynamically load code, but there are still ways to
try to automate detecting unused dependencies same as &lt;code&gt;cargo-machete&lt;&#x2F;code&gt; does.
Consider JavaScript and its &lt;code&gt;require&lt;&#x2F;code&gt; function, that can dynamically evaluate a
string that’s a path to a file with code we want to import. Since there’s an
infinity of ways to create a string, we can’t just perfectly rely on finding
&lt;code&gt;require(&quot;abc&quot;)&lt;&#x2F;code&gt; and assume that if not present, then &lt;code&gt;abc&lt;&#x2F;code&gt; isn’t used. Ditto
with &lt;code&gt;import&lt;&#x2F;code&gt; statements, which can evaluate dynamic sources. That being said,
if JS code is restricted to use &lt;code&gt;require&lt;&#x2F;code&gt; statements with only static strings
or static &lt;code&gt;import&lt;&#x2F;code&gt; statements, then this may work too! Although when
restricting to static &lt;code&gt;require&lt;&#x2F;code&gt;s, even just &lt;em&gt;loading&lt;&#x2F;em&gt; the code in NodeJS would
be sufficient to find unused dependencies with perfect accuraccy.&lt;&#x2F;p&gt;
&lt;p&gt;Back to static languages, where I constrain the problem to non-dynamic
dependencies (loaded via &lt;code&gt;dlopen&lt;&#x2F;code&gt; etc.). In a language like C or C++, there are
no unified module systems or package description (yet! although &lt;code&gt;cmake&lt;&#x2F;code&gt; might
be a de-facto standard). We can still apply this to header files, and look for
their inclusion via &lt;code&gt;#include&lt;&#x2F;code&gt; statements. Macros and preprocessed code would
also throw a wrench in the process. Then some human intervention would still be
required to eliminate the .c files, but I haven’t thought about it too much.&lt;&#x2F;p&gt;
&lt;p&gt;Static analysis of compiled binaries might be simpler, for that matter. If we
consider the problem for WebAssembly, we can frame it as “which imported
functions are not used in the module”, potentially eliminating an entire range
of host functions. In the simplest case, we could just look at the code
section, through the function bodies, and see if there’s any reference to
indices of every single imported function in &lt;code&gt;call&lt;&#x2F;code&gt; opcodes. Then, there can be
function &lt;code&gt;Table&lt;&#x2F;code&gt;s referencing those, so we have to make sure no table elements
reference the function. And if any table is mutable and publicly exposed via an
export, then a user of the wasm module may reference any function declared in
the wasm module, including imported functions, so all bets are off. Note
dead-code elimination in wasm would be pretty similar and suffer from the same
limitations: after all, a function dependency is just another kind of function,
in wasm! Each format may have such idiosyncrasies like that. Static analysis of
final binaries (as opposed to libraries) might be possible and reliable,
though.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;closing-thoughts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closing-thoughts&quot; aria-label=&quot;Anchor link for: closing-thoughts&quot;&gt;🔗&lt;&#x2F;a&gt;Closing thoughts&lt;&#x2F;h2&gt;
&lt;p&gt;For the sake of completeness, I should mention the existence of a rustc
crate-wide lint for this, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;rust&#x2F;pull&#x2F;72342&quot;&gt;since May 2020 or
so&lt;&#x2F;a&gt;:
&lt;code&gt;#![warn(unused_crate_dependencies)]&lt;&#x2F;code&gt;. This tells about unused crate
dependencies directly as a Rust warning, which in my opinion would be the ideal
end goal! Unfortunately, some Github comments suggest it suffers from having
too many false positives, and still it requires compiling the code.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;@est31&lt;&#x2F;code&gt;, of &lt;code&gt;cargo-udeps&lt;&#x2F;code&gt;’s fame, has been working on a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rust-lang&#x2F;cargo&#x2F;pull&#x2F;8437&quot;&gt;better
solution&lt;&#x2F;a&gt;. It seems to not be so
far from completion, so between this and the Rust lint, I’m hopeful that there
could be a time where we have a solution that is perfectly precise, with
neither false positives nor false negatives.&lt;&#x2F;p&gt;
&lt;p&gt;In the meanwhile, I hope that &lt;code&gt;cargo-machete&lt;&#x2F;code&gt; can be useful to some of you, or
that it inspires others to make similar quick-and-dirty tools, in Rust or in
other languages. Thanks for reading this far, and please &lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;cargo-machete&#x2F;@mailto:benjamin+cargomachete@bouvier.cc&quot;&gt;get in
touch&lt;&#x2F;a&gt; if you have any thoughts about this!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;If you don’t know about the &lt;code&gt;cargo-edit&lt;&#x2F;code&gt; tool that allows you to add a
dependency in one line with &lt;code&gt;cargo add serde&lt;&#x2F;code&gt; to your project: &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;killercup&#x2F;cargo-edit&quot;&gt;now you
do&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;Wait for it… &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>A primer on code generation in Cranelift</title>
        <published>2021-02-17T19:00:42+00:00</published>
        <updated>2021-02-17T19:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/cranelift-codegen-primer/"/>
        <id>https://bouvier.cc/tech/cranelift-codegen-primer/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/cranelift-codegen-primer/">&lt;script src=&quot;https:&#x2F;&#x2F;cdn.jsdelivr.net&#x2F;npm&#x2F;mermaid&#x2F;dist&#x2F;mermaid.min.js&quot;&gt;&lt;&#x2F;script&gt;
&lt;script&gt;mermaid.initialize({startOnLoad:true});&lt;&#x2F;script&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bytecodealliance&#x2F;wasmtime&#x2F;tree&#x2F;main&#x2F;cranelift#cranelift-code-generator&quot;&gt;Cranelift&lt;&#x2F;a&gt; is a code generator written in the Rust programming language that aims to be a fast code generator, which outputs machine code that runs at reasonable speeds.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;The Cranelift compilation model consists in compiling functions one by one, holding extra information about external entities, like external functions, memory addresses, and so on. This model allows for concurrent and parallel compilation of individual functions, which supports the goal of fast compilation. It was designed this way to allow for just-in-time (JIT) compilation of WebAssembly binary code in Firefox, although its scope has broadened a bit. Nowadays it is used in a few different WebAssembly runtimes, including &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bytecodealliance&#x2F;wasmtime#wasmtime&quot;&gt;Wasmtime&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wasmer.io&#x2F;&quot;&gt;Wasmer&lt;&#x2F;a&gt;, but also as an alternative backend for Rust debug compilation, thanks to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bjorn3&#x2F;rustc_codegen_cranelift&quot;&gt;cg_clif&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A classic compiler design usually includes running a parser to translate the source to some form of intermediate representations, then run optimization passes onto them, then feeds this to the machine code generator.&lt;&#x2F;p&gt;
&lt;p&gt;This blog post focuses on the final step, namely the concepts that are involved in code generation, and what they map to in Cranelift. To make things more concrete, we’ll take a specific instruction, and see how it’s translated, from its creation down to code generation. At each step of the process, I’ll provide a short (&lt;em&gt;ahem&lt;&#x2F;em&gt;) high-level explanation of the concepts involved, and I’ll show what they map to in Cranelift, using the example instruction. While this is not a tutorial detailing how to add new instructions in Cranelift, this should be an interesting read for anyone who’s interested in compilers, and this could be an entry point if you’re interested in hacking on the Cranelift &lt;code&gt;codegen&lt;&#x2F;code&gt; crate.&lt;&#x2F;p&gt;
&lt;p&gt;This is our plan for this blog post: each squared box represents data, each
rounded box is a process. We’re going to go through each of them below.&lt;&#x2F;p&gt;
&lt;div class=&quot;mermaid&quot;&gt;
graph TD;
    clif[Optimized CLIF];
    vcode[VCode];
    final_vcode[Final VCode];
    machine_code[Machine code artifacts];
    lowering([Lowering]);
    regalloc([Register allocation]);
    codegen([Machine code generation]);
    clif --&gt; lowering --&gt; vcode --&gt; regalloc --&gt; final_vcode --&gt; codegen --&gt; machine_code
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;intermediate-representations&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#intermediate-representations&quot; aria-label=&quot;Anchor link for: intermediate-representations&quot;&gt;🔗&lt;&#x2F;a&gt;Intermediate representations&lt;&#x2F;h2&gt;
&lt;p&gt;Compilers use &lt;strong&gt;intermediate representations&lt;&#x2F;strong&gt; (&lt;em&gt;IR&lt;&#x2F;em&gt;) to represent source code. Here we’re interested in representations of the &lt;em&gt;data flow&lt;&#x2F;em&gt;, that is instructions themselves and only that. The IRs contain information about the instructions themselves, their operands, type specialization information, and any additional metadata that might be useful. IRs usually map to a certain level of abstraction, and as such, they are useful for solving different problems that require different levels of abstraction. Their shape (which data structures) and numbers often have a huge impact on the performance of the compiler itself (that is, how fast it is at compiling).&lt;&#x2F;p&gt;
&lt;p&gt;In general, most programming languages use IRs internally, and yet, these are invisible to the programmers. The reason is that source code is usually first &lt;em&gt;parsed&lt;&#x2F;em&gt; (tokenized, verified) and then translated into an IR. The &lt;em&gt;abstract syntax tree&lt;&#x2F;em&gt;, aka AST, is one such IR representing the source code itself, in a format that’s very close to the source code itself. Since the raison d’être of Cranelift is to be a code generator, having a text format is secondary, and only useful for testing and debugging purposes. That’s why embedders directly create and manipulate Cranelift’s IR.&lt;&#x2F;p&gt;
&lt;p&gt;At the time of writing, Cranelift has two IRs to represent the function’s code:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;one external, high-level intermediate representation, called &lt;strong&gt;CLIF&lt;&#x2F;strong&gt; (for &lt;em&gt;Cranelift IR format&lt;&#x2F;em&gt;),&lt;&#x2F;li&gt;
&lt;li&gt;one internal, low-level intermediate representation called &lt;strong&gt;VCode&lt;&#x2F;strong&gt; (for &lt;em&gt;virtual-registerized code&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;clif-ir&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#clif-ir&quot; aria-label=&quot;Anchor link for: clif-ir&quot;&gt;🔗&lt;&#x2F;a&gt;CLIF IR&lt;&#x2F;h2&gt;
&lt;p&gt;CLIF is the IR that Cranelift embedders create and manipulate. It consists of high-level typed operations that are convenient to use and&#x2F;or can be simply translated to machine code. It is in &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Static_single_assignment_form&quot;&gt;static single assignment (SSA) form&lt;&#x2F;a&gt;: each value referenced by an operation (SSA value) is defined only once, and may have as many uses as desired. CLIF is practical to use and manipulate for classic compilers optimization passes (e.g. &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Loop-invariant_code_motion&quot;&gt;LICM&lt;&#x2F;a&gt;), as it is generic over the target architecture which we’re compiling to.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; builder&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;ins&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;iconst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;types&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;I64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 42&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; builder&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;ins&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;iconst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;types&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;I64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 1337&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; sum&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; builder&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;ins&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;iadd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;An example of Rust code that would generate CLIF IR: using an IR builder, two constant 64-bits integer SSA values x and y are created, and then added together. The result is stored into the &lt;code&gt;sum&lt;&#x2F;code&gt; SSA value, which can then be consumed by other instructions.&lt;&#x2F;p&gt;
&lt;p&gt;The code for the IR builder we’re manipulating above is automatically generated by the &lt;code&gt;cranelift-codegen&lt;&#x2F;code&gt; build script. The build script uses a domain specific &lt;em&gt;meta&lt;&#x2F;em&gt; language (DSL)&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that defines the instructions, their input and output operands, which input types are allowed, how the output type is inferred, etc. We won’t take a look at this &lt;em&gt;today&lt;&#x2F;em&gt;: this is a bit too far from code generation, but this could be material for another blog post.&lt;&#x2F;p&gt;
&lt;p&gt;As an example of a full-blown CLIF generator, there is &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bytecodealliance&#x2F;wasmtime&#x2F;tree&#x2F;main&#x2F;cranelift&#x2F;wasm&quot;&gt;a crate&lt;&#x2F;a&gt; in the Cranelift project that allows translating from the WebAssembly binary format to CLIF. The Cranelift backend for Rustc uses its own CLIF generator that translates from one of the Rust compiler’s IRs.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, it’s time to reveal what’s going to be our running example! The Chosen One is the &lt;code&gt;iadd&lt;&#x2F;code&gt; CLIF operation, which allows to add two integers of any length together, with wrapping semantics. It is both simple to understand what it does, and exhibits interesting behaviors on the two architectures we’re interested in. So, let’s continue down the pipeline!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vcode-ir&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vcode-ir&quot; aria-label=&quot;Anchor link for: vcode-ir&quot;&gt;🔗&lt;&#x2F;a&gt;VCode IR&lt;&#x2F;h2&gt;
&lt;p&gt;Later on, the CLIF intermediate representation is &lt;em&gt;lowered&lt;&#x2F;em&gt;, i.e. transformed from a high-level one into a lower-level one. Here lower level means a form more specialized for a machine architecture. This lower IR is called &lt;em&gt;VCode&lt;&#x2F;em&gt; in Cranelift. The values it references are called &lt;em&gt;virtual registers&lt;&#x2F;em&gt; (more on the &lt;em&gt;virtual&lt;&#x2F;em&gt; bit below). They’re not in SSA form anymore: each virtual register may be redefined as many times as we want. This IR is used to encode register allocation constraints and it guides machine code generation. As a matter of fact, since this information is tied to the machine code’s representation itself, this IR is also target-specific: there’s one flavor of VCode per each CPU architecture we’re compiling to.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s get back to our example, that we’re going to compile on two instruction set architectures:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ARM 64-bits (aka aarch64), which is used in most mobile devices but start to become mainstream on laptops (Apple’s Mac M1, some Chromebooks)&lt;&#x2F;li&gt;
&lt;li&gt;Intel’s x86 64-bits (aka x86_64, also abbreviated x64), which is used in most desktop and laptop machines).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;An integer addition machine instruction on aarch64 will take three operands: two input operands (one of which must be a register), and another third output register operand. While on the x86_64 architecture, the equivalent instruction involves a total of two registers: one that is a read-only source register, and another that is an in-out modified register, containing both the second source and the destination register. We’ll get back to this.&lt;&#x2F;p&gt;
&lt;p&gt;So considering &lt;code&gt;iadd&lt;&#x2F;code&gt;, let’s look at (one of&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-4-1&quot;&gt;&lt;a href=&quot;#fn-4&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;) the VCode instruction that’s used to represent integer additions on aarch64 (as defined in &lt;code&gt;cranelift&#x2F;codegen&#x2F;src&#x2F;isa&#x2F;aarch64&#x2F;inst&#x2F;mod.rs&lt;&#x2F;code&gt;):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; An ALU operation with two register sources and a register destination.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;AluRRR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    alu_op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; ALUOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Writable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;},&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Some details here:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;alu_op&lt;&#x2F;code&gt; defines the sub-opcode used in the ALU (Arithmetic Logic Unit). It will be &lt;code&gt;AluOp::Add64&lt;&#x2F;code&gt; for a 64-bits integer addition.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rn&lt;&#x2F;code&gt; and &lt;code&gt;rm&lt;&#x2F;code&gt; are the conventional aarch64 names for the two input registers.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;rd&lt;&#x2F;code&gt; is the destination register. See how it’s marked as &lt;code&gt;Writable&lt;&#x2F;code&gt;, while the two others are not? &lt;code&gt;Writable&lt;&#x2F;code&gt; is a plain Rust wrapper that makes sure that we &lt;em&gt;can&lt;&#x2F;em&gt; statically differentiate read-only registers from writable registers; a neat trick that allows us to catch more issues at compile-time.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;All this information is directly tied to the machine code representation of an addition instruction on aarch64: each field is later used to select some bytes that will be generated during code generation.&lt;&#x2F;p&gt;
&lt;p&gt;As said before, the VCode is specific to each architecture, so x86_64 has a different VCode representation for the same instruction (as defined in &lt;code&gt;cranelift&#x2F;codegen&#x2F;src&#x2F;isa&#x2F;x64&#x2F;inst&#x2F;mod.rs&lt;&#x2F;code&gt;):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F;&#x2F; Integer arithmetic&#x2F;bit-twiddling: (add sub and or xor mul adc? sbb?) (32 64) (reg addr imm) reg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;AluRmiR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    is_64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; bool&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; AluRmiROpcode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    src&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; RegMemImm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Writable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;},&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here, the sub-opcode is defined as part of the &lt;code&gt;AluRmiROpcode&lt;&#x2F;code&gt; enum (the comment hints at which other x86 machine instructions are generated by this same VCode). See how there’s only one &lt;code&gt;src&lt;&#x2F;code&gt; (source) register (or memory or immediate operand), while the instruction conceptually takes two inputs? That’s because it’s expected that the &lt;code&gt;dst&lt;&#x2F;code&gt; (destination) register is &lt;em&gt;modified&lt;&#x2F;em&gt;, that is, both read (so it’s the second input operand) and written to (so it’s the result register). In equivalent C code, the x86’s add instruction doesn’t actually do &lt;code&gt;a = b + c&lt;&#x2F;code&gt;. What it does is &lt;code&gt;a += b&lt;&#x2F;code&gt;, that is, one of the sources is &lt;em&gt;consumed&lt;&#x2F;em&gt; by the instruction. This is an artifact inherited from the design of older x86 machines in the 1970’s, when instructions were designed around an accumulator model (and representing efficiently three operands in a CISC architecture would make the encoding larger and harder than it is).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;instruction-selection-lowering&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#instruction-selection-lowering&quot; aria-label=&quot;Anchor link for: instruction-selection-lowering&quot;&gt;🔗&lt;&#x2F;a&gt;Instruction selection (lowering)&lt;&#x2F;h2&gt;
&lt;p&gt;As said before, converting from the high-level IR (CLIF) to the low-level IR (VCode) is called lowering. Since VCode is target-dependent, this process is also target-dependent. That’s where we consider which machine instructions get eventually used for a given CLIF opcode. There are many ways to achieve the same machine state results for given semantics, but some of these ways are faster than other, and&#x2F;or require fewer code bytes to achieve. The problem can be summed up like this: given some CLIF, which VCode can we create to generate the fastest and&#x2F;or smallest machine code that carries out the desired semantics? This is called &lt;em&gt;instruction selection&lt;&#x2F;em&gt;, because we’re selecting the VCode instructions among a set of different possible instructions.&lt;&#x2F;p&gt;
&lt;p&gt;How do these IR map to each other? A given CLIF node may be lowered into 1 to N VCode instructions. A given VCode instruction may lead to the code generation of 1 to M machine instructions. There are no rules governing the maximum of entities mapped. For instance, the integer addition CLIF opcode &lt;code&gt;iadd&lt;&#x2F;code&gt; on 64-bits inputs maps to a single VCode instruction on aarch64. The VCode instruction then causes a single code instruction to be generated.&lt;&#x2F;p&gt;
&lt;p&gt;Other CLIF opcodes may generate more than a single machine instruction eventually. Consider the CLIF opcode for signed integer division &lt;code&gt;idiv&lt;&#x2F;code&gt;. Its semantics define that it traps for zero inputs and in case of integer overflow&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. On aarch64, this is lowered into:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;one VCode instruction that checks if the input is zero and trap otherwise&lt;&#x2F;li&gt;
&lt;li&gt;two VCode instructions for comparing the input values against the minimal integer value and -1&lt;&#x2F;li&gt;
&lt;li&gt;one VCode instruction to trap if the two input values match what we checked against&lt;&#x2F;li&gt;
&lt;li&gt;and one VCode instruction that does the actual division operation.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Each of these VCode instruction then generates one or more machine code instructions, resulting in a bit of a longer sequence.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s look at the lowering of &lt;code&gt;iadd&lt;&#x2F;code&gt; on aarch64 (in &lt;code&gt;cranelift&#x2F;codegen&#x2F;src&#x2F;isa&#x2F;aarch64&#x2F;lower_inst.rs&lt;&#x2F;code&gt;), edited and simplified for clarity. I’ve added comments in the code, explaining what each line does:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Opcode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Iadd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Get the destination register.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; get_output_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; outputs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;]).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;only_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Get the controlling type of the addition (32-bits int or 64-bits int or&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; int vector, etc.).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; ty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; ty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Force one of the inputs into a register, not applying any signed- or&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; zero-extension.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; put_input_in_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; inputs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;],&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; NarrowValueMode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Try to see if we can encode the second operand as an immediate on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; 12-bits, maybe by negating it;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Otherwise, put it into a register.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; negated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;) =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; put_input_in_rse_imm12_maybe_negated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        inputs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;],&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;        ty_bits&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;        NarrowValueMode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    );&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Select the ALU subopcode, based on possible negation and controlling&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; type.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; alu_op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; if !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;negated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;        choose_32_64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; ALUOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Add32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; ALUOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Add64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;        choose_32_64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; ALUOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Sub32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; ALUOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Sub64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Emit the VCode instruction in the VCode stream.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;emit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;alu_inst_imm12&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;alu_op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In fact, the &lt;code&gt;alu_inst_imm12&lt;&#x2F;code&gt; wrapper can create one VCode instruction among a set of possible ones (since we’re trying to select &lt;em&gt;the best one&lt;&#x2F;em&gt;). For the sake of simplicity, we’ll assume that &lt;code&gt;AluRRR&lt;&#x2F;code&gt; is going to be generated, i.e. the selected instruction is the one using only register encodings for the input values.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;register-allocation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#register-allocation&quot; aria-label=&quot;Anchor link for: register-allocation&quot;&gt;🔗&lt;&#x2F;a&gt;Register allocation&lt;&#x2F;h2&gt;
&lt;div class=&quot;mermaid&quot;&gt;
graph TD
    vcode_vreg[VCode with virtual registers]
    regalloc([Register allocation])
    vcode_rreg[VCode with real registers]
    codegen([Code generation])
    machine_code(Machine code)
    vcode_vreg --&gt; regalloc --&gt; vcode_rreg --&gt; codegen --&gt; machine_code
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;vcode-registers-and-stack-slots&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vcode-registers-and-stack-slots&quot; aria-label=&quot;Anchor link for: vcode-registers-and-stack-slots&quot;&gt;🔗&lt;&#x2F;a&gt;VCode, registers and stack slots&lt;&#x2F;h3&gt;
&lt;p&gt;Hey, ever wondered what the V in VCode meant? Back to the drawing board. While a program may reference a theoretically unlimited number of instructions, each referencing a theoretically unlimited number of values as inputs and outputs, the physical machine only has a fixed set of containers for those values:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;either they must live in machine &lt;strong&gt;registers&lt;&#x2F;strong&gt;: very fast to access in the CPU, take some CPU real estate, thus are costly, so there are usually few of them.&lt;&#x2F;li&gt;
&lt;li&gt;or they must live in the process’ &lt;strong&gt;stack memory&lt;&#x2F;strong&gt;: it’s slower to access, but we can have virtually any amount of stack &lt;em&gt;slots&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;asm&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;mov&lt;&#x2F;span&gt;&lt;span&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;edi&lt;&#x2F;span&gt;&lt;span&gt;,-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;0x4&lt;&#x2F;span&gt;&lt;span&gt;(%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;rbp&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;mov&lt;&#x2F;span&gt;&lt;span&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;rsi&lt;&#x2F;span&gt;&lt;span&gt;,-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;0x10&lt;&#x2F;span&gt;&lt;span&gt;(%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;rbp&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;mov&lt;&#x2F;span&gt;&lt;span&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;0x4&lt;&#x2F;span&gt;&lt;span&gt;(%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;rbp&lt;&#x2F;span&gt;&lt;span&gt;),%&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;eax&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;In this example of x86 machine code, %edi, %rsi, %rbp, %eax are all registers; stack slots are memory addresses computed as the frame pointer (%rbp) plus an offset value (which happens to be negative here). Note that stack slots may be referred to by the stack pointer (%rsp) in general.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;defining-the-register-allocation-problem&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#defining-the-register-allocation-problem&quot; aria-label=&quot;Anchor link for: defining-the-register-allocation-problem&quot;&gt;🔗&lt;&#x2F;a&gt;Defining the register allocation problem&lt;&#x2F;h3&gt;
&lt;p&gt;The problem of mapping the IR values (in VCode these are the &lt;code&gt;Reg&lt;&#x2F;code&gt;) to machine “containers” is called &lt;strong&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Register_allocation&quot;&gt;register allocation&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; (aka regalloc). Inputs to register allocation can be as numerous as we want them, and map to “virtual” values, hence we call them &lt;em&gt;virtual registers&lt;&#x2F;em&gt;. And… that’s where the V from VCode comes from: the instructions in VCode reference values that are &lt;em&gt;virtual&lt;&#x2F;em&gt; registers before register allocation, so we say the code is in &lt;em&gt;virtualized&lt;&#x2F;em&gt; register form. The output of register allocation is a set of new instructions, where the virtual registers have been replaced by &lt;em&gt;real registers&lt;&#x2F;em&gt; (the physical ones, limited in quantity) or stack slots references (and other additional metadata).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; Before register allocation, with unlimited virtual registers:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v2 = v0 + v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v3 = v2 * 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v4 = v2 + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v5 = v4 + v3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;return v5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; One possible register allocation, on a machine that has 2 registers %r0, %r1:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r0 = %r0 + %r1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r1 = %r0 * 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r0 = %r0 + 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r1 = %r0 + %r1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;return %r1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When all is well, the virtual registers don’t conceptually &lt;em&gt;live&lt;&#x2F;em&gt; at the same time, and they can be put into physical registers. Issues arise when there’s not enough physical registers to contain all the virtual registers that live at the same time, which is the case for… a very large majority of programs. Then, register allocation must decide which registers continue to live in registers at a given program point, and which should be &lt;strong&gt;spilled&lt;&#x2F;strong&gt; into a stack slot, effectively &lt;em&gt;storing&lt;&#x2F;em&gt; them onto the stack for later use. This later reuse will imply to &lt;strong&gt;reload&lt;&#x2F;strong&gt; them from the stack slot, using a &lt;em&gt;load&lt;&#x2F;em&gt; machine instruction. The complexity resides in choosing which registers should be spilled, at which program point they should be spilled, and at which program points we should reload them, if we need to do so. Making good choices there will have a large impact on the speed of the generated code, since memory accesses to the stack imply an additional runtime cost. For instance, a variable that’s frequently used in a hot loop should live in a register for the whole loop’s lifetime, and not be spilled&#x2F;reloaded in the middle of the loop.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; Before register allocation, with unlimited virtual registers:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v2 = v0 + v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v3 = v0 + v2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v4 = v3 + v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;return v4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; One possible register allocation, on a machine that has 2 registers %r0, %r1.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; We need to spill one value, because there&amp;#39;s a point where 3 values are live at the same time!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;spill %r1 --&amp;gt; stack_slot(0)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r1 = %r0 + %r1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r1 = %r0 + %r1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;reload stack_slot(0) --&amp;gt; %r0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r1 = %r1 + %r0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;return %r1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And, since we like to have our cake and eat it too, the register allocator itself should be &lt;em&gt;fast&lt;&#x2F;em&gt;: it should not take an unbounded amount of time to make these allocation decisions. Register allocation has the good taste to be a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;NP-completeness&quot;&gt;NP-complete&lt;&#x2F;a&gt; problem. Concretely, this means that implementations cannot find the &lt;em&gt;best&lt;&#x2F;em&gt; solutions given arbitrary inputs, but they’ll estimate &lt;em&gt;good&lt;&#x2F;em&gt; solutions based on heuristics, in worst-case quadratic time over the size of the input. All of this makes it so that register allocation has its own whole research field, and has been extensively studied for some time now. It is a fascinating problem.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;register-allocation-in-cranelift&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#register-allocation-in-cranelift&quot; aria-label=&quot;Anchor link for: register-allocation-in-cranelift&quot;&gt;🔗&lt;&#x2F;a&gt;Register allocation in Cranelift&lt;&#x2F;h3&gt;
&lt;p&gt;Back to Cranelift. The register allocation contract is that if a value &lt;em&gt;must&lt;&#x2F;em&gt; live in a real register at a given program point, then it &lt;em&gt;does&lt;&#x2F;em&gt; live where it should (unless register allocation is impossible). At the start of code generation for a VCode instruction, we are guaranteed that the input values live in real registers, and that the output real register is available before the next VCode instruction.&lt;&#x2F;p&gt;
&lt;p&gt;You might have noticed that the VCode instructions only refer to registers, and not stack slots. But where are the stack slots, then? The trick is that the stack slots are &lt;em&gt;invisible&lt;&#x2F;em&gt; to VCode. Register allocation may create an arbitrary number of spills, reloads, and register moves&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-5-1&quot;&gt;&lt;a href=&quot;#fn-5&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; around VCode instructions, to ensure that their register allocation constraints are met. This is why the output of register allocation is a new list of instructions, that includes not only the initial instructions filled with the actual registers, but also additional spill, reload and move (VCode) instructions added by regalloc.&lt;&#x2F;p&gt;
&lt;p&gt;As said before, this problem is so sufficiently complex, involved and independent from the rest of the code (assuming the right set of interfaces!) that its code lives in a separate crate, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bytecodealliance&#x2F;regalloc.rs&quot;&gt;&lt;code&gt;regalloc.rs&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, with its own fuzzing and testing infrastructure. I hope to shed some light on it at some point too.&lt;&#x2F;p&gt;
&lt;p&gt;What’s interesting to us today is the register allocation &lt;em&gt;constraints&lt;&#x2F;em&gt;. Consider the aarch64 integer add instruction &lt;code&gt;add rd, rn, rm&lt;&#x2F;code&gt;: &lt;code&gt;rd&lt;&#x2F;code&gt; is the output virtual register that’s written to, while &lt;code&gt;rn&lt;&#x2F;code&gt; and &lt;code&gt;rm&lt;&#x2F;code&gt; are the inputs, thus read from. We need to inform the register allocation algorithm about these constraints. In regalloc jargon, “read to” is known as &lt;em&gt;used&lt;&#x2F;em&gt;, while “written to” is known as &lt;em&gt;defined&lt;&#x2F;em&gt;. Here, the aarch64 VCode instruction &lt;code&gt;AluRRR&lt;&#x2F;code&gt; does &lt;em&gt;use&lt;&#x2F;em&gt; &lt;code&gt;rn&lt;&#x2F;code&gt; and &lt;code&gt;rm&lt;&#x2F;code&gt;, and it &lt;em&gt;def&lt;&#x2F;em&gt;ines &lt;code&gt;rd&lt;&#x2F;code&gt;. This usage information is &lt;em&gt;collected&lt;&#x2F;em&gt; in the &lt;code&gt;aarch64_get_regs&lt;&#x2F;code&gt; function (&lt;code&gt;cranelift&#x2F;codegen&#x2F;src&#x2F;isa&#x2F;aarch64&#x2F;inst&#x2F;mod.rs&lt;&#x2F;code&gt;):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; aarch64_get_regs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; collector&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; RegUsageCollector&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    match&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;        &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;AluRRR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;, .. } =&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            collector&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;add_def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            collector&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;add_use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            collector&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;add_use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; etc.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, after register allocation has assigned the physical registers, we need to instruct it how to replace virtual register mentions by physical register mentions. This is done in the &lt;code&gt;aarch64_map_regs&lt;&#x2F;code&gt; function (same file as above):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; aarch64_map_regs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;RUM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; RegUsageMapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; mapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;RUM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    match&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;        &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;AluRRR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;            ref&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;            ref&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;            ref&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;            ..&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;        } =&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;            map_def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;mapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;            map_use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;mapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;            map_use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;mapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; etc.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note this is reflecting quite precisely what the usage collector did: we’re replacing the virtual register mention for the defined register &lt;code&gt;rd&lt;&#x2F;code&gt; with the information (which real register) provided by the &lt;code&gt;RegUsageMapper&lt;&#x2F;code&gt;. These two functions must stay in sync, otherwise here be dragons! (and bugs very hard to debug!)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;register-allocation-on-x86&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#register-allocation-on-x86&quot; aria-label=&quot;Anchor link for: register-allocation-on-x86&quot;&gt;🔗&lt;&#x2F;a&gt;Register allocation on x86&lt;&#x2F;h3&gt;
&lt;p&gt;On Intel’s x86, register allocation may be a bit trickier: in some cases, the lowering needs to be carefully written so it satisfies some register allocation constraints that are very specific to this architecture. In particular, x86 has &lt;em&gt;fixed register constraints&lt;&#x2F;em&gt; as well as &lt;em&gt;tied operands&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;For this specific part, we’ll look at the integer shift-left instruction, which is equivalent to C’s &lt;code&gt;x &amp;lt;&amp;lt; y&lt;&#x2F;code&gt;. Why this particular instruction? It exhibits both properties that we’re interested in studying here. The lowering of &lt;code&gt;iadd&lt;&#x2F;code&gt; is similar, albeit slightly simpler, as it &lt;em&gt;only&lt;&#x2F;em&gt; involves tied operands.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;fixed-register-constraints&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fixed-register-constraints&quot; aria-label=&quot;Anchor link for: fixed-register-constraints&quot;&gt;🔗&lt;&#x2F;a&gt;Fixed register constraints&lt;&#x2F;h4&gt;
&lt;p&gt;On the one hand, some instructions expect their inputs to be in &lt;em&gt;fixed&lt;&#x2F;em&gt; registers, that is, specific registers arbitrarily predefined by the architecture manual. For the example of the shift instruction, if the count is not statically known at compile time (it’s not a shift by a constant value), then the amount by which we’re shifting must be in the &lt;code&gt;rcx&lt;&#x2F;code&gt; register&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-8-1&quot;&gt;&lt;a href=&quot;#fn-8&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now, how do we make sure that the input value actually is in &lt;code&gt;rcx&lt;&#x2F;code&gt;? We can mark &lt;code&gt;rcx&lt;&#x2F;code&gt; as used in the &lt;code&gt;get_regs&lt;&#x2F;code&gt; function so regalloc knows about this, but nothing ensures that the input &lt;em&gt;resides&lt;&#x2F;em&gt; in it at the beginning of the instruction. To resolve this, we’ll introduce a &lt;strong&gt;move instruction&lt;&#x2F;strong&gt; during lowering, that is going to copy the input value into &lt;code&gt;rcx&lt;&#x2F;code&gt;. Then we’re sure it lives there, and register allocation knows it’s used: we’re good to go!&lt;&#x2F;p&gt;
&lt;p&gt;In a nutshell, this shows how lowering and register allocation play together:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;during lowering, we introduce a move from a dynamic shift input value to &lt;code&gt;rcx&lt;&#x2F;code&gt; before the actual shift&lt;&#x2F;li&gt;
&lt;li&gt;in the register usage function, we mark &lt;code&gt;rcx&lt;&#x2F;code&gt; as used&lt;&#x2F;li&gt;
&lt;li&gt;(nothing to do in the register mapping function: &lt;code&gt;rcx&lt;&#x2F;code&gt; is a real register already)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;tied-operands&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tied-operands&quot; aria-label=&quot;Anchor link for: tied-operands&quot;&gt;🔗&lt;&#x2F;a&gt;Tied operands&lt;&#x2F;h4&gt;
&lt;p&gt;On the other hand, some instructions have operands that are both read and written at the same time: we call them &lt;em&gt;modified&lt;&#x2F;em&gt; in Cranelift and regalloc.rs, but they’re also known as &lt;em&gt;tied operands&lt;&#x2F;em&gt; in the compiler literature. It’s not just that there’s a register that must be read, and a register that must be written to: they &lt;em&gt;must&lt;&#x2F;em&gt; be the same register. How do we model this, then?&lt;&#x2F;p&gt;
&lt;p&gt;Consider a naive solution. We take the input virtual register, and decide it’s allocated to the same register as the output (modified) register. Unfortunately, if the chosen virtual register was going to be reused by another later VCode instruction, then its value would be overwritten (clobbered) by the current instruction. This would result in incorrect code being generated, so this is not acceptable. In general we can’t clobber the value that was in an input value during lowering, because that’s the role of regalloc to make this kind of decisions.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; Before register allocation, with virtual registers:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v2 = v0 + v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v3 = v0 + 42&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; After register allocation, on a machine with two registers %r0 and %r1:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;&#x2F; assign v0 to %r0, v1 to %r1, v2 to %r0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;%r0 += v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;... = %r0 + 42 &#x2F;&#x2F; ohnoes! the value in %r0 is v2, not v0 anymore!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The right solution is, again, to &lt;em&gt;copy&lt;&#x2F;em&gt; this input virtual register into the output virtual register, right before the instruction. This way, we can still reuse the untouched input register in other instructions without modifying it: only the copy is written to.&lt;&#x2F;p&gt;
&lt;p&gt;Pfew! We can now look at the entire lowering for the shift left instruction, edited and commented for clarity:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; Read the instruction operand size from the output&amp;#39;s type.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; size&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; dst_ty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;bytes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;() as&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; Put the left hand side into a virtual register.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; lhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; put_input_in_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; inputs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;]);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; Put the right hand side (shift amount) into either an immediate (if it&amp;#39;s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; statically known at compile time), or into a virtual register.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;) =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    if let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Some&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;) =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;get_input_as_source_or_const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;insn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;).&lt;&#x2F;span&gt;&lt;span&gt;constant &lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; Mask count, according to Cranelift&amp;#39;s semantics.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; cst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; = (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;) &amp;amp; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;dst_ty&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;bits&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;() as&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; u8&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Some&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;        (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Some&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;put_input_in_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; inputs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;])))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; Get the destination virtual register.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; get_output_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; outputs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;]).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;only_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;().&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; Copy the left hand side into the (modified) output operand, to satisfy the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; mod constraint.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;emit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;mov_r_r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; lhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; If the shift count is statically known: nothing particular to do. Otherwise,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; we need to put it in the RCX register.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;is_none&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; w_rcx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Writable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;from_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;regs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;rcx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;());&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Copy the shift count (which is in rhs) into RCX.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;emit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;mov_r_r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rhs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;unwrap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; w_rcx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; Generate the actual shift instruction.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ctx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;emit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;shift_r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;size&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; ShiftKind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ShiftLeft&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And this is how we tell the register usage collector about our constraints:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ShiftR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; num_bits&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;, .. } =&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; num_bits&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;is_none&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; if the shift count is dynamic, mark RCX as used.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        collector&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;add_use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;regs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;rcx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;());&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; In all the cases, the destination operand is modified.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    collector&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;add_mod&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Only the modified register needs to be mapped to its allocated physical register:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;ShiftR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; { ref&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt; mut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;, .. } =&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;    map_mod&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;mapper&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; dst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;virtual-registers-copies-and-performance&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#virtual-registers-copies-and-performance&quot; aria-label=&quot;Anchor link for: virtual-registers-copies-and-performance&quot;&gt;🔗&lt;&#x2F;a&gt;Virtual registers copies and performance&lt;&#x2F;h3&gt;
&lt;p&gt;Do these virtual register copies sound costly to you? In theory, they could lead to the code generation of a move instructions, increasing the size of the code generated and causing a small runtime cost. In practice,
register allocation, through its interface, knows how to identify move instructions, their source and their destination. By analyzing them, it can see when a source isn’t used after a given move instruction, and thus allocate the same register for the source and the destination of the move. Then, when Cranelift generates the code, it will avoid generating a move from a physical register to the same one&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-7-1&quot;&gt;&lt;a href=&quot;#fn-7&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. As a matter of fact, creating a VCode copy doesn’t necessarily mean that it will generate a machine code move instruction later: it is present just in case regalloc &lt;em&gt;needs&lt;&#x2F;em&gt; it, but it can be avoided when it’s spurious.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;code-generation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#code-generation&quot; aria-label=&quot;Anchor link for: code-generation&quot;&gt;🔗&lt;&#x2F;a&gt;Code generation&lt;&#x2F;h2&gt;
&lt;p&gt;Oh my, we’re getting closer to actually being able to run the code! Once register allocation has run, we can generate the actual machine code for the VCode instructions. Cool kids call this step of the pipeline &lt;em&gt;codegen&lt;&#x2F;em&gt;, for code generation. This is the part where we decipher the architecture manuals provided by the CPU vendors, and generate the raw machine bytes for our machine instructions. In Cranelift, this means filling a code buffer (there’s a &lt;code&gt;MachBuffer&lt;&#x2F;code&gt; sink interface for this!), returned along some internal relocations&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-6-1&quot;&gt;&lt;a href=&quot;#fn-6&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and additional metadata. Let’s see what happens for our integer addition, when the times come to generate the code for its VCode equivalent &lt;code&gt;AluRRR&lt;&#x2F;code&gt; on &lt;code&gt;aarch64&lt;&#x2F;code&gt; (in &lt;code&gt;cranelift&#x2F;codegen&#x2F;src&#x2F;isa&#x2F;aarch64&#x2F;inst&#x2F;emit.rs&lt;&#x2F;code&gt;):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; We match on the VCode&amp;#39;s identity here:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Inst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;AluRRR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; alu_op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; } =&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; First select the top 11 bits based on the ALU subopcode.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; top11&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; match&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; alu_op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        ALUOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Add32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 0b00001011_000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        ALUOp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Add64&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 0b10001011_000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; etc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Then decide the bits 10 to 15, based on the ALU subopcode as well.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; bit15_10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; match&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; alu_op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        &#x2F;&#x2F; other cases&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 0b000000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; Then use an helper and pass forward the allocated physical registers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; values.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    sink&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;put4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;enc_arith_rrr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;top11&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; bit15_10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And what’s this &lt;code&gt;enc_arith_rrr&lt;&#x2F;code&gt; doing, then?&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; enc_arith_rrr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;bits_31_21&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; u32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; bits_15_10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; u32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Writable&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;Reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;) -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; u32&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;bits_31_21&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 21&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;bits_15_10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; machreg_to_gpr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;rd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;to_reg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;machreg_to_gpr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;rn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;machreg_to_gpr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 16&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Encoding the instruction parts (operands, register mentions) is a lot of bit twiddling and fun. We do so for each VCode instruction, until we’ve generated the whole function’s body. If you remember correctly, at this point register allocation may have added some spills&#x2F;reloads&#x2F;move instructions. From the codegen’s point of view, these are just regular instructions with precomputed operands (either real registers, or memory operands involving the stack pointer), so they’re not treated particularly and they’re just generated the same way other VCode instructions are.&lt;&#x2F;p&gt;
&lt;p&gt;More work is done by the codegen backend then, to optimize blocks placement, compute final branch offsets, etc. If you’re interested by this, I strongly encourage you to go read &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cfallin.org&#x2F;blog&#x2F;2021&#x2F;01&#x2F;22&#x2F;cranelift-isel-2&#x2F;&quot;&gt;this blog post&lt;&#x2F;a&gt; by Chris Fallin. After this, we’re finally done: we’ve produced a code buffer, as well as external relocations (to other functions, memory addresses, etc.) for a single function. The code generator’s task is complete: the final steps consist in linking and, optionally, producing an executable binary.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mission-accomplished&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mission-accomplished&quot; aria-label=&quot;Anchor link for: mission-accomplished&quot;&gt;🔗&lt;&#x2F;a&gt;Mission accomplished!&lt;&#x2F;h2&gt;
&lt;p&gt;So, we’re done for today! Thanks for reading this far, hope it has been a useful and pleasant read to you! Feel free to reach out to me on the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitterz&lt;&#x2F;a&gt; if you have additional remarks&#x2F;questions, and to go contribute on &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bytecodealliance&#x2F;wasmtime&quot;&gt;Wasmtime&#x2F;Cranelift&lt;&#x2F;a&gt; if this sort of things is interesting to you 😇. Until next time, take care of yourselves!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cfallin.org&quot;&gt;Chris Fallin&lt;&#x2F;a&gt; for reading and suggesting improvements to this blog post.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;Really, Rust &lt;em&gt;is&lt;&#x2F;em&gt; the DSL. It was Python code before, that had the advantage to be faster to update. Yet it was doing a lot of magic behind the curtain, which wasn’t very friendly for new people trying to learn and use Cranelift. Despite a statically typed language helping for exploration through tooling, this meta-language is to partially disappear in the long run, see Chris’ &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cfallin.org&#x2F;blog&#x2F;2020&#x2F;09&#x2F;18&#x2F;cranelift-isel-1&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt; on this topic. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-4&quot;&gt;
&lt;p&gt;Aarch64 connoisseurs may notice that there are other ways to encode an addition. Say, if one of the input operands was the result of a bit shift instruction by an immediate value, then it’s possible to &lt;em&gt;embed&lt;&#x2F;em&gt; the shift within the add, so we end up with fewer machine instructions (and lower the register pressure). This other possible encoding is sufficiently different in terms of register allocation and code generation that it justifies having its own VCode instruction. &lt;code&gt;AluRRR&lt;&#x2F;code&gt; is simpler in the sense that it’s only concerned with register inputs and outputs, thus a perfect example for this post. &lt;a href=&quot;#fr-4-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;What’s an integer overflow for signed integer division? Consider an integer value represented on &lt;code&gt;N&lt;&#x2F;code&gt; bits. If you try to divide the smallest integer value &lt;code&gt;-2**N&lt;&#x2F;code&gt; by &lt;code&gt;-1&lt;&#x2F;code&gt;, it should return &lt;code&gt;2**N&lt;&#x2F;code&gt;, but this is out of range, since the biggest signed integer value we can represent on &lt;code&gt;N&lt;&#x2F;code&gt; bits is &lt;code&gt;(2**N) - 1&lt;&#x2F;code&gt;! So this will overflow and be set to &lt;code&gt;-2**N&lt;&#x2F;code&gt;, which is the initial value, but not the correct result. Good luck debugging this without a software trap! &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-5&quot;&gt;
&lt;p&gt;Register moves may be introduced because a successor block (in the control flow graph) expects a given virtual register to live in a particular real register, or because a particular instruction requires a virtual register to be allocated to a &lt;em&gt;fixed&lt;&#x2F;em&gt; real register that’s busy: regalloc can then temporarily divert the busy register into another unused register. &lt;a href=&quot;#fr-5-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-8&quot;&gt;
&lt;p&gt;The &lt;code&gt;c&lt;&#x2F;code&gt; in &lt;code&gt;rcx&lt;&#x2F;code&gt; actually stands for &lt;code&gt;count&lt;&#x2F;code&gt;; this is a property inherited from former CPU designs. &lt;a href=&quot;#fr-8-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-7&quot;&gt;
&lt;p&gt;Unless this move carries sign- or zero-extending semantics, which is the case for e.g. x86’s 32-bits &lt;code&gt;mov&lt;&#x2F;code&gt; instructions on a 64-bits architecture. &lt;a href=&quot;#fr-7-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-6&quot;&gt;
&lt;p&gt;Relocations are placeholders for information we don’t have &lt;em&gt;yet&lt;&#x2F;em&gt; access to. For instance, when we’re generating jump instructions, the jump targets offsets are not determined yet. So we record where the jump instruction is in the code stream, as well as which control flow block it should jump into, so we can &lt;em&gt;patch it&lt;&#x2F;em&gt; later when the final offsets are known: that’s the content of our relocation. &lt;a href=&quot;#fr-6-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Botzilla, a multi-purpose Matrix bot tuned for Mozilla</title>
        <published>2020-11-12T18:49:42+00:00</published>
        <updated>2020-11-12T18:49:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/botzilla/"/>
        <id>https://bouvier.cc/tech/botzilla/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/botzilla/">&lt;p&gt;In this post I reflect on my personal history of writing chat bots, and then
present a panel of features that the bot has, some user-facing ones, some
others that embody what I esteem to be a sane, well-behaved Matrix bot.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Over the last year, Mozilla has decided to shut down the IRC network and
replace it with a more modern platform. To my greatest delight, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;exple.tive.org&#x2F;blarg&#x2F;2019&#x2F;12&#x2F;19&#x2F;over-the-line&#x2F;&quot;&gt;the Matrix
ecosystem has been
selected&lt;&#x2F;a&gt; among all the
possible replacements. For those who might not know Matrix, it’s a modern,
decentralized protocol, using plain HTTP JSON-formatted endpoints,
well-documented, and it implements both features that are common in recent
messaging systems (e.g. file attachments, message edits and deletions), as well
as those needed to handle large groups (e.g. moderation tools, private rooms,
invite-only rooms).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;but-first-some-history&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#but-first-some-history&quot; aria-label=&quot;Anchor link for: but-first-some-history&quot;&gt;🔗&lt;&#x2F;a&gt;but first, some history&lt;&#x2F;h2&gt;
&lt;p&gt;Back in 2014 when I was an intern at Mozilla, I made a silly IRC JavaScript bot
that would quote the @horsejs twitter account, when asked to do so. Then a few
other useless features were added: “karma” tracking &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, being a karma
guardian angel (lowering the karma of people lowering the karma of some
predefined people), keeping track of contextless quotes from misc people…&lt;&#x2F;p&gt;
&lt;p&gt;Over time, it slowly transformed into an IRC bot &lt;em&gt;framework&lt;&#x2F;em&gt;, with &lt;em&gt;modules&lt;&#x2F;em&gt;
you could attach and configure at startup, setting which rooms the bot would
join, what should be the cooldowns for message sending (more on this later),
and so much more! Hence it was renamed &lt;em&gt;meta-bot&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;an-aside-on-the-morality-of-bots&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#an-aside-on-the-morality-of-bots&quot; aria-label=&quot;Anchor link for: an-aside-on-the-morality-of-bots&quot;&gt;🔗&lt;&#x2F;a&gt;an aside on the morality of bots&lt;&#x2F;h3&gt;
&lt;p&gt;I find making bots a fun activity, since once you’ve passed the step of
connecting and sending messages, the rest is mostly easy (&lt;em&gt;cough cough regular
expressions cough cough&lt;&#x2F;em&gt;) and creative work. And it’s unfortunately easy to be
reckless too.&lt;&#x2F;p&gt;
&lt;p&gt;At this time, I never considered the potentially bad effects of quoting text
from a random source, viz. fetching tweets from the @horsejs account. If the
source would return a message that was inconsiderate, rude, or even worse,
aggressive, then the bot would replicate this behavior. It is a real issue
because although the bot doesn’t think by itself and doesn’t &lt;em&gt;mean&lt;&#x2F;em&gt; any harm,
its programmers can do better, and they should try to avoid these issues at all
costs. A chat bot replicates the culture of the engineers who made it on one
hand, but also contributes to propagating this culture in the chat rooms it
participates in, &lt;em&gt;normalizing&lt;&#x2F;em&gt; it to the chat participants.&lt;&#x2F;p&gt;
&lt;p&gt;My bot happened to be well-behaved most of the time… until one time where it
was not. After noticing the incident and expressing my deepest apologies, I
deactivated the module and went through the whole list of modules, to make sure
none could cause any harm, in any possible way. I should have known better in
the first place! I am really not trying to signal my own virtue, since I failed
in a way that should have been predictable. I hope by writing this that other
people may reflect about the actions of their bots as well, in case they could
be misbehaving like this.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-former-fleet-of-mozilla-bots&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-former-fleet-of-mozilla-bots&quot; aria-label=&quot;Anchor link for: the-former-fleet-of-mozilla-bots&quot;&gt;🔗&lt;&#x2F;a&gt;the former fleet of mozilla bots&lt;&#x2F;h3&gt;
&lt;p&gt;There were a few other useful IRC bots (of which I wasn’t the author) hanging
out in the Mozilla IRC rooms, notably
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;globau&#x2F;firebot&quot;&gt;Firebot&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.mozilla.org&#x2F;Mrgiggles&quot;&gt;mrggigles&lt;&#x2F;a&gt;. The latter probably started as
a joke too, to enumerate puns from a list in the JavaScript channel. Then it
outgrew its responsibilities by helping with a handful of requests: who can
review this or this file in Mozilla’s source code? what’s the status of the
continuous integration trees? can this particular C++ function used in Gecko
cause a garbage collection?&lt;&#x2F;p&gt;
&lt;p&gt;When we moved over to Matrix, the bots unfortunately became outdated, since the
communication protocol (IRC) they were using was different. We could have
ported them to the Matrix protocol, but the Not-Invented-Here syndrom was
strong with this one: I’ve been making bots for a while, and I was personally
interested in the Matrix protocol and trying out the JS facilities offered by
the Matrix ecosystem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;botzilla-features&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#botzilla-features&quot; aria-label=&quot;Anchor link for: botzilla-features&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;Botzilla features&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;So I’ve decided to write &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;botzilla&quot;&gt;Botzilla&lt;&#x2F;a&gt;, a
successor in spirit to &lt;em&gt;meta-bot&lt;&#x2F;em&gt; and &lt;em&gt;mrgiggles&lt;&#x2F;em&gt;, written in TypeScript. This
is a very &lt;em&gt;unofficial&lt;&#x2F;em&gt; bot, tailored for Mozilla’s needs but probably useful in
other contexts. I’ve worked on it informally as a side-project, on my &lt;em&gt;copious&lt;&#x2F;em&gt;
spare time. Crafting tools that show useful to other people has been sufficient
a reward to motivate me to work on it, so it’s been quite fun!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;logo.png&quot; alt=&quot;Botzilla’s logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Botzilla’s logo, courtesy of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nical.github.io&#x2F;index.html&quot;&gt;Nical&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Let’s take a look at all the features that the bot offers, at this point.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;uuid-generate-unique-ids&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#uuid-generate-unique-ids&quot; aria-label=&quot;Anchor link for: uuid-generate-unique-ids&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;uuid: Generate unique IDs&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;This was a feature of Firebot, and easy enough to replicate, so this was the
test feature for the Matrix bot. When saying &lt;code&gt;!uuid&lt;&#x2F;code&gt;, the bot will
automatically generate a unique id (using uuid v4), guaranteed GMO-free and
usable in any context that would require it. This was the first module,
designed to test the framework.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;uuid.png&quot; alt=&quot;Demo of uuid&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;treestatus-inform-about-ci-tree-status&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#treestatus-inform-about-ci-tree-status&quot; aria-label=&quot;Anchor link for: treestatus-inform-about-ci-tree-status&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;treestatus: Inform about CI tree status&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Mozilla developers tend to interact a lot with the continuous integration
trees, because code is sometimes landed, sometimes backed out (sorry&#x2F;thank you
sheriffs!), sometimes merged across branches. This leads to the integration
trees being closed. Before we had the feature to automatically land patch
stacks when the trees reopened, it was useful to be able to get the open&#x2F;close
status of a tree. Asking &lt;code&gt;!treestatus&lt;&#x2F;code&gt; will answer with a list of the status of
some &lt;em&gt;common&lt;&#x2F;em&gt; trees. It is also possible to request the status of a particular
tree, e.g. for the “mozilla-central” tree, by asking &lt;code&gt;!treestatus mozilla-central&lt;&#x2F;code&gt; (or just &lt;code&gt;central&lt;&#x2F;code&gt;, as a handy shortcut).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;treestatus.png&quot; alt=&quot;Demo of treestatus&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;expand-bug-status&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#expand-bug-status&quot; aria-label=&quot;Anchor link for: expand-bug-status&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;Expand bug status&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;If you have ever interacted with Mozilla’s code, there’s chances that you’ve
used Bugzilla, and mentioned bug numbers in conversations. The bot caches any
message containing &lt;code&gt;bug XXX&lt;&#x2F;code&gt; and will respond with a link to this bug, the
nickname of the person assigned to this bug if there’s one, and the summary of
this bug, if it’s public. This is by far the most used and useful module, since
it doesn’t require a special incantation, but will react automatically to a lot
of messages written with no particular intent (see below where it’s explained
how to not be spammy, though).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;expand-bug.png&quot; alt=&quot;Demo of expand-bug&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;who-can-review-x&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#who-can-review-x&quot; aria-label=&quot;Anchor link for: who-can-review-x&quot;&gt;🔗&lt;&#x2F;a&gt;Who Can Review X?&lt;&#x2F;h3&gt;
&lt;p&gt;This was a very nice feature that mrgiggles had: ask for potential reviewers
for a particular file in the Gecko source tree and get a list of most recent
reviewers. Botzilla replicates this, when seeing the trigger: &lt;code&gt;who can review js&#x2F;src&#x2F;wasm&#x2F;WasmJS.cpp?&lt;&#x2F;code&gt;. The list of potential reviewers is extracted from
Mercurial logs, looking for the N last reviewers of this particular file.&lt;&#x2F;p&gt;
&lt;p&gt;As a bonus, there’s no need to pass the full path to the file, if the file’s
name is unique in the tree’s source code. Botzilla will trigger a search in
Searchfox, and will use the unique name in the result list, if there’s such a
unique result. The previous example thus can be shortened to &lt;code&gt;who can review WasmJS.cpp?&lt;&#x2F;code&gt; since the file’s name is unique in the whole code base.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;who-can-review.png&quot; alt=&quot;Demo of who can review&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;github-gitlab-issues-p-m-rs&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#github-gitlab-issues-p-m-rs&quot; aria-label=&quot;Anchor link for: github-gitlab-issues-p-m-rs&quot;&gt;🔗&lt;&#x2F;a&gt;{Github,Gitlab} {issues,{P,M}Rs}&lt;&#x2F;h3&gt;
&lt;p&gt;It is possible for a room administrator to “connect” a given Matrix room to a
Github repository. Later on, any mention of issues or pull requests by their
number, e.g. &lt;code&gt;#1234&lt;&#x2F;code&gt;, will make Botzilla react with the summary and a link to
the issue&#x2F;PR at stake.&lt;&#x2F;p&gt;
&lt;p&gt;This also works for Gitlab repositories, with slight differences: the
administrator has to precise what’s the root URL of the Gitlab instance (since
Gitlab can be selfhosted). Issues are caught when numbers follows a &lt;code&gt;#&lt;&#x2F;code&gt; sign,
while merge requests are caught when the numbers follow a &lt;code&gt;!&lt;&#x2F;code&gt; sign.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;gitlab.png&quot; alt=&quot;Demo of gitlab&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tweet-toot-post-on-twitter-mastodon&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tweet-toot-post-on-twitter-mastodon&quot; aria-label=&quot;Anchor link for: tweet-toot-post-on-twitter-mastodon&quot;&gt;🔗&lt;&#x2F;a&gt;!tweet&#x2F;!toot: Post on Twitter&#x2F;Mastodon&lt;&#x2F;h3&gt;
&lt;p&gt;An administrator can configure a room to tie it up to a Twitter (respectively
Mastodon) user account, using API tokens. Then, any person with an
administrative role can post messages with &lt;code&gt;!tweet something shocking for the bird site&lt;&#x2F;code&gt;(respectively &lt;code&gt;!toot something heartful for the mammoth site&lt;&#x2F;code&gt;). This
makes it possible to allow other people to post on these social networks
without the need to give them the account’s password.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, the Twitter module hasn’t ever been tested, since when I’ve
tried to create a developer account, Twitter accepted it after a few days but
then never displayed the API tokens on the interface. The support also never
answered when I asked for help. Thankfully Mastodon can be self-hosted and thus
it is easier to test. I’m happy to report that it works quite well!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;confession-and-histoire&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#confession-and-histoire&quot; aria-label=&quot;Anchor link for: confession-and-histoire&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;code&gt;confession&lt;&#x2F;code&gt; and histoire&lt;&#x2F;h3&gt;
&lt;p&gt;It is quite common in teams to set up regular standup meetings, where everyone
in the team announces what they’ve been working on in the last few days or
week. It also strikes me as important for personal recognition, including
towards management, to be able to &lt;em&gt;show off&lt;&#x2F;em&gt; (just a bit!) what you’ve
accomplished recently, and to remember this when times are harder (see also
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jvns.ca&#x2F;blog&#x2F;brag-documents&#x2F;&quot;&gt;Julia Evans’ blog post on the topic&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;There’s a Botzilla module for this. Every time someone starts a message with
&lt;code&gt;confession:&lt;&#x2F;code&gt;, then everything after the colon will be saved in a database
(…wait for it!). Then, all the confessions are displayed on the
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;robotzilla.github.io&#x2F;histoire&quot;&gt;Histoire&lt;&#x2F;a&gt; &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; website, with one
message feed per user. Note it is possible to send confessions privately to
Botzilla (that doesn’t affect the frontend though, which is open and public to
all!), or in a public channel. Public channels somehow equate to team members,
so channels also get their own pages on the frontend.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;confession.png&quot; alt=&quot;Demo of confession&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;botzilla&#x2F;histoire.png&quot; alt=&quot;Screenshot of Histoire&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now the fun&#x2F;cursed part is how all of this &lt;em&gt;works&lt;&#x2F;em&gt;. This was implemented in
&lt;em&gt;mrgiggles&lt;&#x2F;em&gt;, and I liked it a lot, since it required no kind of backend or
frontend server. How so? By (ab)using Github files as the database and Github
pages as the frontend. Sending a confession will trigger a request to a Github
endpoint to find a database file segregated by time, then it will trigger
another request to create&#x2F;modify it with the content of the confession. The
frontend then uses other requests to public Github APIs to read the confessions
before dynamically rendering those. Astute readers will notice that under a lot
of confession activity, the bot would be a bit slowed down by Github’s API use
rates. In this case, there’s some exponential backoff behavior before trying to
re-send unsaved confessions to Github. Overall it works great, and API
limitation rates have never quite been a problem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;intrinsic-features-they-re-good-bots-bront&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#intrinsic-features-they-re-good-bots-bront&quot; aria-label=&quot;Anchor link for: intrinsic-features-they-re-good-bots-bront&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;Intrinsic features: they’re good bots, bront&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In addition to all the user-facing features, the bot has a few other
interesting attributes that are more relevant to consider from a framework
point of view. Hopefully some of these ideas can be useful for other bot
authors!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;join-all-the-rooms&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#join-all-the-rooms&quot; aria-label=&quot;Anchor link for: join-all-the-rooms&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;Join All The Rooms!&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Every time the bot is invited to a channel, be it public or private, it will
join the channel, making it easy to use in general. It was implemented for free
by &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;turt2live&#x2F;matrix-js-bot-sdk&quot;&gt;the JS framework I’ve been
using&lt;&#x2F;a&gt;, and it is a
definitive improvement over the IRC version of the bot.&lt;&#x2F;p&gt;
&lt;p&gt;Sometimes Matrix rooms are upgraded to a new version of the room. The bot will
try to join the upgraded room if it can, keeping all its room settings intact
during the transition.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;thou-shalt-not-spam&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#thou-shalt-not-spam&quot; aria-label=&quot;Anchor link for: thou-shalt-not-spam&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;Thou shalt not spam&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;To avoid spamming the channel, especially for modules that are &lt;em&gt;reactions&lt;&#x2F;em&gt; to
other messages (think: bug numbers, issues&#x2F;pull requests mentions), the bot has
had to learn how to keep quiet. There are two rules triggering the quieting
behavior:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;if the bot has already reacted less than N minutes ago (where N is a
configurable amount) in the same room,&lt;&#x2F;li&gt;
&lt;li&gt;or if it has already reacted to some entity in a message, and there’s been
fewer than M messages in between the last reaction and the last message
mentioning the same entity in the same room (M is also configurable)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If any of these two criteria is met, then the bot will keep quiet and it will
not react to another similar message. The combination of these two has proven
over time to be quite solid in my experience, based on observing the bot’s
behavior and public reactions to its behavior.&lt;&#x2F;p&gt;
&lt;p&gt;Some similar mechanism is used for the &lt;em&gt;confession&lt;&#x2F;em&gt; module: on a &lt;em&gt;first&lt;&#x2F;em&gt;
confession, the bot will answer with a message saying it has seen the
confession, including a link to where it is going to be posted, and will add an
emoji “eyes” reaction to the message. Posting this long form message could be
quite spammy, if there’s a lot of confessions around the same time. Under the
same criteria, it will just react with an “eyes” emoji to other confessions.
Later on, it’ll resend the full message, once both criterias aren’t blocking it
from doing so.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;decentralized-administration-self-service&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#decentralized-administration-self-service&quot; aria-label=&quot;Anchor link for: decentralized-administration-self-service&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;Decentralized administration self-service&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;The bot can be administrated, by discussing with it using the &lt;code&gt;!admin&lt;&#x2F;code&gt; command.
This can happen in both a private conversation with it, or in public channels,
yet it is recommended to do so in private channels. To confirm that an admin
action has succeeded, it’ll use the thumbs-up emoji on the message doing the
particular action.&lt;&#x2F;p&gt;
&lt;p&gt;To have a single administrator for the bot would be quite the burden, and it is
not resilient to people switching roles, leaving the company, etc. Normally
you’d solve this by implementing your own access control lists. Fortunately,
Matrix already has a concept of &lt;em&gt;power levels&lt;&#x2F;em&gt; that assigns roles to users,
among which there are the administrator and moderator roles.&lt;&#x2F;p&gt;
&lt;p&gt;The bot will rely on this to decide to which requests it will answer. Somebody
marked as an administrator or a moderator of a room can administrate Botzilla
in this particular room, using &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;botzilla#admin&quot;&gt;the &lt;code&gt;!admin&lt;&#x2F;code&gt;
commands&lt;&#x2F;a&gt;. There’s still a
super-admin role, that must be defined in the configuration, in case things go
awry. While administrators only have power over the current room, a super-admin
can use its super-powers to change anything in any room. This decentralization
of the administrative roles makes it easy to have different settings for
different rooms, and to rely a bit less on single individuals.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;key-value-store&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#key-value-store&quot; aria-label=&quot;Anchor link for: key-value-store&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;strong&gt;Key-value store&lt;&#x2F;strong&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;In general, the bot contains a key-value store implemented in an sqlite
database, making it easy to migrate and add context that’s preserved across
restarts of the bot. This is used to store private information like user
repository information and settings for most rooms. Conceptually, each pair of
room and module has its own key-value store, so that there’s no risk of
confusion between different rooms and modules. There’s also a key-value
per-module store that’s applicable to all the rooms, to represent global
settings. If there’s some non-global (per room) settings for a room, these are
preferred over the global settings.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;self-documentation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#self-documentation&quot; aria-label=&quot;Anchor link for: self-documentation&quot;&gt;🔗&lt;&#x2F;a&gt;Self-documentation&lt;&#x2F;h3&gt;
&lt;p&gt;Each chat module is implemented as a ECMAScript module and must export an help
string along the main reaction function. This is then captured and aggregated
as part of an &lt;code&gt;!help&lt;&#x2F;code&gt; command, that can be used to request help about usage of
the bot. The main help message will display the list of all the enabled
modules, and help about a specific module may be queried with e.g. &lt;code&gt;!help uuid&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;future-work-and-conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#future-work-and-conclusion&quot; aria-label=&quot;Anchor link for: future-work-and-conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Future work and conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;If I were to start again, I’d do a few things differently:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;now that the Rust ecosystem around the Matrix platform has matured a bit, I’d
probably write this bot in Rust. Starting from JavaScript and moving to
TypeScript has helped me catch a few static issues. I’d expect moving to Rust
would help handling Matrix events faster, provide end-to-end encryption
support for free, and be quite pleasant to use in general thanks to the
awesome Rust tooling.&lt;&#x2F;li&gt;
&lt;li&gt;use a real single-page app framework for the Histoire website. Maybe? I mean
I’m a big fan of VanillaJS, but using it means re-creating your own Web
framework like thing to make it nice and productive to use.&lt;&#x2F;li&gt;
&lt;li&gt;despite being a fun hack, using Github as a backend has algorithmic
limitations, that can make the web app sluggish. In particular, a combined
feed for N users on M &lt;em&gt;eras&lt;&#x2F;em&gt; (think: periods) will trigger NxM Github API
requests. Using a plain database with a plain API would probably be simpler
at this point. This is mitigated with an in-memory cache so only the first
time all the requests happen, but crafting my own requests would be more
expressive and efficient, and allow for more features too (like displaying
the list of rooms on the start view).&lt;&#x2F;li&gt;
&lt;li&gt;provide a (better) commands parser. Regular expressions in this context are a
bit feeble and limited. Also right now each module could in theory reuse the
same command triggers as another one, etc.&lt;&#x2F;li&gt;
&lt;li&gt;implement the chat modules in WebAssembly :-) In fact, I think there’s a
whole business model which would consist in having the bot framework
including a wasm VM, and interacting with different communication platforms
(not restricted to Matrix). Developers in such a bot platform could choose
which source language to use for developing their own modules. It ought to be
possible to define a clear, restricted, WASI-like capabilities-based
interface that gets passed to each chat module. In such a sandboxed
environment, the responsibility for hosting the bot’s code is decoupled from
the responsibility of writing modules. So a company could make the platform
available, and paying users would develop the modules and host them. Imagine
&lt;code&gt;git push&lt;&#x2F;code&gt;ing your chat modules and they get compiled to wasm and deployed on
the fly. But I digress! (Please do not forget to credit me with a large $$$
envelope&#x2F;a nice piece of swag if implementing this &lt;em&gt;at least&lt;&#x2F;em&gt; multi-billion
dollars idea.)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I’d like to finish by thanking the authors of the previous Mozilla bots, namely
&lt;strong&gt;sfink&lt;&#x2F;strong&gt; and &lt;strong&gt;glob&lt;&#x2F;strong&gt;: your puppets have been incredible sources of
inspiration. Also huge thanks to the people hanging in the &lt;code&gt;matrix-bot-sdk&lt;&#x2F;code&gt;
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;!matrix-bot-sdk:t2bot.io&quot;&gt;chat room&lt;&#x2F;a&gt;, who’ve answered questions and provided
help in a few occasions.&lt;&#x2F;p&gt;
&lt;p&gt;I hope you liked this presentation of Botzilla and its features! Of course, all
the code is free and open-source, including &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;botzilla&quot;&gt;the
bot&lt;&#x2F;a&gt; as well as &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;robotzilla&#x2F;histoire&quot;&gt;the histoire
frontend&lt;&#x2F;a&gt;. At this point it is
addressing most of the needs I had, so I don’t have immediate plans to extend
it further. I’d happily take contributions, though, so feel free to chime in if
you’d like to implement anything! It’s also a breeze to run on any machine,
thanks to Docker-based deployment. Have fun with it!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Karma is an IRC idiosyncrasy, in which users rate up and down other users
using their nickname suffixed with ++ or –. Karma tracking consists in
keeping scores and displaying those. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;Histoire is the French for “history” and “story”. Inherited from Steve
Fink’s very own mrgiggles :-) &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Sérigraphie</title>
        <published>2020-11-07T00:00:00+00:00</published>
        <updated>2020-11-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/notes/serigraphie/"/>
        <id>https://bouvier.cc/notes/serigraphie/</id>
        <content type="html" xml:base="https://bouvier.cc/notes/serigraphie/">&lt;p&gt;&lt;em&gt;A small personal blog post about a day I’ve spent discovering and practicing
screen printing. Written in French mostly out of laziness and because of the
level of vocabulary precision that the domain involves. The pictures speak no
particular language though, and whole-website translation is still a thing :-)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;serigraphie&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#serigraphie&quot; aria-label=&quot;Anchor link for: serigraphie&quot;&gt;🔗&lt;&#x2F;a&gt;Sérigraphie&lt;&#x2F;h1&gt;
&lt;p&gt;J’ai eu l’occasion de participer à un atelier&#x2F;cours de sérigraphie, il y a
quelques semaines, et je propose ici un petit retour d’expérience, pour changer
des habituelles tribulations informatiques.&lt;&#x2F;p&gt;
&lt;p&gt;La sérigraphie est une méthode d’imprimerie sur moult supports (textile,
papier, panneaux signalétiques,…), qui utilise des pochoirs intercalés entre
l’encre et le support (d’après
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;S%C3%A9rigraphie&quot;&gt;Wikipedia&lt;&#x2F;a&gt;). Loin de moi
l’idée de vous détailler l’historique ou la technique de la chose ;
l’encyclopédie en ligne est là pour ça. Deux faits m’ont marqué plus que les
autres, au cours des denses explications entendues ce jour-là.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;la-loi-des-seri&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-loi-des-seri&quot; aria-label=&quot;Anchor link for: la-loi-des-seri&quot;&gt;🔗&lt;&#x2F;a&gt;La loi des &lt;em&gt;séri&lt;&#x2F;em&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Le préfixe “&lt;em&gt;séri-&lt;&#x2F;em&gt;” dans le nom &lt;em&gt;sérigraphie&lt;&#x2F;em&gt; pourrait donner l’impression que
la technique est dédiée à un travail ou une production en série, afin
d’imprimer de nombreuses fois un même motif sur de nombreux supports. Cela fait
sens : la sérigraphie est utilisée pour l’impression de motifs sur des
vêtements, donc souvent à caractère commercial et à grande échelle. C’est
d’ailleurs sur cette idée de production en masse qu’Andy Warhol base certaines
de ses oeuvres. Les Maryline, par exemple, semblent être issues d’un même
pochoir qui aura servi à imprimer à plusieurs reprises le visage iconique.&lt;&#x2F;p&gt;
&lt;p&gt;Seulement, non, pas du tout. Ce &lt;em&gt;séri&lt;&#x2F;em&gt; provient de la racine latine &lt;em&gt;sericum&lt;&#x2F;em&gt;,
qui signifie “la soie”, dont les fils étaient utilisés pour tisser les
pochoirs. Maintenant on utilise du nylon pour des raisons économiques. Le nom
original a été préféré au plus réaliste mais fantasque &lt;em&gt;nylographie&lt;&#x2F;em&gt;, on
remerciera l’industrie.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;polychromie-et-precision&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#polychromie-et-precision&quot; aria-label=&quot;Anchor link for: polychromie-et-precision&quot;&gt;🔗&lt;&#x2F;a&gt;Polychromie et précision&lt;&#x2F;h3&gt;
&lt;p&gt;Bien que les tirages de sérigraphie tendent à n’arborer que quelques couleurs
(de par mon expérience, ô peu exhaustive), il est possible de reproduire le
spectre entier à partir des couleurs de bases, donc toutes les couleurs,
théoriquement. Notre enseignante du jour nous a montré une reproduction d’une
photo en sérigraphie, qui était réellement indiscernable d’une vraie photo à
plus de 5 centimètres de distance. Pour cela, autant de pochoirs que de
couleurs de base sont utilisés, avec des zones en commun pour effectuer la
superposition. Il faut également utiliser des encres qui &lt;em&gt;peuvent&lt;&#x2F;em&gt; se
superposer, en opposition à des encres &lt;em&gt;opaques&lt;&#x2F;em&gt; qui cacheraient l’encre sur
laquelle elles ont été appliquées.&lt;&#x2F;p&gt;
&lt;p&gt;En outre, j’ai aussi été bien étonné par le niveau de précision des motifs que
l’on pouvait imprimer. Moi qui pensais que l’on ne pouvait imprimer que des
dessins grossiers, avec peu de détails ou d’enluminures, je ne pouvais pas
moins me tromper. Depuis la découverte de l’encre ultraviolette, il est
possible d’augmenter énormément la résolution des motifs qui formeront le
pochoir, donc des dessins eux-mêmes.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;l-activite-en-soi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#l-activite-en-soi&quot; aria-label=&quot;Anchor link for: l-activite-en-soi&quot;&gt;🔗&lt;&#x2F;a&gt;L’activité en soi&lt;&#x2F;h3&gt;
&lt;p&gt;À titre personnel, j’ai beaucoup apprécié cette activité, à la fois créative,
avec une dose de manipulation physique et de précision dans le geste. La
précision étant la principale source de disparités entre les novices et les
expert.e.s.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai été marqué par la quantité d’eau nécessaire pour le nettoyage des
instruments entre deux impressions via un pochoir, ou entre deux créations de
pochoirs (encore plus). Même après avoir vu comment les tee-shirts de la grande
distribution sont fabriqués, ça calme.&lt;&#x2F;p&gt;
&lt;p&gt;Quel délice aussi de retrouver le plaisir de l’artisanat, un domaine dans
lequel on peut commencer et avoir fini l’oeuvre de son travail. Pas de
maintenance sur de longues années. Pas de support. Pas satisfait, on peut
recommencer de zéro sans lourdeur. Deux tirages ne sont jamais les mêmes, et
certains signes imprimés ne laissent aucun doute sur l’unicité authentique de
chaque modèle. Un monde bien loin du développement informatique ; il est bien
aisé de comprendre celleux qui rêvent d’une reconversion romantiquement
idéalisée dans un domaine plus manuel et concret. Ou comme dirait M., on arrête
tout et on va rempailler des chaises dans le Larzac.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ma-vie-mon-oeuvre&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ma-vie-mon-oeuvre&quot; aria-label=&quot;Anchor link for: ma-vie-mon-oeuvre&quot;&gt;🔗&lt;&#x2F;a&gt;Ma vie, mon oeuvre&lt;&#x2F;h3&gt;
&lt;p&gt;Voici donc les quelques tirages que j’ai effectués.&lt;&#x2F;p&gt;
&lt;p&gt;Trois exemples de tirages papiers :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;avec un niveau de détails très elevé, monochrome&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;serigraphie&#x2F;papier-fin.jpg&quot; alt=&quot;feuilles de forêt tropicales&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;avec superpositions de motifs et couleurs&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;serigraphie&#x2F;papier-1.jpg&quot; alt=&quot;motif géométrique avec texte par dessus&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;pareillement, pour représenter une case de comic issue de Strange Planet de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nathanwpyle.art&#x2F;&quot;&gt;Nathan Pyle&lt;&#x2F;a&gt;. Notez que la texture est simulée
via le tramage (~densité) et qu’il n’y a que deux couleurs (noir et bleu) qui
ont été utilisées.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;serigraphie&#x2F;papier-2.jpg&quot; alt=&quot;imagine pleasant nonsense et alien choupinou qui dort&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ici sur sur un tote bag en coton bio (quitte à être un cliché
de sa génération, autant l’assumer jusqu’au bout). Une petite pensée aux
lecteur.ice.s designers, qui doivent recracher le trop commun Helvetica&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; par les
trous de nez.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;serigraphie&#x2F;totebag.jpg&quot; alt=&quot;un tote bag sur lequel il est écrit i like big books and i cannot lie&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pour mon &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&quot;&gt;petit projet personnel favori&lt;&#x2F;a&gt;, j’ai imprimé un
unique tirage du “logo temporaire” (temporaire depuis 6 ans, donc) sur un
tee-shirt blanc aussi âgé que le projet. Avec une belle couleur dorée, pour
rester dans un subtil bling bling. Unique au monde !&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;notes&#x2F;serigraphie&#x2F;teeshirt.jpg&quot; alt=&quot;tee shirt blanc avec logo Kresus doré&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;et-donc&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#et-donc&quot; aria-label=&quot;Anchor link for: et-donc&quot;&gt;🔗&lt;&#x2F;a&gt;Et donc&lt;&#x2F;h3&gt;
&lt;p&gt;Si jamais les employées d’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.unique-en-serie.com&#x2F;&quot;&gt;Unique en Série&lt;&#x2F;a&gt;
où j’ai suivi le cours à Lyon, sur les pentes de la Croix-Rousse (comme par
hasard !), passent par ici : merci à vous et d’avoir répondu à toutes mes
pointilleuses questions !&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, je recommande l’expérience si vous vous sentez créatif.ve.s et
que vous avez envie d’essayer une activité originale (&lt;em&gt;BILLET NON SPONSORISÉ&lt;&#x2F;em&gt;).
L’avantage de ce genre de stage est qu’on peut venir avec ses propres motifs,
moduler le temps qu’on y passe sur une durée plus ou moins longue : entre 3
heures pour le stage le plus court, jusqu’à plusieurs jours pour faire de la
belle polychromie à plusieurs motifs. Pour suivre le cours théorique puis
pratique puis faire une dizaine de tirages, il m’a fallu environ une journée
complète. Le lieu offre aussi la possibilité de revenir en libre-service après
avoir suivi un cours, ce qui est chouette pour augmenter la cadence de la
production et pousser l’exploration plus loin. Amusez-vous bien !&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;En pratique, la queue du E qui s’incline légèrement quand elle remonte me
laisse penser qu’il ne s’agit ni d’Helvetica Bold, ni d’Helvetica Book Bold,
mais d’une autre grotesque. Si jamais vous trouvez laquelle… :-) &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Improving my Github workflow</title>
        <published>2019-10-10T18:00:42+00:00</published>
        <updated>2019-10-10T18:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/github-workflow/"/>
        <id>https://bouvier.cc/tech/github-workflow/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/github-workflow/">&lt;p&gt;Since I’ve been working on a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;CraneStation&#x2F;Cranelift&quot;&gt;Github
project&lt;&#x2F;a&gt; for a while now, I
thought now would be a good time to gather ways to make it easier to work with
Github pull requests (PRs). In particular, it’s easy to drown yourself in the
incoming flow of Github emails.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;This post is for you if:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;you get lost in tracking which pull requests need attention from you, be it
either review requests or just mentions.&lt;&#x2F;li&gt;
&lt;li&gt;you would like to strike a better work-life balance when it gets to Github
notifications.&lt;&#x2F;li&gt;
&lt;li&gt;you would like to filter Github email notifications in smarter ways.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Here are a few tricks I’ve collected over the years that make it easier to deal
with a few things, focusing on Github notifications and emails, since they were
the largest issue for me. This is not an exhaustive list of all the nice
features Github has, or all the WebExtensions that could help with Github: it
is a few things that work for me and are worth sharing. Note that I go from the
most mundane to the more specific advices here.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;notifications-dashboard&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#notifications-dashboard&quot; aria-label=&quot;Anchor link for: notifications-dashboard&quot;&gt;🔗&lt;&#x2F;a&gt;Notifications dashboard&lt;&#x2F;h3&gt;
&lt;p&gt;If you’re working on several projects, Github can end up sending you too many
email notifications.&lt;&#x2F;p&gt;
&lt;p&gt;It’s possible to disable some kinds of notifications entirely &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;settings&#x2F;notifications&quot;&gt;in the
settings&lt;&#x2F;a&gt;, but that’s too radical
for my needs.&lt;&#x2F;p&gt;
&lt;p&gt;However, Github has a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;notifications&quot;&gt;notification
dashboard&lt;&#x2F;a&gt; that displays all the activity
related to repositories you’re watching or issues&#x2F;pull-requests you’re involved
in. It’s easy to dismiss all the notifications of all projects at once, or per
project. There’s a tab on the left that allows to select more precisely your
level of involvement in the issue: did you participate in it? You can also save
some notifications for later, so they’re not deleted once you’ve clicked them;
they’ll appear under the “Saved for later” tab — I just discovered this!&lt;&#x2F;p&gt;
&lt;p&gt;Note that Github may also send these notifications by email, if you’ve decided
to do so. In this case, I’d strongly recommend allowing the downloads of images
in Github emails. Despite the bad effect on your privacy this might have by
allowing user tracking, it will also synchronize the notifications’ read state,
which is nice.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;github-workflow&#x2F;github-notification-dashboard.png&quot; alt=&quot;Notification dashboard count&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;See how I am totally in control of my notifications? Truth is, I don’t need
notifications in general, because I’m usually more interested in reviews I need
to receive and give.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pull-requests-dashboard&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#pull-requests-dashboard&quot; aria-label=&quot;Anchor link for: pull-requests-dashboard&quot;&gt;🔗&lt;&#x2F;a&gt;Pull requests dashboard&lt;&#x2F;h3&gt;
&lt;p&gt;Github allows to assign a reviewer to a pull request. At Mozilla, we
require a formal review for each change in the code base, unless it’s really
not meaningful (like, removing trailing whitespaces). Even documentation and
tests changes may require a review, depending on the rules of the code module
you’re working on.&lt;&#x2F;p&gt;
&lt;p&gt;It is very common that a pull request is received with requests for additional
changes. In this case, it is important to explicitly &lt;strong&gt;re-request a review&lt;&#x2F;strong&gt;,
otherwise this breaks all the review tracking Github proposes.&lt;&#x2F;p&gt;
&lt;p&gt;Now Github has two interesting pages for this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;a list of all the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pulls&quot;&gt;pull requests you have created&lt;&#x2F;a&gt;
and that aren’t closed, so you can assign reviewers and follow PR’s progress
over time;&lt;&#x2F;li&gt;
&lt;li&gt;a list of all the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pulls&#x2F;review-requested&quot;&gt;pull requests you have been assigned to as a
reviewer&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;navigating-files-quicker-addon&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#navigating-files-quicker-addon&quot; aria-label=&quot;Anchor link for: navigating-files-quicker-addon&quot;&gt;🔗&lt;&#x2F;a&gt;Navigating files quicker (addon)&lt;&#x2F;h3&gt;
&lt;p&gt;When I know my way around a project, I’ll frequently need to see the content of
a particular file or directory, that might be a few directories deep. On
Github, this means going to the files view, clicking once per directory (at
most), and finding the file I want.&lt;&#x2F;p&gt;
&lt;p&gt;The pull request view doesn’t show the directory hierarchy and which files of
which directory have been touched, which is a light inconvenience too.&lt;&#x2F;p&gt;
&lt;p&gt;Good news, everyone! There is one WebExtension called
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.octotree.io&#x2F;&quot;&gt;Octotree&lt;&#x2F;a&gt; that adds a directory view within a panel
to the left of Github’s UI. By default, it’s folded and doesn’t take much
space; you need to hover it with the mouse to make it appear. On pull requests,
it will show files that have been modified with the diff summary for each file.
Note the website shows features from the PRO version, but there’s a free
version that addresses the needs detailed above.&lt;&#x2F;p&gt;
&lt;p&gt;This is an example of the Octotree panel on our project’s repository:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;github-workflow&#x2F;github-octotree.png&quot; alt=&quot;Octotree example&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;To be honest, I haven’t investigated using the search bar, which could be quite
handy for this too, especially thanks to keyboard shortcuts.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dealing-with-work-and-personal-projects&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dealing-with-work-and-personal-projects&quot; aria-label=&quot;Anchor link for: dealing-with-work-and-personal-projects&quot;&gt;🔗&lt;&#x2F;a&gt;Dealing with work and personal projects&lt;&#x2F;h3&gt;
&lt;p&gt;If you’re using Github for personal and work related projects, you might have
been bothered by work emails coming into your personal mailbox. That has
happened to me in the past, causing some unnecessary mental load over the
weekend and unnecessarily breaking the state of relaxation.&lt;&#x2F;p&gt;
&lt;p&gt;Fortunately, Github allows you to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;settings&#x2F;notifications#organization_routing&quot;&gt;redirect emails from a particular Github
Organization to a specific email
address&lt;&#x2F;a&gt;. Of
course, this only works when the repository is owned by an organization and
you’re part of this organization.&lt;&#x2F;p&gt;
&lt;p&gt;I’m lucky to work on such projects at the moment. It’s not a silver bullet
though, because some projects are sometimes owned by personal accounts, making
this trick useless. As far as I know, there are no good solutions in this case.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;email-filters&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#email-filters&quot; aria-label=&quot;Anchor link for: email-filters&quot;&gt;🔗&lt;&#x2F;a&gt;Email filters&lt;&#x2F;h3&gt;
&lt;p&gt;The biggest remaining offender certainly is Github emails, in general.
Fortunately, Github has made it easy to filter them. I’ll mention examples in
the Gmail email client, since that’s what we’re using at work, but these apply
to any other modern email client too.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;filter-by-project&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#filter-by-project&quot; aria-label=&quot;Anchor link for: filter-by-project&quot;&gt;🔗&lt;&#x2F;a&gt;Filter by project&lt;&#x2F;h4&gt;
&lt;p&gt;Each email coming from a specific project comes with a mailing &lt;code&gt;list-id&lt;&#x2F;code&gt;, which
is a specific header that some email clients know how to interpret. For
instance, in Gmail, when you click on the small arrow next to the list of
recipients, you’ll see many details about the current email, including, if
there’s one, the “mailing-list” id, and a link to automatically create a filter
for this mailing-list. That allows you to create a particular directory&#x2F;tag in
which the filter can automatically put all the emails with this id.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;filter-by-reason&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#filter-by-reason&quot; aria-label=&quot;Anchor link for: filter-by-reason&quot;&gt;🔗&lt;&#x2F;a&gt;Filter by reason&lt;&#x2F;h4&gt;
&lt;p&gt;In addition to filtering by project (and this is where Gmail tags &#x2F;
Thunderbird’s &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;support.mozilla.org&#x2F;en-US&#x2F;kb&#x2F;using-saved-searches&quot;&gt;saved
searches&lt;&#x2F;a&gt; truly
shine), it’s also possible to infer more information from the Github email
notifications, by looking at the list of recipients or custom email headers.&lt;&#x2F;p&gt;
&lt;p&gt;Indeed, when there’s a specific reason why an email was sent to you, Github
will add a (fake) recipient in the CC field, its address username being the
reason why the email was sent to you. For instance, in an email telling me that
somebody requested a review from me, the email address
&lt;code&gt;review_requested@github.com&lt;&#x2F;code&gt; will appear in the CC list. If you look at the
full message, you’ll also see the custom email header &lt;code&gt;X-GitHub-Reason&lt;&#x2F;code&gt; set to
&lt;code&gt;review_requested&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;All the possible reasons are &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;help.github.com&#x2F;en&#x2F;articles&#x2F;about-email-notifications#filtering-email-notifications&quot;&gt;detailed in Github’s
documentation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;These extra CC email addresses and email headers allow creating very powerful
filters that add supplementary tags to an email. For me, they relate directly
to the &lt;em&gt;importance&lt;&#x2F;em&gt; of the incoming email: reviews and mentions are usually
something I pay very close attention to, and thus they get filtered in a
special top-level tag in Gmail.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s an example of all the information you might find about a given email in
Gmail: in particular, look at the CC list and mailing-list type ids.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;github-workflow&#x2F;github-email-example.png&quot; alt=&quot;Notification dashboard count&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Note that Gitlab also adds some &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;workflow&#x2F;notifications.html#email-headers&quot;&gt;similar custom
headers&lt;&#x2F;a&gt;
that can be filtered by some powerful email clients. I won’t go into detail
about those.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;one-more-thing-mozillian-edition&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#one-more-thing-mozillian-edition&quot; aria-label=&quot;Anchor link for: one-more-thing-mozillian-edition&quot;&gt;🔗&lt;&#x2F;a&gt;One more thing, Mozillian edition&lt;&#x2F;h3&gt;
&lt;p&gt;If you’re working on Mozilla code, Gecko and&#x2F;or external projects, there’s
this &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mikeconley&#x2F;myqonly&#x2F;&quot;&gt;neat addon&lt;&#x2F;a&gt; that Mike Conley
made. It will add an icon to the Firefox button bar, showing you the number
of requests assigned to you on Github and Phabricator, as well as the number of
pending Bugzilla requests.&lt;&#x2F;p&gt;
&lt;p&gt;It requires a minimal setup step for Github (filling your username) and
Bugzilla (adding a Bugzilla API token), and then it Just Works. It smartly
reuses a Phabricator token from the current Firefox Container’s session, if
there’s one.&lt;&#x2F;p&gt;
&lt;p&gt;You may think that having such a display all the time might provoke anxiety
during non-working hours. And you’d be right to think so! So the author of the
addon has added a feature to &lt;strong&gt;not&lt;&#x2F;strong&gt; display this information outside working
hours, that you can define as you like. Great stuff!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;that-s-it-folks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#that-s-it-folks&quot; aria-label=&quot;Anchor link for: that-s-it-folks&quot;&gt;🔗&lt;&#x2F;a&gt;That’s it, folks!&lt;&#x2F;h3&gt;
&lt;p&gt;Thanks for reading this far! I hope this helped you to some extent, allowing
you to spend less time in Github and more time doing the actual work. If you
have more interesting tips for using Github effectively, feel free to add a
comment or ping me on &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>A new blog theme!</title>
        <published>2019-06-13T19:00:42+00:00</published>
        <updated>2019-06-13T19:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/a-new-blog-theme/"/>
        <id>https://bouvier.cc/tech/a-new-blog-theme/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/a-new-blog-theme/">&lt;p&gt;Just a quick note! I’ve just updated my blog’s design and UI so it is more
convenient, modern and light. It is still using the
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.getpelican.com&#x2F;&quot;&gt;Pelican&lt;&#x2F;a&gt; blog system, only the theme has
changed. The previous theme, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alexandrevicenzi&#x2F;flex&quot;&gt;Flex&lt;&#x2F;a&gt;,
was elegant and it has been quite pleasant to use, but it had a few subtle
drawbacks that revealed as time went. Here I explain what were my needs, which
other blog designs inspired me, and link to all the different resources I’ve
used.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;embeds-tracking-and-comments&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#embeds-tracking-and-comments&quot; aria-label=&quot;Anchor link for: embeds-tracking-and-comments&quot;&gt;🔗&lt;&#x2F;a&gt;Embeds: tracking and comments&lt;&#x2F;h2&gt;
&lt;p&gt;I use some embeds in my blog: since Pelican generates static files, it can’t
handle more complicated features like counting visitors or a comment system.
Soon, I’ve wanted to get a rough idea of the number of visitors and where they
come from, to understand which posts are the most useful (and of course, to
bless my ego). I’ve been using self-hosted, open-source systems for that
purpose, like &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;matomo.org&#x2F;&quot;&gt;Matomo&lt;&#x2F;a&gt; (née Piwik), because I don’t want
my blog’s visitors to get (even more) tracked by Google Analytics, which would
be counter to my values. This led to a meaningful contribution to add &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alexandrevicenzi&#x2F;Flex&#x2F;pull&#x2F;15&quot;&gt;support
for Matomo&lt;&#x2F;a&gt; in the theme, so
other people don’t have to redo this work themselves!&lt;&#x2F;p&gt;
&lt;p&gt;Later, I switched over to the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;usefathom.com&#x2F;&quot;&gt;Fathom&lt;&#x2F;a&gt; analytics
system, because it’s lighter, it knows less about my visitors (only number of
visits&#x2F;visitors by page and the referrer), and its dashboard is a gazillion
times faster to load (all it loads are static files!) than Matomo’s. So I had
to tweak the theme for this too! And then, when I decided to add an embed for a
self-hosted, open-source comment system named &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;posativ.org&#x2F;isso&quot;&gt;isso&lt;&#x2F;a&gt;
(think of it as an alternative to the centralized Disqus), I needed to add
support for it as well. This meant digging into the theme and understanding how
it works, and each time I wanted to add a new embed, I had to repeat this
process.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;css-and-markup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#css-and-markup&quot; aria-label=&quot;Anchor link for: css-and-markup&quot;&gt;🔗&lt;&#x2F;a&gt;CSS and markup&lt;&#x2F;h2&gt;
&lt;p&gt;After reading a well-written and quite interesting online class on typography
on &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;betterwebtype.com&#x2F;&quot;&gt;BetterWebType&lt;&#x2F;a&gt; (read it if you haven’t! it
helped me understanding why some websites were more pleasant to use, and put
explanations onto all the intuitions and feelings I had on the topic), I’ve
changed a few lines in the CSS source file, tweaking fonts, width, line height
etc.&lt;&#x2F;p&gt;
&lt;p&gt;A few other changes affecting the markup also happened over time, for which I
had to add CSS rules. Of course there were a few conflicts with preexisting
rules, since that’s pretty common in CSS; but the fact that I didn’t write the
CSS rules in the first place made it harder to understand how and where these
rules were used.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;writing-my-own&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#writing-my-own&quot; aria-label=&quot;Anchor link for: writing-my-own&quot;&gt;🔗&lt;&#x2F;a&gt;Writing my own&lt;&#x2F;h2&gt;
&lt;p&gt;I also got a bit bored of the design itself, especially the aside bar on the
left which felt a bit early 2010, as well as the overall sense of density. Some
other blogs’ strong takes inspired me a lot: in particular, I’d like to point
to my colleague and friend &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.paul.cx&#x2F;&quot;&gt;Paul Adenot’s blog&lt;&#x2F;a&gt;, and its
refined, minimalistic design (as well as its amazing body font, look at the
K&#x2F;it or Q&#x2F;uo ligatures, they’re &lt;em&gt;insane&lt;&#x2F;em&gt;). There’s also the blog of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jvns.ca&#x2F;&quot;&gt;Julia
Evans&lt;&#x2F;a&gt;, which in addition to containing amazingly instructive
blog posts about system programming, shows all the blog posts as a long list in
the index page, making it clear, informative and helping discoverability.&lt;&#x2F;p&gt;
&lt;p&gt;With all of this in mind, since I had to acquire more control over the theme
anyway and I wanted it to look much different, I decided to write my own. Of
course, it’s &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;blog.benj.me&#x2F;tree&#x2F;sources&#x2F;themes&#x2F;modern&quot;&gt;free
software&lt;&#x2F;a&gt;.
This is what you should be seeing right now.&lt;&#x2F;p&gt;
&lt;p&gt;As an extra to all the items I’ve mentioned before, I’d like to give a shoutout
to the open-source &lt;em&gt;fonts&lt;&#x2F;em&gt; I’ve used. The header font is
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;velvetyne.fr&#x2F;fonts&#x2F;bluu&#x2F;&quot;&gt;bluu&lt;&#x2F;a&gt;, a font created by Jean-Baptiste
Morizot from the fantastic &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;velvetyne.fr&quot;&gt;Velvetyne&lt;&#x2F;a&gt; type foundry. Go
check it out if you’re a typo nerd! or if you’re looking for some original and
well-thought fonts. The body font is &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rsms.me&#x2F;inter&#x2F;&quot;&gt;Inter UI&lt;&#x2F;a&gt;; it
feels quite modern and it has been designed with computer screens in mind.&lt;&#x2F;p&gt;
&lt;p&gt;Previous vs new home page:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;a-new-blog-theme&#x2F;previous-index.png&quot; alt=&quot;Previous home page&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;a-new-blog-theme&#x2F;new-index.png&quot; alt=&quot;New home page&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Previous vs new post page:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;a-new-blog-theme&#x2F;previous-post.png&quot; alt=&quot;Previous post page&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;a-new-blog-theme&#x2F;new-post.png&quot; alt=&quot;New post page&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;flex-thee-well&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#flex-thee-well&quot; aria-label=&quot;Anchor link for: flex-thee-well&quot;&gt;🔗&lt;&#x2F;a&gt;Flex thee well&lt;&#x2F;h2&gt;
&lt;p&gt;I still think Flex is a great theme to start with, and I’m thankful to the
authors for writing it in the first place, since it has served me well. Thanks!&lt;&#x2F;p&gt;
&lt;p&gt;I’d also like to thank people who gave me feedback and helped me write the CSS
(me can’t CSS) of this theme, including Flaburgan, Maiwann, Marien, Thomas
and other &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasoft.org&#x2F;en&quot;&gt;Framasoft&lt;&#x2F;a&gt; friends.&lt;&#x2F;p&gt;
&lt;p&gt;And thank &lt;strong&gt;you&lt;&#x2F;strong&gt; for reading this far! I think blogging and self-hosting are
still important and relevant, to avoid depending on commercial platforms, like
Medium, which repeatedly tries to get you to subscribe, displays thousands of
popovers and attempts to abuse your attention into reading always more (and
spending more time on their website).  It’s easy to host your own blog! Even if
you don’t have your own server, you can use Github or
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.gitlab.com&#x2F;ee&#x2F;user&#x2F;project&#x2F;pages&#x2F;&quot;&gt;Gitlab&lt;&#x2F;a&gt; pages, with fancy
automatic systems that make publishing a breeze.&lt;&#x2F;p&gt;
&lt;p&gt;I’d be curious to hear your feedback on this new design, including code
improvements (remember? it’s free software!). Feel free to type in a comment,
or hit me up on &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Quatre ans de Kresus, bonjour Kresus.org</title>
        <published>2018-08-23T10:00:42+00:00</published>
        <updated>2018-08-23T10:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/4-ans-de-kresus-bonjour-kresus-org/"/>
        <id>https://bouvier.cc/tech/4-ans-de-kresus-bonjour-kresus-org/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/4-ans-de-kresus-bonjour-kresus-org/">&lt;h2 id=&quot;de-la-volonte-derriere-kresus&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#de-la-volonte-derriere-kresus&quot; aria-label=&quot;Anchor link for: de-la-volonte-derriere-kresus&quot;&gt;🔗&lt;&#x2F;a&gt;De la volonté derrière Kresus&lt;&#x2F;h2&gt;
&lt;p&gt;Il y a une dizaine d’années, alors fervent utilisateur de HomeBank, je découvre
avec stupéfaction et beaucoup d’intérêt l’application mobile de Linxo.  Ce
service permet de récupérer ses opérations bancaires depuis le site de sa
banque, de manière automatisée, tout en analysant les transactions et en
permettant de les catégoriser, afin de générer des graphes simples et clairs
pour expliquer aux utilisateur.ice.s comment évoluent leurs finances
personnelles : combien a été dépensé ou économisé tel mois ? quelles sont les
trois sources principales de dépenses au cours des six derniers mois ? J’ai
utilisé un peu cette application mobile à l’époque. Elle m’était très utile,
alors jeune étudiant, n’ayant qu’un budget limité et aucune idée de comment le
gérer.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;si-c-est-gratuit-c-est-quoi-le-produit&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#si-c-est-gratuit-c-est-quoi-le-produit&quot; aria-label=&quot;Anchor link for: si-c-est-gratuit-c-est-quoi-le-produit&quot;&gt;🔗&lt;&#x2F;a&gt;Si c’est gratuit, c’est quoi le produit ?&lt;&#x2F;h3&gt;
&lt;p&gt;Il m’est apparu assez vite que le service étant gratuit, Linxo devait avoir une
autre source de financement que l’unique option premium qu’ils proposaient
alors. En y réfléchissant un peu, on peut trouver plusieurs possibles intérêts
pour eux. Par exemple, ce pourrait être tout simplement de pouvoir récupérer
une grande quantité de données bancaires, utilisable comme source de données
pour un algorithme de catégorisation automatique. Un tel algorithme de
catégorisation pourrait ensuite être revendu à des services tiers. De mémoire,
j’ai aussi vu une autre source de financement basée sur des publicités ciblées.
Dans ce cas, le logiciel propose d’analyser les transactions bancaires pour
permettre d’identifier des coûts récurrents, et ensuite met en avant des offres
de services similaires d’entreprises partenaires ; le revenu est ici une
commission. Par exemple, si vous avez une assurance habitation dont l’échéance
est mensuelle, le système peut le détecter et vous proposer des publicités pour
d’autres assurances habitations moins chères (mais pas forcément équivalentes
!) chez des concurrents. Dans le pire des cas, l’intérêt caché pourrait être de
revendre des informations extraites des transactions bancaires, comme la
récurrence et les noms des enseignes où nous effectuons des paiements. Au
mieux, cela est effectué de manière anonyme et n’a pas une grande incidence
personnelle. Au pire, cela révèle des détails de notre intimité, notamment si
l’information est rattachée à une personne identifée. Ces informations peuvent
être très utiles pour les assurances et les banques pour évaluer divers
risques liés à des emprunts ou des polices d’assurance. Mais des entreprises
plus classiques peuvent également en faire usage, en mettant en place des
publicités ultra-ciblées qui touchent aux aspects émotionnels.&lt;&#x2F;p&gt;
&lt;p&gt;De manière certaine, j’ai été immédiatement gêné par le fait de devoir confier
à une entreprise mes identifiants bancaires, à savoir mon login et mon mot de
passe, le sésame pour accéder au site de ma banque, attribuant parfois des
autorisations plus variées que la simple lecture seule, comme celle d’effectuer
des virements. Après cette réflexion, je me désinscris. Je cherche une
alternative libre aussi complète, car je veux être capable de vérifier dans le
code du logiciel ce qui est fait avec mes identifiants ; un
logiciel libre peut difficilement fomenter des coups fourrés. N’en trouvant
pas, je brandis ma liste de projets à long terme, aussi connue sous le nom de
liste des projets que je ne mettrai probablement jamais en place, ou encore
liste des rêves libristes. J’y ajoute une entrée : créer une alternative libre
et auto-hébergeable qui fasse la même chose que Linxo, sans trop savoir comment
m’y prendre.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cozycloud-et-son-gestionnaire-de-finances-personnelles&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cozycloud-et-son-gestionnaire-de-finances-personnelles&quot; aria-label=&quot;Anchor link for: cozycloud-et-son-gestionnaire-de-finances-personnelles&quot;&gt;🔗&lt;&#x2F;a&gt;CozyCloud et son gestionnaire de finances personnelles&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;4-ans-de-kresus-bonjour-kresus-org&#x2F;2018-08-23-cozypfm.png&quot; alt=&quot;Capture de cozypfm&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Un peu plus tard, je découvre CozyCloud, et notamment l’application
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;seeker89&#x2F;cozy-pfm&quot;&gt;cozy-pfm&lt;&#x2F;a&gt;, développée par un prestaire.
C’est ce clône libre dont j’ai tant rêvé. La clé qui me manquait, c’était
l’intégration avec l’outil pour récupérer les données bancaires : ce logiciel
s’appuie sur les épaules d’un outil complet de scrapping [1] libre,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;weboob.org&quot;&gt;weboob&lt;&#x2F;a&gt;. Très vite, l’application montre ses limites : des
doublons apparaissent dans mes opérations bancaires. En effet, l’outil de
scrapping est capable de nous fournir un cliché de nos comptes bancaires à un
instant donné. Un gestionnaire de finances personnelles essaie de mettre en
place une continuité, donc de joindre les instantanés en un film à 24 images
par seconde, qui retracerait l’historique plus complet de nos comptes. Mais
parfois, ce dernier se trompe parce qu’il ne dispose pas d’assez
d’informations, ou parce que les banques changent la manière dont sont
présentées les opérations au cours du temps (et ça arrive beaucoup plus souvent
qu’on ne le croit !). Naïvement, on pourrait penser que si deux transactions
récupérées lors de différentes synchronisations ont la même date, le même
libellé et le même montant, alors ce sont des doublons. Mais les banques se
permettent de modifier au cours du temps l’une ou plusieurs de ces composantes,
rendant la tâche du gestionnaire de finances personnelles bien plus complexe.
C’est ainsi que des doublons apparaissent : ce sont des paires d’opérations qui
ont tout en commun sauf une composante qui a changé entre deux instantanés pris
sur le site de la banque.&lt;&#x2F;p&gt;
&lt;p&gt;L’autre souci de CozyPFM est que l’application a été développée sur commande,
par un prestataire qui a ensuite fini sa mission et &lt;em&gt;rendu les clés&lt;&#x2F;em&gt;. Une fois
la mission du consultant accomplie, l’application passe en mode maintenance, ce
qui signifie que seuls les gros bugs sont corrigés et que celle-ci ne connaît
plus de grandes nouveautés. Quand j’essaie de contribuer au code, je me heurte
à une difficulté, celle-ci technique : l’utilisation d’une technologie que je
ne comprends pas, qui m’impose beaucoup de contraintes pour essayer de
simplifier le développement, et que je n’ai pas envie de faire l’effort
d’apprendre. L’intuition a sonné juste, au vu de l’actuelle désuètude de
l’outil : il s’agissait de la bibliothèque de code JavaScript
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;backbonejs.org&#x2F;&quot;&gt;backbone&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kresus-d-hier-a-aujourd-hui&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-d-hier-a-aujourd-hui&quot; aria-label=&quot;Anchor link for: kresus-d-hier-a-aujourd-hui&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus, d’hier à aujourd’hui&lt;&#x2F;h2&gt;
&lt;p&gt;Je m’en souviens encore précisément, c’était juste hier, le 31 juillet 2014,
que j’écris un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;commit&#x2F;f458312356ab61f36a0a3193100f18fa436bc1c2&quot;&gt;premier
commit&lt;&#x2F;a&gt;,
parce que je n’arrive pas à démarrer le serveur  de cozy-pfm. Très vite, je
décide que si je veux pouvoir m’approprier le code, il va falloir de plus
grosses modifications structurelles sur le client Web ; ainsi naquit un fork,
sous le nom de Kresus (pour devenir riche comme
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Cr%C3%A9sus&quot;&gt;Crésus&lt;&#x2F;a&gt; !). S’ensuivent de nombreux
changements, autant dans les choix techniques (réécriture complète du serveur
de CoffeeScript vers du JavaScript moderne, réécriture du client Web avec
React.js, puis plus tard en ajoutant une couche Redux.js) que dans les
fonctionnalités apportées (écran de déduplication manuelle des transactions
bancaires pour palier au problème initial, ajout de la catégorisation, mise en
place de graphiques). D’autres gens sont intéressés, notamment d’autres
personnes qui contribuent à CozyCloud ; je tire parti de l’expérience de la
contribution chez Mozilla pour tâcher d’être chaleureux, remercier ces
inconnu.e.s qui m’offrent des retours, voire des patches, trop content d’avoir
des utilisateur.ice.s.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;4-ans-de-kresus-bonjour-kresus-org&#x2F;2018-08-kresus.png&quot; alt=&quot;Capture de Kresus en aout 2018&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Aujourd’hui, quatre ans plus tard, il y a suffisamment de contributeur.i.ces
externes pour que mes deux mains ne suffisent plus à les compter. Il y a une
(tentative de) gouvernance commune du projet. Il y a une gestion du produit
avec une vision plus long terme, même si celle-ci n’est pas toujours clairement
définie. Hey, il y a même un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;community.kresus.org&quot;&gt;forum&lt;&#x2F;a&gt; pour que tout
un chacun puisse s’exprimer, et un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&quot;&gt;site officiel&lt;&#x2F;a&gt;, avec
son propre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&#x2F;blog&#x2F;&quot;&gt;blog&lt;&#x2F;a&gt;, que je vous incite à suivre ; mon
blog personnel ne mentionnera Kresus que rarement dorénavant, plutôt sur les
aspects personnels si j’en ressens l’envie. Le travail s’effectue de manière
distribuée, parfois se bloque temporairement, parce que l’on a une vie qui se
déroule en parallèle, et moins de temps libre ; et c’est bien naturel et
entièrement irréprochable !  Les exigences d’un certain niveau de qualité font
que les contributions peuvent mettre du temps à être intégrées. Est-ce que la
conception est cohérente ? Est-ce que les éléments introduits n’interagissent
pas négativement avec d’autres fonctionnalités ? Peut-on généraliser ou
simplifier le besoin ?  Ensuite il faut tester les changements apportés pour
s’assurer que rien d’autre ne casse, vérifier un éventuel impact sur la
réactivité de l’application, jeter un coup d’oeil pour vérifier le rendu et la
réactivité sous mobile. Des corrections peuvent être demandées, pour les plus
prolifiques, démarrant un possible cycle d’aller-retours. Comme le dit la
sagesse populaire : tout seul, on va plus vite ; ensemble, on va plus loin. Il
y a des fonctionnalités dans Kresus auxquelles je n’aurais jamais pensées, il y
a des éléments d’interface bien plus peaufinés que ce que je n’aurais jamais su
faire, il y a des questions de design que je ne me serais jamais posées. Et
c’est tant mieux !&lt;&#x2F;p&gt;
&lt;h3 id=&quot;merci-toi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#merci-toi&quot; aria-label=&quot;Anchor link for: merci-toi&quot;&gt;🔗&lt;&#x2F;a&gt;Merci, toi !&lt;&#x2F;h3&gt;
&lt;p&gt;Une petite communauté se créé, autour de personnes qui discutent du projet,
décrivent comment l’installer sur son serveur, résolvent des soucis lors de la
mise en place ou de l’utilisation, partagent leurs trucs et astuces. Que ce
soit en utilisant Kresus, en en parlant à des gens autour d’elles et d’eux, en
nous faisant des retours (quand quelque chose se passe mal ou quand quelque
chose pourrait mieux se passer), en nous posant des questions sur les valeurs
et les principes sous-jacents du projet, ou en contribuant au code ou aux
systèmes pour que d’autres puissent l’installer chez eux : vous contribuez
activement à Kresus, et à ce titre je vous remercie personnellement. Vous
faites vivre ce logiciel, c’est par vous qu’il est libre et vous pouvez être
fières et fiers de vos contributions.&lt;&#x2F;p&gt;
&lt;p&gt;Et si vous avez envie de contribuer également, et que vous avez peur de ne pas
savoir comment faire, détrompez-vous ! Tout le monde a sa pierre à apporter à
un logiciel libre, tout le monde est légitime de poser des questions ou de
présenter ses problématiques ; nous ferons de notre mieux pour les comprendre.
Donc n’hésitez-pas, venez sur le forum, ouvrez un sujet, commentez-en un autre,
essayez Kresus sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;demo.kresus.org&quot;&gt;site de démo&lt;&#x2F;a&gt; ! Et surtout, si
quelque chose ne fonctionne pas pour vous ou ne vous convient pas,
n’hésitez-pas à venir nous le signaler ! On ne peut travailler sur les défauts
que si on les a clairement identifiés. Et à force de scruter de très (trop)
près le logiciel, on perd parfois le recul nécessaire pour identifier de
bénignes bévues. On a commencé à mettre en place des tests d’expérience
utilisateur.ice, et on a encore beaucoup de chemin à faire. Bref, c’est un
petit geste pour vous, mais pour nous, ça peut vouloir dire beaucoup !&lt;&#x2F;p&gt;
&lt;p&gt;En conclusion, joyeux anniversaire Kresus, joyeux 4 ans, essayons ensemble de
te faire grandir encore ! Dans les vastes chantiers futurs, nous aimerions
toujours passer à un système d’auto-catégorisation des transactions bancaires,
avoir un meilleur système de dédoublonnage des transactions, trouver d’autres
informations pertinentes à présenter (identifier les transactions récurrentes
et prévoir les soldes négatifs). Et dans les grands plans futurs, il y a
toujours cette volonté de faire voyager Kresus en dehors de France, et donc de
trouver des systèmes pour se brancher sur les banques étrangères ! La route est
longue, mais la banque est libre…&lt;&#x2F;p&gt;
&lt;p&gt;[1] Le scrapping est une méthode qui permet artificiellement de créer des APIs
pour des sites qui n’en ont pas, en se faisant passer pour un navigateur Web,
en connaissant a priori la structure des pages et en extrayant les données
recherchées. C’est très fragile, mais absolument nécessaire quand il n’y a rien
d’autre (et les banques sont très jalouses de la propriété de leurs données !).&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Making calls to WebAssembly fast and implementing anyref</title>
        <published>2018-07-04T18:00:42+00:00</published>
        <updated>2018-07-04T18:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/mozilla-2018-faster-calls-and-anyref/"/>
        <id>https://bouvier.cc/tech/mozilla-2018-faster-calls-and-anyref/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/mozilla-2018-faster-calls-and-anyref/">&lt;p&gt;Since this is the end of the first half-year, I think it is a good time to
reflect and show some work I’ve been doing over the last few months, apart from
the regular batch of random issues, security bugs, reviews and the fixing of 24
bugs found by our &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fuzzing&quot;&gt;fuzzers&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;bug-1319203-make-js-to-webassembly-calls-blazingly-fast&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bug-1319203-make-js-to-webassembly-calls-blazingly-fast&quot; aria-label=&quot;Anchor link for: bug-1319203-make-js-to-webassembly-calls-blazingly-fast&quot;&gt;🔗&lt;&#x2F;a&gt;Bug 1319203: Make JS to WebAssembly calls &lt;em&gt;blazingly&lt;&#x2F;em&gt; fast&lt;&#x2F;h2&gt;
&lt;p&gt;If we want more WebAssembly (wasm) adoption, there shouldn’t be a big costly
barrier between the two universes. That is, calls from one world to the other
should be fast. For a very long time, calls from JS to asm.js&#x2F;WebAssembly have
been quite slow in Firefox. In fact, we didn’t optimize them at all. For ease
and speed of implementation at the time, asm.js call activations (data
structures recording information about the function being currently called in
the VM) were very different from the JS ones. This difference indicated some
significant structural differences, like the capability to reconstruct call
stack information used by &lt;code&gt;Error()&lt;&#x2F;code&gt; stack frames, or just tracing the stack for
garbage collection purposes. After putting a lot of hard work into refactoring
and low-level changes over the last year, Spidermonkey was finally ripe for an
optimization.&lt;&#x2F;p&gt;
&lt;p&gt;When we call from JS to asm.js&#x2F;wasm, the call passes through C++, does a bunch of
work and then calls into a piece of glue code directly written in assembly: the
&lt;em&gt;interpreter entry stub&lt;&#x2F;em&gt;. This stub is quite small: it just copies out the C++
arguments into the right places the wasm function being called expects, sets up
some small machine state, calls into the function, then does error checking and
eventually returns to the C++ caller. The critical part is JIT compilation. JIT
compilation means that the code is compiled to machine code by the just-in-time
compiler, IonMonkey. When a JS function has been JIT-compiled and it calls into
wasm, then the caller would have to go back to C++ first, before the control
flow is redirected to WebAssembly.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;mozilla-2018-faster-calls-and-anyref&#x2F;2018-07-interpreter-stub.png&quot; alt=&quot;Diagram showing interpreter entry stub&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Starting with Firefox 60, the JIT compiler makes no distinctions between
calling a JavaScript function or a WebAssembly function, meaning it uses the
same call optimizations for both kinds of function. A new piece of glue code,
the &lt;em&gt;JIT entry stub&lt;&#x2F;em&gt;, is generated for each exported function: it converts and
unboxes the arguments read from the JIT-compiled JS caller into the right
primitive types as expressed in the wasm function’s signature, sets up some
machine registers, calls into the wasm function being called and then converts
the result into a format the JS caller will understand.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;mozilla-2018-faster-calls-and-anyref&#x2F;2018-07-jit-stub.png&quot; alt=&quot;Diagram showing JIT entry stub&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As you can see, the C++ step that was originally required to call wasm from JS
has been completely eliminated!&lt;&#x2F;p&gt;
&lt;p&gt;This resulted in massive speedups over a variety of different situations: when
a wasm function is directly &#x2F; indirectly &#x2F; polymorphically called, or used as a
getter&#x2F;setter, or called by &lt;code&gt;Function.prototype.call&#x2F;apply&lt;&#x2F;code&gt;, when the call is
missing required arguments, etc. Here’s a brief summary of the results, but
there might be a full-blown blog post about these optimizations coming on
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hacks.mozilla.org&#x2F;&quot;&gt;Mozilla Hacks&lt;&#x2F;a&gt; at some point in the future.
(calling 1 billion times into very simple functions, lower is better)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;mozilla-2018-faster-calls-and-anyref&#x2F;2018-07-wasm-calls.png&quot; alt=&quot;Charts showing evolution of performance&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This work is not entirely done yet: we can still even better optimize in the
case of a function call from JS when the called wasm function is definitely
known to be a unique wasm target; see the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=1437065&quot;&gt;tracking
bug&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bug-1422043-lazy-entry-stub-generation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bug-1422043-lazy-entry-stub-generation&quot; aria-label=&quot;Anchor link for: bug-1422043-lazy-entry-stub-generation&quot;&gt;🔗&lt;&#x2F;a&gt;Bug 1422043: Lazy entry stub generation&lt;&#x2F;h2&gt;
&lt;p&gt;The previous bug resolution came with an important memory issue: every exported
function now generates a rather big chunk of code for the JIT entry, having an
impact on the memory occupied by the code itself. This would be fine in most
situations where the number of exported functions is generally low. But when
the wasm module exports a Table (think of the equivalent of a C++ function
table with signature checks), we have to assume that every single function,
including those not explicitly exported, needs entry stubs. Indeed, each
function can be eventually called through the Table, after calls to
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;webassembly.github.io&#x2F;spec&#x2F;js-api&#x2F;index.html#dom-table-set&quot;&gt;WebAssembly.Table.set&lt;&#x2F;a&gt;.
In fact, the existing code already suffered from this because of the
interpreter entries, but it had been largely amplified by the much larger JIT
entry stubs.&lt;&#x2F;p&gt;
&lt;p&gt;To fix this, we’ve decided to lazily generate all the entry stubs for functions
exported through a table. That is, if a function is &lt;em&gt;explicitly&lt;&#x2F;em&gt; exported, its
stubs will be generated at wasm compile time, but other functions won’t have
stubs yet. If a non-exported function is called through a Table, we’ll generate
the entry stubs the first time it is called. This involves some fun
interactions with our &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hacks.mozilla.org&#x2F;2018&#x2F;01&#x2F;making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler&#x2F;&quot;&gt;tiered
compilation&lt;&#x2F;a&gt;
mechanism, which can compile functions and create new entry stubs in the
background while the running thread will generate lazy ones.&lt;&#x2F;p&gt;
&lt;p&gt;Not only this fixed the memory regression introduced by bug 1319203, but it
actually made the situation even better than the baseline, because we didn’t
need to generate those interpreter entries for table-exported functions by
default anymore:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;mozilla-2018-faster-calls-and-anyref&#x2F;2018-07-wasm-stubs-memory.png&quot; alt=&quot;Charts showing evolution of memory usage&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Since it’s not entirely readable from the chart: after the patches, the
AngryBots and ZenGarden entry stubs memory usages went down to respectively 262
and 362 KB. This was also a relatively huge win in compilation times, but on
such a low scale that it didn’t make a huge difference on total compile time.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bug-1447591-remove-wasm-binarytotext&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bug-1447591-remove-wasm-binarytotext&quot; aria-label=&quot;Anchor link for: bug-1447591-remove-wasm-binarytotext&quot;&gt;🔗&lt;&#x2F;a&gt;Bug 1447591: Remove wasm::BinaryToText&lt;&#x2F;h2&gt;
&lt;p&gt;WebAssembly is a binary format, and there is an equivalent human-readable and
debuggable text format: the WebAssembly Text format, or &lt;em&gt;WAT&lt;&#x2F;em&gt; format. While
SpiderMonkey once directly produced WAT for display in C++, it’s now easier for
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;devtools-html&#x2F;debugger.html&quot;&gt;debugger.html&lt;&#x2F;a&gt; to do so in JS.
This also made the mapping between bytecode offsets and text offsets (source
maps) more consistent with the display, and it could be useful in other places
where this project is being used. Recently after confirming that the C++
implementation wasn’t used anymore, I was able to remove it. It’s not every day
that you get a net loss of around 5,500 lines of code, which is always nice:
less code means fewer bugs and less maintenance burden, especially when the code
is dead.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bug-1445272-1450261-implement-basic-anyref-support&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bug-1445272-1450261-implement-basic-anyref-support&quot; aria-label=&quot;Anchor link for: bug-1445272-1450261-implement-basic-anyref-support&quot;&gt;🔗&lt;&#x2F;a&gt;Bug 1445272 &#x2F; 1450261: Implement basic &lt;code&gt;anyref&lt;&#x2F;code&gt; support&lt;&#x2F;h2&gt;
&lt;p&gt;A new proposal has been made to the WebAssembly specification committee a few
months ago: to add &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;WebAssembly&#x2F;reference-types&quot;&gt;reference
types&lt;&#x2F;a&gt; to the type system.
Reference types are a new way to represent a reference to any &lt;em&gt;host&lt;&#x2F;em&gt; values. In
a Web environment, this means being capable of playing with JavaScript values
within WebAssembly. This is a huge difference with the existing type system,
which only contains primitive types: integers represented on 32 or 64 bits,
IEEE754 floating-point numbers represented on 32 or 64 bits. This is also a
first step for implementing &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;github.com&#x2F;webassembly&#x2F;gc&quot;&gt;garbage
collection&lt;&#x2F;a&gt; (GC) integration within
WebAssembly: since these reference values have been allocated on the GC heap in
JavaScript, they need to be traced during wasm execution.&lt;&#x2F;p&gt;
&lt;p&gt;The basic implementation of this feature in the first bug allows one to use a
new type, called &lt;code&gt;anyref&lt;&#x2F;code&gt;, as part of a function’s signature or in local
variables, be it in a function definition or an imported function. This allows
using JS variables within wasm and pass them around to other JS functions. The
second bug implemented the capability to read and write &lt;code&gt;anyref&lt;&#x2F;code&gt; values in wasm
Globals [1]. Since Globals can be manipulated outside of the wasm Module thanks
to their JS API, and garbage collections can happen at any time in JS, we
needed to implement GC barriers to make sure that the stored value would not be
marked as unused during tracing. There is good literature explaining why these
barriers are needed and what they do, so I will not expand too much on the
topic.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s an example of usage according to latest spec drafts (and therefore
subject to change for now):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;common-lisp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(module&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (func $alert (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;env&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;alert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) (param anyref))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (global $global_ref (mut anyref) (ref.null anyref))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (func (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;export&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;set_and_alert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) (param $param anyref) (result anyref)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        ;; Put the previous value of $global_ref on the virtual value stack.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        get_global $global_ref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        ;; Get the argument anyref value and store it in $global_ref.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        get_local $param&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        set_global $global_ref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        ;; Call the $alert method with the argument anyref value.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        get_local $param&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        call $alert&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        ;; The previous value of $global_ref is still on the stack and will be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;        ;; returned.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;Example of wasm text format using &lt;code&gt;anyref&lt;&#x2F;code&gt;.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; instance&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; } =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt; await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; WebAssembly&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;instantiate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;wasmBinary&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        env&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;            alert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;obj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;                alert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Hello, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;obj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;name}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    })&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;instance&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;exports&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;set_and_alert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;({&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;world&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        secretVal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 42&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; alerts &amp;quot;Hello, world!&amp;quot;, logs null&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;    console&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;JSON&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;stringify&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;instance&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;exports&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;set_and_alert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;({&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;        name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;there&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    })))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;    &#x2F;&#x2F; alerts &amp;quot;Hello, there!&amp;quot;, logs { name: &amp;#39;world!&amp;#39;, secretVal: 42 }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;})()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;Example of JavaScript using the module defined above, passing JS values and
reading them from WebAssembly.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is a very preliminary prototype and it might change in the next few
months. If you feel adventurous, you can try it on Firefox Nightly by setting
the &lt;code&gt;about:config&lt;&#x2F;code&gt; pref &lt;code&gt;javascript.options.wasm_gc&lt;&#x2F;code&gt; to &lt;code&gt;true&lt;&#x2F;code&gt;; note that we
haven’t fully hooked this up to garbage collection yet, so your experimentation
might occasionally throw out-of-memory exceptions. In any case, if you see
something, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;enter_bug.cgi?product=Core&amp;amp;component=Javascript%3A%20Web%20Assembly&quot;&gt;say
something&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Say you are a compiler developer, and you would like to port your language to
WebAssembly, and your language uses a GC. At the moment, the only way you can
do this is by compiling your garbage collector to WebAssembly, and it would be
backed by the wasm Module’s memory. This works, but it won’t be very efficient.
Plus, there’s already a very efficient, solidly tested, constantly improving
garbage collector in your browser that uses all the possible dirty low-level
tricks known to mankind, which is the GC being used for JavaScript. What if we
could give you access to the garbage collector directly? Then you’d just need
to give a way to define structures, and then could use a set of opcodes to
allocate them, read and write fields on them, etc. At the moment, the reference
types proposal only allows you to move garbage-collected values around. There’s
also code in Firefox Nightly to experiment with defining your own data
structures and using them, but it is very very early. If you’re interested in
following us implementing more parts, this &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=1444925&quot;&gt;tracking
issue&lt;&#x2F;a&gt; might be of
interest.&lt;&#x2F;p&gt;
&lt;p&gt;[1] Think of a C++ “global” value, not a JavaScript “global”.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;future-work&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#future-work&quot; aria-label=&quot;Anchor link for: future-work&quot;&gt;🔗&lt;&#x2F;a&gt;Future work&lt;&#x2F;h2&gt;
&lt;p&gt;There is still much more work to be done on the implementation of WebAssembly
in Spidermonkey, to implement other new proposals, to make it faster, or to
have even better generated code.&lt;&#x2F;p&gt;
&lt;p&gt;A big thank you for the proofreading to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;whereswalden.com&#x2F;&quot;&gt;Waldo&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;steveklabnik&quot;&gt;steveklabnik&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;ag_dubs&quot;&gt;ashleygwilliams&lt;&#x2F;a&gt;. Extra thanks go to
Ashley who also drew the two diagrams showing how stubs evolved.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Freedom-enabling, not mindless productivity</title>
        <published>2017-12-11T09:00:42+00:00</published>
        <updated>2017-12-11T09:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/freedom-enabling-productivity/"/>
        <id>https://bouvier.cc/tech/freedom-enabling-productivity/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/freedom-enabling-productivity/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;freedom-enabling-productivity&#x2F;2017-12-11_keep-exploring.jpg&quot; alt=&quot;Freedom-enabling, not mindless productivity&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There are many self-development articles out there on blogs, detailing all the
techniques and methods that one can use to work better, be happier, become more
successful, whatever you can dream of. It really feels like these techniques
can all be reduced to a well-defined set of core habits. Work out.  Practice
journaling. Meditate. Be grateful. Read a lot. Drink a liter of water every
day. Alright, you get the idea; if you’re reading this you probably went
through a whole lot of other very similar self help posts in the past. Or even
read books about the topic. However, those can easily be misinterpreted. Let’s
find out how. This post is mostly an open-mind manifesto, with some principles
that might be obvious to some, but for others they might help ease the mind and
relax.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;if-all-you-have-is-a-todo-list-everything-looks-like-a-task&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#if-all-you-have-is-a-todo-list-everything-looks-like-a-task&quot; aria-label=&quot;Anchor link for: if-all-you-have-is-a-todo-list-everything-looks-like-a-task&quot;&gt;🔗&lt;&#x2F;a&gt;If all you have is a todo-list, everything looks like a task&lt;&#x2F;h2&gt;
&lt;p&gt;Have you ever bought a self-development book and read through the ratings
section right within the book? It is often placed at the beginning, and it is a
convincing marketing way to make sure your readers get hooked from the start.
It gives credibility too; look at all these random people who confirm the
effectiveness of what you’re about to read, before you actually know what
they’re talking about. They expand on how their life changed when they used a
particular technique, and how they are applying it to every field of their life,
how they feel much better now than other people around them, and how they
astonished their friends and family by causing a radical change in their life.&lt;&#x2F;p&gt;
&lt;p&gt;I think this is the reason why so many of these books are put aside by most
people, who materialize an interesting objection: this is the formula for a
sect-like cult. Is it this stunning that we talk about productivity gurus in
the first place? Let’s think about it for a second: these comments seem to
suggest that our whole world generates a wide range of different issues that
can all be addressed with a low number of solutions. You can take any problem
in your life, turn it in one particular way so as to see it through the lenses
of this new method, and solve it one way or the other. Every problem can be
solved with a single technique. This can be the source of a confirmation bias:
if you want it badly enough, and try long enough, you can be pretty sure that
any issues can fit the scope of that given method you’re experimenting with.&lt;&#x2F;p&gt;
&lt;p&gt;In my opinion, this excess can be harmful. In fact, if we’d try to draw a
parallel with politics, I’d say these look like the premises for a fascist
regime (note I am not a historian, so this might be incomplete according to my
high-school memories). Indeed, some of it is there: providing the same answer
to all public issues (thus re-branding them, which can be facilitated by
designating scapegoats), forcing one into adopting behavior that might not be
suited for them, having a clear distinction between us (who have access to The
Solution) versus them (who don’t&#x2F;can’t have access to it), setting up a cult of
the personality towards the author of The Solution.&lt;&#x2F;p&gt;
&lt;p&gt;Why would we act like this? I am no sociologist, and there are probably many
reasons, but we can explore some basic ideas: maybe &lt;em&gt;some&lt;&#x2F;em&gt; people feel
powerless when facing the complexity of a world where everything is intertwined
in so many ways and evolving at a very high pace. Having a unique, predefined,
seemingly theoretically proven answer provides them with some sense of order
and intellectual easiness. On one side, whole ranges of issues then get easily
resolved and put aside, which gives head space for other matters; on the other
side, it means that there are no conflicts in thinking, less freedom of choice,
no attempts to solutions that are more suited to different groups and contexts,
and which ultimately could be better overall. Last but not least, it also mean
this group could be wrong, remain stuck with their opinions and get away with
them. But while being a huge one, that’s just one pain point of productivity.
What else is wrong?&lt;&#x2F;p&gt;
&lt;p&gt;There’s another common objection that I call the fallacies of mimicry: as
if by imitating the actions and habits of so-called successful people, you
could get their success too. Warren Buffet reads a lot of hours a day; he is
insanely rich; so if I read a lot of hours a day, then I’ll become rich,
somehow, right? I think this kind of reasoning is completely flawed, as it
inverts the consequences with the premises. Notably, when you get successful
enough (which seems to translate here by “you don’t have to worry about money
anymore”), you get this great amount of free time that gives you the
possibility to read. There’s another quirk in that thinking: different
methods, techniques, habits apply to different people in different contexts,
and there’s no one unique solution that works for all. So repeating the actions
of others might not be suited for your particular situation, and it could show
useless.&lt;&#x2F;p&gt;
&lt;p&gt;This also raises another point I wonder about: is the seek of productivity only
a topic for the privileged? If you consider something like &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Maslow&amp;#x27;s_hierarchy_of_needs&quot;&gt;Maslow’s hierarchy
of needs&lt;&#x2F;a&gt;,
productivity would probably belong to the highest level (self-actualization),
since it assumes all other issues in your life have been addressed first. If we
put aside the working life aspect, a great amount of knowledge can also apply
to one’s personal life and free time. Yet, it feels it’s a sign that “success”
compounds, to some extent: the less you have to worry about universal basic
needs, the more you can have time to read, learn, get better and enhance
yourself, which in turn makes you more suited to reach whatever goal you aim
for, thus becoming even more successful. It doesn’t only happen with
productivity, but also for instance with education: kids from richer families
tend to perform better than kids from poorer families, etc. (there are studies
that back this theory up, and of course I can’t find links back to them).&lt;&#x2F;p&gt;
&lt;p&gt;So we’ve identified issues related to productivity methods. But let’s not throw
the baby out with the bath water. There has to be a way to make value out of
it. How can we get past these problems?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;to-seek-the-whys&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-seek-the-whys&quot; aria-label=&quot;Anchor link for: to-seek-the-whys&quot;&gt;🔗&lt;&#x2F;a&gt;To seek the whys&lt;&#x2F;h2&gt;
&lt;p&gt;There’s always something else that’s tickling me about those posts: they seem
to confound the means and the ends. Being productive isn’t an end per se, it is
a tool. And it seems that people forget what is their own motivation in the
first place, what is their &lt;em&gt;why&lt;&#x2F;em&gt;. Why do you want to be more productive or
successful anyways? Do you want to work less? Or to spend more time with your
friends and family? Or to spend more time on hobbies and passions that can make
you feel more fulfilled? Or is your motivation entirely different, and you want
to raise up in your company’s hierarchy, by rising up your throughput, the
quantity and quality of your work? All motives are valid here of course. But
there should be one in the first place, otherwise motivation might not quite
follow, and thus the practice of routines will be aborted very soon after they
get started. This is often a very strong sign for myself, when I consider doing
something, add it to a todo-list and months later it is still there; maybe it
wasn’t that useful or valuable, and I can erase it with a light heart.&lt;&#x2F;p&gt;
&lt;p&gt;And when the initial, kickstarting motivation is right there, the &lt;em&gt;why&lt;&#x2F;em&gt; should
also help set a limit to the endless quest of productivity. To know when to
stop. For instance, when you managed to get more time for a dedicated hobby,
and you’re plain satisfied, what would be the point of squeezing even more in
your limited free time? Remember, productivity is a means to an end, not an end
by itself. Without this in mind, you could be chasing an endless goal and
wanting always more work. But enough is enough.&lt;&#x2F;p&gt;
&lt;p&gt;People get easily fooled into thinking that more working hours imply more
quality work. That’s a societal feeling: in a capitalistic society, being
productive means contributing to growth thus the good economic health of an
entity greater than yourself (your country, your region, the world). And since
people mix up being productive with working long hours, the confusion is easy
to make. But I think productivity is quite the opposite of this. I think this
is about &lt;strong&gt;trying to work the least number of hours to advance work on the most
important and valuable things&lt;&#x2F;strong&gt;. To be maximally efficient with the minimum
amount of resources. Identify those actions which will have the most positive
impact, help the greatest number of people, be &lt;em&gt;valuable&lt;&#x2F;em&gt;. So this is another
opportunity to acknowledge the need for a why: why do you work, in the first
place? Is the work you’re doing valuable, or are you doing busy work (like
handling emails, answering very quickly on instant chat systems, etc.) to make
it &lt;em&gt;look like&lt;&#x2F;em&gt; you’re productive? Or more humbly, one might just be working to
get the occasional pay check, since work doesn’t have to be a source of
fulfillment, but instead can just be a means to an end too. Again, all motives
are good here; but there should be one to make sense out of it.&lt;&#x2F;p&gt;
&lt;p&gt;Also, blocking time for rest and non-work activities is critical; neuroscience
has proven that the brain mostly works under two modes, a focused mode (when we
consciously think about or work on a given problem) and a diffused mode (that
gets triggered whenever we rest, do errands). Getting stuck in one of the two
is the best way to miss better solutions or do subefficient work. It seems
probably obvious to most that the former is needed, but a lot of people tend to
underestimate the usefulness of the latter. A lot of background processing
happens in this mode, and creative solutions can emerge out of this mind
state: this might have happened to you through dreams, reveries, showers or
workout breakthroughs, for instance.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;to-do-what-you-want-to-want-what-you-do&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-do-what-you-want-to-want-what-you-do&quot; aria-label=&quot;Anchor link for: to-do-what-you-want-to-want-what-you-do&quot;&gt;🔗&lt;&#x2F;a&gt;To do what you want, to want what you do&lt;&#x2F;h2&gt;
&lt;p&gt;Despite the apparent logical inversion, I think there’s something that makes
habit recommendations very appealing; in the end, it’s not about reproducing
these success stories but much more about having a high-end lifestyle, in which
you &lt;em&gt;take&lt;&#x2F;em&gt; time for some particular actions and habits, instead of feeling that
you &lt;em&gt;lack&lt;&#x2F;em&gt; time for these. It is much more about being conscious of what really
matters to you, what you really want to do, rather than getting rich and
famous.&lt;&#x2F;p&gt;
&lt;p&gt;I state that the following is one goal of productivity: to be more aware of all
the choices we’re making (what to work on) so that our work is more in
adequation with our principles and real objectives. The definition of work here
is larger than just a job: it could be any activity one practices on their
time. Thus it is about freedom, that is, the way to express what you truly
desire to do and then to do it with purpose. Or in the words of French writer
and journalist Françoise Giroud: happiness is doing what you want, and wanting
what you do. I think other people call this autonomy or integrity; I hope
you get the idea.&lt;&#x2F;p&gt;
&lt;p&gt;In particular, I don’t want others to preconceive life choices for myself. Even
if they have theorized the topic and proven with objective metrics that it
worked for them. So here is my meta-productivity advice: to &lt;strong&gt;try different
methods, to make your own solutions out of them, to choose what works according
to the context&lt;&#x2F;strong&gt;. Even if I need to spend a lot of time on thinking things
through first, before applying my own crafted solutions, it is such a lower
entry cost than doing erratic stuff without purpose and realize later I lost my
time. Of course, I might not find the best solution on the first try, but
that’s alright. It might mean I switch routines from one week to the other, or
I don’t have a consistent agenda; that is okay. I can experiment with many
possible ways to do one thing, according to my current context: my state of
mind, geographical location, needs, expectations, levels of energy, unexpected
events popping up throughout the day, political context, really anything. As
long as everything I do is conscious, works for me and makes me feel more
fulfilled, I’ll choose the trade-off of not having perfect control and a
predefined answer to everything.&lt;&#x2F;p&gt;
&lt;p&gt;What some call the (self) review process matters here: one has to make sure
they’re doing their own Right Thing, in terms of process and goals, at periodic
intervals. Otherwise, there’s a risk to get drawn in the froth of the days,
lose sight on what truly matters to us and get lost. During this process, it is
important to pretend you’re an external observer to yourself, so as to avoid
falling into judgement and then feeling overwhelmed or unhappy with yourself.
You can for instance consider you’re a scientific researcher that just tries to
assess hypothesis and confront them with the reality. Or anything else really;
as long as you keep it fun!&lt;&#x2F;p&gt;
&lt;p&gt;With this in mind, productivity has been much less stressful to me, and much
more of an experimental journey. It has ceased being a tyrant always claiming
for more of my time and it now feels more like a companion in the quest for
happiness.&lt;&#x2F;p&gt;
&lt;p&gt;A huge thank you to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;jan.tools&quot;&gt;Jan Keromnes&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;adrian.gaudebert.fr&#x2F;&quot;&gt;Adrian
Gaudebert&lt;&#x2F;a&gt; for proof-reading this and suggesting
improvements.&lt;&#x2F;p&gt;
&lt;p&gt;Photo by &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;photos&#x2F;Gcl6jcB1r9g&quot;&gt;Justin Luebke&lt;&#x2F;a&gt; on
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;unsplash.com&#x2F;&quot;&gt;Unsplash&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus: version 0.11.0</title>
        <published>2017-05-06T20:30:42+00:00</published>
        <updated>2017-05-06T20:30:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-11-0/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-11-0/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-11-0/">&lt;p&gt;L’équipe vient de publier une nouvelle version de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&quot;&gt;Kresus&lt;&#x2F;a&gt;,
un gestionnaire libre de finances personnelles sur lequel je travaille. Pour
rappel, cette application web, basée sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;&quot;&gt;Weboob&lt;&#x2F;a&gt; et
disponible &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.karolak.fr&#x2F;blog&#x2F;2016&#x2F;03&#x2F;18&#x2F;kresus-un-gestionnaire-web-de-finances-personnelles&#x2F;&quot;&gt;de manière
autonome&lt;&#x2F;a&gt;
ou dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt;, vous permet de vous connecter à votre
compte bancaire, de récupérer vos opérations et de les classifier pour savoir
comment vous dépensez votre argent afin de mieux maîtriser vos finances.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;en-resume&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#en-resume&quot; aria-label=&quot;Anchor link for: en-resume&quot;&gt;🔗&lt;&#x2F;a&gt;En résumé&lt;&#x2F;h2&gt;
&lt;p&gt;De nouvelles banques, une expérience utilisateur encore améliorée, un
chargement initial un peu plus rapide, plus de stabilité pour la récupération
des données bancaires, et des simplifications pour l’auto-hébergement au
sommaire de cette version mineure !&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nouvelles-banques-et-support-de-weboob&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nouvelles-banques-et-support-de-weboob&quot; aria-label=&quot;Anchor link for: nouvelles-banques-et-support-de-weboob&quot;&gt;🔗&lt;&#x2F;a&gt;Nouvelles banques et support de Weboob&lt;&#x2F;h3&gt;
&lt;p&gt;Kresus s’appuie sur les épaules du logiciel libre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&quot;&gt;Weboob&lt;&#x2F;a&gt;
pour récupérer les données bancaires.&lt;&#x2F;p&gt;
&lt;p&gt;La version minimale de weboob pour utiliser Kresus est maintenant la &lt;strong&gt;version
1.2&lt;&#x2F;strong&gt;. Cependant, comme nous avons observé que de plus en plus de modules
bancaires ne fonctionnent plus en version 1.2, nous recommandons d’installer la
version de développement pour profiter des mises à jour continues.&lt;&#x2F;p&gt;
&lt;p&gt;Nous avons ajouté le support pour les nouvelles entités bancaires que Weboob
supporte désormais :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Laydernier et Société Marseillais de Crédit (groupe Crédit du Nord)&lt;&#x2F;li&gt;
&lt;li&gt;Les comptes professionnels du Crédit Mutuel de Bretagne&lt;&#x2F;li&gt;
&lt;li&gt;Le Crédit Mutuel du Massif Central&lt;&#x2F;li&gt;
&lt;li&gt;BTP Banque&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Le support des épargnes salariales a été largement augmenté également :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Prado Epargne&lt;&#x2F;li&gt;
&lt;li&gt;Crédit Mutuel Epargne Salariale&lt;&#x2F;li&gt;
&lt;li&gt;CIC Epargne Salariale&lt;&#x2F;li&gt;
&lt;li&gt;BNP Epargne Salariale&lt;&#x2F;li&gt;
&lt;li&gt;Axa Epargne Salariale&lt;&#x2F;li&gt;
&lt;li&gt;Société Générale Epargne Salariale&lt;&#x2F;li&gt;
&lt;li&gt;HSBC Epargne Salariale&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Par ailleurs, le module S2E (qui gère les plans épargne entreprises de
plusieurs banques) a été supprimé ; les accès actuellement configurés seront
migrés automatiquement vers les modules bancaires appropriés.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;amelioration-de-l-interface-utilisateur-et-de-l-experience-utilisateur&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#amelioration-de-l-interface-utilisateur-et-de-l-experience-utilisateur&quot; aria-label=&quot;Anchor link for: amelioration-de-l-interface-utilisateur-et-de-l-experience-utilisateur&quot;&gt;🔗&lt;&#x2F;a&gt;Amélioration de l’interface utilisateur et de l’expérience utilisateur&lt;&#x2F;h3&gt;
&lt;p&gt;Notre travail sur l’interface et l’expérience utilisateur continue :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Il est maintenant possible de cacher le menu, indépendemment de la taille de
l’écran (ce n’était possible que sur mobile jusqu’à présent).&lt;&#x2F;li&gt;
&lt;li&gt;Les dates sont enfin affichées de manière homogène entre les navigateurs, en
fonction de la langue choisie par l’utilisateur.&lt;&#x2F;li&gt;
&lt;li&gt;Les sélecteurs ont été stylisés pour s’afficher de manière uniforme dans tous
les navigateurs.&lt;&#x2F;li&gt;
&lt;li&gt;Les graphiques utilisent maintenant les mêmes couleurs que la page de
rapport.&lt;&#x2F;li&gt;
&lt;li&gt;Les sélecteurs de type et catégories dans la vue des opérations s’ouvrent dès
le premier clic.&lt;&#x2F;li&gt;
&lt;li&gt;Beaucoup de corrections de vocabulaire, d’erreurs de typographie et
d’affichage.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Kresus se chargera également plus rapidement, dorénavant ! Le client a été
allégé en supprimant plusieurs dépendances peu usitées et en minifiant les
fichiers de code, diminuant la taille totale des fichiers que le navigateur
doit charger, ce qui implique un chargement plus rapide. Ce nettoyage des
dépendances s’accompagne d’un travail d’intégration de toutes ces dernières
sous forme de paquets npm. Ceci permettra un suivi plus fin de la mise à jour
de ces dépendances.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stabilite&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#stabilite&quot; aria-label=&quot;Anchor link for: stabilite&quot;&gt;🔗&lt;&#x2F;a&gt;Stabilité&lt;&#x2F;h3&gt;
&lt;p&gt;Côté serveur, l’import des opérations a été amélioré de manière à s’assurer du
bon séquencement de toutes les opérations asynchrones (import de comptes puis
d’opérations). Ceci devrait régler plusieurs problèmes observés d’imports
multiples, d’opérations allouées aux mauvais comptes etc.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;auto-hebergement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#auto-hebergement&quot; aria-label=&quot;Anchor link for: auto-hebergement&quot;&gt;🔗&lt;&#x2F;a&gt;Auto-hébergement&lt;&#x2F;h3&gt;
&lt;p&gt;Il est maintenant possible d’héberger Kresus autrement qu’à la racine d’un
domaine (par exemple &lt;code&gt;https:&#x2F;&#x2F;mondomaine.fr&#x2F;kresus&lt;&#x2F;code&gt;). Pour cela, il faut passer
la variable d’environnement &lt;code&gt;KRESUS_URL_PREFIX&lt;&#x2F;code&gt; à l’application. Cette variable
désigne le chemin d’accès depuis la racine (&lt;code&gt;&#x2F;kresus&lt;&#x2F;code&gt; dans l’exemple).&lt;&#x2F;p&gt;
&lt;p&gt;Le Dockerfile a été amélioré pour couvrir de plus nombreuses dépendances des
modules bancaires par défaut.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;le-mot-de-la-fin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-mot-de-la-fin&quot; aria-label=&quot;Anchor link for: le-mot-de-la-fin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h3&gt;
&lt;p&gt;Merci à tous les contributeurs, et en particulier aux hyperactifs
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nicofrand.eu&quot;&gt;nicofrand&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZeHiro&quot;&gt;ZeHiro&lt;&#x2F;a&gt; pour
avoir écrit ce billet et pour leurs très nombreuses contributions !&lt;&#x2F;p&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions, n’hésitez-pas à
nous le faire savoir, sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tutut.delire.party&#x2F;@kresus&quot;&gt;mastodon&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;kresusapp&quot;&gt;twitter&lt;&#x2F;a&gt;, le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwiirc.com&#x2F;client&#x2F;chat.freenode.net&#x2F;kresus&quot;&gt;canal
IRC&lt;&#x2F;a&gt;, la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framalistes.org&#x2F;sympa&#x2F;info&#x2F;kresus&quot;&gt;liste de
diffusion&lt;&#x2F;a&gt;, ou encore
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasphere.org&#x2F;people&#x2F;315a5640ead10132c4cc2a0000053625&quot;&gt;diaspora&lt;&#x2F;a&gt;  !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus: version 0.10.0</title>
        <published>2017-02-20T11:00:42+00:00</published>
        <updated>2017-02-20T11:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-10-0/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-10-0/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-10-0/">&lt;p&gt;L’équipe de Kresus vient de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, un gestionnaire libre de
finances personnelles sur lequel je travaille. Pour rappel, cette application
web, basée sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;&quot;&gt;Weboob&lt;&#x2F;a&gt; et disponible &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.karolak.fr&#x2F;blog&#x2F;2016&#x2F;03&#x2F;18&#x2F;kresus-un-gestionnaire-web-de-finances-personnelles&#x2F;&quot;&gt;de manière
autonome&lt;&#x2F;a&gt;
ou dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt;, vous permet de vous connecter à votre
compte bancaire, de récupérer vos opérations et de les classifier pour savoir
comment vous dépensez votre argent afin de mieux maîtriser vos finances.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;en-resume&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#en-resume&quot; aria-label=&quot;Anchor link for: en-resume&quot;&gt;🔗&lt;&#x2F;a&gt;En résumé&lt;&#x2F;h2&gt;
&lt;p&gt;Cette nouvelle version apporte de nombreuses améliorations de l’interface
utilisateur et met à niveau la version autonome (en dehors de Cozy) en termes
de fonctionnalités. Merci aux 3 contributeurs de cette nouvelle version, et
aux &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus&#x2F;compare&#x2F;bf048fca9687f139d1a1d670bec0b5ac138448ce...906ffac4d341b4e08bfda9bebe68cf86d1cd29c6&quot;&gt;80
commits&lt;&#x2F;a&gt;
effectués, pour un total de 151 fichiers modifiés, avec 2080 ajouts et 1406
suppressions de lignes de code !&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nouvelles-banques&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nouvelles-banques&quot; aria-label=&quot;Anchor link for: nouvelles-banques&quot;&gt;🔗&lt;&#x2F;a&gt;Nouvelles banques&lt;&#x2F;h3&gt;
&lt;p&gt;Kresus s’appuie sur les épaules du logiciel libre &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;&quot;&gt;Weboob&lt;&#x2F;a&gt;
pour récupérer les données bancaires. Nous avons donc ajouté le support pour
les nouvelles entités que Weboob supporte désormais : la banque &lt;em&gt;Nuger&lt;&#x2F;em&gt; (groupe
&lt;em&gt;Crédit du Nord&lt;&#x2F;em&gt;) et l’assurance vie &lt;em&gt;Spirica&lt;&#x2F;em&gt; (groupe &lt;em&gt;Crédit Agricole&lt;&#x2F;em&gt;).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;version-autonome&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#version-autonome&quot; aria-label=&quot;Anchor link for: version-autonome&quot;&gt;🔗&lt;&#x2F;a&gt;Version autonome&lt;&#x2F;h3&gt;
&lt;p&gt;Suite aux &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.cozycloud.cc&#x2F;post&#x2F;2016&#x2F;11&#x2F;21&#x2F;En-route-vers-Cozy-version-3?lang=fr&quot;&gt;récentes
décisions&lt;&#x2F;a&gt;
de l’équipe CozyCloud, et aux changements techniques qui en résultent, cette
version de Kresus pourrait être la dernière à fonctionner avec Cozy. Cependant,
rien de grave ! D’une part, Kresus continuera de fonctionner tant que la mise à
jour vers la version 3 de Cozy n’aura pas eu lieu. D’autre part, nous mettons
tout en œuvre pour que la version autonome de Kresus, c’est-à-dire celle qui
peut se lancer sans Cozy, soit la plus simple à installer et la plus
fonctionnelle possible, afin que la transition soit très simple.  Par ailleurs,
nous cherchons de l’aide pour &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus&#x2F;issues&#x2F;515&quot;&gt;empaqueter
Kresus&lt;&#x2F;a&gt; dans YunoHost, à bon
entendeur :-)&lt;&#x2F;p&gt;
&lt;p&gt;Pour cela, voici quelques améliorations apportées dans cette version :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Il est désormais possible de changer la langue d’utilisation de Kresus dans
la version autonome, au grand bonheur des francophones, puisque la langue par
défaut était celle de Shakespeare.&lt;&#x2F;li&gt;
&lt;li&gt;Il est désormais possible de configurer un relais SMTP, afin que Kresus
puisse envoyer des emails. Les utilisateurs de la version autonome pourront
désormais profiter des alertes et des rapports emails ! Pour cela, allez dans
la section des Préférences, puis Alertes, et dépliez le petit panneau de
“Configuration” pour régler les paramètres du relais SMTP.&lt;&#x2F;li&gt;
&lt;li&gt;Le fichier README (Lisez-moi, pour les puristes) a été partiellement revu et
mis à jour, pour correspondre plus précisément au processus d’installation.
Installer Kresus en mode autonome est aussi simple qu’installer Weboob et
exécuter &lt;code&gt;npm install -g kresus&lt;&#x2F;code&gt; en ligne de commande !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;amelioration-de-l-interface-utilisateur-et-de-l-experience-utilisateur&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#amelioration-de-l-interface-utilisateur-et-de-l-experience-utilisateur&quot; aria-label=&quot;Anchor link for: amelioration-de-l-interface-utilisateur-et-de-l-experience-utilisateur&quot;&gt;🔗&lt;&#x2F;a&gt;Amélioration de l’interface utilisateur et de l’expérience utilisateur&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Désormais, tous les comptes sont affichés depuis le menu, ainsi que le solde
total des comptes associés à la banque en question, le tout dans une
interface plus légère et plus simple.&lt;&#x2F;li&gt;
&lt;li&gt;Les graphiques ont également subi un coup de peinture,  notamment les
graphiques qui représentent des données sur de longues périodes, pour
lesquels les labels ne se chevaucheront désormais plus. La sélection des
types d’entrées (crédits, débits, ou les deux) pour le graphique par
catégorie a également été simplifiée. Vous pouvez désormais sélectionner le
graphique à afficher par défaut, en utilisant le menu de préférences intégré.&lt;&#x2F;li&gt;
&lt;li&gt;La section des paramètres a été simplifiée, et les paramètres par défaut sont
désormais accessibles depuis les sections qui les concernent. Toujours dans
les paramètres, les IBANs sont désormais affichés plus proprement.&lt;&#x2F;li&gt;
&lt;li&gt;La saisie des montants, lors de recherches, dans les budgets ou lors d’un
ajout manuel d’opérations, a également été revue, puisqu’une icône de signe
accompagne désormais les montants entrés par l’utilisateur.&lt;&#x2F;li&gt;
&lt;li&gt;C’est bientôt le printemps, et la liste des opérations commence déjà à
rayonner de couleurs ! En effet, chaque opération assignée à une catégorie
revêtira la couleur associée à cette catégorie.&lt;&#x2F;li&gt;
&lt;li&gt;Dans la section &lt;em&gt;Doublons&lt;&#x2F;em&gt;, vous pouvez désormais vérifier le libellé
personnalisé d’une opération, en plus de son libellé bancaire, en survolant
l’icône &lt;em&gt;?&lt;&#x2F;em&gt; afin de vous ôter tout doute.&lt;&#x2F;li&gt;
&lt;li&gt;Dans la section &lt;em&gt;Budget&lt;&#x2F;em&gt;, les seuils négatifs sont désormais possibles et
deux nouvelles possibilités d’affichage font leur apparition : la vue en
pourcentages et le fait de pouvoir cacher les catégories sans seuils.&lt;&#x2F;li&gt;
&lt;li&gt;La synchronisation des comptes d’une banque envoie beaucoup moins de données
sur le réseau et est plus fluide à l’affichage.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;mobile&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mobile&quot; aria-label=&quot;Anchor link for: mobile&quot;&gt;🔗&lt;&#x2F;a&gt;Mobile&lt;&#x2F;h3&gt;
&lt;p&gt;Plusieurs améliorations ont été apportées pour rendre l’application plus accessible sur mobile :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Le défilement vertical est désormais utilisable dans le menu.&lt;&#x2F;li&gt;
&lt;li&gt;Les marges et espaces vides entre les différents blocs ont été réduits et
optimisés.&lt;&#x2F;li&gt;
&lt;li&gt;L’affichage du solde, des dépenses, revenus et balance est réorganisé sous
forme de damier au lieu de quatre lignes.&lt;&#x2F;li&gt;
&lt;li&gt;Des menus déroulants sont utilisés pour les sous-menus des sections
paramètres et graphiques au lieu des menus hamburgers.&lt;&#x2F;li&gt;
&lt;li&gt;Les champs du formulaire de recherche ont été réagencés pour être plus
lisibles.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;nouvelles-fonctionnalites&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nouvelles-fonctionnalites&quot; aria-label=&quot;Anchor link for: nouvelles-fonctionnalites&quot;&gt;🔗&lt;&#x2F;a&gt;Nouvelles fonctionnalités&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Pour les utilisateurs de Cozy, une notification est émise par compte
bancaire, et non plus par accès à une banque. Lorsqu’une seule opération a
été importée, son montant est directement affiché dans la notification.&lt;&#x2F;li&gt;
&lt;li&gt;Il arrive que les informations liées aux comptes bancaires changent au cours
du temps (par exemple, le libellé d’un compte peut changer), impliquant des
problèmes de doublons au sein de Kresus. Désormais, un algorithme efficace de
détection de comptes en double a été implémenté, et les comptes ne devraient
plus être mélangés. Le prochain chantier sur le sujet concerne une meilleure
détection automatique des opérations en double.&lt;&#x2F;li&gt;
&lt;li&gt;La gestion de Weboob a été améliorée : les erreurs sont désormais mieux
indiquées, mieux gérées et plus explicites. Les mises à jours des modules
sont également plus robustes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;le-mot-de-la-fin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-mot-de-la-fin&quot; aria-label=&quot;Anchor link for: le-mot-de-la-fin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h3&gt;
&lt;p&gt;Merci à tous les contributeurs, et en particulier aux hyperactifs
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nicofrand.eu&quot;&gt;nicofrand&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZeHiro&quot;&gt;ZeHiro&lt;&#x2F;a&gt; pour
avoir participé à l’écriture de ce billet et pour leurs très nombreuses
contributions !&lt;&#x2F;p&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions, n’hésitez-pas à
nous le faire savoir, par &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;kresusapp&quot;&gt;twitter&lt;&#x2F;a&gt;, le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwiirc.com&#x2F;client&#x2F;chat.freenode.net&#x2F;kresus&quot;&gt;canal
IRC&lt;&#x2F;a&gt;, la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framalistes.org&#x2F;sympa&#x2F;info&#x2F;kresus&quot;&gt;liste de
diffusion&lt;&#x2F;a&gt;, ou encore
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasphere.org&#x2F;people&#x2F;315a5640ead10132c4cc2a0000053625&quot;&gt;diaspora&lt;&#x2F;a&gt;  !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus: version 0.9.0</title>
        <published>2016-10-31T18:30:42+00:00</published>
        <updated>2016-10-31T18:30:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-9-0/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-9-0/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-9-0/">&lt;p&gt;L’équipe de Kresus vient de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, un gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application, basée sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;&quot;&gt;Weboob&lt;&#x2F;a&gt;, est disponible dans
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;en&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; ou
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.karolak.fr&#x2F;blog&#x2F;2016&#x2F;03&#x2F;18&#x2F;kresus-un-gestionnaire-web-de-finances-personnelles&#x2F;&quot;&gt;en dehors&lt;&#x2F;a&gt;
et vous permet de vous connecter à votre compte bancaire, récupérer vos
opérations et les classifier pour savoir où votre argent passe.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kresus-utilise-des-nouveaux-moyens-de-communication-son-facteur-le-deteste-decouvrez-son-secret&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-utilise-des-nouveaux-moyens-de-communication-son-facteur-le-deteste-decouvrez-son-secret&quot; aria-label=&quot;Anchor link for: kresus-utilise-des-nouveaux-moyens-de-communication-son-facteur-le-deteste-decouvrez-son-secret&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus Utilise Des Nouveaux Moyens De Communication, Son Facteur Le Déteste, Découvrez Son Secret&lt;&#x2F;h3&gt;
&lt;p&gt;Kresus prend son envol et a désormais un
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kresus.org&quot;&gt;site web officiel&lt;&#x2F;a&gt; avec une section Foire Aux Questions en
construction ! Des nouveaux moyens de communication ont également été mis en
place : en plus du classique &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwiirc.com&#x2F;client&#x2F;chat.freenode.net&#x2F;kresus&quot;&gt;canal
IRC&lt;&#x2F;a&gt; déjà existant, une
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framalistes.org&#x2F;sympa&#x2F;info&#x2F;kresus&quot;&gt;liste de diffusion&lt;&#x2F;a&gt; a été ouverte
pour les annonces de mises à jour, mais aussi pour faciliter le support à
toutes les étapes, lors de l’installation ou de l’utilisation quotidienne de
Kresus. N’hésitez-pas à vous
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framalistes.org&#x2F;sympa&#x2F;subscribe&#x2F;kresus&quot;&gt;inscrire&lt;&#x2F;a&gt; ! Pour des
interactions plus courtes et pour rester au courant des nouveautés, un
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;kresusapp&quot;&gt;compte twitter&lt;&#x2F;a&gt; a également été ouvert,
n’hésitez-pas à nous envoyer des remarques courtes ou vos messages d’amour, ça
fait toujours plaisir ;-)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;les-nouveautes-de-cette-version&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#les-nouveautes-de-cette-version&quot; aria-label=&quot;Anchor link for: les-nouveautes-de-cette-version&quot;&gt;🔗&lt;&#x2F;a&gt;Les nouveautés de cette version&lt;&#x2F;h3&gt;
&lt;p&gt;Un grand merci aux 4 contributeurs de cette nouvelle version, pour un total de 62 commits !&lt;&#x2F;p&gt;
&lt;h4 id=&quot;nouvelles-banques&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nouvelles-banques&quot; aria-label=&quot;Anchor link for: nouvelles-banques&quot;&gt;🔗&lt;&#x2F;a&gt;Nouvelles banques&lt;&#x2F;h4&gt;
&lt;p&gt;De nombreux nouveaux modules bancaires ont été intégrés dans Kresus :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Amundi&lt;&#x2F;li&gt;
&lt;li&gt;AFER&lt;&#x2F;li&gt;
&lt;li&gt;Banque de Savoie&lt;&#x2F;li&gt;
&lt;li&gt;Crédit agricole Épargne Longue des Salariés&lt;&#x2F;li&gt;
&lt;li&gt;Crédit du nord Plan Épargne Entreprise&lt;&#x2F;li&gt;
&lt;li&gt;Number26&lt;&#x2F;li&gt;
&lt;li&gt;Yomoni&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;budget&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#budget&quot; aria-label=&quot;Anchor link for: budget&quot;&gt;🔗&lt;&#x2F;a&gt;Budget&lt;&#x2F;h4&gt;
&lt;p&gt;Vous pouvez désormais évaluer vos dépenses pour un compte donné, catégorie par
catégorie, et savoir si vous avez dépassé le budget alloué à une catégorie pour
le mois ou combien il vous reste à dépenser.  Il suffit pour ça d’affecter dans
la nouvelle section “Budget” un budget à chaque catégorie et le calcul se fera
automatiquement. Pour vérifier vos transactions des mois précédents, modifiez
la période souhaitée.  Pour accéder rapidement aux transactions affectées à une
catégorie pour la période sélectionnée, cliquez sur l’icône “Recherche”.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;interface-et-experience-utilisateur&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#interface-et-experience-utilisateur&quot; aria-label=&quot;Anchor link for: interface-et-experience-utilisateur&quot;&gt;🔗&lt;&#x2F;a&gt;Interface et expérience utilisateur&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;La section “Catégories” a été revue pour une utilisation plus simple et
rapide : vous pouvez désormais directement modifier le titre d’une catégorie
sans cliquer sur le bouton “Éditer”.&lt;&#x2F;li&gt;
&lt;li&gt;La section “À propos” située jusqu’ici dans la section “Préférences” a été
déplacée dans le menu, tout en bas. Par défaut repliée, cliquez sur la ligne
tout en bas du menu pour ouvrir cette section et accéder aux raccourcis vers
le site web de Kresus, la license, le code source ou encore le blog.&lt;&#x2F;li&gt;
&lt;li&gt;Lorsque vous ajoutez Kresus à l’écran d’accueil de votre smartphone, celui-ci
est détecté comme une application web et la barre de navigation du navigateur
est automatiquement cachée afin de gagner de l’espace (si votre navigateur le
supporte).&lt;&#x2F;li&gt;
&lt;li&gt;L’affichage des détails d’une opération se fait dans une modale sur un
navigateur de bureau.&lt;&#x2F;li&gt;
&lt;li&gt;Les types d’opérations sont désormais triés dans l’ordre alphabétique.&lt;&#x2F;li&gt;
&lt;li&gt;Lorsque vous demandez à effectuer une opération qui prend du temps (comme
importer un nouveau compte), des écrans d’attente vous sont désormais
affichés, vous prévenant qu’il est normal que l’opération prenne un peu de
temps. Un des plus gros problèmes d’expérience utilisateur (et un des plus
vieux trolls du canal IRC de CozyCloud) est ainsi réglé !&lt;&#x2F;li&gt;
&lt;li&gt;Il est désormais possible de naviguer au clavier dans la liste des opérations
afin de modifier le type, l’intitulé ou la catégorie. Pour déplier le menu
déroulant, il suffit d’appuyer sur la touche espace de votre clavier et de
sélectionner le bon type&#x2F;catégorie avec les flèches et valider par la touche
entrée.&lt;&#x2F;li&gt;
&lt;li&gt;Dans la section “Doublons”, il est désormais possible de trouver facilement
plus de doublons en cliquant sur les boutons “En trouver plus&#x2F;moins”.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;acces-multiples-a-une-meme-banque&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#acces-multiples-a-une-meme-banque&quot; aria-label=&quot;Anchor link for: acces-multiples-a-une-meme-banque&quot;&gt;🔗&lt;&#x2F;a&gt;Accès multiples à une même banque&lt;&#x2F;h4&gt;
&lt;p&gt;Kresus ne savait auparavant pas gérer le fait d’avoir plusieurs comptes avec
plusieurs logins &#x2F; mots de passe dans une même banque (par exemple si vous et
votre compagnon.ne êtes tous les deux dans la même banque). C’est désormais un
problème du passé et réglé dans cette version !&lt;&#x2F;p&gt;
&lt;h4 id=&quot;forcer-la-resynchronisation-du-solde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#forcer-la-resynchronisation-du-solde&quot; aria-label=&quot;Anchor link for: forcer-la-resynchronisation-du-solde&quot;&gt;🔗&lt;&#x2F;a&gt;Forcer la resynchronisation du solde&lt;&#x2F;h4&gt;
&lt;p&gt;Si vous observez un écart entre le solde sur le site de votre banque et dans
Kresus, et que vous avez essayé toutes les solutions suivantes pour que le
montant affiché dans Kresus corresponde au montant affiché par la banque :
- Détecter les doublons et les fusionner.
- Supprimer une opération qui serait dans Kresus mais pas sur le site de
votre banque.
- Ajouter manuellement une opération présente sur le site de votre banque
mais pas dans Kresus.&lt;&#x2F;p&gt;
&lt;p&gt;Il existe une nouvelle solution (de dernier recours) qui consiste à
resynchroniser purement et simplement le montant donné par Kresus avec celui
indiqué par votre banque.  Dans les paramètres &amp;gt; Comptes bancaires, sur la
ligne du compte à synchroniser, une nouvelle icône (roue crantée) a fait son
apparition ; en cliquant dessus, vous pourrez automatiquement resynchroniser le
solde de votre compte.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;le-point-sysadmin-devops&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-point-sysadmin-devops&quot; aria-label=&quot;Anchor link for: le-point-sysadmin-devops&quot;&gt;🔗&lt;&#x2F;a&gt;Le point sysadmin &#x2F; devops&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Si vous avez installé Kresus depuis la version précédente, vous avez
probablement dû installer Weboob de manière globale sur votre machine. Comme
c’était une pratique controversée d’un point de vue administration de
système, il est maintenant possible d’installer Weboob de manière locale (par
exemple dans un &lt;code&gt;virtualenv&lt;&#x2F;code&gt;), tout en indiquant à Kresus où se trouve cette
installation locale, à l’aide de la variable d’environnement
&lt;code&gt;KRESUS_WEBOOB_DIR&lt;&#x2F;code&gt; à définir au moment du lancement du serveur :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    $ KRESUS_WEBOOB_DIR=&#x2F;code&#x2F;weboob .&#x2F;bin&#x2F;kresus&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nledez&quot;&gt;@nledez&lt;&#x2F;a&gt; pour cette contribution !&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Pour éviter des erreurs lorsque la récupération de vos opérations est trop
longue (notamment en cas de nombreuses transactions à récupérer), le temps
d’attente du retour (et traitement) des modules Weboob a été augmenté à 5
secondes. Pour les utilisateurs de cozy, il vous faudra cependant également
augmenter le timeout de &lt;code&gt;cozy-proxy&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;maintenance&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#maintenance&quot; aria-label=&quot;Anchor link for: maintenance&quot;&gt;🔗&lt;&#x2F;a&gt;Maintenance&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Presque chaque version de Kresus arrive avec sa réécriture ; cette fois-ci,
c’est presque tout le client qui a été réarrangé à l’aide du framework Redux,
afin d’éviter la duplication d’état et les inconsistances graphiques dans
l’interface.&lt;&#x2F;li&gt;
&lt;li&gt;Diverses améliorations ont été apportées afin de faciliter le développement :
des &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gph.is&#x2F;2eH1UlU&quot;&gt;tests unitaires&lt;&#x2F;a&gt;, des vérifications de cohérence
au moment de la construction binaire, etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;le-mot-de-la-fin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-mot-de-la-fin&quot; aria-label=&quot;Anchor link for: le-mot-de-la-fin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h3&gt;
&lt;p&gt;Merci à tous les contributeurs, et en particulier aux hyperactifs
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nicofrand.eu&quot;&gt;nicofrand&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZeHiro&quot;&gt;ZeHiro&lt;&#x2F;a&gt; pour
avoir participé à l’écriture de ce billet et pour leurs très nombreuses
contributions !&lt;&#x2F;p&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à nous le faire savoir, par
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;kresusapp&quot;&gt;twitter&lt;&#x2F;a&gt;, le
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwiirc.com&#x2F;client&#x2F;chat.freenode.net&#x2F;kresus&quot;&gt;canal IRC&lt;&#x2F;a&gt;,
la &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framalistes.org&#x2F;sympa&#x2F;info&#x2F;kresus&quot;&gt;liste de diffusion&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasphere.org&#x2F;people&#x2F;315a5640ead10132c4cc2a0000053625&quot;&gt;diaspora&lt;&#x2F;a&gt; ou
encore sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum&lt;&#x2F;a&gt; de cozy !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Laverna Webclipper, the story of a WebExtension</title>
        <published>2016-09-18T17:10:42+00:00</published>
        <updated>2016-09-18T17:10:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/laverna-webclipper-webextension/"/>
        <id>https://bouvier.cc/tech/laverna-webclipper-webextension/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/laverna-webclipper-webextension/">&lt;p&gt;Yesterday I’ve spent my afternoon on a very small side-project related to
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;laverna.cc&#x2F;app&quot;&gt;Laverna&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Laverna is an offline-first, no-backend Web application that allows you to
write notes directly from your browser, classify them in notebooks, with a
live-preview Markdown editor and a powerful yet simple tagging system. Besides
being offline-first, it also allows you to sync between different devices,
using &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;dropbox.github.io&#x2F;dropbox-sdk-js&#x2F;&quot;&gt;Dropbox&lt;&#x2F;a&gt; as a backend or your
own instance of a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;remotestorage.io&#x2F;&quot;&gt;RemoteStorage&lt;&#x2F;a&gt; server. All of
this makes it a powerful free and open-source alternative to software like
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.evernote.com&#x2F;&quot;&gt;Evernote&lt;&#x2F;a&gt; or even &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.onenote.com&#x2F;&quot;&gt;Microsoft
OneNote&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-webclipper-for-laverna&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-webclipper-for-laverna&quot; aria-label=&quot;Anchor link for: a-webclipper-for-laverna&quot;&gt;🔗&lt;&#x2F;a&gt;A WebClipper for Laverna&lt;&#x2F;h2&gt;
&lt;p&gt;There was already an official
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;laverna&#x2F;webclipper&quot;&gt;webclipper&lt;&#x2F;a&gt;, but when I’ve tried it, it
didn’t work. Looking at the code and the last commit date, it seemed a bit
deprecated; so I made my own that uses WebExtensions (since I really wanted to
learn a bit more about these), that you can find &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;laverna-webclipper&quot;&gt;here on
Github&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The idea behind a web clipper is very simple: you go on a Web page that
contains some interesting content and you would like to keep it for later (for
example, to read it later, or to keep it as reference). So the addon
introduces a new click button in the browser bar that opens a new Laverna tab
and prefills the field with the parsed content, one-click away from being
saved. This is useful because some read-it-later services can’t have access to
content behind paid-walls, for instance.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;pub&#x2F;demo-laverna-webclipper.webm&quot;&gt;See it in action here.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you’re interested in getting this addon, you can go on the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;laverna-clipper&#x2F;&quot;&gt;official addons
for Firefox
website&lt;&#x2F;a&gt; (as
of the day of this writing, the addon has not been validated yet).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-implementation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-implementation&quot; aria-label=&quot;Anchor link for: the-implementation&quot;&gt;🔗&lt;&#x2F;a&gt;The Implementation&lt;&#x2F;h2&gt;
&lt;p&gt;This project is using &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mozilla&#x2F;readability&quot;&gt;Readability.js&lt;&#x2F;a&gt;
for retrieving the “interesting content” of a page, and then renders it to
Markdown (since Laverna uses this format) thanks to
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neocotic&#x2F;html.md&quot;&gt;html.md&lt;&#x2F;a&gt;. The rest is plumbing :)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.mozilla.org&#x2F;WebExtensions&quot;&gt;WebExtensions&lt;&#x2F;a&gt; are a new safe and
portable way to write addons for Web browsers. Heavily inspired from Chrome’s
Addons APIs, the main thrust is that WebExtensions should Just Work© on any Web
browser supporting them (any Chromium-based, Edge and Firefox, as of today).&lt;&#x2F;p&gt;
&lt;p&gt;This is fantastic news! … when all the browsers will support it. As of today,
this addon will only work on Firefox, and here is why.&lt;&#x2F;p&gt;
&lt;p&gt;First, programming a WebExtension is &lt;em&gt;hard&lt;&#x2F;em&gt;. I mean &lt;strong&gt;really&lt;&#x2F;strong&gt; hard; debugging
it may quickly become a nightmare, because debug messages can appear in the
developer console (for the content script, which is the “client” part of your
addon), or in a specific addon debugger console (for background scripts), or
even in the &lt;code&gt;stdout&lt;&#x2F;code&gt; logs of your browser. Some issues, like parsing errors in
your JavaScript files, may be really hard to find in this context.&lt;&#x2F;p&gt;
&lt;p&gt;Second, at some point in the addon’s workflow, you need to inject the Markdown
content into the Laverna’s text editor. Laverna uses
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;codemirror.net&#x2F;&quot;&gt;CodeMirror&lt;&#x2F;a&gt; for their rich text editor, so dumping the
content is not just as simple as setting the &lt;code&gt;value&lt;&#x2F;code&gt; property of the target
&lt;code&gt;textarea&lt;&#x2F;code&gt;. You need to retrieve the CodeMirror instance somehow and call one of its
methods. The instance is fortunately saved in the
&lt;code&gt;.CodeMirror&lt;&#x2F;code&gt; property of the textarea, so you could retrieve it, if you really
were on the client page. But browsers don’t
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.chrome.com&#x2F;extensions&#x2F;content_scripts#execution-environment&quot;&gt;allow&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;Add-ons&#x2F;WebExtensions&#x2F;Content_scripts#Xray_vision_in_Firefox&quot;&gt;that&lt;&#x2F;a&gt;,
unless modifying the observed page itself, which I didn’t know about when writing this addon.&lt;&#x2F;p&gt;
&lt;p&gt;That being said, Firefox gives you a (hacky) way to do so (through
&lt;code&gt;wrappedJSObject&lt;&#x2F;code&gt;), so you can indeed access the original JS DOM object of the
observed page and retrieve the CodeMirror instance, then call its &lt;code&gt;setValue&lt;&#x2F;code&gt;
method. Pfew! Chrome doesn’t have this hack, which is merely the reason why it
doesn’t work there.&lt;&#x2F;p&gt;
&lt;p&gt;Unrelated to these issues: whenever one clicks on the clipper button, the page
is parsed, which has the unfortunate side-effect of clearing the parsed content
(that’s how Readability works). One can clone the entire DOM to prevent this
issue, but this API is not (yet?) available in WebExtensions, at least under
Firefox. To work around this, the page is reloaded in the background after
you’ve clicked the button. Filthy, right?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;get-in-touch&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#get-in-touch&quot; aria-label=&quot;Anchor link for: get-in-touch&quot;&gt;🔗&lt;&#x2F;a&gt;Get in touch!&lt;&#x2F;h2&gt;
&lt;p&gt;If you have any remarks or suggestions, don’t hesitate to ping me on
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;&quot;&gt;twitter&lt;&#x2F;a&gt; or
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasphere.org&#x2F;people&#x2F;315a5640ead10132c4cc2a0000053625&quot;&gt;diaspora&lt;&#x2F;a&gt;; I
love any kind of feedback, since this is usually the only way to get better and
understand what matters. If you’re interested in contributing to this addon,
let’s get in touch!&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Une image Docker pour Kresus &#x2F; Weboob</title>
        <published>2016-08-29T11:30:42+00:00</published>
        <updated>2016-08-29T11:30:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-weboob-docker/"/>
        <id>https://bouvier.cc/tech/kresus-weboob-docker/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-weboob-docker/">&lt;p&gt;Si vous suivez ce blog, vous avez dû entendre parler de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application, basée sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;&quot;&gt;Weboob&lt;&#x2F;a&gt;, est disponible dans
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;en&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; et vous permet de vous connecter à votre
compte bancaire, récupérer vos opérations et les classifier pour savoir où
votre argent passe.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kresus-sans-cozy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kresus-sans-cozy&quot; aria-label=&quot;Anchor link for: kresus-sans-cozy&quot;&gt;🔗&lt;&#x2F;a&gt;Kresus sans Cozy&lt;&#x2F;h2&gt;
&lt;p&gt;Depuis quelques versions, vous pouvez également lancer Kresus sans avoir à
installer une instance complète de CozyCloud. Toutes les fonctionnalités ne
sont pas présentes, car soit elles ne sont pas implémentées pour le moment (par
exemple, l’envoi d’alertes par emails), soit elles n’ont pas d’équivalents (par
exemple, les notifications dans le dashboard cozy). Mais tout le reste est là,
et c’est une manière simple et rapide d’utiliser Kresus. Un contributeur,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;_nikaro&quot;&gt;Nicolas&lt;&#x2F;a&gt;, a même écrit un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.karolak.fr&#x2F;blog&#x2F;2016&#x2F;03&#x2F;18&#x2F;kresus-un-gestionnaire-web-de-finances-personnelles&#x2F;&quot;&gt;excellent
tutoriel&lt;&#x2F;a&gt;
pour ce mode d’installation ! Merci à lui.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;des-precautions&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-precautions&quot; aria-label=&quot;Anchor link for: des-precautions&quot;&gt;🔗&lt;&#x2F;a&gt;Des précautions&lt;&#x2F;h2&gt;
&lt;p&gt;A savoir : dans la version autonome (ou &lt;em&gt;standalone&lt;&#x2F;em&gt;) de Kresus, il n’y a
aucune couche d’authentification incluse par défaut, vous devez donc l’ajouter
vous-même pour protéger votre accès à Kresus (sinon tous les gens qui
connaissent l’URL de votre Kresus pourront lire vos comptes !). Aussi, aucune
donnée n’est chiffrée dans la version autonome (pas même le mot de passe), donc
isolez et protégez correctement votre instance.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nouveau-une-image-docker-pour-kresus-et-weboob&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nouveau-une-image-docker-pour-kresus-et-weboob&quot; aria-label=&quot;Anchor link for: nouveau-une-image-docker-pour-kresus-et-weboob&quot;&gt;🔗&lt;&#x2F;a&gt;Nouveau : une image Docker pour Kresus et Weboob&lt;&#x2F;h2&gt;
&lt;p&gt;J’ai rajouté récemment, et notablement mis à jour hier soir une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus&#x2F;blob&#x2F;master&#x2F;Dockerfile&quot;&gt;image
Docker&lt;&#x2F;a&gt; qui contient
une version récente de Weboob et lance un Kresus autonome, exposant vers
l’extérieur son port d’écoute (9876 par défaut) et un volume de données. Ce qui
veut dire que vous pouvez maintenant lancer kresus ou weboob en quelques
commandes :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;D’abord, récupérer le dépôt :&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;git clone https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus &amp;amp;&amp;amp; cd kresus&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Une première fois, créer l’image :&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;docker build -t kresus .&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Puis ensuite, autant de fois que vous le voulez, vous pouvez instancier
l’image créée :&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;docker run -p 9876:9876 -v &#x2F;home&#x2F;moi&#x2F;kresus-data:&#x2F;usr&#x2F;data -ti -d kresus --name kresus&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Si vous désirez exposer Kresus sur le web, pensez bien à suivre le tutoriel
de Nicolas pour rajouter une couche d’authentification et un serveur web
proxy.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Suite à ça, vous pouvez ouvrir un navigateur sur &lt;code&gt;http:&#x2F;&#x2F;localhost:9876&lt;&#x2F;code&gt; et
jouer avec Kresus. Par ailleurs, le répertoire &lt;code&gt;&#x2F;home&#x2F;moi&#x2F;kresus-data&lt;&#x2F;code&gt;
contiendra les données, dans cet exemple (et vous pouvez donc supprimer
l’image Docker sans perdre vos données). C’est aussi simple que ça !&lt;&#x2F;p&gt;
&lt;p&gt;Si vous voulez jouer avec les applications de Weboob, il suffit d’ouvrir un
terminal dans le docker qui fait tourner Kresus :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker exec -ti kresus &#x2F;bin&#x2F;bash&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Puis dans le bash ouvert : &lt;code&gt;boobank --help&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;des-idees-de-modifications-pour-la-suite&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#des-idees-de-modifications-pour-la-suite&quot; aria-label=&quot;Anchor link for: des-idees-de-modifications-pour-la-suite&quot;&gt;🔗&lt;&#x2F;a&gt;Des idées de modifications pour la suite&lt;&#x2F;h2&gt;
&lt;p&gt;Si vous êtes intéressés pour contribuer à Kresus et notamment à cette nouvelle
image Docker, voici quelques idées :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;rajouter un &lt;code&gt;cron&lt;&#x2F;code&gt; qui mette à jour Weboob régulièrement.&lt;&#x2F;li&gt;
&lt;li&gt;mettre en place les &lt;em&gt;bonnes pratiques&lt;&#x2F;em&gt; Docker dans ce Dockerfile.&lt;&#x2F;li&gt;
&lt;li&gt;mettre en place un serveur frontal &lt;code&gt;nginx&lt;&#x2F;code&gt; (ou un lien possible) avec un mot
de passe défini par une variable d’environnement défini au moment de &lt;code&gt;docker run&lt;&#x2F;code&gt; (ou quelque autre solution qui permettrait de rajouter une
authentification facilement).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;le-mot-de-la-fin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-mot-de-la-fin&quot; aria-label=&quot;Anchor link for: le-mot-de-la-fin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin !&lt;&#x2F;h2&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à me le faire savoir, sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;kiwiirc.com&#x2F;client&#x2F;chat.freenode.net&#x2F;kresus&quot;&gt;irc&lt;&#x2F;a&gt;, par
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;&quot;&gt;twitter&lt;&#x2F;a&gt;, sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasphere.org&#x2F;people&#x2F;315a5640ead10132c4cc2a0000053625&quot;&gt;diaspora&lt;&#x2F;a&gt; ou sur le
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum&lt;&#x2F;a&gt; de cozy !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus: version 0.8.0</title>
        <published>2016-08-05T19:30:42+00:00</published>
        <updated>2016-08-05T19:30:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-8-0/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-8-0/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-8-0/">&lt;p&gt;Je viens de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application, basée sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;&quot;&gt;Weboob&lt;&#x2F;a&gt;, est disponible dans
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;en&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; et vous permet de vous connecter à votre
compte bancaire, récupérer vos opérations et les classifier pour savoir où
votre argent passe.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;action-requise-pour-les-auto-heberges-installation-de-weboob&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#action-requise-pour-les-auto-heberges-installation-de-weboob&quot; aria-label=&quot;Anchor link for: action-requise-pour-les-auto-heberges-installation-de-weboob&quot;&gt;🔗&lt;&#x2F;a&gt;Action requise pour les auto-hébergés : installation de Weboob&lt;&#x2F;h3&gt;
&lt;p&gt;Avant de passer à la liste détaillée des changements, il y a une procédure de
migration qui nécessitera une action de votre part, si vous êtes auto-hébergés
(c’est-à-dire si vous n’utilisez &lt;strong&gt;pas&lt;&#x2F;strong&gt; d’instance bêta sur l’infrastructure
de CozyCloud). Si vous êtes utilisateur de l’infrastructure de CozyCloud, le
changement devrait avoir été effectué par l’équipe des administrateurs systèmes
de Cozy, et vous pouvez passer à la partie suivante.&lt;&#x2F;p&gt;
&lt;p&gt;Si vous êtes auto-hébergés, il vous faudra &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;install&quot;&gt;installer
Weboob&lt;&#x2F;a&gt; par vos propres moyens et vous assurer que
l’utilisateur qui lance le processus de Kresus ait accès à Weboob. J’ai
personnellement effectué une installation globale. Je &lt;strong&gt;recommande d’installer
la version 1.1 ou supérieure&lt;&#x2F;strong&gt; de Weboob, pour être certain que les modules des
sites ne soient pas dépassés.&lt;&#x2F;p&gt;
&lt;p&gt;Si vous utilisez l’application
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cozy&#x2F;python_cozy_management&quot;&gt;cozy_management&lt;&#x2F;a&gt;, il existe
maintenant une commande permettant d’effectuer l’installation globale de Weboob
telle qu’elle est nécessaire pour que Kresus fonctionne sur votre machine :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cozy_management install_weboob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Un grand merci à &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nicofrand&quot;&gt;nicofrand&lt;&#x2F;a&gt; pour cette
fonctionnalité !&lt;&#x2F;p&gt;
&lt;p&gt;Auparavant, Weboob, le système qui se connecte à votre banque pour récupérer la
liste des comptes et opérations, était installé par Kresus et cela nécessitait
des dépendences externes. Il a été décidé que Weboob devait désormais être
installé au préalable par l’administrateur système : Kresus n’essaiera plus de
l’installer. Cela simplifie beaucoup de choses, notamment en facilitant
la gestion des dépendences nécessaires lors de l’installation.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;la-version-courte&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-version-courte&quot; aria-label=&quot;Anchor link for: la-version-courte&quot;&gt;🔗&lt;&#x2F;a&gt;La version courte&lt;&#x2F;h3&gt;
&lt;p&gt;Pour cette version, beaucoup de changements peu visibles pour l’utilisateur :
c’est beaucoup de nettoyage et de changements structurels dans le code
(séparation du code client en composants logiques et lint complet), qui
devraient faciliter la maintenance et l’amélioration du code par le futur.
Aussi, beaucoup de problèmes relatifs à la détection des doublons et à la
synchronisation automatique des comptes ont été réglés.&lt;&#x2F;p&gt;
&lt;p&gt;Un changement visible et notable : la liste des opérations est désormais
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;status&#x2F;730309653943492612&quot;&gt;beaucoup plus fluide&lt;&#x2F;a&gt;
lors du scroll, même si vous avez des tonnes d’opérations.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;en-cas-de-problemes-de-balances&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#en-cas-de-problemes-de-balances&quot; aria-label=&quot;Anchor link for: en-cas-de-problemes-de-balances&quot;&gt;🔗&lt;&#x2F;a&gt;En cas de problèmes de balances&lt;&#x2F;h3&gt;
&lt;p&gt;Si vous rencontrez des problèmes de synchronisation entre Kresus et votre
banque, par exemple si Kresus affiche des soldes de comptes qui ne
correspondent pas aux montants indiqués sur le site de votre banque, il est
conseillé de vérifier les doublons dans la section correspondante et d’essayer
de les fusionner à la main.&lt;&#x2F;p&gt;
&lt;p&gt;Si malgré la détection de doublons, vous avez encore des problèmes de montant,
laissez un message sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;fil associé&lt;&#x2F;a&gt;
du forum de Cozy ! J’aimerais expérimenter des méthodes plus agressives de
détection automatique de doublons, et cela nécessite de savoir quelles sont les
situations qui posent fréquemment problème.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;les-contributions-en-detail&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#les-contributions-en-detail&quot; aria-label=&quot;Anchor link for: les-contributions-en-detail&quot;&gt;🔗&lt;&#x2F;a&gt;Les contributions en détail&lt;&#x2F;h3&gt;
&lt;p&gt;Un grand merci aux 7 contributeurs de cette nouvelle version, pour un total de
108 commits !&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AwYiss&quot;&gt;@AwYiss&lt;&#x2F;a&gt;, qui avait déjà grandement amélioré
l’interface utilisateur, a frappé de nouveau, en intégrant les préférences au
niveau design, rendant cette partie plus consistente avec le reste de
l’application et très élégante.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nicofrand&quot;&gt;@nicofrand&lt;&#x2F;a&gt; a corrigé des soucis de style
(CSS) lors de l’ajout manuel d’opération.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.openhub.net&#x2F;accounts&#x2F;Bezleputh&quot;&gt;Bezleputh&lt;&#x2F;a&gt; (de la communauté
Weboob) a corrigé un bogue qui empêchait l’import d’opérations, si celles-ci
présentaient des informations manquantes.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;brouberol&quot;&gt;@brouberol&lt;&#x2F;a&gt; a ajouté un Dockerfile (ou
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;brouberol&#x2F;marcel&quot;&gt;RecetteÀMarcel&lt;&#x2F;a&gt; pour les puristes de l’OS
souverain) afin de pouvoir tester Kresus rapidement en production. J’espère
pouvoir écrire un peu plus sur le sujet bientôt.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;PandiPanda69&quot;&gt;@PandiPanda69&lt;&#x2F;a&gt; a effectué une revue du code
avec la sécurité à l’esprit :
&lt;ul&gt;
&lt;li&gt;Correction de bogue : lors de l’import d’une instance, si le fichier JSON
contient des erreurs de syntaxe, ne pas essayer de l’importer.&lt;&#x2F;li&gt;
&lt;li&gt;Ajout de la possibilité de chiffrer l’export de son instance Kresus et
d’importer une instance chiffrée de Kresus. Avec cette nouvelle méthode
d’import, le mot de passe peut être inclus dans le fichier exporté, en
toute sécurité ! (cette fonctionnalité n’est pas encore activée car elle
nécessite une réflexion et des tests approfondis ainsi qu’une
implémentation côté interface)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZeHiro&quot;&gt;@ZeHiro&lt;&#x2F;a&gt;:
&lt;ul&gt;
&lt;li&gt;Amélioration de la visualisation de la liste des opérations sur interface
mobile (en lecture seule pour le moment).&lt;&#x2F;li&gt;
&lt;li&gt;Amélioration sensible des traductions : les notifications et textes des
emails sont désormais traduits en français ou en anglais, selon la langue
choisie dans votre Cozy !&lt;&#x2F;li&gt;
&lt;li&gt;Utilisation de la vraie monnaie du compte, avec le symbole monétaire
associé, dans toute l’interface utilisateur.&lt;&#x2F;li&gt;
&lt;li&gt;Amélioration de la détection manuelle des doublons (deux opérations sont
considérées comme des doublons seulement si leurs types sont identiques).&lt;&#x2F;li&gt;
&lt;li&gt;Suppression de faux positifs dans la détection automatique des doublons
(deux opérations avec la même date, le même montant et le même libellé).&lt;&#x2F;li&gt;
&lt;li&gt;Si votre mot de passe expire, Kresus vous enverra désormais un mail une
et une seule fois pour vous le signaler, et n’importera plus d’opérations
automatiquement jusqu’à la mise à jour du mot de passe (le même comportement
est prévu si le mot de passe devient erroné, s’il n’est pas mis à jour dans
Kresus).&lt;&#x2F;li&gt;
&lt;li&gt;Ajout de la possibilité de supprimer une opération manuellement.
N’utilisez cette fonctionnalité qu’en dernier recours et seulement si la
détection de doublons n’a pas marché !&lt;&#x2F;li&gt;
&lt;li&gt;Fix spécifique à un &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framagit.org&#x2F;bnjbvr&#x2F;kresus&#x2F;issues&#x2F;401&quot;&gt;problème
spécifique&lt;&#x2F;a&gt; de plateforme
sous raspberry pi.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;De manière notable, ZeHiro et moi-même avons contribué ensemble à des
fonctionnalités majeures :
&lt;ul&gt;
&lt;li&gt;Grâce à une implémentation de &lt;em&gt;l’infinite scrolling&lt;&#x2F;em&gt; dans la
liste des opérations, celle-ci est bien plus fluide à s’afficher, même si
vous avez beaucoup d’opérations !&lt;&#x2F;li&gt;
&lt;li&gt;Découpage du code en modules logiques et refactoring pour que le code
client passe le lint (validation statique du style du code). Ce n’est pas
visible pour l’utilisateur, mais ça aide grandement les développeurs en
leur évitant de se poser plein de questions futiles sur le style du code.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&quot;&gt;votre serviteur&lt;&#x2F;a&gt;:
&lt;ul&gt;
&lt;li&gt;utilisation de Weboob au niveau global (voir paragraphe sur la procédure
de migration).&lt;&#x2F;li&gt;
&lt;li&gt;meilleure représentation des erreurs. Normalement, les erreurs devraient
être plus claires à comprendre, côté client comme ou dans les logs côté
serveur, grâce à une meilleure cohérence et à des logs plus détaillés et
facultatifs. Un mode de debugging pour Weboob a été également rajouté, ce
qui est très utile en cas de problèmes de synchronisation avec votre
banque, pour remonter des logs aux développeurs de Weboob !&lt;&#x2F;li&gt;
&lt;li&gt;la récupération automatique des opérations ne s’arrête plus en cas
d’échec. Si les opérations n’étaient plus récupérées automatiquement
toutes les nuits chez vous, c’était peut-être à cause de ce bug.&lt;&#x2F;li&gt;
&lt;li&gt;les graphiques des opérations en valeurs négatives pointent désormais
vers le haut et non plus vers le bas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;le-mot-de-la-fin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-mot-de-la-fin&quot; aria-label=&quot;Anchor link for: le-mot-de-la-fin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h3&gt;
&lt;p&gt;La prochaine version est déjà presque prête et comprend une réécriture presque
complète du client avec une autre technologie (&lt;code&gt;redux&lt;&#x2F;code&gt;). Après cette
réécriture, on devrait plus facilement pouvoir ajouter de nouveau des grosses
fonctionnalités !&lt;&#x2F;p&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à me le faire savoir, par
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;&quot;&gt;twitter&lt;&#x2F;a&gt;, sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasphere.org&#x2F;people&#x2F;315a5640ead10132c4cc2a0000053625&quot;&gt;diaspora&lt;&#x2F;a&gt; ou sur le
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum&lt;&#x2F;a&gt; de cozy !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Making asm.js&#x2F;WebAssembly compilation more parallel in Firefox</title>
        <published>2016-04-22T15:00:42+00:00</published>
        <updated>2016-04-22T15:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/making-asmjs-webassembly-compilation-more-parallel/"/>
        <id>https://bouvier.cc/tech/making-asmjs-webassembly-compilation-more-parallel/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/making-asmjs-webassembly-compilation-more-parallel/">&lt;p&gt;In December 2015, I’ve worked on reducing startup time of asm.js programs in
Firefox by making compilation more parallel. As our
JavaScript engine, Spidermonkey, uses the same compilation pipeline for both
asm.js and WebAssembly, this also benefitted WebAssembly compilation. Now is a
good time to talk about what it meant, how it got achieved and what are the
next ideas to make it even faster.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h1 id=&quot;what-does-it-mean-to-make-a-program-more-parallel&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-does-it-mean-to-make-a-program-more-parallel&quot; aria-label=&quot;Anchor link for: what-does-it-mean-to-make-a-program-more-parallel&quot;&gt;🔗&lt;&#x2F;a&gt;What does it mean to make a program “more parallel”?&lt;&#x2F;h1&gt;
&lt;p&gt;Parallelization consists of splitting a sequential program into smaller
independent tasks, then having them run on different CPU. If your program
is using &lt;code&gt;N&lt;&#x2F;code&gt; cores, it can be up to &lt;code&gt;N&lt;&#x2F;code&gt; times faster.&lt;&#x2F;p&gt;
&lt;p&gt;Well, in theory. Let’s say you’re in a car, driving on a 100 Km long road.
You’ve already driven the first 50 Km in one hour. Let’s say your car can
have unlimited speed from now on. What is the maximal average speed you can
reach, once you get to the end of the road?&lt;&#x2F;p&gt;
&lt;p&gt;People intuitively answer “If it can go as fast as I want, so nearby lightspeed
sounds plausible”. But this is not true! In fact, if you could teleport from
your current position to the end of the road, you’d have traveled 100 Km in one
hour, so your maximal theoritical speed is 100 Km per hour. This result is a
consequence of &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Amdahl%27s_law&quot;&gt;Amdahl’s law&lt;&#x2F;a&gt;.
When we get back to our initial problem, this means you can expect a &lt;code&gt;N&lt;&#x2F;code&gt; times
speedup if you’re running your program with &lt;code&gt;N&lt;&#x2F;code&gt; cores if, and only if your
program can be &lt;strong&gt;entirely&lt;&#x2F;strong&gt; run in parallel. This is usually not the case, and
that is why most wording refers to &lt;em&gt;speedups &lt;strong&gt;up to&lt;&#x2F;strong&gt; N times faster&lt;&#x2F;em&gt;, when it
comes to parallelization.&lt;&#x2F;p&gt;
&lt;p&gt;Now, say your program is already running some portions in parallel. To make it
faster, one can identify some parts of the program that are sequential, and make
them independent so that you can run them in parallel. With respect to our car
metaphor, this means augmenting the portion of the road on which you can run at
unlimited speed.&lt;&#x2F;p&gt;
&lt;p&gt;This is exactly what we have done with parallel compilation of asm.js programs
under Firefox.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;a-quick-look-at-the-asm-js-compilation-pipeline&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-quick-look-at-the-asm-js-compilation-pipeline&quot; aria-label=&quot;Anchor link for: a-quick-look-at-the-asm-js-compilation-pipeline&quot;&gt;🔗&lt;&#x2F;a&gt;A quick look at the asm.js compilation pipeline&lt;&#x2F;h1&gt;
&lt;p&gt;I recommend to read this &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;luke&#x2F;2014&#x2F;01&#x2F;14&#x2F;asm-js-aot-compilation-and-startup-performance&#x2F;&quot;&gt;blog
post&lt;&#x2F;a&gt;.
It clearly explains the differences between JIT (Just In Time) and AOT (Ahead
Of Time) compilation, and elaborates on the different parts of the engines
involved in the compilation pipeline.&lt;&#x2F;p&gt;
&lt;p&gt;As a TL;DR, keep in mind that &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;asmjs.org&#x2F;&quot;&gt;asm.js&lt;&#x2F;a&gt; is a strictly
validated, highly optimizable, typed subset of JavaScript. Once
validated, it guarantees high performance and stability (no garbage collector
involved!). That is ensured by
mapping every single JavaScript instruction of this subset to a few CPU
instructions, if not only a single instruction. This means an asm.js program
needs to get &lt;em&gt;compiled&lt;&#x2F;em&gt; to machine code, that is, translated from JavaScript to
the language your CPU directly manipulates (like what GCC would do for a C++
program). If you haven’t heard, the results are impressive and you can run
&lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;making-asmjs-webassembly-compilation-more-parallel&#x2F;beta.unity3d.com&#x2F;jonas&#x2F;DT2&#x2F;&quot;&gt;video&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.unrealengine.com&#x2F;html5&quot;&gt;games&lt;&#x2F;a&gt; directly in your browser, without
needing to install anything. No plugins. Nothing more than your usual, everyday
browser.&lt;&#x2F;p&gt;
&lt;p&gt;Because asm.js programs can be gigantic in size (in number of functions as well
as in number of lines of code), the first compilation of the entire program is
going to take some time. Afterwards, Firefox uses a caching mechanism that
prevents the need for recompilation and almost instaneously loads the code, so
subsequent loadings matter less*****. The end user will mostly wait for the
first compilation, thus this one needs to be fast.&lt;&#x2F;p&gt;
&lt;p&gt;Before the work explained below, the pipeline for compiling a single function
(out of an asm.js module) would look like this:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;parse the function, and as we parse, emit intermediate representation (IR)
nodes for the compiler infrastructure. SpiderMonkey has several IRs,
including the MIR (middle-level IR, mostly loaded with semantic) and the LIR
(low-level IR closer to the CPU memory representation: registers, stack,
etc.). The one generated here is the MIR. All of this happens on the main
thread.&lt;&#x2F;li&gt;
&lt;li&gt;once the entire IR graph is generated for the function, optimize the MIR
graph (i.e. apply a few optimization passes). Then, generate the LIR graph
before carrying out register allocation (probably the most costly task of the
pipeline). This can be done on supplementary helper threads, as the MIR
optimization and LIR generation for a given function doesn’t depend on other
ones.&lt;&#x2F;li&gt;
&lt;li&gt;since functions can call between themselves within an asm.js module, they
need references to each other. In assembly, a reference is merely an offset
to somewhere else in memory. In this initial implementation, code generation
is carried out on the main thread, at the cost of speed but for the sake of
simplicity.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So far, only the MIR optimization passes, register allocation and LIR
generation were done in parallel. Wouldn’t it be nice to be able to do more?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;*&lt;&#x2F;strong&gt; There are conditions for benefitting from the caching mechanism. In
particular, the script should be loaded
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Games&#x2F;Techniques&#x2F;Async_scripts&quot;&gt;asynchronously&lt;&#x2F;a&gt;
and it should be of a consequent size.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;doing-more-in-parallel&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#doing-more-in-parallel&quot; aria-label=&quot;Anchor link for: doing-more-in-parallel&quot;&gt;🔗&lt;&#x2F;a&gt;Doing more in parallel&lt;&#x2F;h1&gt;
&lt;p&gt;Our goal is to make more work in parallel: so can we take out MIR generation
from the main thread? And we can take out code generation as well?&lt;&#x2F;p&gt;
&lt;p&gt;The answer happens to be &lt;em&gt;yes&lt;&#x2F;em&gt; to both questions.&lt;&#x2F;p&gt;
&lt;p&gt;For the former, instead of emitting a MIR graph as we parse the function’s
body, we emit a small, compact, pre-order representation of the function’s
body. In short, a new IR. As work was starting on
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;webassembly&#x2F;design&quot;&gt;WebAssembly&lt;&#x2F;a&gt; (wasm) at this time, and
since asm.js semantics and wasm semantics mostly match, the IR could just be
the wasm
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;WebAssembly&#x2F;design&#x2F;blob&#x2F;master&#x2F;BinaryEncoding.md&quot;&gt;encoding&lt;&#x2F;a&gt;,
consisting of the wasm opcodes plus a few specific asm.js ones*. Then, wasm
is translated to MIR in another thread.&lt;&#x2F;p&gt;
&lt;p&gt;Now, instead of parsing and generating MIR in a single pass, we would now parse
and generate wasm IR in one pass, and generate the MIR out of the wasm IR in
another pass. The wasm IR is very compact and much cheaper to generate than a
full MIR graph, because generating a MIR graph needs some algorithmic work,
including the creation of Phi nodes (join values after any form of branching).
As a result, it is expected that compilation time won’t suffer.  This was a
large refactoring: taking every single asm.js instructions, and encoding them
in a compact way and later decode these into the equivalent MIR nodes.&lt;&#x2F;p&gt;
&lt;p&gt;For the second part, could we generate code on other threads? One structure in
the code base, the &lt;em&gt;MacroAssembler&lt;&#x2F;em&gt;, is used to generate all the code and it
contains all necessary metadata about offsets. By adding more metadata there to
abstract internal calls &lt;strong&gt;**&lt;&#x2F;strong&gt;, we can describe the new scheme in terms of a
classic functional &lt;code&gt;map&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;reduce&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the wasm IR is sent to a thread, which will return a MacroAssembler. That
is a &lt;code&gt;map&lt;&#x2F;code&gt; operation, transforming an array of wasm IR into an array of
MacroAssemblers.&lt;&#x2F;li&gt;
&lt;li&gt;When a thread is done compiling, we merge its MacroAssembler into one big
MacroAssembler. Most of the merge consists in taking all the offset metadata
in the thread MacroAssembler, fixing up all the offsets, and concatenate the
two generated code buffers. This is equivalent to a &lt;code&gt;reduce&lt;&#x2F;code&gt; operation,
merging each MacroAssembler within the module’s one.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;At the end of the compilation of the entire module, there is still some light
work to be done: offsets of internal calls need to be translated to their
actual locations. All this work has been done in &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=1181612&quot;&gt;this bugzilla
bug&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;*&lt;&#x2F;strong&gt; In fact, at the time when this was being done, we used a different
superset of wasm. Since then, work has been done so that our asm.js frontend is
really just another wasm emitter.&lt;&#x2F;p&gt;
&lt;p&gt;**** ** referencing functions by their appearance order index in the module,
rather than an offset to the actual start of the function. This order is indeed
stable, from a function to the other.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;results&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#results&quot; aria-label=&quot;Anchor link for: results&quot;&gt;🔗&lt;&#x2F;a&gt;Results&lt;&#x2F;h1&gt;
&lt;p&gt;Benchmarking has been done on a Linux x64 machine with 8 cores clocked at 4.2
Ghz.&lt;&#x2F;p&gt;
&lt;p&gt;First, compilation times of a few asm.js massive games:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;beta.unity3d.com&#x2F;jonas&#x2F;DT2&#x2F;&quot;&gt;DeadTrigger2&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;beta.unity3d.com&#x2F;jonas&#x2F;AngryBots&#x2F;&quot;&gt;AngryBots&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lukewagner&#x2F;PlatformerGamePacked&quot;&gt;Platformer game&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.unrealengine.com&#x2F;html5&quot;&gt;Tappy Chicken&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The X scale is the compilation time in seconds, so lower is better. Each value
point is the best one of three runs. For the new scheme, the corresponding
relative speedup (in percentage) has been added:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;making-asmjs-webassembly-compilation-more-parallel&#x2F;2016-04-22_parallelization-times.png&quot; alt=&quot;Compilation times of various benchmarks&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For all games, compilation is much faster with the new parallelization scheme.&lt;&#x2F;p&gt;
&lt;p&gt;Now, let’s go a bit deeper. The Linux CLI tool &lt;code&gt;perf&lt;&#x2F;code&gt; has a &lt;code&gt;stat&lt;&#x2F;code&gt; command
that gives you an average of the number of utilized CPUs during the program
execution. This is a great measure of threading efficiency: the more a CPU is
utilized, the more it is not idle, waiting for other results to come, and thus
useful. For a constant task execution time, the more utilized CPUs, the more
likely the program will execute quickly.&lt;&#x2F;p&gt;
&lt;p&gt;The X scale is the number of utilized CPUs, according to the &lt;code&gt;perf stat&lt;&#x2F;code&gt;
command, so higher is better. Again, each value point is the best one of three
runs.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;making-asmjs-webassembly-compilation-more-parallel&#x2F;2016-04-22_parallelization-cpu-utilized.png&quot; alt=&quot;CPU utilized on DeadTrigger2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;With the older scheme, the number of utilized CPUs quickly rises up from 1 to 4
cores, then more slowly from 5 cores and beyond. Intuitively, this means that
with 8 cores, we almost reached the theoritical limit of the portion of the
program that can be made parallel (not considering the overhead introduced by
parallelization or altering the scheme).&lt;&#x2F;p&gt;
&lt;p&gt;But with the newer scheme, we get much more CPU usage even after 6 cores! Then
it slows down a bit, although it is still more significant than the slow rise
of the older scheme. So it is likely that with even more threads, we could have
even better speedups than the one mentioned beforehand. In fact, we have moved
the theoritical limit mentioned above a bit further: we have expanded the
portion of the program that can be made parallel. Or to keep on using the
initial car&#x2F;road metaphor, we’ve shortened the constant speed portion of the
road to the benefit of the unlimited speed portion of the road, resulting in a
shorter trip overall.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;future-steps&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#future-steps&quot; aria-label=&quot;Anchor link for: future-steps&quot;&gt;🔗&lt;&#x2F;a&gt;Future steps&lt;&#x2F;h1&gt;
&lt;p&gt;Despite these improvements, compilation time can still be a pain, especially on
mobile. This is mostly due to the fact that we’re running a whole multi-million
line codebase through the backend of a compiler to generate optimized code.
Following this work, the next bottleneck during the compilation process is
parsing, which matters for asm.js in particular, which source is plain text.
Decoding WebAssembly is an order of magnitude faster though, and it can be made
even faster. Moreover, we have even more load-time optimizations coming down
the pipeline!&lt;&#x2F;p&gt;
&lt;p&gt;In the meanwhile, we keep on improving the WebAssembly backend. Keep track of
our progress on &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bugzilla.mozilla.org&#x2F;show_bug.cgi?id=1188259&quot;&gt;bug
1188259&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Previous writings about Mozilla work</title>
        <published>2016-03-09T18:00:42+00:00</published>
        <updated>2016-03-09T18:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/previous-writing-about-mozilla-work/"/>
        <id>https://bouvier.cc/tech/previous-writing-about-mozilla-work/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/previous-writing-about-mozilla-work/">&lt;p&gt;I am currently a compiler engineer at Mozilla corporation, the company making
the Firefox browser among else. Our JavaScript virtual machine, Spidermonkey,
is split in several tiers, including an highly optimizing Just-In-Time (JIT)
compiler able to compile JavaScript to assembly at runtime. My previous work
has involved efficiently compiling Float32 arithmetic to hardware instructions
and implement a new SIMD API for the Web.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;about-float32-optimizations&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#about-float32-optimizations&quot; aria-label=&quot;Anchor link for: about-float32-optimizations&quot;&gt;🔗&lt;&#x2F;a&gt;About Float32 optimizations&lt;&#x2F;h2&gt;
&lt;p&gt;The full blog post is
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;javascript&#x2F;2013&#x2F;11&#x2F;07&#x2F;efficient-float32-arithmetic-in-javascript&#x2F;&quot;&gt;there&lt;&#x2F;a&gt;.
It has been written in November 2013.&lt;&#x2F;p&gt;
&lt;p&gt;The main idea is that if you have float32 inputs to an operation; and you cast
them to doubles; and you apply an arithmetic operation to these inputs; and you
cast the result back to a float32, then you’d have the same result as if you
did the entire computation with float32 values and operations.&lt;&#x2F;p&gt;
&lt;p&gt;So we’ve introduced an operation in JavaScript that converts a Number to its
closest float32 IEEE754 representation: &lt;code&gt;Math.fround&lt;&#x2F;code&gt;. Said differently, the
above equivalence says that:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; xf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Math&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;fround&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; yf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Math&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;fround&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; Math&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;fround&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;xf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; yf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;&#x2F;&#x2F; For all x, y that can be represented exactly as float32:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;assert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Yes, &lt;code&gt;===&lt;&#x2F;code&gt;. The same &lt;code&gt;===&lt;&#x2F;code&gt; you’ve been told &lt;strong&gt;not&lt;&#x2F;strong&gt; to use for floating-point
Numbers. But here, we have &lt;em&gt;bitwise&lt;&#x2F;em&gt; equality, so we can use strict equality*.&lt;&#x2F;p&gt;
&lt;p&gt;Processors have special instructions for carrying out float32 arithmetic, which
have higher throughput than the equivalent double ones. With this result in
mind, we could add a pass that would spot opportunities where the computations
are equivalent (thanks to &lt;code&gt;Math.fround&lt;&#x2F;code&gt; hints) and emit float32 instructions
instead of double instructions. This sped up a some numerical applications and
games engines by a few points.&lt;&#x2F;p&gt;
&lt;p&gt;* a careful reader would object that this is wrong for &lt;code&gt;x = y = NaN&lt;&#x2F;code&gt;, which
I’ve put away for the sake of simplicity.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;about-simd-js&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#about-simd-js&quot; aria-label=&quot;Anchor link for: about-simd-js&quot;&gt;🔗&lt;&#x2F;a&gt;About SIMD.js&lt;&#x2F;h2&gt;
&lt;p&gt;The full blog post is
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;javascript&#x2F;2015&#x2F;03&#x2F;10&#x2F;state-of-simd-js-performance-in-firefox&#x2F;&quot;&gt;there&lt;&#x2F;a&gt;.
It has been written in March 2015.&lt;&#x2F;p&gt;
&lt;p&gt;Nowadays, processors have instructions sets that allow them to execute several
simple arithmetic operations at once. For instance, let’s say you have two
arrays of integers and you want to add each element to the corresponding one in
the other array. If both arrays have size &lt;code&gt;N&lt;&#x2F;code&gt;, this means you’ll have to carry
out &lt;code&gt;N&lt;&#x2F;code&gt; scalar additions. But processors can actually group these into bundles
of several additions, with SIMD; for the case of 32-bits wide integers, on most
modern processors, you need at most &lt;code&gt;Math.ceil(N &#x2F; 4)&lt;&#x2F;code&gt; instructions. The blog
post details what SIMD.js is and what bottlenecks we hit during implementation.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;This was a small reminder about previously written blog posts. If you’re into
JavaScript, compilers or low-level optimization, I can only recommend you to go
read the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;javascript&#x2F;&quot;&gt;Mozilla’s JavaScript blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>A Tale Of Linux On The Desktop</title>
        <published>2016-01-27T21:00:42+00:00</published>
        <updated>2016-01-27T21:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/installing-linux/"/>
        <id>https://bouvier.cc/tech/installing-linux/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/installing-linux/">&lt;p&gt;So I’ve received a new desktop machine at home, on which only
Windows 10 was installed. I’ve decided to install Linux, for my day-to-day
hacking.  Unfortunately, when I’ve plugged the Ubuntu (nobody’s perfect) USB
drive to my computer, I had the surprise to see a black screen showing up just
after booting, and nothing else. Here are some notes taken during the
installation of Linux on this machine.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;installing-linux&#x2F;2016-01-27_installing-linux-twitter.png&quot; alt=&quot;Twitter fame&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;graphics-not-working&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#graphics-not-working&quot; aria-label=&quot;Anchor link for: graphics-not-working&quot;&gt;🔗&lt;&#x2F;a&gt;Graphics not working&lt;&#x2F;h2&gt;
&lt;p&gt;Graphics don’t work, but we can still install Ubuntu in non-graphic mode
with an &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.ubuntu.com&#x2F;download&#x2F;alternative-downloads&quot;&gt;alternate install
image&lt;&#x2F;a&gt;, namely the
network installer. Let’s try that.&lt;&#x2F;p&gt;
&lt;p&gt;The machine has a Nvidia graphics card, so the open-source Nouveau graphics
driver is used by default. Suspecting proprietary drivers might solve the
problem, I decide to download them. Then, to my greatest surprise, I find out
network isn’t working, be it the wireless network or Ye Olde Ethernet network.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ethernet-not-working&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ethernet-not-working&quot; aria-label=&quot;Anchor link for: ethernet-not-working&quot;&gt;🔗&lt;&#x2F;a&gt;Ethernet not working&lt;&#x2F;h2&gt;
&lt;p&gt;The computer vendor’s website says the network card is an Atheros Killer 2400.
Looking that up on the web with my favorite &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;duckduckgo.com&quot;&gt;search
engine&lt;&#x2F;a&gt;, this &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;askubuntu.com&#x2F;questions&#x2F;670347&#x2F;is-there-any-way-to-install-atheros-e2400-drivers&quot;&gt;StackOverflow
page&lt;&#x2F;a&gt;
showed up. The solution to make ethernet work at the end of the installation is
the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;modprobe alx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo 1969 e0a1 &amp;gt; &#x2F;sys&#x2F;bus&#x2F;pci&#x2F;drivers&#x2F;alx&#x2F;new_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This enables the module &lt;code&gt;alx&lt;&#x2F;code&gt; and registers the device to the module. Now
ethernet is working. Fiuu. Let’s keep moving.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;install-all-the-drivers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#install-all-the-drivers&quot; aria-label=&quot;Anchor link for: install-all-the-drivers&quot;&gt;🔗&lt;&#x2F;a&gt;Install All The Drivers!&lt;&#x2F;h2&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;help.ubuntu.com&#x2F;community&#x2F;BinaryDriverHowto&#x2F;Nvidia&quot;&gt;ubuntu’s nvidia troubleshooting
page&lt;&#x2F;a&gt; gives you a
nice tool that show you what drivers are adapted to your hardware:
&lt;code&gt;ubuntu-drivers&lt;&#x2F;code&gt;. Here’s an output example given by this command:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ sudo ubuntu-drivers devices&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;== &#x2F;sys&#x2F;devices&#x2F;pci0000:00&#x2F;0000:00:01.0&#x2F;0000:01:00.0 ==&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vendor   : NVIDIA Corporation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;modalias : pci:v000010DEd00000FE9sv0000106Bsd00000130bc03sc00i00&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;driver   : xserver-xorg-video-nouveau - distro free builtin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;driver   : nvidia-340-updates - distro non-free&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;driver   : nvidia-340 - distro non-free&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;driver   : nvidia-352 - distro non-free recommended&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;driver   : nvidia-352-updates - distro non-free&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So this tells me what the recommanded driver for my nvidia card is. For bonus
credit, it also shows me a recommended driver for the builtin WiFi card. Once
I’ve installed it, it has been working like a charm!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;moar-graphics-settings&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#moar-graphics-settings&quot; aria-label=&quot;Anchor link for: moar-graphics-settings&quot;&gt;🔗&lt;&#x2F;a&gt;Moar graphics settings&lt;&#x2F;h2&gt;
&lt;p&gt;After the nvidia driver has been installed, a
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;help.ubuntu.com&#x2F;community&#x2F;BinaryDriverHowto&#x2F;Nvidia#Screen_Blanks.2FMonitor_Turns_Off&quot;&gt;tweak&lt;&#x2F;a&gt;
was needed to ensure the driver outputs video on the DVI port instead of the
VGA port. Beforehand, the &lt;code&gt;xorg.conf&lt;&#x2F;code&gt; file was generated thanks to the
&lt;code&gt;nvidia-xsettings&lt;&#x2F;code&gt; command.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;final-boss-uefi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#final-boss-uefi&quot; aria-label=&quot;Anchor link for: final-boss-uefi&quot;&gt;🔗&lt;&#x2F;a&gt;Final boss: UEFI&lt;&#x2F;h2&gt;
&lt;p&gt;Now that all minimal drivers are correctly installed and configured, let’s try
to reboot. Although I’ve installed the grub bootloader on the main disk, I
can’t find a way to access it, even by trying all the lines in the boot menu.&lt;&#x2F;p&gt;
&lt;p&gt;The reason is that I’ve boot up the USB drive in legacy mode, which is not UEFI
mode. As a matter of fact, Ubuntu has been installed in legacy mode but the
machine is booting with UEFI, so Linux can’t be seen from the bootloader.&lt;&#x2F;p&gt;
&lt;p&gt;Fortunately, this is Linux, and everything that has been done can be undone. If
you can find a way to boot with UEFI &lt;strong&gt;and&lt;&#x2F;strong&gt; log in under Linux (maybe
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;help.ubuntu.com&#x2F;community&#x2F;BasicChroot&quot;&gt;chrooting&lt;&#x2F;a&gt;), then you can
follow &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;help.ubuntu.com&#x2F;community&#x2F;UEFI#Converting_Ubuntu_into_UEFI_mode&quot;&gt;this
procedure&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I couldn’t boot in UEFI mode, but I could run the
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;sourceforge.net&#x2F;p&#x2F;boot-repair-cd&#x2F;home&#x2F;Home&#x2F;&quot;&gt;Boot-Repair-Disk&lt;&#x2F;a&gt; on USB
as UEFI, so I’ve followed the procedure there and converted my installation
into UEFI mode.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;linux-after-all&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#linux-after-all&quot; aria-label=&quot;Anchor link for: linux-after-all&quot;&gt;🔗&lt;&#x2F;a&gt;Linux After All&lt;&#x2F;h2&gt;
&lt;p&gt;And here we are, with Linux working out of the box^W^W^W^W. So yes, 2016 will
be another year of Linux on the desktop for me; but it still feels unlikely for
a newcomer to install Ubuntu and see it Just Work on any given machine, so
maybe 2017 will be the year of Linux on the desktop, but not 2016.&lt;&#x2F;p&gt;
&lt;p&gt;Many thanks to &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;etnbrd&quot;&gt;@etnbrd&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;martiusweb&#x2F;&quot;&gt;@martiusweb&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;padenot&quot;&gt;@padenot&lt;&#x2F;a&gt; for the detailed explanations about
some Linux specifics and for advices.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus: version 0.7.0</title>
        <published>2016-01-18T23:59:42+00:00</published>
        <updated>2016-01-18T23:59:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-7-0/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-7-0/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-7-0/">&lt;p&gt;Je viens de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application, basée sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;weboob.org&#x2F;&quot;&gt;Weboob&lt;&#x2F;a&gt;, est disponible dans
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;en&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; et vous permet de vous connecter à votre
compte bancaire, récupérer vos opérations et les classifier pour savoir où
votre argent passe.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;la-version-courte&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#la-version-courte&quot; aria-label=&quot;Anchor link for: la-version-courte&quot;&gt;🔗&lt;&#x2F;a&gt;La version courte&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Coup de pinceau magistral sur l’interface, merci @AwYiss !&lt;&#x2F;li&gt;
&lt;li&gt;Support de nouvelles banques, merci @ZeHiro !&lt;&#x2F;li&gt;
&lt;li&gt;Possibilité de sélectionner un compte par défaut, merci @nicofrand !&lt;&#x2F;li&gt;
&lt;li&gt;Réparation du lien entre factures et opérations bancaires, merci @ZeHiro !&lt;&#x2F;li&gt;
&lt;li&gt;Couleurs associées aux catégories, merci @nicofrand !&lt;&#x2F;li&gt;
&lt;li&gt;Réparation du module HelloBank.&lt;&#x2F;li&gt;
&lt;li&gt;Mise à jour automatique quotidienne de Weboob.&lt;&#x2F;li&gt;
&lt;li&gt;L’installation sera désormais plus rapide (l’application est précompilée par
les développeurs, et non plus compilée au moment de l’installation).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;les-contributions-en-detail&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#les-contributions-en-detail&quot; aria-label=&quot;Anchor link for: les-contributions-en-detail&quot;&gt;🔗&lt;&#x2F;a&gt;Les contributions en détail&lt;&#x2F;h3&gt;
&lt;p&gt;Un grand merci à tous les contributeurs qui ont été hyperactifs ce mois-ci !&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AwYiss&quot;&gt;@AwYiss&lt;&#x2F;a&gt; a personnalisé et donné un coup de jeune
à toute l’interface ! Notamment, l’interface est maintenant utilisable sur
mobile. Merci @AwYiss!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nicofrand&quot;&gt;@nicofrand&lt;&#x2F;a&gt; a été prolifique :
&lt;ul&gt;
&lt;li&gt;Il y a désormais un bouton “fermer” et un bouton “vider et fermer” dans
la fenêtre de recherche des opérations, qui explicitent mieux les
intentions.&lt;&#x2F;li&gt;
&lt;li&gt;Il est maintenant possible d’éditer les champs personnalisés de connexion
aux banques (par ex. la phrase secrète de connexion, etc.).&lt;&#x2F;li&gt;
&lt;li&gt;Un compte peut désormais être sélectionné comme compte par défaut, dans
les préférences (étoile à côté des comptes). C’est ce compte-là qui
s’affichera en premier quand vous vous connecterez à Kresus.&lt;&#x2F;li&gt;
&lt;li&gt;Kresus a une belle favicon, pour les versions mobiles !&lt;&#x2F;li&gt;
&lt;li&gt;Weboob peut être mis à jour sans qu’aucun compte ne soit présent, grâce à
l’onglet “avancé” affiché lors de l’installation.&lt;&#x2F;li&gt;
&lt;li&gt;Il est désormais possible d’assigner une couleur à une catégorie. Cette
couleur sera utilisée dans les graphiques en barre et en camembert pour
représenter ladite catégorie.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZeHiro&quot;&gt;@ZeHiro&lt;&#x2F;a&gt; a également été très efficace :
&lt;ul&gt;
&lt;li&gt;Il est désormais possible de retirer un libellé personalisé d’une
opération.&lt;&#x2F;li&gt;
&lt;li&gt;Il est possible de quitter le champ de libellé personalisé en pressant
Echap.&lt;&#x2F;li&gt;
&lt;li&gt;Les factures liées par Konnector n’étaient pas récupérées correctement,
c’est maintenant réparé !&lt;&#x2F;li&gt;
&lt;li&gt;Support de quelques nouvelles banques et intégration de toutes les
variantes des banques, avec les icônes associées !&lt;&#x2F;li&gt;
&lt;li&gt;Des opérations peuvent être rajoutées à la main dans un compte. Bien que
cela soit très utile, c’est pour le moment mal géré par la reconnaissance
automatique des opérations, et donc à n’utiliser que si vous savez
vraiment bien ce que vous faites.&lt;&#x2F;li&gt;
&lt;li&gt;Qualité du code : début de lint côté client.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&quot;&gt;votre serviteur&lt;&#x2F;a&gt; :
&lt;ul&gt;
&lt;li&gt;mise à jour du module bancaire HelloBank&lt;&#x2F;li&gt;
&lt;li&gt;fusion automatique des comptes doublons très probables&lt;&#x2F;li&gt;
&lt;li&gt;mise à jour automatique des modules weboob, une fois par jour&lt;&#x2F;li&gt;
&lt;li&gt;possibilité de changer le login d’accès à une banque&lt;&#x2F;li&gt;
&lt;li&gt;amélioration de la qualité du code avec un lint côté serveur&lt;&#x2F;li&gt;
&lt;li&gt;meilleur affichage des erreurs côté client&lt;&#x2F;li&gt;
&lt;li&gt;mise à jour du système de build, des fichiers lisez-moi, etc.&lt;&#x2F;li&gt;
&lt;li&gt;simplification des traductions et ajout d’un script pour vérifier la
cohérence entre les traductions.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Si vous voulez voir encore plus de détails, les commits sont présentés &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;compare&#x2F;2c502f6c32fc6c51b60eae17fd53453343c8e305...f42832a23826ad3f003e84840ae5af59885304a9&quot;&gt;par
là&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;le-mot-de-la-fin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#le-mot-de-la-fin&quot; aria-label=&quot;Anchor link for: le-mot-de-la-fin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h3&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à me le faire savoir, par
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;&quot;&gt;twitter&lt;&#x2F;a&gt; ou sur le
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum&lt;&#x2F;a&gt; de cozy !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Hello Mozilla, world!</title>
        <published>2015-12-31T23:59:42+00:00</published>
        <updated>2015-12-31T23:59:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/hello-mozilla-world/"/>
        <id>https://bouvier.cc/tech/hello-mozilla-world/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/hello-mozilla-world/">&lt;h2 id=&quot;hello-mozilla&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hello-mozilla&quot; aria-label=&quot;Anchor link for: hello-mozilla&quot;&gt;🔗&lt;&#x2F;a&gt;Hello Mozilla!&lt;&#x2F;h2&gt;
&lt;p&gt;Hello world! And in advance, happy new year!&lt;&#x2F;p&gt;
&lt;p&gt;I am going to try to blog more about my work at Mozilla, and this will happen
in this new &lt;code&gt;mozilla&lt;&#x2F;code&gt; category. You can expect technical posts about
SpiderMonkey (the JS virtual machine implementation in Mozilla Firefox),
OdinMonkey &#x2F; asm.js, WebAssembly (wasm), and all things Mozilla in this
category.&lt;&#x2F;p&gt;
&lt;p&gt;Feel free to reach me out via &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt;, and see you
soon!&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>CozyCloud : migrer son instance 2, le retour</title>
        <published>2015-11-19T14:00:42+00:00</published>
        <updated>2015-11-19T14:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/cozycloud-migrer-son-instance-2-le-retour/"/>
        <id>https://bouvier.cc/tech/cozycloud-migrer-son-instance-2-le-retour/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/cozycloud-migrer-son-instance-2-le-retour/">&lt;p&gt;Si vous vous rappelez bien, j’ai &lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;cozycloud-migrer-son-instance-2-le-retour&#x2F;%7Bfilename%7D2015-04-21_cozycloud-migrer-son-instance.md&quot;&gt;déjà écrit un
article&lt;&#x2F;a&gt;
pour expliquer comment migrer son instance &lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;cozycloud-migrer-son-instance-2-le-retour&#x2F;CozyCloud&quot;&gt;https:&#x2F;&#x2F;cozy.io&lt;&#x2F;a&gt; d’un
endroit vers un autre. Ces derniers jours, je me suis rendu compte que mon
serveur personnel était sous-utilisé et qu’il me serait possible d’en prendre
un plus léger et moins cher, d’où la nécessité d’une nouvelle migration d’un
serveur à un autre.&lt;&#x2F;p&gt;
&lt;p&gt;Edit (10 février 2016) : j’ai ajouté la copie des répertoires permanents à
cette procédure, sans avoir pu tester. Vos retours sur cette partie sont les
bienvenus !&lt;&#x2F;p&gt;
&lt;p&gt;Les étapes sont les suivantes :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Récupérer la base de l’ancien Cozy.&lt;&#x2F;li&gt;
&lt;li&gt;Recopier le répertoire de données permanentes des apps.&lt;&#x2F;li&gt;
&lt;li&gt;La mettre en place dans le nouveau Cozy.&lt;&#x2F;li&gt;
&lt;li&gt;Réinstaller les applications.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;recuperer-base-ancien-cozy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#recuperer-base-ancien-cozy&quot; aria-label=&quot;Anchor link for: recuperer-base-ancien-cozy&quot;&gt;🔗&lt;&#x2F;a&gt;Récupérer la base de l’ancien Cozy&lt;&#x2F;h1&gt;
&lt;p&gt;Il s’agit d’un fichier qui contient toutes les données relatives à votre Cozy,
que ce soit des données internes (par exemple, quelles applications
installées) ou propres aux applications (par exemple, vos comptes en banques).&lt;&#x2F;p&gt;
&lt;p&gt;Si votre Cozy est hébergé par CozyCloud (sur
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozycloud.cc&quot;&gt;cozycloud.cc&lt;&#x2F;a&gt; donc), il est possible de demander
l’export de la base de données CouchDB à l’équipe Cozy. Problème réglé.&lt;&#x2F;p&gt;
&lt;p&gt;Si vous êtes auto-hébergé, il va falloir mettre les mains dans le cambouis :&lt;&#x2F;p&gt;
&lt;p&gt;D’abord, réduire la taille de la base de données, c’est-à-dire effectuer un
compactage de la base de données. C’est parti, depuis l’ancien serveur :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # On éteint Cozy pour éviter l&amp;#39;apparition de nouvelles données&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo service supervisor stop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # On fait une sauvegarde de la base, en cas de pépin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    cd &#x2F;var&#x2F;lib&#x2F;couchdb&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo cp cozy.couch cozy.couch.backup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # On compacte la base&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo cozy-monitor compact&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ensuite, récupérer la base elle-même. Celle-ci est contenue dans le répertoire
&lt;code&gt;&#x2F;var&#x2F;lib&#x2F;couchdb&#x2F;&lt;&#x2F;code&gt; et porte le nom de &lt;code&gt;cozy.couch&lt;&#x2F;code&gt;, sauf si vous l’avez
modifié vous-même.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;l-ancien-cozy-etait-installe-par-le-package-debian&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#l-ancien-cozy-etait-installe-par-le-package-debian&quot; aria-label=&quot;Anchor link for: l-ancien-cozy-etait-installe-par-le-package-debian&quot;&gt;🔗&lt;&#x2F;a&gt;L’ancien Cozy était installé par le package Debian&lt;&#x2F;h4&gt;
&lt;p&gt;Si vous avez installé votre serveur avec le package Debian ou Ubuntu, il est
possible d’utiliser l’outil &lt;code&gt;scp&lt;&#x2F;code&gt; pour effectuer cette tâche, en vous
connectant depuis le nouveau serveur vers l’ancien. Si vous utilisez cette
méthode, prenez soin de nommer la version sur le nouveau serveur
&lt;code&gt;cozy.couch.new&lt;&#x2F;code&gt;, c’est important pour la suite.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;l-ancien-cozy-etait-installe-avec-docker&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#l-ancien-cozy-etait-installe-avec-docker&quot; aria-label=&quot;Anchor link for: l-ancien-cozy-etait-installe-avec-docker&quot;&gt;🔗&lt;&#x2F;a&gt;L’ancien Cozy était installé avec Docker&lt;&#x2F;h4&gt;
&lt;p&gt;Si comme moi vous avez préféré jouer avec le feu et utiliser Docker pour
installer votre cozy, il va falloir ruser un peu. Personnellement, j’ai choisi
la méthode &lt;em&gt;malpropre&lt;&#x2F;em&gt;, à savoir exposer la base de données sur le serveur web
pendant un court instant et utiliser &lt;code&gt;wget&lt;&#x2F;code&gt; sur le nouveau cozy. Il est
sûrement possible d’extraire le fichier depuis le Docker vers l’hôte, mais
j’avoue ne pas avoir cherché ; si quelqu’un connaît une méthode, je suis
preneur ! Pour ma méthode « malpropre », il faut modifier le fichier de
configuration de nginx pour donner accès au fichier :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # Copier la base vers &#x2F;var&#x2F;www&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo cp &#x2F;var&#x2F;lib&#x2F;couchdb&#x2F;cozy.couch &#x2F;var&#x2F;www&#x2F;cozy.couch.new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # Donner les droits en lecture à nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo chown www-data:www-data -R &#x2F;var&#x2F;www&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # Editer le fichier de config de nginx avec le meilleur éditeur du monde&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo vim &#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;cozy.conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;J’ai remplacé le bloc &lt;code&gt;location&#x2F; { proxy_set_header ...&lt;&#x2F;code&gt; par le suivant :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    location &#x2F; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        root &#x2F;var&#x2F;www;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        try_files $uri $uri&#x2F; &#x2F;index.html;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Toujours depuis l’ancien serveur, bien penser à relancer nginx :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo service nginx restart&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ensuite, depuis le nouveau serveur, sur lequel je suppose que vous avez
déjà installé le paquet &lt;code&gt;cozy&lt;&#x2F;code&gt; et qu’il tourne correctement :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    cd &#x2F;var&#x2F;lib&#x2F;couchdb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # Stopper supervisor va arrêter tout cozy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo service supervisor stop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo service couchdb stop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo wget https:&#x2F;&#x2F;monanciencozy.tld&#x2F;cozy.couch.new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h1 id=&quot;recopier-les-donnees-permanentes-des-applications&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#recopier-les-donnees-permanentes-des-applications&quot; aria-label=&quot;Anchor link for: recopier-les-donnees-permanentes-des-applications&quot;&gt;🔗&lt;&#x2F;a&gt;Recopier les données permanentes des applications&lt;&#x2F;h1&gt;
&lt;p&gt;Cela a été rajouté depuis l’écriture initiale de ce blog post, il est donc
probable que cela ne fonctionne pas, dans quel cas contactez-moi svp !&lt;&#x2F;p&gt;
&lt;p&gt;Depuis des versions récentes de la plateforme, Cozy autorise les applications à
avoir un répertoire de données permanentes, qui sont conservées même si
l’application a été désinstallée. C’est très pratique pour porter facilement
des applications qui utilisent des fichiers comme mémoire vers Cozy !&lt;&#x2F;p&gt;
&lt;p&gt;Pour porter ce répertoire, voici la procédure à effectuer :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;copier le répertoire sur la machine précédente et le mettre dans un zip, par
exemple:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  # depuis la machine qui héberge l&amp;#39;ancien cozy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  cd &#x2F;usr&#x2F;local&#x2F;var&#x2F;cozy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  zip &#x2F;tmp&#x2F;usr-local-var-cozy.zip -r .&#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;transférer le zip vers le nouveau serveur (avec votre méthode préférée : FTP,
Web, scp, etc.). Par exemple, avec &lt;code&gt;scp&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  # depuis la nouvelle machine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  scp user@ancienne-machine:&#x2F;tmp&#x2F;usr-local-var-cozy.zip &#x2F;tmp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;remplacer le répertoire sur la nouvelle machine:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  # depuis la nouvelle machine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  mkdir -p &#x2F;usr&#x2F;local&#x2F;var&#x2F;cozy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  cd &#x2F;usr&#x2F;local&#x2F;var&#x2F;cozy &amp;amp;&amp;amp; zip backup.zip -r .&#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  unzip &#x2F;tmp&#x2F;usr-local-var-cozy.zip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;mettre-en-place-base-nouveau-cozy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mettre-en-place-base-nouveau-cozy&quot; aria-label=&quot;Anchor link for: mettre-en-place-base-nouveau-cozy&quot;&gt;🔗&lt;&#x2F;a&gt;Mettre en place la base dans le nouveau cozy&lt;&#x2F;h1&gt;
&lt;p&gt;Je suppose que vous avez déjà récupéré la base d’une manière ou d’une autre, et
que celle-ci est déjà présente dans &lt;code&gt;&#x2F;var&#x2F;lib&#x2F;couchdb&lt;&#x2F;code&gt;, sous le nom
&lt;code&gt;cozy.couch.new&lt;&#x2F;code&gt;. Depuis le nouveau serveur, effectuez les commandes suivantes :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        cd &#x2F;var&#x2F;lib&#x2F;couchdb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        # On arrête Cozy (via supervisor) et couchdb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sudo service supervisor stop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sudo service couchdb stop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        # Backup de l&amp;#39;ancienne base&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sudo mv cozy.couch cozy.couch.old&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sudo mv cozy.couch.new cozy.couch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sudo chown -R couchdb:couchdb .&#x2F;cozy.couch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        # On relance le tout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sudo service couchdb start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        sudo service supervisor start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Et voilà ! Après cela, il va falloir attendre quelques minutes que le
contrôleur Cozy relance les applications.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;recuperer-applications-manquantes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#recuperer-applications-manquantes&quot; aria-label=&quot;Anchor link for: recuperer-applications-manquantes&quot;&gt;🔗&lt;&#x2F;a&gt;Réinstaller les applications manquantes&lt;&#x2F;h1&gt;
&lt;p&gt;L’import de la base comprend les données internes à Cozy, notamment les
informations sur les applications installées. Comme on vient d’importer une
base qui vient d’un autre cozy où des applications sont installées, le nouveau
cozy va penser que certaines applications sont présentes sur le disque, alors
qu’elles ne le sont pas. Il est nécessaire d’effectuer une petite réparation
ici, au niveau de la pile logicielle cozy et des applications installées.
Heureusement, l’équipe a pensé à ça et nous a fourni une commande qui permet de
réinstaller les applications utilisateurs. C’est parti, depuis le nouveau
serveur :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # Mettre à jour cozy-monitor (utile pour les image préinstallées)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo npm install -g cozy-monitor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # Mettre à jour l&amp;#39;ensemble de la pile Cozy pour commencer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo cozy-monitor update-all-cozy-stack&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # Réinstaller les applications manquantes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo cozy-monitor reinstall-missing-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;J’ai eu plusieurs erreurs à ce moment-là, souvent liées à des applications qui
n’étaient plus trouvées sur github, ou des erreurs réseaux. En général,
relancer la commande fonctionne, sinon j’ai purement et simplement désinstallé
l’application en question. Par exemple, si l’application plantée était
&lt;a href=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;cozycloud-migrer-son-instance-2-le-retour&#x2F;%7Bfilename%7D2015-11-16_kresus-version-060.md&quot;&gt;Kresus&lt;&#x2F;a&gt;, j’ai simplement effectué&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    sudo cozy-monitor uninstall kresus&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ce n’est pas un problème, car la désinstallation d’une application n’implique
pas la désinstallation des données. Ensuite, il est possible de réinstaller les
applications depuis l’interface du site web.&lt;&#x2F;p&gt;
&lt;p&gt;Pour terminer, il faut mettre à jour les permissions des dossiers contenant les
données persistantes :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   cd &#x2F;usr&#x2F;local&#x2F;var&#x2F;cozy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   # On change les permissions pour chaque dossier. Note, penser à changer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   # le nom de l&amp;#39;application à chaque fois&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   sudo chown -R cozy-nomApp nomApp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h1 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Notons que la migration d’un serveur à l’autre est désormais beaucoup plus
facile qu’auparavant ! Pas besoin de rafistoler les données directement dans la
base, et il existe une commande pour réinstaller les applications
automatiquement. Bien joué, l’équipe Cozy !&lt;&#x2F;p&gt;
&lt;p&gt;J’espère que cette procédure aura marché pour vous, j’ai écrit ces notes
rapidement et de mémoire. Si j’ai oublié quoi que ce soit, n’hésitez pas à me
contacter sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;framasphere.org&#x2F;u&#x2F;bnjbvr&quot;&gt;diaspora&lt;&#x2F;a&gt; ou sur irc (mon nick est
&lt;code&gt;bnjbvr&lt;&#x2F;code&gt;). Si ça a marché et que vous avez apprécié, n’hésitez pas à me le dire
également. ;-)&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus: version 0.6.0</title>
        <published>2015-11-16T10:07:42+00:00</published>
        <updated>2015-11-16T10:07:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-6-0/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-6-0/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-6-0/">&lt;p&gt;Je viens de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application est disponible dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;en&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; et vous
permet de vous connecter à votre compte bancaire, récupérer vos
opérations et les classifier pour savoir où votre argent passe.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;lesgroschangementsdecetteversion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lesgroschangementsdecetteversion&quot; aria-label=&quot;Anchor link for: lesgroschangementsdecetteversion&quot;&gt;🔗&lt;&#x2F;a&gt;Les gros changements de cette version&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Support des banques ING et HSBC (merci &lt;strong&gt;nicofrand&lt;&#x2F;strong&gt; !).&lt;&#x2F;li&gt;
&lt;li&gt;Libellés personnalisés : dans la liste des opérations, il est
possible de renommer une opération en cliquant sur son libellé, en
ajoutant des informations personnalisées dessus. Ce libellé
personnalisé est également pris en compte dans la recherche par
mots-clés (merci &lt;strong&gt;ZeHiro&lt;&#x2F;strong&gt; !).&lt;&#x2F;li&gt;
&lt;li&gt;Notifications par email : Il est maintenant possible d’envoyer des
notifications si le solde d’un compte dépasse ou est en dessous d’un
seuil donné; ou si une nouvelle opération dépasse un certain seuil.
Il est également possible d’envoyer des rapports quotidiens,
hebdomadaires ou mensuels, qui contiennent les nouvelles opérations
importées durant la période. Plus à venir dans les prochaines
versions.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;kresus-version-0-6-0&#x2F;2015-11-16_kresus-060.png&quot; alt=&quot;Capture de Kresus 0.6.0&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tousleschangementsdecetteversion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tousleschangementsdecetteversion&quot; aria-label=&quot;Anchor link for: tousleschangementsdecetteversion&quot;&gt;🔗&lt;&#x2F;a&gt;Tous les changements de cette version&lt;&#x2F;h4&gt;
&lt;p&gt;Merci à tous les contributeurs de cette version, que ce soit en patches
ou en rapports d’erreurs !&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ZeHiro&lt;&#x2F;strong&gt;:
&lt;ul&gt;
&lt;li&gt;Meilleure détection des doublons (moins de faux positifs).&lt;&#x2F;li&gt;
&lt;li&gt;Le tri des opérations &#x2F; catégories etc. est maintenant conscient
de la &lt;em&gt;locale&lt;&#x2F;em&gt; utilisée (les accents sont pris en compte, etc.).&lt;&#x2F;li&gt;
&lt;li&gt;Support des libellés personnalisés (voir ci-dessus).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;nicofrand&lt;&#x2F;strong&gt;:
&lt;ul&gt;
&lt;li&gt;Support des champs personnalisés pour l’identification sur
certaines banques en ligne. Certaines banques demandent la
réponse à une question personnalisée ou la date de naissance,
pour pouvoir s’identifier, en plus du login et du mot de passe.
Cette contribution apporte les bases nécessaires pour supporter
ces champs supplémentaires. En pratique, cela veut dire qu’ING
et HSBC sont maintenant supportés par Kresus !&lt;&#x2F;li&gt;
&lt;li&gt;Le bouton “vider” dans la fenêtre de recherche est maintenant en
orange, pour alerter l’utilisateur.&lt;&#x2F;li&gt;
&lt;li&gt;Ajout d’un bouton “vider et fermer” dans cette même fenêtre,
afin de bien distinguer les deux actions : “vider” efface les
champs du formulaire, “vider et fermer” ferme le formulaire de
recherche.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;babolivier&lt;&#x2F;strong&gt;:
&lt;ul&gt;
&lt;li&gt;Vérification de la présence de &lt;code&gt;virtualenv&lt;&#x2F;code&gt; lors de
l’installation de Weboob, avec fallback sur &lt;code&gt;virtualenv2&lt;&#x2F;code&gt; s’il
est présent.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;dattaz&lt;&#x2F;strong&gt;:
&lt;ul&gt;
&lt;li&gt;Ajout de &lt;code&gt;npm&lt;&#x2F;code&gt; comme dépendance à l’installation Debian
standalone&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;padenot&lt;&#x2F;strong&gt;:
&lt;ul&gt;
&lt;li&gt;Amélioration d’une traduction de chaîne en anglais&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;rlustin&lt;&#x2F;strong&gt;:
&lt;ul&gt;
&lt;li&gt;Suppression des espaces en fin de ligne&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Et les autres ajouts et modifications dans Kresus :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Implémentation des rapports par emails et des alertes par email
(voir ci-dessus).&lt;&#x2F;li&gt;
&lt;li&gt;Possibilité de rechercher les libellés personnalisés, lors d’une
recherche par mots-clés.&lt;&#x2F;li&gt;
&lt;li&gt;Les imports d’instance évitent maintenant de réimporter les données
internes à Kresus et les catégories si elles sont déjà présentes, ce
qui évite des bugs par la suite.&lt;&#x2F;li&gt;
&lt;li&gt;Kresus est capable de détecter si Weboob est installé de manière
globale et l’utiliser de préférence, plutôt que télécharger et
l’installer localement, si c’est possible.&lt;&#x2F;li&gt;
&lt;li&gt;Le démarrage de l’application est plus séquentiel, ce qui évite des
ralentissements au lancement (notamment pour la version standalone)
et implique une meilleure cohérence des données.&lt;&#x2F;li&gt;
&lt;li&gt;Réécriture complète du serveur, pour passer de CoffeeScript à
ECMAScript 6. Le code est maintenant moderne, propre, plus facile à
comprendre et n’utilise plus que JavaScript, de partout ! Cela va
grandement faciliter les mises à jour du serveur.&lt;&#x2F;li&gt;
&lt;li&gt;Comme d’habitude, beaucoup de bugs mineurs ont été écrasés et de
plus petits nettoyages dans le code ont eu lieu.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;lesprochainschantiers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lesprochainschantiers&quot; aria-label=&quot;Anchor link for: lesprochainschantiers&quot;&gt;🔗&lt;&#x2F;a&gt;Les prochains chantiers&lt;&#x2F;h4&gt;
&lt;p&gt;Les prochains chantiers sont les choses sur lesquelles j’aimerais me
pencher pour la (les ?) prochaines versions. Bien sûr, toute
contribution sur ces sujets est plus qu’encouragée et ce sera avec
plaisir que je vous aiderai à parcourir et comprendre le code. Cela
inclut, mais ne se limite pas à :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Une réécriture partielle du code client, pour qu’il soit moins dense
(certains fichiers font plus de 1,000 lignes !) et plus
compartementalisé.&lt;&#x2F;li&gt;
&lt;li&gt;Une meilleure gestion des erreurs affichées à l’utilisateur, pour
qu’elles soient plus faciles à comprendre et à gérer, donc plus
utiles.&lt;&#x2F;li&gt;
&lt;li&gt;Une manière de marquer des paires d’opérations comme n’étant PAS des
doublons, de dé-fusionner des doublons, ainsi qu’une détection
automatique intelligente de la plupart des doublons.&lt;&#x2F;li&gt;
&lt;li&gt;Une catégorisation automatique des opérations (enfin !).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;lemotdelafin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lemotdelafin&quot; aria-label=&quot;Anchor link for: lemotdelafin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h4&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions, n’hésitez
pas à me le faire savoir, par &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;&quot;&gt;twitter&lt;&#x2F;a&gt; ou
sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum&lt;&#x2F;a&gt; de cozy !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus: version 0.5.4</title>
        <published>2015-09-20T18:10:42+00:00</published>
        <updated>2015-09-20T18:10:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-5-4/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-5-4/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-5-4/">&lt;p&gt;Je viens de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application est disponible dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;en&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; et vous
permet de vous connecter à votre compte bancaire, récupérer vos
opérations et les classifier pour savoir où votre argent passe.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;nouveauts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nouveauts&quot; aria-label=&quot;Anchor link for: nouveauts&quot;&gt;🔗&lt;&#x2F;a&gt;Nouveautés&lt;&#x2F;h4&gt;
&lt;p&gt;Encore une autre mise à jour mineure avant de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;issues&#x2F;176&quot;&gt;gros changements
structurels&lt;&#x2F;a&gt; !&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZeHiro&#x2F;&quot;&gt;@ZeHiro&lt;&#x2F;a&gt;: les types des
opérations (carte bleue, chèque, virement, etc.), importés
automatiquement depuis la version précédente, sont maintenant
affichés dans l’interface et peuvent être modifiés à la main !&lt;&#x2F;li&gt;
&lt;li&gt;L’interface utilisateur pour changer le type et la catégorie d’une
opération a été améliorée : ce sont maintenant de vrais boutons qui
permettent cela, et grâce à &lt;strong&gt;ZeHiro&lt;&#x2F;strong&gt;, ces boutons sont mieux
esthétiquement intégrés au reste de l’interface !&lt;&#x2F;li&gt;
&lt;li&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;goofy-bz&quot;&gt;@Goofy&lt;&#x2F;a&gt; pour des corrections de
la traduction française !&lt;&#x2F;li&gt;
&lt;li&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cylwin&quot;&gt;@Cylwin&lt;&#x2F;a&gt; qui a ajouté des liens
vers d’autres applications Cozy (en particulier vers le connecteur
EDF !).&lt;&#x2F;li&gt;
&lt;li&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rgarrigue&quot;&gt;@rgarrigue&lt;&#x2F;a&gt; qui a amélioré le
processus d’installation pour la version &lt;em&gt;standalone&lt;&#x2F;em&gt; (sans Cozy).&lt;&#x2F;li&gt;
&lt;li&gt;Il est maintenant possible de rechercher par type d’opération
également. L’export contient dorénavant les types des opérations et
l’import sait les gérer.&lt;&#x2F;li&gt;
&lt;li&gt;Le fichier d’instructions
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;blob&#x2F;master&#x2F;README.md&quot;&gt;README&lt;&#x2F;a&gt; a
encore été étoffé ! La documentation est un travail de longue
haleine…&lt;&#x2F;li&gt;
&lt;li&gt;Et comme d’habitude, beaucoup de petits bugs ont été résolus : les
exports sont maintenant plus solides; les opérations sont maintenant
triées correctement dans tous les navigateurs; plus de doublons
peuvent être trouvés; les recherches par dates sont correctes,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;commits&#x2F;master&quot;&gt;etc.&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;lemotdelafin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lemotdelafin&quot; aria-label=&quot;Anchor link for: lemotdelafin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h4&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à me le faire savoir, par
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;&quot;&gt;twitter&lt;&#x2F;a&gt; ou sur le
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum&lt;&#x2F;a&gt; de cozy !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Getting Things Done: The Good Parts</title>
        <published>2015-09-08T08:00:42+00:00</published>
        <updated>2015-09-08T08:00:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/getting-things-done-the-good-parts/"/>
        <id>https://bouvier.cc/tech/getting-things-done-the-good-parts/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/getting-things-done-the-good-parts/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;getting-things-done-the-good-parts&#x2F;2015-09-08_typewriter.jpg&quot; alt=&quot;Getting Things Done: The Good Parts&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I’ve finished the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gettingthingsdone.com&#x2F;&quot;&gt;Getting Things Done&lt;&#x2F;a&gt;
book a few weeks ago and wanted to write up a bit about it, as a summary
of all the great big ideas I’ve found in that book.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stopthejuggling&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#stopthejuggling&quot; aria-label=&quot;Anchor link for: stopthejuggling&quot;&gt;🔗&lt;&#x2F;a&gt;Stop the juggling&lt;&#x2F;h3&gt;
&lt;p&gt;It often happens that we get a lot of thoughts about plenty of things
we’d like to do later along the day. Call X. Buy Y. Think about Z. The
most common reaction to this flow of ideas is to say “alright, I’ll do
it later, but I really &lt;em&gt;must&lt;&#x2F;em&gt; not forget about it”. That’s the best way
to actually forget about this thing, to be stressed and to feel like we
should spend all our time doing it, &lt;em&gt;right now&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I really liked a metaphor I’ve read from the free version of the
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.passionplanner.com&#x2F;&quot;&gt;Passion Planner&lt;&#x2F;a&gt;, which was about
juggling balls. If you have one or two in your hands, it’s rather easy.
With three balls, it gets a bit challenging, but you can handle that
within a few hours. Four, five, six balls, you really need to practice
before achieving it flowlessly. Seven and more? It sounds undoable to
most of us, while we actually still try to do it. How mad is that?&lt;&#x2F;p&gt;
&lt;p&gt;The same thing happens with all the thoughts you have in your head.
Remembering about one or two works fine, but beyond, it’s both stressing
and challenging. The solution is quite easy, though: whenever you get
distracted by a thought, &lt;strong&gt;note it down&lt;&#x2F;strong&gt; on a piece of paper, any
post-it or todo-list software and get back to it later. It works fine to
have an &lt;em&gt;inbox&lt;&#x2F;em&gt; list that receives all these ideas, without more
pondering or organisation.&lt;&#x2F;p&gt;
&lt;p&gt;You can get to classify these things later, at some specific times and
quite regularily (e.g. at the end of the hour, day, or week, depending
on your production rate :-)).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bereminded&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bereminded&quot; aria-label=&quot;Anchor link for: bereminded&quot;&gt;🔗&lt;&#x2F;a&gt;Be reminded&lt;&#x2F;h3&gt;
&lt;p&gt;Some tasks have to be done at specific dates, or can’t be done right
now, or aren’t urgent right now, or have to be done by other people.
Forget about them, until you can’t forget about them anymore. For that
purpose, using any agenda software works like a charm: &lt;strong&gt;add a due
date&lt;&#x2F;strong&gt; or a reminder to a task you have to do later, to be sure to not
forget about it.&lt;&#x2F;p&gt;
&lt;p&gt;For tasks that are beyond your control (because they need actions from
somebody else), estimate how much time you’re willing to wait before you
should try to get things moving forward and contact back the person
who’s in charge. When you’re not sure about how much, ask the task’s
owner when you should get back to them. It gives a feeling of
professionalism and it gives you a date for the reminder to set in your
agenda software.&lt;&#x2F;p&gt;
&lt;p&gt;Tasks that belong to this kind should be moved from the &lt;em&gt;Inbox&lt;&#x2F;em&gt; to a
&lt;em&gt;Waiting For&lt;&#x2F;em&gt; category of your todo-list (or binders, or anything you
want), and be forgotten until the reminder triggers.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dontthrowawaythecrazyones&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dontthrowawaythecrazyones&quot; aria-label=&quot;Anchor link for: dontthrowawaythecrazyones&quot;&gt;🔗&lt;&#x2F;a&gt;Don’t throw away the crazy ones&lt;&#x2F;h3&gt;
&lt;p&gt;If you have a stub idea for a new project, or an item you’d like to buy
but obviously not right now, or some movie or TV show you just heard
about and would like to watch in the future, &lt;strong&gt;file it&lt;&#x2F;strong&gt; into your
&lt;em&gt;inbox&lt;&#x2F;em&gt;. When it’s time to organize things a bit, put these items into a
&lt;em&gt;Maybe&#x2F;Someday&lt;&#x2F;em&gt; list or sub-list. I’ve got for instance a list of things
I’d like to buy some day, movies I’d like to see, courses I’d like to
follow, blog posts I’d like to read, and so on: all these lists belong
to a &lt;em&gt;Maybe&#x2F;Someday&lt;&#x2F;em&gt; folder.&lt;&#x2F;p&gt;
&lt;p&gt;Putting such things on lists also helps pondering their importance: is
that item really worth it? Is it something that I could &lt;em&gt;not&lt;&#x2F;em&gt; do, &lt;em&gt;not&lt;&#x2F;em&gt;
buy, &lt;em&gt;not&lt;&#x2F;em&gt; watch? In particular, things you want to buy right now might
not appear as mandatory, after sitting in a list for a few months: this
really helps avoiding &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Impulse_purchase&quot;&gt;impulse
buyings&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Having a list full of crazy ideas is fine: the more you have, the more
you’ll get, and the more chances there’ll be that one of them isn’t that
random.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;reduceprojectstothenextphysicalaction&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#reduceprojectstothenextphysicalaction&quot; aria-label=&quot;Anchor link for: reduceprojectstothenextphysicalaction&quot;&gt;🔗&lt;&#x2F;a&gt;Reduce projects to the next physical action&lt;&#x2F;h3&gt;
&lt;p&gt;Where does procrastination come from? Often from our feeling of being
overwhelmed by the size of the project in front of us: we don’t know
where to start or how to start. Whenever this happens to me, it often is
due to a blurry description of the thing to do. For instance, “plan
vacation” is definitely a fuzzy summary and doesn’t help to understand
what’s the next step to accomplish.&lt;&#x2F;p&gt;
&lt;p&gt;The basic thrust is to reduce the project to the &lt;strong&gt;next physical
action&lt;&#x2F;strong&gt;. What do I need to do to plan this vacation? I need to set
dates and ask my partner if they will be available at this time. Which
dates do I choose? I need to compare nights rates at several hostels,
and so on. At some point, the thinking stops and you precisely know what
your next step will be (in this example, that could be “find hostels
rates comparator websites” or “go to website X and compare rates”).
That’s the kind of item that should be in your todo list (and writing
down the n other steps you thought about will earn you some time).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;toachieveinboxzerotreatemailsliketasks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#toachieveinboxzerotreatemailsliketasks&quot; aria-label=&quot;Anchor link for: toachieveinboxzerotreatemailsliketasks&quot;&gt;🔗&lt;&#x2F;a&gt;To achieve Inbox Zero, treat emails like tasks&lt;&#x2F;h3&gt;
&lt;p&gt;Inbox Zero is a famous productivity concept, stating that you’ll have a
clearer state of mind if you get to empty your inbox: no emails means no
juggling! But that’s harder than it sounds: we often inherit thousands
of emails that are in our inboxes without any form of sorting. The
initial triaging can take some time, but it’s really worth it.&lt;&#x2F;p&gt;
&lt;p&gt;One solution that worked for me is to &lt;strong&gt;treat emails like tasks&lt;&#x2F;strong&gt;, by
categorizing them into sub-lists:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Most personal emails land into my &lt;strong&gt;inbox&lt;&#x2F;strong&gt;. I’ve used automatic
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.makeuseof.com&#x2F;tag&#x2F;set-email-filters-gmail-hotmail-yahoo&#x2F;&quot;&gt;filters&lt;&#x2F;a&gt;
for common newsletters and mundane notifications, so that they don’t
pollute the inbox.&lt;&#x2F;li&gt;
&lt;li&gt;Important emails that I need to answer right now? I answer them on
the go, and classify them right now.&lt;&#x2F;li&gt;
&lt;li&gt;I’ve got a subfolder of my inbox that’s called &lt;strong&gt;read me later&lt;&#x2F;strong&gt;.
That’s for emails which don’t need instantaneous action and that I
can read later in the day &#x2F; week, without any need to answer them.
One neat trick I’ve read about is the &lt;em&gt;unsubscribe filter&lt;&#x2F;em&gt;: set up a
filter stating that if the email’s body contains the word
“unsubscribe”, then it should be filed into the “read me later”
directory. Most non personal emails don’t land in the inbox thanks
to this.&lt;&#x2F;li&gt;
&lt;li&gt;There’s a &lt;strong&gt;answer me&lt;&#x2F;strong&gt; subfolder, for emails that need an answer
but with no urge. Most personal long form emails land in this
folder, incubate for a while and at some point I answer them, and
that’s totally fine.&lt;&#x2F;li&gt;
&lt;li&gt;There’s a &lt;strong&gt;waiting for&lt;&#x2F;strong&gt; subfolder, with emails I’ve written that
are expecting an answer. I check it once every week but having a
reminder in the agenda software works better anyway, so I’m unsure
about its value.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;All the other emails get archived&lt;&#x2F;strong&gt;. Email providers now have
efficient and fast search tools, so any time I need to look for
something that belongs to the past, I just type in a few keywords
and it works fine.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Furthermore, I also recommend looking at emails at specific times of the
day (maybe twice or three times a day, no more). Between these specific
times, I block access to the emails client in the web browser: for
Firefox, there’s the great and free
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.proginosko.com&#x2F;leechblock.html&quot;&gt;LeechBlock&lt;&#x2F;a&gt; addon that
achieves this.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;choosethenextactionbyrequirements&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#choosethenextactionbyrequirements&quot; aria-label=&quot;Anchor link for: choosethenextactionbyrequirements&quot;&gt;🔗&lt;&#x2F;a&gt;Choose the next action by requirements&lt;&#x2F;h3&gt;
&lt;p&gt;There are tasks that require a lot of energy to accomplish (like writing
down a report, coding, etc.) while others just need you to be a bit less
active (watching a conference video, reading new code, and so on). There
are tasks that can be done only at work, and others that can be done
only at home. Some are urgent to do before next Thursday, some could be
done maybe one day in a far, far away future. Some can be done in less
than two minutes, some others will take hours.&lt;&#x2F;p&gt;
&lt;p&gt;See what’s going on here? Tasks often have instrinsic caracteristics:
required energy, estimated time needed to complete, priority, location &#x2F;
context. When time comes to the actual doing, it’s important to
&lt;strong&gt;consider these requirements&lt;&#x2F;strong&gt; and to choose accordingly.&lt;&#x2F;p&gt;
&lt;p&gt;For instance, if you’re starting a quite long task at the end of the
day, the chance is low that you’ll finish it today. But if you feel a
need for closure, you’re clearly going to overwork and stay late at
work. However, if you consider the time required to finish this task
&lt;em&gt;before&lt;&#x2F;em&gt; starting it, you may not start it this day. Instead, you can
just do something shorter. That also means prioritizing your work at the
start of the day and thus not spending your time on non important stuff
as it comes.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion&lt;&#x2F;h3&gt;
&lt;p&gt;There are many other ideas in the book that would need more explanation,
but if you’ve already read about productivity and emails management, it
should sound familiar and give yourself some insight.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;gettingthingsdone.com&#x2F;fivesteps&#x2F;&quot;&gt;getting things done
website&lt;&#x2F;a&gt; contains a nice
summary of the five ideas explained in the book. If you have some time,
it’s nice to read it carefully, with a pair of modern eyes: some of the
tools recommended in this book looked very old-school to me (binders?
really?). I am using the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wunderlist.com&#x2F;&quot;&gt;Wunderlist&lt;&#x2F;a&gt; todo
application, as it is, for me, both complete (tasks, sub-tasks, lists of
tasks, folders of lists, reminders, due dates) and minimal (nothing else
that make it overly complicated).&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for reading. If you have any comment or remark, feel free to drop
me a line on &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt;! If you’ve
appreciated the blog post, don’t hesitate to let me know and skim the
rest of the blog posts ;-)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pixabay.com&#x2F;en&#x2F;typewriter-book-notebook-paper-801921&#x2F;&quot;&gt;Picture by Unsplash, published under CC0 Public
Domain&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus : version 0.5.3</title>
        <published>2015-09-01T12:16:42+00:00</published>
        <updated>2015-09-01T12:16:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-5-3/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-5-3/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-5-3/">&lt;p&gt;Je viens de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application est disponible dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&#x2F;en&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; et vous
permet de vous connecter à votre compte bancaire, récupérer vos
opérations et les classifier pour savoir où votre argent passe.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;actionrequise&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#actionrequise&quot; aria-label=&quot;Anchor link for: actionrequise&quot;&gt;🔗&lt;&#x2F;a&gt;Action requise&lt;&#x2F;h4&gt;
&lt;p&gt;Une action est requise de votre part, suite à cette mise à jour, &lt;strong&gt;si la
synchronisation ne marche plus&lt;&#x2F;strong&gt;, ou si votre balance ne correspond pas
à celle indiquée par votre site de banque :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Aller dans Préférences.&lt;&#x2F;li&gt;
&lt;li&gt;Aller dans l’onglet Gestion de Weboob.&lt;&#x2F;li&gt;
&lt;li&gt;Cliquer sur le bouton pour mettre à jour Weboob.&lt;&#x2F;li&gt;
&lt;li&gt;Aller dans l’onglet Comptes bancaires.&lt;&#x2F;li&gt;
&lt;li&gt;Cliquer sur le bouton de synchronisation des comptes (flèches
imbriquées).&lt;&#x2F;li&gt;
&lt;li&gt;Vérifier et traiter les doublons, dans l’onglet correspondant.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;nouveauts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nouveauts&quot; aria-label=&quot;Anchor link for: nouveauts&quot;&gt;🔗&lt;&#x2F;a&gt;Nouveautés&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZeHiro&#x2F;&quot;&gt;@ZeHiro&lt;&#x2F;a&gt;: Import des types
d’opérations bancaires en base (est-ce que l’opération est une carte
bleue, un chèque, un virement, etc.). Pas encore d’affichage, mais
c’est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;pull&#x2F;175&quot;&gt;pour bientôt&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Merci @ZeHiro: quand une opération est associée à un fichier, le nom
et le type du fichier joint sont correctement associés.&lt;&#x2F;li&gt;
&lt;li&gt;Merci @ZeHiro: la balance de chaque compte est maintenant affichée
dans le menu de sélection des comptes.&lt;&#x2F;li&gt;
&lt;li&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cylwin&#x2F;&quot;&gt;@cylwin&lt;&#x2F;a&gt;: l’IBAN est maintenant
importé avec chaque compte. Cela n’est pas encore visible dans
l’interface, mais j’ai quelques idées pour rendre cette information
utile.&lt;&#x2F;li&gt;
&lt;li&gt;Merci &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nicofrand&#x2F;&quot;&gt;@nicofrand&lt;&#x2F;a&gt; pour quelques
accents manquants dans la traduction française.&lt;&#x2F;li&gt;
&lt;li&gt;Ajout d’un bouton pour mettre à jour Weboob, sans avoir à le
réinstaller entièrement, ce qui permet des mises à jour plus
rapides.&lt;&#x2F;li&gt;
&lt;li&gt;Ajout de fonctionnalités d’import &#x2F; export d’une instance Kresus
(c’est-à-dire toutes les banques, tous les comptes, toutes les
opérations, toutes les catégories, etc.). Notez que le mot de passe
n’est pas inclus dans l’export, pour des raisons évidentes de
sécurité, et qu’il sera donc nécessaire de le remettre à la main
dans l’onglet préférences après un import.&lt;&#x2F;li&gt;
&lt;li&gt;Affichage d’un message d’erreur explicite si le mot de passe est
incorrect, lors d’une synchronisation manuelle.&lt;&#x2F;li&gt;
&lt;li&gt;Kresus peut maintenant &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;#on-debian&quot;&gt;s’installer et être lancé en dehors de
CozyCloud&lt;&#x2F;a&gt;, sans aucune
dépendence à Cozy. Pour le moment, c’est très instable et pas
recommandé : il n’y a aucune protection par mot de passe, beaucoup
de risques de sécurité, des fonctionnalités sont manquantes (pas de
notifications, pas d’emails d’alertes, etc.). Je reviendrai plus en
détail dessus quand la version standalone sera prête.&lt;&#x2F;li&gt;
&lt;li&gt;Fusion des comptes similaires : lorsque une banque change son site,
il se peut que les comptes ne soient plus identifiés de la même
manière ; Kresus est maintenant capable de s’en rendre compte et
d’effectuer la maintenance nécessaire.&lt;&#x2F;li&gt;
&lt;li&gt;Le fichier
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&#x2F;blob&#x2F;master&#x2F;README.md&quot;&gt;README&lt;&#x2F;a&gt; a
été grandement amélioré et un code de conduite générique a été
ajouté au projet.&lt;&#x2F;li&gt;
&lt;li&gt;Beaucoup d’améliorations de code interne (refactoring), patches pour
des petits bugs (notamment le tri hasardeux des opérations devrait
être réglé), le processus de développement a été grandement
simplifié également.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;lemotdelafin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lemotdelafin&quot; aria-label=&quot;Anchor link for: lemotdelafin&quot;&gt;🔗&lt;&#x2F;a&gt;Le mot de la fin&lt;&#x2F;h4&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à me le faire savoir, par
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&#x2F;&quot;&gt;twitter&lt;&#x2F;a&gt; ou sur le
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum&lt;&#x2F;a&gt; de cozy !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus : version 0.5.2</title>
        <published>2015-07-12T14:08:42+00:00</published>
        <updated>2015-07-12T14:08:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-5-2-2/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-5-2-2/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-5-2-2/">&lt;p&gt;Je viens de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application est disponible uniquement dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&quot;&gt;CozyCloud&lt;&#x2F;a&gt;
(pour l’instant) et vous permet de vous connecter à votre compte
bancaire, récupérer vos opérations et les classifier pour savoir où
votre argent passe.&lt;&#x2F;p&gt;
&lt;p&gt;Mise à jour mineure, car elle concerne principalement des bugs qui ont
été réglés au cours de cette version :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;La fusion des opérations similaires n’oublie plus les fichiers
associés.&lt;&#x2F;li&gt;
&lt;li&gt;Les notifications de nouvelles opérations ne devraient plus être
envoyées en doublons dorénavant.&lt;&#x2F;li&gt;
&lt;li&gt;Si un compte de votre banque n’est pas supporté par Kresus, cela
n’empêchera plus les autres comptes d’être supportés correctement.&lt;&#x2F;li&gt;
&lt;li&gt;Ajout d’une section “à propos” dans les préférences.&lt;&#x2F;li&gt;
&lt;li&gt;Beaucoup d’autres petits bugs ont été réglés.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Merci à ZeHiro et poupotte pour leurs contributions ainsi qu’à tous ceux
qui ont fait des rapports de bugs !&lt;&#x2F;p&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à me le faire savoir, par twitter ou sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum de
cozy&lt;&#x2F;a&gt; !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Des idées folles pour faciliter le développement sous Cozy</title>
        <published>2015-07-07T18:37:42+00:00</published>
        <updated>2015-07-07T18:37:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/des-idees-folles-pour-faciliter-le-developpement-sous-cozy/"/>
        <id>https://bouvier.cc/tech/des-idees-folles-pour-faciliter-le-developpement-sous-cozy/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/des-idees-folles-pour-faciliter-le-developpement-sous-cozy/">&lt;p&gt;Récemment, sur le forum de CozyCloud,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Clochix&quot;&gt;Clochix&lt;&#x2F;a&gt;
(employé de l’entreprise CC), demandait comment l’on pourrait faciliter
le développement d’applications pour Cozy. Bonne initiative ! J’ai
essayé de structurer un peu mes idées dans le forum d’abord, mais comme
ça devenait beaucoup trop long, j’ai préféré écrire ce post, vu que j’ai
beaucoup de commentaires :)&lt;&#x2F;p&gt;
&lt;p&gt;Parmi ces commentaires, il y a beaucoup d’idées saugrenues, sûrement
difficiles à implémenter, mais je fais le pari que si je les écris ici,
elles pourront inspirer les lecteurs, qui crééeront leurs propres idées
à partir de celles-ci, ou en les fusionnant, etc. Les idées
appartiennent à tout le monde !&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dustatique&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dustatique&quot; aria-label=&quot;Anchor link for: dustatique&quot;&gt;🔗&lt;&#x2F;a&gt;Du statique&lt;&#x2F;h3&gt;
&lt;p&gt;Tout d’abord, il me semble primordial de permettre de développeur sur
son cozy depuis son cozy. Pour commencer, on pourrait partir avec &lt;strong&gt;un
site statique et un éditeur de texte&lt;&#x2F;strong&gt;. Imaginons un instant un
répertoire spécial &lt;code&gt;www&lt;&#x2F;code&gt; par exemple, accessible depuis Files. Une
nouvelle application ferait office de serveur statique, et pourrait
servir tous les fichiers présents dans ce répertoire &lt;code&gt;www&lt;&#x2F;code&gt; sur une
adresse publique. Ensuite, une autre application saurait ouvrir tous les
fichiers textes importés dans Files et les éditer directement. Avec ces
deux choses, on a la possibilité de &lt;strong&gt;créer son site statique et le
modifier directement depuis son cozy&lt;&#x2F;strong&gt;. Cela me paraît une bonne
première étape !&lt;&#x2F;p&gt;
&lt;p&gt;L’intégration d’outils comme &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;webmaker.org&quot;&gt;WebMaker&lt;&#x2F;a&gt; pourrait
même permettre de créer des sites facilement pour les débutants, et de
propager l’apprentissage des technologies web auprès du grand public.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;desoutilsdedveloppement&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#desoutilsdedveloppement&quot; aria-label=&quot;Anchor link for: desoutilsdedveloppement&quot;&gt;🔗&lt;&#x2F;a&gt;Des outils de développement&lt;&#x2F;h3&gt;
&lt;p&gt;Ensuite, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;comment-pouvons-nous-vous-aider-a-bidouiller-cozy&#x2F;880&#x2F;2?u=ben&quot;&gt;comme le dit
@Clochix&lt;&#x2F;a&gt;,
&lt;strong&gt;réduire le nombre d’outils à utiliser pour le développement&lt;&#x2F;strong&gt;. A
l’heure actuelle, quand je veux modifier
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&quot;&gt;Kresus&lt;&#x2F;a&gt; (mon application de finances
personnelles hébergée sur cozy) depuis ma machine de tous les jours, je
dois :&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;lancer la VM de développement dans le bon répertoire, ce qui prend
facilement 2 minutes (vérification de l’image, timeouts
malheureusement réguliers sur le SSH, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;aller dans le répertoire de Kresus depuis la machine hôte&lt;&#x2F;li&gt;
&lt;li&gt;lancer &lt;code&gt;cozy-dev deploy 9876&lt;&#x2F;code&gt; (parce que le cozy de dev ne se
souvient pas que j’ai pu faire un deploy auparavant… peut-être que
ça vaut un bug ?). C’est instantané, mais c’est redondant de le
faire à chaque fois !&lt;&#x2F;li&gt;
&lt;li&gt;lancer kresus&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Si jamais je veux modifier kresus depuis une nouvelle machine, je dois
en plus de ça télécharger et installer la VM (ce qui peut facilement
prendre 10 minutes, en fonction du débit et de la puissance de la
machine).&lt;&#x2F;p&gt;
&lt;p&gt;Dans un monde idéal de développement d’applications pour Cozy,
j’aimerais avoir à faire simplement :&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;lancer kresus&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;C’est-à-dire qu’il y ait une machine toute prête pour le développement.
Peu m’importe l’implémentation :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;que ce soit via le serveur de production, qui utiliserait une
deuxième base couchdb (si cette notion a du sens ?) pour ne pas
écraser les données de l’instance de production;&lt;&#x2F;li&gt;
&lt;li&gt;que ce soit via &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;c9.io&#x2F;&quot;&gt;cloud9&lt;&#x2F;a&gt; ou tout autre système de
dév avec VM intégrée en ligne;&lt;&#x2F;li&gt;
&lt;li&gt;que ce soit via une app de VM sur le cozy (qemu.js, quelqu’un ?);&lt;&#x2F;li&gt;
&lt;li&gt;[insérez d’autres idées folles ici];&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Allons plus loin : si j’ai la possibilité d’avoir un éditeur de code
directement dans cozy (coucou
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coolwanglu&#x2F;vim.js&quot;&gt;vim.js&lt;&#x2F;a&gt;), pourquoi ne pas
modifier à la volée mes apps, côté client comme côté serveur, et
recharger directement depuis le cozy ? Cela permettrait d’avoir des
retours encore plus rapides sur le processus de développement (et de
trouver plein de bugs de cozy-controller, si jamais il en y avait
certain de bien planqués !).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;duportage&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#duportage&quot; aria-label=&quot;Anchor link for: duportage&quot;&gt;🔗&lt;&#x2F;a&gt;Du portage&lt;&#x2F;h3&gt;
&lt;p&gt;Je désigne par portage le fait de prendre du code d’une app déjà
existante et d’essayer de le porter sous Cozy.&lt;&#x2F;p&gt;
&lt;p&gt;Pour moi, le plus gros problème du portage est sûrement le fait qu’il
faille &lt;strong&gt;réécrire toutes les URLs&lt;&#x2F;strong&gt;, côté client. De nos jours, assez
souvent, les applications web supposent qu’elles ont accès à un domaine
ou un sous-domaine entier, et pas qu’elles vont vivre dans un
sous-répertoire particulier (sauf en PHP, sigh). Par exemple, le système
de blog Ghost suppose qu’il vit dans &lt;code&gt;http:&#x2F;&#x2F;ghost.example.com&lt;&#x2F;code&gt;, pas
dans &lt;code&gt;http:&#x2F;&#x2F;example.com&#x2F;ghost&lt;&#x2F;code&gt;, sauf contre-indication. Du coup, la
plupart des URLs doivent être réécrites, et c’est souvent assez
difficile ou obscur de trouver où sont ces dernières.&lt;&#x2F;p&gt;
&lt;p&gt;Bien sûr, il y a des solutions :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;un sous-domaine par app, mais ça pose des problèmes pour les
certificats SSL vu qu’il faut des certificats avec &lt;em&gt;wildcard&lt;&#x2F;em&gt; sur
les sous-domaines, mais heureusement &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;letsencrypt.org&#x2F;2015&#x2F;06&#x2F;16&#x2F;lets-encrypt-launch-schedule.html&quot;&gt;LetsEncrypt devrait sortir en
septembre&lt;&#x2F;a&gt;;&lt;&#x2F;li&gt;
&lt;li&gt;utilisation de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;API&#x2F;ServiceWorker&quot;&gt;service
workers&lt;&#x2F;a&gt;
pour réécrire toutes les URLs commandées par le client, côté client
: beurk, mais efficace;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;L’autre problème du portage est &lt;strong&gt;l’intégration des données&lt;&#x2F;strong&gt; : même
s’il est &lt;em&gt;faisable&lt;&#x2F;em&gt; d’intégrer les données d’apps existantes pour
qu’elles vivent dans le couchdb du cozy (voir dernière partie), cela
n’assure pas de créer facilement des interactions entre les données des
apps existantes et des apps portées. Quand bien même l’on voudrait
rajouter ces interactions, il faut modifier l’interface utilisateur de
l’app portée (difficile), ou bien le faire depuis une autre app (étrange
en termes d’interaction utilisateur). Le portage n’est pas un problème
simple (et ce n’est vraiment pas la faute de Cozy, c’est inhérent à tous
les clouds personnels, à mon avis).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;deschoixtechnologiques&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#deschoixtechnologiques&quot; aria-label=&quot;Anchor link for: deschoixtechnologiques&quot;&gt;🔗&lt;&#x2F;a&gt;Des choix technologiques&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;blog.menfin.info&#x2F;posts&#x2F;2015-07-01-sur-un-petit-nuage-cozy&#x2F;&quot;&gt;Le blog de
N`&lt;&#x2F;a&gt;
lit : “[…] je regrette certains choix techniques et les conséquences
associées. CouchDB n’est plus très populaire ces derniers temps.”. A
vrai dire, quelle que fût la technologie utilisée comme backend, on
aurait pu trouver ces remarques, avec “postgre”, ou “mongo”, ou
n’importe quel autre produit à la place de “couchdb”. Et ce n’est pas
que la dite technologie est mauvaise, loin de là ; c’est simplement que
les différents auteurs d’app voudront utiliser des technologies
différentes.&lt;&#x2F;p&gt;
&lt;p&gt;Personnellement, l’utilisation de CouchDB m’a demandé un effort initial
(à cause du système de vues) que ne m’aurait pas demandé une bête base
de données SQL. Ce n’est pas pour autant quelque chose de difficile,
mais c’est quelque chose de nouveau, et l’amas de nouveaux concepts liés
au développement dans Cozy peut être un frein.&lt;&#x2F;p&gt;
&lt;p&gt;Et qu’il s’agisse de la base de données ou du langage, le problème dans
les deux cas est la dispersion : plus d’outils, ça signifie plus de
maintenance nécessaire, plus de vecteurs d’attaques, etc. Pourtant,
combien de personnes adoreraient développer une app pour Cozy, mais ne
le font pas parce qu’il n’est pas possible d’écrire sa web app en
Python, Erlang, Haxe, allez soyons fous, PHP ? Combien de projets ne
sont pas portés, pour les mêmes raisons ? Avec la mode de la
containerisation, sandboxer un interpréteur ou une VM est quasiment
gratuit et pourrait permettre cette utilisation d’autres langages dans
Cozy.&lt;&#x2F;p&gt;
&lt;p&gt;Pour le problème de la base de données, il y a plusieurs approches :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;juste installer plusieurs systèmes de gestion de base de données
dans la plateforme (mongo, cassandra, whatever), mais ce n’est
vraiment pas idéal, pour les raisons exposées ci-dessus;&lt;&#x2F;li&gt;
&lt;li&gt;utiliser un protocole de stockage de données indépendant du langage,
l’implémenter dans cozy puis écrire quelques bibliothèques de code
réutilisables pour pouvoir utiliser ce protocole. C’est l’approche
prise par ces bons gars de Mozilla avec
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;kinto.readthedocs.org&#x2F;&quot;&gt;Kinto&lt;&#x2F;a&gt;, comme expliqué
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.servicedenuages.fr&#x2F;stockage-generique-ecosysteme&quot;&gt;ici&lt;&#x2F;a&gt;.
En y réfléchissant bien, c’est &lt;em&gt;presque&lt;&#x2F;em&gt; l’approche prise par le
système de données dans Cozy, vu qu’il utilise des appels à un point
d’accès HTTP : la seule différence réside dans le fait que ces
appels sentent et rappellent trop Couch;&lt;&#x2F;li&gt;
&lt;li&gt;écrire un meta-adaptateur : une application qui comprenne les
protocoles de plusieurs bases de données (de manière à ce que
l’utilisateur puisse avoir l’impression de communiquer avec par
exemple mongo, ou mariadb, indifféremment), et qui retranscrive cela
en structures de données et requêtes couchdb. Je pense que c’est
illusoire : vu que les différents systèmes de stockage peuvent
assurer différentes parties du théorème CAP, beaucoup de
fonctionnalités pourraient ne pas être équivalentes (ou ne pas être
imitées de manière efficace).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;decequimarche&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#decequimarche&quot; aria-label=&quot;Anchor link for: decequimarche&quot;&gt;🔗&lt;&#x2F;a&gt;De ce qui marche&lt;&#x2F;h3&gt;
&lt;p&gt;Les mêmes problèmes se posent pour d’autres plateformes de cloud
personnel comme &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;owncloud.com&#x2F;&quot;&gt;OwnCloud&lt;&#x2F;a&gt; et ne vont pas se
résoudre du jour au lendemain. Chacune de ces idées demande un temps
d’implémentation considérable (sauf peut-être le serveur statique et
l’éditeur de texte – à croire que c’en est une bonne idée !), du temps
pour tester de la part des utilisateurs et beaucoup de retours entre
développeurs et utilisateurs. Pourtant, certains ont déjà été confrontés
à ces problématiques et les ont résolues avec panache.&lt;&#x2F;p&gt;
&lt;p&gt;Un modèle en la matière est &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;app.net&#x2F;&quot;&gt;App.net&lt;&#x2F;a&gt; (ADN pour les
intimes), un réseau social &lt;em&gt;centralisé&lt;&#x2F;em&gt; mais qui assure de ne pas
espionner les données des utilisateurs, en contrepartie d’un abonnement
de quelques dollars par mois. Des apps pour ADN peuvent être créées par
les utilisateurs très facilement, et il en existe de très bonnes.
Qu’est-ce qui a attiré les développeurs pour créer des apps pour ADN ?&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developers.app.net&#x2F;docs&#x2F;&quot;&gt;documentation exemplaire&lt;&#x2F;a&gt;,
avec de nombreux tutoriels, des présentations de l’API, plein de
liens vers différents canaux de communications réservés aux
développeurs, des articles de blog juste pour présenter des
nouvelles APIs aux développeurs, des podcasts, etc. La documentation
est open-source et peut être modifiée par n’importe qui, comme pour
Cozy.&lt;&#x2F;li&gt;
&lt;li&gt;une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;blog.app.net&#x2F;2013&#x2F;11&#x2F;18&#x2F;adnpy-a-new-python-library-from-app-net&#x2F;&quot;&gt;diversité au niveau des
technologies&lt;&#x2F;a&gt;
utilisées pour écrire des apps clientes pour ADN : python, objective
c, android, etc.;&lt;&#x2F;li&gt;
&lt;li&gt;l’&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;blog.app.net&#x2F;2014&#x2F;01&#x2F;27&#x2F;app-net-hackathon-recap-3&#x2F;&quot;&gt;organisation de
hackathons&lt;&#x2F;a&gt;
pour lancer des projets en commun, faire se rencontrer des
développeurs et provoquer le démarrage de nouvelles apps;&lt;&#x2F;li&gt;
&lt;li&gt;des articles de blog &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;blog.app.net&#x2F;2014&#x2F;01&#x2F;17&#x2F;sunlit&#x2F;&quot;&gt;présentant des nouvelles apps pour
ADN&lt;&#x2F;a&gt; (n.b.: kresus n’a pas
encore atteint ce niveau de maturité à mon avis);&lt;&#x2F;li&gt;
&lt;li&gt;encore plus fou, &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;blog.app.net&#x2F;2013&#x2F;03&#x2F;01&#x2F;updates-to-the-app-net-developer-incentive-program&#x2F;&quot;&gt;un programme d’incentives pour le développement
d’app&lt;&#x2F;a&gt;.
En gros, si votre application a été sélectionnée comme étant une des
plus utiles à la communauté, vous recevez une part d’un budget
alloué à la promotion du développement des nouvelles apps. C’est un
argument pécunier, mais c’est sûrement ce qui a fait la différence
entre ADN et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tent.io&quot;&gt;tent&lt;&#x2F;a&gt;, par exemple (tent est mort,
vite tent).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A mon avis, les trois premiers points demandent un investissement
relativement mineur et permettraient de donner un coup de pied au
développement d’apps sous Cozy. Par ailleurs,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&quot;&gt;Kresus&lt;&#x2F;a&gt; cherche toujours de nouveaux
contributeurs, si vous êtes intéressés, n’hésitez-pas à me contacter !&lt;&#x2F;p&gt;
&lt;p&gt;Si vous avez des remarques par rapport à cet article, je vous invite à
m’en faire part sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt; pour les
remarques courtes ou sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;comment-pouvons-nous-vous-aider-a-bidouiller-cozy&#x2F;&quot;&gt;le
forum&lt;&#x2F;a&gt;
pour les remarques plus longues. Cheers !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Kresus : version 0.5.1</title>
        <published>2015-05-09T17:38:42+00:00</published>
        <updated>2015-05-09T17:38:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/kresus-version-0-5-1/"/>
        <id>https://bouvier.cc/tech/kresus-version-0-5-1/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/kresus-version-0-5-1/">&lt;p&gt;Je viens de publier une nouvelle version de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&quot;&gt;Kresus&lt;&#x2F;a&gt;, le gestionnaire de finances
personnelles open-source sur lequel je travaille. Pour rappel, cette
application est disponible uniquement dans &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&quot;&gt;CozyCloud&lt;&#x2F;a&gt;
(pour l’instant) et vous permet de vous connecter à votre compte
bancaire, récupérer vos opérations et les classifier pour savoir où
votre argent passe.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;kresus-version-0-5-1&#x2F;2015-05-09_kresus-051.png&quot; alt=&quot;Graphiques&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Parmi les nouveautés :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Meilleurs graphiques : il est possible d’afficher des graphiques des
opérations par catégories par mois, sur des périodes données (tout
le temps, mois courant, mois précédent, 3 derniers mois, 6 derniers
mois), pour des types d’opérations données (toutes, dépenses ou
revenus uniquement). De plus, des graphiques en “camembert” sont
maintenant générés si l’on regarde les dépenses ou les revenus.&lt;&#x2F;li&gt;
&lt;li&gt;Il est également possible de choisir quelle période et quel type
d’opérations s’affichent par défaut (depuis les Préférences
avancées).&lt;&#x2F;li&gt;
&lt;li&gt;La gestion des opérations en doublons a été améliorée : maintenant,
c’est l’application qui choisit lequel des deux doublons il est
nécessaire de supprimer. Ainsi, on ne parle plus de suppression de
doublons mais de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=JatzJYDqfAE&quot;&gt;FUSION&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Utilisation de Dygraph et c3 pour la partie graphiques, ce qui fait
que Kresus ne dépend plus de Highcharts, dont la license pouvait
poser problème au sein de CozyCloud.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Comme d’habitude, si vous avez des remarques ou suggestions,
n’hésitez-pas à me le faire savoir, par twitter ou sur le &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;app-kresus&#x2F;224&quot;&gt;forum de
cozy&lt;&#x2F;a&gt; !&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>Wallabag, mot de passes, sel et empreintes</title>
        <published>2015-05-06T19:53:42+00:00</published>
        <updated>2015-05-06T19:53:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/wallabag-changer-mot-de-passe-perdu/"/>
        <id>https://bouvier.cc/tech/wallabag-changer-mot-de-passe-perdu/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/wallabag-changer-mot-de-passe-perdu/">&lt;p&gt;TL;DR:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; cd &#x2F;var&#x2F;www&#x2F;wallabag&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; printf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;motdepasseLogin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; inc&#x2F;poche&#x2F;config.inc.php&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;SALT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; cut&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; \&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;` |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; openssl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; sha1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; c87c3d3f823c166602a0ddfc2d96c82aa7b27d9e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; sqlite3 db&#x2F;poche.sqlite&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;sqlite&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; update users set password=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;c87c3d3f823c166602a0ddfc2d96c82aa7b27d9e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; where id=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;sqlite&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; ^D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h1 id=&quot;commentchangersonmotdepassewallabagladure&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#commentchangersonmotdepassewallabagladure&quot; aria-label=&quot;Anchor link for: commentchangersonmotdepassewallabagladure&quot;&gt;🔗&lt;&#x2F;a&gt;Comment changer son mot de passe Wallabag, à la dure&lt;&#x2F;h1&gt;
&lt;h5 id=&quot;akacommentperdresonmotdepassewallabagenpremierlieu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#akacommentperdresonmotdepassewallabagenpremierlieu&quot; aria-label=&quot;Anchor link for: akacommentperdresonmotdepassewallabagenpremierlieu&quot;&gt;🔗&lt;&#x2F;a&gt;aka, comment perdre son mot de passe Wallabag en premier lieu&lt;&#x2F;h5&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;bouvier.cc&#x2F;tech&#x2F;wallabag-changer-mot-de-passe-perdu&#x2F;2015-05-06_kangourou.jpeg&quot; alt=&quot;Wallabag, mot de passes, sel et empreintes&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;J’utilise &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;wallabag.org&#x2F;&quot;&gt;Wallabag&lt;&#x2F;a&gt;, un service de liste de
lecture libre et décentralisé, donc un concurrent de
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;getpocket.com&#x2F;&quot;&gt;Pocket&lt;&#x2F;a&gt; et &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;alternativeto.net&#x2F;software&#x2F;read-it-later&#x2F;&quot;&gt;autres
alternatives&lt;&#x2F;a&gt;, que je
recommande particulièrement pour son efficacité et sa simplicité. En
particulier, j’utilise une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;registry.hub.docker.com&#x2F;u&#x2F;bobmaerten&#x2F;docker-wallabag&#x2F;&quot;&gt;image
Docker&lt;&#x2F;a&gt;
prête à l’usage, pour éviter d’avoir à installer &lt;code&gt;php&lt;&#x2F;code&gt; directement sur
mon serveur. Tout allait bien, jusqu’à que je redémarre le container :
il m’était alors impossible de me reconnecter. En fouillant un peu, je
me rends compte qu’il y a un sel utilisé pour le hash des mots de passe,
et qu’il est possible que ce sel ait changé suite au redémarrage du
docker (si vous avez cliqué sur le lien du docker registry ci-dessus,
vous verrez qu’il est recommandé de définir ce sel comme une variable
d’environnement, ce que j’avais bien sûr omis). Dans ce cas-là, je me
suis trouvé bloqué hors de mon Wallabag, avec aucune possibilité de
changer le mot de passe (ou de m’envoyer un email de récupération de
compte), ce qui revient à perdre ses données.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;duselpourlehashmaisbiensr&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#duselpourlehashmaisbiensr&quot; aria-label=&quot;Anchor link for: duselpourlehashmaisbiensr&quot;&gt;🔗&lt;&#x2F;a&gt;Du sel pour le hash ? Mais bien sûr !&lt;&#x2F;h2&gt;
&lt;p&gt;Petite explication technique pour ceux qui veulent savoir de quoi on
parle ici. Si sel, hash et SHA1 n’ont pas de secrets pour vous, vous
pouvez passer à la suite.&lt;&#x2F;p&gt;
&lt;p&gt;Il est dangereux de sauvegarder des mots de passe utilisateur en base de
données, en clair : sinon, cela signifie que les administrateurs du site
ou d’éventuels pirates peuvent s’authentifier sur le compte de
l’utilisateur et accéder à toutes ses données. De telles fuites de mots
de passe ont lieu assez couramment. Pour éviter cela, plutôt que stocker
le mot de passe en clair dans une base de données, on utilise une
fonction mathématique à sens unique qui transforme le mot de passe à
l’aide d’une formule mathématique compliquée en une “empreinte”
numérique. Cela signifie qu’il est facile de calculer l’empreinte à
partir du mot de passe, mais qu’il est (théoriquement) compliqué de
retrouver le mot de passe à partir de l’empreinte.&lt;&#x2F;p&gt;
&lt;p&gt;Du coup, plutôt que stocker le mot de passe en clair dans la base de
données, on stocke l’empreinte générée dans la base. Ainsi, pour
vérifier si un mot de passe entré par l’utilisateur sur le site est le
bon, il suffit de générer l’empreinte du mot de passe entré sur le site,
et de comparer avec l’empreinte en base de données. Jusque là, tout va
bien.&lt;&#x2F;p&gt;
&lt;p&gt;Tout va bien, sauf si la fonction mathématiquement théoriquement
compliquée ne l’est pas tant que ça. Pour Wallabag, il s’agit de SHA1,
qui a été prouvée comme étant facilement cassable il y a quelques années
de ça déjà. Il y a une très bonne
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;stackoverflow.com&#x2F;questions&#x2F;2772014&#x2F;is-sha-1-secure-for-password-storage&quot;&gt;explication&lt;&#x2F;a&gt;
ici de la méthode utilisée pour retrouver le mot de passe à partir de
l’empreinte. L’idée est de prendre beaucoup de temps à générer des
tables avec toutes les entrées possibles, de manière à avoir une table
de correspondances entrées &#x2F; empreintes, et ensuite quand on a une
empreinte donnée, de comparer à celles qui étaient présentes dans la
table avec toutes les correspondances.&lt;&#x2F;p&gt;
&lt;p&gt;Pour contrer cette attaque, il suffit de rajouter un “sel” après le mot
de passe, c’est-à-dire une chaîne de caractères compliquée, connue
uniquement par l’application elle-même. Ainsi, les attaques par table de
correspondance sont (encore une fois, théoriquement) impossibles, car
l’attaquant ne connaît pas le “sel” rajouté.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;etlelienavecleschmilblick&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#etlelienavecleschmilblick&quot; aria-label=&quot;Anchor link for: etlelienavecleschmilblick&quot;&gt;🔗&lt;&#x2F;a&gt;Et le lien avec le Schmilblick ?&lt;&#x2F;h2&gt;
&lt;p&gt;Dans mon instance de Wallabag, le sel rajouté au mot de passe a été
modifié en redémarrant le container docker, ce qui fait que l’empreinte
que je générais en essayant de me connecter ne correspondait plus à
celle en base de données. Du coup, la solution pour s’en sortir est de
regénérer cette empreinte et la réécrire directement dans la base de
données. Comment faire ?&lt;&#x2F;p&gt;
&lt;p&gt;Heureusement, le code de Wallabag étant open-source, j’ai pu le
consulter sur &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wallabag&#x2F;wallabag&quot;&gt;github&lt;&#x2F;a&gt;. En
particulier, en faisant une &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wallabag&#x2F;wallabag&#x2F;search?utf8=%E2%9C%93&amp;amp;q=SALT&quot;&gt;recherche sur
SALT&lt;&#x2F;a&gt;,
j’ai trouvé &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wallabag&#x2F;wallabag&#x2F;blob&#x2F;master&#x2F;inc&#x2F;poche&#x2F;config.inc.default.php#L11&quot;&gt;cette
ligne&lt;&#x2F;a&gt;
qui définit le sel rajouté pour calculer l’empreinte :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;define&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;SALT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;, &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt; # put a strong string here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Il suffit donc de regarder la valeur écrite en dur dans ce fichier.
Valeur qui est par ailleurs
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wallabag&#x2F;wallabag&#x2F;blob&#x2F;4b1fa4c2febc7abbc6da3d65e4e760949a55843c&#x2F;install&#x2F;index.php#L66&quot;&gt;utilisée&lt;&#x2F;a&gt;
au moment de l’installation pour générer l’empreinte du mot de passe en
base de données :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;php&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;$salted_password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt; sha1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;$password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; $username&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; $salt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Donc l’empreinte est générée à partir de la chaîne de caractères
suivante : mot de passe, nom d’utilisateur, sel trouvé dans le fichier
&lt;code&gt;inc&#x2F;poche&#x2F;config.inc.default.php&lt;&#x2F;code&gt;, le tout sans espaces. Il suffit donc
maintenant de retrouver le sel, regénérer l’empreinte et mettre à jour
la base de données, ce qui se fait en 5 lignes, comme le montre la
section TL:DR ci-dessus.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusiongometa&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusiongometa&quot; aria-label=&quot;Anchor link for: conclusiongometa&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion : go meta&lt;&#x2F;h2&gt;
&lt;p&gt;Cette méthode de génération d’empreintes pour stocker des mots de passe
en base de données est assez récurrente, du coup il est possible de
l’adapter à d’autres algorithmes (SHA256) et d’autres constructions de
chaînes.&lt;&#x2F;p&gt;
&lt;p&gt;Bien sûr, pour ce qui est du Docker Wallabag, il est plus simple de
définir le sel comme une variable d’environnement, comme indiqué dans la
documentation du container.&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, s’il existe une autre méthode pour récupérer son mot de
passe sous Wallabag, je serai ravi de la connaître ! N’hésitez pas à me
faire part de vos remarques via &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>CozyCloud : migrer son instance d&#x27;un serveur vers un autre</title>
        <published>2015-04-21T21:12:42+00:00</published>
        <updated>2015-04-21T21:12:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/cozycloud-migrer-son-instance-dun-serveur-vers-un-autre/"/>
        <id>https://bouvier.cc/tech/cozycloud-migrer-son-instance-dun-serveur-vers-un-autre/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/cozycloud-migrer-son-instance-dun-serveur-vers-un-autre/">&lt;p&gt;Il arrive de temps en temps de devoir changer de serveur, et puisque le
credo de &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;cozy.io&#x2F;&quot;&gt;CozyCloud&lt;&#x2F;a&gt; est de pouvoir partir à n’importe
quel moment, encore faut-il pouvoir le faire facilement et savoir
comment le faire ! En attendant que l’équipe mette en place un moyen
officiel d’effectuer cette tâche, voici une méthode que j’ai utilisée
pour migrer mon instance cozy d’un serveur vers un cozy situé sur un
autre serveur distant. C’est dangereux, vous allez mettre les mains dans
le cambouis et vous salir, mais au final vous ne perdrez aucune donnée
après la migration !&lt;&#x2F;p&gt;
&lt;h2 id=&quot;postscriptum&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#postscriptum&quot; aria-label=&quot;Anchor link for: postscriptum&quot;&gt;🔗&lt;&#x2F;a&gt;Post scriptum&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;nledez&quot;&gt;Nicolas&lt;&#x2F;a&gt;, de l’équipe Cozy, m’a dit qu’il
est plus rapide et plus efficace de faire une simple copie du fichier de
la base de données cozy &lt;code&gt;cozy.couch&lt;&#x2F;code&gt; depuis la machine source et de le
remplacer dans la machine distante. Dans ce cas, pas besoin de vous
embêter avec toutes les péripéties de ce tutoriel ! Des gens en parlent
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.cozy.io&#x2F;t&#x2F;comment-faire-un-backup-de-la-base-de-donnees-couchdb&#x2F;531&quot;&gt;ici&lt;&#x2F;a&gt;.
Si quelqu’un a plus de détails sur la méthode et confirme que celle-ci
fonctionne, je serai ravi de mettre à jour cet article, n’hésitez-pas à
me contacter ! (cf fin du message)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lamthode&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lamthode&quot; aria-label=&quot;Anchor link for: lamthode&quot;&gt;🔗&lt;&#x2F;a&gt;La méthode&lt;&#x2F;h2&gt;
&lt;p&gt;Dans ce tutoriel, j’utiliserai le vocabulaire suivant :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;la machine &lt;strong&gt;source&lt;&#x2F;strong&gt; sera la machine depuis laquelle on fait la
copie du cozy. C’est elle qui contient toutes les données et que
l’on cherche à répliquer.&lt;&#x2F;li&gt;
&lt;li&gt;la machine &lt;strong&gt;cible&lt;&#x2F;strong&gt; sera la machine vers laquelle on migre son
cozy. Je recommande que cette instance dispose d’un cozy pré
installé, &lt;strong&gt;à jour&lt;&#x2F;strong&gt; (la plateforme devrait être à jour), mais sans
aucune donnée à l’intérieur (c’est-à-dire un cozy tel qu’il serait
juste après l’installation par les scripts). Idéalement, il faudrait
que le nom d’utilisateur (email) de ce cozy cible soit quelque chose
de facilement reconnaissable, vu que l’on devra identifier cet
utilisateur plus tard… Par exemple, utiliser &lt;code&gt;demo@domain.tld&lt;&#x2F;code&gt;
comme email de login.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;cibledsactiverlascuritdesappareilsauthentifis&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cibledsactiverlascuritdesappareilsauthentifis&quot; aria-label=&quot;Anchor link for: cibledsactiverlascuritdesappareilsauthentifis&quot;&gt;🔗&lt;&#x2F;a&gt;Cible : Désactiver la sécurité des appareils authentifiés&lt;&#x2F;h2&gt;
&lt;p&gt;Pour cette procédure, nous allons en fait nous faire passer pour
n’importe quel appareil qui voudrait se synchroniser avec le cozy,
c’est-à-dire que l’on va se faire passer pour l’application mobile
&lt;code&gt;cozy-mobile&lt;&#x2F;code&gt; ou pour l’application bureau &lt;code&gt;cozy-desktop&lt;&#x2F;code&gt;. Cependant, la
synchronisation avec ces appareils marche (grossièrement) de la manière
suivante :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;l’appareil qui veut se synchroniser avec le cozy s’authentifie la
première fois, avec le mot de passe du cozy.&lt;&#x2F;li&gt;
&lt;li&gt;l’appareil est inscrit dans la liste des appareils autorisés.&lt;&#x2F;li&gt;
&lt;li&gt;lors des synchronisations, le serveur cozy vérifie que l’appareil
est autorisé avant de transmettre la requête de réplication à
couchdb, qui lui gérera l’authentification.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Seulement dans notre cas, on n’a pas la possibilité de s’inscrire en
tant qu’appareil autorisé, on va donc devoir contourner le code qui fait
cette vérification ! Bien sûr, ce ne sera que temporaire et on remettra
le code tel qu’il était à l’origine, dans la dernière étape…&lt;&#x2F;p&gt;
&lt;p&gt;On se place dans le bon répertoire, tout d’abord :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #0DB9D7;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; &#x2F;usr&#x2F;local&#x2F;cozy&#x2F;apps&#x2F;proxy&#x2F;build&#x2F;server&#x2F;controller&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Il faut ensuite ouvrir le fichier &lt;code&gt;devices.js&lt;&#x2F;code&gt; avec les droits de
modification (je suis passé par &lt;code&gt;sudo vim devices.js&lt;&#x2F;code&gt; pour le faire,
mais vous avez le droit à d’autres éditeurs de texte, inférieurs
soient-ils :D).&lt;&#x2F;p&gt;
&lt;p&gt;On identifie la fonction &lt;code&gt;replication&lt;&#x2F;code&gt;, et plus particulièrement la
partie qui vérifie l’authentification :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; deviceManager&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;isAuthenticated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;username&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;process&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;env&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;NODE_ENV&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;production&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            req&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;headers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;authorization&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; getCredentialsHeader&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            req&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;headers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;authorization&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; getProxy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;web&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;req&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; res&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;            target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;http:&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; couchdbHost&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; + &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; couchdbPort&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        })&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; = new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; Error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Request unauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;status&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 401&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; next&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;})&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;On va juste remplacer &lt;code&gt;auth&lt;&#x2F;code&gt; par &lt;code&gt;true&lt;&#x2F;code&gt; dans la première condition, pour
faire croire au proxy que l’appareil est toujours authentifié :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; deviceManager&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;isAuthenticated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;username&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; password&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E0AF68;&quot;&gt;auth&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9D7CD8;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #51597D;font-style: italic;&quot;&gt;   &#x2F;&#x2F; &amp;lt;============= ICI, j&amp;#39;ai remplacé auth par true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;process&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;env&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt;NODE_ENV&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;production&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            req&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;headers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;authorization&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; getCredentialsHeader&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;            req&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;headers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;authorization&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; getProxy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt;web&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;req&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; res&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #73DACA;&quot;&gt;            target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;: &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;http:&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; couchdbHost&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; + &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt; couchdbPort&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;        })&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BB9AF7;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; = new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; Error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt;Request unauthorized&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;        error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7DCFFF;&quot;&gt;status&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF9E64;&quot;&gt; 401&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BB9AF7;font-style: italic;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7AA2F7;&quot;&gt; next&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ABDF5;&quot;&gt;})&lt;&#x2F;span&gt;&lt;span style=&quot;color: #89DDFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;On sauvegarde et on quitte, puis on relance le proxy pour être sûr que
les modifications sont prises en compte :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cozy-monitor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; restart proxy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;ciblercuprerlemotdepassedecouchdb&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ciblercuprerlemotdepassedecouchdb&quot; aria-label=&quot;Anchor link for: ciblercuprerlemotdepassedecouchdb&quot;&gt;🔗&lt;&#x2F;a&gt;Cible : Récupérer le mot de passe de couchdb&lt;&#x2F;h2&gt;
&lt;p&gt;On a maintenant besoin de l’identifiant et du mot de passe pour accéder
à la base de données couchdb de la machine cible. Pour cela, il suffit
de regarder dans &lt;code&gt;&#x2F;etc&#x2F;cozy&#x2F;couchdb.login&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; &#x2F;etc&#x2F;cozy&#x2F;couchdb.login&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Chez moi, ça affiche :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;bonjour&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;motdepasse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;La première ligne correspond au login, la seconde au mot de passe. On
note ça quelque part, et c’est parti pour lancer la copie.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sourcelancerlacopie&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sourcelancerlacopie&quot; aria-label=&quot;Anchor link for: sourcelancerlacopie&quot;&gt;🔗&lt;&#x2F;a&gt;Source : lancer la copie&lt;&#x2F;h2&gt;
&lt;p&gt;Depuis la machine source maintenant, on va lancer la copie. Imaginons
que ma machine cible soit située sur le nom de domaine
&lt;code&gt;cozy.example.tld&lt;&#x2F;code&gt;, alors la commande à lancer est la suivante :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cozy-monitor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; backup https:&#x2F;&#x2F;bonjour:motdepasse@cozy.example.tld&#x2F;cozy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;où &lt;code&gt;bonjour&lt;&#x2F;code&gt; et &lt;code&gt;motdepasse&lt;&#x2F;code&gt; sont respectivement le nom d’utilisateur et
le mot de passe couchdb de la machine cible.&lt;&#x2F;p&gt;
&lt;p&gt;La manipulation va prendre un peu de temps, et il arrive qu’elle échoue
même si vous avez beaucoup de données. Personnellement, il m’a fallu la
relancer plusieurs fois avant que ça finisse sans encombre, mais au bout
d’un moment, ça s’est arrêté de planter et ça a finalement marché.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cibleremettrelauthentificationdesappareilsdanssontatinitial&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cibleremettrelauthentificationdesappareilsdanssontatinitial&quot; aria-label=&quot;Anchor link for: cibleremettrelauthentificationdesappareilsdanssontatinitial&quot;&gt;🔗&lt;&#x2F;a&gt;Cible : Remettre l’authentification des appareils dans son état initial&lt;&#x2F;h2&gt;
&lt;p&gt;La sécurité étant cruciale pour éviter que n’importe qui ne puisse
récupérer vos données personnelles, pensez bien à remettre le fichier de
code modifié &lt;code&gt;devices.js&lt;&#x2F;code&gt; dans son état initial (c’est-à-dire changer la
condition de &lt;code&gt;if (true)&lt;&#x2F;code&gt; à &lt;code&gt;if (auth)&lt;&#x2F;code&gt;), et à redémarrer le proxy sur la
machine cible :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B1D6; background-color: #1A1B26;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C0CAF5;&quot;&gt;cozy-monitor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECE6A;&quot;&gt; restart proxy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;ciblerafistolerlesdonnes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ciblerafistolerlesdonnes&quot; aria-label=&quot;Anchor link for: ciblerafistolerlesdonnes&quot;&gt;🔗&lt;&#x2F;a&gt;Cible : Rafistoler les données&lt;&#x2F;h2&gt;
&lt;p&gt;Maintenant, on va se connecter via l’interface web à la machine cible,
comme on se connecterait à n’importe quel moment pour aller voir son
cozy. A ce point-là, je me suis connecté avec mon login et mot de passe
utilisés lors de la création du cozy cible, mais il se pourrait bien que
ça marche avec le login et mot de passe de la machine source également
(à confirmer).&lt;&#x2F;p&gt;
&lt;p&gt;Le cozy cible est dans un état inconsistent. Pourquoi ?&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Il y a plusieurs données qui sont censées être présentes de manière
unique (informations sur l’instance, l’utilisateur, etc.), et qui
sont présentes en doublons. En effet, ces données sont créées une
fois lors de la création du cozy, et on les a en double à cause de
la copie du cozy source. Il va falloir nettoyer ces données.&lt;&#x2F;li&gt;
&lt;li&gt;Les mots de passe stockés dans la base sont chiffrés avec des clés
qui dépendent du mot de passe de l’utilisateur et d’un sel
cryptographique, uniques par utilisateur. Du coup, comme il y a
plusieurs utilisateurs (rappelez-vous, les données sont en double),
le mot de passe pourrait ne pas être déchiffré correctement, ce qui
fait que les applications de récupération de données (comme
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&quot;&gt;kresus&lt;&#x2F;a&gt; ou
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;frankrousseau&#x2F;konnectors&quot;&gt;konnectors&lt;&#x2F;a&gt;) ne vont
plus marcher correctement.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;La bonne nouvelle, c’est que ces deux problèmes se résolvent tous les
deux en supprimant les données présentes en doublons. Pour faire cela,
voici la liste des étapes :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;depuis l’interface web du cozy cible, on désinstalle l’appli
&lt;code&gt;data browser&lt;&#x2F;code&gt; (toutes mes données) si elle était présente, puis on
la réinstalle. Cela est nécessaire parce que le cozy pourrait croire
que l’application est installée en double (le cozy a des
enregistrements en base de données sur les applications actuellement
installées).&lt;&#x2F;li&gt;
&lt;li&gt;on lance l’application &lt;code&gt;data-browser&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;dans la table &lt;code&gt;CozyInstance&lt;&#x2F;code&gt;, on supprime l’instance qui ne
correspond pas à celle du cozy cible (a priori, c’est celle qui n’a
pas de nom de domaine, sauf si vous en aviez défini un sur le cozy
cible).&lt;&#x2F;li&gt;
&lt;li&gt;dans la table &lt;code&gt;StackApplication&lt;&#x2F;code&gt;, on supprime toutes les lignes en
double. Comme il s’agit des applications de la plateforme, si le
cozy cible était bien mis à jour avant de faire ces opérations, il
suffit de supprimer les lignes avec les numéros de version
inférieurs ou égaux.&lt;&#x2F;li&gt;
&lt;li&gt;dans la table &lt;code&gt;Applications&lt;&#x2F;code&gt;, on supprime toutes les lignes (en
cliquant sur l’icône de corbeille), &lt;strong&gt;sauf data-browser&lt;&#x2F;strong&gt; qu’on a
remis dans un état consistent à la main.&lt;&#x2F;li&gt;
&lt;li&gt;dans la table &lt;code&gt;User&lt;&#x2F;code&gt;, on supprime la ligne qui correspond à
l’utilisateur du cozy cible (si vous avez suivi mon exemple, c’est
le &lt;code&gt;demo@domain.tld&lt;&#x2F;code&gt; dont je parlais au tout début).&lt;&#x2F;li&gt;
&lt;li&gt;on se déconnecte et on se reconnecte sur le cozy.&lt;&#x2F;li&gt;
&lt;li&gt;laisser reposer, mettre au four thermostat 6 pendant 1 minute.&lt;&#x2F;li&gt;
&lt;li&gt;c’est prêt, vous pouvez déguster !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;J’espère que cette procédure aura marché pour vous, je n’ai pas pu la
réessayer, du coup cette procédure est extraite de mes notes
personnelles et il se pourrait que j’ai oublié quelques détails. Si
c’est le cas, n’hésitez pas à me contacter sur
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;bnjbvr&quot;&gt;twitter&lt;&#x2F;a&gt; ou sur irc (mon nick est
&lt;code&gt;bnjbvr&lt;&#x2F;code&gt;). Si ça a marché et que vous avez apprécié, n’hésitez pas à me
le dire également ;-)&lt;&#x2F;p&gt;
</content>
    </entry>
    <entry xml:lang="en">
        <title>What I&#x27;ve Made On Year 2014</title>
        <published>2015-03-16T13:22:42+00:00</published>
        <updated>2015-03-16T13:22:42+00:00</updated>
        
        <author>
          <name>
            
              Benjamin Bouvier
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://bouvier.cc/tech/what-ive-made-on-year-2014/"/>
        <id>https://bouvier.cc/tech/what-ive-made-on-year-2014/</id>
        <content type="html" xml:base="https://bouvier.cc/tech/what-ive-made-on-year-2014/">&lt;p&gt;I’ve stumbled across &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;isawsomecode.tumblr.com&#x2F;post&#x2F;106997844921&#x2F;what-i-made-on-year-2014&quot;&gt;espadrine’s blog
post&lt;&#x2F;a&gt;
about his accomplishments in 2014 and found it was a really good idea.
It matters a lot to acknowledge your own accomplishments, without being
overly proud about them, just to realize &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Impostor_syndrome&quot;&gt;you’re not an
impostor&lt;&#x2F;a&gt;, and that you
bring value to your company and deserve your current position (yes,
there probably will be more about the so-called impostor syndrome on
this blog).&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h3 id=&quot;opensource&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#opensource&quot; aria-label=&quot;Anchor link for: opensource&quot;&gt;🔗&lt;&#x2F;a&gt;open-source&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;I’ve started &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;kresus&quot;&gt;kresus&lt;&#x2F;a&gt;, which is
probably my biggest personal open-source project so far. It is a
personal finance manager, a la Linxo &#x2F; Mint &#x2F; Bankin, et al. The
only difference is that you can self-host it (if you have the chance
to own a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cozy.io&quot;&gt;CozyCloud&lt;&#x2F;a&gt; instance, which you can also
self-host). It is a fork of another open-source project,
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;seeker89&#x2F;cozy-pfm&#x2F;&quot;&gt;cozy-pfm&lt;&#x2F;a&gt;, which hasn’t been
maintained for long and whose owner made a few technical choices I
didn’t personally like (using backbone was the biggest one).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;minstrel&quot;&gt;minstrel&lt;&#x2F;a&gt; is a non official
Spotify for Firefox OS app (a.k.a web app). In particular, it spawns
a proxy server that can read your Spotify playlists, stream tracks
in real-time, encode them in real-time before streaming them back to
a simple HTML5 &lt;code&gt;audio&lt;&#x2F;code&gt; tag. The web frontend can also synchronize
your tracks locally, so that you can still listen to your tracks
even when you’re offline, using the awesome
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;mozilla.github.io&#x2F;localForage&#x2F;&quot;&gt;localForage&lt;&#x2F;a&gt; library.&lt;&#x2F;li&gt;
&lt;li&gt;A few small contributions to different cozycloud projects, among
which I’d like to highlight the &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cozy&#x2F;cozy-home&#x2F;pull&#x2F;178&quot;&gt;app update
notification&lt;&#x2F;a&gt; in
cozy-home (“hey, this app has a new version, go update it if you
want to!”).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;diary&quot;&gt;diary&lt;&#x2F;a&gt;, a &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tent.io&quot;&gt;tent&lt;&#x2F;a&gt;
blogging application which I started earlier in 2013. I’ve stopped
working on it as I don’t have a lot of traction in the tent
community.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;gsd&quot;&gt;gsd&lt;&#x2F;a&gt;, a todo list app started in
December 2013, to experiment with angularjs. Stopped development as
I found out about &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jsilvestre&#x2F;tasky&quot;&gt;tasky&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;bulletjournal.com&#x2F;&quot;&gt;bullet journaling&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;extended &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bnjbvr&#x2F;lebonsite&quot;&gt;lebonsite&lt;&#x2F;a&gt; a few by
adding a new frontend that includes realtime search. This app works
along with &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ClementNotin&#x2F;lebonscrap&quot;&gt;lebonscrap&lt;&#x2F;a&gt;
and allows you to aggregate flat search results (it’s deeply
localized to France’s flat search websites) and quickly go through
them. Update: if you’re interested in the changes I’ve made, they
are in the &lt;em&gt;angular&lt;&#x2F;em&gt; branch of my repository.&lt;&#x2F;li&gt;
&lt;li&gt;as my job is about working in open-source, the next paragraph also
applies here.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;school-job&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#school-job&quot; aria-label=&quot;Anchor link for: school-job&quot;&gt;🔗&lt;&#x2F;a&gt;school&#x2F;job&lt;&#x2F;h3&gt;
&lt;p&gt;In March 2014, I’ve got an engineering diploma in computer science from
INSA Lyon, with the highest possible honors (in French, “félicitations
du jury”). Again, not being cocky: graduating with honors is pretty
classic and doesn’t mean anything regarding your actual knowledge &#x2F;
level in anything.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve been hired as a full-time employee by Mozilla at the end of
January, following my internship during Summer 2013. I work in the
Platform team, in the JavaScript Engine sub-team. My main focuses have
been extending &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;asmjs.org&quot;&gt;asm.js&lt;&#x2F;a&gt;, to help proving that the web
platform is ready for gaming. I mostly implemented
&lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;johnmccutchan&#x2F;ecmascript_simd&quot;&gt;SIMD.js&lt;&#x2F;a&gt; in Firefox
this year (if you’re interested in reading more about this, feel free to
read the official Mozilla &lt;a rel=&quot;noopener noreferrer external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;javascript&#x2F;2015&#x2F;03&#x2F;10&#x2F;state-of-simd-js-performance-in-firefox&#x2F;&quot;&gt;blog
post&lt;&#x2F;a&gt;
I’ve co-written).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;whatabout2015&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#whatabout2015&quot; aria-label=&quot;Anchor link for: whatabout2015&quot;&gt;🔗&lt;&#x2F;a&gt;what about 2015&lt;&#x2F;h3&gt;
&lt;p&gt;I’d like to get more focused in cloud services that you own and have
control on, as I think this is the thing that matters the most,
nowadays.&lt;&#x2F;p&gt;
&lt;p&gt;Also, I wish I can keep on learning new things, by myself or on massive
online open courses. As a newcomer in adulthood, I would also like to
learn how to take advantage of every single hour of every single day,
that is, not getting stuck in a routine and waking up one day thinking
“man, I’m already that old?”. Oh boy, there are only 24 hours a day.&lt;&#x2F;p&gt;
</content>
    </entry>
</feed>

