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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  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. Vision
  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="But if you were to try just one thing using Vision Pro — just one thing — it has to be watching a movie in the TV app, in theater mode. Try that, and no matter how skeptical you were beforehand about the Vision Pro’s price tag, your hand will start inching toward your wallet.">
  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>Vision</h1>
  136. <p>Le <time datetime="2024-02-01">1 février 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/01/31/"
  143. title="Publication précédente : Mécénat">← 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/02/02/"
  150. title="Publication suivante : Valeurs">Suivant →</a>
  151. </p>
  152. </nav>
  153. <blockquote lang="en">
  154. <p>But if you were to try just one thing using Vision Pro — just one thing — it has to be <mark>watching a movie</mark> in the TV app, in theater mode. Try that, and no matter how skeptical you were beforehand about the Vision Pro’s price tag, your hand will start inching toward your&nbsp;wallet.</p>
  155. <p><cite><em><a data-link-domain="daringfireball.net" href="https://daringfireball.net/2024/01/the_vision_pro" hreflang="en"
  156. title="Consultation de l’article (anglais)">Daring Fireball: The Vision Pro</a>
  157. <a href="/david/cache/2024/cd9184008ba5d9e4c9be4d0a0eea4f60/" hreflang="en"
  158. data-tippy data-description="A headset, a spatial productivity platform, and a personal entertainment device."
  159. data-source="https://daringfireball.net/2024/01/the_vision_pro"
  160. data-date="2024-01-31"
  161. data-favicon="https://daringfireball.net/graphics/favicon.ico?v=005"
  162. data-domain="daringfireball.net"
  163. ><svg xmlns="http://www.w3.org/2000/svg"
  164. width="24" height="24" viewBox="0 0 24 24" fill="none"
  165. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  166. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  167. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  168. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  169. </svg>
  170. <span class="sr-only">[archive]</span></a></em></cite></p>
  171. </blockquote>
  172. <p>Ce jouet est bien trop cher… et c’est une bonne chose. D’une certaine manière, c’est la seule innovation de 2023&nbsp;qui ne comporte pas IA dans le premier écran marketing, c’est déjà pas mal. Je n’ai pas la naïveté de penser que la version 2&nbsp;ne nous amènera pas vers le <em>SpatIAl Computing</em> pour autant, restons&nbsp;sérieux.</p>
  173. <p>Je peux imaginer des des <a data-link-domain="theinfiniteexperience.world" href="https://theinfiniteexperience.world">expériences immersives</a> dans des endroits dédiés, de la location comme on pouvait louer un DVD il y a des années, des salles dédiées en bibliothèques (ambiance dystopie cyberpunk assurée), à un moment il pourrait même y avoir un espace pour ça (payant&#8239;?) dans les <em>Apple Store</em>. Si le son est aussi bon que ce que peut décrire <em>Daring Fanboy</em>, j’aurais vraiment envie de me retrouver au milieu d’un concert, d’avoir le choix entre plusieurs points de vues et&nbsp;acoustiques.</p>
  174. <p>Le côté immersif aurait aussi sa place en terme d’apprentissage / transmission. Être au premier rang d’une conférence ou d’un cours pourrait permettre de redéfinir son attention&nbsp;(?) et sachant que la dernière version de l’iPhone permet de capter de telles vidéos, c’est peut-être un moyen de faire entrer quelqu’un dans son salon ce qui produirait un autre type&nbsp;d’intimité.</p>
  175. <p>En parlant de captation et d’intimité, avec les <em>deepfakes</em> il devient possible de se retrouver dans un salon mais dans une autre tenue. Toute prise de vidéo devient une menace potentielle. Impossible de ne pas penser à des objets connectés / synchronisés autour de la&nbsp;pornographie…</p>
  176. <a href="#hr-59" title="Lien vers cette section de la page"><hr id="hr-59" /></a>
  177. <blockquote lang="en">
  178. <p>The “i” in iPhone stands for “inequality”. […]</p>
  179. <p><mark>iPhone owners live in a different world</mark> than high-end Android buyers, and light-years away what the bulk of the market experiences. No matter how you slice it, the performance inequality gap is growing for CPU-bound workloads like JavaScript-heavy web&nbsp;apps.</p>
  180. <p><cite><em><a data-link-domain="infrequently.org" href="https://infrequently.org/2024/01/performance-inequality-gap-2024/" hreflang="en"
  181. title="Consultation de l’article (anglais)">The Performance Inequality Gap, 2024</a>
  182. <a href="/david/cache/2024/0676c7ccf1ab2b380641866789366d26/" hreflang="en"
  183. data-tippy data-description="How much HTML, CSS, and JavaScript can we afford? More than in years past, but much less than frontend developers are burdening users with."
  184. data-source="https://infrequently.org/2024/01/performance-inequality-gap-2024/"
  185. data-date="2024-01-31"
  186. data-favicon="https://infrequently.org/assets/images/favicons/ino-dark-opt-192x192.png"
  187. data-domain="infrequently.org"
  188. ><svg xmlns="http://www.w3.org/2000/svg"
  189. width="24" height="24" viewBox="0 0 24 24" fill="none"
  190. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  191. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  192. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  193. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  194. </svg>
  195. <span class="sr-only">[archive]</span></a></em></cite></p>
  196. </blockquote>
  197. <p>Ce rapport me rappelle que la notion d’accessibilité est très vaste. Et je suis mal placé pour donner des leçons en vous faisant charger 5&nbsp;polices de caractères pour vous afficher une page… je n’ai pas encore travaillé les performances du thème de l’année et c’est une&nbsp;erreur.</p>
  198. <blockquote lang="en">
  199. <p>We got to a place where performance has been a constant problem in large part because a tribe of programmers convinced themselves that it <em>wasn’t</em> and <em>wouldn’t be</em>. […]</p>
  200. <p>But tribalism-boosted confirmation bias mixed with JavaScript’s toxic positivity culture to precipitate out a Silicon Prosperity Gospel; all resources would go infinite if you just <em>believed</em>. […]</p>
  201. <p>The solutions are social, not technical, because <mark>the delusions are social,</mark> rather than&nbsp;technical.</p>
  202. <p><cite><em>Ibid.</em></cite></p>
  203. </blockquote>
  204. <p>Ça&nbsp;pique.</p>
  205. <a href="#hr-60" title="Lien vers cette section de la page"><hr id="hr-60" /></a>
  206. <blockquote lang="en">
  207. <p>Rather, the biggest benefits I see are <em>collective</em>, cutting across the industry as a whole. I think web components can make the entire web more accessible. They have the potential to unify currently fragmented communities, including various JavaScript frameworks <em>and</em> <mark>those who avoid them</mark>.</p>
  208. <p>[…] Web components won’t take web development by storm, or show us the One True Way to build websites. They don’t need to dethrone JavaScript frameworks. We probably won’t even all learn how to write&nbsp;them!</p>
  209. <p><cite><em><a data-link-domain="jakelazaroff.com" href="https://jakelazaroff.com/words/the-web-component-success-story/" hreflang="en"
  210. title="Consultation de l’article (anglais)">The Web Component Success Story</a>
  211. <a href="/david/cache/2024/f4d2d42eba58062be910407690ae447c/" hreflang="en"
  212. data-tippy data-description="Web components won't take web development by storm, or show us the One True Way to build websites. What they will do is let us collectively build a rich ecosystem of dynamic components that work with any web stack."
  213. data-source="https://jakelazaroff.com/words/the-web-component-success-story/"
  214. data-date="2024-01-31"
  215. data-favicon="https://jakelazaroff.com/favicon.ico"
  216. data-domain="jakelazaroff.com"
  217. ><svg xmlns="http://www.w3.org/2000/svg"
  218. width="24" height="24" viewBox="0 0 24 24" fill="none"
  219. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  220. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  221. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  222. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  223. </svg>
  224. <span class="sr-only">[archive]</span></a></em></cite></p>
  225. </blockquote>
  226. <p>Très bon article et la boite de prévisualisation au survol de chaque lien ressemble beaucoup à ce que j’avais l’intention de faire pour régler mes soucis d’accès à la version archivée tout en affichant le domaine. Actuellement chaque lien devient trop long et hache le texte lorsque ça n’est pas en pied de citation (et encore). Il faut que je creuse comment cela est fait, via un <em>web component</em> réutilisable&nbsp;j’imagine&nbsp;:-).</p>
  227. <p>PS&nbsp;: si vous minifiez votre JavaScript, les <a data-link-domain="MDN" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/SourceMap">SourceMap</a> sont un moyen de partager votre expérience. Sinon l’aspect <q lang="en">collective</q> est beaucoup moins&nbsp;pertinent.</p>
  228. <nav>
  229. <p>
  230. <a href="/david/2024/accessibilite/"
  231. title="Liste de tous les articles 2024 associés à cette étiquette"
  232. rel="tag">#accessibilité</a>
  233. <a href="/david/2024/dystopie/"
  234. title="Liste de tous les articles 2024 associés à cette étiquette"
  235. rel="tag">#dystopie</a>
  236. <a href="/david/2024/evolution/"
  237. title="Liste de tous les articles 2024 associés à cette étiquette"
  238. rel="tag">#évolution</a>
  239. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  240. </p>
  241. </nav>
  242. <nav>
  243. <p>
  244. <a rel="prev"
  245. href="/david/2024/01/31/"
  246. title="Publication précédente : Mécénat">← Précédent</a> •
  247. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  248. • <a rel="next"
  249. href="/david/2024/02/02/"
  250. title="Publication suivante : Valeurs">Suivant →</a>
  251. </p>
  252. </nav>
  253. <form action="/david/recherche/" method="get">
  254. <fieldset>
  255. <legend>Recherche</legend>
  256. <label for="input-search">Termes de votre recherche :</label>
  257. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  258. <input type="submit" value="Chercher">
  259. <p id="indexation-infos">
  260. <small>
  261. Seuls les contenus de ces 8 dernières années sont indexés.
  262. </small>
  263. </p>
  264. </fieldset>
  265. </form>
  266. <aside>
  267. <theme-toggle></theme-toggle>
  268. </aside>
  269. </article>
  270. <hr>
  271. <footer>
  272. <p>
  273. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  274. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  275. <a href="http://larlet.com"
  276. title="Go to my English profile"
  277. data-instant>Pro</a>
  278. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  279. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  280. </p>
  281. <template id="theme-selector">
  282. <form>
  283. <style type="text/css">
  284. fieldset div {
  285. text-align: center;
  286. }
  287. </style>
  288. <fieldset>
  289. <legend>Thème</legend>
  290. <div>
  291. <label>
  292. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  293. Auto
  294. </label>
  295. <label>
  296. <input type="radio" value="dark" name="chosen-color-scheme">
  297. Foncé
  298. </label>
  299. <label>
  300. <input type="radio" value="light" name="chosen-color-scheme">
  301. Clair
  302. </label>
  303. </div>
  304. </fieldset>
  305. </form>
  306. </template>
  307. </footer>
  308. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  309. <script>
  310. class ThemeToggle extends HTMLElement {
  311. constructor() {
  312. super()
  313. const themeSelectorTemplate = document.querySelector('#theme-selector')
  314. const form = themeSelectorTemplate.content.firstElementChild
  315. this.attachShadow({ mode: 'open' })
  316. this.shadowRoot.appendChild(form.cloneNode(true))
  317. }
  318. connectedCallback() {
  319. const form = this.shadowRoot.querySelector('form')
  320. form.addEventListener('change', (e) => {
  321. const chosenColorScheme = e.target.value
  322. localStorage.setItem('theme', chosenColorScheme)
  323. toggleTheme(chosenColorScheme)
  324. })
  325. const selectedTheme = localStorage.getItem('theme')
  326. if (selectedTheme && selectedTheme !== 'undefined') {
  327. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  328. }
  329. }
  330. }
  331. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  332. window.addEventListener('load', () => {
  333. let colorsLayer = undefined
  334. let hasDarkRules = false
  335. for (const styleSheet of Array.from(document.styleSheets)) {
  336. let mediaRules = []
  337. for (const layerRule of styleSheet.cssRules) {
  338. if (!(layerRule instanceof CSSLayerBlockRule)) {
  339. continue
  340. }
  341. if (layerRule.name === 'colors') {
  342. colorsLayer = layerRule
  343. }
  344. for (const cssRule of layerRule.cssRules) {
  345. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  346. continue
  347. }
  348. // WARNING: Safari does not have/supports `conditionText`.
  349. if (cssRule.conditionText) {
  350. if (cssRule.conditionText !== prefersColorSchemeDark) {
  351. continue
  352. }
  353. } else {
  354. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  355. continue
  356. }
  357. }
  358. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  359. }
  360. }
  361. // WARNING: do not try to insert a Rule to a styleSheet you are
  362. // currently iterating on, otherwise the browser will be stuck
  363. // in a infinite loop…
  364. for (const mediaRule of mediaRules) {
  365. // Safari requires the `0` second parameter (even if default).
  366. colorsLayer.insertRule(mediaRule.cssText, 0)
  367. hasDarkRules = true
  368. }
  369. }
  370. if (hasDarkRules) {
  371. if ('customElements' in window && !customElements.get('theme-toggle')) {
  372. customElements.define('theme-toggle', ThemeToggle)
  373. }
  374. }
  375. })
  376. </script>
  377. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  378. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  379. <script>
  380. tippy('[data-tippy]', {
  381. content(reference) {
  382. reference.addEventListener('click', (e) => e.preventDefault())
  383. return `
  384. <h3 lang="fr">
  385. <img src="${reference.dataset.favicon}" loading="lazy">
  386. <a href="${reference.dataset.source}"
  387. >Article sur ${reference.dataset.domain}</a></h3>
  388. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  389. <div class="tippy-links" lang="fr">
  390. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  391. </div>
  392. `
  393. },
  394. allowHTML: true,
  395. interactive: true,
  396. delay: [150, 700],
  397. hideOnClick: false
  398. })
  399. </script>
  400. <script type="module">
  401. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  402. const markObserver = new IntersectionObserver((entries, observer) => {
  403. const computedStyle = getComputedStyle(document.documentElement)
  404. const markBackground = computedStyle.getPropertyValue('--mark-background')
  405. for (const entry of entries) {
  406. if (entry.intersectionRatio === 0) continue
  407. const markElement = entry.target
  408. const annotation = annotate(
  409. markElement, {
  410. type: 'highlight',
  411. multiline: true,
  412. color: markBackground,
  413. animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  414. }
  415. )
  416. annotation.show()
  417. observer.unobserve(markElement)
  418. }
  419. }, {threshold: 1.0})
  420. for (const markElement of document.querySelectorAll('mark')) {
  421. markElement.style.backgroundColor = 'inherit'
  422. markObserver.observe(markElement)
  423. }
  424. </script>
  425. </body>
  426. </html>