Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

index.html 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  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>Traces — David Larlet</title>
  13. <meta name="description" content="Cet article a également été publié sur 24 jours de web à l’adresse suivante. Merci.">
  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. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <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>
  31. <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>
  32. <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>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  53. <article>
  54. <header>
  55. <h1>Traces</h1>
  56. </header>
  57. <nav>
  58. <p class="center">
  59. <a rel="prev" href="/david/2022/11/27/" title="Publication précédente : Neuf">← Précédent</a> •
  60. <nobr>
  61. <a href="/david/" title="Aller à l’accueil"
  62. ><svg class="icon icon-home">
  63. <use
  64. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  65. ></use>
  66. </svg>
  67. Accueil</a
  68. >
  69. </nobr>
  70. <nobr>
  71. <a href="/david/recherche/" title="Aller à la page de recherche"
  72. ><svg class="icon icon-search">
  73. <use
  74. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search"
  75. ></use>
  76. </svg>
  77. Recherche</a
  78. >
  79. </nobr>
  80. • <a rel="next" href="/david/2022/12/22/" title="Publication suivante : Marcher">Suivant →</a>
  81. </p>
  82. </nav>
  83. <hr>
  84. <p><em>Cet article a également été publié sur <a href="https://www.24joursdeweb.fr/">24&nbsp;jours de web</a> à <a href="https://www.24joursdeweb.fr/2022/traces-de-developpements/">l’adresse suivante</a>. Merci.</em></p>
  85. <p>Lorsqu’on parle de publication d’un journal sur le web —&nbsp;qu’il soit personnel ou professionnel&nbsp;— on pense tout de suite aux (web)blogs. Je voudrais ici partager avec vous une autre pratique du journal qui me permet de partager mon travail de manière semi-privée au sein des équipes distribuées et asynchrones que je côtoie depuis plus de 5&nbsp;ans. C’est un intermédiaire entre la description d’une facture, un compte rendu d’activité&nbsp;(CRA) et ce qui peut être échangé lors d’un rendez-vous d’équipe oral quotidien. Pour <a href="/david/2020/12/13/#journal">une version courte</a>.</p>
  86. <h2 id="prologue">Prologue <a href="#prologue" title="Ancre vers cette partie">#</a></h2>
  87. <blockquote>
  88. <p>Je suis fermement convaincu que l’on ne «&nbsp;perd&nbsp;» jamais du temps à écrire, même si à un certain moment on abandonne le projet sur lequel on travaillait. Chaque tentative d’écriture, qu’il s’agisse d’un article analytique, d’un chapitre de roman ou d’un poème, est une expérience de travail sur la tâche impossible de donner une forme écrite à la vie vécue. <mark>La vie vécue ne peut être couchée sur le papier.</mark> Elle ne se présente pas sous la forme de mots et est impossible à traduire en mots. L’expérience de penser une pensée n’est pas la pensée qu’on inscrit sur la page. Et pourtant, nous essayons d’inventer des formes de faire cette traduction impossible&nbsp;[…]</p>
  89. <p><cite><em><a href="https://carnetpsy.fr/pour-une-nouvelle-sensibilite-analytique-ou-que-veux-tu-etre-quand-tu-seras-grand/">Pour une nouvelle sensibilité analytique ou «&nbsp;que veux-tu être quand tu seras grand&#8239;?&nbsp;»</a></em>&nbsp;(<a href="/david/cache/2022/e6dbee7e4ecefa386cb1c73040ee9e16/">cache</a>)</cite></p>
  90. </blockquote>
  91. <p>J’ai probablement été inspiré par les carnets de laboratoire si importants pour la recherche scientifique, ayant ensuite participé activement à leur numérisation et à leur passage au web (premier emploi). Il y a certainement des personnes comme <a href="https://ronan.amicel.net/">Ronan</a> et <a href="https://elsif.fr/">Yannick</a> qui m’ont influencé aussi dans cette routine d’écriture. Oh, et peut-être de bloguer régulièrement <a href="/david/biologeek/archives/20040930-ouverture-de-rideau/">depuis 18&nbsp;ans</a>&nbsp;aussi&nbsp;🙃.</p>
  92. <h2 id="genese">Génèse <a href="#genese" title="Ancre vers cette partie">#</a></h2><p>Le plus vieux journal de la sorte que j’ai pu retrouver remonte à mon accompagnement de <a href="https://www.data.gouv.fr/fr/">data.gouv.fr</a> en 2016. C’est étrange d’avoir commencé en cours de mission mais ça correspond aussi à mon arrivée au Québec. Cela justifie probablement l’envie de créer un nouvel espace d’échanges asynchrones car je me retrouvais avec 6&nbsp;heures de décalage horaire. <em>Note&nbsp;: le fait de ne pas être sur la même timezone m’apporte beaucoup dans mon travail quotidien mais ce sera l’objet d’un futur article.</em> Il était aussi plus facile de démarrer l’expérience avec une équipe que je connaissais assez bien (un an et demi&nbsp;d’ancienneté).</p>
  93. <figure>
  94. <a href="#journal-2016-datagouvfr"
  95. title="Cliquer pour une version haute résolution">
  96. <img src="/static/david/2022/journal-2016-datagouvfr.png" alt="Capture d’écran d’un ancien journal (2016)"
  97. loading="lazy" width="2200" height="1432" />
  98. </a>
  99. <a href="#_" class="lightbox" id="journal-2016-datagouvfr">
  100. <img src="/static/david/2022/journal-2016-datagouvfr.png" alt="Capture d’écran d’un ancien journal (2016)"
  101. loading="lazy" width="2200" height="1432" />
  102. </a>
  103. <figcaption>Capture d’écran d’un journal hebdomadaire pour la deuxième semaine de septembre&nbsp;2016.</figcaption>
  104. </figure>
  105. <p>On peut voir que je comptabilise le nombre de jours facturés de manière publique avec l’équipe, que je partage un <em>mood</em> et que je documente ce que j’ai fait sur la semaine en cours/passée. Il y a aussi beaucoup de liens et d’emojis, on se refait&nbsp;pas&nbsp;🤷.</p>
  106. <p>Lors d’un essai, je trouve ça pertinent de ne pas trop se soucier de la forme ou du lieu où sont stockées les données, cela sera facilement modifiable et récupérable si l’expérience est concluante. Ça reste tout de même du texte brut en <em>markdown</em> qui est aisément&nbsp;transformable.</p>
  107. <p>J’ai continué ce premier journal jusqu’à la fin de l’année avant de valider l’expérience et de passer à une publication chez moi, jusqu’à avoir un journal par équipe/produit. Avoir la main sur la conversion en HTML m’a permis de le représenter davantage sous la forme d’une <em>timeline</em> et de comptabiliser automagiquement les jours du mois pour la facturation grâce à des <code>data-attributes</code> bien placés. J’ai aussi la possibilité de replier les entrées très anciennes à l’aide d’un <code>details</code>/<code>summary</code> ce qui devient assez critique car je passe à un format quotidien, plus approprié au <a href="https://beta.gouv.fr/startups/zam.html">produit sur lequel je travaille</a> à ce moment&nbsp;là.</p>
  108. <figure>
  109. <a href="#journal-2019-zam"
  110. title="Cliquer pour une version haute résolution">
  111. <img src="/static/david/2022/journal-2019-zam.png" alt="Capture d’écran d’un ancien journal (2019)"
  112. loading="lazy" width="1756" height="1254" />
  113. </a>
  114. <a href="#_" class="lightbox" id="journal-2019-zam">
  115. <img src="/static/david/2022/journal-2019-zam.png" alt="Capture d’écran d’un ancien journal (2019)"
  116. loading="lazy" width="1756" height="1254" />
  117. </a>
  118. <figcaption>Capture d’écran d’un journal quotidien fin&nbsp;2019</figcaption>
  119. </figure>
  120. <p>Il s’agit d’une routine qui demande une certaine rigueur mais en couplant l’écriture au décompte du temps passé —&nbsp;et donc à la rémunération associée&nbsp;— cela motive pour ne pas louper une&nbsp;entrée&nbsp;😅.</p>
  121. <h2 id="evolutions">Évolutions <a href="#evolutions" title="Ancre vers cette partie">#</a></h2><p>Début 2022, je sentais bien que je supportais de moins en moins le contexte du produit sur lequel je travaillais, j’ai donc introduit une notion de fun combinée à une comptabilité du temps plus précise qui ne s’effectuait plus à la (demi-)journée mais à l’heure. Je me disais qu’il fallait au moins prendre la mesure de cette démotivation ainsi que son évolution. Cela m’a permis de clairement réaliser qu’il fallait que je mette fin à ma participation à ce&nbsp;produit.</p>
  122. <figure>
  123. <a href="#journal-2022-fun"
  124. title="Cliquer pour une version haute résolution">
  125. <img src="/static/david/2022/journal-2022-fun.png" alt="Capture d’écran d’un journal récent (début 2022)"
  126. loading="lazy" width="2414" height="1762" />
  127. </a>
  128. <a href="#_" class="lightbox" id="journal-2022-fun">
  129. <img src="/static/david/2022/journal-2022-fun.png" alt="Capture d’écran d’un journal récent (début 2022)"
  130. loading="lazy" width="2414" height="1762" />
  131. </a>
  132. <figcaption>Capture d’écran d’un journal début&nbsp;2022</figcaption>
  133. </figure>
  134. <p>Plus récemment, sur un autre journal/produit, j’ai ajouté des graphes du temps passé et de l’humeur du moment. Je voulais voir ce que ça pouvait donner sur une période et visualiser si l’humeur était dépendante d’une surcharge de travail par exemple. Je trouve intéressant d’avoir ce baromètre donnant une information importante pour les collaborateur·ices et pour&nbsp;moi-même.</p>
  135. <p>Au cours de l’évolution dans le temps du format du journal, je remarque que je me concentre davantage sur les émotions que sur ce qui a été fait de manière analytique. C’est peut-être lié à une maturité personnelle qui me fait considérer davantage le côté humain au côté technique dans mon&nbsp;travail.</p>
  136. <figure>
  137. <a href="#journal-2022-stylo"
  138. title="Cliquer pour une version haute résolution">
  139. <img src="/static/david/2022/journal-2022-stylo.png" alt="Capture d’écran d’un journal récent (2022)"
  140. loading="lazy" width="1366" height="1698" />
  141. </a>
  142. <a href="#_" class="lightbox" id="journal-2022-stylo">
  143. <img src="/static/david/2022/journal-2022-stylo.png" alt="Capture d’écran d’un journal récent (2022)"
  144. loading="lazy" width="1366" height="1698" />
  145. </a>
  146. <figcaption>Capture d’écran d’un journal quotidien en&nbsp;2022</figcaption>
  147. </figure>
  148. <p>Pour la source, elle est toujours en <em>markdown</em>, j’ai tenté à un moment d’écrire directement en HTML (et j’ai encore des journaux en cours ainsi) mais ça change ma fluidité d’écriture car je finis par être distrait par l’éditeur. J’ajoute des métadonnées à base d’emojis pour comptabiliser le temps et consigner&nbsp;l’humeur&nbsp;:</p>
  149. <figure>
  150. <a href="#journal-2022-stylo-source"
  151. title="Cliquer pour une version haute résolution">
  152. <img src="/static/david/2022/journal-2022-stylo-source.png" alt="Capture d’écran de la source d’un journal récent (2022)"
  153. loading="lazy" width="2982" height="880" />
  154. </a>
  155. <a href="#_" class="lightbox" id="journal-2022-stylo-source">
  156. <img src="/static/david/2022/journal-2022-stylo-source.png" alt="Capture d’écran de la source d’un journal récent (2022)"
  157. loading="lazy" width="2982" height="880" />
  158. </a>
  159. <figcaption>Capture d’écran de la source d’un journal quotidien en&nbsp;2022</figcaption>
  160. </figure>
  161. <p>Je passe sur certaines adaptations faites au cours du temps sur le générateur de HTML pour pouvoir supporter le décompte du temps de plusieurs personnes ou d’avoir plusieurs journaux combinés sur une même&nbsp;page.</p>
  162. <p>La technique est loin d’être clef dans ce contexte et l’importance est plutôt de rendre le journal accessible facilement aux autre membres de l’équipe. Je poste le lien vers l’entrée du jour plus ou moins régulièrement (en fonction de l’activité du projet) dans l’espace dédié à la discussion instantanée. Je n’ai pas de statistiques de lecture et je ne cherche pas à en&nbsp;avoir.</p>
  163. <h2 id="interets">Intérêts <a href="#interets" title="Ancre vers cette partie">#</a></h2><p>Le premier gain est personnel, il s’agit d’une mémoire externalisée de ce que j’ai fait avec des notes —&nbsp;parfois technique&nbsp;— de ce qui m’a débloqué à des moments clefs. Le fait de rédiger quotidiennement ou hebdomadairement me permet de faire un bilan de ce que j’ai réussi (ou échoué) à faire et des conditions de travail dans lesquelles j’ai été. Cela donne un sentiment d’avancement assez plaisant, ou lors de certaines périodes de réaliser que l’on piétine un peu aussi. J’y consignais également des bouts de code plus technique avant de les externaliser vers un <a href="https://code.larlet.fr/">espace public dédié</a>.</p>
  164. <p>Je relis rarement ce journal de bout en bout <em>a posteriori</em> mais je vais souvent y piocher des lignes de commandes ou des conclusions de réunions. Parfois même des actions à faire lorsque la régularité sur un produit devient plus&nbsp;espacée.</p>
  165. <figure>
  166. <a href="#journal-sean-connery"
  167. title="Cliquer pour une version haute résolution">
  168. <img src="/static/david/2022/journal-sean-connery.gif" alt="GIF animé de Sean Connery issu d’un film qui dit qu’il consigne des choses dans son journal pour ne pas avoir à les retenir"
  169. loading="lazy" width="400" height="170" />
  170. </a>
  171. <a href="#_" class="lightbox" id="journal-sean-connery">
  172. <img src="/static/david/2022/journal-sean-connery.gif" alt="GIF animé de Sean Connery issu d’un film qui dit qu’il consigne des choses dans son journal pour ne pas avoir à les retenir"
  173. loading="lazy" width="400" height="170" />
  174. </a>
  175. <figcaption>Ce-que-disent-les-vieux.</figcaption>
  176. </figure>
  177. <p>Cela m’offre un certain recul sur le temps passé et ma «&nbsp;productivité&nbsp;» aussi, autant dans un sens (<em>burn-out</em>) que dans l’autre (culpabilité, syndrome de l’imposteur, etc). Il y a toute la réflexion autour de «&nbsp;Est-ce que c’est du travail&#8239;?&nbsp;» qui est intéressante lorsqu’on fait un travail plutôt intellectuel. Est-ce que d’aller me promener une heure est important pour arriver à la résolution de ce <em>bug</em>&#8239;? Est-ce que j’ai besoin de trois heures de procrastination pour arriver à développer cette fonctionnalité en 20&nbsp;minutes&#8239;? Si oui, comment facturer cela&#8239;? Etc.</p>
  178. <p>J’apprécie que le temps soit décompté de manière transparente, il y a rarement des surprises ou si elles le sont c’est rapidement expliqué. Je trouve cela important que pour des personnes moins techniques mon métier soit un peu plus tangible. Le fait de raconter les différents errements et recherches technologiques participe probablement à sa compréhension. Lorsqu’on facture au temps passé et qui plus est à distance, la confiance s’installe également par la&nbsp;transparence.</p>
  179. <p>Le gain collectif est difficile à estimer. J’ai souvent des retours positifs et inspirants. J’apprécie que toutes les personnes de l’équipe puissent avoir le même niveau d’information à mon sujet, autant au niveau du cheminement technique que de la forme du moment. Notamment dans des passages difficiles, je trouve ça intéressant de pouvoir m’exprimer à l’écrit de manière asynchrone, de manière un peu plus posée. Ces retours sont souvent à l’origine de discussions qui sont importantes pour que tout le monde se sente bien dans l’équipe. Le journal est une soupape de connaissances afin de ne pas devenir un·e gardien·ne du temple mais aussi une soupape&nbsp;émotionnelle&#8239;!</p>
  180. <p>Est-ce que les autres personnes des équipes lisent ces traces de développement au quotidien&#8239;? Je n’en ai aucune idée, je pense que chaque collaborateur·ice a ses propres routines de lectures et il faut combiner à cela les personnes qui sont plus à l’aise à l’oral. Le journal n’est pas exclusif mais fait partie d’une faculté plus globale à communiquer de plusieurs manières possibles pour essayer de transmettre un message&nbsp;compréhensible.</p>
  181. <h2 id="cooperative">Coopérative <a href="#cooperative" title="Ancre vers cette partie">#</a></h2><p>Dans un autre contexte — la <a href="http://scopyleft.fr/">coopérative</a> dont je fais partie depuis 10&nbsp;ans&nbsp;— j’ai démarré cette année un nouveau journal pour partager autour des petits produits que je mettais en proposition pour la&nbsp;SCOP.</p>
  182. <figure>
  183. <a href="#journal-2022-scopyleft"
  184. title="Cliquer pour une version haute résolution">
  185. <img src="/static/david/2022/journal-2022-scopyleft.png" alt="Capture d’écran de la source d’un journal de coopérative (2022)"
  186. loading="lazy" width="2586" height="952" />
  187. </a>
  188. <a href="#_" class="lightbox" id="journal-2022-scopyleft">
  189. <img src="/static/david/2022/journal-2022-scopyleft.png" alt="Capture d’écran de la source d’un journal de coopérative (2022)"
  190. loading="lazy" width="2586" height="952" />
  191. </a>
  192. <figcaption>Capture d’écran de la source d’un journal de coopérative en&nbsp;2022</figcaption>
  193. </figure>
  194. <p>Celui-ci avait encore une fois le double intérêt de partager mes expérimentations avec les membres du collectif et de comptabiliser le temps passé pour d’éventuelles productions immobilisées (du jargon pour dire que je crée de la valeur pour l’entreprise). La porte est ouverte, dans ce moteur de blog/site statique, pour que d’autres personnes puissent participer bien que cela n’ait pas encore été le&nbsp;cas.</p>
  195. <p>Ce journal a tout particulièrement pour objectif de générer des discussions et d’expliquer les attentes et frustrations autour des produits. Certaines entrées sont très techniques, d’autres davantage un résumé du cheminement. Je rédige souvent des entrées en pensant à une personne particulière de la coopérative qui pourrait le lire et y trouver des petites&nbsp;graines.</p>
  196. <p>Le fait d’être en décalage de six heures avec les autres membres me fait davantage utiliser l’écrit et l’asynchrone pour certaines tâches comme le développement pur, cela influence probablement mon attirance pour ces traces numériques. Il n’est pas toujours aisé de travailler côte à côte lorsqu’un océan les&nbsp;sépare.</p>
  197. <h2 id="la-suite">La suite&#8239;? <a href="#la-suite" title="Ancre vers cette partie">#</a></h2><p>Je ne sais pas de quoi mon prochain journal sera fait. La seule certitude que je peux avoir est qu’il existera. J’espère qu’il continuera à s’adapter à mes besoins et à ceux des équipes car c’est aussi un espace de jeu autour du partage et d’une autre forme de&nbsp;travail.</p>
  198. <p>Je vous invite à inventer le vôtre, qui vous correspondra et qui en inspirera d’autres. Peut-être que de nouvelles façons de faire émergeront, des dessins, un <a href="https://fr.wikipedia.org/wiki/%C3%89tudes_du_f%C5%93tus_dans_l%27ut%C3%A9rus">schéma</a>, une photo, un <em>haïku</em>, une <a href="https://simonwillison.net/2022/Nov/26/productivity/"><em>issue</em></a>&nbsp;(<a href="/david/cache/2022/747b97ed378bc3b334ab6375346a13fa/">cache</a>), tout est&nbsp;possible.</p>
  199. <h2 id="epilogue">Épilogue <a href="#epilogue" title="Ancre vers cette partie">#</a></h2><p>Depuis cette année, l’enfant de 9&nbsp;ans qui vit avec moi rédige ce qu’iels appellent dans sa classe des «&nbsp;traces d’études&nbsp;», ce qui correspond à une page de résumé des apprentissages pour la semaine en&nbsp;cours.</p>
  200. <p>Il n’est jamais trop tôt pour&nbsp;commencer&#8239;!</p>
  201. <figure>
  202. <a href="#journal-2022-traces"
  203. title="Cliquer pour une version haute résolution">
  204. <img src="/static/david/2022/journal-2022-traces.jpg" alt="Photo d’un cahier avec des traces d’études (2022)"
  205. loading="lazy" width="1512" height="1917" />
  206. </a>
  207. <a href="#_" class="lightbox" id="journal-2022-traces">
  208. <img src="/static/david/2022/journal-2022-traces.jpg" alt="Photo d’un cahier avec des traces d’études (2022)"
  209. loading="lazy" width="1512" height="1917" />
  210. </a>
  211. <figcaption>Une photo du cahier avec des traces&nbsp;d’études.</figcaption>
  212. </figure>
  213. <p><em>Merci à Émilie et Roch pour leurs relectures attentives et&nbsp;enthousiastes.</em></p>
  214. <nav>
  215. <p class="center">
  216. <a rel="prev" href="/david/2022/11/27/" title="Publication précédente : Neuf">← Précédent</a> •
  217. <a href="/david/2022/" title="Liste des publications récentes">↑ En 2022</a>
  218. • <a rel="next" href="/david/2022/12/22/" title="Publication suivante : Marcher">Suivant →</a>
  219. </p>
  220. </nav>
  221. </article>
  222. <hr>
  223. <footer>
  224. <p>
  225. <nobr>
  226. <a href="/david/" title="Aller à l’accueil"
  227. ><svg class="icon icon-home">
  228. <use
  229. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  230. ></use>
  231. </svg>
  232. Accueil</a
  233. >
  234. </nobr>
  235. <nobr>
  236. <a href="/david/log/" title="Accès au flux RSS"
  237. ><svg class="icon icon-rss2">
  238. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  239. </svg>
  240. Suivre</a
  241. >
  242. </nobr>
  243. <nobr>
  244. <a href="http://larlet.com" title="Go to my English profile" data-instant
  245. ><svg class="icon icon-user-tie">
  246. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  247. </svg>
  248. Pro</a
  249. >
  250. </nobr>
  251. <nobr>
  252. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"
  253. ><svg class="icon icon-mail">
  254. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  255. </svg>
  256. Email</a
  257. >
  258. </nobr>
  259. <nobr>
  260. <abbr
  261. class="nowrap"
  262. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"
  263. ><svg class="icon icon-hammer2">
  264. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  265. </svg>
  266. Légal</abbr
  267. >
  268. </nobr>
  269. </p>
  270. <template id="theme-selector">
  271. <form>
  272. <fieldset>
  273. <legend><svg class="icon icon-brightness-contrast">
  274. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  275. </svg> Thème</legend>
  276. <label>
  277. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  278. </label>
  279. <label>
  280. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  281. </label>
  282. <label>
  283. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  284. </label>
  285. </fieldset>
  286. </form>
  287. </template>
  288. </footer>
  289. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  290. <script>
  291. function loadThemeForm(templateName) {
  292. const themeSelectorTemplate = document.querySelector(templateName)
  293. const form = themeSelectorTemplate.content.firstElementChild
  294. themeSelectorTemplate.replaceWith(form)
  295. form.addEventListener('change', (e) => {
  296. const chosenColorScheme = e.target.value
  297. localStorage.setItem('theme', chosenColorScheme)
  298. toggleTheme(chosenColorScheme)
  299. })
  300. const selectedTheme = localStorage.getItem('theme')
  301. if (selectedTheme && selectedTheme !== 'undefined') {
  302. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  303. }
  304. }
  305. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  306. window.addEventListener('load', () => {
  307. let hasDarkRules = false
  308. for (const styleSheet of Array.from(document.styleSheets)) {
  309. let mediaRules = []
  310. for (const cssRule of styleSheet.cssRules) {
  311. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  312. continue
  313. }
  314. // WARNING: Safari does not have/supports `conditionText`.
  315. if (cssRule.conditionText) {
  316. if (cssRule.conditionText !== prefersColorSchemeDark) {
  317. continue
  318. }
  319. } else {
  320. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  321. continue
  322. }
  323. }
  324. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  325. }
  326. // WARNING: do not try to insert a Rule to a styleSheet you are
  327. // currently iterating on, otherwise the browser will be stuck
  328. // in a infinite loop…
  329. for (const mediaRule of mediaRules) {
  330. styleSheet.insertRule(mediaRule.cssText)
  331. hasDarkRules = true
  332. }
  333. }
  334. if (hasDarkRules) {
  335. loadThemeForm('#theme-selector')
  336. }
  337. })
  338. </script>
  339. </body>
  340. </html>