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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  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. Tag #partage
  14. — David Larlet</title>
  15. <meta name="description" content="Publications relatives au tag #partage">
  16. <!-- That good ol' feed, subscribe :). -->
  17. <link rel="alternate"
  18. type="application/atom+xml"
  19. title="Feed"
  20. href="/david/log/">
  21. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  22. <link rel="apple-touch-icon"
  23. sizes="180x180"
  24. href="/static/david/icons2/apple-touch-icon.png">
  25. <link rel="icon"
  26. type="image/png"
  27. sizes="32x32"
  28. href="/static/david/icons2/favicon-32x32.png">
  29. <link rel="icon"
  30. type="image/png"
  31. sizes="16x16"
  32. href="/static/david/icons2/favicon-16x16.png">
  33. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  34. <link rel="mask-icon"
  35. href="/static/david/icons2/safari-pinned-tab.svg"
  36. color="#07486c">
  37. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  38. <meta name="msapplication-TileColor" content="#f7f7f7">
  39. <meta name="msapplication-config"
  40. content="/static/david/icons2/browserconfig.xml">
  41. <meta name="theme-color"
  42. content="#f7f7f7"
  43. media="(prefers-color-scheme: light)">
  44. <meta name="theme-color"
  45. content="#272727"
  46. media="(prefers-color-scheme: dark)">
  47. <!-- Documented, feel free to shoot an email. -->
  48. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  49. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  50. <link rel="preload"
  51. href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2"
  52. as="font"
  53. type="font/woff2"
  54. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  55. crossorigin>
  56. <link rel="preload"
  57. href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2"
  58. as="font"
  59. type="font/woff2"
  60. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  61. crossorigin>
  62. <link rel="preload"
  63. href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2"
  64. as="font"
  65. type="font/woff2"
  66. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  67. crossorigin>
  68. <link rel="preload"
  69. href="/static/david/css/fonts/triplicate_t3_regular.woff2"
  70. as="font"
  71. type="font/woff2"
  72. media="(prefers-color-scheme: dark)"
  73. crossorigin>
  74. <link rel="preload"
  75. href="/static/david/css/fonts/triplicate_t3_bold.woff2"
  76. as="font"
  77. type="font/woff2"
  78. media="(prefers-color-scheme: dark)"
  79. crossorigin>
  80. <link rel="preload"
  81. href="/static/david/css/fonts/triplicate_t3_italic.woff2"
  82. as="font"
  83. type="font/woff2"
  84. media="(prefers-color-scheme: dark)"
  85. crossorigin>
  86. <script>
  87. function toggleTheme(themeName) {
  88. document.documentElement.classList.toggle(
  89. 'forced-dark',
  90. themeName === 'dark'
  91. )
  92. document.documentElement.classList.toggle(
  93. 'forced-light',
  94. themeName === 'light'
  95. )
  96. }
  97. const selectedTheme = localStorage.getItem('theme')
  98. if (selectedTheme !== 'undefined') {
  99. toggleTheme(selectedTheme)
  100. }
  101. </script>
  102. <style type="text/css">
  103. details[open] summary {
  104. display: none;
  105. }
  106. </style>
  107. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick"
  108. data-instant-intensity="viewport-all">
  109. <header>
  110. <h1>Publications relatives au tag #partage</h1>
  111. </header>
  112. <nav>
  113. <p class="center">
  114. <a href="/david/" title="Aller à l’accueil">
  115. <svg class="icon icon-home">
  116. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  117. </svg>
  118. Accueil</a>
  119. • <a rel="tags"
  120. href="/david/#tags-2023"
  121. title="Liste de toutes les étiquettes">
  122. <svg class="icon icon-tags">
  123. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-tags"></use>
  124. </svg>
  125. Étiquettes</a>
  126. </p>
  127. </nav>
  128. <hr>
  129. <main>
  130. <p>Les plus récentes en premier, les 3 premières sont dépliées et ensuite c’est à la demande, bonne exploration !</p>
  131. <h2>
  132. <a href="/david/2023/09/13/" title="Lien permanent vers cet article">Documentation</a> (2023-09-13)
  133. </h2>
  134. <blockquote lang="en">
  135. <p>The deeper I dig into my research, the more case studies and examples I find. Institutional memory is frequently overlooked and undervalued - until the moment when someone needs access to memory right now, and of course by then it’s too late. Good remembering means turning tacit knowledge into explicit knowledge; <mark>if all your tacit knowledge has left the building inside the heads of former colleagues, it’s lost to you&nbsp;forever.</mark></p>
  136. <p>So I think there’s a case for allowing and encouraging documentation for teams, just as much as documentation for software. Writing that documentation is a task, It needs to be part of someone’s job. Every organisation needs a little bit of storytelling capability, to help make that job&nbsp;easier.</p>
  137. <p><cite><em><a href="https://gilest.org/htr.html">How teams remember</a></em>&nbsp;(<a href="/david/cache/2023/5a9fa7db62f151b8a863b949ed4e9e5f/">cache</a>)</cite></p>
  138. </blockquote>
  139. <p>J’ai développé un outil pour Scopyleft l’année dernière qui s’intitule «&nbsp;Le Voilier&nbsp;». Il s’agit d’un lieux où l’on consigne nos discussions, propositions et résolutions. C’était important car il y avait pas mal de perte/dilution d’information orale, ce qui est classique en équipes distribuées qui grandissent. Depuis un an et demi, il y a 381&nbsp;sujets qui ont été consignés dans ce <a href="/david/2022/12/19/">journal</a> de bord collectif, c’est un outil vivant. Des fonctionnalités bourgeonnent ou passent au compost au gré des besoins, c’est assez plaisant d’avoir la flexibilité de connaître le générateur du site (350&nbsp;lignes de Python à ce jour) et de pouvoir sortir du cadre sans que ce soit trop&nbsp;douloureux.</p>
  140. <p>Cela a commencé avec un site totalement statique qui était (re)construit par l’intégration continue à chaque ajout de fichier <em>markdown</em> avec les bonnes méta-données dans un dossier dédié. Classique. C’était facile pour les personnes familières de git(lab) mais moins pratique pour celles qui ne le sont pas, notamment lorsqu’il faut prendre des notes en séance. L’expérience utilisateur·ice des forges logicielles n’est pas vraiment adaptée à un tel usage, surtout dans un contexte de charge cognitive&nbsp;élevée.</p>
  141. <p>J’ai donc transformé cela en site <em>semynamique</em> 🌱&nbsp;: on reste sur la même infrastructure mais je rajoute un formulaire (toujours statique) qui va soumettre les données vers une seule fonction Python/wsgi qui consiste à créer le fichier <em>markdown</em> conforme aux attentes de l’outil et à le pousser sur le dépôt. Cela a rendu l’outil plus accessible et avenant. Depuis, j’ai décliné ce principe pour d’autres <em>scenarii</em> avec de bons&nbsp;retours.</p>
  142. <p>Avec l’expérience et un petit script de déploiement, cela me prend moins d’une heure à mettre en place sur AlwaysData avec un strict minimum de maintenance. J’ai une relative tranquillité d’esprit aussi car seule une petite partie du site serait inutilisable si le service tombait et il reste la possibilité d’ajouter des fichiers dans git à la main s’il y avait une&nbsp;urgence.</p>
  143. <p>Je ne sais pas trop quoi faire à partir de là, je me dis que ça pourrait en inspirer d’autres. Entre les sites purement statiques et les usines à gaz en JS, il y a tout un dégradé de couleurs enthousiasmantes, certaines restant à&nbsp;découvrir&#8239;!</p>
  144. <p><em>Peut-être qu’à un moment, on pourrait aussi proposer un catalogue d’outils utiles aux coopératives — à l’instar de <a href="https://paheko.cloud/">Paheko</a> pour les&nbsp;associations…</em></p>
  145. <hr />
  146. <blockquote>
  147. <p>🏡 Une grande partie de mon entourage est déjà propriétaire. Ça en dit long sur la sphère dans laquelle j’évolue. J’ai l’impression que le fait d’acheter une maison fait partie de la liste non-négociable d’une vie réussie dans notre monde capitaliste. Jusqu’à très récemment, je n’avais jamais interrogé ce&nbsp;postulat.</p>
  148. <p><cite><em><a href="https://ynote.hk/mots/argent/propriete.html">Propriété par Fanny Cheung</a></em>&nbsp;(<a href="/david/cache/2023/37b0c9d01d6f788bee398b64377cb6c1/">cache</a>)</cite></p>
  149. </blockquote>
  150. <blockquote lang="en">
  151. <p>🔨 Yes, it’s fair to point out that AI in its many different software manifestations can be considered a tool. But that is not the point of the statement. The word to watch out for is “just”. If someone were to say ”it’s a tool”, that makes sense. But the word “just” is there to shed&nbsp;accountability.</p>
  152. <p>Hence my concern is that the statement itself removes accountability and consideration for the bigger picture effects. <mark>Saying something is just a tool creates the faulty mental model</mark> of all tools having interchangeable qualities from an ethical perspective, which simply isn’t&nbsp;true.</p>
  153. <p><cite><em><a href="https://axbom.com/hammer-ai/">If a hammer was like AI…</a></em>&nbsp;(<a href="/david/cache/2023/aac3c4716f9ff73e7409ecbc9550491b/">cache</a>)</cite></p>
  154. </blockquote>
  155. <blockquote lang="en">
  156. <p>💯 When it comes to front-end development, I’m worried that we’ve reached a state where the more complex over-engineered approach is viewed as the&nbsp;default.</p>
  157. <p>I may be committing a fundamental attribution error here, but I think that we’ve reached this point not because of any consideration for users, but rather <mark>because of how it makes us developers feel.</mark> Perhaps building an old-fashioned website that uses HTML for navigations feels too easy, like it’s beneath us. But building an “app” that requires JavaScript just to render text on a screen feels like <em>real</em>&nbsp;programming.</p>
  158. <p><cite><em><a href="https://adactio.com/journal/20442">Multi-page web apps</a></em>&nbsp;(<a href="/david/cache/2023/efc348f6559d55129657c7ba9d740b76/">cache</a>)</cite></p>
  159. </blockquote>
  160. <h2>
  161. <a href="/david/2023/03/13/" title="Lien permanent vers cet article">Traditions</a> (2023-03-13)
  162. </h2>
  163. <blockquote lang="en">
  164. <p>Documents are documents. Books are books, recordings are recordings, and so on. As time has gone on, though, I’ve observed the probably obvious-to-others fact that <strong>Lore</strong> is the grease between the concrete blocks of knowledge, the carved step in an otherwise impossible-to-scale mountain, the small bit of powder sprinkled through a workspace to ensure sparks don’t fly and things don’t burn. Inconceivably odd to the outsider, but vital to the dedicated or intense practice of the&nbsp;craft.</p>
  165. <p>Certainly, the ideal situation is lore is inlaid into a framework of knowledge. […]</p>
  166. <p><mark>The danger in this process, the potential lost ballast in the rise to the skies, is that the lore-to-knowledge transfer is lossy, messy, and arbitrary.</mark> Maybe those in the know want to keep the information to themselves, so it won’t be given to whoever the person or persons are who are laying down the written form. Maybe the chronicler of information has blind spots they don’t know about and not enough people to correct them. Or, more likely, you have to set the “noise filter” of the information to not go down the rabbit and rat holes of contingencies that maybe a dozen or two people will even want to know about, to the favor of that which <em>everyone</em> will need. The outcome is always the same: Lore loses in the long&nbsp;run.</p>
  167. <p><cite><em><a href="http://ascii.textfiles.com/archives/5509">Discord, or the Death of Lore «&nbsp;ASCII by Jason Scott</a></em>&nbsp;(<a href="/david/cache/2023/f6e269f9a6e16436827169039d551623/">cache</a>)</cite></p>
  168. </blockquote>
  169. <p>La documentation des us et coutumes, des pratiques culturelles, de façon numérique est un vrai défi. Surtout pour les personnes qui sont plutôt de culture orale dans leur façon de&nbsp;transmettre.</p>
  170. <p>Ce n’est pas mon cas mais je me retiens toujours de <em>lutter contre</em> en proposant des outils complémentaires qui viennent enrichir la souvenance que l’on peut avoir d’un échange. Un <a href="/david/2022/12/19/">journal</a>, une notice, un billet de blog, qu’importe le format pourvu que l’on ait une URL pérenne qui puisse être&nbsp;référencée.</p>
  171. <p>Cela me prend du temps, mais bien moins que de devoir reprendre les échanges de zéro. Ou de faire un peu trop confiance à l’interprétation faite par ma propre&nbsp;mémoire&#8239;!</p>
  172. <hr />
  173. <p>J’essaye <a href="https://hazeover.com/">HazeOver</a> depuis maintenant une semaine et je me demande comment ça n’est pas une fonctionnalité par défaut de macOS. Je n’ai aucune fenêtre maximisée et j’ai un écran relativement grand, cet outil me permet de focaliser sur la fenêtre en cours. Lors du partage d’écran complet en visio (pour alterner code/navigateur par exemple), un coup de scroll sur l’icône dans la barre du haut et hop on ne voit que la fenêtre active avec un fond&nbsp;noir.</p>
  174. <p>Autre test du moment&nbsp;: <a href="https://sindresorhus.com/folder-peek">Folder Peek</a>, Sindre Sorhus fait plein d’autres <a href="https://sindresorhus.com/apps">petits outils intéressants</a>.</p>
  175. <hr />
  176. <p>Parce qu’il n’y a pas de raisons que ça soit restreint à un public&nbsp;mastodon&nbsp;:</p>
  177. <blockquote>
  178. <p>Pour rappel&nbsp;: si vous souhaitez proposer un sujet pour une conférence comme <a href="https://mamot.fr/@ParisWeb">@ParisWeb</a> ou <a href="https://piaille.fr/@sudweb">@sudweb</a> je me propose de vous accompagner dans la démarche, surtout si vous faites partie d’une population peu représentée dans ces évènements (cette formulation est probablement maladroite mais j’espère que vous voyez&nbsp;l’idée).</p>
  179. <p>🤗</p>
  180. <p><cite><a href="https://fedi.larlet.fr/@david/109993800837974664">Proposition du&nbsp;9&nbsp;mars</a></cite></p>
  181. </blockquote>
  182. <hr />
  183. <blockquote lang="en">
  184. <p>👴 According to the most recent StackOverflow survey, half of the developer population started their careers within the last 9&nbsp;years, which is to say, <mark>half of all web developers have never known a world without&nbsp;React.</mark></p>
  185. <p>It’s even highly likely that they were taught web development via React or that they have never built a site any other way. They were told by their teachers, then by recruiters and then by their employers that React was the way you build web sites, and they invested their careers in it&nbsp;accordingly.</p>
  186. <p><cite><em><a href="https://remotesynthesis.com/blog/the-price-of-developer-tools/">The Price Developers Pay for Loving Their Tools Too Much</a></em>&nbsp;(<a href="/david/cache/2023/339a862f8939f7ba8ae1524fa14f94c2/">cache</a>)</cite></p>
  187. </blockquote>
  188. <blockquote>
  189. <p>😔 Il s’agit de la tendance qu’ont les gens à graviter vers ou être attirés par ceux qui leur sont similaires en apparence, croyances, origine. Un effet de bord pernicieux ou même vicieux est la tendance à éviter ou même détester les gens ou les groupes qui sont&nbsp;différents.</p>
  190. <p>Puisque le milieu professionnel est dominé par les mâles blancs, ce biais affecte les femmes, d’autant plus si elles sont de couleur. <mark>C’est le biais qui fait le plus de détriment aux femmes au travail</mark>&nbsp;: décisions de recrutement injustes, promotions inéquitables, idées balayées ou&nbsp;volées.</p>
  191. <p><cite><em><a href="https://koalie.blog/2023/03/11/ces-stereotypes-qui-nuisent-aux-femmes-au-travail/">Ces stéréotypes qui nuisent aux femmes au travail</a></em>&nbsp;(<a href="/david/cache/2023/6c69f245e09fb696b43afa54240b4148/">cache</a>)</cite></p>
  192. </blockquote>
  193. <blockquote lang="en">
  194. <p>📷 Having my phone in my pocket doesn’t trigger anything but distraction. It can do everything, and so I feel nothing in particular about it. A physical camera takes photos, but it also makes me think about seeing. And I like&nbsp;that.</p>
  195. <p><cite><em><a href="https://macwright.com/2017/11/03/carrying-a-camera.html">Carrying a camera</a></em>&nbsp;(<a href="/david/cache/2023/c9925184359c01c5c077be55b7cd6505/">cache</a>)</cite></p>
  196. </blockquote>
  197. <blockquote>
  198. <p>😢 Et je suis fatiguée de cette société qui est incapable de croire les femmes. Combien faudra t-il encore de vidéos ou témoignage où un homme se retrouve, volontairement ou par accident, à la place d’une femme&#8239;? Pour se rendre compte qu’en fait oui c’est violent ce que vivent les femmes et que ce qu’elles dénoncent c’est vrai et&nbsp;systémique.</p>
  199. <p>Je ne peux m’empêcher de penser que si j’avais été un homme ma carrière serait plus avancée aujourd’hui, mon salaire supérieur et ma santé mentale bien&nbsp;meilleure.</p>
  200. <p><cite><em><a href="https://www.duchess-france.fr/coup%20de%20gueule/sexisme/2023/03/06/stupeur-et-trembements.html">Stupeur et tremblements&nbsp;: comment faire fuir les développeuses expérimentées.</a></em>&nbsp;(<a href="/david/cache/2023/25d41d569f637f8342c495139ccce8a8/">cache</a>)</cite></p>
  201. </blockquote>
  202. <blockquote lang="en">
  203. <p>✍️ That is against our purposes here. A blog post is <em>a search query</em>. <mark>You write to find your tribe;</mark> you write so they will know what kind of fascinating things they should route to your inbox. If you follow common wisdom, you will cut exactly the things that will help you find these&nbsp;people.</p>
  204. <p><cite><em><a href="https://escapingflatland.substack.com/p/search-query">A blog post is a very long and complex search query to find fascinating people and make them route interesting stuff to your inbox</a></em>&nbsp;(<a href="/david/cache/2023/5bea097a2dba65380cf43adf2df540f8/">cache</a>)</cite></p>
  205. </blockquote>
  206. <blockquote lang="en">
  207. <p>🤔 Fact we’re in the ’Twenties’ sounds so weird. It’s so synonymous with the 1920s. Sounds like a bygone era when women were still fighting for their rights, the upper classes were living a life of hedonism whilst people starved &amp; the world was on the verge of financial ruin and&nbsp;war.</p>
  208. <p><cite>Une capture d’écran de @BeardedGenius vue sur mastodon. 2023.</cite></p>
  209. </blockquote>
  210. <h2>
  211. <a href="/david/2023/01/11/" title="Lien permanent vers cet article">Suspendu</a> (2023-01-11)
  212. </h2>
  213. <p>On discute de moyens de monétiser et échanger des choses plus ou moins artistiques avec <a href="https://ynote.hk/">Fanny</a>. Je me demande si le troc d’une œuvre contre une journée de développement dédiée à une asso/un produit militant·e serait&nbsp;envisageable.</p>
  214. <p>En allant plus loin, est-ce que je peux me dire que j’ai des journées de développement suspendues pour chaque facture émise&#8239;? Un peu à la manière des dons défiscalisés&nbsp;: tu m’achètes 3&nbsp;jours de développement et j’en offre 1&nbsp;à une asso que l’on choisit&nbsp;ensemble.</p>
  215. <p>Une journée par-ci par-là ce n’est peut-être pas très utile mais s’il y a un espace pour centraliser ces disponibilités et proposer une aide un peu plus construite ça peut potentiellement être une base de discussion avec les structures qui en auraient besoin&#8239;? Est-ce qu’à la manière de <a href="https://copiepublique.fr/">CopiePublique</a> il y aurait de la place pour un&nbsp;MécénatDeCompétencesPublic&#8239;?</p>
  216. <hr />
  217. <p>Parfois, je me dis qu’il faudrait que j’arrête de publier du flux pour me concentrer sur des articles de fond comme arrivent à le faire <a href="https://ciechanow.ski/archives/">Bartosz Ciechanowski</a>, <a href="https://www.joshwcomeau.com/tutorials/">Josh Comeau</a> ou <a href="https://explained-from-first-principles.com/">Explained from First Principles</a>.</p>
  218. <p>Écrire un article <a href="/david/2022/12/15/">un peu plus long</a> que la moyenne me demande tout de même un effort plus important. Bien davantage que la somme de billets totalisant la même&nbsp;taille.</p>
  219. <p>Est-ce que des traductions seraient déjà un premier&nbsp;pas&#8239;?</p>
  220. <hr />
  221. <p>Je me suis réveillé il y a quelques jours avec cette citation et ça me fait&nbsp;cogiter&nbsp;:</p>
  222. <blockquote>
  223. <p>Ceux qui optent pour le moindre mal tendent très vite à oublier qu’ils ont choisi le&nbsp;mal.</p>
  224. <p><cite><em>Hannah&nbsp;Arendt</em></cite></p>
  225. </blockquote>
  226. <hr />
  227. <blockquote>
  228. <p>J’encourage à débuter par un <em>petit</em> espace-temps pour <em>jouer</em> avec peu&nbsp;d’enjeux.</p>
  229. <p>Se dire qu’on essaye un mois pour voir. Sur un petit sujet, <mark>rencontre entre les personnes à aider et ce qui vous enthousiasme.</mark> Ou de démarrer avec quelque chose de présent dans votre tête depuis longtemps — cette association au coin de la rue, celle dont on lit le journal avec intérêt ou cette étiquette qui attire notre attention au marché&nbsp;fermier.</p>
  230. <p><cite><em><a href="https://www.24joursdeweb.fr/2022/tjm-tarif-journalier-militant/">TJM - le Taux Journalier Militant</a></em>&nbsp;(<a href="/david/cache/2023/1fb96c68665818ad66939956b9c4188c/">cache</a>)</cite></p>
  231. </blockquote>
  232. </main>
  233. <hr>
  234. <footer>
  235. <p>
  236. <nobr>
  237. <a href="/david/" title="Aller à l’accueil">
  238. <svg class="icon icon-home">
  239. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
  240. </svg>
  241. Accueil</a>
  242. </nobr>
  243. <nobr>
  244. <a href="/david/log/" title="Accès au flux RSS">
  245. <svg class="icon icon-rss2">
  246. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  247. </svg>
  248. Suivre</a>
  249. </nobr>
  250. <nobr>
  251. <a href="http://larlet.com"
  252. title="Go to my English profile"
  253. data-instant>
  254. <svg class="icon icon-user-tie">
  255. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  256. </svg>
  257. Pro</a>
  258. </nobr>
  259. <nobr>
  260. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">
  261. <svg class="icon icon-mail">
  262. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  263. </svg>
  264. Email</a>
  265. </nobr>
  266. <nobr>
  267. <abbr class="nowrap"
  268. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">
  269. <svg class="icon icon-hammer2">
  270. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  271. </svg>
  272. Légal</abbr>
  273. </nobr>
  274. </p>
  275. <template id="theme-selector">
  276. <form>
  277. <fieldset>
  278. <legend>
  279. <svg class="icon icon-brightness-contrast">
  280. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  281. </svg>
  282. Thème
  283. </legend>
  284. <label>
  285. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  286. Auto
  287. </label>
  288. <label>
  289. <input type="radio" value="dark" name="chosen-color-scheme">
  290. Foncé
  291. </label>
  292. <label>
  293. <input type="radio" value="light" name="chosen-color-scheme">
  294. Clair
  295. </label>
  296. </fieldset>
  297. </form>
  298. </template>
  299. </footer>
  300. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  301. <script>
  302. function loadThemeForm(templateName) {
  303. const themeSelectorTemplate = document.querySelector(templateName)
  304. const form = themeSelectorTemplate.content.firstElementChild
  305. themeSelectorTemplate.replaceWith(form)
  306. form.addEventListener('change', (e) => {
  307. const chosenColorScheme = e.target.value
  308. localStorage.setItem('theme', chosenColorScheme)
  309. toggleTheme(chosenColorScheme)
  310. })
  311. const selectedTheme = localStorage.getItem('theme')
  312. if (selectedTheme && selectedTheme !== 'undefined') {
  313. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  314. }
  315. }
  316. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  317. window.addEventListener('load', () => {
  318. let hasDarkRules = false
  319. for (const styleSheet of Array.from(document.styleSheets)) {
  320. let mediaRules = []
  321. for (const cssRule of styleSheet.cssRules) {
  322. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  323. continue
  324. }
  325. // WARNING: Safari does not have/supports `conditionText`.
  326. if (cssRule.conditionText) {
  327. if (cssRule.conditionText !== prefersColorSchemeDark) {
  328. continue
  329. }
  330. } else {
  331. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  332. continue
  333. }
  334. }
  335. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  336. }
  337. // WARNING: do not try to insert a Rule to a styleSheet you are
  338. // currently iterating on, otherwise the browser will be stuck
  339. // in a infinite loop…
  340. for (const mediaRule of mediaRules) {
  341. styleSheet.insertRule(mediaRule.cssText)
  342. hasDarkRules = true
  343. }
  344. }
  345. if (hasDarkRules) {
  346. loadThemeForm('#theme-selector')
  347. }
  348. })
  349. </script>
  350. </body>
  351. </html>