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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  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. </p>
  149. </nav>
  150. <blockquote lang="en">
  151. <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>
  152. <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>
  153. <p><cite><em><a data-link-domain="helloyes.dev" href="https://helloyes.dev/blog/2023/craft-vs-industry/" hreflang="en"
  154. title="Consultation de l’article (anglais)">Craft vs Industry: Separating Concerns</a>
  155. <a href="/david/cache/2024/f000099cbb33176d35e7aeccdab687b3/" hreflang="en"
  156. 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."
  157. data-source="https://helloyes.dev/blog/2023/craft-vs-industry/"
  158. data-date="2024-04-17"
  159. data-favicon="https://helloyes.dev/assets/favicons/illusion/icon.svg"
  160. data-domain="helloyes.dev"
  161. ><svg xmlns="http://www.w3.org/2000/svg"
  162. width="24" height="24" viewBox="0 0 24 24" fill="none"
  163. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  164. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  165. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  166. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  167. </svg>
  168. <span class="sr-only">[archive]</span></a></em></cite></p>
  169. </blockquote>
  170. <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>
  171. <a href="#hr-149" title="Lien vers cette section de la page"><hr id="hr-149" /></a>
  172. <blockquote lang="en">
  173. <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>
  174. <p><cite><em><a data-link-domain="kooslooijesteijn.net" href="https://www.kooslooijesteijn.net/blog/app-website-is-not-product" hreflang="en"
  175. title="Consultation de l’article (anglais)">Your app is not a product</a>
  176. <a href="/david/cache/2024/e8ab525499d79428bb5674609dc486dc/" hreflang="en"
  177. data-tippy data-description="… and neither is your website."
  178. data-source="https://www.kooslooijesteijn.net/blog/app-website-is-not-product"
  179. data-date="2024-04-17"
  180. data-favicon="https://www.kooslooijesteijn.net/favicon/favicon.svg"
  181. data-domain="kooslooijesteijn.net"
  182. ><svg xmlns="http://www.w3.org/2000/svg"
  183. width="24" height="24" viewBox="0 0 24 24" fill="none"
  184. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  185. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  186. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  187. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  188. </svg>
  189. <span class="sr-only">[archive]</span></a></em></cite></p>
  190. </blockquote>
  191. <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>
  192. <a href="#hr-150" title="Lien vers cette section de la page"><hr id="hr-150" /></a>
  193. <blockquote lang="en">
  194. <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>
  195. <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>
  196. <p><cite><em><a data-link-domain="noemamag.com" href="https://www.noemamag.com/we-need-to-rewild-the-internet/" hreflang="en"
  197. title="Consultation de l’article (anglais)">We Need To Rewild The Internet</a>
  198. <a href="/david/cache/2024/21f1fc65a0499d19ded2b8d326791fee/" hreflang="en"
  199. data-tippy data-description="The internet has become an extractive and fragile monoculture. But we can revitalize it using lessons learned by ecologists."
  200. data-source="https://www.noemamag.com/we-need-to-rewild-the-internet/"
  201. data-date="2024-04-17"
  202. data-favicon="https://www.noemamag.com/wp-content/uploads/2020/06/cropped-ms-icon-310x310-1-32x32.png"
  203. data-domain="noemamag.com"
  204. ><svg xmlns="http://www.w3.org/2000/svg"
  205. width="24" height="24" viewBox="0 0 24 24" fill="none"
  206. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  207. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  208. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  209. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  210. </svg>
  211. <span class="sr-only">[archive]</span></a></em></cite></p>
  212. </blockquote>
  213. <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>
  214. <a href="#hr-151" title="Lien vers cette section de la page"><hr id="hr-151" /></a>
  215. <blockquote>
  216. <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>
  217. <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>
  218. <p><cite><em><a data-link-domain="nousnavonspasnumerise.mmibordeaux.com" href="https://nousnavonspasnumerise.mmibordeaux.com/autopsie/" hreflang="fr"
  219. title="Consultation de l’article">Nous n’avons pas numérisé.</a>
  220. <a href="/david/cache/2024/6fd58c8dcf1738605fb932bb83f4411a/" hreflang="fr"
  221. data-tippy data-description="L’écran captive plus facilement les enfants que le papier"
  222. data-source="https://nousnavonspasnumerise.mmibordeaux.com/autopsie/"
  223. data-date="2024-04-17"
  224. data-favicon="https://nousnavonspasnumerise.mmibordeaux.com/assets/images/favicons/favicon.png"
  225. data-domain="nousnavonspasnumerise.mmibordeaux.com"
  226. ><svg xmlns="http://www.w3.org/2000/svg"
  227. width="24" height="24" viewBox="0 0 24 24" fill="none"
  228. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  229. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  230. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  231. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  232. </svg>
  233. <span class="sr-only">[archive]</span></a></em></cite></p>
  234. </blockquote>
  235. <p>Un peu d’espoir tout de&nbsp;même.</p>
  236. <nav>
  237. <p>
  238. <a href="/david/2024/commun/"
  239. title="Liste de tous les articles 2024 associés à cette étiquette"
  240. rel="tag">#commun</a>
  241. <a href="/david/2024/decentralisation/"
  242. title="Liste de tous les articles 2024 associés à cette étiquette"
  243. rel="tag">#décentralisation</a>
  244. <a href="/david/2024/protopie/"
  245. title="Liste de tous les articles 2024 associés à cette étiquette"
  246. rel="tag">#protopie</a>
  247. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  248. </p>
  249. </nav>
  250. <nav>
  251. <p>
  252. <a rel="prev"
  253. href="/david/2024/04/14/"
  254. title="Publication précédente : Apex 2">← Précédent</a> •
  255. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  256. </p>
  257. </nav>
  258. <form action="/david/recherche/" method="get">
  259. <fieldset>
  260. <legend>Recherche</legend>
  261. <label for="input-search">Termes de votre recherche :</label>
  262. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  263. <input type="submit" value="Chercher">
  264. <p id="indexation-infos">
  265. <small>
  266. Seuls les contenus de ces 8 dernières années sont indexés.
  267. </small>
  268. </p>
  269. </fieldset>
  270. </form>
  271. <aside>
  272. <theme-toggle></theme-toggle>
  273. </aside>
  274. </article>
  275. <hr>
  276. <footer>
  277. <p>
  278. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  279. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  280. <a href="http://larlet.com"
  281. title="Go to my English profile"
  282. data-instant>Pro</a>
  283. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  284. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  285. </p>
  286. <template id="theme-selector">
  287. <form>
  288. <style type="text/css">
  289. fieldset div {
  290. text-align: center;
  291. }
  292. </style>
  293. <fieldset>
  294. <legend>Thème</legend>
  295. <div>
  296. <label>
  297. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  298. Auto
  299. </label>
  300. <label>
  301. <input type="radio" value="dark" name="chosen-color-scheme">
  302. Foncé
  303. </label>
  304. <label>
  305. <input type="radio" value="light" name="chosen-color-scheme">
  306. Clair
  307. </label>
  308. </div>
  309. </fieldset>
  310. </form>
  311. </template>
  312. </footer>
  313. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  314. <script>
  315. class ThemeToggle extends HTMLElement {
  316. constructor() {
  317. super()
  318. const themeSelectorTemplate = document.querySelector('#theme-selector')
  319. const form = themeSelectorTemplate.content.firstElementChild
  320. this.attachShadow({ mode: 'open' })
  321. this.shadowRoot.appendChild(form.cloneNode(true))
  322. }
  323. connectedCallback() {
  324. const form = this.shadowRoot.querySelector('form')
  325. form.addEventListener('change', (e) => {
  326. const chosenColorScheme = e.target.value
  327. localStorage.setItem('theme', chosenColorScheme)
  328. toggleTheme(chosenColorScheme)
  329. })
  330. const selectedTheme = localStorage.getItem('theme')
  331. if (selectedTheme && selectedTheme !== 'undefined') {
  332. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  333. }
  334. }
  335. }
  336. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  337. window.addEventListener('load', () => {
  338. let colorsLayer = undefined
  339. let hasDarkRules = false
  340. for (const styleSheet of Array.from(document.styleSheets)) {
  341. let mediaRules = []
  342. for (const layerRule of styleSheet.cssRules) {
  343. if (!(layerRule instanceof CSSLayerBlockRule)) {
  344. continue
  345. }
  346. if (layerRule.name === 'colors') {
  347. colorsLayer = layerRule
  348. }
  349. for (const cssRule of layerRule.cssRules) {
  350. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  351. continue
  352. }
  353. // WARNING: Safari does not have/supports `conditionText`.
  354. if (cssRule.conditionText) {
  355. if (cssRule.conditionText !== prefersColorSchemeDark) {
  356. continue
  357. }
  358. } else {
  359. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  360. continue
  361. }
  362. }
  363. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  364. }
  365. }
  366. // WARNING: do not try to insert a Rule to a styleSheet you are
  367. // currently iterating on, otherwise the browser will be stuck
  368. // in a infinite loop…
  369. for (const mediaRule of mediaRules) {
  370. // Safari requires the `0` second parameter (even if default).
  371. colorsLayer.insertRule(mediaRule.cssText, 0)
  372. hasDarkRules = true
  373. }
  374. }
  375. if (hasDarkRules) {
  376. if ('customElements' in window && !customElements.get('theme-toggle')) {
  377. customElements.define('theme-toggle', ThemeToggle)
  378. }
  379. }
  380. })
  381. </script>
  382. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  383. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  384. <script>
  385. tippy('[data-tippy]', {
  386. content(reference) {
  387. reference.addEventListener('click', (e) => e.preventDefault())
  388. return `
  389. <h3 lang="fr">
  390. <img src="${reference.dataset.favicon}" loading="lazy">
  391. <a href="${reference.dataset.source}"
  392. >Article sur ${reference.dataset.domain}</a></h3>
  393. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  394. <div class="tippy-links" lang="fr">
  395. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  396. </div>
  397. `
  398. },
  399. allowHTML: true,
  400. interactive: true,
  401. delay: [150, 700],
  402. hideOnClick: false
  403. })
  404. </script>
  405. <script type="module">
  406. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  407. const markObserver = new IntersectionObserver((entries, observer) => {
  408. const computedStyle = getComputedStyle(document.documentElement)
  409. const markBackground = computedStyle.getPropertyValue('--mark-background')
  410. for (const entry of entries) {
  411. if (entry.intersectionRatio === 0) continue
  412. const markElement = entry.target
  413. markElement.style.backgroundColor = 'inherit'
  414. const annotation = annotate(
  415. markElement, {
  416. type: 'highlight',
  417. multiline: true,
  418. color: markBackground,
  419. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  420. animate: false
  421. }
  422. )
  423. annotation.show()
  424. observer.unobserve(markElement)
  425. }
  426. }, {threshold: 1.0})
  427. for (const markElement of document.querySelectorAll('mark')) {
  428. markObserver.observe(markElement)
  429. }
  430. </script>
  431. </body>
  432. </html>