Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

index.html 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  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 #décentralisation
  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 #décentralisation">
  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. details[open] summary {
  109. display: none;
  110. }
  111. </style>
  112. <body data-instant-intensity="viewport-all">
  113. <article>
  114. <header>
  115. <hgroup>
  116. <h1>#décentralisation</h1>
  117. <p>Publications relatives à cette étiquette</p>
  118. </hgroup>
  119. </header>
  120. <nav>
  121. <p>
  122. <a href="/david/" title="Aller à l’accueil">
  123. Accueil</a>
  124. <a rel="tags"
  125. href="/david/2024/#tags"
  126. title="Liste de toutes les étiquettes">
  127. Étiquettes</a>
  128. <a href="/david/recherche/" title="Aller à la page de recherche" rel="search" data-no-instant>Recherche</a>
  129. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  130. </p>
  131. </nav>
  132. <h2>
  133. <a href="/david/2024/04/17/" title="Lien permanent vers cet article">Échelle</a> <time datetime="2024-04-17">17 avril 2024</time>
  134. </h2>
  135. <blockquote lang="en">
  136. <p>We have been obsessed with this scalability as the single differentiating factor that will tell us how well something will adapt to the changing requirements of an organization and increasing, diverse technical demand. But for businesses, scaling means that output remains the same or only slightly degrades while production costs&nbsp;lower.</p>
  137. <p><mark>Scalability has become the leading differentiator, the Leitdifferenz, of almost everything in our industry.</mark> From the tech we develop with, for, and on to what, how, and who we design for It’s almost like a trance that we keep repeating to ourselves.“But will it scale?” is first and foremost a matter of business. But in development and design, it also refers to other factors. Yet when it comes to matters of industrialization, these factors remain&nbsp;secondary.</p>
  138. <p><cite><em><a data-link-domain="helloyes.dev" href="https://helloyes.dev/blog/2023/craft-vs-industry/" hreflang="en"
  139. title="Consultation de l’article (anglais)">Craft vs Industry: Separating Concerns</a>
  140. <a href="/david/cache/2024/f000099cbb33176d35e7aeccdab687b3/" hreflang="en"
  141. data-tippy data-description="We have long referred to our niche of the web as the web industry but never has the term been more congruent than it is right now. I believe this throws us into some conflicts, that we are left deal with alone."
  142. data-source="https://helloyes.dev/blog/2023/craft-vs-industry/"
  143. data-date="2024-04-17"
  144. data-favicon="https://helloyes.dev/assets/favicons/illusion/icon.svg"
  145. data-domain="helloyes.dev"
  146. ><svg xmlns="http://www.w3.org/2000/svg"
  147. width="24" height="24" viewBox="0 0 24 24" fill="none"
  148. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  149. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  150. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  151. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  152. </svg>
  153. <span class="sr-only">[archive]</span></a></em></cite></p>
  154. </blockquote>
  155. <p>C’est la raison pour laquelle je suis de plus en plus attiré par de petits évènements (voir ci-dessous) qui peuvent avoir lieu dans des endroits différents —&nbsp;de manière distribuée&nbsp;— par des communautés qui peuvent y mettre leurs propres échelles pour embarquer de nouvelles&nbsp;personnes.</p>
  156. <a href="#hr-149" title="Lien vers cette section de la page"><hr id="hr-149" /></a>
  157. <blockquote lang="en">
  158. <p>I don’t think we <em>need</em> new metaphors for the things we do with computers. But I like thinking about <mark>creating software as organizing an event.</mark> Here are some reasons why I think <em>event</em> is a better metaphor than <em>product</em>:</p>
  159. <p><cite><em><a data-link-domain="kooslooijesteijn.net" href="https://www.kooslooijesteijn.net/blog/app-website-is-not-product" hreflang="en"
  160. title="Consultation de l’article (anglais)">Your app is not a product</a>
  161. <a href="/david/cache/2024/e8ab525499d79428bb5674609dc486dc/" hreflang="en"
  162. data-tippy data-description="… and neither is your website."
  163. data-source="https://www.kooslooijesteijn.net/blog/app-website-is-not-product"
  164. data-date="2024-04-17"
  165. data-favicon="https://www.kooslooijesteijn.net/favicon/favicon.svg"
  166. data-domain="kooslooijesteijn.net"
  167. ><svg xmlns="http://www.w3.org/2000/svg"
  168. width="24" height="24" viewBox="0 0 24 24" fill="none"
  169. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  170. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  171. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  172. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  173. </svg>
  174. <span class="sr-only">[archive]</span></a></em></cite></p>
  175. </blockquote>
  176. <p>Je ne vais pas énumérer toute la liste ici mais il y a de bonnes choses à aller picorer pour alimenter mes propres réflexions à ce&nbsp;sujet.</p>
  177. <a href="#hr-150" title="Lien vers cette section de la page"><hr id="hr-150" /></a>
  178. <blockquote lang="en">
  179. <p>Ecology knows that shifting baselines dampen collective urgency and deepen generational divides. People who care about internet monoculture and control are often told they’re nostalgists harkening back to a pioneer era. But it’s fiendishly hard to regenerate an open and competitive infrastructure for younger generations who’ve been raised to assume that two or three platforms, two app stores, two operating systems, two browsers, one cloud/mega-store and a single search engine for the world comprise the internet. If <em>the internet</em> for you is the massive sky-scraping silo you happen to live inside and the only thing you can see outside is the single, other massive sky-scraping silo, then <mark>how can you imagine anything&nbsp;else?</mark></p>
  180. <p>[…] For tech giants, the long period of open internet evolution is over. Their internet is not an ecosystem. It’s a&nbsp;zoo.</p>
  181. <p><cite><em><a data-link-domain="noemamag.com" href="https://www.noemamag.com/we-need-to-rewild-the-internet/" hreflang="en"
  182. title="Consultation de l’article (anglais)">We Need To Rewild The Internet</a>
  183. <a href="/david/cache/2024/21f1fc65a0499d19ded2b8d326791fee/" hreflang="en"
  184. data-tippy data-description="The internet has become an extractive and fragile monoculture. But we can revitalize it using lessons learned by ecologists."
  185. data-source="https://www.noemamag.com/we-need-to-rewild-the-internet/"
  186. data-date="2024-04-17"
  187. data-favicon="https://www.noemamag.com/wp-content/uploads/2020/06/cropped-ms-icon-310x310-1-32x32.png"
  188. data-domain="noemamag.com"
  189. ><svg xmlns="http://www.w3.org/2000/svg"
  190. width="24" height="24" viewBox="0 0 24 24" fill="none"
  191. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  192. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  193. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  194. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  195. </svg>
  196. <span class="sr-only">[archive]</span></a></em></cite></p>
  197. </blockquote>
  198. <p>Ce troisième lien est lui aussi une métaphore, combinant <em>forêt</em> et <em>web</em>. Lorsqu’on constate ce qu’il advient de nos forêts, je ne sais pas trop s’il est possible d’être optimiste à ce&nbsp;sujet…</p>
  199. <a href="#hr-151" title="Lien vers cette section de la page"><hr id="hr-151" /></a>
  200. <blockquote>
  201. <p>Nous sommes un groupe d’étudiants dans les métiers du multimédia et de l’Internet. Pourtant nous n’avons pas numérisé. Il y a un an, <mark>nous nous empressions</mark> de faire une solution numérique éco conçue pour répondre à un&nbsp;problème.</p>
  202. <p>Aujourd’hui, avec du recul, des connaissances supplémentaires et une nouvelle vision, nous nous demandons s’il est nécessaire de&nbsp;numériser.</p>
  203. <p><cite><em><a data-link-domain="nousnavonspasnumerise.mmibordeaux.com" href="https://nousnavonspasnumerise.mmibordeaux.com/autopsie/" hreflang="fr"
  204. title="Consultation de l’article">Nous n’avons pas numérisé.</a>
  205. <a href="/david/cache/2024/6fd58c8dcf1738605fb932bb83f4411a/" hreflang="fr"
  206. data-tippy data-description="L’écran captive plus facilement les enfants que le papier"
  207. data-source="https://nousnavonspasnumerise.mmibordeaux.com/autopsie/"
  208. data-date="2024-04-17"
  209. data-favicon="https://nousnavonspasnumerise.mmibordeaux.com/assets/images/favicons/favicon.png"
  210. data-domain="nousnavonspasnumerise.mmibordeaux.com"
  211. ><svg xmlns="http://www.w3.org/2000/svg"
  212. width="24" height="24" viewBox="0 0 24 24" fill="none"
  213. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  214. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  215. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  216. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  217. </svg>
  218. <span class="sr-only">[archive]</span></a></em></cite></p>
  219. </blockquote>
  220. <p>Un peu d’espoir tout de&nbsp;même.</p>
  221. <nav>
  222. <p>
  223. <a href="/david/2024/commun/"
  224. title="Liste de tous les articles 2024 associés à cette étiquette"
  225. rel="tag">#commun</a>
  226. <a href="/david/2024/decentralisation/"
  227. title="Liste de tous les articles 2024 associés à cette étiquette"
  228. rel="tag">#décentralisation</a>
  229. <a href="/david/2024/protopie/"
  230. title="Liste de tous les articles 2024 associés à cette étiquette"
  231. rel="tag">#protopie</a>
  232. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  233. </p>
  234. </nav>
  235. <h2>
  236. <a href="/david/2024/03/11/" title="Lien permanent vers cet article">LoginWall</a> <time datetime="2024-03-11">11 mars 2024</time>
  237. </h2>
  238. <blockquote lang="en">
  239. <p>I don’t have a LinkedIn account. I don’t like the idea that we both <strong>need</strong> an account. I need one to <strong>post</strong> my résumé, and you need one to <strong>view</strong> it. How does that benefit me to have my résumé behind a login wall? It doesn’t. It benefits LinkedIn. Now, my résumé is on my website, displayed more beautifully than LinkedIn lets&nbsp;me.</p>
  240. <p>[…]</p>
  241. <p>Every new thing that I add to my website works to regain my internet presence <strong>away</strong> from companies that <strong>do not</strong> have my interests at heart. And I will avoid future problems like a company deciding to put login walls or paywalls in front of my content. Or putting Nazi content beside mine. <mark>I can avoid all of that by&nbsp;self-publishing.</mark></p>
  242. <p><cite><em><a data-link-domain="lmnt.me" href="https://lmnt.me/blog/web-independence.html" hreflang="en"
  243. title="Consultation de l’article (anglais)">Web Independence</a>
  244. <a href="/david/cache/2024/ce6e3472d21a189dc76b3fc6e6f1b49c/" hreflang="en"
  245. data-tippy data-description="Be independent. We can build things on the web without them. Better things."
  246. data-source="https://lmnt.me/blog/web-independence.html"
  247. data-date="2024-03-11"
  248. data-favicon="https://lmnt.me/lmnt.png"
  249. data-domain="lmnt.me"
  250. ><svg xmlns="http://www.w3.org/2000/svg"
  251. width="24" height="24" viewBox="0 0 24 24" fill="none"
  252. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  253. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  254. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  255. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  256. </svg>
  257. <span class="sr-only">[archive]</span></a></em></cite></p>
  258. </blockquote>
  259. <p>Le problème de sites comme LinkedIn c’est qu’il est difficile de se rendre compte de leur inaccessibilité lorsqu’on a un compte. Ou alors les personnes mettent leurs CV en signature de courriel en sachant que je ne vais pas pouvoir les&nbsp;consulter&#8239;?</p>
  260. <p>Avec TwiX c’est encore pire car ça varie d’un jour sur l’autre. Parfois le <em>tweet</em> est accessible mais seul, parfois il faut un compte, parfois on accède à une page avec la liste des dernières publications de la personne mais ordonnées par «&nbsp;popularité&nbsp;», ça sent bon la girouette qui est à la tête de&nbsp;l’entreprise.</p>
  261. <p>Et je ne parle même pas de ce qui se passe sur&nbsp;Facebook.</p>
  262. <a href="#hr-108" title="Lien vers cette section de la page"><hr id="hr-108" /></a>
  263. <blockquote lang="en">
  264. <p>What I try to keep in mind is the <a data-link-domain="en.wikipedia.org" href="https://en.wikipedia.org/wiki/Curb_cut_effect">curb cut effect</a>, also known as the «&nbsp;i want subtitles on my favourite show because even though my ears are just fine, i like to eat crisps while watching&nbsp;» rule. In many cases, adding accessibility to your website makes it nicer for everyone, not only for the people who needed these changes. (Corollary: everything that makes you squint is giving a giant migraine to someone else out&nbsp;there.)</p>
  265. <p><cite><em><a data-link-domain="alexsirac.com" href="https://alexsirac.com/accessibility-notes/" hreflang="fr"
  266. title="Consultation de l’article">Accessibility notes from your headache-prone friend</a>
  267. <a href="/david/cache/2024/4dc1c2edacf179310783146044f0d06e/" hreflang="fr"
  268. data-tippy data-description=""
  269. data-source="https://alexsirac.com/accessibility-notes/"
  270. data-date="2024-03-11"
  271. data-favicon="https://alexsirac.com/wp-content/uploads/2023/01/cropped-cropped-portraitplante-32x32.webp"
  272. data-domain="alexsirac.com"
  273. ><svg xmlns="http://www.w3.org/2000/svg"
  274. width="24" height="24" viewBox="0 0 24 24" fill="none"
  275. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  276. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  277. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  278. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  279. </svg>
  280. <span class="sr-only">[archive]</span></a></em></cite></p>
  281. </blockquote>
  282. <p>Je ne connaissais pas le nom de cet effet, j’espère le retenir en le notant ici. Merci&nbsp;Alex&#8239;!</p>
  283. <p><mark>Lu le lendemain</mark> <a data-link-domain="toot.cat" href="https://toot.cat/@nickcolley/112073548430975046">sur masto</a>&nbsp;:</p>
  284. <blockquote lang="en">
  285. <p>It is true that meeting the needs of many disabled people makes services better for non-disabled&nbsp;people.</p>
  286. <p>It is wrong though to say that all accessibility efforts benefit non-disabled&nbsp;people.</p>
  287. <p>They don’t, meeting some access needs <em>only</em> benefit some disabled&nbsp;people.</p>
  288. <p>It is tiring hearing &quot;you’ll be disabled in the future&quot; when there’s such a broad experience of disability that many people won’t experience due to&nbsp;age.</p>
  289. <p>We must create strategies where we aim to humanise and value disabled people inherently and not have to lean so hard on non-disabled people’s self&nbsp;interest.</p>
  290. </blockquote>
  291. <a href="#hr-109" title="Lien vers cette section de la page"><hr id="hr-109" /></a>
  292. <figure>
  293. <a href="/static/david/2024/2024-03-11-parcours-ouareau.png"
  294. title="Cliquer pour une version haute résolution">
  295. <img
  296. src="/static/david/2024/2024-03-11-parcours-ouareau.png"
  297. width="1294" height="1108"
  298. srcset="/static/david/2024/2024-03-11-parcours-ouareau.png 1294w, /static/david/2024/2024-03-11-parcours-ouareau.png 660w, /static/david/2024/2024-03-11-parcours-ouareau.png 990w, /static/david/2024/2024-03-11-parcours-ouareau.png 1320w"
  299. sizes="min(100vw, calc(100vh * 1294 / 1108))"
  300. loading="lazy"
  301. decoding="async"
  302. alt="Capture d’écran d’un parcours sur 4&nbsp;jours avec une soixantaine de kilomètres.">
  303. </a>
  304. <figcaption>Si ma cheville le&nbsp;permet.</figcaption>
  305. </figure>
  306. <p>J’ai joué avec le <a data-link-domain="komoot.com" href="https://www.komoot.com/fr-fr/plan">Planificateur d’itinéraire de Komoot</a> hier, je ne m’étais jamais demandé vraiment quelles distances est-ce que je pouvais parcourir dans la forêt. J’aime bien le fait d’avoir l’option de suivre les chemins connus. À voir si j’arrive à faire ce grand tour en rando rapide / légère. Je connais déjà 80% du parcours et je sais dès à présent que la deuxième journée serait bien longue. L’avantage d’être en terrain connu, c’est de connaître les endroits où je peux couper en cas de pépin&nbsp;physique.</p>
  307. <p>J’ai du matériel très léger mais je me rends compte que la nourriture est déjà un défi sur 4&nbsp;jours pour garder un sac qui permette de courir. Je m’entraîne en ce moment en faisant des aller-retours à la bibliothèque avec 5kg de livres sur le dos. On verra bien si c’est utile… au pire j’aurais découvert des&nbsp;BD&nbsp;:-).</p>
  308. <nav>
  309. <p>
  310. <a href="/david/2024/decentralisation/"
  311. title="Liste de tous les articles 2024 associés à cette étiquette"
  312. rel="tag">#décentralisation</a>
  313. <a href="/david/2024/dependance/"
  314. title="Liste de tous les articles 2024 associés à cette étiquette"
  315. rel="tag">#dépendance</a>
  316. <a href="/david/2024/web/"
  317. title="Liste de tous les articles 2024 associés à cette étiquette"
  318. rel="tag">#web</a>
  319. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  320. </p>
  321. </nav>
  322. <form action="/david/recherche/" method="get">
  323. <fieldset>
  324. <legend>Recherche</legend>
  325. <label for="input-search">Termes de votre recherche :</label>
  326. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  327. <input type="submit" value="Chercher">
  328. <p id="indexation-infos">
  329. <small>
  330. Seuls les contenus de ces 8 dernières années sont indexés.
  331. </small>
  332. </p>
  333. </fieldset>
  334. </form>
  335. <aside>
  336. <theme-toggle></theme-toggle>
  337. </aside>
  338. </article>
  339. <hr>
  340. <footer>
  341. <p>
  342. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  343. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  344. <a href="http://larlet.com"
  345. title="Go to my English profile"
  346. data-instant>Pro</a>
  347. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  348. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  349. </p>
  350. <template id="theme-selector">
  351. <form>
  352. <style type="text/css">
  353. fieldset div {
  354. text-align: center;
  355. }
  356. </style>
  357. <fieldset>
  358. <legend>Thème</legend>
  359. <div>
  360. <label>
  361. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  362. Auto
  363. </label>
  364. <label>
  365. <input type="radio" value="dark" name="chosen-color-scheme">
  366. Foncé
  367. </label>
  368. <label>
  369. <input type="radio" value="light" name="chosen-color-scheme">
  370. Clair
  371. </label>
  372. </div>
  373. </fieldset>
  374. </form>
  375. </template>
  376. </footer>
  377. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  378. <script>
  379. class ThemeToggle extends HTMLElement {
  380. constructor() {
  381. super()
  382. const themeSelectorTemplate = document.querySelector('#theme-selector')
  383. const form = themeSelectorTemplate.content.firstElementChild
  384. this.attachShadow({ mode: 'open' })
  385. this.shadowRoot.appendChild(form.cloneNode(true))
  386. }
  387. connectedCallback() {
  388. const form = this.shadowRoot.querySelector('form')
  389. form.addEventListener('change', (e) => {
  390. const chosenColorScheme = e.target.value
  391. localStorage.setItem('theme', chosenColorScheme)
  392. toggleTheme(chosenColorScheme)
  393. })
  394. const selectedTheme = localStorage.getItem('theme')
  395. if (selectedTheme && selectedTheme !== 'undefined') {
  396. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  397. }
  398. }
  399. }
  400. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  401. window.addEventListener('load', () => {
  402. let colorsLayer = undefined
  403. let hasDarkRules = false
  404. for (const styleSheet of Array.from(document.styleSheets)) {
  405. let mediaRules = []
  406. for (const layerRule of styleSheet.cssRules) {
  407. if (!(layerRule instanceof CSSLayerBlockRule)) {
  408. continue
  409. }
  410. if (layerRule.name === 'colors') {
  411. colorsLayer = layerRule
  412. }
  413. for (const cssRule of layerRule.cssRules) {
  414. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  415. continue
  416. }
  417. // WARNING: Safari does not have/supports `conditionText`.
  418. if (cssRule.conditionText) {
  419. if (cssRule.conditionText !== prefersColorSchemeDark) {
  420. continue
  421. }
  422. } else {
  423. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  424. continue
  425. }
  426. }
  427. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  428. }
  429. }
  430. // WARNING: do not try to insert a Rule to a styleSheet you are
  431. // currently iterating on, otherwise the browser will be stuck
  432. // in a infinite loop…
  433. for (const mediaRule of mediaRules) {
  434. // Safari requires the `0` second parameter (even if default).
  435. colorsLayer.insertRule(mediaRule.cssText, 0)
  436. hasDarkRules = true
  437. }
  438. }
  439. if (hasDarkRules) {
  440. if ('customElements' in window && !customElements.get('theme-toggle')) {
  441. customElements.define('theme-toggle', ThemeToggle)
  442. }
  443. }
  444. })
  445. </script>
  446. </body>
  447. </html>