Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
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.

index.html 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  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` 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>
  13. Descriptions
  14. — David Larlet</title>
  15. <script>
  16. function toggleTheme(themeName) {
  17. document.documentElement.classList.toggle(
  18. 'forced-dark',
  19. themeName === 'dark'
  20. )
  21. document.documentElement.classList.toggle(
  22. 'forced-light',
  23. themeName === 'light'
  24. )
  25. }
  26. const selectedTheme = localStorage.getItem('theme')
  27. if (selectedTheme !== 'undefined') {
  28. toggleTheme(selectedTheme)
  29. }
  30. </script>
  31. <!-- Documented, feel free to shoot an email. -->
  32. <link rel="stylesheet" href="/static/david/css/style_2024-03-09.css">
  33. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  34. <link rel="preload"
  35. href="/static/david/css/fonts/century_supra_ot_a_regular.woff2"
  36. as="font"
  37. type="font/woff2"
  38. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  39. crossorigin>
  40. <link rel="preload"
  41. href="/static/david/css/fonts/century_supra_ot_a_bold.woff2"
  42. as="font"
  43. type="font/woff2"
  44. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  45. crossorigin>
  46. <link rel="preload"
  47. href="/static/david/css/fonts/century_supra_ot_a_italic.woff2"
  48. as="font"
  49. type="font/woff2"
  50. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  51. crossorigin>
  52. <link rel="preload"
  53. href="/static/david/css/fonts/century_supra_ot_b_regular.woff2"
  54. as="font"
  55. type="font/woff2"
  56. media="(prefers-color-scheme: dark)"
  57. crossorigin>
  58. <link rel="preload"
  59. href="/static/david/css/fonts/century_supra_ot_b_bold.woff2"
  60. as="font"
  61. type="font/woff2"
  62. media="(prefers-color-scheme: dark)"
  63. crossorigin>
  64. <link rel="preload"
  65. href="/static/david/css/fonts/century_supra_ot_b_italic.woff2"
  66. as="font"
  67. type="font/woff2"
  68. media="(prefers-color-scheme: dark)"
  69. crossorigin>
  70. <meta name="description" content="Le crépuscule était tombé lorsqu’ils partirent enfin : rampant par-dessus le bord ouest du vallon, ils passèrent comme des fantômes dans le pays accidenté en bordure de la route. La Lune n’était plus qu’à trois nuits de son plein, mais elle ne devait pas franchir les Montagnes avant minuit ou presque, et le début de leur voyage se fit dans la plus grande obscurité. […]">
  71. <!-- That good ol' feed, subscribe :). -->
  72. <link rel="alternate"
  73. type="application/atom+xml"
  74. title="Feed"
  75. href="/david/log/">
  76. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  77. <link rel="apple-touch-icon"
  78. sizes="180x180"
  79. href="/static/david/icons2/apple-touch-icon.png">
  80. <link rel="icon"
  81. type="image/png"
  82. sizes="32x32"
  83. href="/static/david/icons2/favicon-32x32.png">
  84. <link rel="icon"
  85. type="image/png"
  86. sizes="16x16"
  87. href="/static/david/icons2/favicon-16x16.png">
  88. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  89. <link rel="mask-icon"
  90. href="/static/david/icons2/safari-pinned-tab.svg"
  91. color="#07486c">
  92. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  93. <meta name="msapplication-TileColor" content="#f7f7f7">
  94. <meta name="msapplication-config"
  95. content="/static/david/icons2/browserconfig.xml">
  96. <meta name="theme-color"
  97. content="#f7f7f7"
  98. media="(prefers-color-scheme: light)">
  99. <meta name="theme-color"
  100. content="#272727"
  101. media="(prefers-color-scheme: dark)">
  102. <!-- Is that even respected? Retrospectively? What a shAItshow…
  103. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  104. <meta name="robots" content="noai, noimageai">
  105. <style type="text/css">
  106. .tippy-content {
  107. min-width: 280px;
  108. padding: .5rem;
  109. font-size: calc(var(--fluid-0) * 0.8);
  110. font-family: var(--labor-font);
  111. letter-spacing: initial;
  112. text-align: left;
  113. }
  114. .tippy-content h3 {
  115. margin-top: 0;
  116. }
  117. .tippy-content h3 img {
  118. max-width: 2rem;
  119. max-height: 2rem;
  120. display: inline-block;
  121. }
  122. .tippy-content .tippy-links {
  123. display: flex;
  124. justify-content: space-around;
  125. }
  126. .tippy-content a {
  127. padding: .4rem;
  128. color: #F06048;
  129. }
  130. </style>
  131. <body data-instant-intensity="viewport-all">
  132. <article>
  133. <header>
  134. <hgroup>
  135. <h1>Descriptions</h1>
  136. <p>Le <time datetime="2024-03-16">16 mars 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/03/14/"
  143. title="Publication précédente : Montre 2">← Précédent</a> •
  144. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  145. <a href="/david/recherche/"
  146. title="Aller à la page de recherche"
  147. rel="search" data-no-instant>Recherche</a>
  148. • <a rel="next"
  149. href="/david/2024/03/18/"
  150. title="Publication suivante : Casquettes">Suivant →</a>
  151. </p>
  152. </nav>
  153. <blockquote>
  154. <p>Le crépuscule était tombé lorsqu’ils partirent enfin&nbsp;: rampant par-dessus le bord ouest du vallon, ils passèrent comme des fantômes dans le pays accidenté en bordure de la route. La Lune n’était plus qu’à trois nuits de son plein, mais elle ne devait pas franchir les Montagnes avant minuit ou presque, et le début de leur voyage se fit dans la plus grande obscurité. […]</p>
  155. <p><mark>Enfin, quand la nuit se fit vieille et que la fatigue les eut déjà rattrapés</mark>&nbsp;[…]</p>
  156. <p>Dès la tombée de la nuit, la terre s’étant évanouie en un gris informe, ils se remirent en route. […]</p>
  157. <p>Le jour était en train d’éclore, et ils virent que les Montagnes étaient à présent beaucoup plus distantes, fuyant vers l’est en une longue courbe qui se perdait à l’horizon. […]</p>
  158. <p>La lumière croissante leur révéla une terre déjà moins aride et moins ravagée. Les Montagnes se dressaient encore de façon menaçante sur leur gauche, mais la route du Sud était visible tout près d’eux, et elle s’éloignait à présent des racines noires des collines, obliquant vers l’ouest. […]</p>
  159. <p><cite><em>Le Seigneur des Anneaux</em>, J.R.R. Tolkien, traduction de Daniel&nbsp;Lauzon</cite></p>
  160. </blockquote>
  161. <p>Je ne sais pas si j’y suis plus sensible à <a href="/david/2024/02/06/" title="Anneau">cette relecture</a> ou s’il s’agit d’améliorations avec la nouvelle traduction mais je remarque des tournures de phrases qui m’inspirent pour raconter des aventures en nature. Le sujet devenant l’environnement pour traduire les contraintes qu’il&nbsp;impose.</p>
  162. <p>Puisqu’il faut s’éloigner du style de <a data-link-domain="comptoir.org" href="https://comptoir.org/2024/03/11/sylvain-tesson-les-vers-de-la-reaction/" hreflang="fr"
  163. title="Consultation de l’article">Sylvain Tesson</a>
  164. <a href="/david/cache/2024/d767413ad435c2d833e7d0711c40c370/" hreflang="fr"
  165. data-tippy data-description="La rentrée littéraire de ce début d’année 2024 fut marquée – comme presque chaque année désormais – par la parution d’un nouveau récit de voyage de Sylvain Tesson, doublé d’une polémique sur sa nom…"
  166. data-source="https://comptoir.org/2024/03/11/sylvain-tesson-les-vers-de-la-reaction/"
  167. data-date="2024-03-17"
  168. data-favicon="https://secure.gravatar.com/blavatar/d516daa7fb122f031098a3523884605516add46cc63f1940d3e69aa42056b5c2?s=32"
  169. data-domain="comptoir.org"
  170. ><svg xmlns="http://www.w3.org/2000/svg"
  171. width="24" height="24" viewBox="0 0 24 24" fill="none"
  172. stroke="currentColor" stroke-width="2" stroke-linecap="square"
  173. stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle>
  174. <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path>
  175. <line x1="12" y1="17" x2="12.01" y2="17"></line>
  176. </svg>
  177. <span class="sr-only">[archive]</span></a>…</p>
  178. <nav>
  179. <p>
  180. <a href="/david/2024/aventure/"
  181. title="Liste de tous les articles 2024 associés à cette étiquette"
  182. rel="tag">#aventure</a>
  183. <a href="/david/2024/ecriture/"
  184. title="Liste de tous les articles 2024 associés à cette étiquette"
  185. rel="tag">#écriture</a>
  186. <a href="/david/2024/lecture/"
  187. title="Liste de tous les articles 2024 associés à cette étiquette"
  188. rel="tag">#lecture</a>
  189. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  190. </p>
  191. </nav>
  192. <nav>
  193. <p>
  194. <a rel="prev"
  195. href="/david/2024/03/14/"
  196. title="Publication précédente : Montre 2">← Précédent</a> •
  197. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  198. • <a rel="next"
  199. href="/david/2024/03/18/"
  200. title="Publication suivante : Casquettes">Suivant →</a>
  201. </p>
  202. </nav>
  203. <form action="/david/recherche/" method="get">
  204. <fieldset>
  205. <legend>Recherche</legend>
  206. <label for="input-search">Termes de votre recherche :</label>
  207. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  208. <input type="submit" value="Chercher">
  209. <p id="indexation-infos">
  210. <small>
  211. Seuls les contenus de ces 8 dernières années sont indexés.
  212. </small>
  213. </p>
  214. </fieldset>
  215. </form>
  216. <aside>
  217. <theme-toggle></theme-toggle>
  218. </aside>
  219. </article>
  220. <hr>
  221. <footer>
  222. <p>
  223. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  224. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  225. <a href="http://larlet.com"
  226. title="Go to my English profile"
  227. data-instant>Pro</a>
  228. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  229. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  230. </p>
  231. <template id="theme-selector">
  232. <form>
  233. <style type="text/css">
  234. fieldset div {
  235. text-align: center;
  236. }
  237. </style>
  238. <fieldset>
  239. <legend>Thème</legend>
  240. <div>
  241. <label>
  242. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  243. Auto
  244. </label>
  245. <label>
  246. <input type="radio" value="dark" name="chosen-color-scheme">
  247. Foncé
  248. </label>
  249. <label>
  250. <input type="radio" value="light" name="chosen-color-scheme">
  251. Clair
  252. </label>
  253. </div>
  254. </fieldset>
  255. </form>
  256. </template>
  257. </footer>
  258. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  259. <script>
  260. class ThemeToggle extends HTMLElement {
  261. constructor() {
  262. super()
  263. const themeSelectorTemplate = document.querySelector('#theme-selector')
  264. const form = themeSelectorTemplate.content.firstElementChild
  265. this.attachShadow({ mode: 'open' })
  266. this.shadowRoot.appendChild(form.cloneNode(true))
  267. }
  268. connectedCallback() {
  269. const form = this.shadowRoot.querySelector('form')
  270. form.addEventListener('change', (e) => {
  271. const chosenColorScheme = e.target.value
  272. localStorage.setItem('theme', chosenColorScheme)
  273. toggleTheme(chosenColorScheme)
  274. })
  275. const selectedTheme = localStorage.getItem('theme')
  276. if (selectedTheme && selectedTheme !== 'undefined') {
  277. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  278. }
  279. }
  280. }
  281. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  282. window.addEventListener('load', () => {
  283. let colorsLayer = undefined
  284. let hasDarkRules = false
  285. for (const styleSheet of Array.from(document.styleSheets)) {
  286. let mediaRules = []
  287. for (const layerRule of styleSheet.cssRules) {
  288. if (!(layerRule instanceof CSSLayerBlockRule)) {
  289. continue
  290. }
  291. if (layerRule.name === 'colors') {
  292. colorsLayer = layerRule
  293. }
  294. for (const cssRule of layerRule.cssRules) {
  295. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  296. continue
  297. }
  298. // WARNING: Safari does not have/supports `conditionText`.
  299. if (cssRule.conditionText) {
  300. if (cssRule.conditionText !== prefersColorSchemeDark) {
  301. continue
  302. }
  303. } else {
  304. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  305. continue
  306. }
  307. }
  308. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  309. }
  310. }
  311. // WARNING: do not try to insert a Rule to a styleSheet you are
  312. // currently iterating on, otherwise the browser will be stuck
  313. // in a infinite loop…
  314. for (const mediaRule of mediaRules) {
  315. // Safari requires the `0` second parameter (even if default).
  316. colorsLayer.insertRule(mediaRule.cssText, 0)
  317. hasDarkRules = true
  318. }
  319. }
  320. if (hasDarkRules) {
  321. if ('customElements' in window && !customElements.get('theme-toggle')) {
  322. customElements.define('theme-toggle', ThemeToggle)
  323. }
  324. }
  325. })
  326. </script>
  327. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  328. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  329. <script>
  330. tippy('[data-tippy]', {
  331. content(reference) {
  332. reference.addEventListener('click', (e) => e.preventDefault())
  333. return `
  334. <h3 lang="fr">
  335. <img src="${reference.dataset.favicon}" loading="lazy">
  336. <a href="${reference.dataset.source}"
  337. >Article sur ${reference.dataset.domain}</a></h3>
  338. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  339. <div class="tippy-links" lang="fr">
  340. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  341. </div>
  342. `
  343. },
  344. allowHTML: true,
  345. interactive: true,
  346. delay: [150, 700],
  347. hideOnClick: false
  348. })
  349. </script>
  350. <script type="module">
  351. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  352. const markObserver = new IntersectionObserver((entries, observer) => {
  353. const computedStyle = getComputedStyle(document.documentElement)
  354. const markBackground = computedStyle.getPropertyValue('--mark-background')
  355. for (const entry of entries) {
  356. if (entry.intersectionRatio === 0) continue
  357. const markElement = entry.target
  358. markElement.style.backgroundColor = 'inherit'
  359. const annotation = annotate(
  360. markElement, {
  361. type: 'highlight',
  362. multiline: true,
  363. color: markBackground,
  364. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  365. animate: false
  366. }
  367. )
  368. annotation.show()
  369. observer.unobserve(markElement)
  370. }
  371. }, {threshold: 1.0})
  372. for (const markElement of document.querySelectorAll('mark')) {
  373. markObserver.observe(markElement)
  374. }
  375. </script>
  376. </body>
  377. </html>