Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

index.html 71KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023
  1. <!DOCTYPE html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>
  13. Étiquette #opensource
  14. — David Larlet</title>
  15. <script>
  16. function toggleTheme(themeName) {
  17. document.documentElement.classList.toggle(
  18. 'forced-dark',
  19. themeName === 'dark'
  20. )
  21. document.documentElement.classList.toggle(
  22. 'forced-light',
  23. themeName === 'light'
  24. )
  25. }
  26. const selectedTheme = localStorage.getItem('theme')
  27. if (selectedTheme !== 'undefined') {
  28. toggleTheme(selectedTheme)
  29. }
  30. </script>
  31. <!-- Documented, feel free to shoot an email. -->
  32. <link rel="stylesheet" href="/static/david/css/style_2024-03-09.css">
  33. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  34. <link rel="preload"
  35. href="/static/david/css/fonts/century_supra_ot_a_regular.woff2"
  36. as="font"
  37. type="font/woff2"
  38. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  39. crossorigin>
  40. <link rel="preload"
  41. href="/static/david/css/fonts/century_supra_ot_a_bold.woff2"
  42. as="font"
  43. type="font/woff2"
  44. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  45. crossorigin>
  46. <link rel="preload"
  47. href="/static/david/css/fonts/century_supra_ot_a_italic.woff2"
  48. as="font"
  49. type="font/woff2"
  50. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  51. crossorigin>
  52. <link rel="preload"
  53. href="/static/david/css/fonts/century_supra_ot_b_regular.woff2"
  54. as="font"
  55. type="font/woff2"
  56. media="(prefers-color-scheme: dark)"
  57. crossorigin>
  58. <link rel="preload"
  59. href="/static/david/css/fonts/century_supra_ot_b_bold.woff2"
  60. as="font"
  61. type="font/woff2"
  62. media="(prefers-color-scheme: dark)"
  63. crossorigin>
  64. <link rel="preload"
  65. href="/static/david/css/fonts/century_supra_ot_b_italic.woff2"
  66. as="font"
  67. type="font/woff2"
  68. media="(prefers-color-scheme: dark)"
  69. crossorigin>
  70. <meta name="description" content="Publications relatives au tag #opensource">
  71. <!-- That good ol' feed, subscribe :). -->
  72. <link rel="alternate"
  73. type="application/atom+xml"
  74. title="Feed"
  75. href="/david/log/">
  76. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  77. <link rel="apple-touch-icon"
  78. sizes="180x180"
  79. href="/static/david/icons2/apple-touch-icon.png">
  80. <link rel="icon"
  81. type="image/png"
  82. sizes="32x32"
  83. href="/static/david/icons2/favicon-32x32.png">
  84. <link rel="icon"
  85. type="image/png"
  86. sizes="16x16"
  87. href="/static/david/icons2/favicon-16x16.png">
  88. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  89. <link rel="mask-icon"
  90. href="/static/david/icons2/safari-pinned-tab.svg"
  91. color="#07486c">
  92. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  93. <meta name="msapplication-TileColor" content="#f7f7f7">
  94. <meta name="msapplication-config"
  95. content="/static/david/icons2/browserconfig.xml">
  96. <meta name="theme-color"
  97. content="#f7f7f7"
  98. media="(prefers-color-scheme: light)">
  99. <meta name="theme-color"
  100. content="#272727"
  101. media="(prefers-color-scheme: dark)">
  102. <!-- Is that even respected? Retrospectively? What a shAItshow…
  103. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  104. <meta name="robots" content="noai, noimageai">
  105. <style type="text/css">
  106. details[open] summary {
  107. display: none;
  108. }
  109. </style>
  110. <body data-instant-intensity="viewport-all">
  111. <article>
  112. <header>
  113. <hgroup>
  114. <h1>#opensource</h1>
  115. <p>Publications relatives à cette étiquette</p>
  116. </hgroup>
  117. </header>
  118. <nav>
  119. <p>
  120. <a href="/david/" title="Aller à l’accueil">
  121. Accueil</a>
  122. <a rel="tags"
  123. href="/david/2024/#tags"
  124. title="Liste de toutes les étiquettes">
  125. Étiquettes</a>
  126. <a href="/david/recherche/" title="Aller à la page de recherche" rel="search" data-no-instant>Recherche</a>
  127. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  128. </p>
  129. </nav>
  130. <h2>
  131. <a href="/david/2024/04/02/" title="Lien permanent vers cet article">Porte</a> <time datetime="2024-04-02">2 avril 2024</time>
  132. </h2>
  133. <blockquote lang="en">
  134. <p>For me, the two big lessons from #XZ were first, the lack of resources supporting crucial Open-Source infrastructure, but then and especially, the demonstration that the attackers are numerous, skilled <em>and patient</em>. We already knew about numerous and skilled but this episode, where the attacker was already well-embedded in the project by May 2022, opened a few eyes, including&nbsp;mine.</p>
  135. <p>The advantage, to various flavors of malefactor, of subverting core pieces of Open-Source infrastructure, is incalculable. <mark>#XZ was the one we caught; how many have we&nbsp;missed?</mark></p>
  136. <p><cite><em><a data-link-domain="tbray.org" href="https://www.tbray.org/ongoing/When/202x/2024/04/01/OSQI" hreflang="en"
  137. title="Consultation de l’article (anglais)">ongoing by Tim Bray · OSQI</a>
  138. <a href="/david/cache/2024/8ffe1e30cd3dd6446468bd6d03550457/" hreflang="en"
  139. data-tippy data-description=""
  140. data-source="https://www.tbray.org/ongoing/When/202x/2024/04/01/OSQI"
  141. data-date="2024-04-04"
  142. data-favicon="https://www.tbray.org/favicon.ico"
  143. data-domain="tbray.org"
  144. ><svg xmlns="http://www.w3.org/2000/svg"
  145. width="24" height="24" viewBox="0 0 24 24" fill="none"
  146. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  147. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  148. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  149. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  150. </svg>
  151. <span class="sr-only">[archive]</span></a></em></cite></p>
  152. </blockquote>
  153. <p>J’ai laissé le web 2&nbsp;jours et hop, une <a data-link-domain="fr.wikipedia.org" href="https://fr.wikipedia.org/wiki/Porte_d%C3%A9rob%C3%A9e">porte dérobée</a> a été fermée à temps. C’est <a data-link-domain="boehs.org" href="https://boehs.org/node/everything-i-know-about-the-xz-backdoor" hreflang="en"
  154. title="Consultation de l’article (anglais)">la chronologie</a>
  155. <a href="/david/cache/2024/b4d0d377662e30cef4e944448d41338c/" hreflang="en"
  156. data-tippy data-description="Please note: This is being updated in real-time. The intent is to make sense of lots of simultaneous discoveries"
  157. data-source="https://boehs.org/node/everything-i-know-about-the-xz-backdoor"
  158. data-date="2024-04-04"
  159. data-favicon="https://boehs.org/favicon.ico"
  160. data-domain="boehs.org"
  161. ><svg xmlns="http://www.w3.org/2000/svg"
  162. width="24" height="24" viewBox="0 0 24 24" fill="none"
  163. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  164. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  165. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  166. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  167. </svg>
  168. <span class="sr-only">[archive]</span></a> qui est surprenante dans sa durée et pose immédiatement la question de savoir s’il s’agit d’une exception ou s’il y a déjà des portes un peu partout, exploitées par plus ou moins de&nbsp;monde.</p>
  169. <p>Lorsqu’on voit ce que <a href="/david/2024/03/28/#hr-140">sont prêts à faire les GAFAM+</a>, je n’ai aucun doute sur le fait qu’ils se rueraient sur de telles «&nbsp;opportunités&nbsp;». On parle souvent de malveillance dans ces cas là, je pense que l’on peut facilement mettre tout ce qui est <em>growth hacking</em> et <em>marketing</em> dans ce&nbsp;périmètre.</p>
  170. <p>Pour en revenir à des OSQI (Open Source Quality Institutes) nationaux, cela me rappelle des initiatives comme <a data-link-domain="copiepublique.fr" href="https://copiepublique.fr/">copie publique</a> ou cette idée de <a href="/david/2023/01/11/">MécénatDeCompétencesPublic</a>&#8239;.</p>
  171. <p>Transformer l’Open-Source en bien commun est peut-être le chantier de la décennie à venir. J’espère en faire partie à mon&nbsp;échelle.</p>
  172. <blockquote lang="en">
  173. <p>Tuesday, Hans-Christoph Steiner, a longtime developer of F-Droid, explained that a very similar situation nearly led F-Droid to push an update that would have introduced a security vulnerability into the product three years ago: “Three years ago, F-Droid had a similar kind of attempt as the Xz backdoor,” he posted on Mastodon. “A new contributor submitted a merge request to improve the search, which was oft requested but the maintainers hadn’t found time to work on. There was also pressure from other random accounts to merge it. In the end, it became clear that it added a SQL injection vulnerability. In this case, we managed to catch it before it was merged. Since similar tactics were used, I think it’s relevant&nbsp;now.”</p>
  174. <p>Other open source developers and security experts have pointed to the dynamic of bullying and the general reliance on a small number of volunteer developers. They explained that it’s a problem across much of the open source software ecosystem, and is definitely a problem for the large tech companies and infrastructure who rely on these often volunteer-led projects to build their for-profit software on top&nbsp;of.</p>
  175. <p><cite><em><a data-link-domain="404media.co" href="https://www.404media.co/xz-backdoor-bullying-in-open-source-software-is-a-massive-security-vulnerability/" hreflang="en"
  176. title="Consultation de l’article (anglais)">Bullying in Open Source Software Is a Massive Security Vulnerability</a>
  177. <a href="/david/cache/2024/14da9039de50c54f159f333ea3dc73f1/" hreflang="en"
  178. data-tippy data-description="The Xz backdoor and a near miss on the F-Droid app store show how the entitled attitude of some people in the open source community can be used to push malicious or insecure code."
  179. data-source="https://www.404media.co/xz-backdoor-bullying-in-open-source-software-is-a-massive-security-vulnerability/"
  180. data-date="2024-04-04"
  181. data-favicon="https://www.404media.co/content/images/size/w256h256/format/png/2023/08/favicon-3.svg"
  182. data-domain="404media.co"
  183. ><svg xmlns="http://www.w3.org/2000/svg"
  184. width="24" height="24" viewBox="0 0 24 24" fill="none"
  185. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  186. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  187. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  188. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  189. </svg>
  190. <span class="sr-only">[archive]</span></a></em></cite></p>
  191. </blockquote>
  192. <nav>
  193. <p>
  194. <a href="/david/2024/commun/"
  195. title="Liste de tous les articles 2024 associés à cette étiquette"
  196. rel="tag">#commun</a>
  197. <a href="/david/2024/opensource/"
  198. title="Liste de tous les articles 2024 associés à cette étiquette"
  199. rel="tag">#opensource</a>
  200. <a href="/david/2024/protopie/"
  201. title="Liste de tous les articles 2024 associés à cette étiquette"
  202. rel="tag">#protopie</a>
  203. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  204. </p>
  205. </nav>
  206. <h2>
  207. <a href="/david/2024/03/21/" title="Lien permanent vers cet article">Fourchette</a> <time datetime="2024-03-21">21 mars 2024</time>
  208. </h2>
  209. <p><em><a href="/david/2024/03/19/" title="Excitation">Suite</a> des <a href="/david/2024/03/20/" title="PageCrypt">aventures</a>.</em></p>
  210. <p>Un peu <a data-link-domain="gitlab.com" href="https://gitlab.com/davidbgk/page-crypt-web-component#pagecrypt-web-component">plus de documentation</a> (<a data-link-domain="davidbgk.gitlab.io" href="https://davidbgk.gitlab.io/page-crypt-web-component/">la démo</a> servant aussi d’introduction). Une <a data-link-domain="gitlab.com" href="https://gitlab.com/davidbgk/page-crypt-web-component/-/blob/main/LICENSE">licence AGPLv3</a> qui soit <a data-link-domain="github.com" href="https://github.com/Greenheart/pagecrypt?tab=AGPL-3.0-1-ov-file#readme">compatible avec l’implémentation principale</a> dont je m’inspire. Je ne sais pas trop si c’est un <em>fork</em> au final, c’est assez hybride comme nouvelle branche, j’ai plus l’impression d’une&nbsp;convergence.</p>
  211. <p>J’ai surtout travaillé sur l’intégration du formulaire de saisie du mot de passe qui se situe maintenant dans le <em>Web Component</em>. Je voulais privilégier la simplicité d’usage, ce qui implique de prendre quelques raccourcis. J’ai beaucoup hésité à utiliser <a data-link-domain="MDN" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog">un élément <code>&lt;dialog&gt;</code></a> pour le formulaire mais j’ai préféré rester&nbsp;basique.</p>
  212. <p>Il y a encore du travail mais la base me semble utilisable. C’est en essayant de l’intégrer par ailleurs que je vais me rendre compte de tous les défauts&nbsp;actuels.</p>
  213. <a href="#hr-128" title="Lien vers cette section de la page"><hr id="hr-128" /></a>
  214. <p><a data-link-domain="redis.io" href="https://redis.io/">Redis</a> a maintenant un <em>fork</em>&nbsp;: <a data-link-domain="codeberg.org" href="https://codeberg.org/redict/redict">redict</a> suite à un <a data-link-domain="github.com" href="https://github.com/redis/redis-doc/commit/69921f506c02f65606498cfb4c083c6d8f91f125">changement de licence</a> qui n’est plus tout à fait open-source, du moins tel que défini par <a data-link-domain="opensource.org" href="https://opensource.org/">l’OSI</a>.</p>
  215. <a href="#hr-129" title="Lien vers cette section de la page"><hr id="hr-129" /></a>
  216. <p>En ayant repris un entraînement physique assez intensif pour récupérer une forme acceptable (car <a href="/david/2024/01/09/" title="Blessure">j’ai quand même été immobilisé</a> un moment), je me rends compte que ça prend un temps non&nbsp;négligeable.</p>
  217. <p>Un peu par hasard, je commence un traitement AKiLEiNE TANO(+NOK). On va voir si ça permet de gagner du temps dans la préparation des pieds, retours dans un&nbsp;mois.</p>
  218. <p>J’ai aussi réduit mon coup de fourchette car le printemps s’en vient et je vais moins avoir besoin de me protéger du froid. Même si cette sortie course du jour par -15°C en ressenti était&nbsp;piquante&#8239;!</p>
  219. <nav>
  220. <p>
  221. <a href="/david/2024/communaute/"
  222. title="Liste de tous les articles 2024 associés à cette étiquette"
  223. rel="tag">#communauté</a>
  224. <a href="/david/2024/opensource/"
  225. title="Liste de tous les articles 2024 associés à cette étiquette"
  226. rel="tag">#opensource</a>
  227. <a href="/david/2024/technique/"
  228. title="Liste de tous les articles 2024 associés à cette étiquette"
  229. rel="tag">#technique</a>
  230. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  231. </p>
  232. </nav>
  233. <h2>
  234. <a href="/david/2024/03/20/" title="Lien permanent vers cet article">PageCrypt</a> <time datetime="2024-03-20">20 mars 2024</time>
  235. </h2>
  236. <p><a href="/david/2024/03/19/" title="Excitation">J’y ai passé ma soirée</a> mais j’ai un <a data-link-domain="davidbgk.gitlab.io" href="https://davidbgk.gitlab.io/page-crypt-web-component/">truc qui fonctionne pour une démo</a>. Ça ressemble beaucoup à un <em>patchwork</em> de bouts de code récupérés <a data-link-domain="maxlaumeister.com" href="https://www.maxlaumeister.com/pagecrypt/">ici</a> et <a data-link-domain="github.com" href="https://github.com/Greenheart/pagecrypt">là</a> puis <a data-link-domain="github.com" href="https://github.com/MaxLaumeister/PageCrypt/blob/master/python/encrypt.py">aussi là</a> pour la partie&nbsp;Python.</p>
  237. <p>Il y a encore pas mal de travail —&nbsp;notamment pour rendre la page suffisamment accessible&nbsp;— mais au moins la partie crypto / boîte noire semble fonctionner à la fois du côté génération en Python et consommation en JS. C’est la partie qui me faisait un peu peur et sur laquelle j’ai un peu patiné car c’est bien au-delà de mes compétences et que je ne veux pas prendre l’initiative de trop adapter sans comprendre les enjeux niveau&nbsp;sécurité.</p>
  238. <p>Le dépôt est <a data-link-domain="gitlab.com" href="https://gitlab.com/davidbgk/page-crypt-web-component">par ici</a>. Il faut encore que je décide si le formulaire pour le mot de passe devient un <em>web component</em> dédié et/ou un sous-composant, je ne suis pas satisfait du couplage implicite actuel. Itération, itération.</p>
  239. <p>En bonus, il est possible d’accéder directement au contenu de la page en mettant le mot de passe en ancre de l’URL. J’ai appris au passage que ce fragment d’URL n’était pas transmis dans la requête et ne restait que dans l’historique du&nbsp;navigateur.</p>
  240. <p><em>Si tu n’as pas honte de ton premier commit, tout ça… la suite&nbsp;demain.</em></p>
  241. <a href="#hr-125" title="Lien vers cette section de la page"><hr id="hr-125" /></a>
  242. <blockquote>
  243. <p>Les mots ont un impact et, inconsciemment, quand vous ne les utilisez pas dans la bonne manière, vous minimisez mon handicap et donc vous faites moins d'effort que&nbsp;nécessaire.</p>
  244. <p>Autre point, dit-on «&nbsp;personne en situation en handicap&nbsp;» ou «&nbsp;personne&nbsp;handicapée&#8239;?&nbsp;»</p>
  245. <p>Là, encore, il y a une&nbsp;subtilité.</p>
  246. <p>Je vais à un événement tech où les conférences ne sont pas sous-titrées. Je suis en situation de handicap puisque les conférences ne me sont pas du tout&nbsp;accessibles.</p>
  247. <p>Je vais à un événement tech où les conférences sont toutes sous-titrées. Je ne suis pas en situation de handicap puisque les conférences me sont totalement&nbsp;accessibles.</p>
  248. <p>Voici la différence. <mark>Être en situation de handicap, c’est subir la situation faute&nbsp;d’accessibilité.</mark></p>
  249. <p><cite><em><a data-link-domain="emmanuelle-aboaf.netlify.app" href="https://emmanuelle-aboaf.netlify.app/blog/article/n-ayez-pas-peur-des-mots" hreflang="fr"
  250. title="Consultation de l’article">N’ayez pas peur des mots</a>
  251. <a href="/david/cache/2024/5201efaa6fe6a80f69647a354c9afd18/" hreflang="fr"
  252. data-tippy data-description="Les mots ont un impact et pourtant ils ne sont pas utilisés en tant que tels. Le mot handicapé·e n’est pas un gros mot, pas plus que les mots sourd·e et aveugle. Malheureusement, certaines personnes n’osent pas les dire par peur de vexer ou en pensant que ça ne se dit pas. Cependant, en ne les disant pas, vous créez un tabou. Je vous partage mes réflexions sur le sujet à travers cet article."
  253. data-source="https://emmanuelle-aboaf.netlify.app/blog/article/n-ayez-pas-peur-des-mots"
  254. data-date="2024-03-20"
  255. data-favicon="https://emmanuelle-aboaf.netlify.app/blog/article/favicon-32x32.png"
  256. data-domain="emmanuelle-aboaf.netlify.app"
  257. ><svg xmlns="http://www.w3.org/2000/svg"
  258. width="24" height="24" viewBox="0 0 24 24" fill="none"
  259. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  260. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  261. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  262. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  263. </svg>
  264. <span class="sr-only">[archive]</span></a></em></cite></p>
  265. </blockquote>
  266. <p>Cette page ne contient pas le contenu du HTML qui s’affiche et ça me rend triste car j’en apprécie le contenu qui m’apprend des choses / me fait&nbsp;réfléchir.</p>
  267. <p>Un autre angle de&nbsp;l’accessibilité&#8239;?</p>
  268. <a href="#hr-126" title="Lien vers cette section de la page"><hr id="hr-126" /></a>
  269. <blockquote lang="en">
  270. <p>So don’t publish for the&nbsp;world.</p>
  271. <p>When I write something here on my website, I’m not thinking about the world reading it. That would be paralyzing. I do sometimes imagine that one person is reading it; someone just like me who hasn’t yet had this particular thought, or come up with that particular&nbsp;idea.</p>
  272. <p>I’m writing for myself. <mark>I write to figure out what I think.</mark> I also publish mostly for myself—a public archive for future me. But if what I publish just happens to connect with one other person, I’m&nbsp;glad.</p>
  273. <p><cite><em><a data-link-domain="adactio.com" href="https://adactio.com/journal/20996" hreflang="en"
  274. title="Consultation de l’article (anglais)">What the world needs</a>
  275. <a href="/david/cache/2024/318dd7526e11f9476c9cbc88eb3f2b9b/" hreflang="en"
  276. data-tippy data-description="Write for yourself."
  277. data-source="https://adactio.com/journal/20996"
  278. data-date="2024-03-20"
  279. data-favicon="https://adactio.com/icon.png"
  280. data-domain="adactio.com"
  281. ><svg xmlns="http://www.w3.org/2000/svg"
  282. width="24" height="24" viewBox="0 0 24 24" fill="none"
  283. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  284. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  285. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  286. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  287. </svg>
  288. <span class="sr-only">[archive]</span></a></em></cite></p>
  289. </blockquote>
  290. <a href="#hr-127" title="Lien vers cette section de la page"><hr id="hr-127" /></a>
  291. <blockquote lang="en">
  292. <p>My goal, for this digital place I’m creating, is to make you go away. And that’s not because I want to be left alone but because <mark>I hope to help you discover new digital places to explore.</mark> If I see you again, it’s because you decided to come back, and not because you got lost and trapped inside the digital walls I&nbsp;erected.</p>
  293. <p><cite><em><a data-link-domain="manuelmoreale.com" href="https://manuelmoreale.com/digital-walled-gardens" hreflang="en"
  294. title="Consultation de l’article (anglais)">Digital walled gardens</a>
  295. <a href="/david/cache/2024/812f09bae33b395819539fd2c4693fe2/" hreflang="en"
  296. data-tippy data-description="The concept of a walled garden is not a new one in the digital world. It’s just a fancier, less aggressive way to describe a closed ecosystem or a …"
  297. data-source="https://manuelmoreale.com/digital-walled-gardens"
  298. data-date="2024-03-20"
  299. data-favicon="https://manuelmoreale.com/favicon.ico"
  300. data-domain="manuelmoreale.com"
  301. ><svg xmlns="http://www.w3.org/2000/svg"
  302. width="24" height="24" viewBox="0 0 24 24" fill="none"
  303. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  304. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  305. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  306. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  307. </svg>
  308. <span class="sr-only">[archive]</span></a></em></cite></p>
  309. </blockquote>
  310. <p>🌱</p>
  311. <nav>
  312. <p>
  313. <a href="/david/2024/laboratoire/"
  314. title="Liste de tous les articles 2024 associés à cette étiquette"
  315. rel="tag">#laboratoire</a>
  316. <a href="/david/2024/opensource/"
  317. title="Liste de tous les articles 2024 associés à cette étiquette"
  318. rel="tag">#opensource</a>
  319. <a href="/david/2024/technique/"
  320. title="Liste de tous les articles 2024 associés à cette étiquette"
  321. rel="tag">#technique</a>
  322. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  323. </p>
  324. </nav>
  325. <h2>
  326. <a href="/david/2024/03/03/" title="Lien permanent vers cet article">Permanence</a> <time datetime="2024-03-03">3 mars 2024</time>
  327. </h2>
  328. <blockquote lang="en">
  329. <p>Eventually, I started asking myself: <mark><em>why am I promising permanence?</em></mark> The answer crept up on me: <em>because permanence is better than nothing.</em> Without the momentum of obligation, I didn’t trust myself to begin anything in&nbsp;earnest.</p>
  330. <p>The thing is, it never worked. The half-life of obligation is short; the half-life of guilt is long. Promises never saved one of my side projects, but they clogged many nights and weekends with the gunk of regret. Something had to&nbsp;change.</p>
  331. <p><cite><em><a data-link-domain="dianaberlin.com" href="https://dianaberlin.com/posts/no-more-forever-projects" hreflang="en"
  332. title="Consultation de l’article (anglais)">No more forever projects</a>
  333. <a href="/david/cache/2024/4c8a04c4c0e928bd78f22db77425bb47/" hreflang="en"
  334. data-tippy data-description="It took me a long time to see past forever projects. I told myself that making promises gave beginnings gravity. I labeled my newsletter &nbsp;a “lifelong project” not long after I started it. I called /mentoring a “movement” the day I announced it. Commitment marked a project as something w"
  335. data-source="https://dianaberlin.com/posts/no-more-forever-projects"
  336. data-date="2024-03-03"
  337. data-favicon="https://images.squarespace-cdn.com/content/v1/598927e3bebafbda588a07e2/1504459315187-9G9MSVDRY4HEGXNT8JAL/favicon.ico"
  338. data-domain="dianaberlin.com"
  339. ><svg xmlns="http://www.w3.org/2000/svg"
  340. width="24" height="24" viewBox="0 0 24 24" fill="none"
  341. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  342. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  343. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  344. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  345. </svg>
  346. <span class="sr-only">[archive]</span></a></em></cite></p>
  347. </blockquote>
  348. <p>Je vais aller m’enforester avec cette question. Le refuge ne va pas être accessible via la piste de ski (de fond), plus assez de&nbsp;neige.</p>
  349. <p>Un 3&nbsp;mars, au nord de&nbsp;Montréal.</p>
  350. <a href="#hr-97" title="Lien vers cette section de la page"><hr id="hr-97" /></a>
  351. <blockquote>
  352. <p>Ces chaleurs extrêmes de 2023&nbsp;ont moins à voir avec le développement d’El Niño qu’avec les conditions anticycloniques de la zone. <em>«&nbsp;On a observé une baisse des vents assez forte sur l’Atlantique Nord,</em> explique Christophe Cassou. <em>Or quand il y a moins de vent, il y a moins d’évaporation, ce qui conduit à un réchauffement des eaux de surface. Ces eaux chauffent aussi car elles se mélangent moins avec les eaux plus profondes et plus&nbsp;froides.&nbsp;»</em></p>
  353. <p>Aujourd’hui, cette configuration météorologique a disparu mais les eaux de surface de l’Atlantique Nord continuent de battre des records de chaleur à cause du phénomène El Niño, qui a fini par réchauffer progressivement les eaux de l’océan pendant&nbsp;l’hiver.</p>
  354. <p><cite><em><a data-link-domain="lemonde.fr" href="https://www.lemonde.fr/les-decodeurs/article/2024/03/03/climat-pourquoi-les-temperatures-battent-tous-les-records-depuis-la-mi-2023_6219806_4355770.html" hreflang="fr"
  355. title="Consultation de l’article">Climat&nbsp;: pourquoi les températures battent tous les records depuis la mi-2023</a>
  356. <a href="/david/cache/2024/6fc45aab6c9584cbb6f55ef70a685d01/" hreflang="fr"
  357. data-tippy data-description="L’année 2023 a été classée comme la plus chaude enregistrée depuis 1850, avec 14,98 °C de moyenne sur l’ensemble du globe. La tendance continue en 2024. Le principal coupable : le réchauffement lié aux gaz à effet de serre d’origine humaine."
  358. data-source="https://www.lemonde.fr/les-decodeurs/article/2024/03/03/climat-pourquoi-les-temperatures-battent-tous-les-records-depuis-la-mi-2023_6219806_4355770.html"
  359. data-date="2024-03-03"
  360. data-favicon="https://www.lemonde.fr/dist/assets/img/logos/pwa-180.png"
  361. data-domain="lemonde.fr"
  362. ><svg xmlns="http://www.w3.org/2000/svg"
  363. width="24" height="24" viewBox="0 0 24 24" fill="none"
  364. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  365. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  366. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  367. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  368. </svg>
  369. <span class="sr-only">[archive]</span></a></em></cite></p>
  370. </blockquote>
  371. <p>Les Décodeurs m’offrent une grille de lecture des phénomènes en cours&nbsp;intéressante.</p>
  372. <a href="#hr-98" title="Lien vers cette section de la page"><hr id="hr-98" /></a>
  373. <blockquote lang="en">
  374. <p>From pragma directives, to async scripts, to stylesheets, to open graph tags, it’s easy to mess up and can have consequences. Capo.js will show you the <a data-link-domain="rviscomi.github.io" href="https://rviscomi.github.io/capo.js/user/rules/">specific order of elements</a> to make your <code>&lt;head&gt;</code> and your page a little (or a lotta) bit&nbsp;faster.</p>
  375. <p><cite><em><a data-link-domain="frontendmasters.com" href="https://frontendmasters.com/blog/capo-js-a-five-minute-web-performance-boost/" hreflang="en"
  376. title="Consultation de l’article (anglais)">Capo.js: A five minute web performance boost</a>
  377. <a href="/david/cache/2024/a122504621c3c5318c0bdee38ef4479b/" hreflang="en"
  378. data-tippy data-description="You want a quick web performance win at work that’s sure to get you a promotion? Want it to only take five minutes? Then I got you. Capo.js is a tool to get your <head> in order. It’s based o…"
  379. data-source="https://frontendmasters.com/blog/capo-js-a-five-minute-web-performance-boost/"
  380. data-date="2024-03-03"
  381. data-favicon="https://frontendmasters.com/favicon-32x32.png"
  382. data-domain="frontendmasters.com"
  383. ><svg xmlns="http://www.w3.org/2000/svg"
  384. width="24" height="24" viewBox="0 0 24 24" fill="none"
  385. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  386. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  387. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  388. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  389. </svg>
  390. <span class="sr-only">[archive]</span></a></em></cite></p>
  391. </blockquote>
  392. <p>Il est aussi possible d’<a data-link-domain="rviscomi.github.io" href="https://rviscomi.github.io/capo.js/user/demo/">utiliser la démo</a> sans installer aucun JS en copiant du HTML ou en pointant vers une page. J’ai du mal à évaluer à quel point c’est pertinent pour cet espace, peut-être davantage dans des <a data-link-domain="tonsky.me" href="https://tonsky.me/blog/js-bloat/" hreflang="en"
  393. title="Consultation de l’article (anglais)">contextes sans prise de soin</a>
  394. <a href="/david/cache/2024/ad911ebf7ba5523ef0be1bdd599f7623/" hreflang="en"
  395. data-tippy data-description="What is the average size of JavaScript code downloaded per website? Fuck around and find out!"
  396. data-source="https://tonsky.me/blog/js-bloat/"
  397. data-date="2024-03-03"
  398. data-favicon="https://tonsky.me/i/favicon.png"
  399. data-domain="tonsky.me"
  400. ><svg xmlns="http://www.w3.org/2000/svg"
  401. width="24" height="24" viewBox="0 0 24 24" fill="none"
  402. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  403. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  404. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  405. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  406. </svg>
  407. <span class="sr-only">[archive]</span></a> qui semblent être la norme&nbsp;aujourd’hui.</p>
  408. <a href="#hr-99" title="Lien vers cette section de la page"><hr id="hr-99" /></a>
  409. <blockquote>
  410. <p>Rêve de la nuit&nbsp;dernière</p>
  411. <p><cite><em><a data-link-domain="la-grange.net" href="https://www.la-grange.net/2024/02/20/reve" hreflang="fr"
  412. title="Consultation de l’article">rêve - Carnets Web de La Grange</a>
  413. <a href="/david/cache/2024/24716a84007189a332fd8db3e5ff4c05/" hreflang="fr"
  414. data-tippy data-description=""
  415. data-source="https://www.la-grange.net/2024/02/20/reve"
  416. data-date="2024-03-03"
  417. data-favicon="https://www.la-grange.net/favicon.ico"
  418. data-domain="la-grange.net"
  419. ><svg xmlns="http://www.w3.org/2000/svg"
  420. width="24" height="24" viewBox="0 0 24 24" fill="none"
  421. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  422. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  423. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  424. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  425. </svg>
  426. <span class="sr-only">[archive]</span></a></em></cite></p>
  427. </blockquote>
  428. <p>💚</p>
  429. <nav>
  430. <p>
  431. <a href="/david/2024/dependance/"
  432. title="Liste de tous les articles 2024 associés à cette étiquette"
  433. rel="tag">#dépendance</a>
  434. <a href="/david/2024/opensource/"
  435. title="Liste de tous les articles 2024 associés à cette étiquette"
  436. rel="tag">#opensource</a>
  437. <a href="/david/2024/parvenir/"
  438. title="Liste de tous les articles 2024 associés à cette étiquette"
  439. rel="tag">#parvenir</a>
  440. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  441. </p>
  442. </nav>
  443. <h2>
  444. <a href="/david/2024/02/16/" title="Lien permanent vers cet article">uMap 2</a> <time datetime="2024-02-16">16 février 2024</time>
  445. </h2>
  446. <blockquote lang="en">
  447. <p>But it’s deeper that that. Open source is <em>good for humanity</em>. It’s only slightly hyperbolic to say that <mark>open source is one of the most notable collective successes</mark> of humankind as a species! It’s one of the few places where essentially all of humanity works together on something that benefits everyone. A world without open source would be substantially worse than the world we live&nbsp;in.</p>
  448. <p><cite><em><a data-link-domain="jacobian.org" href="https://jacobian.org/2024/feb/16/paying-maintainers-is-good/" hreflang="en"
  449. title="Consultation de l’article (anglais)">Paying people to work on open source is good actually</a>
  450. <a href="/david/cache/2024/ad0648259b032d4d0e5a9e6220c3c71e/" hreflang="en"
  451. data-tippy data-description="If you have a problem with maintainers getting paid then you have a problem with me and I suggest you let that one marinate."
  452. data-source="https://jacobian.org/2024/feb/16/paying-maintainers-is-good/"
  453. data-date="2024-02-17"
  454. data-favicon="https://jacobian.org/favicon.ico"
  455. data-domain="jacobian.org"
  456. ><svg xmlns="http://www.w3.org/2000/svg"
  457. width="24" height="24" viewBox="0 0 24 24" fill="none"
  458. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  459. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  460. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  461. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  462. </svg>
  463. <span class="sr-only">[archive]</span></a></em></cite></p>
  464. </blockquote>
  465. <p>J’ai déjà parlé <a href="/david/2024/01/18/" title="Open-source">d’open-source</a>, de <a href="/david/2024/01/31/" title="Mécénat">mécénat</a>, de <a href="/david/2024/02/09/" title="Version">versions</a>, de <a href="/david/2024/02/15/" title="Licence">licences</a>, mais comment se passe une <em>release</em> de produit&nbsp;open-source&#8239;?</p>
  466. <p>On commence à avoir affiné et <a data-link-domain="docs.umap-project.org" href="https://docs.umap-project.org/en/master/release/">documenté le processus</a>, on a <a data-link-domain="github.com" href="https://github.com/umap-project/umap-deploy-osmfr">des scripts dédiés</a> pour arriver à cela lorsque le moment est venu et nous sommes pour l’instant 2&nbsp;à pouvoir faire cela de bout en bout avec <a data-link-domain="yohanboniface.me" href="https://yohanboniface.me/">Yohan</a>. C’est peu mais c’est aussi +100% par rapport à l’année&nbsp;dernière…</p>
  467. <p>Nous n’étions pas très loin de repousser encore une fois la version&nbsp;2&nbsp;car il y avait un dernier changement majeur à faire passer. Tiraillés, nous avons repoussé cela à une version&nbsp;3&nbsp;quitte à ce qu’elle arrive prochainement. Franchir cette barrière psychologique était important pour la suite. Le faire en visio de bout en bout (comme une bonne partie de nos interactions sur le produit) était enthousiasmant. En bonus, c’était un vendredi&nbsp;après-midi.</p>
  468. <p>Voilà donc <a data-link-domain="docs.umap-project.org" href="https://docs.umap-project.org/en/master/changelog/#200-2024-02-16">un <em>changelog</em></a> déjà bien chargé. Nous nous sommes rendu compte au cours du processus que le versionnement était davantage pertinent pour les mainteneur·euses que pour les utilisateur·ices. Les fonctionnalités sont ajoutées au compte-goutte mais il faut prévenir les personnes qui vont mettre à jour l’outil de ce qui pourrait coincer lors du déploiement. Certains changements ont été volontaires (modules ESM =&gt; support navigateurs), d’autres contraints (fin du support de l’authification OpenStreetMap OAuth1), d’autres subis (Django&nbsp;5 =&gt; Python 3.10). Un beau&nbsp;mélange.</p>
  469. <p>Je ne vais rien annoncer pour une version&nbsp;3&nbsp;car ce serait ajouter une pression inutile et même si on a des intuitions tout est loin d’être priorisé. Dans mes motivations <em>personnelles</em>&nbsp;:</p>
  470. <ul>
  471. <li>aller vers une amélioration de&nbsp;l’accessibilité&#8239;;</li>
  472. <li>voir les <a data-link-domain="blog.notmyidea.org" href="https://blog.notmyidea.org/tag/umap.html">explorations d’Alexis</a> prendre&nbsp;forme&#8239;;</li>
  473. <li>clarifier les lieux de support / documentation en participant&nbsp;davantage.</li>
  474. </ul>
  475. <blockquote lang="en">
  476. <p>We have to accept the world as it is – even if it’s not the world we want. This means we have to be okay with the idea that maintainers need to be paid. Far too often I see arguments like: “<mark>maintainers shouldn’t be paid by private companies because the government should be supporting them.</mark>” Sure, this sounds great – but <em>governments aren’t doing this!</em> So this argument reduces to “open source maintainers shouldn’t be paid”. I can’t get on board with&nbsp;that.</p>
  477. <p><cite><em>Ibid.</em></cite></p>
  478. </blockquote>
  479. <p>Étant actuellement payé par l’Agence nationale de la cohésion des territoires pour participer à de l’<em>open-source</em>, je ne peux qu’approuver cette partie de la citation et être heureux de me trouver là où je suis. Les exceptions existent grâce à une conjonction de volontés, de privilèges et de coups de&nbsp;bol.</p>
  480. <a href="#hr-73" title="Lien vers cette section de la page"><hr id="hr-73" /></a>
  481. <blockquote lang="en">
  482. <p><a data-link-domain="github.com" href="https://github.com/astral-sh/uv">uv</a> represents a milestone in our pursuit of a “<a data-link-domain="blog.rust-lang.org" href="https://blog.rust-lang.org/2016/05/05/cargo-pillars.html#pillars-of-cargo">Cargo for Python</a>”: a comprehensive Python project and package manager that’s fast, reliable, and easy to&nbsp;use.</p>
  483. <p><cite><em><a data-link-domain="astral.sh" href="https://astral.sh/blog/uv" hreflang="en"
  484. title="Consultation de l’article (anglais)">uv: Python packaging in Rust</a>
  485. <a href="/david/cache/2024/359df603dbf60e8476027b2eb26cb7ce/" hreflang="en"
  486. data-tippy data-description="uv is an extremely fast Python package installer and resolver, designed as a drop-in alternative to pip and pip-tools."
  487. data-source="https://astral.sh/blog/uv"
  488. data-date="2024-02-17"
  489. data-favicon="https://astral.sh/static/favicon-32x32.png"
  490. data-domain="astral.sh"
  491. ><svg xmlns="http://www.w3.org/2000/svg"
  492. width="24" height="24" viewBox="0 0 24 24" fill="none"
  493. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  494. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  495. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  496. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  497. </svg>
  498. <span class="sr-only">[archive]</span></a></em></cite></p>
  499. </blockquote>
  500. <p>Un futur de Python se dessine et j’en apprécie les&nbsp;esquisses.</p>
  501. <nav>
  502. <p>
  503. <a href="/david/2024/commun/"
  504. title="Liste de tous les articles 2024 associés à cette étiquette"
  505. rel="tag">#commun</a>
  506. <a href="/david/2024/decision/"
  507. title="Liste de tous les articles 2024 associés à cette étiquette"
  508. rel="tag">#décision</a>
  509. <a href="/david/2024/opensource/"
  510. title="Liste de tous les articles 2024 associés à cette étiquette"
  511. rel="tag">#opensource</a>
  512. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  513. </p>
  514. </nav>
  515. <h2>
  516. <a href="/david/2024/02/15/" title="Lien permanent vers cet article">Licence</a> <time datetime="2024-02-15">15 février 2024</time>
  517. </h2>
  518. <blockquote lang="en">
  519. <p>Title: WTFPL Submission: http://crynwr.com/cgi-bin/ezmlm-cgi?17:mss:634:200902:aglgcgbhmfcheffmdgon License: http://sam.zoy.org/wtfpl/ Comments: It’s no different from dedication to the public domain. Author has submitted license approval request — author is free to make public domain dedication. Although he agrees with the recommendation, Mr. Michlmayr notes that <mark>public domain doesn’t exist in Europe.</mark> Recommend: Reject</p>
  520. <p><cite><em><a data-link-domain="opensource.org" href="https://opensource.org/meeting-minutes/minutes20090304/" hreflang="en"
  521. title="Consultation de l’article (anglais)">OSI Board Meeting Minutes, Wednesday, March 4, 2009</a>
  522. <a href="/david/cache/2024/90e6434dbda21f9d18ad8fa53c822b47/" hreflang="en"
  523. data-tippy data-description="Quorum reached and meeting called to order 08:10 am PST. Attendees Mr. Michael Tiemann, President Ms. Danese Cooper, Secretary and Treasurer Mr. Harshad Gune, Director Mr. Martin Michlmayr, Directo…"
  524. data-source="https://opensource.org/meeting-minutes/minutes20090304/"
  525. data-date="2024-02-17"
  526. data-favicon="https://i0.wp.com/opensource.org/wp-content/uploads/2023/01/cropped-cropped-OSI_Horizontal_Logo_0-e1674081292667.png?fit=32%2C32&ssl=1"
  527. data-domain="opensource.org"
  528. ><svg xmlns="http://www.w3.org/2000/svg"
  529. width="24" height="24" viewBox="0 0 24 24" fill="none"
  530. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  531. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  532. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  533. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  534. </svg>
  535. <span class="sr-only">[archive]</span></a></em></cite></p>
  536. </blockquote>
  537. <p>Nous sommes <a data-link-domain="github.com" href="https://github.com/umap-project/umap/pull/1605">passés</a> de la licence <a data-link-domain="wtfpl.net" href="http://www.wtfpl.net/">WTFPL</a> à <a data-link-domain="gnu.org" href="https://www.gnu.org/licenses/agpl-3.0.en.html">AGPLv3</a> pour uMap à partir de la version&nbsp;2 (à venir). Notamment car elle n’était pas acceptable pour l’<a data-link-domain="opensource.org" href="https://opensource.org/">OSI</a> ce qui nous posait des problèmes pour obtenir des financements européen ou pour bénéficier des plans <em>open-source</em> de services comme <a data-link-domain="browserstack.com" href="https://www.browserstack.com/open-source">BrowserStack</a>.</p>
  538. <p>Le seul service qui a accepté la licence WTFPL sans broncher est <a data-link-domain="sentry.io" href="https://sentry.io/for/open-source/">Sentry</a>, ceci en un temps&nbsp;record.</p>
  539. <blockquote lang="en">
  540. <p>Simply put, the AGPLv3 is effectively the GPLv3, but with an additional licensing term that ensures that users who interact <mark>over a network</mark> with modified versions of the program can receive the source code for that&nbsp;program.</p>
  541. <p><cite><em><a data-link-domain="fsf.org" href="https://www.fsf.org/bulletin/2021/fall/the-fundamentals-of-the-agplv3" hreflang="en"
  542. title="Consultation de l’article (anglais)">The fundamentals of the AGPLv3</a>
  543. <a href="/david/cache/2024/036789c955419215be9d88c6823b55aa/" hreflang="en"
  544. data-tippy data-description="The GNU Affero General Public License version 3 (AGPLv3) is the most protective of computer user freedom, yet it remains the most misunderstood of the GNU family of licenses."
  545. data-source="https://www.fsf.org/bulletin/2021/fall/the-fundamentals-of-the-agplv3"
  546. data-date="2024-02-17"
  547. data-favicon="https://www.fsf.org/favicon.ico"
  548. data-domain="fsf.org"
  549. ><svg xmlns="http://www.w3.org/2000/svg"
  550. width="24" height="24" viewBox="0 0 24 24" fill="none"
  551. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  552. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  553. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  554. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  555. </svg>
  556. <span class="sr-only">[archive]</span></a></em></cite></p>
  557. </blockquote>
  558. <a href="#hr-72" title="Lien vers cette section de la page"><hr id="hr-72" /></a>
  559. <blockquote>
  560. <p>La prévalence des drogues chinoises, et synthétiques en général, sur le marché a eu des conséquences au Mexique voisin. Dans une vidéo de fin 2020, The Intercept montre que la baisse drastique de demande en héroïne au profit du fentanyl a des conséquences humaines considérables. «&nbsp;Les cultivateurs de pavot au Mexique doivent se résoudre à migrer pour travailler ou se tourner vers le crime organisé&nbsp;», raconte le média, partageant des témoignages de personnes précaires encore appauvries par la&nbsp;situation.</p>
  561. <p><cite><em><a data-link-domain="basta.media" href="https://basta.media/crise-des-opioides-pourquoi-il-ne-faut-ni-oublier-ni-ignorer" hreflang="fr"
  562. title="Consultation de l’article">Crise des opioïdes&nbsp;: pourquoi il ne faut ni l’oublier ni l’ignorer</a>
  563. <a href="/david/cache/2024/1929f7183f694c7abeafeddb891fcf50/" hreflang="fr"
  564. data-tippy data-description="Aux États-Unis, le nombre de morts par overdose dépasse celui des décès sur la route. La crise des opioïdes, déclarée dans les années 2010, touche aussi de plein fouet le Canada. Et le phénomène dépasse les frontières nord-américaines."
  565. data-source="https://basta.media/crise-des-opioides-pourquoi-il-ne-faut-ni-oublier-ni-ignorer"
  566. data-date="2024-02-17"
  567. data-favicon="https://basta.media/squelettes/basta/favicon/favicon.svg?1634019699"
  568. data-domain="basta.media"
  569. ><svg xmlns="http://www.w3.org/2000/svg"
  570. width="24" height="24" viewBox="0 0 24 24" fill="none"
  571. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  572. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  573. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  574. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  575. </svg>
  576. <span class="sr-only">[archive]</span></a></em></cite></p>
  577. </blockquote>
  578. <p>Je n’avais pas encore pris conscience de tous les enjeux socio-économico-géopolitiques de ces nouvelles drogues. Il y a des guerres qui sont moins médiatisées que&nbsp;d’autres.</p>
  579. <nav>
  580. <p>
  581. <a href="/david/2024/commun/"
  582. title="Liste de tous les articles 2024 associés à cette étiquette"
  583. rel="tag">#commun</a>
  584. <a href="/david/2024/decision/"
  585. title="Liste de tous les articles 2024 associés à cette étiquette"
  586. rel="tag">#décision</a>
  587. <a href="/david/2024/opensource/"
  588. title="Liste de tous les articles 2024 associés à cette étiquette"
  589. rel="tag">#opensource</a>
  590. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  591. </p>
  592. </nav>
  593. <h2>
  594. <a href="/david/2024/02/11/" title="Lien permanent vers cet article">Violence</a> <time datetime="2024-02-11">11 février 2024</time>
  595. </h2>
  596. <p>Il y a une forme de violence à dire —&nbsp;de manière plus ou moins directe&nbsp;— à des personnes que les outils numériques qu’elles utilisent ne sont pas appropriés. D’autant plus en ne proposant pas d’alternative réellement&nbsp;utilisable&nbsp;:&nbsp;</p>
  597. <ul>
  598. <li>dans le contexte de littératie numérique de la&nbsp;personne,</li>
  599. <li>dans le contexte culturel du groupe de travail autour de la&nbsp;personne,</li>
  600. <li>dans les priorités actuelles du groupe pour lequel l’informatique reste un outil&nbsp;et/ou</li>
  601. <li>dans la situation de détresse en&nbsp;cours.</li>
  602. </ul>
  603. <p>Si la <em>ré</em>-action est inappropriée, c’est peut-être que l’action initiale ne l’était pas non&nbsp;plus…</p>
  604. <nav>
  605. <p>
  606. <a href="/david/2024/communaute/"
  607. title="Liste de tous les articles 2024 associés à cette étiquette"
  608. rel="tag">#communauté</a>
  609. <a href="/david/2024/opensource/"
  610. title="Liste de tous les articles 2024 associés à cette étiquette"
  611. rel="tag">#opensource</a>
  612. <a href="/david/2024/psychologie/"
  613. title="Liste de tous les articles 2024 associés à cette étiquette"
  614. rel="tag">#psychologie</a>
  615. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  616. </p>
  617. </nav>
  618. <h2>
  619. <a href="/david/2024/02/09/" title="Lien permanent vers cet article">Version</a> <time datetime="2024-02-09">9 février 2024</time>
  620. </h2>
  621. <p>Il y a cette appréhension à sortir une version&nbsp;2&nbsp;qui est bloquante sur pas mal de projets / produits / outils. Réduire ses ambitions quitte à planifier les versions 3&nbsp;et 4&nbsp;par la même occasion est un moyen de faire baisser la pression de ses propres attentes. Ce n’est plus <strong>l</strong>’évènement mais <em>un</em> évènement parmi les suivants qui vient s’intégrer dans une dynamique plus&nbsp;globale.</p>
  622. <p>Il y a d’un côté l’<a href="/david/2024/01/19/#hr-38">effort pour les personnes qui vont l’utiliser</a> et de l’autre <a data-link-domain="yolover.org" href="https://yolover.org/" hreflang="en"
  623. title="Consultation de l’article (anglais)">la motivation</a>
  624. <a href="/david/cache/2024/959374400b4bb6d58c74116ffd08281b/" hreflang="en"
  625. data-tippy data-description="Realistic versioning for modern software."
  626. data-source="https://yolover.org/"
  627. data-date="2024-02-09"
  628. data-favicon="https://yolover.org/favicon.png"
  629. data-domain="yolover.org"
  630. ><svg xmlns="http://www.w3.org/2000/svg"
  631. width="24" height="24" viewBox="0 0 24 24" fill="none"
  632. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  633. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  634. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  635. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  636. </svg>
  637. <span class="sr-only">[archive]</span></a> pour les personnes qui vont développer et maintenir le&nbsp;produit.</p>
  638. <p>Je caricature mais on est&nbsp;vendredi.</p>
  639. <nav>
  640. <p>
  641. <a href="/david/2024/apprentissage/"
  642. title="Liste de tous les articles 2024 associés à cette étiquette"
  643. rel="tag">#apprentissage</a>
  644. <a href="/david/2024/decision/"
  645. title="Liste de tous les articles 2024 associés à cette étiquette"
  646. rel="tag">#décision</a>
  647. <a href="/david/2024/opensource/"
  648. title="Liste de tous les articles 2024 associés à cette étiquette"
  649. rel="tag">#opensource</a>
  650. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  651. </p>
  652. </nav>
  653. <h2>
  654. <a href="/david/2024/02/03/" title="Lien permanent vers cet article">Archives</a> <time datetime="2024-02-03">3 février 2024</time>
  655. </h2>
  656. <blockquote lang="en">
  657. <p>Google will no longer be keeping a backup of the entire Internet. Google Search’s “cached” links have long been an alternative way to load a website that was down or had changed, but now the company is killing them off. Google “Search Liaison” Danny Sullivan confirmed the feature removal in an X post, saying the feature “was meant for helping people access pages when way back, you often couldn’t depend on a page loading. These days, <mark>things have greatly improved.</mark> So, it was decided to retire&nbsp;it.”</p>
  658. <p><cite><em><a data-link-domain="arstechnica.com" href="https://arstechnica.com/gadgets/2024/02/google-search-kills-off-cached-webpages/" hreflang="en"
  659. title="Consultation de l’article (anglais)">Google will no longer back up the Internet: Cached webpages are dead</a>
  660. <a href="/david/cache/2024/75c7b6350ba18a5a11ee3bbf8b3b64be/" hreflang="en"
  661. data-tippy data-description="Google Search will no longer make site backups while crawling the web."
  662. data-source="https://arstechnica.com/gadgets/2024/02/google-search-kills-off-cached-webpages/"
  663. data-date="2024-02-03"
  664. data-favicon="https://cdn.arstechnica.net/wp-content/themes/ars/assets/img/material-ars-db41652381.png"
  665. data-domain="arstechnica.com"
  666. ><svg xmlns="http://www.w3.org/2000/svg"
  667. width="24" height="24" viewBox="0 0 24 24" fill="none"
  668. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  669. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  670. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  671. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  672. </svg>
  673. <span class="sr-only">[archive]</span></a></em></cite></p>
  674. </blockquote>
  675. <p><em>(rires)</em></p>
  676. <p>Forcément en lisant ça un samedi matin, j’étais immédiatement motivé pour améliorer la façon dont j’archive les liens par ici. À commencer par des méta-données qui permettraient d’avoir une prévisualisation des liens un peu&nbsp;enrichie.</p>
  677. <p>Je me dis que je ne dois pas être le seul à essayer d’extraire des informations des pages. Et j’en trouve pas mal&nbsp;: <a data-link-domain="github.com" href="https://github.com/gri38/hyperlink_preview">hyperlink_preview</a>, <a data-link-domain="github.com" href="https://github.com/scrapinghub/extruct">extruct</a> ou <a data-link-domain="github.com" href="https://github.com/seanbreckenridge/url_cache">url_cache</a> pour ne citer qu’eux. Cela me met sur la piste de <a data-link-domain="github.com" href="https://github.com/michaelhelmick/lassie">Lassie</a> qui semble extraire ce que j’aimerais avoir&nbsp;: une image ou favicon, potentiellement une description, ainsi qu’une langue. Jake Lazaroff m’avait <a href="/david/2024/02/01/#hr-60">depuis répondu</a> qu’il génère en fait ses vignettes au moment de la <a data-link-domain="gist.github.com" href="https://gist.github.com/jakelazaroff/36b9665efe02870576acfc033171d6bf">construction du site</a>. Je ne veux pas totalement suivre cette approche car je ne veux pas stocker d’images additionnelles mais je vais essayer d’avoir une solution&nbsp;hybride.</p>
  678. <p>Cela m’embête de plus en plus de coupler le générateur de site aux (méta-)données des archives. <em>À&nbsp;méditer.</em></p>
  679. <p>Pour ce qui est de l’interface, ça attendra un autre jour. J’ai tout de même ajouté des attributs <code>hreflang</code> et la bonne langue dans les pages d’archives, un truc qui me grattait depuis un bout de&nbsp;temps.</p>
  680. <a href="#hr-62" title="Lien vers cette section de la page"><hr id="hr-62" /></a>
  681. <p>Cela fait <a href="/david/2020/02/07/#sonos">bien longtemps</a> que je regrette d’avoir acheté des enceintes Sonos. Hier —&nbsp;encore une fois frustré par l’application proposée par défaut&nbsp;— je découvre <a data-link-domain="github.com" href="https://github.com/SoCo/SoCo">SoCo</a> ainsi que <a data-link-domain="github.com" href="https://github.com/avantrec/soco-cli">soco-cli</a> après quelques recherches. Je passe ensuite la soirée à batailler avec Automator pour pouvoir faire un clic-droit sur un dossier local et que ça me lise les fichiers FLAC qui sont&nbsp;dedans.</p>
  682. <p>J’arrive à la solution&nbsp;suivante&nbsp;:</p>
  683. <pre><code>on run {input, parameters}
  684. tell application &quot;Terminal&quot;
  685. do script &quot;cd ~/sonos &amp;&amp; sonos Chambre play_dir '&quot; &amp; (POSIX path of input) &amp; &quot;'&quot;
  686. end tell
  687. return input
  688. end run
  689. </code></pre>
  690. <p>Ce n’est pas très élégant et je n’ai pas réussi à faire en sorte que ça se lance dans iTerm mais au moins ça joue de la&nbsp;musique.</p>
  691. <a href="#hr-63" title="Lien vers cette section de la page"><hr id="hr-63" /></a>
  692. <blockquote lang="en">
  693. <p><strong>drab</strong> focuses on providing JavaScript functionality where it’s most useful. Many of the elements are helpful wrappers <mark>around browser APIs.</mark> Here are some of the features of the&nbsp;library.</p>
  694. <p><cite><em><a data-link-domain="drab.robino.dev" href="https://drab.robino.dev/" hreflang="en"
  695. title="Consultation de l’article (anglais)">drab - A Headless Custom Element Library</a>
  696. <a href="/david/cache/2024/2a1235215c277ebb8a0e9acb7ffd91e0/" hreflang="en"
  697. data-tippy data-description="A headless custom element library."
  698. data-source="https://drab.robino.dev/"
  699. data-date="2024-02-03"
  700. data-favicon="https://drab.robino.dev/favicon.svg"
  701. data-domain="drab.robino.dev"
  702. ><svg xmlns="http://www.w3.org/2000/svg"
  703. width="24" height="24" viewBox="0 0 24 24" fill="none"
  704. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  705. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  706. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  707. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  708. </svg>
  709. <span class="sr-only">[archive]</span></a></em></cite></p>
  710. </blockquote>
  711. <p>Le futur qui se dessine à ce sujet est <em>très</em> stimulant. Cela fait 15&nbsp;ans qu’il y a une production de masse de code JS qui n’est ni réutilisable, ni interopérable. J’ai bon espoir que ce soit en train de&nbsp;changer.</p>
  712. <a href="#hr-64" title="Lien vers cette section de la page"><hr id="hr-64" /></a>
  713. <blockquote lang="en">
  714. <p>When trying to defend this, economists typically claim that we have unlimited desire for new stuff. Apparently, rather than dedicating the time gains from technology to leisure, we pour it into making more stuff for ourselves. This is bogus. People do have a limited desire for new things, because dedicating yourself to endless production (and consumption) comes at the expense of hanging out with your family, friends and pets, or doing stuff like walking in the wilderness or surfing the waves. What people actually desire is a balance of many things, but <mark>the system we’re stuck in has unlimited desire for one direction only.</mark> That’s because it’s a vortex unleashed by humans who no longer know how to stop&nbsp;it.</p>
  715. <p><cite><em><a data-link-domain="brettscott.substack.com" href="https://brettscott.substack.com/p/tech-doesnt-make-our-lives-easier" hreflang="en"
  716. title="Consultation de l’article (anglais)">Tech doesn’t make our lives easier. It makes them faster</a>
  717. <a href="/david/cache/2024/9750840b448f07a2f2594bb25da23836/" hreflang="en"
  718. data-tippy data-description="Supposedly technologies like AI and digital payments make our lives easier. In reality convenience is an illusion used to sell us automation-driven acceleration"
  719. data-source="https://brettscott.substack.com/p/tech-doesnt-make-our-lives-easier"
  720. data-date="2024-02-03"
  721. data-favicon="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3d5b3dd-9c2b-4f8c-a2b7-f39933be1d53%2Ffavicon-16x16.png"
  722. data-domain="brettscott.substack.com"
  723. ><svg xmlns="http://www.w3.org/2000/svg"
  724. width="24" height="24" viewBox="0 0 24 24" fill="none"
  725. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  726. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  727. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  728. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  729. </svg>
  730. <span class="sr-only">[archive]</span></a></em></cite></p>
  731. </blockquote>
  732. <p>Un bon article à lire après 24h de galères&nbsp;techniques&nbsp;😅.</p>
  733. <nav>
  734. <p>
  735. <a href="/david/2024/dependance/"
  736. title="Liste de tous les articles 2024 associés à cette étiquette"
  737. rel="tag">#dépendance</a>
  738. <a href="/david/2024/opensource/"
  739. title="Liste de tous les articles 2024 associés à cette étiquette"
  740. rel="tag">#opensource</a>
  741. <a href="/david/2024/technique/"
  742. title="Liste de tous les articles 2024 associés à cette étiquette"
  743. rel="tag">#technique</a>
  744. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  745. </p>
  746. </nav>
  747. <h2>
  748. <a href="/david/2024/01/18/" title="Lien permanent vers cet article">Open-source</a> <time datetime="2024-01-18">18 janvier 2024</time>
  749. </h2>
  750. <p>Deux phrases du&nbsp;jour&nbsp;:</p>
  751. <ol>
  752. <li><q lang="en">Open Source is the Right to Repair, for software.</q>, <a data-link-domain="macaw.social" href="https://macaw.social/@andypiper/111774169944729337">sur&nbsp;masto</a></li>
  753. <li><q lang="fr">uMap est-il un produit ou un commun&#8239;?</q>, en réunion&nbsp;interne</li>
  754. </ol>
  755. <p>Faute de temps, le développement est laissé comme exercice aux&nbsp;lecteur·ices.</p>
  756. <nav>
  757. <p>
  758. <a href="/david/2024/commun/"
  759. title="Liste de tous les articles 2024 associés à cette étiquette"
  760. rel="tag">#commun</a>
  761. <a href="/david/2024/decision/"
  762. title="Liste de tous les articles 2024 associés à cette étiquette"
  763. rel="tag">#décision</a>
  764. <a href="/david/2024/opensource/"
  765. title="Liste de tous les articles 2024 associés à cette étiquette"
  766. rel="tag">#opensource</a>
  767. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  768. </p>
  769. </nav>
  770. <form action="/david/recherche/" method="get">
  771. <fieldset>
  772. <legend>Recherche</legend>
  773. <label for="input-search">Termes de votre recherche :</label>
  774. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  775. <input type="submit" value="Chercher">
  776. <p id="indexation-infos">
  777. <small>
  778. Seuls les contenus de ces 8 dernières années sont indexés.
  779. </small>
  780. </p>
  781. </fieldset>
  782. </form>
  783. <aside>
  784. <theme-toggle></theme-toggle>
  785. </aside>
  786. </article>
  787. <hr>
  788. <footer>
  789. <p>
  790. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  791. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  792. <a href="http://larlet.com"
  793. title="Go to my English profile"
  794. data-instant>Pro</a>
  795. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  796. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  797. </p>
  798. <template id="theme-selector">
  799. <form>
  800. <style type="text/css">
  801. fieldset div {
  802. text-align: center;
  803. }
  804. </style>
  805. <fieldset>
  806. <legend>Thème</legend>
  807. <div>
  808. <label>
  809. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  810. Auto
  811. </label>
  812. <label>
  813. <input type="radio" value="dark" name="chosen-color-scheme">
  814. Foncé
  815. </label>
  816. <label>
  817. <input type="radio" value="light" name="chosen-color-scheme">
  818. Clair
  819. </label>
  820. </div>
  821. </fieldset>
  822. </form>
  823. </template>
  824. </footer>
  825. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  826. <script>
  827. class ThemeToggle extends HTMLElement {
  828. constructor() {
  829. super()
  830. const themeSelectorTemplate = document.querySelector('#theme-selector')
  831. const form = themeSelectorTemplate.content.firstElementChild
  832. this.attachShadow({ mode: 'open' })
  833. this.shadowRoot.appendChild(form.cloneNode(true))
  834. }
  835. connectedCallback() {
  836. const form = this.shadowRoot.querySelector('form')
  837. form.addEventListener('change', (e) => {
  838. const chosenColorScheme = e.target.value
  839. localStorage.setItem('theme', chosenColorScheme)
  840. toggleTheme(chosenColorScheme)
  841. })
  842. const selectedTheme = localStorage.getItem('theme')
  843. if (selectedTheme && selectedTheme !== 'undefined') {
  844. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  845. }
  846. }
  847. }
  848. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  849. window.addEventListener('load', () => {
  850. let colorsLayer = undefined
  851. let hasDarkRules = false
  852. for (const styleSheet of Array.from(document.styleSheets)) {
  853. let mediaRules = []
  854. for (const layerRule of styleSheet.cssRules) {
  855. if (!(layerRule instanceof CSSLayerBlockRule)) {
  856. continue
  857. }
  858. if (layerRule.name === 'colors') {
  859. colorsLayer = layerRule
  860. }
  861. for (const cssRule of layerRule.cssRules) {
  862. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  863. continue
  864. }
  865. // WARNING: Safari does not have/supports `conditionText`.
  866. if (cssRule.conditionText) {
  867. if (cssRule.conditionText !== prefersColorSchemeDark) {
  868. continue
  869. }
  870. } else {
  871. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  872. continue
  873. }
  874. }
  875. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  876. }
  877. }
  878. // WARNING: do not try to insert a Rule to a styleSheet you are
  879. // currently iterating on, otherwise the browser will be stuck
  880. // in a infinite loop…
  881. for (const mediaRule of mediaRules) {
  882. // Safari requires the `0` second parameter (even if default).
  883. colorsLayer.insertRule(mediaRule.cssText, 0)
  884. hasDarkRules = true
  885. }
  886. }
  887. if (hasDarkRules) {
  888. if ('customElements' in window && !customElements.get('theme-toggle')) {
  889. customElements.define('theme-toggle', ThemeToggle)
  890. }
  891. }
  892. })
  893. </script>
  894. </body>
  895. </html>