Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

index.html 30KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  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. Sérendipité
  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="Discovering things via links is way more fun than most algorithmically-driven discovery — in my humble opinion.">
  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>Sérendipité</h1>
  138. <p>Le <time datetime="2024-03-13">13 mars 2024</time></p>
  139. </hgroup>
  140. </header>
  141. <nav>
  142. <p>
  143. <a rel="prev"
  144. href="/david/2024/03/12/"
  145. title="Publication précédente : Surligner">← 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. • <a rel="next"
  151. href="/david/2024/03/14/"
  152. title="Publication suivante : Montre 2">Suivant →</a>
  153. </p>
  154. </nav>
  155. <blockquote lang="en">
  156. <p>Discovering things via links is way more fun than most algorithmically-driven discovery — in my humble&nbsp;opinion.</p>
  157. <p>As an analogy, it’s kind of like going on vacation to a new place and staying/living amongst the locals vs. staying at a manicured 5-star hotel that gives you no reason to leave. <mark>Can you really say you visited the location if you never left the&nbsp;hotel?</mark></p>
  158. <p><cite><em><a data-link-domain="blog.jim-nielsen.com" href="https://blog.jim-nielsen.com/2024/following-links/" hreflang="en"
  159. title="Consultation de l’article (anglais)">Following Links - Jim Nielsen’s Blog</a>
  160. <a href="/david/cache/2024/c26881e908632b460cfd93fe61cc0466/" hreflang="en"
  161. data-tippy data-description="Writing about the big beautiful mess that is making things for the world wide web."
  162. data-source="https://blog.jim-nielsen.com/2024/following-links/"
  163. data-date="2024-03-12"
  164. data-favicon="https://blog.jim-nielsen.com/favicon.ico"
  165. data-domain="blog.jim-nielsen.com"
  166. ><svg xmlns="http://www.w3.org/2000/svg"
  167. width="24" height="24" viewBox="0 0 24 24" fill="none"
  168. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  169. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  170. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  171. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  172. </svg>
  173. <span class="sr-only">[archive]</span></a></em></cite></p>
  174. </blockquote>
  175. <p>Je suis toujours étonné qu’il n’y ait pas des navigateurs qui affichent la toile de nos navigations de manière plus ou moins artistiques. On pourrait avoir des topologies de navigations, potentiellement quotidiennes, des points de comparaison avec d’autres personnes, une représentation de la curiosité, de l’enfermement dans des silos, etc.</p>
  176. <blockquote lang="en">
  177. <p>A surprising number of other features can be expressed in terms of&nbsp;links.</p>
  178. <p><cite><em><a data-link-domain="subconscious.substack.com" href="https://subconscious.substack.com/p/all-you-need-is-links" hreflang="en"
  179. title="Consultation de l’article (anglais)">All you need is links</a>
  180. <a href="/david/cache/2024/a801772c901c3e5cfad33f637d00151e/" hreflang="en"
  181. data-tippy data-description="Before reaching for features, my goal is to explore, to the fullest extent, the creative potential of plain old links."
  182. data-source="https://subconscious.substack.com/p/all-you-need-is-links"
  183. data-date="2024-03-12"
  184. 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%2F4d01c24b-d99d-497e-9e60-1a2427581cad%2Ffavicon-16x16.png"
  185. data-domain="subconscious.substack.com"
  186. ><svg xmlns="http://www.w3.org/2000/svg"
  187. width="24" height="24" viewBox="0 0 24 24" fill="none"
  188. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  189. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  190. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  191. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  192. </svg>
  193. <span class="sr-only">[archive]</span></a></em></cite></p>
  194. </blockquote>
  195. <a href="#hr-112" title="Lien vers cette section de la page"><hr id="hr-112" /></a>
  196. <blockquote lang="en">
  197. <p><code>printf '\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'</code></p>
  198. <p><cite><em><a data-link-domain="notes.billmill.org" href="https://notes.billmill.org/programming/bash/Hyperlink_escape_codes.html" hreflang="en"
  199. title="Consultation de l’article (anglais)">Hyperlink escape codes</a>
  200. <a href="/david/cache/2024/f68e9507784b5baf1584085908d60f58/" hreflang="en"
  201. data-tippy data-description="To print out a clickable hyperlink in a terminal"
  202. data-source="https://notes.billmill.org/programming/bash/Hyperlink_escape_codes.html"
  203. data-date="2024-03-13"
  204. data-favicon="https://notes.billmill.org/favicon.ico"
  205. data-domain="notes.billmill.org"
  206. ><svg xmlns="http://www.w3.org/2000/svg"
  207. width="24" height="24" viewBox="0 0 24 24" fill="none"
  208. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  209. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  210. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  211. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  212. </svg>
  213. <span class="sr-only">[archive]</span></a></em></cite></p>
  214. </blockquote>
  215. <p>Qui me fait découvre <a data-link-domain="github.com" href="https://github.com/nedbat/watchgha">watchgha</a>, bien pratique pour avoir un accès rapide aux résultats de l’intégration&nbsp;continue.</p>
  216. <figure>
  217. <a href="/static/david/2024/2024-03-13-watchgha.png"
  218. title="Cliquer pour une version haute résolution">
  219. <img
  220. src="/static/david/2024/2024-03-13-watchgha.png"
  221. width="2422" height="192"
  222. srcset="/static/david/2024/2024-03-13-watchgha.png 2422w, /static/david/2024/2024-03-13-watchgha.png 660w, /static/david/2024/2024-03-13-watchgha.png 990w, /static/david/2024/2024-03-13-watchgha.png 1320w"
  223. sizes="min(100vw, calc(100vh * 2422 / 192))"
  224. loading="lazy"
  225. decoding="async"
  226. alt="Capture d’écran du résultat de la commande git runs avec l’alias git qui pointe vers watchgha.">
  227. </a>
  228. <figcaption>Ça passe 🎉 (je vais essayer de faire une démo d’oEmbed par ici à un&nbsp;moment).</figcaption>
  229. </figure>
  230. <a href="#hr-113" title="Lien vers cette section de la page"><hr id="hr-113" /></a>
  231. <blockquote>
  232. <p>Le constat est simple&nbsp;: je trouve que le Web ne va pas fort en ce moment, et je voulais à ma petite échelle montrer un peu&nbsp;l’exemple.</p>
  233. <p><cite><em><a data-link-domain="vincent-valentin.name" href="https://vincent-valentin.name/articles/motivation-s" hreflang="fr"
  234. title="Consultation de l’article">Motivation(s) chez Vincent Valentin.</a>
  235. <a href="/david/cache/2024/c6e0fe933581c74380fa8eaa7f229353/" hreflang="fr"
  236. data-tippy data-description="Site personnel de Vincent Valentin, habitant à Nantes, quarante-quatre ans et intégrateur web depuis plus de quinze ans."
  237. data-source="https://vincent-valentin.name/articles/motivation-s"
  238. data-date="2024-03-13"
  239. data-favicon="https://vincent-valentin.name/favicon-32x32.png"
  240. data-domain="vincent-valentin.name"
  241. ><svg xmlns="http://www.w3.org/2000/svg"
  242. width="24" height="24" viewBox="0 0 24 24" fill="none"
  243. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  244. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  245. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  246. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  247. </svg>
  248. <span class="sr-only">[archive]</span></a></em></cite></p>
  249. </blockquote>
  250. <p>Très chouettes publications cette dernière semaine en tout cas&nbsp;&lt;3.</p>
  251. <a href="#hr-114" title="Lien vers cette section de la page"><hr id="hr-114" /></a>
  252. <p>Rétropédalage sur <a href="/david/2024/03/12/" title="Surligner">le surlignage</a>. Beaucoup trop de retours qui trouvent cela davantage distrayant qu’utile. Pour l’instant, j’ai gardé la logique mais sans animation. Je me demande si je vais en faire un <em>opt-in</em> à un&nbsp;moment.</p>
  253. <a href="#hr-115" title="Lien vers cette section de la page"><hr id="hr-115" /></a>
  254. <blockquote>
  255. <p>Puisque la demi-mesure ne fait pas partie de mon vocabulaire, j’ai tenu à travailler au plus proche des techniques médiévales. <mark>J’ai ainsi appris à encrer à la plume, dorer à la feuille d’or pur, peindre aux pigments en poudre et relier au cuir de chèvre.</mark> Je m’y suis dévouée corps et âme, dédiant le moindre de mon temps libre à la concrétisation de ce projet qui devait se mener dans le plus grand secret. Je m’attelais à l’ouvrage à la moindre opportunité, me levant parfois à l’aube pour grappiller une heure de calligraphie avant d’aller bosser ou prolongeant des soirées jusqu’au petit matin lorsque K travaillait de&nbsp;nuit.</p>
  256. <p>Au total j’ai passé plus de 230&nbsp;heures sur ce&nbsp;projet</p>
  257. <p><cite><em><a data-link-domain="hypothermia.fr" href="https://www.hypothermia.fr/2024/03/chiroto-t-datoca/" hreflang="fr"
  258. title="Consultation de l’article">Chiroto T. Datoca</a>
  259. <a href="/david/cache/2024/f5294ac20ea593cce56caf2379813a4a/" hreflang="fr"
  260. data-tippy data-description="Il y a quinze ans, j'ai entamé un projet de calligraphie que je n'ai jamais terminé, un cadeau que je n'ai jamais offert."
  261. data-source="https://www.hypothermia.fr/2024/03/chiroto-t-datoca/"
  262. data-date="2024-03-13"
  263. data-favicon="https://www.hypothermia.fr/wp-content/uploads/fbrfg/favicon-32x32.png"
  264. data-domain="hypothermia.fr"
  265. ><svg xmlns="http://www.w3.org/2000/svg"
  266. width="24" height="24" viewBox="0 0 24 24" fill="none"
  267. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  268. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  269. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  270. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  271. </svg>
  272. <span class="sr-only">[archive]</span></a></em></cite></p>
  273. </blockquote>
  274. <p>Ce moment où tu te rends compte que tu n’es pas perfectionniste en fait 🤯. Chapeau bas&nbsp;l’artiste.</p>
  275. <a href="#hr-116" title="Lien vers cette section de la page"><hr id="hr-116" /></a>
  276. <blockquote lang="en">
  277. <p>Rust-like error handling in Python, with type-safety in&nbsp;mind.</p>
  278. <p><cite><em><a data-link-domain="github.com" href="https://github.com/alexandermalyga/poltergeist">poltergeist</a></em></cite></p>
  279. </blockquote>
  280. <p>J’ai très souvent retrouvé le besoin de ce <em>pattern</em> dans mes&nbsp;projets.</p>
  281. <a href="#hr-117" title="Lien vers cette section de la page"><hr id="hr-117" /></a>
  282. <p>Sortie de la <a data-link-domain="pypi.org" href="https://pypi.org/project/pressoir-cli/2.0.0/">version 2.0&nbsp;de pressoir-cli</a> (oui, <a href="/david/2024/02/16/" title="uMap 2">c’est ma période</a>). L’une des prochaines étapes sera de générer sa propre documentation en l’utilisant. Ça peut paraitre stupide mais c’est trop <em>meta</em> pour ne pas le&nbsp;faire&nbsp;😇.</p>
  283. <a href="#hr-118" title="Lien vers cette section de la page"><hr id="hr-118" /></a>
  284. <blockquote>
  285. <p>Nginx de part sa robustesse, sa structure minimaliste et son fonctionnement événementiel asynchrone est un serveur web plébiscité pour ses performances. Mais ce n’est pas parce qu’on a une Porsche qu’il ne faut pas tenter de la rendre encore plus&nbsp;puissante&#8239;!</p>
  286. <p><cite><em><a data-link-domain="buzut.net" href="https://buzut.net/optimiser-nginx/" hreflang="fr"
  287. title="Consultation de l’article">Optimisez Nginx pour de meilleurs performances</a>
  288. <a href="/david/cache/2024/b33059055c307477e43390a51f9a104a/" hreflang="fr"
  289. data-tippy data-description="Nginx est réputé pour sa rapidité, mais quand votre serveur fait face à un trafic énorme, il est possible d'en tirer encore plus. Voyons comment !"
  290. data-source="https://buzut.net/optimiser-nginx/"
  291. data-date="2024-03-13"
  292. data-favicon="https://buzut.net/img/favicon.png"
  293. data-domain="buzut.net"
  294. ><svg xmlns="http://www.w3.org/2000/svg"
  295. width="24" height="24" viewBox="0 0 24 24" fill="none"
  296. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  297. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  298. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  299. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  300. </svg>
  301. <span class="sr-only">[archive]</span></a></em></cite></p>
  302. </blockquote>
  303. <p>Pour lecture&nbsp;ultérieure.</p>
  304. <a href="#hr-119" title="Lien vers cette section de la page"><hr id="hr-119" /></a>
  305. <blockquote>
  306. <p><code>font-size: calc(1rem + 0.25vw);</code></p>
  307. <p><cite><em><a data-link-domain="jameshfisher.com" href="https://jameshfisher.com/2024/03/12/a-formula-for-responsive-font-size/" hreflang="en"
  308. title="Consultation de l’article (anglais)">A formula for responsive font-size</a>
  309. <a href="/david/cache/2024/08b2b2735f74ebf856d8a850cc9e41cc/" hreflang="en"
  310. data-tippy data-description="This CSS is now part of most websites I make:"
  311. data-source="https://jameshfisher.com/2024/03/12/a-formula-for-responsive-font-size/"
  312. data-date="2024-03-13"
  313. data-favicon="https://jameshfisher.com/assets/jim_128.png"
  314. data-domain="jameshfisher.com"
  315. ><svg xmlns="http://www.w3.org/2000/svg"
  316. width="24" height="24" viewBox="0 0 24 24" fill="none"
  317. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  318. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  319. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  320. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  321. </svg>
  322. <span class="sr-only">[archive]</span></a></em></cite></p>
  323. </blockquote>
  324. <p>Moins poussé que le <a data-link-domain="utopia.fyi" href="https://utopia.fyi/type/calculator?c=320,18,1.2,1240,20,1.25,5,2,&amp;s=0.75%7C0.5%7C0.25,1.5%7C2%7C3%7C4%7C6,s-l&amp;g=s,l,xl,12">Fluid type scale calculator</a> mais dans un contexte plus minimaliste / simple ça fait déjà le&nbsp;taf.</p>
  325. <a href="#hr-120" title="Lien vers cette section de la page"><hr id="hr-120" /></a>
  326. <blockquote lang="en">
  327. <p>To enable such progress, <strong>the Web Consortium too has evolved, always taking a people-first approach:</strong> the Web must continue to serve humanity. The first such inflection point was the creation of the patent policy in 2003&nbsp;which assures that specifications can be implemented on a Royalty-Free basis and used at no cost, thus boosting adoption and usage. Another is the creation in 2011&nbsp;of W3C Community and Business Groups which enable everyone –not just W3C Members– to participate in the development of the Web or its technologies. Our most recent inflection point was <mark>re-launching the Consortium in 2023&nbsp;as a public-interest non-profit organization</mark> to work for the good of the&nbsp;public.</p>
  328. <p><cite><em><a data-link-domain="w3.org" href="https://www.w3.org/blog/2024/from-a-humble-beginning-35-years-ago-the-web-is-now-central-to-the-daily-lives-of-billions/" hreflang="en"
  329. title="Consultation de l’article (anglais)">From a humble beginning 35&nbsp;years ago, the Web is now central to the daily lives of billions</a>
  330. <a href="/david/cache/2024/c684ecb41e8e4ea04c6dac1e1d87f776/" hreflang="en"
  331. data-tippy data-description="In this blog post, W3C CEO Seth Dobbs depicts how from a humble beginning 35 years ago, the Web is now central to the daily lives of billions of people."
  332. data-source="https://www.w3.org/blog/2024/from-a-humble-beginning-35-years-ago-the-web-is-now-central-to-the-daily-lives-of-billions/"
  333. data-date="2024-03-13"
  334. data-favicon="https://www.w3.org/favicon.ico"
  335. data-domain="w3.org"
  336. ><svg xmlns="http://www.w3.org/2000/svg"
  337. width="24" height="24" viewBox="0 0 24 24" fill="none"
  338. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  339. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  340. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  341. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  342. </svg>
  343. <span class="sr-only">[archive]</span></a></em></cite></p>
  344. </blockquote>
  345. <p>35&nbsp;ans de liens. Merci Tim <em>et al.</em> d’avoir permis&nbsp;cela.</p>
  346. <nav>
  347. <p>
  348. <a href="/david/2024/liens/"
  349. title="Liste de tous les articles 2024 associés à cette étiquette"
  350. rel="tag">#liens</a>
  351. <a href="/david/2024/partage/"
  352. title="Liste de tous les articles 2024 associés à cette étiquette"
  353. rel="tag">#partage</a>
  354. <a href="/david/2024/web/"
  355. title="Liste de tous les articles 2024 associés à cette étiquette"
  356. rel="tag">#web</a>
  357. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  358. </p>
  359. </nav>
  360. <nav>
  361. <p>
  362. <a rel="prev"
  363. href="/david/2024/03/12/"
  364. title="Publication précédente : Surligner">← Précédent</a> •
  365. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  366. • <a rel="next"
  367. href="/david/2024/03/14/"
  368. title="Publication suivante : Montre 2">Suivant →</a>
  369. </p>
  370. </nav>
  371. <form action="/david/recherche/" method="get">
  372. <fieldset>
  373. <legend>Recherche</legend>
  374. <label for="input-search">Termes de votre recherche :</label>
  375. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  376. <input type="submit" value="Chercher">
  377. <p id="indexation-infos">
  378. <small>
  379. Seuls les contenus de ces 8 dernières années sont indexés.
  380. </small>
  381. </p>
  382. </fieldset>
  383. </form>
  384. <aside>
  385. <theme-toggle></theme-toggle>
  386. </aside>
  387. </article>
  388. <hr>
  389. <footer>
  390. <p>
  391. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  392. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  393. <a href="http://larlet.com"
  394. title="Go to my English profile"
  395. data-instant>Pro</a>
  396. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  397. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  398. </p>
  399. <template id="theme-selector">
  400. <form>
  401. <style type="text/css">
  402. fieldset div {
  403. text-align: center;
  404. }
  405. </style>
  406. <fieldset>
  407. <legend>Thème</legend>
  408. <div>
  409. <label>
  410. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  411. Auto
  412. </label>
  413. <label>
  414. <input type="radio" value="dark" name="chosen-color-scheme">
  415. Foncé
  416. </label>
  417. <label>
  418. <input type="radio" value="light" name="chosen-color-scheme">
  419. Clair
  420. </label>
  421. </div>
  422. </fieldset>
  423. </form>
  424. </template>
  425. </footer>
  426. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  427. <script>
  428. class ThemeToggle extends HTMLElement {
  429. constructor() {
  430. super()
  431. const themeSelectorTemplate = document.querySelector('#theme-selector')
  432. const form = themeSelectorTemplate.content.firstElementChild
  433. this.attachShadow({ mode: 'open' })
  434. this.shadowRoot.appendChild(form.cloneNode(true))
  435. }
  436. connectedCallback() {
  437. const form = this.shadowRoot.querySelector('form')
  438. form.addEventListener('change', (e) => {
  439. const chosenColorScheme = e.target.value
  440. localStorage.setItem('theme', chosenColorScheme)
  441. toggleTheme(chosenColorScheme)
  442. })
  443. const selectedTheme = localStorage.getItem('theme')
  444. if (selectedTheme && selectedTheme !== 'undefined') {
  445. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  446. }
  447. }
  448. }
  449. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  450. window.addEventListener('load', () => {
  451. let colorsLayer = undefined
  452. let hasDarkRules = false
  453. for (const styleSheet of Array.from(document.styleSheets)) {
  454. let mediaRules = []
  455. for (const layerRule of styleSheet.cssRules) {
  456. if (!(layerRule instanceof CSSLayerBlockRule)) {
  457. continue
  458. }
  459. if (layerRule.name === 'colors') {
  460. colorsLayer = layerRule
  461. }
  462. for (const cssRule of layerRule.cssRules) {
  463. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  464. continue
  465. }
  466. // WARNING: Safari does not have/supports `conditionText`.
  467. if (cssRule.conditionText) {
  468. if (cssRule.conditionText !== prefersColorSchemeDark) {
  469. continue
  470. }
  471. } else {
  472. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  473. continue
  474. }
  475. }
  476. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  477. }
  478. }
  479. // WARNING: do not try to insert a Rule to a styleSheet you are
  480. // currently iterating on, otherwise the browser will be stuck
  481. // in a infinite loop…
  482. for (const mediaRule of mediaRules) {
  483. // Safari requires the `0` second parameter (even if default).
  484. colorsLayer.insertRule(mediaRule.cssText, 0)
  485. hasDarkRules = true
  486. }
  487. }
  488. if (hasDarkRules) {
  489. if ('customElements' in window && !customElements.get('theme-toggle')) {
  490. customElements.define('theme-toggle', ThemeToggle)
  491. }
  492. }
  493. })
  494. </script>
  495. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  496. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  497. <script>
  498. tippy('[data-tippy]', {
  499. content(reference) {
  500. reference.addEventListener('click', (e) => e.preventDefault())
  501. return `
  502. <h3 lang="fr">
  503. <img src="${reference.dataset.favicon}" loading="lazy">
  504. <a href="${reference.dataset.source}"
  505. >Article sur ${reference.dataset.domain}</a></h3>
  506. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  507. <div class="tippy-links" lang="fr">
  508. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  509. </div>
  510. `
  511. },
  512. allowHTML: true,
  513. interactive: true,
  514. delay: [150, 700],
  515. hideOnClick: false
  516. })
  517. </script>
  518. <script type="module">
  519. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  520. const markObserver = new IntersectionObserver((entries, observer) => {
  521. const computedStyle = getComputedStyle(document.documentElement)
  522. const markBackground = computedStyle.getPropertyValue('--mark-background')
  523. for (const entry of entries) {
  524. if (entry.intersectionRatio === 0) continue
  525. const markElement = entry.target
  526. markElement.style.backgroundColor = 'inherit'
  527. const annotation = annotate(
  528. markElement, {
  529. type: 'highlight',
  530. multiline: true,
  531. color: markBackground,
  532. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  533. animate: false
  534. }
  535. )
  536. annotation.show()
  537. observer.unobserve(markElement)
  538. }
  539. }, {threshold: 1.0})
  540. for (const markElement of document.querySelectorAll('mark')) {
  541. markObserver.observe(markElement)
  542. }
  543. </script>
  544. </body>
  545. </html>