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

index.html 16KB

1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  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. Qualité
  14. — David Larlet</title>
  15. <meta name="description" content="Quiconque cherche à circonscrire une discipline en lui imposant un cadre ne cherche généralement qu’à protéger son œuvre, et il le fait en perpétuant les standards qui ont permis son émergence. Celui-ci essaie de convaincre les générations à venir qu’elles doivent suivre les règles qu’il a édictées si elles comptent parvenir à l’excellence. Mais, comme disait Charles Bukowski, « il est quatre heures et demie du matin, il sera toujours quatre heures et demie du matin… ».">
  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. <!-- Is that even respected? Retrospectively? What a shAItshow…
  48. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  49. <meta name="robots" content="noai, noimageai">
  50. <!-- Documented, feel free to shoot an email. -->
  51. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  52. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  53. <link rel="preload"
  54. href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2"
  55. as="font"
  56. type="font/woff2"
  57. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  58. crossorigin>
  59. <link rel="preload"
  60. href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2"
  61. as="font"
  62. type="font/woff2"
  63. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  64. crossorigin>
  65. <link rel="preload"
  66. href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2"
  67. as="font"
  68. type="font/woff2"
  69. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  70. crossorigin>
  71. <link rel="preload"
  72. href="/static/david/css/fonts/triplicate_t3_regular.woff2"
  73. as="font"
  74. type="font/woff2"
  75. media="(prefers-color-scheme: dark)"
  76. crossorigin>
  77. <link rel="preload"
  78. href="/static/david/css/fonts/triplicate_t3_bold.woff2"
  79. as="font"
  80. type="font/woff2"
  81. media="(prefers-color-scheme: dark)"
  82. crossorigin>
  83. <link rel="preload"
  84. href="/static/david/css/fonts/triplicate_t3_italic.woff2"
  85. as="font"
  86. type="font/woff2"
  87. media="(prefers-color-scheme: dark)"
  88. crossorigin>
  89. <script>
  90. function toggleTheme(themeName) {
  91. document.documentElement.classList.toggle(
  92. 'forced-dark',
  93. themeName === 'dark'
  94. )
  95. document.documentElement.classList.toggle(
  96. 'forced-light',
  97. themeName === 'light'
  98. )
  99. }
  100. const selectedTheme = localStorage.getItem('theme')
  101. if (selectedTheme !== 'undefined') {
  102. toggleTheme(selectedTheme)
  103. }
  104. </script>
  105. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick"
  106. data-instant-intensity="viewport-all">
  107. <article>
  108. <header>
  109. <h1>Qualité</h1>
  110. </header>
  111. <nav>
  112. <p class="center">
  113. <a rel="prev"
  114. href="/david/2023/01/09/"
  115. title="Publication précédente : Indépendant·e">← Précédent</a> •
  116. <nobr>
  117. <a href="/david/" title="Aller à l’accueil" rel="up">
  118. <svg class="icon icon-home">
  119. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
  120. </svg>
  121. Accueil</a>
  122. </nobr>
  123. <nobr>
  124. <a href="/david/recherche/"
  125. title="Aller à la page de recherche"
  126. rel="search">
  127. <svg class="icon icon-search">
  128. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search"></use>
  129. </svg>
  130. Recherche</a>
  131. </nobr>
  132. • <a rel="next"
  133. href="/david/2023/01/11/"
  134. title="Publication suivante : Suspendu">Suivant →</a>
  135. </p>
  136. </nav>
  137. <hr>
  138. <blockquote>
  139. <p>Quiconque cherche à circonscrire une discipline en lui imposant un cadre ne cherche généralement qu’à protéger son œuvre, et il le fait en perpétuant les standards qui ont permis son émergence. Celui-ci essaie de convaincre les générations à venir qu’elles doivent suivre les règles qu’il a édictées si elles comptent parvenir à l’excellence. Mais, comme disait Charles Bukowski, «&nbsp;il est quatre heures et demie du matin, il sera toujours quatre heures et demie du&nbsp;matin…&nbsp;».</p>
  140. <p>Nous sommes à ce point focalisés sur le chemin que nous nous efforçons de suivre, en voulant toujours tout faire au mieux, armés d’une dévotion sans faille pour notre discipline <mark>alors que les œillères de la peur nous empêchent d’envisager des terrains inconnus,</mark> que nos yeux restent fixés sur cette route, sur ces mains qui prennent appui sur des genoux. Et nous ne réalisons pas que nous ne faisons que suivre les règles promulguées par un homme qui a un jour disputé une course contre des chevaux, ou par un autre qui s’est frotté à un sommet de plus de huit mille mètres sans oxygène, ou par un autre encore qui a décidé de laisser chez lui ses pitons, ses cordes et la sécurité pour ne faire qu’un avec les murs à escalader. Nous suivons les lois de ceux qui en ont enfreint de plus&nbsp;anciennes.</p>
  141. <p><cite><em>Au-delà des sommets</em>, Kilian&nbsp;Jornet</cite></p>
  142. </blockquote>
  143. <p>On parlait de code et de qualité avec <a href="https://thom4.net/">Thomas</a>. Je lui faisais part de ma frustration vis-à-vis d’un code qui n’avait pas été écrit par moi et que je trouvais problématique. En creusant un peu (merci&#8239;!), je réalise que ce qui coince est au niveau de la pérennité et de la transmission. Et j’ai aussi conscience de produire moi-même du code qui serait difficile à reprendre par d’autres personnes n’ayant pas les mêmes&nbsp;aspirations/compétences.</p>
  144. <p>En Python, on a la chance de pouvoir automatiser certaines conversions/vérifications qui tendent à aller vers une certaine uniformisation (et donc universalité&#8239;?)&nbsp;: <a href="https://github.com/psf/black">black</a>, <a href="https://flake8.pycqa.org/">flake8</a>, <a href="https://pypi.org/project/isort/">isort</a> ou <a href="https://mypy.readthedocs.io/">mypy</a> par&nbsp;exemple.</p>
  145. <p>Pour aller plus loin, le code en lui-même n’est peut-être pas si critique, mais ce que l’on a appris en le concevant et l’utilisant l’est bien davantage. C’est cette transmission qu’il est important de rendre possible au sein de l’équipe. Outiller la base commune est un moyen de <strong>plus rapidement</strong> passer à l’étape de partage des concepts importants/métiers, en ce souciant moins de la&nbsp;forme.</p>
  146. <p>Et peut-être au contraire, que cette <strong>vitesse</strong> acquise nous empêche d’échanger sur des concepts importants&#8239;? Des envies différentes&#8239;? Des choix à côté desquels on peut passer par manque&nbsp;d’attention.</p>
  147. <blockquote lang="en">
  148. <p>Tradition (n.): Peer pressure from dead&nbsp;people.</p>
  149. <p><cite><em>Lu plusieurs fois sur&nbsp;masto</em></cite></p>
  150. </blockquote>
  151. <hr />
  152. <blockquote>
  153. <p>🦋 Depuis quelques années, j’essaie d’écrire un code le plus direct&nbsp;possible.</p>
  154. <p>Mon objectif&nbsp;: diminuer au maximum ma charge&nbsp;cognitive.</p>
  155. <p><cite><em><a href="https://sklein.xyz/garden/020-keep-it-simple-stupid-le-plus-longtemps-possible/">Keep it simple, stupid le plus longtemps possible</a></em>&nbsp;(<a href="/david/cache/2023/646ebfa25432bc6b653e524b52d25c9a/">cache</a>)</cite></p>
  156. </blockquote>
  157. <blockquote lang="en">
  158. <p>⛵️ Many of the tools that we thought we could rely on broke down, whether it is Apple products, or software that require subscription services, DRM, etc. As an artist you spend time developing a skill, <mark>you become a Photoshop illustrator.</mark> When your connection to the internet fails and that the software locks up, that skill that you thought was yours was actually entirely owned by someone, and can be taken&nbsp;away.</p>
  159. <p>Even though we’ve been paying for this sort of software for years, the moment that you can’t have access to authenticate yourself that skill is gone. We didn’t expect this, it scared&nbsp;us.</p>
  160. <p><cite><em><a href="https://100r.co/site/weathering_software_winter.html">weathering software winter</a></em>&nbsp;(<a href="/david/cache/2023/c564325b28ec854b6b098950df5c8c8f/">cache</a>)</cite></p>
  161. </blockquote>
  162. <blockquote lang="en">
  163. <p>🔎 It’s important to remember concepts and high level approaches, but don’t worry about remembering the details. You can always look that stuff up when you need&nbsp;it.</p>
  164. <p><cite><em><a href="https://gomakethings.com/you-dont-have-to-remember-everything-to-be-a-good-programmer/">You don’t have to remember everything to be a good programmer</a></em>&nbsp;(<a href="/david/cache/2023/2f4b8ec8f6fd2cbc48a04dcac2cc7d24/">cache</a>)</cite></p>
  165. </blockquote>
  166. <nav>
  167. <p>
  168. <a href="/david/2023/accompagnement/"
  169. title="Liste de tous les articles 2023 associés à cette étiquette"
  170. rel="tag">#accompagnement</a>
  171. <a href="/david/2023/qualite/"
  172. title="Liste de tous les articles 2023 associés à cette étiquette"
  173. rel="tag">#qualité</a>
  174. <a href="/david/2023/technique/"
  175. title="Liste de tous les articles 2023 associés à cette étiquette"
  176. rel="tag">#technique</a>
  177. <a href="/david/#tags-2023" title="Liste de toutes les étiquettes 2023">
  178. <svg class="icon icon-tags">
  179. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-tags"></use>
  180. </svg>
  181. tous ?</a>
  182. </p>
  183. </nav>
  184. <nav>
  185. <p class="center">
  186. <a rel="prev"
  187. href="/david/2023/01/09/"
  188. title="Publication précédente : Indépendant·e">← Précédent</a> •
  189. <a href="/david/2023/" title="Liste des publications récentes">↑ En 2023</a>
  190. • <a rel="next"
  191. href="/david/2023/01/11/"
  192. title="Publication suivante : Suspendu">Suivant →</a>
  193. </p>
  194. </nav>
  195. </article>
  196. <hr>
  197. <footer>
  198. <p>
  199. <nobr>
  200. <a href="/david/" title="Aller à l’accueil">
  201. <svg class="icon icon-home">
  202. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
  203. </svg>
  204. Accueil</a>
  205. </nobr>
  206. <nobr>
  207. <a href="/david/log/" title="Accès au flux RSS">
  208. <svg class="icon icon-rss2">
  209. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
  210. </svg>
  211. Suivre</a>
  212. </nobr>
  213. <nobr>
  214. <a href="http://larlet.com"
  215. title="Go to my English profile"
  216. data-instant>
  217. <svg class="icon icon-user-tie">
  218. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-user-tie"></use>
  219. </svg>
  220. Pro</a>
  221. </nobr>
  222. <nobr>
  223. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">
  224. <svg class="icon icon-mail">
  225. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
  226. </svg>
  227. Email</a>
  228. </nobr>
  229. <nobr>
  230. <abbr class="nowrap"
  231. title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">
  232. <svg class="icon icon-hammer2">
  233. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-hammer2"></use>
  234. </svg>
  235. Légal</abbr>
  236. </nobr>
  237. </p>
  238. <template id="theme-selector">
  239. <form>
  240. <fieldset>
  241. <legend>
  242. <svg class="icon icon-brightness-contrast">
  243. <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-brightness-contrast"></use>
  244. </svg>
  245. Thème
  246. </legend>
  247. <label>
  248. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  249. Auto
  250. </label>
  251. <label>
  252. <input type="radio" value="dark" name="chosen-color-scheme">
  253. Foncé
  254. </label>
  255. <label>
  256. <input type="radio" value="light" name="chosen-color-scheme">
  257. Clair
  258. </label>
  259. </fieldset>
  260. </form>
  261. </template>
  262. </footer>
  263. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  264. <script>
  265. function loadThemeForm(templateName) {
  266. const themeSelectorTemplate = document.querySelector(templateName)
  267. const form = themeSelectorTemplate.content.firstElementChild
  268. themeSelectorTemplate.replaceWith(form)
  269. form.addEventListener('change', (e) => {
  270. const chosenColorScheme = e.target.value
  271. localStorage.setItem('theme', chosenColorScheme)
  272. toggleTheme(chosenColorScheme)
  273. })
  274. const selectedTheme = localStorage.getItem('theme')
  275. if (selectedTheme && selectedTheme !== 'undefined') {
  276. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  277. }
  278. }
  279. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  280. window.addEventListener('load', () => {
  281. let hasDarkRules = false
  282. for (const styleSheet of Array.from(document.styleSheets)) {
  283. let mediaRules = []
  284. for (const cssRule of styleSheet.cssRules) {
  285. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  286. continue
  287. }
  288. // WARNING: Safari does not have/supports `conditionText`.
  289. if (cssRule.conditionText) {
  290. if (cssRule.conditionText !== prefersColorSchemeDark) {
  291. continue
  292. }
  293. } else {
  294. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  295. continue
  296. }
  297. }
  298. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  299. }
  300. // WARNING: do not try to insert a Rule to a styleSheet you are
  301. // currently iterating on, otherwise the browser will be stuck
  302. // in a infinite loop…
  303. for (const mediaRule of mediaRules) {
  304. styleSheet.insertRule(mediaRule.cssText)
  305. hasDarkRules = true
  306. }
  307. }
  308. if (hasDarkRules) {
  309. loadThemeForm('#theme-selector')
  310. }
  311. })
  312. </script>
  313. </body>
  314. </html>