Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

index.html 26KB

20時間前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  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. Vain
  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="wordfreq was built by collecting a whole lot of text in a lot of languages. That used to be a pretty reasonable thing to do, and not the kind of thing someone would be likely to object to. Now, the text-slurping tools are mostly used for training generative AI, and people are quite rightly on the defensive. If someone is collecting all the text from your books, articles, Web site, or public posts, it’s very likely because they are creating a plagiarism machine that will claim your words as its own.">
  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. .tippy-content {
  107. min-width: 280px;
  108. padding: .5rem;
  109. font-size: calc(var(--fluid-0) * 0.8);
  110. font-family: var(--labor-font);
  111. letter-spacing: initial;
  112. text-align: left;
  113. }
  114. .tippy-content h3 {
  115. margin-top: 0;
  116. }
  117. .tippy-content h3 img {
  118. max-width: 2rem;
  119. max-height: 2rem;
  120. display: inline-block;
  121. }
  122. .tippy-content .tippy-links {
  123. display: flex;
  124. justify-content: space-around;
  125. }
  126. .tippy-content a {
  127. padding: .4rem;
  128. color: #F06048;
  129. }
  130. </style>
  131. <body data-instant-intensity="viewport-all">
  132. <article>
  133. <header>
  134. <hgroup>
  135. <h1>Vain</h1>
  136. <p>Le <time datetime="2024-09-30">30 septembre 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/08/10/"
  143. title="Publication précédente : Kudopamine">← Précédent</a> •
  144. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  145. <a href="/david/recherche/"
  146. title="Aller à la page de recherche"
  147. rel="search" data-no-instant>Recherche</a>
  148. </p>
  149. </nav>
  150. <blockquote lang="en">
  151. <p>wordfreq was built by collecting a whole lot of text in a lot of languages. That used to be a pretty reasonable thing to do, and not the kind of thing someone would be likely to object to. Now, the text-slurping tools are mostly used for training generative AI, and people are quite rightly on the defensive. <mark>If someone is collecting all the text from your books, articles, Web site, or public posts, it’s very likely because they are creating a plagiarism machine</mark> that will claim your words as its&nbsp;own.</p>
  152. <p>So I don’t want to work on anything that could be confused with generative AI, or that could benefit generative&nbsp;AI.</p>
  153. <p><cite><em><a data-link-domain="github.com" href="https://github.com/rspeer/wordfreq/blob/master/SUNSET.md#i-dont-want-to-be-part-of-this-scene-anymore" hreflang="en"
  154. title="Consultation de l’article (anglais)">I don’t want to be part of this scene anymore - Why wordfreq will not be updated</a>
  155. <a href="/david/cache/2024/1cd6127ccec88387f4804f0c3cf1011a/" hreflang="en"
  156. data-tippy data-description="Access a database of word frequencies, in various natural languages. - rspeer/wordfreq"
  157. data-source="https://github.com/rspeer/wordfreq/blob/master/SUNSET.md#i-dont-want-to-be-part-of-this-scene-anymore"
  158. data-date="2024-09-30"
  159. data-favicon="https://github.githubassets.com/favicons/favicon.png"
  160. data-domain="github.com"
  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></em></cite></p>
  169. </blockquote>
  170. <p>Je me devais de <a href="/david/biologeek/archives/20040930-ouverture-de-rideau/">marquer le coup</a>&nbsp;🎂.</p>
  171. <p>Ces derniers mois, je me pose beaucoup de questions au sujet du partage, du pillage, de ce que ça veut dire de transmettre aujourd’hui et surtout à quelle échelle. Peut-être que les <abbr lang="en" title="Large Language Model">LLM</abbr> sont une <strong>nouvelle forme de transmission</strong> qui passe par une transformation sur laquelle l’instigateur n’a aucun contrôle. Cela laisse reposer une incroyable responsabilité sur les intermédiaires. La communication directe est déjà un exercice tellement difficile… quels effets de bord à moyen terme sur la crédibilité et la confiance de ce qui est&nbsp;partagé&#8239;?</p>
  172. <p>Et comment peut-on refuser&#8239;? Comment conserver une interaction directe, humaine&#8239;? Peut-être que c’est finalement cela qui est en train d’être perdu lorsqu’on écrit sur le Web&nbsp;: douter du nombre d’intermédiaires. Un premier cercle va avoir droit à la pensée «&nbsp;originale&nbsp;» (interprétée), les suivants auront une pensée «&nbsp;transformée&nbsp;» (hybridée) par la machine et ses concepteur·ices pour une diffusion à une échelle qui m’échappe encore, avec une potentielle volonté manipulatrice qui m’échappe encore&nbsp;plus.</p>
  173. <p>Je ne sais pas encore si j’accepterais ici un <em>loginwall</em>, un <em>paywall</em>, un <em>throttling</em> hyper agressif ou une autre solution à inventer. Je sens bien que ma motivation à publier ouvertement est en chute libre dans un tel contexte. Quitte a être inéluctablement aspiré, peut-être qu’il faut que je me concentre sur des projets qui ont du sens et qui produisent / mettent en scène de la donnée qui mérite davantage d’être&nbsp;diffusée.</p>
  174. <p>À vingt ans, il est peut-être temps de laisser cet espace vivre sa vie aussi, le libérer et recommencer ailleurs, plus petit, différent. Toute corrélation avec ma <a href="/david/2024/06/06/" title="Sensibilité">situation professionnelle</a> serait bien évidemment&nbsp;fortuite.</p>
  175. <blockquote lang="en">
  176. <p>There’s something subversive about writing <mark>without concern</mark> for marketability or&nbsp;scale.</p>
  177. <p><cite><em><a data-link-domain="tracydurnell.com" href="https://tracydurnell.com/2024/09/29/the-secret-power-of-a-blog/" hreflang="en"
  178. title="Consultation de l’article (anglais)">The secret power of a blog</a>
  179. <a href="/david/cache/2024/72bb85e63c3eb4caed75fbb77608a638/" hreflang="en"
  180. data-tippy data-description=""
  181. data-source="https://tracydurnell.com/2024/09/29/the-secret-power-of-a-blog/"
  182. data-date="2024-09-30"
  183. data-favicon="https://tracydurnell.com/favicon.ico"
  184. data-domain="tracydurnell.com"
  185. ><svg xmlns="http://www.w3.org/2000/svg"
  186. width="24" height="24" viewBox="0 0 24 24" fill="none"
  187. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  188. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  189. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  190. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  191. </svg>
  192. <span class="sr-only">[archive]</span></a></em></cite></p>
  193. </blockquote>
  194. <p>Une part d’innocence n’est&nbsp;plus.</p>
  195. <a href="#hr-202" title="Lien vers cette section de la page"><hr id="hr-202" /></a>
  196. <blockquote lang="en">
  197. <p>It will no longer be enough to blog in order to merely “put out content”. The key will be what has always been key to great blogging: expressing your unique, inimitable&nbsp;impression.</p>
  198. <p>Blogging is expressing your impression. It’s deriving action from thought. <mark>Regardless of how much the AI sphere may not be giving thought to its actions, continued blogging in the face of that reality is deliberate action with thought</mark> — something only us humans can do. Blog. Blog against the dying of the&nbsp;light.</p>
  199. <p><cite><em><a data-link-domain="blog.jim-nielsen.com" href="https://blog.jim-nielsen.com/2024/impressionist-blogging/" hreflang="en"
  200. title="Consultation de l’article (anglais)">The Impressionist Blogging Movement</a>
  201. <a href="/david/cache/2024/1a30c47a2b293dcfaee45ee5a67efdd1/" hreflang="en"
  202. data-tippy data-description="Writing about the big beautiful mess that is making things for the world wide web."
  203. data-source="https://blog.jim-nielsen.com/2024/impressionist-blogging/"
  204. data-date="2024-09-30"
  205. data-favicon="https://blog.jim-nielsen.com/favicon.ico"
  206. data-domain="blog.jim-nielsen.com"
  207. ><svg xmlns="http://www.w3.org/2000/svg"
  208. width="24" height="24" viewBox="0 0 24 24" fill="none"
  209. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  210. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  211. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  212. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  213. </svg>
  214. <span class="sr-only">[archive]</span></a></em></cite></p>
  215. </blockquote>
  216. <a href="#hr-203" title="Lien vers cette section de la page"><hr id="hr-203" /></a>
  217. <blockquote>
  218. <p>En ce qui concerne la recherche, il me semble qu’il faudrait interdire toutes les applications: si on veut faire de la recherche avec les LLM, il me semble nécessaire de les utiliser en dehors des couches applicatives, en créant des applications ad hoc. Tous les autres usages devraient être bannis, parce que <mark>l’usage de LLM dans des applications existantes rend impossible la compréhension</mark> précise de la&nbsp;méthodologie.</p>
  219. <p><cite><em><a data-link-domain="blog.sens-public.org" href="http://blog.sens-public.org/marcellovitalirosati/chatgpttronconneuse.html" hreflang="en"
  220. title="Consultation de l’article (anglais)">ChatGPT et la tronçonneuse</a>
  221. <a href="/david/cache/2024/62e66665ed5fa02d7beff383c877fdce/" hreflang="en"
  222. data-tippy data-description="Blogue de Marcello Vitali-Rosati"
  223. data-source="http://blog.sens-public.org/marcellovitalirosati/chatgpttronconneuse.html"
  224. data-date="2024-09-30"
  225. data-favicon="http://blog.sens-public.org/marcellovitalirosati/favicon.png"
  226. data-domain="blog.sens-public.org"
  227. ><svg xmlns="http://www.w3.org/2000/svg"
  228. width="24" height="24" viewBox="0 0 24 24" fill="none"
  229. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  230. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  231. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  232. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  233. </svg>
  234. <span class="sr-only">[archive]</span></a></em></cite></p>
  235. </blockquote>
  236. <a href="#hr-204" title="Lien vers cette section de la page"><hr id="hr-204" /></a>
  237. <blockquote>
  238. <p>Révolution dans l’identité biologique! Des cellules de votre mère, de votre frère aîné ou même de votre tante pourraient bien se cacher dans votre propre&nbsp;corps.</p>
  239. <p>Ces cellules, qui ne vous appartiennent pas, vous ont été transmises in utero et sont hébergées dans vos organes, votre sang, votre moelle osseuse. Mais quel rôle jouent-elles? Longtemps associées aux maladies auto-immunes, la découverte de leur capacité à régénérer certains tissus change complètement la perception qu’on a de ces cellules étrangères. <mark>L’étude du microchimérisme ouvre une nouvelle voie</mark> thérapeutique en médecine de&nbsp;régénération.</p>
  240. <p><cite><em><a data-link-domain="coeurdessciences.uqam.ca" href="https://coeurdessciences.uqam.ca/component/eventlist/details/1220-microchimerisme-ces-autres-en-nous.html">Ces autres en nous</a></em>, Nathalie&nbsp;Lambert</cite></p>
  241. </blockquote>
  242. <p>Fascinante intervention de Nathalie Lambert sur les cellules qui se transmettent entre générations et fratries. Et même d’enfants qui ne sont pas arrivés à terme. Avec le côté <em>pharmakon</em> de ces cellules (souches) qui peuvent aider dans certaines situations et potentiellement activer des réactions auto-immunes dans&nbsp;d’autres.</p>
  243. <p>Une bonne partie de ce que j’ai appris en biologie il y a 20&nbsp;ans est déjà fausse. C’est extrêmement&nbsp;stimulant.</p>
  244. <p><a href="/david/biologeek/archives/20060119-open-articles-liberez-votre-savoir/">D’autres choses</a> n’ont <a data-link-domain="forbes.com" href="https://www.forbes.com/sites/michaeltnietzel/2024/09/16/scientists-file-antitrust-lawsuit-against-six-journal-publishers/">pas beaucoup</a> <a data-link-domain="affordance.framasoft.org" href="https://affordance.framasoft.org/2024/09/chercheur-auteur-argent-du-beurre-nantes-universite-contre-philippe-forest/">changé</a> par&nbsp;contre…</p>
  245. <a href="#hr-205" title="Lien vers cette section de la page"><hr id="hr-205" /></a>
  246. <blockquote>
  247. <p>J’aime cette façon qu’on a, aussi, en vieillissant, de ne pas vraiment changer, au contraire, de se retrouver un peu, tout en découvrant sur soi des choses qui&nbsp;apaisent.</p>
  248. <p><cite><em><a data-link-domain="sacripanne.net" href="https://sacripanne.net/post/2024/09/20/Le-privil%C3%A8ge-de-l-%C3%A2ge" hreflang="fr"
  249. title="Consultation de l’article">Le privilège de l’âge</a>
  250. <a href="/david/cache/2024/4703553d711667b5d3a10c0592c51508/" hreflang="fr"
  251. data-tippy data-description="L'âge est un sujet de conversation qui passionne les foules. On est toujours trop vieux ou trop jeune pour : quelque chose, les autres, faire bien, faire mal, être à temps, en"
  252. data-source="https://sacripanne.net/post/2024/09/20/Le-privil%C3%A8ge-de-l-%C3%A2ge"
  253. data-date="2024-09-30"
  254. data-favicon=""
  255. data-domain="sacripanne.net"
  256. ><svg xmlns="http://www.w3.org/2000/svg"
  257. width="24" height="24" viewBox="0 0 24 24" fill="none"
  258. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  259. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  260. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  261. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  262. </svg>
  263. <span class="sr-only">[archive]</span></a></em></cite></p>
  264. </blockquote>
  265. <a href="#hr-206" title="Lien vers cette section de la page"><hr id="hr-206" /></a>
  266. <p>Mot du jour&nbsp;: Friluftsliv.</p>
  267. <a href="#hr-207" title="Lien vers cette section de la page"><hr id="hr-207" /></a>
  268. <p>Acronyme du jour&nbsp;: <a data-link-domain="rationalwiki.org" href="https://rationalwiki.org/wiki/WEIRD">W.E.I.R.D.</a></p>
  269. <a href="#hr-208" title="Lien vers cette section de la page"><hr id="hr-208" /></a>
  270. <p>Lecture du jour&nbsp;: <a data-link-domain="segalcentre.org" href="https://www.segalcentre.org/common/sitemedia/201819_Shows/FR_AllyToolkit.pdf">Trousse d’outils pour les alliées aux luttes autochtones</a> (PDF, 4Mo, <a href="/static/david/blog/2024/FR_AllyToolkit.pdf">cache</a>).</p>
  271. <nav>
  272. <p>
  273. <a href="/david/2024/adaptation/"
  274. title="Liste de tous les articles 2024 associés à cette étiquette"
  275. rel="tag">#adaptation</a>
  276. <a href="/david/2024/ecriture/"
  277. title="Liste de tous les articles 2024 associés à cette étiquette"
  278. rel="tag">#écriture</a>
  279. <a href="/david/2024/ia/"
  280. title="Liste de tous les articles 2024 associés à cette étiquette"
  281. rel="tag">#IA</a>
  282. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  283. </p>
  284. </nav>
  285. <nav>
  286. <p>
  287. <a rel="prev"
  288. href="/david/2024/08/10/"
  289. title="Publication précédente : Kudopamine">← Précédent</a> •
  290. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  291. </p>
  292. </nav>
  293. <form action="/david/recherche/" method="get">
  294. <fieldset>
  295. <legend>Recherche</legend>
  296. <label for="input-search">Termes de votre recherche :</label>
  297. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  298. <input type="submit" value="Chercher">
  299. <p id="indexation-infos">
  300. <small>
  301. Seuls les contenus de ces 8 dernières années sont indexés.
  302. </small>
  303. </p>
  304. </fieldset>
  305. </form>
  306. <aside>
  307. <theme-toggle></theme-toggle>
  308. </aside>
  309. </article>
  310. <hr>
  311. <footer>
  312. <p>
  313. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  314. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  315. <a href="http://larlet.com"
  316. title="Go to my English profile"
  317. data-instant>Pro</a>
  318. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  319. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  320. </p>
  321. <template id="theme-selector">
  322. <form>
  323. <style type="text/css">
  324. fieldset div {
  325. text-align: center;
  326. }
  327. </style>
  328. <fieldset>
  329. <legend>Thème</legend>
  330. <div>
  331. <label>
  332. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  333. Auto
  334. </label>
  335. <label>
  336. <input type="radio" value="dark" name="chosen-color-scheme">
  337. Foncé
  338. </label>
  339. <label>
  340. <input type="radio" value="light" name="chosen-color-scheme">
  341. Clair
  342. </label>
  343. </div>
  344. </fieldset>
  345. </form>
  346. </template>
  347. </footer>
  348. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  349. <script>
  350. class ThemeToggle extends HTMLElement {
  351. constructor() {
  352. super()
  353. const themeSelectorTemplate = document.querySelector('#theme-selector')
  354. const form = themeSelectorTemplate.content.firstElementChild
  355. this.attachShadow({ mode: 'open' })
  356. this.shadowRoot.appendChild(form.cloneNode(true))
  357. }
  358. connectedCallback() {
  359. const form = this.shadowRoot.querySelector('form')
  360. form.addEventListener('change', (e) => {
  361. const chosenColorScheme = e.target.value
  362. localStorage.setItem('theme', chosenColorScheme)
  363. toggleTheme(chosenColorScheme)
  364. })
  365. const selectedTheme = localStorage.getItem('theme')
  366. if (selectedTheme && selectedTheme !== 'undefined') {
  367. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  368. }
  369. }
  370. }
  371. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  372. window.addEventListener('load', () => {
  373. let colorsLayer = undefined
  374. let hasDarkRules = false
  375. for (const styleSheet of Array.from(document.styleSheets)) {
  376. let mediaRules = []
  377. for (const layerRule of styleSheet.cssRules) {
  378. if (!(layerRule instanceof CSSLayerBlockRule)) {
  379. continue
  380. }
  381. if (layerRule.name === 'colors') {
  382. colorsLayer = layerRule
  383. }
  384. for (const cssRule of layerRule.cssRules) {
  385. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  386. continue
  387. }
  388. // WARNING: Safari does not have/supports `conditionText`.
  389. if (cssRule.conditionText) {
  390. if (cssRule.conditionText !== prefersColorSchemeDark) {
  391. continue
  392. }
  393. } else {
  394. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  395. continue
  396. }
  397. }
  398. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  399. }
  400. }
  401. // WARNING: do not try to insert a Rule to a styleSheet you are
  402. // currently iterating on, otherwise the browser will be stuck
  403. // in a infinite loop…
  404. for (const mediaRule of mediaRules) {
  405. // Safari requires the `0` second parameter (even if default).
  406. colorsLayer.insertRule(mediaRule.cssText, 0)
  407. hasDarkRules = true
  408. }
  409. }
  410. if (hasDarkRules) {
  411. if ('customElements' in window && !customElements.get('theme-toggle')) {
  412. customElements.define('theme-toggle', ThemeToggle)
  413. }
  414. }
  415. })
  416. </script>
  417. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  418. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  419. <script>
  420. tippy('[data-tippy]', {
  421. content(reference) {
  422. reference.addEventListener('click', (e) => e.preventDefault())
  423. return `
  424. <h3 lang="fr">
  425. <img src="${reference.dataset.favicon}" loading="lazy">
  426. <a href="${reference.dataset.source}"
  427. >Article sur ${reference.dataset.domain}</a></h3>
  428. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  429. <div class="tippy-links" lang="fr">
  430. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  431. </div>
  432. `
  433. },
  434. allowHTML: true,
  435. interactive: true,
  436. delay: [150, 700],
  437. hideOnClick: false
  438. })
  439. </script>
  440. <script type="module">
  441. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  442. const markObserver = new IntersectionObserver((entries, observer) => {
  443. const computedStyle = getComputedStyle(document.documentElement)
  444. const markBackground = computedStyle.getPropertyValue('--mark-background')
  445. for (const entry of entries) {
  446. if (entry.intersectionRatio === 0) continue
  447. const markElement = entry.target
  448. markElement.style.backgroundColor = 'inherit'
  449. const annotation = annotate(
  450. markElement, {
  451. type: 'highlight',
  452. multiline: true,
  453. color: markBackground,
  454. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  455. animate: false
  456. }
  457. )
  458. annotation.show()
  459. observer.unobserve(markElement)
  460. }
  461. }, {threshold: 1.0})
  462. for (const markElement of document.querySelectorAll('mark')) {
  463. markObserver.observe(markElement)
  464. }
  465. </script>
  466. </body>
  467. </html>