<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on Carnet de découvertes</title><link>https://fljd.in/categories/blog/</link><description>Recent content in Blog on Carnet de découvertes</description><generator>Hugo -- gohugo.io</generator><language>fr</language><managingEditor>Florent Jardin</managingEditor><lastBuildDate>Wed, 09 Dec 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://fljd.in/categories/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>De Jekyll à Hugo</title><link>https://fljd.in/2020/12/09/de-jekyll-a-hugo/</link><pubDate>Wed, 09 Dec 2020 00:00:00 +0000</pubDate><author>Florent Jardin</author><guid>https://fljd.in/2020/12/09/de-jekyll-a-hugo/</guid><description>&lt;p&gt;Dans l&amp;rsquo;univers des générateurs de sites statiques, la bataille fait rage entre
plusieurs &lt;em&gt;frameworks&lt;/em&gt; depuis quelques années. Vous avez peut-être entendu parler
de &lt;a href="https://github.com/jekyll/jekyll" target="_blank" rel="noopener"&gt;Jekyll&lt;/a&gt;, &lt;a href="https://github.com/vercel/next.js" target="_blank" rel="noopener"&gt;Next.js&lt;/a&gt;, &lt;a href="https://github.com/gatsbyjs/gatsby" target="_blank" rel="noopener"&gt;Gastby&lt;/a&gt; ou &lt;a href="https://github.com/gohugoio/hugo" target="_blank" rel="noopener"&gt;Hugo&lt;/a&gt; ? Je ne cite que les plus
sollicités par la communauté sur GitHub, mais il en existe des centaines.&lt;/p&gt;
&lt;p&gt;Pourquoi cet engouement ? Cet article n&amp;rsquo;en parlera pas.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Pour de louables raisons, je m&amp;rsquo;étais engagé &lt;a href="https://fljd.in/2019/06/12/reprenons-serieusement"&gt;l&amp;rsquo;année dernière&lt;/a&gt; à auto-héberger
mon nouvel espace d&amp;rsquo;expression personnel. J&amp;rsquo;y ai découvert avec intérêt et amusement
de nombreuses technologies que j&amp;rsquo;ai pliées, réinstallées, transformées pour les
adapter à mon besoin. Sans trop rentrer dans les détails, j&amp;rsquo;ai fini par avoir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un serveur VPS chez OVH pour un coût de 3,99€ par mois&lt;/li&gt;
&lt;li&gt;une routine mensuelle de renouvellement de certificat avec &lt;a href="https://pypi.org/project/certbot/" target="_blank" rel="noopener"&gt;certbot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;une instance &lt;a href="https://github.com/eclipse-theia/theia" target="_blank" rel="noopener"&gt;Theia&lt;/a&gt; dans un conteneur Docker&lt;/li&gt;
&lt;li&gt;une image Jekyll 4.1.0 que j&amp;rsquo;invoquais dans Docker&lt;/li&gt;
&lt;li&gt;deux dépôts GitHub privés pour les articles (&lt;em&gt;posts&lt;/em&gt;) et les brouillons (&lt;em&gt;drafts&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;le thème &lt;a href="https://github.com/poole/poole" target="_blank" rel="noopener"&gt;Poole&lt;/a&gt;, léger et modulable… que j&amp;rsquo;ai modulé&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alors que la question de conserver ou non le serveur VPS se pose pour la nouvelle
année qui démarre bientôt (il devient agé, limité, pour ne pas dire sénil), j&amp;rsquo;ai
remis récemment en cause mon attachement pour le &lt;em&gt;framework&lt;/em&gt; &lt;strong&gt;Jekyll&lt;/strong&gt;, si élégant
à l&amp;rsquo;époque.&lt;/p&gt;
&lt;p&gt;Le machin repose sur des dépendances Ruby. Aussi nombreuses (ou presque) qu&amp;rsquo;un
nouveau projet en Node.js. J&amp;rsquo;ai mangé du &lt;code&gt;Gemfile&lt;/code&gt; par le passé, aussi je n&amp;rsquo;ai eu
aucune réelle difficulté à installer les quelques modules nécessaires à la
concrétisation de mon projet. En voici le contenu :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://rubygems.org&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;jekyll&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;~&amp;gt; 4.1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;classifier-reborn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# If you have any plugins, put them here!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="ss"&gt;:jekyll_plugins&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;jekyll-paginate-v2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;jekyll-target-blank&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;~&amp;gt; 2.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;jekyll-time-to-read&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et c&amp;rsquo;est tout.&lt;/p&gt;
&lt;p&gt;Je n&amp;rsquo;avais besoin que de la pagination et de l&amp;rsquo;estimation du temps de lecture par
article. Mine de rien, ça me semblait un peu grossier d&amp;rsquo;exiger que ces simples
modules ne soient pas intégrés nativement. J&amp;rsquo;ai donc engagé mes recherches et le
portage du présent site sur l&amp;rsquo;une des autres solutions, à savoir &lt;strong&gt;Hugo&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="migre-moi-ça-pti-con"&gt;Migre moi ça, p&amp;rsquo;ti con&lt;/h2&gt;
&lt;p&gt;Et les développeurs de Hugo n&amp;rsquo;y sont pas allé de main morte pour asseoir leur
logiciel dans ce paysage turbulent : ils intègrent un assistant de migration
spécialement pour un projet Jekyll en récupérant ses fichiers &lt;code&gt;.md&lt;/code&gt; et ses
ressources statiques. En soit, la chose n&amp;rsquo;est pas complexe et le résultat est
au rendez-vous. Mais…&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hugo import jekyll blog blog_hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Importing...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Congratulations! 128 post(s) imported!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Now, start Hugo by yourself:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cd blog_hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git clone https://github.com/spf13/herring-cove.git themes/herring-cove
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hugo server --theme=herring-cove
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bien sûr, l&amp;rsquo;assistant propose un thème pour embellir le projet en lieu et place
d&amp;rsquo;une transposition du language &lt;a href="https://jekyllrb.com/docs/liquid/" target="_blank" rel="noopener"&gt;Liquid&lt;/a&gt; sur lequel repose les fichiers
modèles de Jekyll. C&amp;rsquo;est plus simple mais… ce n&amp;rsquo;est pas réellement ce que je
souhaitais.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://fljd.in/img/fr/2020-12-09-hugo-import-from-jekyll.png" alt="Un thème par défaut pas sans défaut"&gt;&lt;/p&gt;
&lt;p&gt;Autant le rendu des articles est impeccable avec ce thème, autant la navigation
est assez pauvre à mon goût. Bien évidemment, c&amp;rsquo;est bien suffisant pour n&amp;rsquo;importe
qui. Mais voilà. Mon thème principal me manquait et malheureusement pour moi,
il n&amp;rsquo;existait pas pour Hugo.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="de-longues-soirées-dhiver"&gt;De longues soirées d&amp;rsquo;hiver&lt;/h2&gt;
&lt;p&gt;J&amp;rsquo;aime les choses simples. Et j&amp;rsquo;aime encore plus les comprendre en profondeur.
C&amp;rsquo;est pour cette raison que je me suis lancé plusieurs heures dans la lecture
assidue de la documentation très riche sur &lt;a href="https://gohugo.io/documentation/" target="_blank" rel="noopener"&gt;gohugo.io&lt;/a&gt;. Les concepts sont
assez différents et le passage n&amp;rsquo;a pas été si évident que cela. Je vous propose
un florilège des astuces qu&amp;rsquo;il m&amp;rsquo;a fallu découvrir pour proposer le portage
intégral de mon site.&lt;/p&gt;
&lt;h3 id="les-permaliens"&gt;Les permaliens&lt;/h3&gt;
&lt;p&gt;Jekyll et Hugo proposent une gestion fine des URL à l&amp;rsquo;aide du paramètre
&lt;code&gt;permalinks&lt;/code&gt; pour reconstruire l&amp;rsquo;adresse d&amp;rsquo;une page ou d&amp;rsquo;un article et favoriser
son référencement. Cependant, leur paramètrage par défaut diffère et il est
nécessaire de retrouver le comportement de &lt;a href="https://jekyllrb.com/docs/permalinks/" target="_blank" rel="noopener"&gt;l&amp;rsquo;un&lt;/a&gt; avec &lt;a href="https://gohugo.io/content-management/urls/#permalinks" target="_blank" rel="noopener"&gt;l&amp;rsquo;autre&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;permalinks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/:year/:month/:day/:slug&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour ma part, j&amp;rsquo;ai privilégié le dérivé &lt;code&gt;:slug&lt;/code&gt; pour être en mesure de surcharger
la dernière portion de l&amp;rsquo;URL dans les rares cas où le titre était malformé entre
Jekyll et Hugo. Par exemple pour mon article « &lt;a href="https://fljd.in/2020/08/21/tour-d-horizon-de-pgbouncer/"&gt;Tour d&amp;rsquo;horizon de PgBouncer&lt;/a&gt; »
où l&amp;rsquo;apostrophe n&amp;rsquo;était pas remplacée par le tiret et où je ne voulais pas
perdre le référencement, j&amp;rsquo;ai pu contourner le problème avec l&amp;rsquo;ajout d&amp;rsquo;une simple
ligne en en-tête du fichier Markdown.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Tour d&amp;#39;horizon de PgBouncer&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;tour-d-horizon-de-pgbouncer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il m&amp;rsquo;a également fallu découvrir un paramètre particulier pour ne pas prendre en
compte les accents présents dans les titres lors de la génération du &lt;em&gt;slug&lt;/em&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;removePathAccents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="syndication-automatique-du-contenu"&gt;Syndication automatique du contenu&lt;/h3&gt;
&lt;p&gt;Pour le coup, j&amp;rsquo;ai bénéficié d&amp;rsquo;une simplification dans mon projet grâce au support
natif et avancé des flux RSS. Alors qu&amp;rsquo;avec Jekyll, je devais maintenir mes
fichiers &lt;code&gt;feed.xml&lt;/code&gt; et &lt;code&gt;atom.xml&lt;/code&gt; à la racine du projet, j&amp;rsquo;ai découvert avec Hugo
la notion de &lt;em&gt;&lt;a href="https://gohugo.io/content-management/taxonomies/" target="_blank" rel="noopener"&gt;taxonomie&lt;/a&gt;&lt;/em&gt; qui permet la classification des articles. La
taxonomie regroupe autant les sections, les catégories et les &lt;em&gt;tags&lt;/em&gt;, et je trouve
ça astucieux.&lt;/p&gt;
&lt;p&gt;Imaginons une arborescence très simple avec une page et un article :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;content/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── pages
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── a-propos.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── posts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── 2020-11-18-quelques-outils-meconnus.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sans configuration supplémentaire, Hugo générera le contenu statique pour chacun
des éléments du projet, en consultant notamment les en-têtes pour extraire les
informations &lt;code&gt;categories&lt;/code&gt; et &lt;code&gt;tags&lt;/code&gt; des articles.&lt;/p&gt;
&lt;p&gt;La magie opère avec un ensemble de fichiers &lt;code&gt;index.xml&lt;/code&gt; regroupant les éléments
d&amp;rsquo;une même taxonomie.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;public/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── 2020
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── 11
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── 18
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── quelques-outils-meconnus
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── categories
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── index.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── postgresql
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── index.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── index.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── pages
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── a-propos
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   └── index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── index.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── tags
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── administration
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    ├── index.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    └── index.xml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="la-colorisation-syntaxique"&gt;La colorisation syntaxique&lt;/h3&gt;
&lt;p&gt;À ce sujet, j&amp;rsquo;ai eu une petite surprise avec les balises HTML jusqu&amp;rsquo;à ce que je
me penche sur la &lt;a href="https://gohugo.io/content-management/syntax-highlighting/#generate-syntax-highlighter-css" target="_blank" rel="noopener"&gt;documentation&lt;/a&gt;. En effet, par défaut, Hugo transforme un
bloc de code Markdown en série de balises stylisées.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;highlight&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#f8f8f2;background-color:#272822;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; -moz-tab-size:4;-o-tab-size:4;tab-size:4&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;language-sql&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#66d9ef&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;CREATE&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#66d9ef&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;TABLE&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; people (
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; id BIGINT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#66d9ef&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;GENERATED&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ALWAYS &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#66d9ef&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;AS&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#66d9ef&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;IDENTITY&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; details jsonb,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#66d9ef&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;PRIMARY&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;color:#66d9ef&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;KEY&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; (id)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; );
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puisque mon thème original proposait une feuille de style au format &lt;a href="https://sass-lang.com/" target="_blank" rel="noopener"&gt;SASS&lt;/a&gt;
spécfiquement pour la colorisation syntaxique, j&amp;rsquo;ai tenté d&amp;rsquo;activer l&amp;rsquo;un des
paramètres de Hugo pour utiliser les classes de style plutôt que le comportement
ci-dessus.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pygmentsUseClasses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le résultat était inespéré avec les classes reconnus par mes règles CSS.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;highlight&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;chroma&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;language-sql&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;CREATE&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;TABLE&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;people&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;(&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;id&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;nb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;BIGINT&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;GENERATED&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;ALWAYS&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;AS&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;IDENTITY&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;,&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;details&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;jsonb&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;,&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;PRIMARY&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;KEY&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;(&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;id&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;)&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;p&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;);&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="les-balises-html-dans-le-markdown"&gt;Les balises HTML dans le Markdown&lt;/h3&gt;
&lt;p&gt;Mes fichiers Markdown contenaient des balises HTML pour quelques effets visuels,
à savoir des encarts d&amp;rsquo;avertissement &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, du surlignage &lt;code&gt;&amp;lt;u&amp;gt;&lt;/code&gt; et de très
(trop) nombreux exposants &lt;code&gt;&amp;lt;sup&amp;gt;&lt;/code&gt; pour mes sources d&amp;rsquo;articles. Pour cet aspect,
Hugo est plus restrictif que Jekyll et ignore tout bonnement les balises dans le
rendu de ses pages.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- raw HTML omitted --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour le coup, je n&amp;rsquo;ai pas cherché s&amp;rsquo;il existait un paramètre de configuration
qui me permettrait de lever la restriction. Ma solution de contournement fut
d&amp;rsquo;utiliser les composants &lt;em&gt;shortcodes&lt;/em&gt; pour mes quelques exceptions et la
&lt;a href="https://gohugo.io/templates/shortcode-templates/" target="_blank" rel="noopener"&gt;documentation&lt;/a&gt; était bien suffisante pour y parvenir sereinement.&lt;/p&gt;
&lt;p&gt;Par exemple pour mes encarts, j&amp;rsquo;ai gagné en facilité de rédaction avec la méthode
&lt;code&gt;markdownify&lt;/code&gt; fourni par le système de rendu, et je n&amp;rsquo;écris plus que du Markdown
dans mes fichiers !&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- layout/shortcodes/message.html --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;{{ .Inner | markdownify }}&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- content/posts/exemple.md --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{\{&lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nt"&gt;message&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;}\}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Exemple de rendu avec un lien de [documentation][17].
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{\{&lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nt"&gt;message&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;}\}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Ne pas s&amp;rsquo;attarder sur les &lt;code&gt;\&lt;/code&gt; qui ne servent qu&amp;rsquo;à échapper les accolades.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="en-bref"&gt;En bref&lt;/h2&gt;
&lt;p&gt;Au-delà des quelques paramètrages ou réécriture Markdown qui m&amp;rsquo;ont fait perdre
du temps, Hugo présente bien plus de fonctionnalités natives que ne le fait
Jekyll. Je dresse une liste non exhausitive des apports qui m&amp;rsquo;ont convaincu à
passer le cap.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gohugo.io/templates/pagination/" target="_blank" rel="noopener"&gt;Pagination&lt;/a&gt; simple et intégrée&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gohugo.io/variables/page/#page-variables" target="_blank" rel="noopener"&gt;Temps estimé de lecture&lt;/a&gt; avec la variable &lt;code&gt;.ReadingTime&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Génération des pages &lt;a href="https://forestry.io/blog/hugo-vs-jekyll-benchmark/" target="_blank" rel="noopener"&gt;nettement plus rapide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Portabilité du logiciel avec &lt;strong&gt;zéro&lt;/strong&gt; dépendance système&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour conclure, je me suis résolu à héberger le projet et le rendu des pages sur
GitHub, en suivant les &lt;a href="https://gohugo.io/hosting-and-deployment/hosting-on-github/" target="_blank" rel="noopener"&gt;instructions&lt;/a&gt; détaillées. La &lt;a href="https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site" target="_blank" rel="noopener"&gt;bascule&lt;/a&gt; du nom de
domaine a ainsi été opérée ce midi et je n&amp;rsquo;ai plus à me préoccuper de mon ancienne
instance VPS ni du certificat à renouveller auprès de Let&amp;rsquo;s Encrypt.&lt;/p&gt;</description></item><item><title>La conviction du dimanche soir</title><link>https://fljd.in/2019/12/15/la-conviction-du-dimanche-soir/</link><pubDate>Sun, 15 Dec 2019 08:00:00 +0100</pubDate><author>Florent Jardin</author><guid>https://fljd.in/2019/12/15/la-conviction-du-dimanche-soir/</guid><description>&lt;p&gt;Il y a parfois des projets qui émergent de nulle part, d&amp;rsquo;autres qui mûrissent
d&amp;rsquo;années en années. Certains mêmes peuvent être déclenchés par l&amp;rsquo;heureuse
rencontre de deux inconnus, ou alors par la simple volonté de combler un vide.
Aussi, dimanche dernier, je me suis plongé dans la lecture d&amp;rsquo;un &lt;a href="https://www.oreilly.com/library/view/learn-c-the/9780133124385/" target="_blank" rel="noopener"&gt;livre technique&lt;/a&gt;
sans raison apparente et me suis donné pour nouvel objectif de réapprendre le
langage C.&lt;/p&gt;
&lt;p&gt;Incongru, n&amp;rsquo;est-ce pas ? Pourtant, l&amp;rsquo;idée n&amp;rsquo;est pas nouvelle, elle a germée
paisiblement jusqu&amp;rsquo;à plusieurs récents épisodes de mon quotidien. Et si ce langage
informatique, très bas niveau, dont font l&amp;rsquo;impasse de nombreux étudiants (dont
moi durant ma licence), avait des choses à m&amp;rsquo;apprendre pour progresser dans ma
compréhension du logiciel libre ?&lt;/p&gt;
&lt;p&gt;Je ne sais pas, mais j&amp;rsquo;ai eu comme la conviction d&amp;rsquo;être passer à côté d&amp;rsquo;une
évidence…&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Le &lt;a href="https://fr.wikipedia.org/wiki/C_%28langage%29" target="_blank" rel="noopener"&gt;langage C&lt;/a&gt; fait partie des fondations de nos logiciels actuels. Il a émergé
dans les années 1970 sous les mains de l&amp;rsquo;ingénieur &lt;a href="https://fr.wikipedia.org/wiki/Dennis_Ritchie" target="_blank" rel="noopener"&gt;Dennis Ritchie&lt;/a&gt; à l&amp;rsquo;occasion
de la réécriture du système d&amp;rsquo;exploitation UNIX. Ce grand monsieur fut lauréat
du prix Turing en 1983, rien que ça.&lt;/p&gt;
&lt;p&gt;A l&amp;rsquo;instar du système UNIX qui permit la ramification actuelle que l&amp;rsquo;on connait
avec GNU/Linux, MacOS/iOS et BSD, ce petit langage fut l&amp;rsquo;élan nécessaire pour
l&amp;rsquo;apparition des générations suivantes des langages, tels que le PHP, Java, C++
et C#, principaux standards de l&amp;rsquo;industrie d&amp;rsquo;hier et d&amp;rsquo;aujourd&amp;rsquo;hui. Une telle
prouesse avec peu de moyens, puisqu&amp;rsquo;à l&amp;rsquo;époque, la mémoire vive était de l&amp;rsquo;ordre
d&amp;rsquo;une &lt;a href="https://www.thoughtco.com/history-of-computer-memory-1992372" target="_blank" rel="noopener"&gt;centaine d&amp;rsquo;octets&lt;/a&gt;, les architectures matérielles se faisaient une
guerre acharnée (oui, Intel x86 n&amp;rsquo;était pas la référence) et l&amp;rsquo;Internet
n&amp;rsquo;existait pas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mais alors, pourquoi (ré)apprendre le langage C en 2020 ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dans son livre, Zed A. Shaw apporte de premiers éléments de réflexion dont je me
permets la traduction suivante :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Aujourd&amp;rsquo;hui, bien trop de programmeurs assument simplement que tout ce qu&amp;rsquo;ils
écrivent fonctionne, mais qu&amp;rsquo;un jour tout échouera de façon catastrophique.
C&amp;rsquo;est particulièrement vrai si vous êtes le genre de personne ayant appris la
plupart des langages modernes qui résolvent beaucoup de problèmes à votre place.&lt;/p&gt;
&lt;p&gt;Les manquements aux règles de sécurité moderne du langage C vous impose une
plus grande vigilance et d&amp;rsquo;être plus conscient de ce qui se passe. Si vous
parvenez à écrire du code C solide et sécurisé, vous pourrez en écrire dans
n&amp;rsquo;importe quel autre langage.&lt;/p&gt;
&lt;p&gt;Apprendre le C vous donne un accès direct à une montagne de code &lt;em&gt;legacy&lt;/em&gt; et
vous enseignera la syntaxe de base d&amp;rsquo;un grand nombre de langages. Une fois que
vous apprenez le C, vous pourrez facilement apprendre C++, Java, Objective-C,
Javascript et davantages encore.&lt;/p&gt;
&lt;p&gt;C est réellement un langage élégant de bien des façons. Sa syntaxe est
incroyablement concise pour la puissance qu&amp;rsquo;il offre. C&amp;rsquo;est pour cette raison
que de nombreux autres langages le lui ont emprunté depuis plus de 45 ans.&lt;/p&gt;
&lt;p&gt;C vous apporte aussi énormement avec peu de moyens technologiques. Lorsque vous
achevez votre apprentissage du C, vous aurez une opinion plus fine de quelque
chose qui est tout aussi élégant et déplaisant à la fois. Le langage C est vieux,
de la même façon qu&amp;rsquo;un beau monument, il vous semblera fantastique à une
distance de 20 pieds, mais si vous vous en approchez, vous vous apercevrez
qu&amp;rsquo;il est recouvert de fissures et de défauts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si l&amp;rsquo;on s&amp;rsquo;attarde sur la popularité des langages dans le monde du logiciel libre,
on constate que le langage C arrive en 11&lt;sup&gt;ème&lt;/sup&gt; position
d&amp;rsquo;après l&amp;rsquo;&lt;a href="https://insights.stackoverflow.com/survey/2019#technology-_-programming-scripting-and-markup-languages" target="_blank" rel="noopener"&gt;enquête annuelle&lt;/a&gt; de StackOverflow et en 9&lt;sup&gt;ème&lt;/sup&gt;
position dans le rapport de l&amp;rsquo;&lt;a href="https://octoverse.github.com/#top-languages" target="_blank" rel="noopener"&gt;Octoverse&lt;/a&gt; Github.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://fljd.in/img/fr/2019-12-15-octoverse-programming-langages.png" alt="Octoverse - Top Languages in 2019"&gt;&lt;/p&gt;
&lt;p&gt;Et oui. Rien de plus sexy que le JavaScript ou le Python de nos jours ! Mais pour
toutes les raisons de design ou de sécurité citées plus haut, la présence du
langage C dans les plus populaires des langages en 2019 révèle une certaine
réalité de terrain.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce n&amp;rsquo;est pas anodin cependant que je me penche à nouveau sur le langage C. Mon
intérêt pour le projet libre PostgreSQL me fait me questionner sur l&amp;rsquo;usage des
langages de bas niveau pour les logiciels d&amp;rsquo;envergure. Pour de nombreux
contributeurs, rien de plus fiable et de plus robuste qu&amp;rsquo;un projet qui repose sur
des bases connues et reconnues par l&amp;rsquo;Institut national américain de normalisation
(ANSI) depuis trois décennies.&lt;/p&gt;
&lt;p&gt;Le C est absolument partout. Les systèmes d&amp;rsquo;exploitation, les sytèmes embarqués,
les systèmes de bases de données. Mon dernier exemple en date remonte à ce matin,
lorsque David Steele a &lt;a href="https://twitter.com/pgBackRest/status/1205632408592297990" target="_blank" rel="noopener"&gt;annoncé&lt;/a&gt; sur Twitter que le projet &lt;em&gt;pgBackRest&lt;/em&gt; venait
de migrer intégralement en C pur, après des mois de &lt;a href="https://github.com/pgbackrest/pgbackrest/commit/f0ef73db7009cd6e08740d270a6ee7565efc9f8c" target="_blank" rel="noopener"&gt;réécriture&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je n&amp;rsquo;ai pas de recul ni d&amp;rsquo;expérience pour avancer que la portabilité, la performance
et la longévité impressionnante font de ce langage un choix opportun pour le logiciel,
qu&amp;rsquo;il soit libre ou non.&lt;/p&gt;
&lt;p&gt;Je ne sais pas, peut-être une intuition.&lt;/p&gt;</description></item><item><title>Reprenons sérieusement</title><link>https://fljd.in/2019/06/12/reprenons-serieusement/</link><pubDate>Wed, 12 Jun 2019 10:30:00 +0100</pubDate><author>Florent Jardin</author><guid>https://fljd.in/2019/06/12/reprenons-serieusement/</guid><description>&lt;p&gt;La série d&amp;rsquo;articles que je souhaite publier dans les mois et années à venir
s&amp;rsquo;intègre dans un engagement personnel envers un domaine qui accapare mes journées
de professionnel.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai pour projet d&amp;rsquo;apporter ma contribution dans le paysage open-source francophone
en partageant du contenu sur des sujets qui me passionnent, à savoir le web
(infrastructure, tendances, solutions spécialisées), les bases de données
(postgresql, expériences personnelles) et diverses réflexions sur nos usages
modernes de l&amp;rsquo;outil informatique (suprématie de GAFAM, souveraineté des données
personnelles, IoT).&lt;/p&gt;
&lt;p&gt;À l&amp;rsquo;heure de la rédaction de ce premier article, nous sommes en 2019, et je
traverse ma troisième décennie avec une angoisse grandissante. Les crises politique,
économique et écologique ont frappé aux portes du monde entier, et bien que l&amp;rsquo;on
en parle depuis ma naissance, je ne m&amp;rsquo;y interesse que depuis l&amp;rsquo;année dernière.
Entre de nombreux podcasts hétérogènes (&lt;a href="https://www.thinkerview.com" target="_blank" rel="noopener"&gt;Thinkerview&lt;/a&gt;,
&lt;a href="https://www.cafe-craft.fr" target="_blank" rel="noopener"&gt;Café Craft&lt;/a&gt;, &lt;a href="https://www.moodstep.com" target="_blank" rel="noopener"&gt;Moodstep&lt;/a&gt;,
&lt;a href="https://www.lescarences.fr" target="_blank" rel="noopener"&gt;Les Carencés&lt;/a&gt;, &lt;a href="https://www.mediapart.fr" target="_blank" rel="noopener"&gt;Mediapart&lt;/a&gt;),
je me suis projeté dans un avenir proche où nous serions tout·es contraints de
modifier nos habitudes de consommation pour garantir un monde viable aux prochaines
générations.&lt;/p&gt;
&lt;p&gt;Ce défi est immense. Autant pour moi que pour toi, lecteur.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Pour ma part, plusieurs changements ont eu lieu depuis l&amp;rsquo;année écoulée. Et à
chaque nouveau palier se découvrent de nouveaux challenges et de nouvelles
évidences. Manger bio et local, déconsommer, réduire l&amp;rsquo;usage des emballages
plastique, pratiquer le yoga et la course à pied.&lt;/p&gt;
&lt;p&gt;Mon quotidien professionnel n&amp;rsquo;a pas été épargné avec un pont dans ma carrière
entre les technologies Oracle Database et le produit communautaire PostgreSQL,
dans une juste continuité de l&amp;rsquo;usage d&amp;rsquo;un outil, au service du plus grand nombre.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est en découvrant sur Twitter &lt;a href="https://lecourrierduhacker.com" target="_blank" rel="noopener"&gt;le courrier du hacker&lt;/a&gt;,
une initiative de &lt;a href="https://carlchenet.com" target="_blank" rel="noopener"&gt;Carl Chenet&lt;/a&gt;, que m&amp;rsquo;est venue l&amp;rsquo;idée
d&amp;rsquo;amorcer un blog plus sérieux que ceux déjà éparpillés dans mon existence. Le
partage d&amp;rsquo;expériences et le plaisir de lire des nouvelles optimistes prennent
alors tout leur sens dans une compilation d&amp;rsquo;articles hebdomadaire, que je vous
invite chaudement à rejoindre pour découvrir une actualité fraîche et très souvent
enrichissante !&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Si vous souhaitez en savoir plus sur mon profil, je vous invite à consulter la
page &lt;a href="https://fljd.in/a-propos/"&gt;À Propos&lt;/a&gt; de ce site.&lt;/p&gt;</description></item></channel></rss>