Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://www.nicolas-hoffmann.net/rss/index.php

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet href="rss.css" type="text/css"?>
  3. <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  4. <channel>
  5. <title>Nico’s dreams - Blog et pensées d'un intégrateur/développeur web - Nicolas Hoffmann</title>
  6. <link>https://www.nicolas-hoffmann.net/rss/index.php</link>
  7. <atom:link href="https://www.nicolas-hoffmann.net/rss/index.php" rel="self" type="application/rss+xml" />
  8. <description>Nico’s dreams - Nouveautés et mises à jour - Nicolas Hoffmann</description>
  9. <language>fr-fr</language>
  10. <ttl>120</ttl>
  11. <pubDate>Tue, 01 Apr 2025 03:18:55 +0200</pubDate>
  12. <lastBuildDate>Tue, 01 Apr 2025 03:18:55 +0200</lastBuildDate>
  13. <managingEditor>contact@nicolas-hoffmann.net (Nico)</managingEditor>
  14.  
  15. <webMaster>contact@nicolas-hoffmann.net (Nico)</webMaster>
  16. <image>
  17.  <title>Nico’s dreams - Blog et pensées d'un intégrateur/développeur web - Nicolas Hoffmann</title>
  18.  <url>https://www.nicolas-hoffmann.net/rss/nicos_dreams.jpg</url>
  19.  <link>https://www.nicolas-hoffmann.net/rss/index.php</link>
  20.  <description>Nouveautés et mises à jour</description>
  21. </image>
  22. <item>
  23.  <title><![CDATA[ Une petite surprise à propos de max en CSS ]]></title>
  24.  <description><![CDATA[ Je partage une petite mésaventure qui m'est arrivée en <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>, il est fort probable que je ne sois pas le seul qui puisse commettre de bonne foi cette erreur.</p>
  25. <p>L'autre jour, je me retrouve à utiliser <a href="https://developer.mozilla.org/fr/docs/Web/CSS/max">max</a> en <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> pour effectuer une adaptation de <a href="https://calendar.proton.me/">Proton Calendar</a> pour des écrans gigantesques (ou si on dézoome fortement).</p>
  26. <p>Grosso modo, le code en question est (le détail de la valeur n'est même pas important)&#160;:</p>
  27. <p><pre><code>block-size: max(3rem, calc((100lvh - 3.75rem - 4.75rem) / 24))</code></pre></p>
  28. <p>En clair, <em>prends-moi la valeur maximum entre les deux valeurs</em>, ce qui m'assure que si l'écran n'est <strong>pas</strong> gigantesque, l'élément en question fera au moins <code>3rem</code> <em>quoi qu'il arrive</em>. Rien de bien extraordinaire, je me dis que c'est même assez <em><abbr title="à l'épreuve des balles">bulletproof</abbr></em> —&#160;en anglais dans le texte, construit ainsi en amélioration progressive. Personne ne trouve à redire.</p>
  29. <p>Quelques jours plus tard, je reçois des retours, quelques utilisateurs ont des soucis. J'investigue un peu, et je me rends compte que ce sont de vieux navigateurs qui pêchent (des Firefox/Chrome 87 ou des Safari 15.x). Là, j'avoue que je suis surpris&#160;: cette syntaxe me parait pourtant à l'épreuve des balles. Quand bien même les navigateurs ne supporteraient pas l'unité <code>lvh</code>, <code>max</code> entre <code>3rem</code> et <em>un truc pas supporté</em>, c'est <code>3rem</code> qui gagne, logiquement.</p>
  30. <p>Je fouille un peu dans <a href="https://drafts.csswg.org/css-values/#comp-func" hreflang="en">la spécification</a>, ouvre <a href="https://github.com/w3c/csswg-drafts/issues/11768" hreflang="en">une question sur le <span lang="en" xml:lang="en">CSS Working group</span></a>, et là… <a href="https://drafts.csswg.org/css-values-4/#determine-the-type-of-a-calculation" hreflang="en" lang="en" xml:lang="en">surprise motherf*****</a>&#8239;!</p>
  31. <p>En fait, <strong>si une des valeurs renvoie <code>failure</code>, l'intégralité de l'expression renvoie <code>failure</code></strong>. En clair pour mon cas, <strong>si les <code>lvh</code> ne sont pas supportés, kaboom, la comparaison avec <code>max</code> foire totalement&#8239;!</strong></p>
  32. <p>J'avoue avoir été surpris&#8239;! Ceci dit, le fix a été simplement d'entourer la version avec un <code>@supports</code> avec ce qu'il faut dedans&#160;:</p>
  33. <p><pre><code>block-size: 3rem;<br />@supports ( block-size: ( max(1rem, 100lvh) ) ) {<br />  block-size: max(3rem, calc((100lvh - 3.75rem - 4.75rem) / 24))<br />}<br /></code></pre></p>
  34. <p>Comme quoi, on a toujours des surprises… ]]>
  35.  </description>
  36.  <guid>https://www.nicolas-hoffmann.net/source/1723-Une-petite-surprise-a-propos-de-max-en-CSS.html</guid>
  37.  <link>https://www.nicolas-hoffmann.net/source/1723-Une-petite-surprise-a-propos-de-max-en-CSS.html</link>
  38.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  39.  <pubDate>Tue, 04 Mar 2025 15:11:37 +0100</pubDate>
  40. </item>
  41. <item>
  42.  <title><![CDATA[ Bref, j’ai fait une miam-list ]]></title>
  43.  <description><![CDATA[ Fin 2022, lors d’une discussion après le repas du 31, tombe le sujet des bonnes résolutions.</p>
  44. <p>Marronnier par excellence, mais j’avoue que je n’ai pas vraiment d’idées. Et puis bon, les bonnes résolutions… je sais très bien que je ne vais pas forcément les tenir sur la durée.</p>
  45. <p>Me vient une idée pas sortie de <em>la cuisine à Jupiter</em> (Coluche)&#160;: je balance à mes proches que je ne prendrai aucune bonne résolution, mais que je vais me faire <strong>une miam-list</strong>. En clair&#160;: <strong>une liste de trucs que je dois cuisiner maison durant l’année suivante</strong>.</p>
  46. <p>Cela peut être des choses simples, ou des choses nécessitant plus de travail. Bref, je teste, et le concept m’a bien fait marrer&#160;: </p>
  47. <p></p><ul><li>C’est <strong>rigolo</strong> (et ça me détend, pas besoin de <code>npm install</code> pour cuisiner…)</li><li>Cela ajoute diverses cordes(ons bleus&#8239;?) à mon arc de père isolé</li><li>Et vu les gourmands qui m’entourent… je sais que l’initiative sera suivie et appréciée. J’ai eu des demandes même.</li></ul><p></p>
  48. <p>Celle de 2023 a été plutôt un succès&#160;: une vingtaine de plats/pâtisseries préparées sur la liste, quelques uns non-faits, un ratage en tout et pour tout, et avec des rajouts en impro.</p>
  49. <p>En langage chef de projet&#160;: <strong>complétion des <abbr title="Objective, Key Result" lang="en" xml:lang="en">OKR</abbr>s supérieure à 80%, avec des items non planifiés</strong> (t’as vu, ça claque).</p>
  50. <p>Bref, je renouvelle cela en 2024, toujours amusant, et j’en arrive à celle pour cette année.</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/miam-list.jpg" width="400" height="300" alt="Miam-list de Nico"  /></p></div><p>Liste plus ambitieuse que l’année précédente, cependant avec des éléments vraiment faciles… </p>
  51. <p>Et comme toute liste, le premier a avoir été fait a été… <strong>un non-prévu — on frise vraiment la métaphore chef de projet là&#160;!</strong> ]]>
  52.  </description>
  53.  <guid>https://www.nicolas-hoffmann.net/source/1722-Bref-j-ai-fait-une-miam-list.html</guid>
  54.  <link>https://www.nicolas-hoffmann.net/source/1722-Bref-j-ai-fait-une-miam-list.html</link>
  55.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  56.  <pubDate>Wed, 22 Jan 2025 15:54:16 +0100</pubDate>
  57. </item>
  58. <item>
  59.  <title><![CDATA[ De l’humilité pour les applications addictives ]]></title>
  60.  <description><![CDATA[ Je retrouve de vieilles notes et autres pensées, alors je vais les publier petit à petit. Précision pour celle-ci, elle a été écrite <strong>avant</strong> le rachat de Twitter par le zinzin qui le possède actuellement —&#160;et avant que bon nombre de gens l’aient fui. Et oui je dis Twitter, car le nouveau «&#160;nom&#160;» pourrait changer quelque peu le sens de la phrase suivante, et… ce nom nouveau est débile.</p>
  61. <p><em>Retour dans un passé pas trop lointain.</em></p>
  62. <p>J’avoue, j’étais assez accro à Twitter. Notamment pour la veille, le côté instantané et efficace de chopper de l’info ou de pouvoir pinger des gens, le côté <em lang="en" xml:lang="en">micro-blogging</em>, etc., et toujours un onglet épinglé avec.</p>
  63. <p>Toutefois, plusieurs événements —&#160;une <abbr title="Tempête de chiasse intellectuelle">shitstorm</abbr> délirante, une agressivité de plus en plus palpable, etc.&#160;— m’ont vraiment fait réfléchir sur le côté détestable/meute enragée des réseaux sociaux.</p>
  64. <p>La problématique était&#160;: j’adore Twitter et je <strong>dois</strong> m’en éloigner, comment faire&#8239;?</p>
  65. <p>J’ai pensé à bloquer les personnes les plus virulentes, etc. même si ça calme bien ça ne résout pas le problème. Et une bête idée m’est venue&#160;: je repensais à l’expression de Tûtie dite de «&#160;<em>la barrière de flemme</em>&#160;», notamment évoquée dans une de mes conférences préférées&#160;: <a href="https://www.paris-web.fr/2018/conference/tempete-de-boulettes-geantes">la tempête de boulettes géantes</a>.</p>
  66. <p>Et je me suis dit&#160;: tiens, et si j’essayais. <strong>Virer l’onglet épinglé, virer le raccourci sur le téléphone, ou planquer ce dernier dans un dossier sur la tablette. Mettre le truc à une distance de l’immédiateté, aussi courte soit-elle</strong>.</p>
  67. <p>Vous ne le croirez peut-être pas… mais ça marche&#8239;! Certes, il m’arrive d’y faire un petit tour de temps en temps, mais cette simple distance évite de gaspiller le temps de cerveau en mode zombie. En gros, il faut faire l’effort d’y aller.</p>
  68. <p>Ensuite, je me suis lancé quelques règles débiles, notamment «&#160;<em>au troisième tweet qui en grosse colère contre quelque chose</em>&#160;» (justifié ou non, ce n’est même pas la question), je clos l’app. Autant vous dire que celle-ci est vraiment marrante. Si vous avez le <abbr title="Fear of Missing Out" lang="en" xml:lang="en">FOMO</abbr> (la peur de louper quelque chose), elle a tendance à vous en guérir&#160;: que vais-je louper&#8239;? Bah, de la probable agressivité.</p>
  69. <p>Là où cela m’interpelle, c’est en tant que concepteur d’interfaces —&#160;ouais je suis un <abbr title="UX Engineer" lang="en" xml:lang="en">UXE</abbr>&#160;— j’entends souvent des discours sur les app addictives, etc. et aussi addictives soient-elles, j’invite les personnes qui conçoivent/possèdent ces apps à avoir beaucoup d’<strong>humilité</strong>. Aussi incroyable leur design, communauté, expérience, etc. puissent être… elles peuvent être mise au ban pour une simple icône disparue, sur laquelle vous n’avez aucune main mise.</p>
  70. <p><em>Retour dans le présent.</em></p>
  71. <p>Bref, au vu de ce que Twitter est devenu récemment, je me dis que finalement, c’était plutôt une bonne idée. :-D  ]]>
  72.  </description>
  73.  <guid>https://www.nicolas-hoffmann.net/source/1721-De-l-humilite-pour-les-applications-addictives.html</guid>
  74.  <link>https://www.nicolas-hoffmann.net/source/1721-De-l-humilite-pour-les-applications-addictives.html</link>
  75.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  76.  <pubDate>Wed, 20 Nov 2024 10:14:16 +0100</pubDate>
  77. </item>
  78. <item>
  79.  <title><![CDATA[ Vous souvenez-vous du futur, deuxième&#8239;? ]]></title>
  80.  <description><![CDATA[ Petit préambule. </p>
  81. <p>Il y a 10 ans, pour fêter l’anniversaire de ce site, je me payais un délire de <a href="https://www.nicolas-hoffmann.net/source/1635-Vous-souvenez-vous-du-futur.html">faire causer mon moi de 2014 avec celui de 2004</a> (autant le relire, car vous risquez de ne pas tout comprendre). Et à la fin, je termine sans réfléchir sur un gag qui fait intervenir mon moi de 2024.</p>
  82. <p><strong>Vous savez ce qui est drôle avec les gags&#8239;?</strong> C’est qu’ils se réalisent… nous sommes en 2024, et <strong>ce blog a 20 ans</strong>. Un peu rouillé et attendant une refonte depuis longtemps, mais toujours vaillant.</p>
  83. <p><em>En emphase, il y aura parfois mon avis, mais quelque chose que je ne peux pas dire sans risquer de faille du continuum-espace temps. Hypothèse la plus pessimiste, le phénomène pourrait être localisé à notre seule galaxie.</em></p>
  84. <p>Pour simplifier cette histoire de fous, Nico de 2024 sera abrégé <abbr title="Nico de 2024">N24</abbr>, etc. </p>
  85. <p><h3>La discussion</h3></p>
  86. <p>— <abbr title="Nico de 2024">N24</abbr>, tape sur l’épaule : hé, 20 ans, je te raconte pas&#8239;! <em>(putain, j’avais qq kilos de plus)</em><br />— <abbr title="Nico de 2014">N14</abbr>&#160;: Nom d’un cul de canard dans ma baignoire&#8239;!!!!!!!! Je ne veux rien savoir. Rendez-vous dans dix ans.</p>
  87. <p><abbr title="Nico de 2024">N24</abbr>&#160;: dix ans plus tard, c’est là&#8239;! <em>(voila, tu voulais faire le gag de la Delorean qui vole dans Retour vers le futur 1, tu l’as bien mérité)</em><br /><abbr title="Nico de 2004">N04</abbr>&#160;: QUOI&#8239;?</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/nico-20X4.jpg" width="300" alt="Meme de Spiderman, avec 3 Nico de 2004, 2014 et 2024 qui se pointent mutuellement"  /></p></div><p><abbr title="Nico de 2024">N24</abbr>&#160;: bah alors vieux, enfin, jeune, on flippe&#8239;? <em>(putain, j’avais qq kilos de plus)</em><br /><abbr title="Nico de 2014">N14</abbr>&#160;: pas possible… continuum… <em>(tombe dans les vapes)</em><br /><abbr title="Nico de 2024">N24</abbr>&#160;: hé oui, à défaut de briser le continuum espace-temps, une blague revient toujours à l’envoyeur, cochon qui s’en dédit&#8239;!</p>
  88. <p><abbr title="Nico de 2004">N04</abbr>&#160;: c’est une blague&#8239;? Tu es en train de me dire que ce site existera encore dans 20 ans&#8239;???<br /><abbr title="Nico de 2024">N24</abbr>&#160;: et pourquoi pas&#8239;? <em>(et merci pour moi jeune con, je passe après le site, sympa le merdeux&#8239;!)</em></p>
  89. <p><abbr title="Nico de 2004">N04</abbr>, en panique&#160;: mais mais mais, ça doit être fait avec des technos ultra-modernes et j’ai dû bien le refondre au moins 100 fois&#8239;!<br /><abbr title="Nico de 2024">N24</abbr>&#160;: mais pourquoi tu cherches compliqué&#8239;? Je t’entendais discuter avec l’autre évanoui là, vous… enfin je… bref nous parlions des standards. Tu sais ce que ça veut dire la compatibilité future&#8239;?<br /><abbr title="Nico de 2004">N04</abbr>&#160;: biiiin, j’ai bien lu <a href="https://openweb.eu.org/articles/pourquoi_standards">un article sur Openweb</a> maiiiiiis…</p>
  90. <p><abbr title="Nico de 2024">N24</abbr>&#160;: mais quoi&#8239;? Allez, crache mon petit&#8239;! <em>(putain, j’avais des cheveux y a 20 ans)</em><br /><abbr title="Nico de 2004">N04</abbr>&#160;: bin, celui de 2014 avait l’air d’avoir des réserves sur le coup de <abbr title="eXtensible HyperText Markup Language" lang="en" xml:lang="en">XHTML</abbr> et <abbr title="eXtensible Markup Language" lang="en" xml:lang="en">XML</abbr>.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: sans trop t’en dire, je peux te dire que cet article ne raconte vraiment pas que des conneries. Évidemment, ça n’évolue jamais exactement de la manière dont on le pense, mais ça c’est normal. Et bien sûr, je ne t’en dirai pas plus. <em>(bin 20 ans après, ça tourne encore, même si plus personne ne connait ce délire, hormis quelques vieux briscards)</em></p>
  91. <p><abbr title="Nico de 2004">N04</abbr>&#160;: bin merde alors. Dire que j’implémentais un nouveau truc <abbr title="eXtensible Markup Language" lang="en" xml:lang="en">XML</abbr> dont je n’étais pas sûr…<br /><abbr title="Nico de 2024">N24</abbr>&#160;: à quoi tu penses&#8239;?<br /><abbr title="Nico de 2004">N04</abbr>&#160;: bin y a bien ce truc là, j’avoue que je me suis amusé, c’est un peu à la mode, ça s’appelle <a href="http://www.nicolas-hoffmann.net/source/16-Le-fil-RSS-est-pret.html">un flux <abbr lang="en" xml:lang="en" title="Rich Site Summary">RSS</abbr></a>. Ça m’a l’air simple mais je suis pas certain d’en comprendre la portée.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: c’est très bien d’essayer des nouveaux trucs. <em>(woupinaise, et dire que c’est peut-être un des trucs les plus beaux qui aient jamais été faits, et dire que je m’en sers encore et que TOUT le monde adore ça même si ça a un peu perdu en visibilité)</em><br /><abbr title="Nico de 2004">N04</abbr>&#160;: ça m’a l’air un peu gadget, j’avoue que j’ai un peu fait comme les autres.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: oui, je m’en souviens, t’inquiète. Non, c’est très bien d’essayer des trucs, tu peux me croire. Tu verras bien si ça mord. <em>(au moins les modes étaient moins débiles à cette époque, putain, le gamin il vient de me coller une claque… roooh, je parle comme un vieux con)</em></p>
  92. <p><abbr title="Nico de 2004">N04</abbr>&#160;: qui vivra verra… putain, 20 ans&#8239;!<br /><abbr title="Nico de 2024">N24</abbr>&#160;: arrête, on dirait Chirac aux Guignols de l’info <em>(et dire qu’il est mort, les Guignols aussi)</em><br /><abbr title="Nico de 2004">N04</abbr>&#160;: au moins, je me suis amusé à essayer <a href="https://www.nicolas-hoffmann.net/source/52-Un-petit-test-de-la-derniere-mandrake.html">la dernière Mandrake</a>.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: héhé, je ne m’en souvenais plus. C’était amusant ces duals boots&#8239;? <em>(c’est vrai que je racontais tout et n’importe quoi sur le blog)</em><br /><abbr title="Nico de 2004">N04</abbr>&#160;: oui, avec Mozilla, Firefox 1, et tout le nécessaire.</p>
  93. <p><abbr title="Nico de 2014">N14</abbr>&#160;: (sort des vapes) punaise, ou suis-je&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: j’ai plus l’habitude, faut dire que maintenant que Linux est inclus dans Windows, et Firefox, j’utilise toujours, mais bon, j’ai arrêté de compter les versions après la version 100…<br /><abbr title="Nico de 2004">N04</abbr>&#160;: QUOI&#8239;? LINUX INCLUS DANS WINDOWS&#8239;? Firefox 100&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: oui, 120 et quelques. Un souci gamin&#8239;? Tu es pâle.<br /><abbr title="Nico de 2004">N04</abbr>&#160;: (tombe dans les pommes)</p>
  94. <p><abbr title="Nico de 2014">N14</abbr>&#160;: mais sérieux&#8239;! Ça va pas de raconter des âneries pareilles&#8239;!<br /><abbr title="Nico de 2024">N24</abbr>&#160;: héhé… oups&#8239;! <em>(bah quoi, j’ai pas menti, le <abbr lang="en" xml:lang="en" title="Windows Subsystem for Linux">WSL</abbr>&#8239;?)</em><br /><abbr title="Nico de 2014">N14</abbr>&#160;: et le continuum espace-temps, abruti&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: bin, je me suis dit «&#160;on s’en balance&#160;», t’aurais vu sa tronche… et la tienne&#8239;!<br /><abbr title="Nico de 2014">N14</abbr>&#160;: bougre de crétin irresponsable&#8239;! Et s’il y reste, on devient quoi nous, t’y as pensé&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: ok, tu marques un point. <em>(putain, se prendre un «&#160;irresponsable&#160;» de moi plus jeune, ça c’est de l’achèvement)</em></p>
  95. <p><abbr title="Nico de 2014">N14</abbr>&#160;: déjà que j’essayais de ne pas trop lui en révéler. Tu imagines le choc si je lui parlais media-queries, <a href="https://rocssti.net/">Röcssti</a>, <a href="https://van11y.net/fr/">Van11y</a> ou qu’il va monter sur scène dans les conférences&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: indubitablement. <em>(mon pauvre, je pourrais te faire flipper encore plus&#8239;!)</em><br /><abbr title="Nico de 2014">N14</abbr>&#160;: et tout s’est <a href="https://www.nicolas-hoffmann.net/source/1507-Paris-Web-une-annee-ombre-a-lumiere.html">un peu précipité y a deux ans</a>. <br /><abbr title="Nico de 2024">N24</abbr>&#160;: c’est pas faux.</p>
  96. <p><abbr title="Nico de 2014">N14</abbr>&#160;: au moins, rassure-moi, ça va continuer de progresser&#8239;? <br /><abbr title="Nico de 2024">N24</abbr>&#160;: par certains côtés oui, par d’autres, je serais plus circonspect.<br /><abbr title="Nico de 2014">N14</abbr>&#160;: tu parles de Chrome qui monte inexorablement&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: effectivement, c’est pas la chose la plus glorieuse. À se demander si les gens ont une mémoire. <em>(et c’est encore pire maintenant)</em><br /><abbr title="Nico de 2014">N14</abbr>&#160;: des monopoles comme <abbr title="Internet Explorer" lang="en" xml:lang="en">IE</abbr>6&#8239;? Non.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: et pourtant, le gamin avait compris <a href="https://www.nicolas-hoffmann.net/source/1443-Deux-mondes-ne-pouvant-pas-se-comprendre.html">bien malgré lui les dégâts d’<abbr title="Internet Explorer" lang="en" xml:lang="en">IE</abbr>6</a>.<br /><abbr title="Nico de 2014">N14</abbr>&#160;: il y <a href="https://www.nicolas-hoffmann.net/source/475-Et-si-la-lente-evolution-du-web-1-2.html">a été confronté</a> oui. <br /><abbr title="Nico de 2024">N24</abbr>&#160;: encore maintenant, je m’étonne que rajouter une classe <code>flex</code> puisse résoudre des problèmes par magie.<br /><abbr title="Nico de 2014">N14</abbr>&#160;: parle pour toi, je peux pas encore utiliser flex comme un cochon moi&#8239;!<br /><abbr title="Nico de 2024">N24</abbr>&#160;: <em>(et m…)</em> bah tu peux mais avec des réserves pour les vieux navigateurs. <em>(vite, se rattraper aux branches)</em></p>
  97. <p><abbr title="Nico de 2014">N14</abbr>&#160;: effectivement. Ceci dit, la communauté se bouge, c’est sympa.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: sans aucun doute. <em>(pinaise, c’est vrai c’était une certaine époque entre les confs et le reste)</em><br /><abbr title="Nico de 2014">N14</abbr>&#160;: c’est qu’on rêvait de faire venir Tim Berners-Lee à Paris Web en sortant des conférences.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: c’est pas facile hein&#8239;? Enfin… <em>(ne pas lui dire qu’il va le rencontrer en 2023 et même présenter devant lui, ne pas lui dire…)</em><br /><abbr title="Nico de 2014">N14</abbr>&#160;: et au moins les réseaux sociaux donnent une saine émulation. Pourquoi tu t’étouffes&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: disons que les réseaux sociaux… évolueront étrangement à l’avenir. <em>(comment lui expliquer qu’il va en fuir certains pour des raisons de santé mentale&#8239;?)</em></p>
  98. <p><abbr title="Nico de 2014">N14</abbr>&#160;: en bien ou en mal&#8239;? C’est que <a href="https://www.nicolas-hoffmann.net/source/1663-J-adore-Twitter.html">j’aime bien Twitter</a> moi.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: joker. <em>(en mal&#8239;!)</em><br /><abbr title="Nico de 2014">N14</abbr>&#160;: rassure-moi, les gens sont toujours là au moins&#8239;?<br /><abbr title="Nico de 2024">N24</abbr>&#160;: majoritairement oui. Ça évoluera. <em>(j’ai la sensation qu’on n’a jamais été aussi seuls mais bon…)</em></p>
  99. <p><abbr title="Nico de 2004">N04</abbr>&#160;: (sort des vapes) <br /><abbr title="Nico de 2014">N14</abbr>&#160;: tiens, respire un bon coup gamin. Tu as tourné de l’œil, c’est pas grave.<br /><abbr title="Nico de 2024">N24</abbr>&#160;: ça va vieux&#8239;? Enfin jeune.<br /><abbr title="Nico de 2004">N04</abbr>&#160;: ça va. Là, j’avoue que je suis dépassé.<br /><abbr title="Nico de 2014">N14</abbr> et <abbr title="Nico de 2024">N24</abbr>&#160;: oui, ça autant t’y habituer…<br /><abbr title="Nico de 2004">N04</abbr> et <abbr title="Nico de 2014">N14</abbr>&#160;: ça fait peur des fois ce sentiment.</p>
  100. <p><em>Les trois se regardent avec un sourire.</em><br /><abbr title="Nico de 2024">N24</abbr>&#160;: oui, ne vous inquiétez pas pour ça. Apprenez, vivez, faites ce qui vous semble juste, fussé-ce <a href="https://www.nicolas-hoffmann.net/source/1704-Je-hacke-le-retour-d-experience-via-un-phrase-veloute-Sud-Web.html">être de la poésie</a> ou <a href="https://www.nicolas-hoffmann.net/source/43-Argh-Montjoie.html">bloguer sur des choses insignifiantes mais si importantes</a>. Le temps est sans importance, seule la vie est importante.</p>
  101. <p><em>Note du Nico de 2024&#160;: même si le blog est très calme depuis plusieurs années, la-vie-toussa, 20 ans de blog, ce n’est pas rien. Un espace de liberté, intemporel, délicieusement imparfait, rouillé mais aussi durable… chapeau les gars. Je pensais revenir dans le passé en conquérant blagueur, et c’est vous qui me redonnez cette flamme&#160;: le gamin m’a rappelé cette passion, et l’autre me rappelle tout le chemin parcouru. Même si j’ai appris une certaine sagesse, finalement… vous z’êtes pas mal les gamins.</em></p>
  102. <p>Nico de 2034, passe une tête par la fenêtre&#160;: dites les gars, j’ose vous parler de la suite&#8239;?<br />Les Nico de 2004 à 2024&#160;: OH LE CON&#8239;!!!</p>
  103. <p>On remet ça dans 10 ans, peut-être. ]]>
  104.  </description>
  105.  <guid>https://www.nicolas-hoffmann.net/source/1719-Vous-souvenez-vous-du-futur-deuxieme.html</guid>
  106.  <link>https://www.nicolas-hoffmann.net/source/1719-Vous-souvenez-vous-du-futur-deuxieme.html</link>
  107.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  108.  <pubDate>Wed, 24 Apr 2024 22:09:16 +0200</pubDate>
  109. </item>
  110. <item>
  111.  <title><![CDATA[ Putain 20 ans ! ]]></title>
  112.  <description><![CDATA[ Hé oui, <a href="https://www.nicolas-hoffmann.net/source/2-ENFIN-j-y-suis-arrive.html">ce site a 20 ans</a>… et deux jours.</p>
  113. <p>En attendant, si vous avez envie d’envoyer un pied de nez aux gens qui vous disent que <abbr title="PHP Hypertext Preprocessor" xml:lang="en" lang="en">PHP</abbr> ou autres <abbr title="Cascading Style Sheet" xml:lang="en" lang="en">CSS</abbr> sont morts et qu’il faut forcément passer par une plateforme ou je-ne-sais-quelle-techno qui lave plus blanc que blanc… hé bien, ça tient encore la route pour de l’ancien.</p>
  114. <p>Une petite surprise est en préparation, je suis en train de la finaliser. ]]>
  115.  </description>
  116.  <guid>https://www.nicolas-hoffmann.net/source/1718-Putain-20-ans.html</guid>
  117.  <link>https://www.nicolas-hoffmann.net/source/1718-Putain-20-ans.html</link>
  118.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  119.  <pubDate>Mon, 22 Apr 2024 10:50:05 +0200</pubDate>
  120. </item>
  121. <item>
  122.  <title><![CDATA[ Note de lecture : La Légion Zodiaque, Légendes d’Illuminaria ]]></title>
  123.  <description><![CDATA[ J’ai eu le plaisir de recevoir le livre de David «&#160;Deltakosh&#160;» Catuhe, intitulé «&#160;La Légion Zodiaque, Légendes d’Illuminaria&#160;».</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/legion-zodiaque" width="200" height="250" alt="La Légion Zodiaque, Légendes d’Illuminaria"  /></p></div><p>Que dire&#8239;?</p>
  124. <p>J’avoue que le travail de David sur les chevaliers a attiré ma curiosité, revisiter les mythiques chevaliers d’or n’est pas un pari facile&#160;: il touche à des icônes, n’importe quel fan a forcément son chevalier préféré, ou plusieurs (Kanon et Shaka pour ma part, même si j’aime bien Aldébaran et Manigoldo/El Cid).</p>
  125. <p>En fait, cela va plus loin. En lisant ce livre, on se rend compte que l’auteur a imaginé <strong>un monde plus grand, différent</strong>. On n’en voit actuellement que quelques bribes, mais il y a <strong>un petit quelque chose qui fait… qu’on a envie d’en savoir plus</strong>, probablement la narration indirecte. (et une certaine passion personnelle pour la mythologie grecque)</p>
  126. <p>En tout cas, le livre est de très belle facture&#160;: <strong>les illustrations sont magnifiques, les textes sont courts mais soignés</strong>, l’objet ne dépareillera pas dans une belle bibliothèque.</p>
  127. <p>En conclusion, je reviens sur ma précédente phrase&#160;: <strong>on a envie d’en savoir plus, mais genre vraiment plus</strong>. </p>
  128. <p>Petit message personnel&#160;: David, si tu as besoin d’un relecteur de type grammar-nazi ou d’un autre acolyte pour explorer Illuminaria… je suis ton homme. ;)</p>
  129. <p>Pour en savoir plus, <a href="https://www.amazon.fr/Légion-Zodiaque-David-Catuhe/dp/B0BX8WR2NV/ref=sr_1_3?__mk_fr_FR=ÅMÅŽÕÑ">La Légion Zodiaque, Légendes d’Illuminaria, sur Amazon</a> ou <a href="https://www.deltakosh.com/tales-of-illuminaria" hreflang="en">sur le site de David</a>.</p>
  130. <p><em lang="la" xml:lang="la">Addendum</em>&#160;: si par hasard, vous aimez le podcast de la Confrérie, peut-être avez-vous entendu les (més)aventures de la création de ce livre, où l’auteur — non sans un certain humour — relate les obstacles de la genèse de cet ouvrage&#160;: <a href="https://www.deltakosh.com/laconfrerie-podcast/episode/31d4c207/la-creation-de-livres-et-le-monde-des-figurines-de-bourges">la confrérie, la création de livre</a>.</p>
  131. <p>D’autres épisode relatent des histoires toutes plus amusantes les unes que les autres avec le livre en toile de fond, comme <a href="https://www.deltakosh.com/laconfrerie-podcast/episode/31d6e40c/plongee-dans-un-forum-18-25-et-le-top-3-de-nos-jeux-les-plus-marquants">Plongée dans un forum 18-25 et le top 3 de nos jeux les plus marquants</a>.</p>
  132. <p>Je n’écoute que très peu de podcasts, mais j’avoue que celui-ci m’accompagne souvent, je suis en train de les rattraper à reculons. Bon boulot les gars&#8239;! ]]>
  133.  </description>
  134.  <guid>https://www.nicolas-hoffmann.net/source/1717-Note-de-lecture-La-Legion-Zodiaque-Legendes-d-Illuminaria.html</guid>
  135.  <link>https://www.nicolas-hoffmann.net/source/1717-Note-de-lecture-La-Legion-Zodiaque-Legendes-d-Illuminaria.html</link>
  136.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  137.  <pubDate>Mon, 24 Jul 2023 14:59:22 +0200</pubDate>
  138. </item>
  139. <item>
  140.  <title><![CDATA[ Focus-visible, la pseudo-classe qui met presque tout le monde d’accord ]]></title>
  141.  <description><![CDATA[ Toute belle histoire commence par…</p>
  142. <p><h3>Il était une fois</h3></p>
  143. <p>Il y a bien longtemps (pas tant que ça mais bon), à chaque fois que vous cliquiez sur un bouton, vous pouviez entendre un ou une <abbr title="Product Owner" lang="en" xml:lang="en">PO</abbr>/utilisateur/designer/dev/autre dire&#160;:</p>
  144. <p></p><ul><li>«&#160;Oh, cette vilaine bordure bleue ou noire est-ce qu’on pourrait l’enlever&#8239;?&#160;»</li><li>Mais c’est nécessaire pour les utilisateurs de clavier&#8239;!</li><li>Oui mais c’est moche, on peut l’enlever&#8239;? À propos, je n’utilise pas mon clavier.</li><li>(ton qui monte) C’est nécessaire pour les utilisateurs de clavier&#8239;!!!</li><li>Oui mais c’est laid, on peut l’enlever&#8239;? À propos, je n’utilise pas mon clavier.</li><li>Etc.</li></ul><p></p>
  145. <p>La cause principale de ces discussions interminables était la suivante&#160;: <strong>cliquer sur un élément active les styles de focus, comme avec le clavier</strong>.</p>
  146. <p>Il était impossible de différencier un bouton activé via une souris ou un clavier (les deux avaient des styles de focus déclenchés), sauf avec des tonnes de JavaScript à coup sûr. En général, cela se finissait par un drame, un bon gros <code>outline: 0</code> des familles, soit la suppression complète et entière de l’indicateur visuel pour le clavier. <em lang="la" xml:lang="la" title="À marquer d’une pierre noire.">Nigro notanda lapillo</em>.</p>
  147. <p>C’est là que <code>:focus-visible</code>, anciennement appelé <code>:focus-ring</code> (l’idée n’est vraiment pas récente), entre en jeu pour sauver nos âmes.</p><div class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/focusing.png" width="391" height="70" alt="Emoji focusing sur Slack, on parle de focus, donc c’est une blague absolument lamentable mais j’aime."  /></div><p><h3>Le besoin</h3></p>
  148. <p>L’un des besoins les plus élémentaires lors de l’utilisation d’un clavier est de pouvoir <strong>savoir où vous vous trouvez</strong> dans l’interface.</p>
  149. <p>S’il n’y a pas de surbrillance visible de l’élément actuel, l’utilisateur peut se perdre, la navigation devient vraiment pénible et une opération simple comme atteindre un lien nécessite soudainement une attention folle… ou n’est tout simplement pas possible.</p>
  150. <p>Dans le langage expert de l’accessibilité, si je ne me trompe pas, dans les <abbr title="Web Content Accessibility Guidelines" lang="en" xml:lang="en">WCAG</abbr>, c’est le <a href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/#navigation-mechanisms-focus-visible" lang="en" xml:lang="en" hreflang="en">Success Criterion 2.4.7 Focus Visible</a>: <em lang="en" xml:lang="en">Any keyboard operable user interface has a mode of operation where the keyboard focus indicator is visible</em> (traduction approximative&#160;: toute interface utilisable au clavier a un mode d’utilisation où le focus clavier est visible).</p>
  151. <p><h3>En pratique</h3></p>
  152. <p>Avant, on doublait les styles entre <code>:focus</code> et <code>:hover</code>, et on priait pour que ça passe côté produit sans prendre de remarque comme au début de cet article.</p>
  153. <p>Là, on peut se permettre de totalement virer l’<code>outline</code> au <code>:hover</code>, et de bien renforcer ce dernier avec <code>:focus-visible</code>.</p>
  154. <p>Quelque chose comme&#160;:</p>
  155. <p><pre><code>.mon-button:focus {<br />  outline: none;<br />}<br />.mon-button:focus-visible {<br />  outline: 3px solid chartreuse;<br />  // je ne peux être tenu responsable du choix de cette couleur.<br />}<br /></code></pre></p>
  156. <p><h3>Comment <code>:focus-visible</code> marche</h3></p>
  157. <p>Même si l’on pourrait croire que c’est de la magie… il n’y a aucune magie là dedans. Grosso modo, le navigateur utilise certaines heuristiques pour déterminer si –&#160;selon lui&#160;– l’utilisation doit déclencher <code>:focus-visible</code> ou non.</p>
  158. <p><abbr title="Too Long Didn’t Read" lang="en" xml:lang="en">TLDR</abbr>&#160;: si l’utilisateur utilise le clavier.</p>
  159. <p>En réalité, c’est un peu plus complexe&#160;: je vous conseille de lire la <a href="https://www.w3.org/TR/selectors-4/#the-focus-visible-pseudo" lang="en" xml:lang="en" hreflang="en">spécification de <code>:focus-visible</code></a>.</p>
  160. <p>Je ne vais pas tout détailler, d’autres l’ont bien fait comme <a href="https://css-tricks.com/almanac/selectors/f/focus-visible/#aa-how-do-browsers-determine-when-something-is-focus-visible" lang="en" xml:lang="en" hreflang="en">How do browsers determine when something is :focus-visible?</a>, mais je m’arrête sur un exemple, les formulaires.</p>
  161. <p>On pourrait se dire assez légitimement «&#160;<em>si je clique sur un champ de formulaire, <code>:focus-visible</code> ne sera pas activé</em>&#160;». Sauf que non&#8239;! Si un élément –&#160;comme un champ de formulaire&#160;– a <strong>besoin du clavier</strong> pour fonctionner, il activera <code>:focus-visible</code>, qu’on clique dessus ou qu’on l’atteigne au clavier.</p>
  162. <p>En pratique, cela se gère très facilement.</p>
  163. <p>C’est pour cela que je vous invite à lire la spécification et à tester. D’expérience, j’ai vu quelques cas qui ont du sens une fois la spécification lue, mais qui peuvent surprendre (si une modale apparait subitement au lancement du site avant que l’utilisateur n’ait pu interagir, etc.).</p>
  164. <p><h3>La compatibilité</h3></p>
  165. <p>Le <strong>support est excellent sur les navigateurs récents</strong>&#160;: <a href="https://caniuse.com/css-focus-visible" hreflang="en"><code>:focus-visible</code> sur <span lang="en" xml:lang="en">Can I Use</span></a>. Le souci est comme d’habitude <abbr title="Internet Explorer" lang="en" xml:lang="en">IE</abbr>11 (mais on s’en fout) et quelques vieux Safari, à vous de voir si vous vous en foutez ou non.</p>
  166. <p>Là où c’est gênant avec ces Safari, c’est que comme ils ne reconnaissent pas du tout <code>:focus-visible</code>, ils décident de purement ignorer la ligne… et parfois d’autres lignes factorisées avec. Ce qui amène à <a href="https://github.com/ProtonMail/WebClients/blob/main/applications/mail/src/app/styles/_layout.scss#L35">des commentaires amusants</a>.</p>
  167. <p>Au pire, vous avez un outil magique pour déployer en douceur&#160;: <code>@supports selector(:focus-visible) {</code>. En clair, si <code>:focus-visible</code> est supporté, alors… faire quelque chose.</p>
  168. <p>Il a pu m’arriver de le déployer en douce, et –&#160;constatant que personne n’avait rien trouvé à redire en 6 mois&#160;– d'annoncer fièrement que c’était en production depuis une demi-année sans que personne ne s’en soit jamais plaint.</p>
  169. <p><h3>Pour conclure</h3></p>
  170. <p>Cette pseudo-classe est un régal à utiliser, et elle permet enfin de <strong>concilier demandes de designs et accessibilité</strong>, voir de même séparer totalement l’expérience clavier du reste. <em lang="la" xml:lang="la" title="À marquer d’une pierre blanche.">Albo notanda lapillo</em>. ]]>
  171.  </description>
  172.  <guid>https://www.nicolas-hoffmann.net/source/1716-Focus-visible-la-pseudo-classe-qui-met-presque-tout-le-monde-d-accord.html</guid>
  173.  <link>https://www.nicolas-hoffmann.net/source/1716-Focus-visible-la-pseudo-classe-qui-met-presque-tout-le-monde-d-accord.html</link>
  174.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  175.  <pubDate>Mon, 05 Dec 2022 14:52:19 +0100</pubDate>
  176. </item>
  177. <item>
  178.  <title><![CDATA[ Ces modifications simples (custom scroll via CSS) ]]></title>
  179.  <description><![CDATA[ Dans la suite directe du billet expliquant qu’<a href="https://www.nicolas-hoffmann.net/source/1714-des-metriques-pour-suivre-activite-dev.html">estimer est difficile/impossible</a>, voici un récent exemple de modification que j’estimais simple, mais qui ne l’a pas été.</p>
  180. <p>Pour certains conteneurs sur ProtonMail V4, on a la possibilité d’activer un <span lang="en" xml:lang="en">scroll</span> légèrement customisé via <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>. Le tout est fait à coups de <a href="https://developer.mozilla.org/fr/docs/Web/CSS/scrollbar-width"><code>scrollbar-width</code></a>, <a href="https://developer.mozilla.org/fr/docs/Web/CSS/scrollbar-color"><code>scrollbar-color</code></a> pour les navigateurs le supportant, et à coups de <a href="https://developer.mozilla.org/fr/docs/Web/CSS/::-webkit-scrollbar"><code>::-webkit-scrollbar</code></a> et ses amis pour les autres. Cela remplace avantageusement des solutions via JavaScript utilisées sur la précédente version qui posaient autant de problèmes qu’elles en résolvaient (incompatibles avec le zoom ou de faibles hauteurs notamment).</p>
  181. <p>La demande est simple&#160;: il faut l’activer par défaut partout. De totale bonne foi, je fais un rapide calcul&#160;:</p>
  182. <p><ol><li>créer une variable pour l’activer ou non&#8239;;</li><li>la mettre dans le fragment Sass.</li></ol></p>
  183. <p>Ok, pas de souci, c’est vraiment <strong>facile à faire, je prévois de faire ça en une petite heure</strong>.</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/wcgw.jpg" width="300" height="223" alt="Que pourrait-il mal se passer ?" loading="lazy"  /></p></div><p>Effectivement, je fais ces modifications très rapidement… et je teste vite fait. Pas de souci, ça s’active bien par exemple sur <a href="https://design-system.protontech.ch/" hreflang="en">la page d’accueil du Design System de ProtonMail</a>.<br />Je fais un tour rapide sur les pages. Cela va être vite réglé. <strong>Que pourrait-il mal se passer&#8239;?</strong></p>
  184. <p>Hé bien, notamment sur cette page&#160;: <a href="https://design-system.protontech.ch/conversations/" hreflang="en">mockup des conversations de ProtonMail v4</a> (et donc sur la v4 en question).</p>
  185. <p>Activé tel quel, le rendu est vraiment pas heureux. C’est encore plus frappant sur les conversations qui alternent en lues (bleu clair)/non lues (blanc).</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/bug-scroll.png" width="374" height="390" alt="Un bug du Custom Scroll" loading="lazy" /></p></div><p>En fait, un espace de couleur uniforme est réservé pour le <span lang="en" xml:lang="en">scroll</span>. Et bien entendu, je n’ai <strong>pas</strong> des contenus de couleurs uniformes (<em>c’est la fin des couleurs uniformes</em> comme dirait la pub qui le vaut bien). Solution&#8239;? </p>
  186. <p></p><ul><li>Essayer de trifouiller la transparence du <span lang="en" xml:lang="en">scroll</span>&#8239;? Pas possible.</li><li>Essayer de mettre le <span lang="en" xml:lang="en">scroll</span> par-dessus&#8239;? Soyons sérieux, pas possible.</li><li>Mettre une bordure sur chaque élément&#8239;! Non. Sinon le conteneur n’aura pas la bordure jusqu’en bas si pas assez de messages.</li></ul><p></p>
  187. <p>Bref, j’en arrive à mettre un conteneur avec la bordure à l’intérieur dudit conteneur qui aura donc le <span lang="en" xml:lang="en">scroll</span>, ainsi, le design des conversations ne sera pas pété. On peut argumenter sur le fait que le <span lang="en" xml:lang="en">scroll</span> semble en dehors de son conteneur, mais c’est quand même mieux. Au pire, on peut envisager une seconde bordure à droite du <span lang="en" xml:lang="en">scroll</span> pour l’entourer mais ce ne sera pas nécessaire.</p>
  188. <p>Alors, refaisons notre calcul. Activer cela, modifier les composants, tester… sur trois projets ayant leurs spécificités. Tiens, <strong>c’est plus long que prévu</strong>. Gag, autre effet de bord découvert de nombreux jours après. Pour peu qu’on ait un contenu en <span lang="en" xml:lang="en">dark mode</span> contenant un contenu clair, le tout peut totalement dérailler avec quelques effets de bords rigolos.</p>
  189. <p>Mais bon, <strong>c’était l’affaire d’une petite heure hein&#8239;?</strong> ]]>
  190.  </description>
  191.  <guid>https://www.nicolas-hoffmann.net/source/1715-Ces-modifications-simples-custom-scroll-via-CSS.html</guid>
  192.  <link>https://www.nicolas-hoffmann.net/source/1715-Ces-modifications-simples-custom-scroll-via-CSS.html</link>
  193.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  194.  <pubDate>Thu, 02 Jul 2020 15:32:11 +0200</pubDate>
  195. </item>
  196. <item>
  197.  <title><![CDATA[ Des métriques pour suivre l’activité d’un dev ? ]]></title>
  198.  <description><![CDATA[ Il y a quelques mois, j’ai suggéré sur Twitter l’idée de faire <a href="https://twitter.com/Nico3333fr/status/1194560070497001472">un billet pour dénoncer les fausses-bonnes idées en matière de métriques</a> pour suivre l’activité d’un développeur.</p>
  199. <p>Hasard du calendrier, le confinement a pu tenter certains emm… –&#160;pardon, je reformule&#160;– certaines personnes stressées par le contrôle peuvent vouloir suivre l’activité d’un développeur.</p>
  200. <p>Qu’on soit clair, je comprends le besoin… non pas de contrôle bête, mais de suivi. <strong>Le suivi est utile</strong>. Pour pouvoir planifier, intercaler, gérer d’autres personnes. C’est légitime. Le contrôle bête et méchant l’est sûrement beaucoup moins.</p>
  201. <p>Et dans notre Startuffe Nation, on peut se poser la question d’<strong>une métrique magique pouvant quantifier l’activité d’un développeur</strong>. En clair, il y a les bonnes et les mauvaises façons de le faire. Commençons par… les mauvaises.</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/notre-projet.webp" width="480" height="270" alt="Les mauvaises métriques, parce que c’est NOTRE PROJET"  loading="lazy" /></p></div><p><h3>Idée débile numéro 1&#160;: au poids&#8239;!</h3></p>
  202. <p>Afin de rester poli, j’évacue de suite l’angle «&#160;<em>Le dev est là pour pisser des lignes de code</em>&#160;». C’est idiot. <strong>Si vous considérez vos dévs ainsi, ne vous fatiguez pas avec de l’humain</strong>. Et si d’aventure, vous aviez quelqu’un correspondant à ce profil, gare&#8239;! Certes, certaines tâches sont répétitives et/ou reviennent entre divers projets. Mais cela veut peut-être dire que votre organisation paie des gens pour faire du travail de robot. Autrement dit, si c’est le cas, cela peut tuer leur créativité, et donc leur capacité à résoudre vos problèmes. Ou alors, vous avez embauché quelqu’un de pas bon.</p>
  203. <p>Hein, je te regarde, toi, chef de projet/directeur/dev qui clame un «&#160;<em>on a toujours fait comme ça, on n’a aucune raison de changer</em>&#160;». C’est bien connu, le Web est réputé pour être quelque chose d’immuable, et tous les projets/contextes sont exactement les mêmes&#8239;! (sarcasmes <i lang="en" xml:lang="en">inside</i>)</p>
  204. <p>Revenons au poids, et prenons un petit exemple. Si je regarde la <abbr title="Pull Request" lang="en" xml:lang="en">PR</abbr> qui fait passer ProtonMail de sa v3 à la v4 en cours de conception, <strong>nous avons réussi quelque chose d’extraordinaire</strong>.</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/v3-v4.png" width="159" height="31" alt="v3 à v4, 50000 ajouts et 3 fois plus de suppressions" loading="lazy" /></p></div><p>Si on paie au poids, nous avons réussi l’exploit de <strong>produire une nouvelle version, et les devs paieront pour cela</strong>, vu que le code a diminué de manière drastique&#8239;! Je passe les chiffres en détail, mais le dégraissage du mammouth a été violent.</p>
  205. <p>Plus sérieusement, on voit bien que <strong>cette métrique n’a pas de sens</strong>. Une refonte peut être l’occasion de dégager du vieux code moisi ou des parties devenues inutiles.</p>
  206. <p><h3>Idée débile numéro 2&#160;: au commit&#8239;!</h3></p>
  207. <p>Regardons le <i lang="en" xml:lang="en">contribution graph</i> de <a href="https://github.com/ProtonMail/react-components/" lang="en" xml:lang="en" hreflang="en">react-components</a>, un projet de composants React faits chez ProtonMail (en gros, des trucs partagés dont on se sert sur tous les projets). Quelque chose vous surprend&#8239;? (vous pouvez cliquer pour agrandir)</p><div><p class="centre"><a href="https://www.nicolas-hoffmann.net/images/divers/contribution-graph-1.png" title="Contribution Graph version 1… (nouvelle fenêtre)" target="_blank" class="internal"><img src="https://www.nicolas-hoffmann.net/images/divers/contribution-graph-1.png" width="300" height="296" alt="Contribution Graph version 1…" loading="lazy" /></a></p></div><p>Je suis 3e, moi, le spécialiste <abbr title="Cascading Style Sheet" xml:lang="en" lang="en">CSS</abbr> de la boite&#8239;!! Seuls deux devs me dépassent au nombre de commits, et je suis devant 5 autres devs <abbr title="JavaScript" xml:lang="en" lang="en">JS</abbr>. Qu’on me donne une augmentation de suite&#8239;!!!</p>
  208. <p>Sauf que… il est possible, je dis bien possible, que j’aie été <strong>très légèrement malhonnête</strong> en présentant cela. Déjà… il ne faut pas croire tout ce qu’on lit sur Internet, et aller <a href="https://github.com/ProtonMail/react-components/graphs/contributors">à la source</a>.</p><div><p class="centre"><a href="https://www.nicolas-hoffmann.net/images/divers/contribution-graph-2.png" title="Contribution Graph, la vraie version, nous sachons (nouvelle fenêtre)" target="_blank" class="internal"><img src="https://www.nicolas-hoffmann.net/images/divers/contribution-graph-2.png" width="300" height="297" alt="Contribution Graph, la vraie version, nous sachons" loading="lazy" /></a></p></div><p>Déjà, on voit le rapport de grandeur est très relatif vu le nombre d’ajouts/suppressions. Et cela n’a <strong>aucun sens de comparer des choux et des carottes</strong>. En l’occurrence, il est aisé de voir que j’opère moins de modifications, et si on creuse un peu, mon job consiste à ajouter des classes, modifier quelques bricoles sur les composants. En outre&#160;:</p>
  209. <p></p><ul><li>Les 4e, 5e et 6e modifient bien plus de choses que moi et c’est normal, c’est leur job de faire du JavaScript&#8239;!</li><li>Cela ne rend également pas compte de l’activité réelle d’autres, qui travaillent plus sur d’autres projets, sont amenés à opérer sur d’autres aspects, etc.</li></ul><p></p>
  210. <p>Bref, pour tuer cette idée, j’ajouterai que j’ai même déjà entendu des devs démotivés se sachant surveillés ainsi… multiplier les commits pour chaque virgule ou point-virgule changé. À bon entendeur. </p>
  211. <p><h3>Idée débile numéro 3&#160;: au temps&#8239;!</h3></p>
  212. <p>Si on regarde bêtement le changement dans la <abbr title="Pull Request" lang="en" xml:lang="en">PR</abbr>&#160;: «&#160;<em>Punaise, il lui a fallu 4H pour changer deux classes dans les templates de l’app&#8239;? Il fait quoi le dev <abbr title="User Interface" lang="en" xml:lang="en">UI</abbr>, il se fait bronzer les doigts de pied&#8239;?</em>&#160;»</p>
  213. <p>C’est possible que le dev <abbr title="User Interface" lang="en" xml:lang="en">UI</abbr> se fasse bronzer oui. Mais ce qui est possible aussi&#160;: </p>
  214. <p></p><ul><li>c’est qu’il ait <strong>galéré à trouver</strong> le maillon qui foire dans un projet complexe avec des abstractions de malade&#8239;;</li><li>qu’il ait été <strong>dérangé entre temps ou demandé sur d’autres trucs</strong>&#8239;;</li><li>que le souci ait été particulièrement <strong>dur à reproduire</strong>&#8239;;</li><li>ou que la sacro-sainte solution soit éclatée sur 4 projets avec 20 contextes, la rendant particulièrement délicate&#8239;;</li><li>ou qu’il soit parti sur une autre piste, et qu’après 20 tentatives, 2 crises de nerfs, 4 arbitrages, un <code>npm i</code> et une crucifixion, le problème ait été réglé différemment (genre le lendemain, un éclair de génie, paf, problème réglé).</li></ul><p></p>
  215. <p>Le temps est quelque chose d’<strong>impossible à estimer</strong>. J’ai plus de 15 ans de métier, et je me gourre encore lourdement sur mes estimations, parce que quantifier l’imprévu ou l’inconnu est <strong>tout sauf une science exacte</strong>. </p>
  216. <p>Encore ces derniers jours, j’ai estimé deux demandes en mode «&#160;<em>oui ça c’est simple, une demi-journée max tout compris</em>&#160;», et sans pêcher par orgueil, ça me semblait vraiment simple. Sauf que non&#160;: effets de bord, soucis divers imprévisibles. 2 jours de taf.</p>
  217. <p>Et par pitié, ne confondez pas durée et délai. Un jour de taf, si on est sur plusieurs projets, ça peut s’étaler sur plusieurs jours. Allez, je passe sur toutes les autres idées complètement débiles.</p>
  218. <p><h3>De meilleures métriques</h3></p>
  219. <p>Désolé de ce truisme (j’adore placer ce mot), mais <strong>faire confiance à vos devs, ça fera partir tout le monde sur de bonnes bases</strong>. </p>
  220. <p>Si vos devs disent que c’est compliqué de développer, c’est que ça l’est. Et s’ils disent qu’estimer est difficile/impossible, c’est que ça l’est vraiment. Si on le dit tous, c’est pas un complot des francs-développeurs dans le monde, c’est que c’est vrai.</p>
  221. <p>Voici quelques pistes&#160;: </p>
  222. <p></p><ul><li>De la valeur business est-elle produite dans le temps sur un même produit (je cite <a href="https://twitter.com/alborq42/status/1194624076633067520">une réponse très juste</a>)&#8239;?</li><li>Les clients sont-ils contents&#8239;?</li><li>Est-ce que votre dev est apprécié des autres humainement&#8239;?</li><li>Est-ce que son travail facilite celui des autres&#8239;?</li><li>Maîtrise-t-il sa partie&#8239;?</li><li>Est-ce que les tâches sont expédiées et résolues&#8239;?</li><li>Est-ce qu’au long cours, son travail permet de continuer à garder la vélocité de l’équipe, ou est-ce que cela devient de plus en plus dur&#8239;?</li><li>Est-ce que sa partie facilite des évolutions non prévues initialement&#8239;?</li><li>Etc.</li></ul><p></p>
  223. <p>Certes, tout cela est plus difficile à quantifier via une formule magique. Surtout sur des mastodontes que personne ne maitrise. <br />Ceci dit, avec de la confiance et surtout des ambiances saines, cela <strong>se construit</strong>.</p>
  224. <p>Après, cela ne veut pas dire que les estimations sont à jeter, mais il faut les considérer comme ce qu’elles sont&#160;: des approximations. Cela peut donner une idée –&#160;imprécise&#160;– de la charge de travail.</p>
  225. <p>Pas plus tard qu’il y a 3 jours, j’ai entendu un <i lang="en" xml:lang="en">Product Owner</i> dire «&#160;<em>je me fous de l’exactitude des estimations, tout ce que je veux, c’est avoir une idée de la quantité de boulot, et voir qu’on avance. Et si un jour, la boîte commençait à avoir des lemmings qui n’ont d’autres boulots que de surveiller ça, vous vous barrerez vite car la boite sera devenue merdique</em>&#160;». Tout est dit.</p>
  226. <p>Mais pour conclure&#160;: <strong>comptez le coût induit par la mise en place d’outils pour gérer la non-confiance</strong>, que ce soit en humain, temps, argent, processus, bien-être… et <strong>comptez le coût de la confiance</strong>. C’est peut-être délirant, mais croyez que la balance est nettement en faveur de cette dernière, sans compter les effets bénéfiques induits. ]]>
  227.  </description>
  228.  <guid>https://www.nicolas-hoffmann.net/source/1714-des-metriques-pour-suivre-activite-dev.html</guid>
  229.  <link>https://www.nicolas-hoffmann.net/source/1714-des-metriques-pour-suivre-activite-dev.html</link>
  230.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  231.  <pubDate>Mon, 11 May 2020 19:06:06 +0200</pubDate>
  232. </item>
  233. <item>
  234.  <title><![CDATA[ Note de lecture&#160;: Grid Layout, de Raphaël Goetter ]]></title>
  235.  <description><![CDATA[ J’ai eu le plaisir de recevoir le dernier livre de Raphaël Goetter, intitulé «&#160;<strong><span lang="en" xml:lang="en">Grid Layout</span>, vous allez enfin aimer <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr></strong>&#160;». Ce livre est sorti depuis le 18 Février de cette année.</p><div><p class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/grid-couverture-mini.png" width="165" height="200" alt="Grid Layout, par Raphaël Goetter"  /></p></div><p>Un livre entier pour un seul module de <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>&#8239;! Est-ce bien raisonnable&#8239;?</p>
  236. <p>Hé bien, autant dire de suite&#160;: <strong>oui, et cela ne sera pas de trop&#8239;!</strong> Si le positionnement en <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> a toujours été une partie de plaisir (<em>tousse très fort</em>) et absolument pas limitatif (<em>s’étouffe en toussant</em>), là, nous tenons un des modules majeurs, car parmi les plus puissants qui soit. </p>
  237. <p>Des choses soit difficilement faisables jusqu’à présent (fusion de cellules) ou souvent bricolées (grilles robustes et responsive, avec des marges négatives par exemple) sont désormais possibles sans bidouillage, et le tout très simplement. Il m’arrive parfois de me servir de <span lang="en" xml:lang="en">Grid Layout</span>, et je me surprends à constater la puissance et la concision de ce nouveau module. </p>
  238. <p>Ce module ne va pas vous dispenser des bonnes pratiques sur <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> (séparation layout/positionnement d’un élément), mais va permettre dans l’absolu de gérer le positionnement global beaucoup plus aisément&#160;: on peut commencer à envisager de se passer de conteneurs exclusivement pour le positionnement, <span lang="en" xml:lang="en">Grid Layout</span> permet aussi bien de créer des systèmes complexes que des choses très simples. </p>
  239. <p>En pratique, m’est d’avis que les règles de scalabilité/réutilisabilité risquent de nous faire revenir sur terre dans les intégrations complexes, mais qu’on ne se méprenne pas, <strong>le pas franchi avec <span lang="en" xml:lang="en">Grid Layout</span> est gigantesque, les possibilités sont énormes</strong>.</p>
  240. <p>Sinon, que dire de plus sur l’auteur, est-il encore besoin de le présenter&#8239;? Passionné des <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> et des <a href="https://knacss.com/">Knacss</a>, <strong>coutumier des bons livres et… coutumier des interventions sur <span lang="en" xml:lang="en">Grid Layout</span></strong> depuis un certain temps. Autant j’avais eu le plaisir il y a quelques années de co-présenter un atelier sur <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> en duo avec lui, mais la dernière fois, j’étais simple élève lors d’un de ses ateliers sur le sujet à Paris Web en 2018. </p>
  241. <p>Je retrouve tout le style de Raphaël -&#160;style, <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>, vous suivez&#160;- dans ce livre, très proche de son atelier, en bien plus complet bien sûr&#160;: <strong>expliquer les choses simplement, pas à pas, sans pour autant trainer. C’est efficace, on apprend vite et bien</strong>. Le livre se lit rapidement, il se dévore même.</p>
  242. <p>Bref, vous l’aurez compris&#160;: je ne peux que vous recommander la lecture de cet ouvrage. Chapeau Raphaël, ton nom truste ma bibliothèque en matière de <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>. ;)</p>
  243. <p>Si vous voulez en savoir plus sur cet ouvrage, voici le site dédié&#160;: <a href="http://goetter.fr/livres/gridlayout/"><span lang="en" xml:lang="en">Grid Layout</span>, vous allez enfin aimer <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr></a>. ]]>
  244.  </description>
  245.  <guid>https://www.nicolas-hoffmann.net/source/1713-Note-de-lecture-Grid-Layout-de-Raphael-Goetter.html</guid>
  246.  <link>https://www.nicolas-hoffmann.net/source/1713-Note-de-lecture-Grid-Layout-de-Raphael-Goetter.html</link>
  247.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  248.  <pubDate>Tue, 30 Apr 2019 14:59:00 +0200</pubDate>
  249. </item>
  250. <item>
  251.  <title><![CDATA[ Créer un RevealJS light avec CSS Scroll Snap Points ]]></title>
  252.  <description><![CDATA[ Cela faisait un certain moment que je voulais tester ce module <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> ainsi d’autres choses, l’occasion m’en a été donnée avec <a href="https://www.nicolas-hoffmann.net/sudweb/">mes slides de Sud Web 2018</a>. Voici un petit retour d’expérience.</p>
  253. <p>Attention, je le dis de suite&#160;: <strong>certaines parties de ce délire ne sont clairement PAS utilisables en production à grande échelle</strong>. Je me le suis permis car j’étais dans un contexte totalement maitrisé… et vous allez voir que je ne m’en suis vraiment pas privé. Grosso modo, c’est un RevealJS en version très light, codé à la rache en moins de deux heures.</p><div class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/15ans-sudweb.png" width="300" height="160" alt="Présentation à Sud Web" /></div><p><h3 lang="en" xml:lang="en"><em><abbr title="Cascading Style Sheet">CSS</abbr> Scroll Snap Points</em></h3></p>
  254. <p>L’idée de <em lang="en" xml:lang="en"><abbr title="Cascading Style Sheet">CSS</abbr> Scroll Snap Points</em> est de permettre de définir une force d’adhérence aux points d’accroche en cas de défilement d’un conteneur. Le <em lang="en" xml:lang="en">viewport</em> du conteneur doit s’arrêter à un point d’accroche s’il n’est pas en train de défiler. Ce n’est pas clair&#8239;? Rassurez-vous, c’est normal&#8239;! </p>
  255. <p>Un exemple vaut mille mots, allez voir (idéalement avec Firefox) <a href="https://codepen.io/nico3333fr/pen/BVLeKY">un exemple</a>.</p>
  256. <p>Comme vous pouvez le voir, l’idée des slides en <abbr title="HyperText Markup Language" lang="en" xml:lang="en">HTML</abbr> est assez simple. En clair, chaque élément aura une taille de <code>100%</code> et une hauteur de <code>100vh</code>. Et dès qu’on se déplacera, <em lang="en" xml:lang="en"><abbr title="Cascading Style Sheet">CSS</abbr> Scroll Snap Points</em> permettra d’aller de slide en slide, nativement si j’ose dire.</p>
  257. <p>La petite surprise, c’est que le <em lang="en" xml:lang="en">touch</em> est très très bien géré ainsi (essayez sur une Surface sur Firefox ou sur Edge). Et une fois que le focus est sur la page… les flèches gauche et droite permettent aussi de gérer le déplacement. Vous voyez l’intérêt pour un carrousel par exemple&#8239;? :)</p>
  258. <p>En clair, ce module <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> a beaucoup d’avantages. Actuellement, le <em lang="en" xml:lang="en">touch</em> est très bien géré par Edge et Firefox (les points d’adhérence sont effectifs). Chrome et autres ne semblent pas (encore) les gérer.</p>
  259. <p>Dans mon cas, cela s’est limité à définir un conteneur <code>scroll-snap-type: mandatory</code> et <code>scroll-snap-points-x: repeat(100%)</code>. Et à donner à chaque slide la largeur/hauteur complète du <em lang="en" xml:lang="en">viewport</em>. Oui, c’est aussi simple que cela.</p>
  260. <p>La doc&#160;: <a href="https://developer.mozilla.org/fr/docs/Web/CSS/scroll-snap-type"><em lang="en" xml:lang="en"><abbr title="Cascading Style Sheet">CSS</abbr> Scroll Snap Points</em></a></p>
  261. <p><h3 lang="en" xml:lang="en">Intersection Observer</h3></p>
  262. <p>Grosso modo, l’idée de cette <abbr title="Application Programming Interface" lang="en" xml:lang="en">API</abbr> est de gérer quand un élément «&#160;observé&#160;» rentre ou sort du <em lang="en" xml:lang="en">viewport</em>, d’appeler une fonction quand c’est le cas, cela évite de devoir le faire soi-même avec des fonctions plus ou hasardeuses et/ou coûteuses en performance.</p>
  263. <p>Pour être très franc, au début, j’ai voulu utiliser cela juste pour avoir l’occasion de m’en servir (je n’en ai eu l’utilité que plus tard), voir <a href="https://developer.mozilla.org/fr/docs/Web/API/Intersection_Observer_API">la documentation d’<span lang="en" xml:lang="en">Intersection Observer</span></a>.</p>
  264. <p>L’idée était de pouvoir ajouter une classe pour savoir quelle était la slide active. En clair, je surveille toutes les slides. </p>
  265. <p><pre><code>if ('IntersectionObserver' in window) {<br />   // IntersectionObserver Supported<br />   let config = {<br />      root: null,<br />      rootMargin: '0px',<br />      threshold: 0.5<br />   };<br />   let observer = new IntersectionObserver(onChange, config);<br />   slides.forEach(slide => observer.observe(slide));<br />} else {<br />   // IntersectionObserver NOT Supported<br />   console.log('Whomp Whomp Whomp');<br />   }<br /></code></pre></p>
  266. <p>Et quand une passe dans le <em lang="en" xml:lang="en">viewport</em>, je lui ajoute la classe <code>is-active</code> et au passage j’ajoute le fragment correspondant dans l’URL.</p>
  267. <p><pre><code>function onChange(changes) {<br />   changes.forEach(change => {<br />      if (change.intersectionRatio > 0.5) {<br />         change.target.classList.add('is-active');<br />         history.pushState(null, null, location.pathname + location.search + '#' + change.target.getAttribute('id'));<br />         } else {<br />             change.target.classList.remove('is-active');<br />            }<br />   });<br />}<br /></code></pre></p>
  268. <p>C’était un caprice au début, mais cela va se révéler utile ensuite.</p>
  269. <p><h3>Ajouter des contenus qui apparaissent/bougent</h3></p>
  270. <p>Dans la présentation, à plusieurs moments je me suis dit que ce serait bien d’avoir des contenus qui apparaissent au fur et à mesure dans la même slide. Du coup, j’ai mis quelques boutons ainsi.</p>
  271. <p><pre><code>&lt;button class="js-next" data-next="next_2"&gt;Ce qui change…&lt;/button&gt;</code></pre></p>
  272. <p>En clair, quand ce bouton est activé, il va chopper l’élément qui a l’<code>id</code> <code>next_2</code> et il le fait apparaître.</p>
  273. <p>Oui c’est pas génial point de vue accessibilité, on peut faire mieux, je sais&#8239;! :)</p>
  274. <p><h3>Gérer la télécommande</h3></p>
  275. <p>Durant les répétitions, je me suis rendu compte que devoir me rapprocher de ma Surface pour activer les boutons/passer les slides était gênant pour le rythme et ma liberté sur scène (et bien m’en a pris vu la configuration du lieu le jour même). C’est là que je me suis amusé à coder un peu de raffinement… qui va s’avérer vital durant la présentation.</p>
  276. <p>Grosso modo, la télécommande envoie un événement clavier (voir <a href="http://keycode.info/">keycode.info</a>), comme si on appuyait sur <kbd>Page Down</kbd> (34) ou <kbd>Page Up</kbd> (33). J’avais déjà codé que si cet événement arrivait, j’appelais une fonction qui passait à la slide suivante/précédente. Pour l’animation, je ne me suis pas cassé la tête, j’ai utilisé <code>scrollIntoView</code>, et comme je n’avais pas de souci de compatibilité, j’ai utilisé l’option <code>behavior: "smooth"</code> (attention, <a href="https://developer.mozilla.org/fr/docs/Web/API/Element/scrollIntoView">le support est très variable selon les navigateurs</a>, la version de base ne marche pas trop mal, mais <code>scrollIntoViewOptions</code> est plus rare).</p>
  277. <p>Comme je voulais pouvoir activer les boutons, l’idée est assez simple&#160;: si j’ai un bouton non encore activé dans la slide active, alors j’envoie un clic dessus.</p>
  278. <p><pre><code>if (eventName === 'keydown' &amp;&amp; 34 === e.keyCode) {<br />  let activeSlide = document.querySelector('.slide.is-active');<br />  let buttonNext = activeSlide.querySelector('.js-next:not(.has-been-pressed)');<br />  if (buttonNext) {<br />  buttonNext.click();<br />  } else {<br />    let buttonAnim = activeSlide.querySelector('.js-anim:not(.has-been-played)');<br />    if (buttonAnim) {<br />      buttonAnim.click();<br />    } else {<br />      let slides = [].slice.call(document.querySelectorAll('.slide'));<br />      selectSlideInList(slides, 'next');<br />    }<br />  }<br />}</code></pre></p>
  279. <p>Dans la fonction qui permet de revenir en arrière (sait-on jamais, des fois que j’en aie besoin durant la présentation), j’ai réinitialisé les boutons d’animation et suivants. Ce n’est pas optimal, mais ça me permettra de les rejouer si besoin est.</p>
  280. <p>Et hop, le job était fait, <strong>je contrôlais l’intégralité de la présentation à la télécommande</strong>. Bien m’en a pris, car ce sera obligatoire sur place.</p>
  281. <p><h3>En conclusion</h3></p>
  282. <p>Certes c’est un exercice de style fait à la rache, mais grosso modo, avec quelques <abbr title="Application Programming Interface" lang="en" xml:lang="en">API</abbr>s, de la <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>, très peu de JavaScript et un peu d’huile de coude, j’ai pu tester quelques trucs et <strong>recréer un mini-système façon RevealJS en très peu de temps</strong>.</p>
  283. <p>Il serait assez facile d’ajouter une version imprimable, de perfectionner le système, j’avais même fait quelques essais pour avoir des slides horizontales et verticales, à creuser pour plus tard, car là je n’ai clairement pas eu le temps.</p>
  284. <p>Là où je me dis que cela est intéressant, c’est pour un hypothétique carrousel&#160;: <strong>on n'aurait plus à gérer le <em lang="en" xml:lang="en">touch</em> à coups de JavaScript, mais tout serait fait automatiquement grâce à <em lang="en" xml:lang="en"><abbr title="Cascading Style Sheet">CSS</abbr> Scroll Snap Points</em></strong>… quand il fonctionnera correctement chez Webkit.</p>
  285. <p>Voilà, si vous avez des remarques ou des commentaires, à votre disposition&#8239;!  ]]>
  286.  </description>
  287.  <guid>https://www.nicolas-hoffmann.net/source/1712-Creer-un-RevealJS-light-avec-CSS-Scroll-Snap-Points.html</guid>
  288.  <link>https://www.nicolas-hoffmann.net/source/1712-Creer-un-RevealJS-light-avec-CSS-Scroll-Snap-Points.html</link>
  289.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  290.  <pubDate>Thu, 07 Jun 2018 17:49:44 +0200</pubDate>
  291. </item>
  292. <item>
  293.  <title><![CDATA[ Le manifeste du développeur à moyen ou long terme ]]></title>
  294.  <description><![CDATA[ La vision à court terme n’est pas un gros mot, mais fonctionner uniquement ainsi ne m’intéresse pas.</p>
  295. <p>On va se lâcher avec des trucs super récents&#8239;? Fort bien, mais si cela n’est pas raisonnablement consultable, le plaisir est de courte durée. Le front-end est un milieu hostile, et <strong>dompter cette hostilité est un plaisir</strong>.</p>
  296. <p>Être à la manœuvre&#8239;? Pourquoi pas. Mais avec l’expérience, je prends autant voire plus de plaisir à créer les systèmes qui permettent aux autres de réussir ou du moins de créer un écosystème qui progresse à son rythme, mais qui progresse toujours. Et un client raisonnablement indépendant est un client qui nous demande des choses à forte valeur ajoutée. Je n’ai rien contre produire des pages, mais ne faire que cela… je peux être mieux employé.</p>
  297. <p>Tout industrialiser&#8239;? Pas nécessairement, mais <strong>investir du temps pour en gagner</strong>, là je dis oui.</p>
  298. <p>Projet innovant&#8239;? Pourquoi pas. Et si on innovait en <strong>maîtrisant la qualité et l’accessibilité</strong> aussi&#8239;? Je prends autant mon pied sur un petit projet bien ficelé que sur un truc énorme, tant que mes indicateurs ne descendent pas en-dessous de 90. </p>
  299. <p>Vous croyez que je refuse les challenges&#8239;? Disons que les projets licornes qui vont faire trimer un débutant ne sont pas assurance de kif chez moi, cela peut l’être mais pas nécessairement. Je prends autant et surtout mon pied <strong>sur des choses que personne ne voit mais que tout le monde apprécie</strong>.</p>
  300. <p>Même si j’en suis capable, ne me parlez pas trop de projet dont les 6 mois nécessaires à un bon travail vont être compressés en deux mois, et où il faudra de nouveau 6 mois pour éponger tant bien que mal les tonnes de dette technique accumulées. C’est épuisant. Autant pour le budget que pour mon moral. Ce sont des trous sans fond. Personne n’en est jamais content in fine. <strong>Un peu de dette oui, des tonnes non</strong>.</p>
  301. <p>Avantage en baby-foot&#8239;? Parlez-moi plutôt de formation. Vous voulez que je valorise vos projets, valorisez donc mon savoir et faites-le mûrir. <strong>Je ne sais pas tout, mais j’ai soif d’apprendre</strong>. Même si je peux et vais avoir la trouille face à l’inconnu, mon envie d’apprendre la surpassera quoi qu’il arrive.</p>
  302. <p>Si vous misez sur moi au long terme, vous aurez du retour sur investissement continuellement, et sur du long terme. Parlez-moi de vision, montrez-moi où vous voulez aller, je vous dirais comment nous y irons.</p>
  303. <p>Ceci est mon <strong>manifeste</strong>. ]]>
  304.  </description>
  305.  <guid>https://www.nicolas-hoffmann.net/source/1711-Le-manifeste-du-developpeur-a-moyen-ou-long-terme.html</guid>
  306.  <link>https://www.nicolas-hoffmann.net/source/1711-Le-manifeste-du-developpeur-a-moyen-ou-long-terme.html</link>
  307.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  308.  <pubDate>Tue, 01 May 2018 10:24:57 +0200</pubDate>
  309. </item>
  310. <item>
  311.  <title><![CDATA[ Déployer cache-control: immutable avec du cache-busting ]]></title>
  312.  <description><![CDATA[ L’autre jour, je m’amusais à tester mon site <a href="https://van11y.net/fr/">Van11y</a> sur divers outils, et notamment celui-ci&#160;: <a href="https://sonarwhal.com/scanner/" hreflang="en" xml:lang="en" lang="en">Sonarwhal</a>.</p>
  313. <p>Ce dernier propose une piste d’amélioration que je n’avais pas essayée jusqu’à présent, à savoir implémenter <code>Cache-Control: immutable</code>. J’avais entendu parler de cette possibilité via ma veille habituelle, mais je n’avais jamais essayé en pratique.</p><div class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/cache-control-immutable.png" width="335" height="105" alt="cache-control: immutable"  /></div><p><h3>Cache-control: immutable</h3></p>
  314. <p>Cette possibilité a été motivée principalement par de gros sites comme Facebook. Ces derniers ont constaté que bon nombre de leurs utilisateurs utilisaient énormément la touche <kbd>F5</kbd> (<abbr title="Y a du neuf sur ma page ?????">allez savoir pourquoi</abbr>&#8239;!). Les éléments dits statiques sont bien mis en cache, mais toutefois le navigateur doit deviner quels éléments ont été modifiés, il réinterroge donc le serveur qui lui renvoie un code 304, qui lui signifie «&#160;Non modifié&#160;».</p>
  315. <p>En pratique, sur de tous petits fichiers, le coût de cette revalidation est plus élevé que de re-télécharger le fichier en question. Ajoutons à cela qu’un site comme Facebook a beaucoup de fichiers statiques (images, etc.) et d’énormes besoins en temps serveur et en bande-passante. Et comme dirait La Palice&#160;: </p>
  316. <p><blockquote>La requête la plus rapide est celle que l’on ne fait jamais.</blockquote></p>
  317. <p>Bref, l’intérêt de <code>Cache-Control: immutable</code>&#8239;? Grosso modo, c’est d’<strong>éviter cette étape de validation, en disant au navigateur que l’élément en question ne changera jamais</strong>, il est dit «&#160;immutable&#160;».</p>
  318. <p>Ce «&#160;petit changement&#160;» implique certaines précautions.</p>
  319. <p><h3>Avoir une stratégie de <em lang="en" xml:lang="en">cache-busting</em></h3></p>
  320. <p>J’en avais une sur les <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> et sur le JavaScript (qui sont faits automatiquement), mais j’étais quelque peu fainéant sur d’autres éléments. Qu’à cela ne tienne, c’était l’occasion de s’amuser à le faire comme il faut, sur un site avec relativement peu de contenus.</p>
  321. <p>Autant le dire de suite&#160;: dans ce cas, je l’ai fait de manière très artisanale. La plupart des <abbr title="Content Management System" lang="en" xml:lang="en">CMS</abbr> et bon nombre d’autres systèmes le font pour vous automatiquement.</p>
  322. <p>En pratique, sans cette stratégie, si vous envoyez le fichier <code>/images/logo.svg</code>, et si vous deviez mettre à jour ce fichier sur votre serveur, il faudra le renommer. Vous voyez l’écueil&#8239;? <strong>Changer à la main le nom d’un fichier sur un nombre conséquent de pages n’est absolument pas gérable</strong>.</p>
  323. <p>Il existe toutes sortes de techniques de <em lang="en" xml:lang="en">cache-busting</em>, mais la plus passe-partout consiste à utiliser de l’<abbr title="Uniform Resource Locator" xml:lang="en" lang="en">URL</abbr>-<span xml:lang="en" lang="en">rewriting</span> (la réécriture d’adresse en bon français). En clair, on va demander au serveur de réécrire l’adresse <code>/images/logo_&lt;ici une valeur qu’on fera changer&gt;.svg</code> en <code>/images/logo.svg</code>. Cela peut se faire via un <code>htaccess</code>&#160;:</p>
  324. <p><pre><code>RewriteCond %{REQUEST_FILENAME} !-f<br />RewriteCond %{REQUEST_FILENAME} !-d<br />RewriteRule ^(.+)_(\d+)\.(css|js)$ $1.$3 [L]</code></pre></p>
  325. <p>En clair, si l’<abbr title="Uniform Resource Locator" xml:lang="en" lang="en">URL</abbr> demandée n’est ni un fichier ni un répertoire, et avec les extensions ci-dessus, alors <code>fichier_xxxxxxxx.extension</code> va être réécrit ainsi sur le serveur <code>fichier.extension</code>. Par exemple, <code>css/styles_mini_1516114378.css</code> sera réécrit en <code>css/styles_mini.css</code> (et ce fichier est bien sur mon serveur).</p>
  326. <p>Par contre, c’est bien l’<abbr title="Uniform Resource Locator" xml:lang="en" lang="en">URL</abbr> <code>css/styles_mini_1516114378.css</code> qui va être mise en cache. Une mise à jour sur la <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>&#8239;? Le <em lang="en" xml:lang="en">cache-buster</em> va être mis à jour, par exemple en <code>css/styles_mini_<strong>1516114666</strong>.css</code>. </p>
  327. <p><h3>En pratique pour le <em lang="en" xml:lang="en">cache-busting</em></h3></p>
  328. <p>Grosso modo, j’ai repéré tous les types de fichiers qui devaient en bénéficier, et j’ai mis cela dans mon <code>htaccess</code> principal&#160;:</p>
  329. <p><pre><code>RewriteCond %{REQUEST_FILENAME} !-f<br />RewriteCond %{REQUEST_FILENAME} !-d<br />RewriteRule ^(.+)_(\d+)\.(css|js|webmanifest|ico|png|jpg|svg|js|eot|ttf|woff|woff2)$ $1.$3 [L]</code></pre></p>
  330. <p>Ensuite, il a fallu <strong>ajouter le <em lang="en" xml:lang="en">cache-buster</em> partout où il est nécessaire</strong>. Sur les <code>img</code> de contenu, j’ai utilisé une fonction en <abbr title="PHP Hypertext Preprocessor" xml:lang="en" lang="en">PHP</abbr> qui renvoie le timestamp Unix de dernière modification du fichier (<a href="http://php.net/manual/fr/function.filemtime.php">filemtime()</a>) et qui insère le <em lang="en" xml:lang="en">cache-buster</em> dans le nom du fichier.</p>
  331. <p><pre><code>return '_'.filemtime($prefix. $chemin_img);</code></pre></p>
  332. <p>Dans la <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>, pour les rares images et autres éléments utilisés… fainéantise absolue, je l’ai fait à la main. Si si. Il existe des outils qui le font pour vous. Là, les besoins étaient si maigres… que j’ai eu la flemme.</p>
  333. <p>Pour les fichiers <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr>, là j’avais déjà des fonctions qui le faisaient automatiquement, en plus de faire d’autres choses (minification, calcul d’intégrité, etc.). Idem pour le JavaScript.</p>
  334. <p>Comme les démos du site sont reprises depuis les dépôts Github de chaque projet (pour m’éviter de me fatiguer quand je les mets à jour), j’ai modifié les fonctions qui récupèrent les fichiers pour ajouter les <em lang="en" xml:lang="en">cache-busters</em> aux bons endroits (<abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> et JavaScript). Hop, tout est automatisé, point d’effort. </p>
  335. <p><h3>En pratique pour déployer l’en-tête proprement dite</h3></p>
  336. <p>Une fois la stratégie de <em lang="en" xml:lang="en">cache-busting</em> correctement déployée, il ne reste plus grand chose à faire, j’ai mis ceci dans <a href="https://github.com/nico3333fr/htaccess-useful/blob/master/.htaccess" hreflang="en">mon <code>htaccess</code> habituel</a>&#160;:</p>
  337. <p><pre><code>&lt;FilesMatch "\.(css|js|webmanifest|ico|png|jpg|svg|js|eot|ttf|woff|woff2)$"&gt;<br />  &lt;IfModule mod_headers.c&gt;<br />    Header set Cache-Control "public, max-age=31536000, immutable"<br />    ...<br />  &lt;/IfModule&gt;<br />&lt;/FilesMatch&gt;<br /></code></pre></p>
  338. <p>Et c’est terminé.</p>
  339. <p>Un point de détail amusant&#160;: Sonarwhal va –&#160;à juste titre&#160;– vous gronder si vous déployez <code>Cache-Control: immutable</code> sans stratégie de <em lang="en" xml:lang="en">cache-busting</em>. L’outil ne reconnaissait pas celle que j’avais utilisée, <a href="https://github.com/sonarwhal/sonarwhal/issues/741#issuecomment-358002292" hreflang="en">je le signale aux développeurs</a>, qui ont été super réactifs et qui ont mis l’outil à jour. Un bravo à eux&#8239;!</p>
  340. <p>Un autre point de détail&#160;: <code>Cache-Control: immutable</code> ne sera <strong>honoré sous Firefox que si le contenu est servi en <abbr title="HyperText Transfer Protocol Secure" lang="en" xml:lang="en">HTTPS</abbr></strong>. Cela semble assez logique&#160;: il faut être sûr que le contenu n’ait pas été modifié entre le serveur et le navigateur.</p>
  341. <p><h3>En conclusion</h3></p>
  342. <p>Disons-le clairement, l’impact sur les performances sur un site ultra-léger et rapide comme Van11y est quasi-nul. C’est d’autant plus beau que c’est totalement dispensable. :)</p>
  343. <p>C’est un petit exercice de style auquel je me suis livré, plus pour m’amuser qu’autre chose. C’est toujours l’occasion de mettre des bonnes pratiques en place, sur des projets sympathiques et peu chronophages. <strong>Ces bonnes pratiques sont utiles</strong> même si vous ne déployez pas <code>Cache-Control: immutable</code>.</p>
  344. <p>Pour en savoir plus&#160;:</p>
  345. <p></p><ul><li><a href="https://hacks.mozilla.org/2017/01/using-immutable-caching-to-speed-up-the-web/" hreflang="en" xml:lang="en" lang="en">Using Immutable Caching To Speed Up The Web</a></li><li><a href="https://discuss.httparchive.org/t/cache-control-immutable-a-year-later/1195" hreflang="en" xml:lang="en" lang="en">Cache Control Immutable - A Year Later</a></li></ul><p> ]]>
  346.  </description>
  347.  <guid>https://www.nicolas-hoffmann.net/source/1710-Deployer-cache-control-immutable-avec-du-cache-busting.html</guid>
  348.  <link>https://www.nicolas-hoffmann.net/source/1710-Deployer-cache-control-immutable-avec-du-cache-busting.html</link>
  349.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  350.  <pubDate>Thu, 08 Feb 2018 18:13:57 +0100</pubDate>
  351. </item>
  352. <item>
  353.  <title><![CDATA[ J’ai arrêté de troller, retour d’expérience ]]></title>
  354.  <description><![CDATA[ Un peu de pop-corn mais sur un sujet sérieux&#160;: depuis quelques années, j’ai fortement limité ma consommation de trolls. </p>
  355. <p>Attention&#160;: des traces de glu… de second degré peuvent être présents dans ce billet.</p>
  356. <p><h3>L’existant</h3></p>
  357. <p>Troller, quand on est dans l’informatique (le militantisme aussi), c’est un peu comme une seconde nature (même une première nature chez certains et certaines).</p>
  358. <p>Que celui ou celle qui n’a jamais participé à une discussion sans fin sur un sujet (Emacs/VI, Linux est-il prêt pour le desktop, <abbr lang="en" xml:lang="en" title="Cascading Style Sheet">CSS</abbr> est-il un langage, les classes atomiques/les classes sémantiques, etc.) lié à l’informatique me jette la première pierre. Il est difficile de trouver un domaine en informatique avec un nombre raisonnable de personnes intéressées qui n’y échappe pas (cela doit être un corolaire de la loi du point GodWin).</p>
  359. <p>Ajoutons que les réseaux sociaux ont tendance à favoriser cela&#160;: un message court peut être moins précis, et donc mal interprété, et donc déclencher une réaction, etc. Leur instantanéité n’est pas un mal en soi, mais autant prendre conscience que c’est pas le meilleur endroit pour se sevrer. Et disons-le clairement, certaines personnes ne cherchent que cela&#160;: vous faire démarrer (ou se mettre en colère).</p>
  360. <p><h3>Protocole de désintoxication</h3></p>
  361. <p>Un sevrage brutal est trop difficile pour commencer. Il faut soit trouver un substitut (<a href="https://www.nicolas-hoffmann.net/source/1708-Un-commit-tous-les-jours.html">un <span lang="en" xml:lang="en">commit</span> tous les jours</a> est un exemple), soit commencer à se désintoxiquer progressivement.</p>
  362. <p>Si vous rechutez plusieurs fois avec les mêmes personnes, limitez-en la consommation. Trop écorchées vives, ces personnes vont vous faire rechuter systématiquement… et avec l’effet de manque, vous rechuterez encore plus violemment. À la fin, si c’est en arriver à ce que les défenseurs de la cause animale s’engueulent avec les témoins de #balanceTonPorc (si si, je l’ai vu), autant fuir.</p>
  363. <p><h3>En pratique</h3></p>
  364. <p>Perso, j’ai trouvé un réflexe. Avant de réagir à un sujet potentiellement polémique, je me pose les questions suivantes&#160;:</p>
  365. <p></p><ul><li><strong>Cela va mener à quoi&#8239;?</strong> Si c’est à rien, autant se taire. (refaire Boostrap en Dart… Thomas, si tu me lis, je t’aime)</li><li>Y a-t-il <strong>des chances pour que la discussion parte en live</strong> ou que mon propos soit mal interprété&#8239;? Si oui, ne rien dire ou éviter (***-nazi(e) si tu me lis).</li><li>La personne est-elle <strong>prête à entendre un avis différent</strong>&#8239;? Si non, autant la fermer… votre bouche, pas la personne (trop difficile en plus).</li><li>Est-ce que <strong>je commets une généralisation abusive</strong>&#8239;? Si je peux trouver un contre-exemple, fut-il le seul sur la planète (si si, j’ai trouvé des végans mesurés dans leurs propos), interdiction de dire la chose.</li></ul><p></p>
  366. <p>Du coup, cela me permet d’attribuer un nombre de points troll. Après, pour se sevrer, un bon atout&#160;: la fainéantise. J’économise mon énergie et je suis lent à réagir… du coup <strong>le temps que la vague soit passée, vous arrivez quand les trolls sont épuisés</strong> (savoir si les poins médians sont une maltraitance de la cause animale, savoir si la transpiration sur le vélo implique plus de consommation d’eau pour nettoyer le vélo-taffeur, etc.), et curieusement, il est plus facile de s’en détacher quand les arguments sont à la ramasse.</p>
  367. <p>Le nombre de messages que j’ai commencé à écrire… puis tout à coup, je les efface et je me dis «&#160;Non allez, ça sert à rien&#160;».</p>
  368. <p><h3>Ce que les trolls disent de nous</h3></p>
  369. <p>En fait, le troll révèle ce qui nous touche (et qui fait mal des fois). Comme disait le regretté Coluche&#160;: <em>plus ils se passionnent et plus ils sont cons</em> (je suis le premier passionné par pleins de choses). Je vous laisse mettre la catégorie que vous voulez là-dedans. </p>
  370. <p>Je me permets de <a href="https://twitter.com/Nico3333fr/status/943943315862454272">m’auto-citer</a>&#160;:</p>
  371. <p><blockquote>Les trolls c’est comme le populisme&#160;: tout le monde sait que c’est idiot, que ça ne sert à rien, mais ça rassure nos misérables certitudes et ça réconforte.</blockquote></p>
  372. <p>(vous n’imaginez pas le travail sur soi pour dire cela, je me suis senti grand l’espace d’un tweet)</p>
  373. <p><h3>Les résultats</h3></p>
  374. <p>Curieusement, cela libère du temps et vous savez quoi&#8239;? <strong>Cela fait du bien.</strong> Je n’ai jamais autant écrit que cette année de désintoxication. Et cette haine que se cultive durant les trolls sévères, vous pouvez la remplacer par de l’amour ou de la tendresse. Et vous savez quoi&#8239;? Oui, cela fait du bien. Vraiment.</p>
  375. <p>Dites-vous bien que <strong>pendant que vous trollez, d’autres sont en train peut-être de révolutionner le monde en faisant quelque chose</strong>.</p>
  376. <p>En fait, si vous avez du mal à décrocher, vous pouvez aussi compter les points. Avec un peu de popcorn (sans lactose), c’est très sympa. Notamment quand les personnes disent la même chose et sont d’accord sur le fond (la spécialité des experts accessibilité).</p>
  377. <p>Après, vous pouvez même prendre de la hauteur sur des sujets. Il m’arrive de voir des sujets resurgir de temps à autres (sur les intitulés de métier, sur la guéguerre graphistes/dévs, alors que tout le monde sait que les graphistes sont des fainéants et les dévs de gros butés comme des coins), et de les lire de manière amusée.</p>
  378. <p><h3>Troller bio et pas industriel</h3></p>
  379. <p>Curieusement, dans mon imaginaire, troller est lié à l’humour. Même si je ne fréquente plus tant certains très bons sites comme <a href="http://linuxfr.org/">LinuxFr</a>, le troll a quelque chose de positif, d’amusant. Le bon troll doit être absolument catégorique sur un sujet subjectif, et suffisamment gros pour que cela se voie (sinon ce n’est pas du troll, c’est de la malveillance).</p>
  380. <p>C’est pour ça que je me dis en fait qu’il faut troller bio, troller <abbr title="Very Important Prout" lang="en" xml:lang="en">VIP</abbr>… en fait, troller, c’est un peu comme dire des jurons. Quand on le fait tout le temps, on en perd toute la saveur, et ce plaisir délectable qu’ils procurent. Troller devrait être l’exception, alors si je ne dois troller qu’une fois dans l’année, je veux le faire avec des gens biens qui partagent ma vision du troll. <strong>Si nous sommes ce que nous trollons, alors je ne veux que troller de bonnes choses.</strong></p>
  381. <p>Et surtout avec des gens qui savent se moquer d’eux-mêmes (pas comme ces intés bouffeurs de patates passionnés d’accessibilité qui font chier la terre entière avec leur amélioration progressive et leur qualité web, ce sont vraiment les pires).</p>
  382. <p>Et au fait, on dit pain au chocolat, pas chocolatine&#8239;! Une chocolatine, c’est un petit chocolat (<a href="https://www.dictionnaire.exionnaire.com/que-signifie.php?mot=-ine">le suffixe -ine est un diminutif</a>, et on va encore dire que le changement de genre lors du passage au diminutif n’est pas une bonne chose). Sans blague. ]]>
  383.  </description>
  384.  <guid>https://www.nicolas-hoffmann.net/source/1709-J-ai-arrete-de-troller-retour-d-experience.html</guid>
  385.  <link>https://www.nicolas-hoffmann.net/source/1709-J-ai-arrete-de-troller-retour-d-experience.html</link>
  386.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  387.  <pubDate>Sat, 30 Dec 2017 18:54:34 +0100</pubDate>
  388. </item>
  389. <item>
  390.  <title><![CDATA[ Un commit tous les jours ]]></title>
  391.  <description><![CDATA[ En début de cette année, je me suis essayé sur un coup de tête à me lancer à faire un <span lang="en" xml:lang="en">commit</span> tous les jours. Il faut dire que ma salle de bain m’envoyait un message subliminal depuis des années (si si, c’est bien ma salle de bain). </p><div class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/sdb-github.jpg" width="400" height="271" alt="Ma salle de bain, seuls les vrais sauront" /></div><p>Voici un retour d’expérience.</p>
  392. <p><h3>Un constat</h3></p>
  393. <p>Grosso modo, en 2016, j’avais fait <a href="https://github.com/nico3333fr?tab=overview&amp;from=2016-01-01&amp;to=2016-12-31&amp;utf8=%E2%9C%93" hreflang="en">511 contributions sur Github</a>. Mais le tout était très disparate, je manquais de régularité. En clair, j’ai un souci, je n’ai pas 2 à 3 heures à disposition quand je veux, la vie, toussââââ…</p>
  394. <p><h3>L’idée proprement dite</h3></p>
  395. <p>Du coup, je me dis que je pouvais me lancer là-dedans. L’idée de base&#160;: remplir presque à tout prix le <em lang="en" xml:lang="en">contribution graph</em>, et surtout, plus sérieusement, consacrer toujours un peu de temps chaque jour à avancer des choses, que ce soit sur <a href="https://github.com/nico3333fr/CSP-useful" hreflang="en"><abbr title="Content Security Policy" lang="en" xml:lang="en">CSP</abbr></a>, <a href="https://rocssti.net/">Röcssti</a>, <a href="https://van11y.net/fr/">Van11y</a>, <a href="https://a11y.nicolas-hoffmann.net/" hreflang="en">les plugins accessibles avec jQuery</a> ou d’autres choses.</p>
  396. <p>L’idée est clairement de lisser la charge et de l’étaler. Comme je n’ai que difficilement 3 heures à disposition, hé bien, je vais l’étaler à coup de 5/10 minutes.</p>
  397. <p><h3>En pratique</h3></p>
  398. <p>Pour être honnête, quand je me suis lancé là-dedans le jour de l’An, je ne pensais pas tenir 5 jours. Pendant un mois, tous les jours, je n’avais pas de visibilité au-delà de 3 jours, des fois moins.</p>
  399. <p>L’idée est d’avoir au moins un projet qui vous permet de <span lang="en" xml:lang="en">commiter</span> rapidement et sans se prendre la tête. Le jeu –&#160;car cela doit rester un jeu&#160;– doit toujours être amusant, jusqu’à ce que cela se transforme en habitude. Clairement, pour moi, c’est mon dépôt sur <abbr title="Content Security Policy" lang="en" xml:lang="en">CSP</abbr> qui est là pour cela.</p>
  400. <p>Il m’est arrivé quelques rares fois de faire des <span lang="en" xml:lang="en">commits</span> de pur confort, genre remplacer un bout de texte, ce genre de chose… mais ce fut très rare. Bon, une connexion en carafe impliquant de faire des <span lang="en" xml:lang="en">commits</span> depuis mon iPad sur Github est une excuse tout à fait valable, si si&#8239;! Le dernier week-end, je suis allé squatter la connexion d’un voisin qui n’était pas là... croyez-le ou non, mais là on apprécie quand il fait 5 degrés en extérieur de pouvoir faire un <span lang="en" xml:lang="en">commit</span> en 30 secondes.</p>
  401. <p>Autre astuce&#160;: savoir se restreindre. Une mise à jour à faire sur tous mes plugins jQuery&#8239;? Hop, on ne fait pas tout tout de suite, une ou deux par jour (n’oublions pas que mon objectif était de lisser la charge).</p>
  402. <p>Attention&#160;: <strong>contribution ne veut pas dire code</strong>. Bien au contraire. Ouvrir une <em lang="en" xml:lang="en">issue</em>, modifier du texte, etc. cela en fait partie, et c’est très bien aussi. Dans l’absolu, il est possible de faire cela sans coder.</p>
  403. <p><h3>Retour d’expérience</h3></p>
  404. <p>Au début, je ne savais pas trop où j’allais avec ça, ni si ça allait durer. C’est de la démarche à long terme, il faut le voir comme un décrassage sportif, une sorte d’entretien, une hygiène.</p>
  405. <p>Le résultat sur mon <a href="https://github.com/nico3333fr" hreflang="en"><em lang="en" xml:lang="en">contribution graph</em></a> n’est pas définitif, mais il est plutôt intéressant.</p><div class="centre"><img src="https://www.nicolas-hoffmann.net/images/divers/contribution-graph-nico-2017.png" width="600" height="172" alt="Contribution graph de Nico pour 2017 (y a beaucoup de vert)"  /></div><p>Un bon point&#160;: comme j’ai pris de bons réflexes, j’ai tendance à <strong>éviter de reporter la publication d’une mise à jour</strong>, ce qui évite les reculades façon «&#160;j’y ferai plus tard, c’est-à-dire jamais&#160;».</p>
  406. <p><strong>Ne croyez pas pourtant que cela va vous mettre à jour sur tous vos dépôts</strong>… je peine à suivre pour certains plus ou moins prioritaires. Et les journées ne font que 24 heures. D’ailleurs, ne l’oubliez jamais quand vous vous apprêtez à ronchonner sur un projet gratuit, la personne qui le maintient ne vous doit rien dans 99% des cas.</p>
  407. <p>Après, oui certes, il y a quelques trous dans le calendrier. Ce qui est drôle, c’est que je suis presque capable de vous dire pourquoi à chaque fois&#160;: un ralentissement durant les vacances d’été (c’est le principe des vacances), un redémarrage post-vacances difficile, un long week-end de pure déconnexion et de bonheur durant quatre jours, etc. Ce calendrier me parle et raconte des bouts d’histoire.</p>
  408. <p>Côté travail accompli, <strong>j’en ai ressenti les bénéfices au bout de plusieurs mois</strong>. C’est parfait pour accumuler des connaissances, faire avancer petit à petit des choses, au fil de l’eau. J’ai encore au moins 50 <span lang="en" xml:lang="en">commits</span> d’avance sur mon dépôt sur <abbr title="Content Security Policy" lang="en" xml:lang="en">CSP</abbr>.</p>
  409. <p>Contreparties&#160;: j’ai beaucoup moins blogué cette année. Ce n’est pas uniquement dû à cela, mais cela a joué. Ceci dit, je compense le manque d’écriture publique (et encore, j’avoue être très fan d’écrire pour les #mercrediFiction sur Mastodon, et j’ai quand même commis quelques articles et billets) par d’autres échanges, en privé. C’est peut-être l’année où j’ai le plus écrit, et vous savez quoi&#8239;? <strong>Cela fait du bien</strong>.</p>
  410. <p>Il est aussi difficile de démarrer de nouveaux projets ainsi, surtout s’ils demandent beaucoup de temps. Ceci dit, se cantonner à des tâches de maximum 10 minutes pourrait être une approche, à tester. J’ai plusieurs scripts qui me trottent en tête, mais l’accouchement s’avère difficile. C’est pour cela que j’adore prendre le train durant des heures, le dernier script sur <a href="https://van11y.net/fr/">Van11y</a> a été codé ainsi, à l’aller pour Aix en Provence (coucou Sud Web).</p>
  411. <p><h3>Conclusion</h3></p>
  412. <p>Si cela vous tente, c’est une expérience intéressante. Pour l’instant, je ne me vois pas l’arrêter, j’ai pris cette habitude. Cela convient bien à ma façon d’avancer, lentement mais sûrement. <strong>Je ne suis pas un sprinteur mais un coureur de fond</strong>.</p>
  413. <p>Je ne peux pas dire si cette expérience est adaptée pour tout le monde, ce mode de fonctionnement a ses avantages et ses inconvénients. Peut-être est-elle moins adaptée pour de gros développements, je n’oserai pas prétendre que c’est adapté à tous les cas de figure et à toutes les personnalités. Ceci dit, je trouve cette expérience positive. ]]>
  414.  </description>
  415.  <guid>https://www.nicolas-hoffmann.net/source/1708-Un-commit-tous-les-jours.html</guid>
  416.  <link>https://www.nicolas-hoffmann.net/source/1708-Un-commit-tous-les-jours.html</link>
  417.  <author>contact@nicolas-hoffmann.net (Nico)</author>
  418.  <pubDate>Fri, 17 Nov 2017 14:43:29 +0100</pubDate>
  419. </item>
  420. </channel>
  421. </rss>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//www.nicolas-hoffmann.net/rss/index.php

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda