<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nicolas Karolak</title><link>https://nicolas.karolak.fr/blog/</link><description>Recent content on Nicolas Karolak</description><generator>Hugo</generator><language>fr</language><lastBuildDate>Sat, 19 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nicolas.karolak.fr/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Jujutsu VCS</title><link>https://nicolas.karolak.fr/blog/jj-vcs/</link><pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate><guid>https://nicolas.karolak.fr/blog/jj-vcs/</guid><description>&lt;p&gt;En ce moment je suis en train d&amp;rsquo;explorer &lt;a href="https://www.jj-vcs.dev/"&gt;jj&lt;/a&gt; pour voir&#10;si ça vaut le coup de faire le saut depuis &lt;a href="https://git-scm.com/"&gt;git&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;C&amp;rsquo;est un peu déroutant au départ quand on s&amp;rsquo;est déjà formé un modèle mental pour&#10;travailler avec git, mais on s&amp;rsquo;y fait assez rapidement, et on commence à trouver&#10;une certaine élégance dans la manière de faire différente.&lt;/p&gt;&#10;&lt;p&gt;Quelques concepts.&lt;/p&gt;&#10;&lt;h2 id="commit-vs-revision"&gt;Commit VS Revision&lt;/h2&gt;&#10;&lt;p&gt;L&amp;rsquo;unité de travail n&amp;rsquo;est plus le &amp;ldquo;commit&amp;rdquo;, mais la &amp;ldquo;révision&amp;rdquo;.&lt;/p&gt;</description></item><item><title>1Password finance un raciste</title><link>https://nicolas.karolak.fr/blog/1password-raciste/</link><pubDate>Wed, 02 Sep 2026 14:36:00 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/1password-raciste/</guid><description>&lt;p&gt;1Password s&amp;rsquo;engage à apporter un soutien financier à la &lt;em&gt;Omacom Foundation&lt;/em&gt; de&#10;David Heinemeier Hansson, un&#10;&lt;a href="https://brennan.day/normalized-fascism-in-open-source-12-million-given-to-dhh/"&gt;raciste&lt;/a&gt;&#10;&lt;a href="https://www.theverge.com/tech/988536/1password-dhh-linux-controversy"&gt;notoire&lt;/a&gt;.&#10;C&amp;rsquo;est donc décidé, je ne renouvellerais pas mon abonnement familial.&lt;/p&gt;&#10;&lt;p&gt;À court terme je vais probablement passer sur Apple Password étant donné que je&#10;suis les deux pieds dans l&amp;rsquo;écosystème Apple. Mais il va falloir que je trouve&#10;une solution :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;multi-plateforme&lt;/li&gt;&#10;&lt;li&gt;une UX non réservée aux barbus&lt;/li&gt;&#10;&lt;li&gt;idéalement open-source&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;J&amp;rsquo;ai tenté les outils liés au format KeePass par le passé, notamment&#10;&lt;a href="https://strongboxsafe.com/"&gt;Strongbox&lt;/a&gt;, mais la gestion multi-URLs et&#10;l&amp;rsquo;intégration aux navigateurs n&amp;rsquo;étaient sans problèmes. À voir si ça s&amp;rsquo;est&#10;amélioré depuis.&lt;/p&gt;</description></item><item><title>Utiliser Ansible sur des machines derrière l'IAP de Google Cloud</title><link>https://nicolas.karolak.fr/blog/ansible-gcp-iap/</link><pubDate>Fri, 29 Dec 2023 12:56:52 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/ansible-gcp-iap/</guid><description>&lt;p&gt;L&amp;rsquo;IAP, pour&#10;&lt;a href="https://cloud.google.com/security/products/iap"&gt;Identity-Aware Proxy&lt;/a&gt;, est un&#10;outil de Google Cloud qui fonctionne comme un proxy en amont d&amp;rsquo;une application&#10;ou d&amp;rsquo;une VM en y ajoutant un couche d&amp;rsquo;authentification via le SSO de Google. Par&#10;exemple, ça peut servir à protéger le backend d&amp;rsquo;une application web. Ou dans le&#10;cas qui nous intéresse ici, d&amp;rsquo;éviter d&amp;rsquo;exposer publiquement une instance de VM&#10;et y ajouter une couche d&amp;rsquo;authentification forte. Vachement pratique pour faire&#10;un bastion dans un environnement GCP.&lt;/p&gt;</description></item><item><title>Déployer un serveur Counter-Strike 2 sur Kubernetes</title><link>https://nicolas.karolak.fr/blog/deployer-serveur-cs2-sur-kubernetes/</link><pubDate>Sat, 23 Dec 2023 22:10:29 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/deployer-serveur-cs2-sur-kubernetes/</guid><description>&lt;p&gt;Quoi de mieux que de trouver un projet sympa pour se faire les dents sur une&#10;technologie ? Si vous êtes amateur de Counter-Strike et de Kubernetes j&amp;rsquo;ai&#10;peut-être ce qu&amp;rsquo;il vous faut : déployer un serveur de jeu privé, sur Kubernetes.&lt;/p&gt;&#10;&lt;p&gt;La première chose dont on va avoir besoin c&amp;rsquo;est une image de conteneur à&#10;déployer, pas besoin de réinventer la roue ici, il en existe déjà une :&#10;&lt;a href="https://github.com/joedwards32/CS2"&gt;https://github.com/joedwards32/CS2&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Pour votre sécurité, utilisez un bloqueur de pub</title><link>https://nicolas.karolak.fr/blog/adblock/</link><pubDate>Thu, 23 Mar 2023 10:29:43 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/adblock/</guid><description>&lt;p&gt;Un bloqueur de publicité est une mesure d&amp;rsquo;hygiène numérique de base,&#10;indispensable. Il convient même de cumuler un bloqueur au niveau du navigateur&#10;avec un autre au niveau du DNS, ne serait-ce que pour bloquer ce qui ne passe&#10;pas par le navigateur. &lt;strong&gt;Cas pratique.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;La sortie à venir de Counter-Strike 2 vient d&amp;rsquo;être annoncée, en attendant&#10;quelques invitations sont distribuées au compte goutte par Valve pour tester la&#10;version Beta.&lt;/p&gt;</description></item><item><title>GoResume, réinventer la roue, encore</title><link>https://nicolas.karolak.fr/blog/goresume/</link><pubDate>Wed, 08 Mar 2023 21:33:05 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/goresume/</guid><description>&lt;p&gt;Bon, j&amp;rsquo;avais déjà écrit un outil permettant de générer des CV basé sur le&#10;&amp;ldquo;standard&amp;rdquo; &lt;a href="https://jsonresume.org"&gt;JSON Resume&lt;/a&gt;, il s&amp;rsquo;agissait de&#10;&lt;a href="https://nicolas.karolak.fr/blog/cv-en-integration-continue/"&gt;resume-pycli&lt;/a&gt;, pour les&#10;raisons évoquées. Mais voilà que j&amp;rsquo;ai tout de même commis&#10;&lt;a href="https://github.com/nikaro/goresume"&gt;GoResume&lt;/a&gt;, une réécriture en Go.&lt;/p&gt;&#10;&lt;h2 id="pourquoi-"&gt;Pourquoi ?&lt;/h2&gt;&#10;&lt;p&gt;Il y a plusieurs raisons à cette réécriture. La principale étant que,&#10;wkthmltopdf n&amp;rsquo;étant plus maintenu j&amp;rsquo;ai du le remplacer par autre chose et cet&#10;autre chose pose des problèmes de packaging pour Hombrew. Ce soucis disparaît&#10;lorsqu&amp;rsquo;il ne s&amp;rsquo;agit plus que de fournir un simple binaire, comme c&amp;rsquo;est le cas&#10;avec du Go. Et surtout le travail de packaging est grandement facilité par&#10;&lt;a href="https://goreleaser.com"&gt;GoReleaser&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Installer des bibliothèques tierces pour Python</title><link>https://nicolas.karolak.fr/blog/python-lib/</link><pubDate>Sat, 14 Jan 2023 15:50:23 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/python-lib/</guid><description>&lt;p&gt;En Python, comme dans la plupart des langages de programmation, il est possible&#10;d&amp;rsquo;utiliser des &amp;ldquo;bibliothèques&amp;rdquo;. On parle aussi le &amp;ldquo;library&amp;rdquo; (en anglais), &amp;ldquo;lib&amp;rdquo;&#10;en abgrégé, et &amp;ldquo;librairie&amp;rdquo; en franglais. Ces bibliotheques sont des programmes&#10;qui vont venir étendre les fonctionnalités de base du langage. En Python il y a&#10;ce qu&amp;rsquo;on appelle la &lt;em&gt;bibliothèque standard&lt;/em&gt;, et les &lt;em&gt;bibliothèques tierces&lt;/em&gt;.&lt;/p&gt;&#10;&lt;h2 id="la-bibliothèque-standard"&gt;La bibliothèque standard&lt;/h2&gt;&#10;&lt;p&gt;Il s&amp;rsquo;agit des bibliothèques qui sont livrées avec Python par défaut. On&#10;l&amp;rsquo;appelle aussi la &amp;ldquo;stdlib&amp;rdquo;, pour &amp;ldquo;standard library&amp;rdquo; en anglais. Vous pouvez&#10;retrouver la liste des bibliothèques disponibles ici:&#10;&lt;a href="https://docs.python.org/fr/3/library/"&gt;https://docs.python.org/fr/3/library/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Faire des requêtes HTTP en Python</title><link>https://nicolas.karolak.fr/blog/python-http/</link><pubDate>Sat, 14 Jan 2023 14:40:00 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/python-http/</guid><description>&lt;p&gt;Imaginons que nous voulions faire une requête vers l&amp;rsquo;API publique de GitHub, sur&#10;l&amp;rsquo;URL suivante : &lt;code&gt;https://api.github.com/users/&amp;lt;user&amp;gt;/repos&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Dans un premier temps on peut tester avec &lt;code&gt;curl&lt;/code&gt; pour voir à quoi ressemble le&#10;résultat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl https://api.github.com/users/nikaro/repos&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour cet exemple on obtient du JSON en réponse, bonne nouvelle Python sait&#10;travailler nativement avec JSON.&lt;/p&gt;&#10;&lt;h2 id="urllib"&gt;urllib&lt;/h2&gt;&#10;&lt;p&gt;Si on veut utiliser la bibliothèque standard de Python, on peut utiliser&#10;&lt;a href="https://docs.python.org/fr/3/library/urllib.html"&gt;&lt;code&gt;urllib&lt;/code&gt;&lt;/a&gt; et&#10;&lt;a href="https://docs.python.org/fr/3/library/json.html"&gt;&lt;code&gt;json&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; urllib.request&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# on fait la requête HTTP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; urllib&lt;span style="color:#f92672"&gt;.&lt;/span&gt;request&lt;span style="color:#f92672"&gt;.&lt;/span&gt;urlopen(&lt;span style="color:#e6db74"&gt;&amp;#34;https://api.github.com/users/nikaro/repos&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# on lit le contenu de la réponse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; response&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# on parse le contenu afin de le &amp;#34;convertir&amp;#34; en objet Python&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; json&lt;span style="color:#f92672"&gt;.&lt;/span&gt;loads(content)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(data[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;][&lt;span style="color:#e6db74"&gt;&amp;#34;html_url&amp;#34;&lt;/span&gt;])&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="httpx"&gt;httpx&lt;/h2&gt;&#10;&lt;p&gt;Si on veut se faciliter la vie, surtout quand on commence à faire des choses&#10;plus compliqués, on peut utiliser la bibliothèque tierce&#10;&lt;a href="https://www.python-httpx.org"&gt;HTTPX&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Techno-louanges 2022</title><link>https://nicolas.karolak.fr/blog/tech-2022/</link><pubDate>Thu, 22 Dec 2022 23:36:23 +0100</pubDate><guid>https://nicolas.karolak.fr/blog/tech-2022/</guid><description>&lt;p&gt;Pour cette fin d&amp;rsquo;année j&amp;rsquo;aimerais adresser quelques louanges à des outils et&#10;technologies que j&amp;rsquo;ai apprécié ou découvert en 2022.&lt;/p&gt;&#10;&lt;h2 id="helix"&gt;Helix&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://helix-editor.com"&gt;https://helix-editor.com&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Un éditeur de code, inspiré de Vim et Kakoune, avec (presque) toutes les&#10;fonctionnalités requises intégrées nativement, une configuration par défaut&#10;&amp;ldquo;saine&amp;rdquo; et une facilité de découverte et d&amp;rsquo;utilisation qui aide grandement à la&#10;prise en main. En l&amp;rsquo;espace de quelques jours il a complètement remplacé Neovim&#10;et tous les plugins qui allaient avec pour le rendre plus efficace (LSP,&#10;tree-sitter, gestionnaire de plugins, gestionnaire de serveurs LSP, etc.). Le&#10;tout en ayant quasiment pas à toucher son fichier de configuration.&lt;/p&gt;</description></item><item><title>Ma stratégie de sauvegarde</title><link>https://nicolas.karolak.fr/blog/strategie_sauvegarde/</link><pubDate>Sat, 03 Sep 2022 00:00:00 +0000</pubDate><guid>https://nicolas.karolak.fr/blog/strategie_sauvegarde/</guid><description>&lt;p&gt;Un petit peu de généralités avant de vous en dire davantage. Quand on met en&#10;place une stratégie de sauvegarde, il y a quelques éléments à determiner :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Qu&amp;rsquo;est-ce que je veux protéger ? Quelle données ?&lt;/li&gt;&#10;&lt;li&gt;Contre quoi ? contre qui ?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;À partir des réponses à ces questions je peux commencer à envisager différents&#10;scénarios et leurs conséquences. Par exemple :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Je sauvegarde les données de mon ordinateur sur un NAS à la maison, mais je me&#10;fais cambrioler, j&amp;rsquo;ai potentiellement tout perdu.&lt;/li&gt;&#10;&lt;li&gt;Mes données sont synchronisées chez un fournisseur (iCloud, Google Drive,&#10;OneDrive, Nextcloud), si le fournisseur bloque mon compte j&amp;rsquo;ai potentiellement&#10;toujours accès aux données locales. Par contre si j&amp;rsquo;efface localement mes&#10;données et que l&amp;rsquo;effacement est synchronisé, s&amp;rsquo;il y a pas de corbeille j&amp;rsquo;ai&#10;tout perdu.&lt;/li&gt;&#10;&lt;li&gt;Je suis journaliste, mes données sont très confidentielles car elles peuvent&#10;compromettre mes sources, je fais donc une sauvegarde chiffrée chez un&#10;fournisseur, je fais une copie de ma clé de chiffrement et je la met dans un&#10;coffre chez moi au cas où je perd mon ordinateur. Mais une nuit ma maison&#10;brûle, et le coffre n&amp;rsquo;était pas ignifugé. J&amp;rsquo;ai une sauvegarde, mais elle est&#10;indéchiffrable.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Vous voyez ? Ce n&amp;rsquo;est pas forcément simple et il peut y avoir tout un tas de&#10;scénarios auxquels on a pas forcément pensé et qui pourraient faire qu&amp;rsquo;on se&#10;retrouve sans données ou sans moyen d&amp;rsquo;y accéder.&lt;/p&gt;</description></item></channel></rss>