Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  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 #solastalgia
  14. — David Larlet</title>
  15. <meta name="description" content="Publications relatives au tag #solastalgia">
  16. <!-- That good ol' feed, subscribe :). -->
  17. <link rel="alternate"
  18. type="application/atom+xml"
  19. title="Feed"
  20. href="/david/log/">
  21. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  22. <link rel="apple-touch-icon"
  23. sizes="180x180"
  24. href="/static/david/icons2/apple-touch-icon.png">
  25. <link rel="icon"
  26. type="image/png"
  27. sizes="32x32"
  28. href="/static/david/icons2/favicon-32x32.png">
  29. <link rel="icon"
  30. type="image/png"
  31. sizes="16x16"
  32. href="/static/david/icons2/favicon-16x16.png">
  33. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  34. <link rel="mask-icon"
  35. href="/static/david/icons2/safari-pinned-tab.svg"
  36. color="#07486c">
  37. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  38. <meta name="msapplication-TileColor" content="#f7f7f7">
  39. <meta name="msapplication-config"
  40. content="/static/david/icons2/browserconfig.xml">
  41. <meta name="theme-color"
  42. content="#f7f7f7"
  43. media="(prefers-color-scheme: light)">
  44. <meta name="theme-color"
  45. content="#272727"
  46. media="(prefers-color-scheme: dark)">
  47. <!-- Is that even respected? Retrospectively? What a shAItshow…
  48. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  49. <meta name="robots" content="noai, noimageai">
  50. <!-- Documented, feel free to shoot an email. -->
  51. <link rel="stylesheet" href="/static/david/css/style_2024-02-03.css">
  52. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  53. <link rel="preload"
  54. href="/static/david/css/fonts/century_supra_ot_a_regular.woff2"
  55. as="font"
  56. type="font/woff2"
  57. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  58. crossorigin>
  59. <link rel="preload"
  60. href="/static/david/css/fonts/century_supra_ot_a_bold.woff2"
  61. as="font"
  62. type="font/woff2"
  63. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  64. crossorigin>
  65. <link rel="preload"
  66. href="/static/david/css/fonts/century_supra_ot_a_italic.woff2"
  67. as="font"
  68. type="font/woff2"
  69. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  70. crossorigin>
  71. <link rel="preload"
  72. href="/static/david/css/fonts/century_supra_ot_b_regular.woff2"
  73. as="font"
  74. type="font/woff2"
  75. media="(prefers-color-scheme: dark)"
  76. crossorigin>
  77. <link rel="preload"
  78. href="/static/david/css/fonts/century_supra_ot_b_bold.woff2"
  79. as="font"
  80. type="font/woff2"
  81. media="(prefers-color-scheme: dark)"
  82. crossorigin>
  83. <link rel="preload"
  84. href="/static/david/css/fonts/century_supra_ot_b_italic.woff2"
  85. as="font"
  86. type="font/woff2"
  87. media="(prefers-color-scheme: dark)"
  88. crossorigin>
  89. <script>
  90. function toggleTheme(themeName) {
  91. document.documentElement.classList.toggle(
  92. 'forced-dark',
  93. themeName === 'dark'
  94. )
  95. document.documentElement.classList.toggle(
  96. 'forced-light',
  97. themeName === 'light'
  98. )
  99. }
  100. const selectedTheme = localStorage.getItem('theme')
  101. if (selectedTheme !== 'undefined') {
  102. toggleTheme(selectedTheme)
  103. }
  104. </script>
  105. <style type="text/css">
  106. details[open] summary {
  107. display: none;
  108. }
  109. </style>
  110. <body data-instant-intensity="viewport-all">
  111. <article>
  112. <header>
  113. <hgroup>
  114. <h1>#solastalgia</h1>
  115. <p>Publications relatives à cette étiquette</p>
  116. </hgroup>
  117. </header>
  118. <nav>
  119. <p>
  120. <a href="/david/" title="Aller à l’accueil">
  121. Accueil</a>
  122. <a rel="tags"
  123. href="/david/2024/#tags"
  124. title="Liste de toutes les étiquettes">
  125. Étiquettes</a>
  126. <a href="/david/recherche/" title="Aller à la page de recherche" rel="search" data-no-instant>Recherche</a>
  127. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  128. </p>
  129. </nav>
  130. <h2>
  131. <a href="/david/2024/02/28/" title="Lien permanent vers cet article">Dérèglement</a> <time datetime="2024-02-28">28 février 2024</time>
  132. </h2>
  133. <p>J’avais déjà remarqué leur départ très tardif en décembre. Hier soir, j’ai entendu mes premières bernaches. Demain matin, elles risquent d’avoir un petit peu&nbsp;frais…</p>
  134. <figure>
  135. <a href="/static/david/2024/2024-02-28-courbe-temperature.jpg"
  136. title="Cliquer pour une version haute résolution">
  137. <img
  138. src="/static/david/2024/2024-02-28-courbe-temperature.jpg"
  139. width="960" height="2079"
  140. srcset="/static/david/2024/2024-02-28-courbe-temperature.jpg 960w, /static/david/2024/2024-02-28-courbe-temperature_660x440.jpg 660w, /static/david/2024/2024-02-28-courbe-temperature_990x660.jpg 990w, /static/david/2024/2024-02-28-courbe-temperature_1320x880.jpg 1320w"
  141. sizes="min(100vw, calc(100vh * 960 / 2079))"
  142. loading="lazy"
  143. decoding="async"
  144. alt="Capture d’écran de la météo, les températures vont de 14°C à -13°C en moins de 12&nbsp;heures.">
  145. </a>
  146. <figcaption>#MeanwhileInCanada</figcaption>
  147. </figure>
  148. <a href="#hr-92" title="Lien vers cette section de la page"><hr id="hr-92" /></a>
  149. <p>Le même jour, j’intègre les <a data-link-domain="mistune.lepture.com" href="https://mistune.lepture.com/en/latest/directives.html#admonitions">admonitions</a> à un de nos outils interne et j’apprends qu’il est possible d’intégrer ce type de rendu pour le <a data-link-domain="github.com" href="https://github.com/orgs/community/discussions/16925"><em>markdown</em> servi par Microsoft Github</a> en lisant le <a data-link-domain="github.com" href="https://github.com/jgarber623/aria-collapsible">README de aria-collapsible</a>.</p>
  150. <p>Au passage, j’apprends beaucoup en lisant le code de <em>Web Components</em> en ce moment. Il y a une effervescence dans le domaine parmi des personnes qui ont un bon niveau de JS ainsi qu’une sensibilité à l’accessibilité de leurs productions. Ici par exemple, je découvre comment faire des composants relativement&nbsp;défensifs.</p>
  151. <a href="#hr-93" title="Lien vers cette section de la page"><hr id="hr-93" /></a>
  152. <blockquote lang="en">
  153. <p>Anyway, if you want to know some basic information about Passkeys I know a site you can check&nbsp;out.</p>
  154. <p><cite><em><a data-link-domain="chriscoyier.net" href="https://chriscoyier.net/2024/02/28/where-im-at-on-the-whole-css-tricks-thing/" hreflang="en"
  155. title="Consultation de l’article (anglais)">Where I’m at on the whole CSS-Tricks thing</a>
  156. <a href="/david/cache/2024/2cbc47f0ebded9d54fe6163fa4ea0667/" hreflang="en"
  157. data-tippy data-description="It was March 2022 when I sold CSS-Tricks to DigitalOcean. So it’s been just about 2 years now."
  158. data-source="https://chriscoyier.net/2024/02/28/where-im-at-on-the-whole-css-tricks-thing/"
  159. data-date="2024-02-28"
  160. data-favicon="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 width=%22256%22 height=%22256%22 viewBox=%220 0 100 100%22><rect width=%22100%22 height=%22100%22 rx=%2220%22 fill=%22%23f8d773%22></rect><text x=%2250%%22 y=%2250%%22 dominant-baseline=%22central%22 text-anchor=%22middle%22 font-size=%2290%22>👨‍💻</text></svg>"
  161. data-domain="chriscoyier.net"
  162. ><svg xmlns="http://www.w3.org/2000/svg"
  163. width="24" height="24" viewBox="0 0 24 24" fill="none"
  164. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  165. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  166. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  167. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  168. </svg>
  169. <span class="sr-only">[archive]</span></a></em></cite></p>
  170. </blockquote>
  171. <p>Beaucoup d’honnêteté et… une belle ressource de perdue, ou en passe de l’être. <em>Tricky.</em></p>
  172. <a href="#hr-94" title="Lien vers cette section de la page"><hr id="hr-94" /></a>
  173. <blockquote lang="en">
  174. <p>Using <code>color-mix()</code>, we can adjust the tint/shade based on the background color, meaning <mark>we don’t need to manually select lighter/darker colors</mark> for those states. And because we’re using OKLCH, the variations will be perceptually uniform, <a data-link-domain="lea.verou.me" href="https://lea.verou.me/blog/2020/04/lch-colors-in-css-what-why-and-how/#3.-lch-lightness-actually-means-something">unlike HSL</a>. This means that tints and shades will look consistent for any color we&nbsp;choose!</p>
  175. <p><cite><em><a data-link-domain="abeautifulsite.net" href="https://www.abeautifulsite.net/posts/better-buttons-with-color-mix-and-custom-properties/" hreflang="en"
  176. title="Consultation de l’article (anglais)">Better Buttons with color-mix() and Custom Properties</a>
  177. <a href="/david/cache/2024/b2ccbe813d97ba39ba64a1b6d14422dd/" hreflang="en"
  178. data-tippy data-description="Let the browser and OKLCH do the hard work of styling states."
  179. data-source="https://www.abeautifulsite.net/posts/better-buttons-with-color-mix-and-custom-properties/"
  180. data-date="2024-02-28"
  181. data-favicon="https://www.abeautifulsite.net/images/logos/leaf.svg"
  182. data-domain="abeautifulsite.net"
  183. ><svg xmlns="http://www.w3.org/2000/svg"
  184. width="24" height="24" viewBox="0 0 24 24" fill="none"
  185. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  186. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  187. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  188. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  189. </svg>
  190. <span class="sr-only">[archive]</span></a></em></cite></p>
  191. </blockquote>
  192. <p>Les personnes qui maîtrisent bien CSS vont avoir de plus en plus de valeur. À juste&nbsp;titre.</p>
  193. <nav>
  194. <p>
  195. <a href="/david/2024/documentation/"
  196. title="Liste de tous les articles 2024 associés à cette étiquette"
  197. rel="tag">#documentation</a>
  198. <a href="/david/2024/partage/"
  199. title="Liste de tous les articles 2024 associés à cette étiquette"
  200. rel="tag">#partage</a>
  201. <a href="/david/2024/solastalgia/"
  202. title="Liste de tous les articles 2024 associés à cette étiquette"
  203. rel="tag">#solastalgia</a>
  204. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  205. </p>
  206. </nav>
  207. <h2>
  208. <a href="/david/2024/02/26/" title="Lien permanent vers cet article">Galaxie</a> <time datetime="2024-02-26">26 février 2024</time>
  209. </h2>
  210. <p>Anecdote du jour qui met le sourire de bon&nbsp;matin.</p>
  211. <figure>
  212. <a href="/static/david/2024/2024-02-26-neige-galaxie.jpg"
  213. title="Cliquer pour une version haute résolution">
  214. <img
  215. src="/static/david/2024/2024-02-26-neige-galaxie.jpg"
  216. width="4032" height="3024"
  217. srcset="/static/david/2024/2024-02-26-neige-galaxie.jpg 4032w, /static/david/2024/2024-02-26-neige-galaxie_660x440.jpg 660w, /static/david/2024/2024-02-26-neige-galaxie_990x660.jpg 990w, /static/david/2024/2024-02-26-neige-galaxie_1320x880.jpg 1320w"
  218. sizes="min(100vw, calc(100vh * 4032 / 3024))"
  219. loading="lazy"
  220. decoding="async"
  221. alt="De la neige qui tombe à gros flocon.">
  222. </a>
  223. <figcaption>L’espace d’un instant, par la&nbsp;fenêtre.</figcaption>
  224. </figure>
  225. <blockquote>
  226. <p>— Oh la belle neige&#8239;!<br />
  227. —&nbsp;Il pleut des étoiles, la galaxie est en train de tomber.<br />
  228. —&nbsp;❤️</p>
  229. </blockquote>
  230. <a href="#hr-89" title="Lien vers cette section de la page"><hr id="hr-89" /></a>
  231. <blockquote lang="en">
  232. <p>CSS Variable Groups is a way to define multiple properties under the same namespace and pass the entire group around, addressing several pain points around design tokens, design systems, and integrating third-party&nbsp;components.</p>
  233. <p><cite><em><a data-link-domain="lea.verou.me" href="https://lea.verou.me/docs/var-groups/" hreflang="en"
  234. title="Consultation de l’article (anglais)">Proposal: CSS Variable Groups</a>
  235. <a href="/david/cache/2024/0cc2e9c6b29f8326b2ff628f64e22888/" hreflang="en"
  236. data-tippy data-description="CSS Variable Groups is a way to define multiple properties under the same namespace"
  237. data-source="https://lea.verou.me/docs/var-groups/"
  238. data-date="2024-02-27"
  239. data-favicon="https://lea.verou.me/mark.svg"
  240. data-domain="lea.verou.me"
  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>Heureusement que Lea Verou <a href="/david/2024/02/18/" title="In·directions">me lit</a> et traduit ça en proposition de <a data-link-domain="github.com" href="https://github.com/w3c/csswg-drafts/issues/9992">standardisation</a> en quelques jours au lieu de chialer&nbsp;😅🙇. Trop&nbsp;hâte&#8239;!</p>
  251. <a href="#hr-90" title="Lien vers cette section de la page"><hr id="hr-90" /></a>
  252. <blockquote lang="en">
  253. <p><mark>Maybe that’s ok.</mark> The amount of power you give plugin authors is a delicate balance. Giving them too much power could impact the stability of your project. But giving them too little power makes it hard for them to solve their problems — in that case you might as well not have&nbsp;plugins.</p>
  254. <p><cite><em><a data-link-domain="css-tricks.com" href="https://css-tricks.com/designing-a-javascript-plugin-system/" hreflang="en"
  255. title="Consultation de l’article (anglais)">Designing a JavaScript Plugin System</a>
  256. <a href="/david/cache/2024/d9c30865dde8c88394ba054836a18ae3/" hreflang="en"
  257. data-tippy data-description="WordPress has plugins. jQuery has plugins. Gatsby, Eleventy, and Vue do, too."
  258. data-source="https://css-tricks.com/designing-a-javascript-plugin-system/"
  259. data-date="2024-02-27"
  260. data-favicon="https://css-tricks.com/favicon.svg"
  261. data-domain="css-tricks.com"
  262. ><svg xmlns="http://www.w3.org/2000/svg"
  263. width="24" height="24" viewBox="0 0 24 24" fill="none"
  264. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  265. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  266. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  267. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  268. </svg>
  269. <span class="sr-only">[archive]</span></a></em></cite></p>
  270. </blockquote>
  271. <p>Problématique du jour&nbsp;: comment concevoir un système de <em>plugins</em> qui soit le bon compromis entre flexibilité et stabilité&#8239;? Ce n’est pas si évident, encore plus dans un écosystème aussi évolutif que&nbsp;JavaScript.</p>
  272. <nav>
  273. <p>
  274. <a href="/david/2024/parentalite/"
  275. title="Liste de tous les articles 2024 associés à cette étiquette"
  276. rel="tag">#parentalité</a>
  277. <a href="/david/2024/poesie/"
  278. title="Liste de tous les articles 2024 associés à cette étiquette"
  279. rel="tag">#poésie</a>
  280. <a href="/david/2024/solastalgia/"
  281. title="Liste de tous les articles 2024 associés à cette étiquette"
  282. rel="tag">#solastalgia</a>
  283. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  284. </p>
  285. </nav>
  286. <h2>
  287. <a href="/david/2024/01/08/" title="Lien permanent vers cet article">Liens</a> <time datetime="2024-01-08">8 janvier 2024</time>
  288. </h2>
  289. <p>Je décide de tester d’ajouter le domaine du lien après la lien, j’ai souvent besoin de cette information avant de cliquer sur un lien. Pour cela je charge le domaine en Python grâce à la flexibilité de <a data-link-domain="mistune.lepture.com" href="https://mistune.lepture.com/en/latest/">mistune</a> et je m’en sers ensuite en CSS pour l’afficher&nbsp;dynamiquement&nbsp;:</p>
  290. <pre><code>a[data-link-domain]::after {
  291. content: &quot; [&quot; attr(data-link-domain) &quot;]&quot;;
  292. font-size: smaller;
  293. color: var(--link-color-domain);
  294. }
  295. </code></pre>
  296. <p>Je fais aussi des tests de soulignement avec un gradient qui irait de la couleur du lien principal à celle du&nbsp;domaine&nbsp;:</p>
  297. <pre><code>a {
  298. text-decoration-skip-ink: auto;
  299. text-decoration-thickness: calc(var(--fluid-0) / 10);
  300. position: relative;
  301. }
  302. a::before {
  303. content: '';
  304. width: 100%;
  305. position: absolute;
  306. left: 0;
  307. bottom: -1px;
  308. height: calc(var(--fluid-0) / 10);
  309. background: linear-gradient(
  310. to right,
  311. var(--link-color),
  312. var(--link-color-domain)
  313. );
  314. }
  315. </code></pre>
  316. <p>Mais au final je jette car je perds la partie <code>skip-ink</code> que je trouve chouette comme évolution de rendu possible. Toujours cet équilibre complexité / expérience /&nbsp;accessibilité.</p>
  317. <p>Plus tard, je commence l’implémentation de l’archivage des liens distants. J’ai pas mal d’idées mais je sais qu’il ne faut pas que je prenne trop de retard dans la récupération sinon je ne vais pas avoir l’énergie pour reprendre l’historique. Ce sera probablement l’occasion de faire un autre <em>Web Component</em> dédié. En suivant les recommandations <a data-link-domain="fedi.larlet.fr" href="https://fedi.larlet.fr/@david/111703611010197838">sur masto</a>, je les nomme <code>archive</code> pour le moment et je conserve la date de récupération de l’article car c’est une information importante. J’adapterai le style plus&nbsp;tard.</p>
  318. <p>Il faut que j’améliore cette automatisation car c’est assez fastidieux pour le moment, beaucoup de retouches manuelles pour obtenir un article lisible selon les sources. Je vais aussi réduire le nombre de liens que j’archive, les sources techniques ont probablement moins d’intérêt dans la&nbsp;durée.</p>
  319. <p>Chaque lien distant prend une longueur non négligeable suite à ces deux&nbsp;ajouts&nbsp;🤔.</p>
  320. <a href="#hr-17" title="Lien vers cette section de la page"><hr id="hr-17" /></a>
  321. <blockquote>
  322. <p>Ce billet illustre la loi qui dit “Moins un blog est mis à jour, plus il y a de probabilité que ce qui y est publié a pour sujet les aspects techniques dudit&nbsp;blog”.</p>
  323. <p><cite><em><a data-link-domain="blog.professeurjoachim.com" href="https://blog.professeurjoachim.com/billet/2024-01-05-ma-page-now-ou-plutot-en-ce-moment" hreflang="fr"
  324. title="Consultation de l’article">Ma page /now (ou plutôt /en-ce-moment)</a>
  325. <a href="/david/cache/2024/076169df8a4bd9dde9a4637c6b306dff/" hreflang="fr"
  326. data-tippy data-description="La page /now a été proposée par Derek Sivers pour spécifier de manière très flexible un format de page web sur laquelle on peut en apprendre plus sur …"
  327. data-source="https://blog.professeurjoachim.com/billet/2024-01-05-ma-page-now-ou-plutot-en-ce-moment"
  328. data-date="2024-01-07"
  329. data-favicon="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22 filter=%22hue-rotate(82deg)%22>🌿</text></svg>"
  330. data-domain="blog.professeurjoachim.com"
  331. ><svg xmlns="http://www.w3.org/2000/svg"
  332. width="24" height="24" viewBox="0 0 24 24" fill="none"
  333. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  334. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  335. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  336. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  337. </svg>
  338. <span class="sr-only">[archive]</span></a></em></cite></p>
  339. </blockquote>
  340. <p>J’ai ri. Je n’ai jamais fait une telle page car je sais que je n’arriverais pas à la maintenir à jour. Je galère déjà avec mon <a data-link-domain="larlet.com" href="https://larlet.com/">profil pro</a>.</p>
  341. <blockquote lang="en">
  342. <p>I also started noticing when people do this subconiously. For example, most software engineers I know hate blogging, but <mark>they like building their own blog engine to make blogging more pleasant</mark> (I’m very guilty of this&nbsp;too).</p>
  343. <p>Kent Beck nailed it: “for each desired change, make the change easy (warning: this may be hard), then make the easy&nbsp;change”.</p>
  344. <p><cite><em><a data-link-domain="frantic.im" href="https://frantic.im/opening-mail/" hreflang="en"
  345. title="Consultation de l’article (anglais)">Opening Mail</a>
  346. <a href="/david/cache/2024/7a223e552e8a8e3e11c759cbc5bc3ffa/" hreflang="en"
  347. data-tippy data-description="First make the change easy, then make the easy change."
  348. data-source="https://frantic.im/opening-mail/"
  349. data-date="2024-01-07"
  350. data-favicon="https://frantic.im/favicon.png"
  351. data-domain="frantic.im"
  352. ><svg xmlns="http://www.w3.org/2000/svg"
  353. width="24" height="24" viewBox="0 0 24 24" fill="none"
  354. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  355. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  356. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  357. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  358. </svg>
  359. <span class="sr-only">[archive]</span></a></em></cite></p>
  360. </blockquote>
  361. <p>Note&nbsp;: cette année, je ne ferai aucun lien vers 𝕏 (twitter.com) depuis mes&nbsp;articles.</p>
  362. <a href="#hr-18" title="Lien vers cette section de la page"><hr id="hr-18" /></a>
  363. <p>L’hiver commence maintenant le 7&nbsp;janvier à Montréal. Phénomène météorologique exceptionnel <em>et</em> tendance&nbsp;climatique.</p>
  364. <nav>
  365. <p>
  366. <a href="/david/2024/processus/"
  367. title="Liste de tous les articles 2024 associés à cette étiquette"
  368. rel="tag">#processus</a>
  369. <a href="/david/2024/solastalgia/"
  370. title="Liste de tous les articles 2024 associés à cette étiquette"
  371. rel="tag">#solastalgia</a>
  372. <a href="/david/2024/technique/"
  373. title="Liste de tous les articles 2024 associés à cette étiquette"
  374. rel="tag">#technique</a>
  375. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  376. </p>
  377. </nav>
  378. <form action="/david/recherche/" method="get">
  379. <fieldset>
  380. <legend>Recherche</legend>
  381. <label for="input-search">Termes de votre recherche :</label>
  382. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  383. <input type="submit" value="Chercher">
  384. <p id="indexation-infos">
  385. <small>
  386. Seuls les contenus de ces 8 dernières années sont indexés.
  387. </small>
  388. </p>
  389. </fieldset>
  390. </form>
  391. <aside>
  392. <theme-toggle></theme-toggle>
  393. </aside>
  394. </article>
  395. <hr>
  396. <footer>
  397. <p>
  398. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  399. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  400. <a href="http://larlet.com"
  401. title="Go to my English profile"
  402. data-instant>Pro</a>
  403. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  404. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  405. </p>
  406. <template id="theme-selector">
  407. <form>
  408. <style type="text/css">
  409. fieldset div {
  410. text-align: center;
  411. }
  412. </style>
  413. <fieldset>
  414. <legend>Thème</legend>
  415. <div>
  416. <label>
  417. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  418. Auto
  419. </label>
  420. <label>
  421. <input type="radio" value="dark" name="chosen-color-scheme">
  422. Foncé
  423. </label>
  424. <label>
  425. <input type="radio" value="light" name="chosen-color-scheme">
  426. Clair
  427. </label>
  428. </div>
  429. </fieldset>
  430. </form>
  431. </template>
  432. </footer>
  433. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  434. <script>
  435. class ThemeToggle extends HTMLElement {
  436. constructor() {
  437. super()
  438. const themeSelectorTemplate = document.querySelector('#theme-selector')
  439. const form = themeSelectorTemplate.content.firstElementChild
  440. this.attachShadow({ mode: 'open' })
  441. this.shadowRoot.appendChild(form.cloneNode(true))
  442. }
  443. connectedCallback() {
  444. const form = this.shadowRoot.querySelector('form')
  445. form.addEventListener('change', (e) => {
  446. const chosenColorScheme = e.target.value
  447. localStorage.setItem('theme', chosenColorScheme)
  448. toggleTheme(chosenColorScheme)
  449. })
  450. const selectedTheme = localStorage.getItem('theme')
  451. if (selectedTheme && selectedTheme !== 'undefined') {
  452. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  453. }
  454. }
  455. }
  456. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  457. window.addEventListener('load', () => {
  458. let colorsLayer = undefined
  459. let hasDarkRules = false
  460. for (const styleSheet of Array.from(document.styleSheets)) {
  461. let mediaRules = []
  462. for (const layerRule of styleSheet.cssRules) {
  463. if (!(layerRule instanceof CSSLayerBlockRule)) {
  464. continue
  465. }
  466. if (layerRule.name === 'colors') {
  467. colorsLayer = layerRule
  468. }
  469. for (const cssRule of layerRule.cssRules) {
  470. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  471. continue
  472. }
  473. // WARNING: Safari does not have/supports `conditionText`.
  474. if (cssRule.conditionText) {
  475. if (cssRule.conditionText !== prefersColorSchemeDark) {
  476. continue
  477. }
  478. } else {
  479. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  480. continue
  481. }
  482. }
  483. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  484. }
  485. }
  486. // WARNING: do not try to insert a Rule to a styleSheet you are
  487. // currently iterating on, otherwise the browser will be stuck
  488. // in a infinite loop…
  489. for (const mediaRule of mediaRules) {
  490. // Safari requires the `0` second parameter (even if default).
  491. colorsLayer.insertRule(mediaRule.cssText, 0)
  492. hasDarkRules = true
  493. }
  494. }
  495. if (hasDarkRules) {
  496. if ('customElements' in window && !customElements.get('theme-toggle')) {
  497. customElements.define('theme-toggle', ThemeToggle)
  498. }
  499. }
  500. })
  501. </script>
  502. </body>
  503. </html>