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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  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 est un brouillon, pas encore publié. Vous êtes invité·e à NE PAS le partager pour l’instant. 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. <nobr>
  60. <a href="/david/" title="Aller à l’accueil"
  61. ><svg class="icon icon-home">
  62. <use
  63. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  64. ></use>
  65. </svg>
  66. Accueil</a
  67. >
  68. </nobr>
  69. <nobr>
  70. <a href="/david/recherche/" title="Aller à la page de recherche"
  71. ><svg class="icon icon-search">
  72. <use
  73. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search"
  74. ></use>
  75. </svg>
  76. Recherche</a
  77. >
  78. </nobr>
  79. </p>
  80. </nav>
  81. <hr>
  82. <p><em>Cet article est un brouillon, pas encore publié. Vous êtes invité·e à NE PAS le partager pour l’instant. Merci.</em></p>
  83. <details>
  84. <summary>Proposition 24&nbsp;jours de web</summary>
  85. <blockquote>
  86. <p>Je vous propose un article sur ma pratique d’un journal professionnel. Je ne cherche pas à élargir mon audience et je suis conscient que mes privilèges facilitent la diffusion de mes idées et que je suis en capacité de publier mes pensées. Si vous avez d’autres propositions d’articles issues de personnes moins représentées, je leur cède bien volontiers ma place. Ce contenu sera de toute façon en ligne, soit en même temps, soit avec un délai à définir, sur mon propre espace de&nbsp;publication.</p>
  87. <p>Aussi, je peux servir d’article bouche-trou s’il y a un désistement de dernière minute. Je suis volontaire pour participer à la relecture d’autres propositions plus ou moins&nbsp;techniques.</p>
  88. </blockquote>
  89. </details>
  90. <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>
  91. <h2 id="prologue">Prologue <a href="#prologue" title="Ancre vers cette partie">#</a></h2><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 influé aussi dans cette routine&nbsp;d’écriture.</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 data.gouv.fr et c’est étrange d’avoir commencé en cours de mission mais ça correspond aussi à mon arrivée au Québec ce qui 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&nbsp;article.</em></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 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. 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>Plus récemment, j’ai introduit 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>
  121. <p>Je remarque au cours de l’évolution dans le temps du format du journal 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>
  122. <figure>
  123. <a href="#journal-2022-stylo"
  124. title="Cliquer pour une version haute résolution">
  125. <img src="/static/david/2022/journal-2022-stylo.png" alt="Capture d’écran d’un journal récent (2022)"
  126. loading="lazy" width="1366" height="1698" />
  127. </a>
  128. <a href="#_" class="lightbox" id="journal-2022-stylo">
  129. <img src="/static/david/2022/journal-2022-stylo.png" alt="Capture d’écran d’un journal récent (2022)"
  130. loading="lazy" width="1366" height="1698" />
  131. </a>
  132. <figcaption>Capture d’écran d’un journal quotidien en&nbsp;2022</figcaption>
  133. </figure>
  134. <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>
  135. <figure>
  136. <a href="#journal-2022-stylo-source"
  137. title="Cliquer pour une version haute résolution">
  138. <img src="/static/david/2022/journal-2022-stylo-source.png" alt="Capture d’écran de la source d’un journal récent (2022)"
  139. loading="lazy" width="2982" height="880" />
  140. </a>
  141. <a href="#_" class="lightbox" id="journal-2022-stylo-source">
  142. <img src="/static/david/2022/journal-2022-stylo-source.png" alt="Capture d’écran de la source d’un journal récent (2022)"
  143. loading="lazy" width="2982" height="880" />
  144. </a>
  145. <figcaption>Capture d’écran de la source d’un journal quotidien en&nbsp;2022</figcaption>
  146. </figure>
  147. <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>
  148. <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&nbsp;instantanée.</p>
  149. <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 échouer) à 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 aussi des bouts de code plus technique avant de les externaliser vers un <a href="https://code.larlet.fr/">espace public dédié</a>.</p>
  150. <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>
  151. <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 pas trop techniques mon métier soit un peu plus tangible et le fait de raconter les différents errements et recherches technologiques participe à sa compréhension. Lorsqu’on facture au temps passé et qui plus est à distance, la confiance s’installe également par la&nbsp;transparence.</p>
  152. <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 connaissance afin de ne pas devenir un·e gardien·ne du temple mais aussi une soupape&nbsp;émotionnelle&#8239;!</p>
  153. <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 c’est qu’il&nbsp;existera.</p>
  154. <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, une photo, un <em>haïku</em>, tout est&nbsp;possible.</p>
  155. <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’ils appellent dans sa classe des «&nbsp;traces d’écritures&nbsp;», ce qui correspond à une page de résumé des apprentissages pour la semaine en&nbsp;cours.</p>
  156. <p>Il n’est jamais trop tôt pour&nbsp;commencer&#8239;!</p>
  157. <figure>
  158. <a href="#journal-2022-traces"
  159. title="Cliquer pour une version haute résolution">
  160. <img src="/static/david/2022/journal-2022-traces.jpg" alt="Photo d’un cahier avec des traces d’écritures (2022)"
  161. loading="lazy" width="1512" height="1917" />
  162. </a>
  163. <a href="#_" class="lightbox" id="journal-2022-traces">
  164. <img src="/static/david/2022/journal-2022-traces.jpg" alt="Photo d’un cahier avec des traces d’écritures (2022)"
  165. loading="lazy" width="1512" height="1917" />
  166. </a>
  167. <figcaption>Une photo du cahier avec des traces&nbsp;d’écritures.</figcaption>
  168. </figure>
  169. <nav>
  170. <p class="center">
  171. <a href="/david/2022/" title="Liste des publications récentes">↑ En 2022</a>
  172. </p>
  173. </nav>
  174. </article>
  175. <hr>
  176. <footer>
  177. <p>
  178. <nobr>
  179. <a href="/david/" title="Aller à l’accueil"
  180. ><svg class="icon icon-home">
  181. <use
  182. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  183. ></use>
  184. </svg>
  185. Accueil</a
  186. >
  187. </nobr>
  188. <nobr>
  189. <a href="/david/log/" title="Accès au flux RSS"
  190. ><svg class="icon icon-rss2">
  191. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  192. </svg>
  193. Suivre</a
  194. >
  195. </nobr>
  196. <nobr>
  197. <a href="http://larlet.com" title="Go to my English profile" data-instant
  198. ><svg class="icon icon-user-tie">
  199. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  200. </svg>
  201. Pro</a
  202. >
  203. </nobr>
  204. <nobr>
  205. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"
  206. ><svg class="icon icon-mail">
  207. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  208. </svg>
  209. Email</a
  210. >
  211. </nobr>
  212. <nobr>
  213. <abbr
  214. class="nowrap"
  215. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"
  216. ><svg class="icon icon-hammer2">
  217. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  218. </svg>
  219. Légal</abbr
  220. >
  221. </nobr>
  222. </p>
  223. <template id="theme-selector">
  224. <form>
  225. <fieldset>
  226. <legend><svg class="icon icon-brightness-contrast">
  227. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  228. </svg> Thème</legend>
  229. <label>
  230. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  231. </label>
  232. <label>
  233. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  234. </label>
  235. <label>
  236. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  237. </label>
  238. </fieldset>
  239. </form>
  240. </template>
  241. </footer>
  242. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  243. <script>
  244. function loadThemeForm(templateName) {
  245. const themeSelectorTemplate = document.querySelector(templateName)
  246. const form = themeSelectorTemplate.content.firstElementChild
  247. themeSelectorTemplate.replaceWith(form)
  248. form.addEventListener('change', (e) => {
  249. const chosenColorScheme = e.target.value
  250. localStorage.setItem('theme', chosenColorScheme)
  251. toggleTheme(chosenColorScheme)
  252. })
  253. const selectedTheme = localStorage.getItem('theme')
  254. if (selectedTheme && selectedTheme !== 'undefined') {
  255. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  256. }
  257. }
  258. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  259. window.addEventListener('load', () => {
  260. let hasDarkRules = false
  261. for (const styleSheet of Array.from(document.styleSheets)) {
  262. let mediaRules = []
  263. for (const cssRule of styleSheet.cssRules) {
  264. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  265. continue
  266. }
  267. // WARNING: Safari does not have/supports `conditionText`.
  268. if (cssRule.conditionText) {
  269. if (cssRule.conditionText !== prefersColorSchemeDark) {
  270. continue
  271. }
  272. } else {
  273. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  274. continue
  275. }
  276. }
  277. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  278. }
  279. // WARNING: do not try to insert a Rule to a styleSheet you are
  280. // currently iterating on, otherwise the browser will be stuck
  281. // in a infinite loop…
  282. for (const mediaRule of mediaRules) {
  283. styleSheet.insertRule(mediaRule.cssText)
  284. hasDarkRules = true
  285. }
  286. }
  287. if (hasDarkRules) {
  288. loadThemeForm('#theme-selector')
  289. }
  290. })
  291. </script>
  292. </body>
  293. </html>