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

index.html 25KB

1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
11ヶ月前
1年前
1年前
1年前
11ヶ月前
1年前
11ヶ月前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  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. Tag #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_2021-01-20.css">
  52. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  53. <link rel="preload"
  54. href="/static/david/css/fonts/triplicate_t4_poly_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/triplicate_t4_poly_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/triplicate_t4_poly_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/triplicate_t3_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/triplicate_t3_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/triplicate_t3_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 class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick"
  111. data-instant-intensity="viewport-all">
  112. <header>
  113. <h1>Publications relatives au tag #solastalgia</h1>
  114. </header>
  115. <nav>
  116. <p class="center">
  117. <a href="/david/" title="Aller à l’accueil">
  118. <svg class="icon icon-home">
  119. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  120. </svg>
  121. Accueil</a>
  122. • <a rel="tags"
  123. href="/david/#tags-2023"
  124. title="Liste de toutes les étiquettes">
  125. <svg class="icon icon-tags">
  126. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-tags"></use>
  127. </svg>
  128. Étiquettes</a>
  129. </p>
  130. </nav>
  131. <hr>
  132. <main>
  133. <p>Les plus récentes en premier, les 3 premières sont dépliées et ensuite c’est à la demande, bonne exploration !</p>
  134. <h2>
  135. <a href="/david/2023/12/06/" title="Lien permanent vers cet article">Équivalent</a> (2023-12-06)
  136. </h2>
  137. <blockquote>
  138. <p>Un vol aller-retour entre Paris et Montréal (11&#8239;080&#8239;km) émet 2,5&nbsp;tonnes de <mark>dioxyde de carbone équivalent</mark> dans l’atmosphère par passager&nbsp;[…]</p>
  139. <p><strong>Comment contrebalancer les émissions CO₂e de votre&nbsp;Paris-Montréal&#8239;?</strong></p>
  140. <p>Diminuer votre chauffage&nbsp;: 21&nbsp;ans et 3&nbsp;mois<br />
  141. Réduire vos déchets&nbsp;: 12&nbsp;ans et 9&nbsp;mois<br />
  142. Adopter des gestes d’écoconduite&nbsp;: 12&nbsp;ans et 9&nbsp;mois<br />
  143. Se nourrir localement&nbsp;: 8&nbsp;ans et 6&nbsp;mois<br />
  144. Adopter un régime végétarien&nbsp;: 5&nbsp;ans et 6&nbsp;mois<br />
  145. Adopter un régime végan&nbsp;: 3&nbsp;ans et 4&nbsp;mois<br />
  146. Passer à de l’électricité 100&#8239;% renouvelable&nbsp;: 1&nbsp;an et 7&nbsp;mois<br />
  147. Abandonner la voiture&nbsp;: 1&nbsp;an et&nbsp;3&nbsp;mois</p>
  148. <p><cite><em><a href="https://www.lemonde.fr/les-decodeurs/article/2023/12/05/vous-voulez-compenser-votre-vol-en-avion-par-des-ecogestes-voici-combien-de-temps-cela-vous-prendra_6204046_4355770.html">Vous voulez «&nbsp;compenser&nbsp;» votre vol en avion par des écogestes&#8239;? Voici combien de temps cela vous&nbsp;prendra</a></em></cite></p>
  149. </blockquote>
  150. <p>Je suis de plus en plus convaincu que l’on ne changera pas nos habitudes avant que les réserves de pétrole / charbon / gaz ne soient&nbsp;vides.</p>
  151. <p>Pénuries, famines, rapports de forces changeants, le capitalisme est très résilient dans ces situations. Il n’y a guère que la solidarité qui pourrait entamer un tel système et il comporte suffisamment de mécanismes pour s’en&nbsp;protéger.</p>
  152. <p>Un «&nbsp;dioxyde de carbone équivalent&nbsp;» est tellement scientifique, la mesure parait si propre. Combien d’«&nbsp;humains morts équivalents&nbsp;»&#8239;? Combien de «&nbsp;générations en état de suffocation équivalent&nbsp;»&#8239;? Combien d’«&nbsp;espèces anéanties&nbsp;équivalent&nbsp;»&#8239;?</p>
  153. <p><a href="https://theconversation.com/why-are-people-still-flying-to-climate-conferences-by-private-jet-218459">Et pendant ce temps là… un vol en bandes organisées.</a>&nbsp;(<a href="/david/cache/2023/328976d647ab5dbf9ff820f2cfe35e5a/">cache</a>)</p>
  154. <hr />
  155. <blockquote lang="en">
  156. <p>📧 Hope the air where you are is somewhat breathable today! Just wanted to circle back around on that&nbsp;report.</p>
  157. <p><cite><em><a href="https://www.mcsweeneys.net/articles/email-greetings-for-modern-times">Email Greetings for Modern Times</a></em>&nbsp;(<a href="/david/cache/2023/ec3d02a88dc8597c24f1b32b9cf51d41/">cache</a>)</cite></p>
  158. </blockquote>
  159. <h2>
  160. <a href="/david/2023/06/26/" title="Lien permanent vers cet article">Particules</a> (2023-06-26)
  161. </h2>
  162. <blockquote>
  163. <p>La mémoire est la source de la libération, et l’oubli est la racine de&nbsp;l’exil.</p>
  164. <p><cite>Ba’al&nbsp;Shem-Tov</cite></p>
  165. </blockquote>
  166. <p>On attend que les particules fines retombent pour pouvoir décoller. Si ça n’est pas un grand écart <em>facepalm</em>&nbsp;ça…</p>
  167. <hr />
  168. <p>Pas vraiment d’<a href="/david/2021/06/15/">avihonte</a> chez les ami·es (expatrié·es). J’évite de trop y penser, je vis déjà assez reclus comme ça. Et je suis loin d’être&nbsp;exemplaire.</p>
  169. <hr />
  170. <p>Il y a un besoin urgent à ce que je devienne ringard. Comme la cigarette, la voiture, l’avion. Un sous-groupe de ma génération doit incarner ce qu’il ne faut <strong>pas</strong>&nbsp;devenir.</p>
  171. <hr />
  172. <p>Les Sardaukars ont en eu marre de se battre contre des Fremens et sont retournés sur Geidi Prime pour le dire. Denis Villeneuve doit se frotter les&nbsp;mains.</p>
  173. <hr />
  174. <p>J’ai lu le Paradoxe de Fermi de Jean-Pierre Boudine ainsi que <a href="https://www.visualcapitalist.com/path-of-human-evolution/">cette illustration</a>&nbsp;(<a href="/david/cache/2023/58bdc0bd6ed37d5990d24384ee40022b/">cache</a>), serait-on sur la dernière marche&#8239;? Celle du grand&nbsp;sot.</p>
  175. <hr />
  176. <p>Combien d’appareils pourraient être rendus meilleurs en enlevant des choses dedans&#8239;? Tous&#8239;? <a href="http://mikebeauchamp.com/misc/sennheiser-hd-555-to-hd-595-mod/">Au moins un.</a>&nbsp;(<a href="/david/cache/2023/8f76362de8331d4dc5d3e0e0a882606e/">cache</a>)</p>
  177. <hr />
  178. <p>J’ai failli acheter une casquette sur laquelle était&nbsp;inscrite&nbsp;:</p>
  179. <blockquote>
  180. <p>Ce qui distingue les garçons des hommes c’est le prix de leurs jouets. (Oui, ça sonnait mieux en&nbsp;anglais…)</p>
  181. </blockquote>
  182. <p>Depuis, je ris&nbsp;jaune.</p>
  183. <hr />
  184. <p>Je me suis mis au skate pour pouvoir suivre l’enfant. Je me demande à quel point le <em>longboard</em> est un skate bourgeois. Je retrouve des sensations de <em>snowboard</em> intéressantes cela&nbsp;dit.</p>
  185. <hr />
  186. <p>Je suis content de ne pas avoir pris mon appareil photo pour cette dernière sortie en forêt. Documenter <a href="/david/2023/06/12/" title="Apocalypse">l’apocalypse</a> sans la rendre belle est un enjeu&nbsp;important.</p>
  187. <figure>
  188. <a href="/static/david/2023/2023-06-25-ouareau-smog.jpg"
  189. title="Cliquer pour une version haute résolution">
  190. <img
  191. src="/static/david/2023/2023-06-25-ouareau-smog.jpg"
  192. width="3024" height="4032"
  193. srcset="/static/david/2023/2023-06-25-ouareau-smog.jpg 3024w, /static/david/2023/2023-06-25-ouareau-smog_660x440.jpg 660w, /static/david/2023/2023-06-25-ouareau-smog_990x660.jpg 990w, /static/david/2023/2023-06-25-ouareau-smog_1320x880.jpg 1320w"
  194. sizes="min(100vw, calc(100vh * 3024 / 4032))"
  195. loading="lazy"
  196. decoding="async"
  197. alt="Un soleil rouge au-dessus de la forêt embrumée par des cendres à des centaines de kilomètres plus au nord.">
  198. </a>
  199. <figcaption>Ou&nbsp;ringard.</figcaption>
  200. </figure>
  201. <h2>
  202. <a href="/david/2023/06/12/" title="Lien permanent vers cet article">Apocalypse</a> (2023-06-12)
  203. </h2>
  204. <blockquote>
  205. <p>Lorsque je reste assis ou marche dans la forêt, je ne suis pas un «&nbsp;sujet&nbsp;» en train d’observer des «&nbsp;objets&nbsp;». En entrant dans le mandala, je suis pris dans des réseaux de communication, des maillages de relations. Que j’en sois conscient ou non, je mets en branle ces réseaux en effarouchant un cerf, en faisant sursauter un tamia ou en marchant sur une feuille verte. Il n’est pas possible d’observer le milieu en en étant&nbsp;dissocié.</p>
  206. <p>Les réseaux exercent également une influence sur moi. Chaque inspiration introduit dans mon organisme des centaines de molécules en suspension dans l’air. Ces molécules constituent l’arôme des bois, la senteur combinée de milliers de créatures. Certains arômes sont si agréables à l’homme qu’il les a domestiqués pour en extraire des «&nbsp;parfums&nbsp;». Un de ces parfums au moins, le jasmonate, est un signal d’alarme chimique, qui avertit les autres plantes d’un danger. Peut-être notre esthétique olfactive reflète-t-elle un désir de participer à la lutte de la&nbsp;nature&#8239;?</p>
  207. <p>Mais les parfums sont l’exception. La plupart des molécules de la forêt court-circuitent mon odorat et se dissolvent directement dans mon sang, pénétrant dans mon corps et mon esprit sans que j’en aie conscience. Les effets de cette imprégnation chimique de notre organisme par les arômes végétaux ont été très peu étudiés. La science occidentale ne s’est pas abaissée à prendre au sérieux l’idée que la forêt, ou son absence, puisse faire partie de notre être. Pourtant les amoureux de la forêt savent très bien que les arbres influent sur notre état d’esprit. Les Japonais ont nommé cette connaissance et en ont fait une pratique, <em>shinrin-yoku</em>, «&nbsp;se baigner dans l’air de la forêt&nbsp;». Il semble que le fait de participer à la communauté d’information du mandala apporte un certain bien-être dans le cœur chimique de notre&nbsp;organisme.</p>
  208. <p><cite><em>Un an dans la vie d’une forêt</em>, David G. Haskell</cite></p>
  209. </blockquote>
  210. <p>La couleur du ciel de cette semaine est peut-être la nouvelle lueur du ciel en été&nbsp;: jaune, cendrée, atypique. Mortelle.</p>
  211. <p>J’ai déjà un filtre sur mon robinet (une partie de mes conduites sont en plomb, encore courant à Montréal), est-ce qu’il va bientôt me falloir un filtre à air pour pouvoir respirer sainement&#8239;? La sélection privilégio-capitaliste est en&nbsp;marche.</p>
  212. <p>Comment pleure-t-on (de rire&#8239;?) devant un film lorsqu’on porte un masque de ski&#8239;? Est-ce qu’un casque de <em>Spatial Computing</em> permettra de protéger ses yeux de la fumée&#8239;? Et si cela devenait la seule façon de voir un ciel bleu&#8239;? Peut-être que <a href="/david/blog/2016/si-cest-gratuit/">la symbiose</a> devra faire partie de nos conditions de survie dans la fournaise que nous&nbsp;créons.</p>
  213. <p>Nous n’avons plus le temps pour des outils numériques individualistes. Nous n’avons plus le temps. Pour <a href="https://fr.wikipedia.org/wiki/Notre_maison_br%C3%BBle_et_nous_regardons_ailleurs">paraphraser</a> un autre escroc&nbsp;présidentiel&nbsp;:</p>
  214. <blockquote>
  215. <p>Notre forêt brûle et nous mettons des&nbsp;masques.</p>
  216. </blockquote>
  217. <h2>
  218. <a href="/david/2023/02/25/" title="Lien permanent vers cet article">Transmission</a> (2023-02-25)
  219. </h2>
  220. <details>
  221. <summary>Déplier pour lire le contenu de la publication</summary>
  222. <blockquote lang="en">
  223. <p>So I would. I would grab a coffee, sit down, and start reading. Often we’d share posts back and forth, or chat about some of the more interesting ones we had read. It was something we did that was never on accident… <mark>it was intentional, deliberate.</mark> It was a way, I think, of investing in ourselves while also acknowledging how much we still could learn from&nbsp;others.</p>
  224. <p><cite><em><a href="https://timkadlec.com/remembers/2023-02-23-investing-in-rss/">Investing in RSS</a></em>&nbsp;(<a href="/david/cache/2023/19ec475bd5d92b02fbef043c52ea0589/">cache</a>)</cite></p>
  225. </blockquote>
  226. <p>Il y a ce réveil des blogs qui me rend silencieux, laisser la place d’une attention pour les autres. Et en même temps, ce sont plutôt des réveils que de nouvelles personnes. <strong>Je suis très disposé à me faire le relais de nouveaux blogs si vous en créez&nbsp;un.</strong></p>
  227. <p>Il y a la constatation récurrente que la <a href="https://fr.wikipedia.org/wiki/Loi_de_Conway">Loi de Conway</a> se vérifie dès que je travaille avec des structures à taille inhumaine. L’aliénation de l’humain aux processus est l’un des grands mystères de ce temps. L’expérience de ces hiérarchies me permet d’attendre d’être en communication avec LA personne compétente pour aller de&nbsp;l’avant.</p>
  228. <p>Il y a la transmission douloureuse, je me demande par exemple si sa génération sera la dernière à pouvoir faire du ski de fond dans les parcs montréalais. Au même titre qu’il a été l’un des derniers à pouvoir patiner sur le Lac aux Castors du Mont-Royal. Et encore, il était dans la&nbsp;poussette.</p>
  229. <p>Il y a cette rupture vraiment pas conventionnelle qui me questionne sur le fait qu’une transmission ultime puisse passer par la destruction pour voir ce qui est recréé ensuite, valider les acquis et les envies en quelque sorte. Tellement difficile de décortiquer certaines intentions sans raviver les&nbsp;tensions.</p>
  230. <hr />
  231. <blockquote>
  232. <p>🔄 Que se passe-t-il quand un LLM se nourrit en continu&#8239;&#8239;? Soit il se retrouve exposé à des <mark>contenus produits par d’autres LLM</mark>, soit il continue à être alimenté par des données hiérarchisées par des scrutins alimentés par des personnes qui, elles-mêmes, sont exposées à des contenus produits par un LLM.&nbsp;Quel impact cela pourrait-il avoir sur la qualité des&nbsp;contenus&#8239;&#8239;?</p>
  233. <p><cite><em><a href="https://boris.schapira.dev/notes/2023-02-des-questions/">Des questions · Boris Schapira</a></em>&nbsp;(<a href="/david/cache/2023/482252d2b8806e99bc30ffab2b2c51c9/">cache</a>)</cite></p>
  234. </blockquote>
  235. <blockquote lang="en">
  236. <p>🚜 Today’s cloud services have the look and feel of that tractor. They’re conceived by infrastructure people who care about efficient computation, fast networking, and cheap storage. The comfort and convenience of the developers who need to drive these services to build end-user facing applications has been an&nbsp;afterthought.</p>
  237. <p>Both the tractor and the cloud service of the past made sense: <mark>The majority of people who made the purchasing decisions didn’t operate them</mark>, and those who did had little influence. Why bother making them nice to&nbsp;operate?</p>
  238. <p><cite><em><a href="https://pydantic.dev/announcement/">Company Announcement | Pydantic</a></em>&nbsp;(<a href="/david/cache/2023/0f8bbba127c48a13b35fdf265c2dc106/">cache</a>)</cite></p>
  239. </blockquote>
  240. <blockquote lang="en">
  241. <p>🤸 It comes down to this annoying, upsetting, stupid fact: <mark>the only way to build a great product is to use it every day, to stare at it, to hold it in your hands to feel its lumps.</mark> The data and customers will lie to you but the product never will. And most product orgs suck because they simply don’t use the products that they’re building; they ship incremental nothings without direction because they’re looking at spreadsheets all day long filled with junk data&nbsp;nothings.</p>
  242. <p><cite><em><a href="https://www.robinrendle.com/notes/vibe-driven-development/">Vibe Driven Development</a></em>&nbsp;(<a href="/david/cache/2023/660b2a27b116787ac44e536e6c9dbcd3/">cache</a>)</cite></p>
  243. </blockquote>
  244. <blockquote lang="en">
  245. <p>🧑‍⚖️ Traditional open source is based on the flawed premise that technology is fundamentally neutral, and that unrestricted access to source code— even for explicitly “evil” purposes— is in fact an unqualified good. But around the world, open source developers are starting to realize that the software that they create, with its tremendous potential to change the world for the better, is also being abused to sustain and promote systems of inequity and injustice, globally, and at unprecedented&nbsp;scale.</p>
  246. <p>The Hippocratic License 3.0 (HL3) aims <mark>to confront the potential harms and abuses technology can have</mark> on fundamental human rights. It empowers open source communities to establish a clear set of ethical standards that licensees must abide by in order to adopt their&nbsp;code.</p>
  247. <p><cite><em><a href="https://firstdonoharm.dev/">The Hippocratic License</a></em>&nbsp;(<a href="/david/cache/2023/e44bfaaecad989f67cb2032fac000276/">cache</a>)</cite></p>
  248. </blockquote>
  249. <blockquote lang="en">
  250. <p>😮 I am all for radical criticism, especially targeted at billion-dollar tech corporations and powerful project leaders who <a href="https://fediverse.zachleat.com/@zachleat/109830047951867907">try to silence critics</a>. We need <mark>to hold them accountable</mark> for tech that produces harmful, subpar web experiences. They deserve their decent share of “told you&nbsp;so”.</p>
  251. <p><cite><em><a href="https://molily.de/update-on-robust-javascript/">An update on Robust Client-Side JavaScript</a></em>&nbsp;(<a href="/david/cache/2023/9718ae2062146285e1c4f406240e04af/">cache</a>)</cite></p>
  252. </blockquote>
  253. <blockquote lang="en">
  254. <p>🤗 As we build stuff, we make trade-off decisions like this all the time. If I have a point, it’s that we should consider these tradeoffs <mark>with our most junior teammates in mind;</mark> how much complexity are we adding for them? Is it worth&nbsp;it?</p>
  255. <p><cite><em><a href="https://www.joshwcomeau.com/career/clever-code-considered-harmful/">Clever Code Considered Harmful</a></em>&nbsp;(<a href="/david/cache/2023/a09b5bf450d2cf86fb9e9d6f13b070e0/">cache</a>)</cite></p>
  256. </blockquote>
  257. </details>
  258. </main>
  259. <hr>
  260. <footer>
  261. <p>
  262. <nobr>
  263. <a href="/david/" title="Aller à l’accueil">
  264. <svg class="icon icon-home">
  265. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
  266. </svg>
  267. Accueil</a>
  268. </nobr>
  269. <nobr>
  270. <a href="/david/log/" title="Accès au flux RSS">
  271. <svg class="icon icon-rss2">
  272. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  273. </svg>
  274. Suivre</a>
  275. </nobr>
  276. <nobr>
  277. <a href="http://larlet.com"
  278. title="Go to my English profile"
  279. data-instant>
  280. <svg class="icon icon-user-tie">
  281. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  282. </svg>
  283. Pro</a>
  284. </nobr>
  285. <nobr>
  286. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">
  287. <svg class="icon icon-mail">
  288. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  289. </svg>
  290. Email</a>
  291. </nobr>
  292. <nobr>
  293. <abbr class="nowrap"
  294. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">
  295. <svg class="icon icon-hammer2">
  296. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  297. </svg>
  298. Légal</abbr>
  299. </nobr>
  300. </p>
  301. <template id="theme-selector">
  302. <form>
  303. <fieldset>
  304. <legend>
  305. <svg class="icon icon-brightness-contrast">
  306. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  307. </svg>
  308. Thème
  309. </legend>
  310. <label>
  311. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  312. Auto
  313. </label>
  314. <label>
  315. <input type="radio" value="dark" name="chosen-color-scheme">
  316. Foncé
  317. </label>
  318. <label>
  319. <input type="radio" value="light" name="chosen-color-scheme">
  320. Clair
  321. </label>
  322. </fieldset>
  323. </form>
  324. </template>
  325. </footer>
  326. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  327. <script>
  328. function loadThemeForm(templateName) {
  329. const themeSelectorTemplate = document.querySelector(templateName)
  330. const form = themeSelectorTemplate.content.firstElementChild
  331. themeSelectorTemplate.replaceWith(form)
  332. form.addEventListener('change', (e) => {
  333. const chosenColorScheme = e.target.value
  334. localStorage.setItem('theme', chosenColorScheme)
  335. toggleTheme(chosenColorScheme)
  336. })
  337. const selectedTheme = localStorage.getItem('theme')
  338. if (selectedTheme && selectedTheme !== 'undefined') {
  339. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  340. }
  341. }
  342. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  343. window.addEventListener('load', () => {
  344. let hasDarkRules = false
  345. for (const styleSheet of Array.from(document.styleSheets)) {
  346. let mediaRules = []
  347. for (const cssRule of styleSheet.cssRules) {
  348. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  349. continue
  350. }
  351. // WARNING: Safari does not have/supports `conditionText`.
  352. if (cssRule.conditionText) {
  353. if (cssRule.conditionText !== prefersColorSchemeDark) {
  354. continue
  355. }
  356. } else {
  357. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  358. continue
  359. }
  360. }
  361. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  362. }
  363. // WARNING: do not try to insert a Rule to a styleSheet you are
  364. // currently iterating on, otherwise the browser will be stuck
  365. // in a infinite loop…
  366. for (const mediaRule of mediaRules) {
  367. styleSheet.insertRule(mediaRule.cssText)
  368. hasDarkRules = true
  369. }
  370. }
  371. if (hasDarkRules) {
  372. loadThemeForm('#theme-selector')
  373. }
  374. })
  375. </script>
  376. </body>
  377. </html>