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 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  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 2
  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="Même avec la nourriture suspendue, les souris on fait un sacré raffut. Elles devaient elles aussi avoir trop chaud. Après avoir dormi avec 2 fenêtres ouvertes, il fait tout de même 18°C au réveil. Parfait pour notre gruau de camping (seconde tradition avec les nouilles instantanées), cette fois à la neige fondue.">
  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. <!-- To get attribution when linking on mastodon. -->
  106. <meta name="fediverse:creator" content="@david@larlet.fr">
  107. <style type="text/css">
  108. .tippy-content {
  109. min-width: 280px;
  110. padding: .5rem;
  111. font-size: calc(var(--fluid-0) * 0.8);
  112. font-family: var(--labor-font);
  113. letter-spacing: initial;
  114. text-align: left;
  115. }
  116. .tippy-content h3 {
  117. margin-top: 0;
  118. }
  119. .tippy-content h3 img {
  120. max-width: 2rem;
  121. max-height: 2rem;
  122. display: inline-block;
  123. }
  124. .tippy-content .tippy-links {
  125. display: flex;
  126. justify-content: space-around;
  127. }
  128. .tippy-content a {
  129. padding: .4rem;
  130. color: #F06048;
  131. }
  132. </style>
  133. <body data-instant-intensity="viewport-all">
  134. <article>
  135. <header>
  136. <hgroup>
  137. <h1>Jour 2</h1>
  138. <p>Le <time datetime="2024-01-28">28 janvier 2024</time></p>
  139. </hgroup>
  140. </header>
  141. <nav>
  142. <p>
  143. <a rel="prev"
  144. href="/david/2024/01/27/"
  145. title="Publication précédente : Jour 1">← Précédent</a> •
  146. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  147. <a href="/david/recherche/"
  148. title="Aller à la page de recherche"
  149. rel="search" data-no-instant>Recherche</a>
  150. • <a rel="next"
  151. href="/david/2024/01/29/"
  152. title="Publication suivante : Déploiement">Suivant →</a>
  153. </p>
  154. </nav>
  155. <p>Même avec la nourriture suspendue, les souris on fait un sacré raffut. Elles devaient elles aussi avoir trop chaud. Après avoir dormi avec 2&nbsp;fenêtres ouvertes, il fait tout de même 18°C au réveil. Parfait pour notre gruau de camping (seconde tradition avec les nouilles instantanées), cette fois à la neige&nbsp;fondue.</p>
  156. <p>On prend le temps d’aller faire un petit tour à skis sur le lac car c’est une première pour l’enfant. On suit des traces de lapins qui nous mènent à un point d’eau liquide qui est un point de concentration de la faune locale. Si on avait su avant, on aurait peut-être pris le risque de s’en approcher avec nos gourdes. C’est peut-être mieux de ne pas l’avoir su&nbsp;avant.</p>
  157. <figure>
  158. <a href="/static/david/2024/2024-01-28-lac-foret.jpg"
  159. title="Cliquer pour une version haute résolution">
  160. <img
  161. src="/static/david/2024/2024-01-28-lac-foret.jpg"
  162. width="3024" height="4032"
  163. srcset="/static/david/2024/2024-01-28-lac-foret.jpg 3024w, /static/david/2024/2024-01-28-lac-foret_660x440.jpg 660w, /static/david/2024/2024-01-28-lac-foret_990x660.jpg 990w, /static/david/2024/2024-01-28-lac-foret_1320x880.jpg 1320w"
  164. sizes="min(100vw, calc(100vh * 3024 / 4032))"
  165. loading="lazy"
  166. decoding="async"
  167. alt="Un lac gelé avec la forêt en arrière plan.">
  168. </a>
  169. <figcaption>Une bonne ambiance hivernale mais sans la fraîcheur de la&nbsp;saison.</figcaption>
  170. </figure>
  171. <p>Une fois le matériel rangé, on repart. Cette fois j’ai resserré le système de tractage improvisé avec des tuyaux en PVC de la <em>pulka</em>. Et j’ai aussi troqué les peaux complètes pour des demi-peaux, ça me permet de glisser un peu plus dans les descentes mais quand même pas trop. Difficile de ne pas forcer sur la cheville lorsqu’on est contraint par l’étroitesse du chemin. Bon puis il y a vraiment trop d’arbres dans ces&nbsp;forêts&nbsp;:p.</p>
  172. <p>On s’amuse vraiment sur ce retour et je suis obligé d’imposer des pauses pour ne pas arriver dans le même état que la veille (et me faire semer). L’enfant serait partant pour ne pas s’arrêter du tout, ça fait plaisir. On prend confiance et on enchaîne les bosses. Nos seules traces de la veille aident pas mal. Les conditions sont vraiment chaudes pour la&nbsp;saison.</p>
  173. <figure>
  174. <a href="/static/david/2024/2024-01-28-neige-collante.jpg"
  175. title="Cliquer pour une version haute résolution">
  176. <img
  177. src="/static/david/2024/2024-01-28-neige-collante.jpg"
  178. width="4032" height="3024"
  179. srcset="/static/david/2024/2024-01-28-neige-collante.jpg 4032w, /static/david/2024/2024-01-28-neige-collante_660x440.jpg 660w, /static/david/2024/2024-01-28-neige-collante_990x660.jpg 990w, /static/david/2024/2024-01-28-neige-collante_1320x880.jpg 1320w"
  180. sizes="min(100vw, calc(100vh * 4032 / 3024))"
  181. loading="lazy"
  182. decoding="async"
  183. alt="De la neige qui pend d’un arbre.">
  184. </a>
  185. <figcaption>Lorsqu’on me demande si la neige était&nbsp;collante.</figcaption>
  186. </figure>
  187. <p>Nous sommes progressivement rejoints par les skieur·euses qui descendent à travers les arbres et à une centaine de mètres de la voiture, il y a un passage plus difficile que les autres&nbsp;: une pente qui arrive sur un pont. On passe sur le côté pour être retenus par la neige fraîche mais la <em>pulka</em> décide de faire le drapeau et de prendre la «&nbsp;piste&nbsp;» tapée principale. J’essaye de la rattraper tant bien que mal tout en attendant / prenant soin de l’enfant et je me retrouve dans le décor. Encore. Ce n’est pas tant la chute que de forcer pour s’extraire de la neige tout en étant harnaché et les skis empêtrés dans les arbres qui me fait forcer sur les mauvais tendons… si près du but c’est&nbsp;rageant&nbsp;😔.</p>
  188. <p>Une sortie haute en émotions. Je vais maintenant pouvoir prendre le temps de soigner cette <a href="/david/2024/01/09/" title="Blessure">blessure</a>&nbsp;correctement.</p>
  189. <nav>
  190. <p>
  191. <a href="/david/2024/experience/"
  192. title="Liste de tous les articles 2024 associés à cette étiquette"
  193. rel="tag">#expérience</a>
  194. <a href="/david/2024/foret/"
  195. title="Liste de tous les articles 2024 associés à cette étiquette"
  196. rel="tag">#forêt</a>
  197. <a href="/david/2024/parentalite/"
  198. title="Liste de tous les articles 2024 associés à cette étiquette"
  199. rel="tag">#parentalité</a>
  200. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  201. </p>
  202. </nav>
  203. <nav>
  204. <p>
  205. <a rel="prev"
  206. href="/david/2024/01/27/"
  207. title="Publication précédente : Jour 1">← Précédent</a> •
  208. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  209. • <a rel="next"
  210. href="/david/2024/01/29/"
  211. title="Publication suivante : Déploiement">Suivant →</a>
  212. </p>
  213. </nav>
  214. <form action="/david/recherche/" method="get">
  215. <fieldset>
  216. <legend>Recherche</legend>
  217. <label for="input-search">Termes de votre recherche :</label>
  218. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  219. <input type="submit" value="Chercher">
  220. <p id="indexation-infos">
  221. <small>
  222. Seuls les contenus de ces 8 dernières années sont indexés.
  223. </small>
  224. </p>
  225. </fieldset>
  226. </form>
  227. <aside>
  228. <theme-toggle></theme-toggle>
  229. </aside>
  230. </article>
  231. <hr>
  232. <footer>
  233. <p>
  234. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  235. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  236. <a href="http://larlet.com"
  237. title="Go to my English profile"
  238. data-instant>Pro</a>
  239. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  240. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  241. </p>
  242. <template id="theme-selector">
  243. <form>
  244. <style type="text/css">
  245. fieldset div {
  246. text-align: center;
  247. }
  248. </style>
  249. <fieldset>
  250. <legend>Thème</legend>
  251. <div>
  252. <label>
  253. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  254. Auto
  255. </label>
  256. <label>
  257. <input type="radio" value="dark" name="chosen-color-scheme">
  258. Foncé
  259. </label>
  260. <label>
  261. <input type="radio" value="light" name="chosen-color-scheme">
  262. Clair
  263. </label>
  264. </div>
  265. </fieldset>
  266. </form>
  267. </template>
  268. </footer>
  269. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  270. <script>
  271. class ThemeToggle extends HTMLElement {
  272. constructor() {
  273. super()
  274. const themeSelectorTemplate = document.querySelector('#theme-selector')
  275. const form = themeSelectorTemplate.content.firstElementChild
  276. this.attachShadow({ mode: 'open' })
  277. this.shadowRoot.appendChild(form.cloneNode(true))
  278. }
  279. connectedCallback() {
  280. const form = this.shadowRoot.querySelector('form')
  281. form.addEventListener('change', (e) => {
  282. const chosenColorScheme = e.target.value
  283. localStorage.setItem('theme', chosenColorScheme)
  284. toggleTheme(chosenColorScheme)
  285. })
  286. const selectedTheme = localStorage.getItem('theme')
  287. if (selectedTheme && selectedTheme !== 'undefined') {
  288. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  289. }
  290. }
  291. }
  292. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  293. window.addEventListener('load', () => {
  294. let colorsLayer = undefined
  295. let hasDarkRules = false
  296. for (const styleSheet of Array.from(document.styleSheets)) {
  297. let mediaRules = []
  298. for (const layerRule of styleSheet.cssRules) {
  299. if (!(layerRule instanceof CSSLayerBlockRule)) {
  300. continue
  301. }
  302. if (layerRule.name === 'colors') {
  303. colorsLayer = layerRule
  304. }
  305. for (const cssRule of layerRule.cssRules) {
  306. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  307. continue
  308. }
  309. // WARNING: Safari does not have/supports `conditionText`.
  310. if (cssRule.conditionText) {
  311. if (cssRule.conditionText !== prefersColorSchemeDark) {
  312. continue
  313. }
  314. } else {
  315. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  316. continue
  317. }
  318. }
  319. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  320. }
  321. }
  322. // WARNING: do not try to insert a Rule to a styleSheet you are
  323. // currently iterating on, otherwise the browser will be stuck
  324. // in a infinite loop…
  325. for (const mediaRule of mediaRules) {
  326. // Safari requires the `0` second parameter (even if default).
  327. colorsLayer.insertRule(mediaRule.cssText, 0)
  328. hasDarkRules = true
  329. }
  330. }
  331. if (hasDarkRules) {
  332. if ('customElements' in window && !customElements.get('theme-toggle')) {
  333. customElements.define('theme-toggle', ThemeToggle)
  334. }
  335. }
  336. })
  337. </script>
  338. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  339. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  340. <script>
  341. tippy('[data-tippy]', {
  342. content(reference) {
  343. reference.addEventListener('click', (e) => e.preventDefault())
  344. return `
  345. <h3 lang="fr">
  346. <img src="${reference.dataset.favicon}" loading="lazy">
  347. <a href="${reference.dataset.source}"
  348. >Article sur ${reference.dataset.domain}</a></h3>
  349. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  350. <div class="tippy-links" lang="fr">
  351. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  352. </div>
  353. `
  354. },
  355. allowHTML: true,
  356. interactive: true,
  357. delay: [150, 700],
  358. hideOnClick: false
  359. })
  360. </script>
  361. <script type="module">
  362. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  363. const markObserver = new IntersectionObserver((entries, observer) => {
  364. const computedStyle = getComputedStyle(document.documentElement)
  365. const markBackground = computedStyle.getPropertyValue('--mark-background')
  366. for (const entry of entries) {
  367. if (entry.intersectionRatio === 0) continue
  368. const markElement = entry.target
  369. markElement.style.backgroundColor = 'inherit'
  370. const annotation = annotate(
  371. markElement, {
  372. type: 'highlight',
  373. multiline: true,
  374. color: markBackground,
  375. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  376. animate: false
  377. }
  378. )
  379. annotation.show()
  380. observer.unobserve(markElement)
  381. }
  382. }, {threshold: 1.0})
  383. for (const markElement of document.querySelectorAll('mark')) {
  384. markObserver.observe(markElement)
  385. }
  386. </script>
  387. </body>
  388. </html>