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

index.html 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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. Éco-conception
  14. — David Larlet</title>
  15. <meta name="description" content="De mon temps on disait pas « écoconception » on disait juste « appliquer les prérequis basiques du métier de dev » et on n’était pas plus malheureux.">
  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. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick"
  106. data-instant-intensity="viewport-all">
  107. <article>
  108. <header>
  109. <h1>Éco-conception</h1>
  110. </header>
  111. <nav>
  112. <p class="center">
  113. <a rel="prev"
  114. href="/david/2023/09/13/"
  115. title="Publication précédente : Documentation">← Précédent</a> •
  116. <nobr>
  117. <a href="/david/" title="Aller à l’accueil" rel="up">
  118. <svg class="icon icon-home">
  119. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
  120. </svg>
  121. Accueil</a>
  122. </nobr>
  123. <nobr>
  124. <a href="/david/recherche/"
  125. title="Aller à la page de recherche"
  126. rel="search">
  127. <svg class="icon icon-search">
  128. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search"></use>
  129. </svg>
  130. Recherche</a>
  131. </nobr>
  132. • <a rel="next"
  133. href="/david/2023/09/27/"
  134. title="Publication suivante : Perspective">Suivant →</a>
  135. </p>
  136. </nav>
  137. <hr>
  138. <blockquote>
  139. <p>De mon temps on disait pas «&nbsp;écoconception&nbsp;» on disait juste «&nbsp;appliquer les prérequis basiques du métier de dev&nbsp;» et on n’était pas plus&nbsp;malheureux.</p>
  140. <p>S’il vous faut une formation pour vous empêcher d’afficher 10&#8239;Mo d’images sur votre homepage et d’empiler 50&nbsp;frameworks JS pour faire un formulaire, <mark>c’est peut-être que votre titre initial de «&nbsp;dev full stack senior&nbsp;» était légèrement usurpé.</mark> Et si l’interopérabilité, la rétrocompatibilité, l’amélioration progressive, l’accessibilité et les perfs sont pour vous de nouvelles compétences tendance à faire valoir sur un CV, je suis navré de vous annoncer que vous étiez jusque ici un&nbsp;escroc.</p>
  141. <p><cite><a href="https://mastodon.social/@STPo/111101966708210843">STPo sur&nbsp;mastodon</a></cite></p>
  142. </blockquote>
  143. <p>Ce n’est pas vraiment un secret que je fasse partie de la team vieux-rageux-qui-lève-ses-poings-vers-le-ciel (et surtout les yeux&nbsp;🙄) lorsqu’on parle de technique et de web. Le pire étant que plus le temps passe et plus j’ai le sentiment que cette profession se crée sa propre utilité. Il faudrait que je lise <em>Bullshit Jobs</em> pour être certain de ne pas dire n’importe quoi mais je crois bien que ça s’en rapproche de plus en plus. Ou alors j’en prends davantage&nbsp;conscience.</p>
  144. <p>Et ça m’embête autant que de jardiner dans mon petit potager bio tout en vivant au milieu d’une zone commerciale géante bariolée de publicités et traversée par des <abbr title="sport utility vehicle">SUV</abbr> et autres <em>pickups</em>. Toute ressemblance avec ma dissonance cognitive actuelle serait bien évidemment&nbsp;fortuite.</p>
  145. <p>En ce moment, à 15h50, j’écoute les enfants à la fenêtre préparer la chanson de l’année où <a href="https://www.lafabriqueculturelle.tv/capsules/14586/le-grand-rendez-vous-de-fanny-bloom-et-l-osm-une-chanson-a-l-ecole-les-journees-de-la-culture">Fanny Bloom leur demande de planter des arbres</a> alors qu’il y a une file de voitures de plus de 2&nbsp;tonnes qui attendent la sortie de leurs chers bambins. Tout ça pour s’éviter de faire quelques centaines de mètres à&nbsp;pied.</p>
  146. <p>Je crois que c’est ça l’éco-conception sur le web&nbsp;: réduire la taille d’une image afin de réduire son empreinte carbone tout en ayant demandé à un <abbr title="Large Language Model">LLM</abbr> de l’avoir&nbsp;générée.</p>
  147. <hr />
  148. <blockquote lang="en">
  149. <p>🎯 However, despite recognizing the danger of an increasingly closed internet, many web developers don’t consider their own technical decisions and how those decisions can also contribute to the disappearance of web’s <em>culture</em> of&nbsp;openness.</p>
  150. <p>Inadvertently (for the most part) technical trends and decisions in web development in <mark>the last two decades have lead to what we term a “Technical Enclosure” of the web,</mark> a processes whereby technical decisions chip away at the #ViewSource affordance that Cory Doctorow discusses in the opening quote of this article, an affordance that existed as a commons for early web&nbsp;developers.</p>
  151. <p><cite><em><a href="https://htmx.org/essays/right-click-view-source/">The #ViewSource Affordance</a></em>&nbsp;(<a href="/david/cache/2023/2782723c95c98a22087e9954b07a8fba/">cache</a>)</cite></p>
  152. </blockquote>
  153. <blockquote lang="en">
  154. <p>🤗 I hate what data is doing to the web. I hate that some people get obsessed with data. I hate that the entire advertising and marketing world has evolved to only care about data. But I realize that this will not change. Still, <mark>I like to do my part</mark> which is why I try hard to not collect and keep any data about&nbsp;you.</p>
  155. <p><cite><em><a href="https://manuelmoreale.com/i-don-t-want-your-data">I don’t want your data</a></em>&nbsp;(<a href="/david/cache/2023/73f0ab0b4336be702e863205bd1bbace/">cache</a>)</cite></p>
  156. </blockquote>
  157. <blockquote lang="en">
  158. <p>🧑‍⚕️ We in software, sadly, tend to be in the treatments business, not in the patients business. <mark>We’re Big Pharma.</mark> And in the same way that Big Pharma invests massively in persuading us that we have the illness their potion cures, we have a tendency to try to get the customer’s problem to fit our solution. And so it is that “productivity” tends to be about the potion, and not the&nbsp;patient.</p>
  159. <p><cite><em><a href="https://codemanship.wordpress.com/2023/09/25/the-illusion-of-developer-productivity-opens-the-door-to-snake-oil/">The Illusion Of Developer “Productivity” Opens The Door To Snake Oil</a></em>&nbsp;(<a href="/david/cache/2023/d048e59b323783f6de3b03bda43a02cc/">cache</a>)</cite></p>
  160. </blockquote>
  161. <blockquote>
  162. <p>💜 Quand il laisse couler l’eau dans la casserole pour préparer un café, il pense aux instants qui continuent de glisser entre ses doigts et dont il a peur que l’oubli n’efface les derniers sourires jusqu’à ne plus reconnaître la personne sur la photo. Où bien est-ce la photo d’un ancêtre dont les cendres sont peut-être encore sur le coin d’une étagère dans la maison et dont on se dit que les minutes longues en nettoyant la vaisselle permettent la sérénité possible à l’évasion d’une enfance&nbsp;heureuse&#8239;?</p>
  163. <p><cite><em><a href="https://www.la-grange.net/2023/03/15/envers">endroit de l’envers</a></em>&nbsp;(<a href="/david/cache/2023/19a9d6fbfc9b17021f013e71ffb45593/">cache</a>)</cite></p>
  164. </blockquote>
  165. <nav>
  166. <p>
  167. <a href="/david/2023/nostalgie/"
  168. title="Liste de tous les articles 2023 associés à cette étiquette"
  169. rel="tag">#nostalgie</a>
  170. <a href="/david/2023/qualite/"
  171. title="Liste de tous les articles 2023 associés à cette étiquette"
  172. rel="tag">#qualité</a>
  173. <a href="/david/2023/web/"
  174. title="Liste de tous les articles 2023 associés à cette étiquette"
  175. rel="tag">#web</a>
  176. <a href="/david/#tags-2023" title="Liste de toutes les étiquettes 2023">
  177. <svg class="icon icon-tags">
  178. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-tags"></use>
  179. </svg>
  180. tous ?</a>
  181. </p>
  182. </nav>
  183. <nav>
  184. <p class="center">
  185. <a rel="prev"
  186. href="/david/2023/09/13/"
  187. title="Publication précédente : Documentation">← Précédent</a> •
  188. <a href="/david/2023/" title="Liste des publications récentes">↑ En 2023</a>
  189. • <a rel="next"
  190. href="/david/2023/09/27/"
  191. title="Publication suivante : Perspective">Suivant →</a>
  192. </p>
  193. </nav>
  194. </article>
  195. <hr>
  196. <footer>
  197. <p>
  198. <nobr>
  199. <a href="/david/" title="Aller à l’accueil">
  200. <svg class="icon icon-home">
  201. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
  202. </svg>
  203. Accueil</a>
  204. </nobr>
  205. <nobr>
  206. <a href="/david/log/" title="Accès au flux RSS">
  207. <svg class="icon icon-rss2">
  208. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  209. </svg>
  210. Suivre</a>
  211. </nobr>
  212. <nobr>
  213. <a href="http://larlet.com"
  214. title="Go to my English profile"
  215. data-instant>
  216. <svg class="icon icon-user-tie">
  217. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  218. </svg>
  219. Pro</a>
  220. </nobr>
  221. <nobr>
  222. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">
  223. <svg class="icon icon-mail">
  224. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  225. </svg>
  226. Email</a>
  227. </nobr>
  228. <nobr>
  229. <abbr class="nowrap"
  230. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">
  231. <svg class="icon icon-hammer2">
  232. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  233. </svg>
  234. Légal</abbr>
  235. </nobr>
  236. </p>
  237. <template id="theme-selector">
  238. <form>
  239. <fieldset>
  240. <legend>
  241. <svg class="icon icon-brightness-contrast">
  242. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  243. </svg>
  244. Thème
  245. </legend>
  246. <label>
  247. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  248. Auto
  249. </label>
  250. <label>
  251. <input type="radio" value="dark" name="chosen-color-scheme">
  252. Foncé
  253. </label>
  254. <label>
  255. <input type="radio" value="light" name="chosen-color-scheme">
  256. Clair
  257. </label>
  258. </fieldset>
  259. </form>
  260. </template>
  261. </footer>
  262. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  263. <script>
  264. function loadThemeForm(templateName) {
  265. const themeSelectorTemplate = document.querySelector(templateName)
  266. const form = themeSelectorTemplate.content.firstElementChild
  267. themeSelectorTemplate.replaceWith(form)
  268. form.addEventListener('change', (e) => {
  269. const chosenColorScheme = e.target.value
  270. localStorage.setItem('theme', chosenColorScheme)
  271. toggleTheme(chosenColorScheme)
  272. })
  273. const selectedTheme = localStorage.getItem('theme')
  274. if (selectedTheme && selectedTheme !== 'undefined') {
  275. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  276. }
  277. }
  278. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  279. window.addEventListener('load', () => {
  280. let hasDarkRules = false
  281. for (const styleSheet of Array.from(document.styleSheets)) {
  282. let mediaRules = []
  283. for (const cssRule of styleSheet.cssRules) {
  284. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  285. continue
  286. }
  287. // WARNING: Safari does not have/supports `conditionText`.
  288. if (cssRule.conditionText) {
  289. if (cssRule.conditionText !== prefersColorSchemeDark) {
  290. continue
  291. }
  292. } else {
  293. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  294. continue
  295. }
  296. }
  297. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  298. }
  299. // WARNING: do not try to insert a Rule to a styleSheet you are
  300. // currently iterating on, otherwise the browser will be stuck
  301. // in a infinite loop…
  302. for (const mediaRule of mediaRules) {
  303. styleSheet.insertRule(mediaRule.cssText)
  304. hasDarkRules = true
  305. }
  306. }
  307. if (hasDarkRules) {
  308. loadThemeForm('#theme-selector')
  309. }
  310. })
  311. </script>
  312. </body>
  313. </html>