A place to cache linked articles (think custom and personal wayback machine)
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

10 个月前
9 个月前
10 个月前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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>Make the indie web easier (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://gilest.org/indie-easy.html">
  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>Make the indie web easier</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://gilest.org/indie-easy.html" title="Lien vers le contenu original">Source originale</a>
  70. <br>
  71. Mis en cache le 2024-01-09
  72. </p>
  73. </nav>
  74. <hr>
  75. <p><img src="https://gilest.org/2024/dangerously-muddy.jpg" alt="A sign in a forest: DANGER, TRACK DANGEROUSLY MUDDY, DO NOT ENTER"></p>
  76. <p>OK, developers, I have a challenge for you.</p>
  77. <p>I’ll assume that we’re all on board with the 2024 indie web revival. We all want things to <a href="https://www.rollingstone.com/culture/culture-commentary/internet-future-about-to-get-weird-1234938403/">get weird again</a>, right? Yeah.</p>
  78. <p>And, I’ll assume we all agree that owning your own website is a <em>good thing</em>, and we all want more people to do it. </p>
  79. <p>But here’s the thing: we need more tools for it. We need simpler tools for it. And we need to make installing and using them <em>trivially simple</em>. </p>
  80. <p>We need more self-hosted platforms for personal publishing that <em>aren’t Wordpress</em>. And don’t point me to Hugo or Netlify or Eleventy or all those things - all of them are great, but none of them are simple enough. We need web publishing tools that do not require users to open the Terminal <em>at all</em>. And we need lots of them. </p>
  81. <p>We need a whole <em>galaxy</em> of options. </p>
  82. <p>So that next time we say to someone: “You should own your own domain, and publish on your own website,” and they answer with “How?”, we can give an answer that’s more than just: “Install Wordpress.”</p>
  83. <p>It’s not that I hate Wordpress. I don’t <em>use</em> it, personally, but I don’t hate it. I can see the benefits of using it. It’s a great tool. </p>
  84. <p>But it needs more competition. People coming fresh to web publishing should have more options.</p>
  85. <p>If we want the future web we’re all clamouring for, we need to give people more options for self-hosted independence. If we seriously, truly want the independent, non-enshittified personal web to flourish, we need to make it <strong>easier for people to join in</strong>. </p>
  86. <p>Why not build static website generators that people can just unzip, upload to the shared hosting they’ve just paid for, and start using via a browser?</p>
  87. <p>Why not make backups automatic, and make upgrades simple? Why not make the tricky technical stuff go away?</p>
  88. <p>Terminal commands are easy for <em>you</em>, but they’re a huge hurdle for most people to overcome. I’ve lost count of the number of times I’ve seen a link to a static website generator, which claims to be simple, and then the instructions start with something like: </p>
  89. <blockquote>
  90. <p>It’s easy! Just <tt>gem install blah</tt><br>then <tt>blah setup mywebsite</tt><br>then <tt>cd mywebsite</tt><br>then use <tt>nano</tt> or your favourite editor to write Markdown files! So easy!</p>
  91. </blockquote>
  92. <p>This is not easy.</p>
  93. <p>If we <em>truly</em> want to open up the web for everyone to publish on, we have to make it easier. Let’s give people choices. Let’s give people options for tools they can set up and use, with no more knowledge than the knowledge they already have.</p>
  94. </article>
  95. <hr>
  96. <footer>
  97. <p>
  98. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  99. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  100. </svg> Accueil</a> •
  101. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  102. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  103. </svg> Suivre</a> •
  104. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  105. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  106. </svg> Pro</a> •
  107. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  108. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  109. </svg> Email</a> •
  110. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  111. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  112. </svg> Légal</abbr>
  113. </p>
  114. <template id="theme-selector">
  115. <form>
  116. <fieldset>
  117. <legend><svg class="icon icon-brightness-contrast">
  118. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  119. </svg> Thème</legend>
  120. <label>
  121. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  122. </label>
  123. <label>
  124. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  125. </label>
  126. <label>
  127. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  128. </label>
  129. </fieldset>
  130. </form>
  131. </template>
  132. </footer>
  133. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  134. <script>
  135. function loadThemeForm(templateName) {
  136. const themeSelectorTemplate = document.querySelector(templateName)
  137. const form = themeSelectorTemplate.content.firstElementChild
  138. themeSelectorTemplate.replaceWith(form)
  139. form.addEventListener('change', (e) => {
  140. const chosenColorScheme = e.target.value
  141. localStorage.setItem('theme', chosenColorScheme)
  142. toggleTheme(chosenColorScheme)
  143. })
  144. const selectedTheme = localStorage.getItem('theme')
  145. if (selectedTheme && selectedTheme !== 'undefined') {
  146. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  147. }
  148. }
  149. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  150. window.addEventListener('load', () => {
  151. let hasDarkRules = false
  152. for (const styleSheet of Array.from(document.styleSheets)) {
  153. let mediaRules = []
  154. for (const cssRule of styleSheet.cssRules) {
  155. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  156. continue
  157. }
  158. // WARNING: Safari does not have/supports `conditionText`.
  159. if (cssRule.conditionText) {
  160. if (cssRule.conditionText !== prefersColorSchemeDark) {
  161. continue
  162. }
  163. } else {
  164. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  165. continue
  166. }
  167. }
  168. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  169. }
  170. // WARNING: do not try to insert a Rule to a styleSheet you are
  171. // currently iterating on, otherwise the browser will be stuck
  172. // in a infinite loop…
  173. for (const mediaRule of mediaRules) {
  174. styleSheet.insertRule(mediaRule.cssText)
  175. hasDarkRules = true
  176. }
  177. }
  178. if (hasDarkRules) {
  179. loadThemeForm('#theme-selector')
  180. }
  181. })
  182. </script>
  183. </body>
  184. </html>