A place to cache linked articles (think custom and personal wayback machine)
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

index.html 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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>This Page is Designed to Last (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://css-tricks.com/this-page-is-designed-to-last/">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>This Page is Designed to Last</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://css-tricks.com/this-page-is-designed-to-last/" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <main>
  68. <p>Jeff Huang, while going through his collection of bookmarks, sadly finds a lot of old pages gone from the internet. Bit rot. It’s pretty bad. <em>Most</em> of what gets published on the web disappears. Thankfully, the <strong>Internet Archive</strong> gets a lot of it. Jeff has seven things that he thinks will help make a page last.</p>
  69. <p><span id="more-302005"/>
  70. <blockquote class="wp-block-quote"><p>1) Return to vanilla HTML/CSS<br/>2) Don’t minimize that HTML<br/>3) Prefer one page over several<br/>4) End all forms of hotlinking<br/>5) Stick with the 13 web safe fonts +2<br/>6) Obsessively compress your images<br/>7) Eliminate the broken URL risk</p></blockquote>
  71. <p>I don’t take issue with any of that advice in general, but to me, they don’t all feel like things that have much to do with whether a site will last or not. Of them, #4 seems like the biggest deal, and #5 is… strange. (Fonts fall back on the web; what fonts you use should have no bearing on a site’s ability to last.)</p>
  72. <p>I sort of agree with #1 and #2, but not on the surface. Both of them imply a <em>build process</em>. Build processes get old, they stop working, and they become a brick of <a href="https://css-tricks.com/defining-and-dealing-with-technical-debt/">technical debt</a>. I still love them and can’t imagine day-to-day work without them, but they are things that stands in the way of people wanting to deal with an old site. Highly relevant: <a href="https://css-tricks.com/simplicity/">Simplicity</a>, from Bastian Allgeier.</p>
  73. <p>Everything listed is <em>technological</em>. If we’re talking technological advice to keeping a site online for the long haul, I’d say jamstack is the obvious answer. Prerender everything into static files. Rely on no third-party stuff anything, except a host. (Disclosure: Netlify is a current sponsor of this site, but I’m tellin’ ya, toss a simple static site without a complex build process up on Netlify, which has a generous free tier, and that site will absolutely be there for the long haul. )</p>
  74. <p>Don’t diddle with your URLs either. Gosh darn it if I don’t see a lot of 404s because someone up and changed up all their URLs. </p>
  75. <p>But I feel there is something <strong>beyond the technological</strong> that is the real trick to a site that lasts: <em>you need to have some stake in the game</em>. You don’t let your URLs die because you don’t <em>want</em> them to. They matter to you. You’ll tend to them if you have to. They benefit you in some way, so you’re incentivized to keep them around. That’s what makes a page last.</p></p>
  76. </main>
  77. </article>
  78. <hr>
  79. <footer>
  80. <p>
  81. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  82. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  83. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  84. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  85. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  86. </p>
  87. <template id="theme-selector">
  88. <form>
  89. <fieldset>
  90. <legend>Thème</legend>
  91. <label>
  92. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  93. </label>
  94. <label>
  95. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  96. </label>
  97. <label>
  98. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  99. </label>
  100. </fieldset>
  101. </form>
  102. </template>
  103. </footer>
  104. <script type="text/javascript">
  105. function loadThemeForm(templateName) {
  106. const themeSelectorTemplate = document.querySelector(templateName)
  107. const form = themeSelectorTemplate.content.firstElementChild
  108. themeSelectorTemplate.replaceWith(form)
  109. form.addEventListener('change', (e) => {
  110. const chosenColorScheme = e.target.value
  111. localStorage.setItem('theme', chosenColorScheme)
  112. toggleTheme(chosenColorScheme)
  113. })
  114. const selectedTheme = localStorage.getItem('theme')
  115. if (selectedTheme && selectedTheme !== 'undefined') {
  116. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  117. }
  118. }
  119. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  120. window.addEventListener('load', () => {
  121. let hasDarkRules = false
  122. for (const styleSheet of Array.from(document.styleSheets)) {
  123. let mediaRules = []
  124. for (const cssRule of styleSheet.cssRules) {
  125. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  126. continue
  127. }
  128. // WARNING: Safari does not have/supports `conditionText`.
  129. if (cssRule.conditionText) {
  130. if (cssRule.conditionText !== prefersColorSchemeDark) {
  131. continue
  132. }
  133. } else {
  134. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  135. continue
  136. }
  137. }
  138. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  139. }
  140. // WARNING: do not try to insert a Rule to a styleSheet you are
  141. // currently iterating on, otherwise the browser will be stuck
  142. // in a infinite loop…
  143. for (const mediaRule of mediaRules) {
  144. styleSheet.insertRule(mediaRule.cssText)
  145. hasDarkRules = true
  146. }
  147. }
  148. if (hasDarkRules) {
  149. loadThemeForm('#theme-selector')
  150. }
  151. })
  152. </script>
  153. </body>
  154. </html>