Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

2 年前
2 年前
2 年前
2 年前
2 年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  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>Outils — David Larlet</title>
  13. <meta name="description" content="As Henry Ford once put it, “If you need a machine and don’t buy it, then you will ultimately find that you have paid for it and don’t have it.” Thinking on a marginal basis can be very, very dangerous.">
  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>Outils</h1>
  56. </header>
  57. <nav>
  58. <p class="center">
  59. <a rel="prev" href="/david/2022/05/15/" title="Publication précédente : Rédemption">← 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/05/30/" title="Publication suivante : Méditation">Suivant →</a>
  81. </p>
  82. </nav>
  83. <hr>
  84. <blockquote>
  85. <p>As Henry Ford once put it, <mark>“If you need a machine and don’t buy it, then you will ultimately find that you have paid for it and don’t have it.”</mark> Thinking on a marginal basis can be very, very&nbsp;dangerous.</p>
  86. <p><cite><em><a href="https://hbswk.hbs.edu/item/7007.html">Clayton Christensen’s “How Will You Measure Your Life?”</a></em>&nbsp;(<a href="/david/cache/2022/450dce1f614eba220a97b035cea5dfe5/">cache</a>)</cite></p>
  87. </blockquote>
  88. <p>Cette citation m’a inspiré cette&nbsp;paraphrase&nbsp;:</p>
  89. <blockquote>
  90. <p>Si tu as besoin d’un outil et que tu ne le construis pas, tu vas finir par comprendre que tu l’as quand même construit mais de manière non&nbsp;pérenne/soutenable.</p>
  91. </blockquote>
  92. <p>En <a href="/david/2022/04/26/" title="R&amp;Day">ce moment</a>, je prends soin des processus et outils autour de l’activité de <a href="http://scopyleft.fr/">scopyleft</a>. Et puis, quand je tombe sur <a href="https://hund.tty1.se/2021/07/14/how-i-create-fancy-pdf-documents-in-markdown.html">une bonne idée</a>&nbsp;(<a href="/david/cache/2022/0c60682eeb1edfaf2c6c13cd30cce60d/">cache</a>) ou une techno que je veux explorer, je tente des petites choses&nbsp;autour.</p>
  93. <p>Le dernier en date est un <a href="https://gitlab.com/davidbgk/convertisseur-markdown-pdf">générateur de PDF à partir d’un fichier markdown et d’une feuille de style CSS</a>. La principale contrainte étant de le rendre <em>aussi</em> accessible à des personnes qui sont peu familières des environnements techniques. De cette contrainte née la créativité d’utiliser l’intégration continue de Gitlab pour générer le PDF. Ainsi, il «&nbsp;suffit&nbsp;» d’éditer le fichier <code>source.md</code>, de faire une <code>merge-request</code> et l’artéfact est produit&nbsp;auto-magiquement.</p>
  94. <p>Pour un usage plus avancé, il est possible de modifier la CSS pour le rendu et/ou de le faire tourner en local sans être dépendant·e de&nbsp;Gitlab.</p>
  95. <h2 id="caisse">Caisse <a href="#caisse" title="Ancre vers cette partie">#</a></h2>
  96. <blockquote lang="en">
  97. <p>🔬 All in all I think I found my cure for javascript fatigue as well as a preferred way to do new projects going&nbsp;forward.</p>
  98. <p><cite><em><a href="https://edofic.com/posts/2022-01-28-low-js/">How I fell in love with low-js</a></em>&nbsp;(<a href="/david/cache/2022/3e7688b2d34d13bf51290fc906d77b3d/">cache</a>)</cite></p>
  99. </blockquote>
  100. <blockquote lang="en">
  101. <p>⚖️ I suppose another way of putting this position is that excellence requires a mix of arrogance and humility; <mark>arrogance as to your capabilities, humility toward the work.</mark> Arrogance says that you can and will accomplish your desires; humility understands that a greatness that transcends excellence, let alone survives, is not actually in your hands. You have to submit: to the truth, to the real, toward the bends and knots of what is coming to be through&nbsp;you.</p>
  102. <p><cite><em><a href="https://www.gawker.com/culture/nobody-will-read-this-essay-in-200-years">It’s Very Unlikely Anyone Will Read This in 200&nbsp;Years</a></em>&nbsp;(<a href="/david/cache/2022/0888271d03779999af533b991a8b76eb/">cache</a>)</cite></p>
  103. </blockquote>
  104. <blockquote lang="en">
  105. <p>💯 And the fact that these technologies have shipped in stable browsers means they’re vetted. They’ve been through a rigourous testing phase. They’ve effectively got a seal of approval from each individual browser maker. To me, that seems like a much bigger signal of trustworthiness than the popularity of a third-party library or&nbsp;framework.</p>
  106. <p>So <mark>I’m kind of confused</mark> by this prevalent mindset of trusting third-party code more than built-in browser&nbsp;features.</p>
  107. <p><cite><em><a href="https://adactio.com/journal/19021">Trust</a></em>&nbsp;(<a href="/david/cache/2022/8981770b1b5be8044fd201739e67c60d/">cache</a>)</cite></p>
  108. </blockquote>
  109. <blockquote lang="en">
  110. <p>✍️ Uncurled - everything I know and learned about running and maintaining Open Source projects for three&nbsp;decades.</p>
  111. <p>I have been actively involved in Open Source development since the early 1990s when I discovered the phenomenon of people writing source code they give away freely for others to use and modify under a certain&nbsp;license.</p>
  112. <p><cite><a href="https://un.curl.dev/">Uncurled</a></cite></p>
  113. </blockquote>
  114. <blockquote lang="en">
  115. <p>🌳 Occlusion Grotesque is an experimental typeface that is carved into the bark of a tree. As the tree grows, it deforms the letters and outputs new design variations, that are captured annually. The project explores what it means to <mark>design with nature</mark> and on nature’s&nbsp;terms.</p>
  116. <p><cite><em><a href="https://bjoernkarmann.dk/occlusion-grotesque">Bjørn Karmann › Occlusion Grotesque</a></em>&nbsp;(<a href="/david/cache/2022/32cf150b3b75b308683c4246b54cdcf9/">cache</a>)</cite></p>
  117. </blockquote>
  118. <blockquote>
  119. <p>💚 Chaque organisme est unique, mais je crois que nous partageons tous certaines tendances communes. Cela signifie que nous pouvons apprendre et réapprendre les uns des autres, et travailler ensemble pour établir des milieux de travail plus sains pour les gens de toute identité de genre. Nous en sommes au début de ce projet et <mark>nous ferons sans doute des erreurs</mark> en cours de&nbsp;route.</p>
  120. <p><cite><em><a href="https://numerique.canada.ca/2022/04/21/la-masculinit%C3%A9-positive-ou-toxique-comment-les-hommes-peuvent-transformer-la-culture-organisationnelle/">La masculinité positive ou toxique&nbsp;: Comment les hommes peuvent transformer la culture organisationnelle</a></em>&nbsp;(<a href="/david/cache/2022/ab2739b2622b6a977d73ca7871c64a01/">cache</a>)</cite></p>
  121. </blockquote>
  122. <nav>
  123. <p class="center">
  124. <a rel="prev" href="/david/2022/05/15/" title="Publication précédente : Rédemption">← Précédent</a> •
  125. <a href="/david/2022/" title="Liste des publications récentes">↑ En 2022</a>
  126. • <a rel="next" href="/david/2022/05/30/" title="Publication suivante : Méditation">Suivant →</a>
  127. </p>
  128. </nav>
  129. </article>
  130. <hr>
  131. <footer>
  132. <p>
  133. <nobr>
  134. <a href="/david/" title="Aller à l’accueil"
  135. ><svg class="icon icon-home">
  136. <use
  137. xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"
  138. ></use>
  139. </svg>
  140. Accueil</a
  141. >
  142. </nobr>
  143. <nobr>
  144. <a href="/david/log/" title="Accès au flux RSS"
  145. ><svg class="icon icon-rss2">
  146. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  147. </svg>
  148. Suivre</a
  149. >
  150. </nobr>
  151. <nobr>
  152. <a href="http://larlet.com" title="Go to my English profile" data-instant
  153. ><svg class="icon icon-user-tie">
  154. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  155. </svg>
  156. Pro</a
  157. >
  158. </nobr>
  159. <nobr>
  160. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"
  161. ><svg class="icon icon-mail">
  162. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  163. </svg>
  164. Email</a
  165. >
  166. </nobr>
  167. <nobr>
  168. <abbr
  169. class="nowrap"
  170. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"
  171. ><svg class="icon icon-hammer2">
  172. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  173. </svg>
  174. Légal</abbr
  175. >
  176. </nobr>
  177. </p>
  178. <template id="theme-selector">
  179. <form>
  180. <fieldset>
  181. <legend><svg class="icon icon-brightness-contrast">
  182. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  183. </svg> Thème</legend>
  184. <label>
  185. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  186. </label>
  187. <label>
  188. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  189. </label>
  190. <label>
  191. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  192. </label>
  193. </fieldset>
  194. </form>
  195. </template>
  196. </footer>
  197. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  198. <script>
  199. function loadThemeForm(templateName) {
  200. const themeSelectorTemplate = document.querySelector(templateName)
  201. const form = themeSelectorTemplate.content.firstElementChild
  202. themeSelectorTemplate.replaceWith(form)
  203. form.addEventListener('change', (e) => {
  204. const chosenColorScheme = e.target.value
  205. localStorage.setItem('theme', chosenColorScheme)
  206. toggleTheme(chosenColorScheme)
  207. })
  208. const selectedTheme = localStorage.getItem('theme')
  209. if (selectedTheme && selectedTheme !== 'undefined') {
  210. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  211. }
  212. }
  213. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  214. window.addEventListener('load', () => {
  215. let hasDarkRules = false
  216. for (const styleSheet of Array.from(document.styleSheets)) {
  217. let mediaRules = []
  218. for (const cssRule of styleSheet.cssRules) {
  219. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  220. continue
  221. }
  222. // WARNING: Safari does not have/supports `conditionText`.
  223. if (cssRule.conditionText) {
  224. if (cssRule.conditionText !== prefersColorSchemeDark) {
  225. continue
  226. }
  227. } else {
  228. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  229. continue
  230. }
  231. }
  232. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  233. }
  234. // WARNING: do not try to insert a Rule to a styleSheet you are
  235. // currently iterating on, otherwise the browser will be stuck
  236. // in a infinite loop…
  237. for (const mediaRule of mediaRules) {
  238. styleSheet.insertRule(mediaRule.cssText)
  239. hasDarkRules = true
  240. }
  241. }
  242. if (hasDarkRules) {
  243. loadThemeForm('#theme-selector')
  244. }
  245. })
  246. </script>
  247. </body>
  248. </html>