A place to cache linked articles (think custom and personal wayback machine)
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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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>
  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>Je suis un vieux con (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f0f0ea">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f0f0ea">
  26. <!-- Documented, feel free to shoot an email. -->
  27. <link rel="stylesheet" href="/static/david/css/style_2020-06-19.css">
  28. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  29. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <script type="text/javascript">
  36. function toggleTheme(themeName) {
  37. document.documentElement.classList.toggle(
  38. 'forced-dark',
  39. themeName === 'dark'
  40. )
  41. document.documentElement.classList.toggle(
  42. 'forced-light',
  43. themeName === 'light'
  44. )
  45. }
  46. const selectedTheme = localStorage.getItem('theme')
  47. if (selectedTheme !== 'undefined') {
  48. toggleTheme(selectedTheme)
  49. }
  50. </script>
  51. <meta name="robots" content="noindex, nofollow">
  52. <meta content="origin-when-cross-origin" name="referrer">
  53. <!-- Canonical URL for SEO purposes -->
  54. <link rel="canonical" href="https://nota-bene.org/Je-suis-un-vieux-con">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>Je suis un vieux con</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://nota-bene.org/Je-suis-un-vieux-con" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <main>
  68. <p>Souvent, entre vieux de la vieille d’Openweb, on se dit que c’était mieux avant. Et puis, à l’ombre de nos marronniers, sur notre petit banc, il y a toujours quelqu’un pour dire que non, c’est normal, c’est la nostalgie, ça, les gars et les filles. Le monde change et c’est la vie.</p>
  69. <p>Alors voilà, je suis sans doute un vieux con, mais moi j’aime bien arriver sur une page web, un truc qui est construit avec du <abbr title="Hypertext Markup Language">HTML</abbr>, et lire la page, dans laquelle se trouve un contenu qui est construit avec du <abbr title="Hypertext Markup Language">HTML</abbr>, brique fondamentale du Web.</p>
  70. <p>Mais, a priori, Google s’en fout comme de son premier million de dollars, des vieux cons comme moi qui espèrent naïvement lire une page web en cliquant sur une URL. On peut crever la gueule ouverte, on n’a qu’à continuer à faire notre petit web perso tout pourri avec nos petits CMS tout pourris, hein. On dérange personne, et en particulier ceux qui se goinfrent de fric avec les données personnelles de leurs visiteurs.</p>
  71. <h2>Une page vide</h2>
  72. <p>Voilà ce qui m’agace, cet après-midi. Je vais visiter un article du blog Chromium<span class="spip_note_ref"> [<a href="#nb1" class="spip_note" rel="appendix" title="Chromium, c’est un navigateur, qui sert de base à pas mal de monde dans notre (...)" id="nh1">1</a>]</span>, et là j’ai une page vide.</p>
  73. <figure>
  74. <span class="spip_document_622 spip_documents">
  75. <img src="local/cache-vignettes/L1200xH654/chromium_blog_with_css-c3bd4.png?1602005568" alt=""/></span>
  76. <figcaption>La page du blog Chromium, toute vide malgré ma bonne volonté de vouloir la lire.</figcaption>
  77. </figure>
  78. <p>Ah flûte, me dis-je, voilà que ma vile paranoïa qui m’a conditionné à toujours installer sur mon Firefox <a href="https://addons.mozilla.org/fr/firefox/addon/ublock-origin/" class="spip_out" rel="external">uBlock Origin</a> et <a href="https://addons.mozilla.org/fr/firefox/addon/privacy-badger17/" class="spip_out" rel="external">Privacy Badger</a> me joue des tours. Ciel, me dis-je encore, ce blog doit être codé avec les pieds et attendre que tel ou tel script soit chargé, au lieu de faire du beau développement asynchrone comme savent le faire les bons développeurs web que j’ai la chance de compter parmi mes copains.</p>
  79. <p>Je lance donc une session privée de Firefox, j’y colle l’URL, je désactive uBlock Origin et Privacy Badger. Tu vois comme j’ai envie de lire ton article, hein.</p>
  80. <p>Et là toujours rien.</p>
  81. <p>Ah oui, j’ai aussi les « <a href="https://support.mozilla.org/fr/kb/protection-renforcee-contre-pistage-firefox-ordinateur" class="spip_out" rel="external">Protections renforcées contre le pistage</a> ». <strong>C’est une fonction native de Firefox, il va falloir commencer à y penser quand tu fais tes tests.</strong> Alors je les désactive aussi, après avoir regardé quels domaines tiers ont été sollicités.</p>
  82. <figure>
  83. <span class="spip_document_621 spip_documents">
  84. <img src="local/cache-vignettes/L561xH409/chromium_blog_third_parties_blocked-1c6bb.png?1602005568" alt=""/></span>
  85. <figcaption>Liste des domaines tiers bloqués automatiquement par Firefox, et merci à lui.</figcaption>
  86. </figure>
  87. <p>Bon, je désactive aussi la protection renforcée. Comme vous le voyez ci-dessus, le domaine que j’essaie d’afficher est <i>blog.chromium.org</i> et il n’est pas bloqué par Firefox (sans quoi je ne verrais pas la page du tout).</p>
  88. <p>Alors oui, ah là, le contenu s’affiche. Chic alors.</p>
  89. <p>Je décide de revenir à ma configuration de base, et d’afficher le contenu sans <abbr title="Cascading Stylesheets">CSS</abbr> : parfois il y a juste un script tout pourri pour frimer avec un petit indicateur de chargement, le temps qu’on agrège des trucs et des machins, mais quand on désactive les <abbr title="Cascading Stylesheets">CSS</abbr> on voit que le contenu est déjà là.</p>
  90. <p>Ici non, rien. Buvons le calice du Web moderne jusqu’à la lie.</p>
  91. <figure>
  92. <span class="spip_document_623 spip_documents">
  93. <img src="local/cache-vignettes/L208xH1200/chromium_blog_with_no_css-5d6ca.png?1602005568" alt=""/></span>
  94. <figcaption>Aperçu en petit de la page sans aucun style activé. Même en écarquillant les yeux, aucun contenu, juste des items de navigation.</figcaption>
  95. </figure>
  96. <p>Bref, en résumé :</p>
  97. <ul class="spip"><li> ce site ne peut pas s’afficher si on bloque les services tiers ;</li><li> ce site <strong>ne comporte même pas de contenu</strong> si on bloque les services tiers ;</li><li> ce site affiche quand même le logo Google parce que bon.</li></ul>
  98. <h2>Gymnastique du Web moderne</h2>
  99. <p>Donc si, de nos jours, on veut lire un article sur ce blog, il faut soit accepter de se balader à poil et d’offrir ses données privées à plein de gens (voir ci-dessus), soit passer par une gymnastique amusante, par exemple :</p>
  100. <ol class="spip"><li> ouvrir l’article,</li><li> constater que oulàlà c’est tout vide,</li><li> ajouter l’article à <a href="https://www.wallabag.it/fr" class="spip_out" rel="external">wallabag</a> (ou autre lecteur hors ligne peut-être, je n’ai que celui-là à vous conseiller qui me comble d’aise),</li><li> lire l’article dans l’application wallabag.</li></ol>
  101. <p>Dans wallabag j’en profite pour constater que la sémantique <abbr title="Hypertext Markup Language">HTML</abbr> de l’article est bien pauvre, mais bon, on s’en fout hein. La sémantique <abbr title="Hypertext Markup Language">HTML</abbr>, c’est comme l’accessibilité : on se demande bien qui en a besoin.</p>
  102. <p>J’ai pris l’article du blog Chromium parce que c’est une fois de trop, mais si vous saviez le nombre de trucs aussi mal fichus que je vois tous les jours. Disons-le bien fort au cas où ce ne serait pas clair : <strong>une page de blog n’est pas une application Web qui demande une interaction forte.</strong></p>
  103. <p>Alors ouais, je vais continuer à aller lire les petits sites pourris perso des copains, parce que eux, au moins, respectent leurs lecteurs et leurs lectrices.</p>
  104. </main>
  105. </article>
  106. <hr>
  107. <footer>
  108. <p>
  109. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  110. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  111. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  112. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  113. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  114. </p>
  115. <template id="theme-selector">
  116. <form>
  117. <fieldset>
  118. <legend>Thème</legend>
  119. <label>
  120. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  121. </label>
  122. <label>
  123. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  124. </label>
  125. <label>
  126. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  127. </label>
  128. </fieldset>
  129. </form>
  130. </template>
  131. </footer>
  132. <script type="text/javascript">
  133. function loadThemeForm(templateName) {
  134. const themeSelectorTemplate = document.querySelector(templateName)
  135. const form = themeSelectorTemplate.content.firstElementChild
  136. themeSelectorTemplate.replaceWith(form)
  137. form.addEventListener('change', (e) => {
  138. const chosenColorScheme = e.target.value
  139. localStorage.setItem('theme', chosenColorScheme)
  140. toggleTheme(chosenColorScheme)
  141. })
  142. const selectedTheme = localStorage.getItem('theme')
  143. if (selectedTheme && selectedTheme !== 'undefined') {
  144. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  145. }
  146. }
  147. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  148. window.addEventListener('load', () => {
  149. let hasDarkRules = false
  150. for (const styleSheet of Array.from(document.styleSheets)) {
  151. let mediaRules = []
  152. for (const cssRule of styleSheet.cssRules) {
  153. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  154. continue
  155. }
  156. // WARNING: Safari does not have/supports `conditionText`.
  157. if (cssRule.conditionText) {
  158. if (cssRule.conditionText !== prefersColorSchemeDark) {
  159. continue
  160. }
  161. } else {
  162. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  163. continue
  164. }
  165. }
  166. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  167. }
  168. // WARNING: do not try to insert a Rule to a styleSheet you are
  169. // currently iterating on, otherwise the browser will be stuck
  170. // in a infinite loop…
  171. for (const mediaRule of mediaRules) {
  172. styleSheet.insertRule(mediaRule.cssText)
  173. hasDarkRules = true
  174. }
  175. }
  176. if (hasDarkRules) {
  177. loadThemeForm('#theme-selector')
  178. }
  179. })
  180. </script>
  181. </body>
  182. </html>