A place to cache linked articles (think custom and personal wayback machine)
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

index.html 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="en">
  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>File over app - Steph Ango (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="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Is that even respected? Retrospectively? What a shAItshow…
  28. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  29. <meta name="robots" content="noai, noimageai">
  30. <!-- Documented, feel free to shoot an email. -->
  31. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  32. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  33. <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>
  34. <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>
  35. <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>
  36. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  37. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  38. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  39. <script>
  40. function toggleTheme(themeName) {
  41. document.documentElement.classList.toggle(
  42. 'forced-dark',
  43. themeName === 'dark'
  44. )
  45. document.documentElement.classList.toggle(
  46. 'forced-light',
  47. themeName === 'light'
  48. )
  49. }
  50. const selectedTheme = localStorage.getItem('theme')
  51. if (selectedTheme !== 'undefined') {
  52. toggleTheme(selectedTheme)
  53. }
  54. </script>
  55. <meta name="robots" content="noindex, nofollow">
  56. <meta content="origin-when-cross-origin" name="referrer">
  57. <!-- Canonical URL for SEO purposes -->
  58. <link rel="canonical" href="https://stephango.com/file-over-app">
  59. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  60. <article>
  61. <header>
  62. <h1>File over app - Steph Ango</h1>
  63. </header>
  64. <nav>
  65. <p class="center">
  66. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  67. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  68. </svg> Accueil</a> •
  69. <a href="https://stephango.com/file-over-app" title="Lien vers le contenu original">Source originale</a>
  70. <br>
  71. Mis en cache le 2024-02-18
  72. </p>
  73. </nav>
  74. <hr>
  75. <p><em>File over app</em> is a philosophy: if you want to create digital artifacts that last, they must be files you can control, in formats that are easy to retrieve and read. Use tools that give you this freedom.</p>
  76. <p><em>File over app</em> is an appeal to tool makers: accept that all software is ephemeral, and give people ownership over their data.</p>
  77. <hr>
  78. <p>In the fullness of time, the files you create are more important than the tools you use to create them. Apps are ephemeral, but your files have a chance to last.</p>
  79. <p>The ancient temples of Egypt contain hieroglyphs that were chiseled in stone thousands of years ago. The ideas hieroglyphs convey are more important than the type of chisel that was used to carve them.</p>
  80. <p>The world is filled with ideas from generations past, transmitted through many mediums, from clay tablets to manuscripts, paintings, sculptures, and tapestries. These artifacts are objects that you can touch, hold, own, store, preserve, and look at. To read something written on paper all you need is eyeballs.</p>
  81. <p>Today, we are creating innumerable digital artifacts, but most of these artifacts are out of our control. They are stored on servers, in databases, gated behind an internet connection, and login to a cloud service. Even the files on your hard drive use proprietary formats that make them incompatible with older systems and other tools.</p>
  82. <p>Paraphrasing something <a href="https://obsidian.md/blog/new-obsidian-icon/" target="_blank" rel="noopener noreferrer">I wrote recently</a></p>
  83. <blockquote>
  84. <p>If you want your writing to still be readable on a computer from the 2060s or 2160s, it’s important that your notes can be read on a computer from the 1960s.</p>
  85. </blockquote>
  86. <p>You should want the files you create to be durable, not only for posterity, but also for your future self. You never know when you might want to go back to something you created years or decades ago. Don’t lock your data into a format you can’t retrieve.</p>
  87. <p>These days I write using an app I help make called <a class="internal-link" href="/obsidian">Obsidian</a>, but it’s a delusion to think it will last forever. The app will eventually become obsolete. It’s the plain text files I create that are designed to last. Who knows if anyone will want to read them besides me, but <em>future me</em> is enough of an audience to make it worthwhile.</p>
  88. </article>
  89. <hr>
  90. <footer>
  91. <p>
  92. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  93. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  94. </svg> Accueil</a> •
  95. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  96. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  97. </svg> Suivre</a> •
  98. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  99. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  100. </svg> Pro</a> •
  101. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  102. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  103. </svg> Email</a> •
  104. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  105. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  106. </svg> Légal</abbr>
  107. </p>
  108. <template id="theme-selector">
  109. <form>
  110. <fieldset>
  111. <legend><svg class="icon icon-brightness-contrast">
  112. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  113. </svg> Thème</legend>
  114. <label>
  115. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  116. </label>
  117. <label>
  118. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  119. </label>
  120. <label>
  121. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  122. </label>
  123. </fieldset>
  124. </form>
  125. </template>
  126. </footer>
  127. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  128. <script>
  129. function loadThemeForm(templateName) {
  130. const themeSelectorTemplate = document.querySelector(templateName)
  131. const form = themeSelectorTemplate.content.firstElementChild
  132. themeSelectorTemplate.replaceWith(form)
  133. form.addEventListener('change', (e) => {
  134. const chosenColorScheme = e.target.value
  135. localStorage.setItem('theme', chosenColorScheme)
  136. toggleTheme(chosenColorScheme)
  137. })
  138. const selectedTheme = localStorage.getItem('theme')
  139. if (selectedTheme && selectedTheme !== 'undefined') {
  140. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  141. }
  142. }
  143. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  144. window.addEventListener('load', () => {
  145. let hasDarkRules = false
  146. for (const styleSheet of Array.from(document.styleSheets)) {
  147. let mediaRules = []
  148. for (const cssRule of styleSheet.cssRules) {
  149. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  150. continue
  151. }
  152. // WARNING: Safari does not have/supports `conditionText`.
  153. if (cssRule.conditionText) {
  154. if (cssRule.conditionText !== prefersColorSchemeDark) {
  155. continue
  156. }
  157. } else {
  158. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  159. continue
  160. }
  161. }
  162. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  163. }
  164. // WARNING: do not try to insert a Rule to a styleSheet you are
  165. // currently iterating on, otherwise the browser will be stuck
  166. // in a infinite loop…
  167. for (const mediaRule of mediaRules) {
  168. styleSheet.insertRule(mediaRule.cssText)
  169. hasDarkRules = true
  170. }
  171. }
  172. if (hasDarkRules) {
  173. loadThemeForm('#theme-selector')
  174. }
  175. })
  176. </script>
  177. </body>
  178. </html>