Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

index.html 15KB

8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
8 månader sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  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. Jour 1
  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="Une réservation de longue date qui s’est transformée en sortie familiale (!), malheureusement nous n’avons pas pu rejoindre le refuge à ski faute de neige suffisante. C’était problématique car j’avais prévu de traîner une bonne partie de l’équipement, ce qui se révélait être un peu plus lourd sur le dos. Bon, aussi, on était partis sur une raclette, ça n’aide pas 😅.">
  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>Jour 1</h1>
  136. <p>Le <time datetime="2024-03-04">4 mars 2024</time></p>
  137. </hgroup>
  138. </header>
  139. <nav>
  140. <p>
  141. <a rel="prev"
  142. href="/david/2024/03/03/"
  143. title="Publication précédente : Permanence">← 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/05/"
  150. title="Publication suivante : Jour 2">Suivant →</a>
  151. </p>
  152. </nav>
  153. <p>Une réservation de longue date qui s’est transformée en sortie familiale (!), malheureusement nous n’avons pas pu rejoindre le refuge à ski faute de neige suffisante. C’était problématique car j’avais prévu de traîner une bonne partie de l’équipement, ce qui se révélait être un peu plus lourd sur le dos. Bon, aussi, on était partis sur une raclette, ça n’aide&nbsp;pas&nbsp;😅.</p>
  154. <p>J’avais très peur que le sentier soit peu praticable sans percer à chaque pas, ce qui m’était déjà arrivé dans un tel contexte. Vu le poids du sac, je craignais notamment que ma cheville en cours de réparation refasse le même mouvement en descente… mais nous étions à une poignée de degrés de cet état de la neige pour notre plus grand&nbsp;bonheur.</p>
  155. <p>Ce n’était pas non plus de tout repos et la récompense d’une lac dégelant à l’arrivée était bien méritée. Il est rare d’avoir ces conditions très douces dans un contexte hivernal, on en avait même oublié de prendre nos&nbsp;tuques&#8239;!</p>
  156. <p><em>Tests du jour&nbsp;: les barquettes en aluminium pour faire réflecteur de bougies. Efficace. Les bougies longues durées d’Ikea pour faire fondre du fromage. Pas&nbsp;efficace.</em></p>
  157. <figure>
  158. <a href="/static/david/2024/2024-03-04-lac-corbeau.jpg"
  159. title="Cliquer pour une version haute résolution">
  160. <img
  161. src="/static/david/2024/2024-03-04-lac-corbeau.jpg"
  162. width="3024" height="4032"
  163. srcset="/static/david/2024/2024-03-04-lac-corbeau.jpg 3024w, /static/david/2024/2024-03-04-lac-corbeau_660x440.jpg 660w, /static/david/2024/2024-03-04-lac-corbeau_990x660.jpg 990w, /static/david/2024/2024-03-04-lac-corbeau_1320x880.jpg 1320w"
  164. sizes="min(100vw, calc(100vh * 3024 / 4032))"
  165. loading="lazy"
  166. decoding="async"
  167. alt="Lac corbeau avec des boulots au premier plan.">
  168. </a>
  169. <figcaption>Un décor très minecrafteux&nbsp;(sic).</figcaption>
  170. </figure>
  171. <nav>
  172. <p>
  173. <a href="/david/2024/dystopie/"
  174. title="Liste de tous les articles 2024 associés à cette étiquette"
  175. rel="tag">#dystopie</a>
  176. <a href="/david/2024/foret/"
  177. title="Liste de tous les articles 2024 associés à cette étiquette"
  178. rel="tag">#forêt</a>
  179. <a href="/david/2024/solastalgia/"
  180. title="Liste de tous les articles 2024 associés à cette étiquette"
  181. rel="tag">#solastalgia</a>
  182. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  183. </p>
  184. </nav>
  185. <nav>
  186. <p>
  187. <a rel="prev"
  188. href="/david/2024/03/03/"
  189. title="Publication précédente : Permanence">← Précédent</a> •
  190. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  191. • <a rel="next"
  192. href="/david/2024/03/05/"
  193. title="Publication suivante : Jour 2">Suivant →</a>
  194. </p>
  195. </nav>
  196. <form action="/david/recherche/" method="get">
  197. <fieldset>
  198. <legend>Recherche</legend>
  199. <label for="input-search">Termes de votre recherche :</label>
  200. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  201. <input type="submit" value="Chercher">
  202. <p id="indexation-infos">
  203. <small>
  204. Seuls les contenus de ces 8 dernières années sont indexés.
  205. </small>
  206. </p>
  207. </fieldset>
  208. </form>
  209. <aside>
  210. <theme-toggle></theme-toggle>
  211. </aside>
  212. </article>
  213. <hr>
  214. <footer>
  215. <p>
  216. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  217. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  218. <a href="http://larlet.com"
  219. title="Go to my English profile"
  220. data-instant>Pro</a>
  221. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  222. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  223. </p>
  224. <template id="theme-selector">
  225. <form>
  226. <style type="text/css">
  227. fieldset div {
  228. text-align: center;
  229. }
  230. </style>
  231. <fieldset>
  232. <legend>Thème</legend>
  233. <div>
  234. <label>
  235. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  236. Auto
  237. </label>
  238. <label>
  239. <input type="radio" value="dark" name="chosen-color-scheme">
  240. Foncé
  241. </label>
  242. <label>
  243. <input type="radio" value="light" name="chosen-color-scheme">
  244. Clair
  245. </label>
  246. </div>
  247. </fieldset>
  248. </form>
  249. </template>
  250. </footer>
  251. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  252. <script>
  253. class ThemeToggle extends HTMLElement {
  254. constructor() {
  255. super()
  256. const themeSelectorTemplate = document.querySelector('#theme-selector')
  257. const form = themeSelectorTemplate.content.firstElementChild
  258. this.attachShadow({ mode: 'open' })
  259. this.shadowRoot.appendChild(form.cloneNode(true))
  260. }
  261. connectedCallback() {
  262. const form = this.shadowRoot.querySelector('form')
  263. form.addEventListener('change', (e) => {
  264. const chosenColorScheme = e.target.value
  265. localStorage.setItem('theme', chosenColorScheme)
  266. toggleTheme(chosenColorScheme)
  267. })
  268. const selectedTheme = localStorage.getItem('theme')
  269. if (selectedTheme && selectedTheme !== 'undefined') {
  270. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  271. }
  272. }
  273. }
  274. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  275. window.addEventListener('load', () => {
  276. let colorsLayer = undefined
  277. let hasDarkRules = false
  278. for (const styleSheet of Array.from(document.styleSheets)) {
  279. let mediaRules = []
  280. for (const layerRule of styleSheet.cssRules) {
  281. if (!(layerRule instanceof CSSLayerBlockRule)) {
  282. continue
  283. }
  284. if (layerRule.name === 'colors') {
  285. colorsLayer = layerRule
  286. }
  287. for (const cssRule of layerRule.cssRules) {
  288. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  289. continue
  290. }
  291. // WARNING: Safari does not have/supports `conditionText`.
  292. if (cssRule.conditionText) {
  293. if (cssRule.conditionText !== prefersColorSchemeDark) {
  294. continue
  295. }
  296. } else {
  297. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  298. continue
  299. }
  300. }
  301. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  302. }
  303. }
  304. // WARNING: do not try to insert a Rule to a styleSheet you are
  305. // currently iterating on, otherwise the browser will be stuck
  306. // in a infinite loop…
  307. for (const mediaRule of mediaRules) {
  308. // Safari requires the `0` second parameter (even if default).
  309. colorsLayer.insertRule(mediaRule.cssText, 0)
  310. hasDarkRules = true
  311. }
  312. }
  313. if (hasDarkRules) {
  314. if ('customElements' in window && !customElements.get('theme-toggle')) {
  315. customElements.define('theme-toggle', ThemeToggle)
  316. }
  317. }
  318. })
  319. </script>
  320. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  321. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  322. <script>
  323. tippy('[data-tippy]', {
  324. content(reference) {
  325. reference.addEventListener('click', (e) => e.preventDefault())
  326. return `
  327. <h3 lang="fr">
  328. <img src="${reference.dataset.favicon}" loading="lazy">
  329. <a href="${reference.dataset.source}"
  330. >Article sur ${reference.dataset.domain}</a></h3>
  331. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  332. <div class="tippy-links" lang="fr">
  333. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  334. </div>
  335. `
  336. },
  337. allowHTML: true,
  338. interactive: true,
  339. delay: [150, 700],
  340. hideOnClick: false
  341. })
  342. </script>
  343. <script type="module">
  344. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  345. const markObserver = new IntersectionObserver((entries, observer) => {
  346. const computedStyle = getComputedStyle(document.documentElement)
  347. const markBackground = computedStyle.getPropertyValue('--mark-background')
  348. for (const entry of entries) {
  349. if (entry.intersectionRatio === 0) continue
  350. const markElement = entry.target
  351. markElement.style.backgroundColor = 'inherit'
  352. const annotation = annotate(
  353. markElement, {
  354. type: 'highlight',
  355. multiline: true,
  356. color: markBackground,
  357. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  358. animate: false
  359. }
  360. )
  361. annotation.show()
  362. observer.unobserve(markElement)
  363. }
  364. }, {threshold: 1.0})
  365. for (const markElement of document.querySelectorAll('mark')) {
  366. markObserver.observe(markElement)
  367. }
  368. </script>
  369. </body>
  370. </html>