Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  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. <!-- To get attribution when linking on mastodon. -->
  106. <meta name="fediverse:creator" content="@david@larlet.fr">
  107. <style type="text/css">
  108. .tippy-content {
  109. min-width: 280px;
  110. padding: .5rem;
  111. font-size: calc(var(--fluid-0) * 0.8);
  112. font-family: var(--labor-font);
  113. letter-spacing: initial;
  114. text-align: left;
  115. }
  116. .tippy-content h3 {
  117. margin-top: 0;
  118. }
  119. .tippy-content h3 img {
  120. max-width: 2rem;
  121. max-height: 2rem;
  122. display: inline-block;
  123. }
  124. .tippy-content .tippy-links {
  125. display: flex;
  126. justify-content: space-around;
  127. }
  128. .tippy-content a {
  129. padding: .4rem;
  130. color: #F06048;
  131. }
  132. </style>
  133. <body data-instant-intensity="viewport-all">
  134. <article>
  135. <header>
  136. <hgroup>
  137. <h1>Vain</h1>
  138. <p>Le <time datetime="2024-09-30">30 septembre 2024</time></p>
  139. </hgroup>
  140. </header>
  141. <nav>
  142. <p>
  143. <a rel="prev"
  144. href="/david/2024/08/10/"
  145. title="Publication précédente : Kudopamine">← Précédent</a> •
  146. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  147. <a href="/david/recherche/"
  148. title="Aller à la page de recherche"
  149. rel="search" data-no-instant>Recherche</a>
  150. </p>
  151. </nav>
  152. <blockquote lang="en">
  153. <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>
  154. <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>
  155. <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"
  156. title="Consultation de l’article (anglais)">I don’t want to be part of this scene anymore - Why wordfreq will not be updated</a>
  157. <a href="/david/cache/2024/1cd6127ccec88387f4804f0c3cf1011a/" hreflang="en"
  158. data-tippy data-description="Access a database of word frequencies, in various natural languages. - rspeer/wordfreq"
  159. data-source="https://github.com/rspeer/wordfreq/blob/master/SUNSET.md#i-dont-want-to-be-part-of-this-scene-anymore"
  160. data-date="2024-09-30"
  161. data-favicon="https://github.githubassets.com/favicons/favicon.png"
  162. data-domain="github.com"
  163. ><svg xmlns="http://www.w3.org/2000/svg"
  164. width="24" height="24" viewBox="0 0 24 24" fill="none"
  165. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  166. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  167. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  168. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  169. </svg>
  170. <span class="sr-only">[archive]</span></a></em></cite></p>
  171. </blockquote>
  172. <p>Je me devais de <a href="/david/biologeek/archives/20040930-ouverture-de-rideau/">marquer le coup</a>&nbsp;🎂.</p>
  173. <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>
  174. <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>
  175. <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>
  176. <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>
  177. <blockquote lang="en">
  178. <p>There’s something subversive about writing <mark>without concern</mark> for marketability or&nbsp;scale.</p>
  179. <p><cite><em><a data-link-domain="tracydurnell.com" href="https://tracydurnell.com/2024/09/29/the-secret-power-of-a-blog/" hreflang="en"
  180. title="Consultation de l’article (anglais)">The secret power of a blog</a>
  181. <a href="/david/cache/2024/72bb85e63c3eb4caed75fbb77608a638/" hreflang="en"
  182. data-tippy data-description=""
  183. data-source="https://tracydurnell.com/2024/09/29/the-secret-power-of-a-blog/"
  184. data-date="2024-09-30"
  185. data-favicon="https://tracydurnell.com/favicon.ico"
  186. data-domain="tracydurnell.com"
  187. ><svg xmlns="http://www.w3.org/2000/svg"
  188. width="24" height="24" viewBox="0 0 24 24" fill="none"
  189. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  190. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  191. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  192. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  193. </svg>
  194. <span class="sr-only">[archive]</span></a></em></cite></p>
  195. </blockquote>
  196. <p>Une part d’innocence n’est&nbsp;plus.</p>
  197. <a href="#hr-202" title="Lien vers cette section de la page"><hr id="hr-202" /></a>
  198. <blockquote lang="en">
  199. <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>
  200. <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>
  201. <p><cite><em><a data-link-domain="blog.jim-nielsen.com" href="https://blog.jim-nielsen.com/2024/impressionist-blogging/" hreflang="en"
  202. title="Consultation de l’article (anglais)">The Impressionist Blogging Movement</a>
  203. <a href="/david/cache/2024/1a30c47a2b293dcfaee45ee5a67efdd1/" hreflang="en"
  204. data-tippy data-description="Writing about the big beautiful mess that is making things for the world wide web."
  205. data-source="https://blog.jim-nielsen.com/2024/impressionist-blogging/"
  206. data-date="2024-09-30"
  207. data-favicon="https://blog.jim-nielsen.com/favicon.ico"
  208. data-domain="blog.jim-nielsen.com"
  209. ><svg xmlns="http://www.w3.org/2000/svg"
  210. width="24" height="24" viewBox="0 0 24 24" fill="none"
  211. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  212. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  213. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  214. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  215. </svg>
  216. <span class="sr-only">[archive]</span></a></em></cite></p>
  217. </blockquote>
  218. <a href="#hr-203" title="Lien vers cette section de la page"><hr id="hr-203" /></a>
  219. <blockquote>
  220. <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>
  221. <p><cite><em><a data-link-domain="blog.sens-public.org" href="http://blog.sens-public.org/marcellovitalirosati/chatgpttronconneuse.html" hreflang="en"
  222. title="Consultation de l’article (anglais)">ChatGPT et la tronçonneuse</a>
  223. <a href="/david/cache/2024/62e66665ed5fa02d7beff383c877fdce/" hreflang="en"
  224. data-tippy data-description="Blogue de Marcello Vitali-Rosati"
  225. data-source="http://blog.sens-public.org/marcellovitalirosati/chatgpttronconneuse.html"
  226. data-date="2024-09-30"
  227. data-favicon="http://blog.sens-public.org/marcellovitalirosati/favicon.png"
  228. data-domain="blog.sens-public.org"
  229. ><svg xmlns="http://www.w3.org/2000/svg"
  230. width="24" height="24" viewBox="0 0 24 24" fill="none"
  231. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  232. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  233. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  234. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  235. </svg>
  236. <span class="sr-only">[archive]</span></a></em></cite></p>
  237. </blockquote>
  238. <a href="#hr-204" title="Lien vers cette section de la page"><hr id="hr-204" /></a>
  239. <blockquote>
  240. <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>
  241. <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>
  242. <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>
  243. </blockquote>
  244. <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>
  245. <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>
  246. <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>
  247. <a href="#hr-205" title="Lien vers cette section de la page"><hr id="hr-205" /></a>
  248. <blockquote>
  249. <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>
  250. <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"
  251. title="Consultation de l’article">Le privilège de l’âge</a>
  252. <a href="/david/cache/2024/4703553d711667b5d3a10c0592c51508/" hreflang="fr"
  253. 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"
  254. data-source="https://sacripanne.net/post/2024/09/20/Le-privil%C3%A8ge-de-l-%C3%A2ge"
  255. data-date="2024-09-30"
  256. data-favicon=""
  257. data-domain="sacripanne.net"
  258. ><svg xmlns="http://www.w3.org/2000/svg"
  259. width="24" height="24" viewBox="0 0 24 24" fill="none"
  260. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  261. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  262. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  263. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  264. </svg>
  265. <span class="sr-only">[archive]</span></a></em></cite></p>
  266. </blockquote>
  267. <a href="#hr-206" title="Lien vers cette section de la page"><hr id="hr-206" /></a>
  268. <p>Mot du jour&nbsp;: Friluftsliv.</p>
  269. <a href="#hr-207" title="Lien vers cette section de la page"><hr id="hr-207" /></a>
  270. <p>Acronyme du jour&nbsp;: <a data-link-domain="rationalwiki.org" href="https://rationalwiki.org/wiki/WEIRD">W.E.I.R.D.</a></p>
  271. <a href="#hr-208" title="Lien vers cette section de la page"><hr id="hr-208" /></a>
  272. <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>
  273. <nav>
  274. <p>
  275. <a href="/david/2024/adaptation/"
  276. title="Liste de tous les articles 2024 associés à cette étiquette"
  277. rel="tag">#adaptation</a>
  278. <a href="/david/2024/ecriture/"
  279. title="Liste de tous les articles 2024 associés à cette étiquette"
  280. rel="tag">#écriture</a>
  281. <a href="/david/2024/ia/"
  282. title="Liste de tous les articles 2024 associés à cette étiquette"
  283. rel="tag">#IA</a>
  284. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  285. </p>
  286. </nav>
  287. <nav>
  288. <p>
  289. <a rel="prev"
  290. href="/david/2024/08/10/"
  291. title="Publication précédente : Kudopamine">← Précédent</a> •
  292. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  293. </p>
  294. </nav>
  295. <form action="/david/recherche/" method="get">
  296. <fieldset>
  297. <legend>Recherche</legend>
  298. <label for="input-search">Termes de votre recherche :</label>
  299. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  300. <input type="submit" value="Chercher">
  301. <p id="indexation-infos">
  302. <small>
  303. Seuls les contenus de ces 8 dernières années sont indexés.
  304. </small>
  305. </p>
  306. </fieldset>
  307. </form>
  308. <aside>
  309. <theme-toggle></theme-toggle>
  310. </aside>
  311. </article>
  312. <hr>
  313. <footer>
  314. <p>
  315. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  316. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  317. <a href="http://larlet.com"
  318. title="Go to my English profile"
  319. data-instant>Pro</a>
  320. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  321. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  322. </p>
  323. <template id="theme-selector">
  324. <form>
  325. <style type="text/css">
  326. fieldset div {
  327. text-align: center;
  328. }
  329. </style>
  330. <fieldset>
  331. <legend>Thème</legend>
  332. <div>
  333. <label>
  334. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  335. Auto
  336. </label>
  337. <label>
  338. <input type="radio" value="dark" name="chosen-color-scheme">
  339. Foncé
  340. </label>
  341. <label>
  342. <input type="radio" value="light" name="chosen-color-scheme">
  343. Clair
  344. </label>
  345. </div>
  346. </fieldset>
  347. </form>
  348. </template>
  349. </footer>
  350. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  351. <script>
  352. class ThemeToggle extends HTMLElement {
  353. constructor() {
  354. super()
  355. const themeSelectorTemplate = document.querySelector('#theme-selector')
  356. const form = themeSelectorTemplate.content.firstElementChild
  357. this.attachShadow({ mode: 'open' })
  358. this.shadowRoot.appendChild(form.cloneNode(true))
  359. }
  360. connectedCallback() {
  361. const form = this.shadowRoot.querySelector('form')
  362. form.addEventListener('change', (e) => {
  363. const chosenColorScheme = e.target.value
  364. localStorage.setItem('theme', chosenColorScheme)
  365. toggleTheme(chosenColorScheme)
  366. })
  367. const selectedTheme = localStorage.getItem('theme')
  368. if (selectedTheme && selectedTheme !== 'undefined') {
  369. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  370. }
  371. }
  372. }
  373. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  374. window.addEventListener('load', () => {
  375. let colorsLayer = undefined
  376. let hasDarkRules = false
  377. for (const styleSheet of Array.from(document.styleSheets)) {
  378. let mediaRules = []
  379. for (const layerRule of styleSheet.cssRules) {
  380. if (!(layerRule instanceof CSSLayerBlockRule)) {
  381. continue
  382. }
  383. if (layerRule.name === 'colors') {
  384. colorsLayer = layerRule
  385. }
  386. for (const cssRule of layerRule.cssRules) {
  387. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  388. continue
  389. }
  390. // WARNING: Safari does not have/supports `conditionText`.
  391. if (cssRule.conditionText) {
  392. if (cssRule.conditionText !== prefersColorSchemeDark) {
  393. continue
  394. }
  395. } else {
  396. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  397. continue
  398. }
  399. }
  400. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  401. }
  402. }
  403. // WARNING: do not try to insert a Rule to a styleSheet you are
  404. // currently iterating on, otherwise the browser will be stuck
  405. // in a infinite loop…
  406. for (const mediaRule of mediaRules) {
  407. // Safari requires the `0` second parameter (even if default).
  408. colorsLayer.insertRule(mediaRule.cssText, 0)
  409. hasDarkRules = true
  410. }
  411. }
  412. if (hasDarkRules) {
  413. if ('customElements' in window && !customElements.get('theme-toggle')) {
  414. customElements.define('theme-toggle', ThemeToggle)
  415. }
  416. }
  417. })
  418. </script>
  419. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  420. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  421. <script>
  422. tippy('[data-tippy]', {
  423. content(reference) {
  424. reference.addEventListener('click', (e) => e.preventDefault())
  425. return `
  426. <h3 lang="fr">
  427. <img src="${reference.dataset.favicon}" loading="lazy">
  428. <a href="${reference.dataset.source}"
  429. >Article sur ${reference.dataset.domain}</a></h3>
  430. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  431. <div class="tippy-links" lang="fr">
  432. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  433. </div>
  434. `
  435. },
  436. allowHTML: true,
  437. interactive: true,
  438. delay: [150, 700],
  439. hideOnClick: false
  440. })
  441. </script>
  442. <script type="module">
  443. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  444. const markObserver = new IntersectionObserver((entries, observer) => {
  445. const computedStyle = getComputedStyle(document.documentElement)
  446. const markBackground = computedStyle.getPropertyValue('--mark-background')
  447. for (const entry of entries) {
  448. if (entry.intersectionRatio === 0) continue
  449. const markElement = entry.target
  450. markElement.style.backgroundColor = 'inherit'
  451. const annotation = annotate(
  452. markElement, {
  453. type: 'highlight',
  454. multiline: true,
  455. color: markBackground,
  456. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  457. animate: false
  458. }
  459. )
  460. annotation.show()
  461. observer.unobserve(markElement)
  462. }
  463. }, {threshold: 1.0})
  464. for (const markElement of document.querySelectorAll('mark')) {
  465. markObserver.observe(markElement)
  466. }
  467. </script>
  468. </body>
  469. </html>