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 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  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. Échelle
  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="We have been obsessed with this scalability as the single differentiating factor that will tell us how well something will adapt to the changing requirements of an organization and increasing, diverse technical demand. But for businesses, scaling means that output remains the same or only slightly degrades while production costs lower.">
  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. <style type="text/css">
  106. .tippy-content {
  107. min-width: 280px;
  108. padding: .5rem;
  109. font-size: calc(var(--fluid-0) * 0.8);
  110. font-family: var(--labor-font);
  111. letter-spacing: initial;
  112. text-align: left;
  113. }
  114. .tippy-content h3 {
  115. margin-top: 0;
  116. }
  117. .tippy-content h3 img {
  118. max-width: 2rem;
  119. max-height: 2rem;
  120. display: inline-block;
  121. }
  122. .tippy-content .tippy-links {
  123. display: flex;
  124. justify-content: space-around;
  125. }
  126. .tippy-content a {
  127. padding: .4rem;
  128. color: #F06048;
  129. }
  130. </style>
  131. <body data-instant-intensity="viewport-all">
  132. <article>
  133. <header>
  134. <hgroup>
  135. <h1>Échelle</h1>
  136. <p>Le <time datetime="2024-04-17">17 avril 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/04/14/"
  143. title="Publication précédente : Apex 2">← Précédent</a> •
  144. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  145. <a href="/david/recherche/"
  146. title="Aller à la page de recherche"
  147. rel="search" data-no-instant>Recherche</a>
  148. • <a rel="next"
  149. href="/david/2024/04/18/"
  150. title="Publication suivante : Calme">Suivant →</a>
  151. </p>
  152. </nav>
  153. <blockquote lang="en">
  154. <p>We have been obsessed with this scalability as the single differentiating factor that will tell us how well something will adapt to the changing requirements of an organization and increasing, diverse technical demand. But for businesses, scaling means that output remains the same or only slightly degrades while production costs&nbsp;lower.</p>
  155. <p><mark>Scalability has become the leading differentiator, the Leitdifferenz, of almost everything in our industry.</mark> From the tech we develop with, for, and on to what, how, and who we design for It’s almost like a trance that we keep repeating to ourselves.“But will it scale?” is first and foremost a matter of business. But in development and design, it also refers to other factors. Yet when it comes to matters of industrialization, these factors remain&nbsp;secondary.</p>
  156. <p><cite><em><a data-link-domain="helloyes.dev" href="https://helloyes.dev/blog/2023/craft-vs-industry/" hreflang="en"
  157. title="Consultation de l’article (anglais)">Craft vs Industry: Separating Concerns</a>
  158. <a href="/david/cache/2024/f000099cbb33176d35e7aeccdab687b3/" hreflang="en"
  159. data-tippy data-description="We have long referred to our niche of the web as the web industry but never has the term been more congruent than it is right now. I believe this throws us into some conflicts, that we are left deal with alone."
  160. data-source="https://helloyes.dev/blog/2023/craft-vs-industry/"
  161. data-date="2024-04-17"
  162. data-favicon="https://helloyes.dev/assets/favicons/illusion/icon.svg"
  163. data-domain="helloyes.dev"
  164. ><svg xmlns="http://www.w3.org/2000/svg"
  165. width="24" height="24" viewBox="0 0 24 24" fill="none"
  166. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  167. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  168. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  169. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  170. </svg>
  171. <span class="sr-only">[archive]</span></a></em></cite></p>
  172. </blockquote>
  173. <p>C’est la raison pour laquelle je suis de plus en plus attiré par de petits évènements (voir ci-dessous) qui peuvent avoir lieu dans des endroits différents —&nbsp;de manière distribuée&nbsp;— par des communautés qui peuvent y mettre leurs propres échelles pour embarquer de nouvelles&nbsp;personnes.</p>
  174. <a href="#hr-149" title="Lien vers cette section de la page"><hr id="hr-149" /></a>
  175. <blockquote lang="en">
  176. <p>I don’t think we <em>need</em> new metaphors for the things we do with computers. But I like thinking about <mark>creating software as organizing an event.</mark> Here are some reasons why I think <em>event</em> is a better metaphor than <em>product</em>:</p>
  177. <p><cite><em><a data-link-domain="kooslooijesteijn.net" href="https://www.kooslooijesteijn.net/blog/app-website-is-not-product" hreflang="en"
  178. title="Consultation de l’article (anglais)">Your app is not a product</a>
  179. <a href="/david/cache/2024/e8ab525499d79428bb5674609dc486dc/" hreflang="en"
  180. data-tippy data-description="… and neither is your website."
  181. data-source="https://www.kooslooijesteijn.net/blog/app-website-is-not-product"
  182. data-date="2024-04-17"
  183. data-favicon="https://www.kooslooijesteijn.net/favicon/favicon.svg"
  184. data-domain="kooslooijesteijn.net"
  185. ><svg xmlns="http://www.w3.org/2000/svg"
  186. width="24" height="24" viewBox="0 0 24 24" fill="none"
  187. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  188. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  189. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  190. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  191. </svg>
  192. <span class="sr-only">[archive]</span></a></em></cite></p>
  193. </blockquote>
  194. <p>Je ne vais pas énumérer toute la liste ici mais il y a de bonnes choses à aller picorer pour alimenter mes propres réflexions à ce&nbsp;sujet.</p>
  195. <a href="#hr-150" title="Lien vers cette section de la page"><hr id="hr-150" /></a>
  196. <blockquote lang="en">
  197. <p>Ecology knows that shifting baselines dampen collective urgency and deepen generational divides. People who care about internet monoculture and control are often told they’re nostalgists harkening back to a pioneer era. But it’s fiendishly hard to regenerate an open and competitive infrastructure for younger generations who’ve been raised to assume that two or three platforms, two app stores, two operating systems, two browsers, one cloud/mega-store and a single search engine for the world comprise the internet. If <em>the internet</em> for you is the massive sky-scraping silo you happen to live inside and the only thing you can see outside is the single, other massive sky-scraping silo, then <mark>how can you imagine anything&nbsp;else?</mark></p>
  198. <p>[…] For tech giants, the long period of open internet evolution is over. Their internet is not an ecosystem. It’s a&nbsp;zoo.</p>
  199. <p><cite><em><a data-link-domain="noemamag.com" href="https://www.noemamag.com/we-need-to-rewild-the-internet/" hreflang="en"
  200. title="Consultation de l’article (anglais)">We Need To Rewild The Internet</a>
  201. <a href="/david/cache/2024/21f1fc65a0499d19ded2b8d326791fee/" hreflang="en"
  202. data-tippy data-description="The internet has become an extractive and fragile monoculture. But we can revitalize it using lessons learned by ecologists."
  203. data-source="https://www.noemamag.com/we-need-to-rewild-the-internet/"
  204. data-date="2024-04-17"
  205. data-favicon="https://www.noemamag.com/wp-content/uploads/2020/06/cropped-ms-icon-310x310-1-32x32.png"
  206. data-domain="noemamag.com"
  207. ><svg xmlns="http://www.w3.org/2000/svg"
  208. width="24" height="24" viewBox="0 0 24 24" fill="none"
  209. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  210. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  211. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  212. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  213. </svg>
  214. <span class="sr-only">[archive]</span></a></em></cite></p>
  215. </blockquote>
  216. <p>Ce troisième lien est lui aussi une métaphore, combinant <em>forêt</em> et <em>web</em>. Lorsqu’on constate ce qu’il advient de nos forêts, je ne sais pas trop s’il est possible d’être optimiste à ce&nbsp;sujet…</p>
  217. <a href="#hr-151" title="Lien vers cette section de la page"><hr id="hr-151" /></a>
  218. <blockquote>
  219. <p>Nous sommes un groupe d’étudiants dans les métiers du multimédia et de l’Internet. Pourtant nous n’avons pas numérisé. Il y a un an, <mark>nous nous empressions</mark> de faire une solution numérique éco conçue pour répondre à un&nbsp;problème.</p>
  220. <p>Aujourd’hui, avec du recul, des connaissances supplémentaires et une nouvelle vision, nous nous demandons s’il est nécessaire de&nbsp;numériser.</p>
  221. <p><cite><em><a data-link-domain="nousnavonspasnumerise.mmibordeaux.com" href="https://nousnavonspasnumerise.mmibordeaux.com/autopsie/" hreflang="fr"
  222. title="Consultation de l’article">Nous n’avons pas numérisé.</a>
  223. <a href="/david/cache/2024/6fd58c8dcf1738605fb932bb83f4411a/" hreflang="fr"
  224. data-tippy data-description="L’écran captive plus facilement les enfants que le papier"
  225. data-source="https://nousnavonspasnumerise.mmibordeaux.com/autopsie/"
  226. data-date="2024-04-17"
  227. data-favicon="https://nousnavonspasnumerise.mmibordeaux.com/assets/images/favicons/favicon.png"
  228. data-domain="nousnavonspasnumerise.mmibordeaux.com"
  229. ><svg xmlns="http://www.w3.org/2000/svg"
  230. width="24" height="24" viewBox="0 0 24 24" fill="none"
  231. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  232. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  233. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  234. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  235. </svg>
  236. <span class="sr-only">[archive]</span></a></em></cite></p>
  237. </blockquote>
  238. <p>Un peu d’espoir tout de&nbsp;même.</p>
  239. <nav>
  240. <p>
  241. <a href="/david/2024/commun/"
  242. title="Liste de tous les articles 2024 associés à cette étiquette"
  243. rel="tag">#commun</a>
  244. <a href="/david/2024/decentralisation/"
  245. title="Liste de tous les articles 2024 associés à cette étiquette"
  246. rel="tag">#décentralisation</a>
  247. <a href="/david/2024/protopie/"
  248. title="Liste de tous les articles 2024 associés à cette étiquette"
  249. rel="tag">#protopie</a>
  250. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  251. </p>
  252. </nav>
  253. <nav>
  254. <p>
  255. <a rel="prev"
  256. href="/david/2024/04/14/"
  257. title="Publication précédente : Apex 2">← Précédent</a> •
  258. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  259. • <a rel="next"
  260. href="/david/2024/04/18/"
  261. title="Publication suivante : Calme">Suivant →</a>
  262. </p>
  263. </nav>
  264. <form action="/david/recherche/" method="get">
  265. <fieldset>
  266. <legend>Recherche</legend>
  267. <label for="input-search">Termes de votre recherche :</label>
  268. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  269. <input type="submit" value="Chercher">
  270. <p id="indexation-infos">
  271. <small>
  272. Seuls les contenus de ces 8 dernières années sont indexés.
  273. </small>
  274. </p>
  275. </fieldset>
  276. </form>
  277. <aside>
  278. <theme-toggle></theme-toggle>
  279. </aside>
  280. </article>
  281. <hr>
  282. <footer>
  283. <p>
  284. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  285. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  286. <a href="http://larlet.com"
  287. title="Go to my English profile"
  288. data-instant>Pro</a>
  289. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  290. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  291. </p>
  292. <template id="theme-selector">
  293. <form>
  294. <style type="text/css">
  295. fieldset div {
  296. text-align: center;
  297. }
  298. </style>
  299. <fieldset>
  300. <legend>Thème</legend>
  301. <div>
  302. <label>
  303. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  304. Auto
  305. </label>
  306. <label>
  307. <input type="radio" value="dark" name="chosen-color-scheme">
  308. Foncé
  309. </label>
  310. <label>
  311. <input type="radio" value="light" name="chosen-color-scheme">
  312. Clair
  313. </label>
  314. </div>
  315. </fieldset>
  316. </form>
  317. </template>
  318. </footer>
  319. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  320. <script>
  321. class ThemeToggle extends HTMLElement {
  322. constructor() {
  323. super()
  324. const themeSelectorTemplate = document.querySelector('#theme-selector')
  325. const form = themeSelectorTemplate.content.firstElementChild
  326. this.attachShadow({ mode: 'open' })
  327. this.shadowRoot.appendChild(form.cloneNode(true))
  328. }
  329. connectedCallback() {
  330. const form = this.shadowRoot.querySelector('form')
  331. form.addEventListener('change', (e) => {
  332. const chosenColorScheme = e.target.value
  333. localStorage.setItem('theme', chosenColorScheme)
  334. toggleTheme(chosenColorScheme)
  335. })
  336. const selectedTheme = localStorage.getItem('theme')
  337. if (selectedTheme && selectedTheme !== 'undefined') {
  338. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  339. }
  340. }
  341. }
  342. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  343. window.addEventListener('load', () => {
  344. let colorsLayer = undefined
  345. let hasDarkRules = false
  346. for (const styleSheet of Array.from(document.styleSheets)) {
  347. let mediaRules = []
  348. for (const layerRule of styleSheet.cssRules) {
  349. if (!(layerRule instanceof CSSLayerBlockRule)) {
  350. continue
  351. }
  352. if (layerRule.name === 'colors') {
  353. colorsLayer = layerRule
  354. }
  355. for (const cssRule of layerRule.cssRules) {
  356. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  357. continue
  358. }
  359. // WARNING: Safari does not have/supports `conditionText`.
  360. if (cssRule.conditionText) {
  361. if (cssRule.conditionText !== prefersColorSchemeDark) {
  362. continue
  363. }
  364. } else {
  365. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  366. continue
  367. }
  368. }
  369. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  370. }
  371. }
  372. // WARNING: do not try to insert a Rule to a styleSheet you are
  373. // currently iterating on, otherwise the browser will be stuck
  374. // in a infinite loop…
  375. for (const mediaRule of mediaRules) {
  376. // Safari requires the `0` second parameter (even if default).
  377. colorsLayer.insertRule(mediaRule.cssText, 0)
  378. hasDarkRules = true
  379. }
  380. }
  381. if (hasDarkRules) {
  382. if ('customElements' in window && !customElements.get('theme-toggle')) {
  383. customElements.define('theme-toggle', ThemeToggle)
  384. }
  385. }
  386. })
  387. </script>
  388. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  389. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  390. <script>
  391. tippy('[data-tippy]', {
  392. content(reference) {
  393. reference.addEventListener('click', (e) => e.preventDefault())
  394. return `
  395. <h3 lang="fr">
  396. <img src="${reference.dataset.favicon}" loading="lazy">
  397. <a href="${reference.dataset.source}"
  398. >Article sur ${reference.dataset.domain}</a></h3>
  399. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  400. <div class="tippy-links" lang="fr">
  401. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  402. </div>
  403. `
  404. },
  405. allowHTML: true,
  406. interactive: true,
  407. delay: [150, 700],
  408. hideOnClick: false
  409. })
  410. </script>
  411. <script type="module">
  412. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  413. const markObserver = new IntersectionObserver((entries, observer) => {
  414. const computedStyle = getComputedStyle(document.documentElement)
  415. const markBackground = computedStyle.getPropertyValue('--mark-background')
  416. for (const entry of entries) {
  417. if (entry.intersectionRatio === 0) continue
  418. const markElement = entry.target
  419. markElement.style.backgroundColor = 'inherit'
  420. const annotation = annotate(
  421. markElement, {
  422. type: 'highlight',
  423. multiline: true,
  424. color: markBackground,
  425. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  426. animate: false
  427. }
  428. )
  429. annotation.show()
  430. observer.unobserve(markElement)
  431. }
  432. }, {threshold: 1.0})
  433. for (const markElement of document.querySelectorAll('mark')) {
  434. markObserver.observe(markElement)
  435. }
  436. </script>
  437. </body>
  438. </html>