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

index.html 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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>"Hey, World!" (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_2021-01-20.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>
  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://world.hey.com/jason/hey-world-b02a6f2e">
  55. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>"Hey, World!"</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  63. <use xlink:href="/static/david/icons2/symbol-defs.svg#icon-home"></use>
  64. </svg> Accueil</a> •
  65. <a href="https://world.hey.com/jason/hey-world-b02a6f2e" title="Lien vers le contenu original">Source originale</a>
  66. </p>
  67. </nav>
  68. <hr>
  69. <p>I've never had a personal blog.</p>
  70. <p>It wasn't for lack of things to say, observations to share, or opinions to float.</p>
  71. <p>It was primarily because setting up a personal blog was just too much of a hassle. It felt formal, it required yet another tool, yet another place to write, yet another platform to pay for just one feature. I had to pick a template, I had to think up a name, I had to make the relationship official.</p>
  72. <p>I didn't want any of that. I just wanted to write. It's amazing how complicated it remains — even in 2021 — just to get your simple thoughts down in text, on the web, at a permanent URL, for anyone in the world to see.</p>
  73. <p>Which is why Twitter has primarily been my publishing place of choice. Quick, short, easy. It's outstanding for that. Peerless.</p>
  74. <p>But it comes with increasingly undesirable downsides. Newton's Third Law of Motion states that for every action, there's an equal and opposite reaction. Twitter's First Law of Tweeting states that for every tweet there's an unequal and opposite overreaction. Post something, and hear how you're wrong a dozen different ways. It's exhausting. I want to write, not fight.</p>
  75. <p>But beyond that, I simply want to share more considered, extended essays. Longer-form stuff. Even just a few paragraphs. Tweetstorms are fine — and they have their place — but they're really a hack for a multi-paragraph, complete thought on a single page.</p>
  76. <p>So I was thinking. Where do I write longer-form, single page stuff most often? When my co-workers are the audience, I always write in Basecamp. But when I want to send something detailed to someone else, anywhere else, it goes in an email.</p>
  77. <p>Email is the internet's oldest self-publishing platform. Billions of emails are "published" every day. Everyone knows how to do it, and everyone already can. The only limitation is that you have to define a private audience with everything you send. You've gotta write an email to: someone.</p>
  78. <p>So I thought, why not expand the possibilities here? Of course still let email be email, but what else could email be?</p>
  79. <p>When I write a certain kind of email — aka a blog post — why do I have to address it to someone? Why can't I just address my thoughts to the world? Direct to the web for anyone and everyone? Rather than define the recipients, I just write and let the recipients find me.</p>
  80. <p>Hmm! That might get me — and maybe many more — to (re)discover the joy of simply writing personal thoughts for public consumption. Sometimes you don't have to change the thing itself, but rather just make the thing considerably easier than it's ever been before. That's often the invitation you need to try something new, or jump back in again.</p>
  81. <p>So we set out to do it. To test the theory. And over the last few weeks we built it into HEY, our new email service. We're calling the feature HEY World.</p>
  82. <p>This post you're reading right now is the world's first HEY World post. And I published it by simply emailing this text directly to world@hey.com from my jason@hey.com account. That was it.</p>
  83. <p><action-text-attachment sgid="BAh7CEkiCGdpZAY6BkVUSSI8Z2lkOi8vaGF5c3RhY2svQWN0aXZlU3RvcmFnZTo6QmxvYi8yOTQ2MzA3NDc_ZXhwaXJlc19pbgY7AFRJIgxwdXJwb3NlBjsAVEkiD2F0dGFjaGFibGUGOwBUSSIPZXhwaXJlc19hdAY7AFQw--6920fdcca995a7ea7e494337cf70ced8b91f630f" content-type="image/jpeg" url="https://world.hey.com/jason/b02a6f2e/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCRnUxanhFPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--06f5c982b2cc9187d9387771fa3f099b15f04eaf/screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg" filename="screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg" filesize="472343" previewable="true" presentation="gallery"> <figure class="attachment attachment--preview attachment--lightboxable attachment--jpg">
  84. <a download="screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg" title="Download screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg" data-click-proxy-target="lightbox_link_blob_294630747" href="https://world.hey.com/jason/b02a6f2e/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCRnUxanhFPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--06f5c982b2cc9187d9387771fa3f099b15f04eaf/screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg?disposition=attachment">
  85. <img src="https://world.hey.com/jason/b02a6f2e/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCRnUxanhFPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--06f5c982b2cc9187d9387771fa3f099b15f04eaf/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFLQUIya0NBQVU2REhGMVlXeHBkSGxwU3pvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e2b7e3d9ad63061a4461ddc0db7057b9f1ddfa3e/screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg" alt="screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg" srcset="https://world.hey.com/jason/b02a6f2e/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCRnUxanhFPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--06f5c982b2cc9187d9387771fa3f099b15f04eaf/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFJQUQya0NBQW82REhGMVlXeHBkSGxwUVRvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--a2042af011076e1a343861d7ec0e409c3224e82c/screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg 2x, https://world.hey.com/jason/b02a6f2e/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCRnUxanhFPSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--06f5c982b2cc9187d9387771fa3f099b15f04eaf/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDam9MWm05eWJXRjBTU0lJYW5CbkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFLQUZta0NBQTg2REhGMVlXeHBkSGxwUERvTGJHOWhaR1Z5ZXdZNkNYQmhaMlV3T2cxamIyRnNaWE5qWlZRPSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--1e5be4972192d568a049e436fa48cca61f737ba1/screenshot-of-addressing-email-to-world-at-hey-dotcom.jpg 3x" decoding="async" loading="lazy">
  86. </a>
  87. </figure></action-text-attachment><p>For now, this remains an experiment. I've got my own HEY World blog, and David has his. We're going to play for a while. And, if there's demand, we'll roll this out to anyone with a personal @hey.com account. It feels like Web 1.0 again in all the right ways. And it's about time.</p><p>Speaking of Web 1.0, HEY World pages are lighting fast. No javascript, no tracking, no junk. They're a shoutout to simpler times. Respect.</p><p>As for me, I've been cataloguing a bunch of thoughts lately, waiting for the day where I could share them this easily. Now that publishing is as simple as sending an email, I plan on writing a lot. And, if you'd like to know when I publish something new, just enter your email address below and you'll get some of my favorites sent direct to you.</p><p>Let's see how this turns out. Thanks for reading.</p></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.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.svg#icon-rss2"></use>
  97. </svg> RSS</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.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.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.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.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>
  128. function loadThemeForm(templateName) {
  129. const themeSelectorTemplate = document.querySelector(templateName)
  130. const form = themeSelectorTemplate.content.firstElementChild
  131. themeSelectorTemplate.replaceWith(form)
  132. form.addEventListener('change', (e) => {
  133. const chosenColorScheme = e.target.value
  134. localStorage.setItem('theme', chosenColorScheme)
  135. toggleTheme(chosenColorScheme)
  136. })
  137. const selectedTheme = localStorage.getItem('theme')
  138. if (selectedTheme && selectedTheme !== 'undefined') {
  139. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  140. }
  141. }
  142. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  143. window.addEventListener('load', () => {
  144. let hasDarkRules = false
  145. for (const styleSheet of Array.from(document.styleSheets)) {
  146. let mediaRules = []
  147. for (const cssRule of styleSheet.cssRules) {
  148. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  149. continue
  150. }
  151. // WARNING: Safari does not have/supports `conditionText`.
  152. if (cssRule.conditionText) {
  153. if (cssRule.conditionText !== prefersColorSchemeDark) {
  154. continue
  155. }
  156. } else {
  157. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  158. continue
  159. }
  160. }
  161. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  162. }
  163. // WARNING: do not try to insert a Rule to a styleSheet you are
  164. // currently iterating on, otherwise the browser will be stuck
  165. // in a infinite loop…
  166. for (const mediaRule of mediaRules) {
  167. styleSheet.insertRule(mediaRule.cssText)
  168. hasDarkRules = true
  169. }
  170. }
  171. if (hasDarkRules) {
  172. loadThemeForm('#theme-selector')
  173. }
  174. })
  175. </script>
  176. </body>
  177. </html>