<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog de Nikaro</title><link>https://blog.nikaro.net/</link><description>Recent content on Blog de Nikaro</description><generator>Hugo</generator><language>fr-fr</language><lastBuildDate>Fri, 29 Dec 2023 12:56:52 +0100</lastBuildDate><atom:link href="https://blog.nikaro.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Utiliser Ansible sur des machines derrière l'IAP de Google Cloud</title><link>https://blog.nikaro.net/2023/12/29/ansible-gcp-iap/</link><pubDate>Fri, 29 Dec 2023 12:56:52 +0100</pubDate><guid>https://blog.nikaro.net/2023/12/29/ansible-gcp-iap/</guid><description>&lt;p&gt;L&amp;rsquo;IAP, pour &lt;a href="https://cloud.google.com/security/products/iap"&gt;Identity-Aware Proxy&lt;/a&gt;, est un outil de Google Cloud qui fonctionne comme un proxy en amont d&amp;rsquo;une application ou d&amp;rsquo;une VM en y ajoutant un couche d&amp;rsquo;authentification via le SSO de Google. Par exemple, ça peut servir à protéger le backend d&amp;rsquo;une application web. Ou dans le cas qui nous intéresse ici, d&amp;rsquo;éviter d&amp;rsquo;exposer publiquement une instance de VM et y ajouter une couche d&amp;rsquo;authentification forte. Vachement pratique pour faire un bastion dans un environement GCP.&lt;/p&gt;</description></item><item><title>Déployer un serveur Counter-Strike 2 sur Kubernetes</title><link>https://blog.nikaro.net/2023/12/23/deployer-serveur-cs2-sur-kubernetes/</link><pubDate>Sat, 23 Dec 2023 22:10:29 +0100</pubDate><guid>https://blog.nikaro.net/2023/12/23/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 technologie ? Si vous êtes amateur de Counter-Strike et de Kubernetes j&amp;rsquo;ai peut-être ce qu&amp;rsquo;il vous faut : déployer un serveur de jeu privé, sur Kubernetes.&lt;/p&gt;
&lt;p&gt;La première chose dont on va avoir besoin c&amp;rsquo;est une image de conteneur à déployer, pas besoin de réinventer la roue ici, il en existe déjà une : &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://blog.nikaro.net/2023/03/23/adblock/</link><pubDate>Thu, 23 Mar 2023 10:29:43 +0100</pubDate><guid>https://blog.nikaro.net/2023/03/23/adblock/</guid><description>&lt;p&gt;Un bloqueur de publicité est une mesure d&amp;rsquo;hygiène numérique de base,
indispensable. Il convient même de cumuler un bloqueur au niveau du navigateur
avec un autre au niveau du DNS, ne serait-ce que pour bloquer ce qui ne passe
pas par le navigateur. &lt;strong&gt;Cas pratique.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La sortie à venir de Counter-Strike 2 vient d&amp;rsquo;être annoncée, en attendant
quelques invitations sont distribuées au compte goute par Valve pour tester la
version Beta.&lt;/p&gt;</description></item><item><title>GoResume, réinventer la roue, encore</title><link>https://blog.nikaro.net/2023/03/08/goresume/</link><pubDate>Wed, 08 Mar 2023 21:33:05 +0100</pubDate><guid>https://blog.nikaro.net/2023/03/08/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
&amp;ldquo;standard&amp;rdquo; &lt;a href="https://jsonresume.org"&gt;JSON Resume&lt;/a&gt;, il s&amp;rsquo;agissait de
&lt;a href="https://blog.nikaro.net/2021/06/06/cv-en-integration-continue/"&gt;resume-pycli&lt;/a&gt;, pour les
raisons évoquées. Mais voilà que j&amp;rsquo;ai tout de même commis
&lt;a href="https://github.com/nikaro/goresume"&gt;GoResume&lt;/a&gt;, une réécriture en Go.&lt;/p&gt;
&lt;h2 id="pourquoi-"&gt;Pourquoi ?&lt;/h2&gt;
&lt;p&gt;Il y a plusieurs raisons à cette réécriture. La principale étant que,
wkthmltopdf n&amp;rsquo;étant plus maintenu j&amp;rsquo;ai du le remplacer par autre chose et cet
autre chose pose des problèmes de packaging pour Hombrew. Ce soucis disparaît
lorsqu&amp;rsquo;il ne s&amp;rsquo;agit plus que de fournir un simple binaire, comme c&amp;rsquo;est le cas
avec du Go. Et surtout le travail de packaging est grandement facilité par
&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://blog.nikaro.net/2023/01/14/python-lib/</link><pubDate>Sat, 14 Jan 2023 15:50:23 +0100</pubDate><guid>https://blog.nikaro.net/2023/01/14/python-lib/</guid><description>&lt;p&gt;En Python, comme dans la plupart des langages de programmation, il est possible
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;
en abgrégé, et &amp;ldquo;librairie&amp;rdquo; en franglais. Ces bibliotheques sont des programmes
qui vont venir étendre les fonctionnalités de base du langage. En Python il y a
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;
&lt;h2 id="la-bibliothèque-standard"&gt;La bibliothèque standard&lt;/h2&gt;
&lt;p&gt;Il s&amp;rsquo;agit des bibliothèques qui sont livrées avec Python par défaut. On
l&amp;rsquo;appelle aussi la &amp;ldquo;stdlib&amp;rdquo;, pour &amp;ldquo;standard library&amp;rdquo; en anglais. Vous pouvez
retrouver la liste des bibliothèques disponibles ici:
&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://blog.nikaro.net/2023/01/14/python-http/</link><pubDate>Sat, 14 Jan 2023 14:40:00 +0100</pubDate><guid>https://blog.nikaro.net/2023/01/14/python-http/</guid><description>&lt;p&gt;Imaginons que nous voulions faire une requête vers l&amp;rsquo;API publique de GitHub,
sur 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;
&lt;p&gt;Dans un premier temps on peut tester avec &lt;code&gt;curl&lt;/code&gt; pour voir à quoi ressemble
le résultat :&lt;/p&gt;
&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;"&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
&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
travailler nativement avec JSON.&lt;/p&gt;
&lt;h2 id="urllib"&gt;urllib&lt;/h2&gt;
&lt;p&gt;Si on veut utiliser la bibliothèque standard de Python, on peut utiliser
&lt;a href="https://docs.python.org/fr/3/library/urllib.html"&gt;&lt;code&gt;urllib&lt;/code&gt;&lt;/a&gt; et
&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;
&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;"&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
&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
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&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;
&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;)
&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;
&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()
&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;
&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)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&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;])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="httpx"&gt;httpx&lt;/h2&gt;
&lt;p&gt;Si on veut se faciliter la vie, surtout quand on commence à faire des choses
plus compliqués, on peut utiliser la bibliothèque tierce
&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://blog.nikaro.net/2022/12/22/tech-2022/</link><pubDate>Thu, 22 Dec 2022 23:36:23 +0100</pubDate><guid>https://blog.nikaro.net/2022/12/22/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
technologies que j&amp;rsquo;ai apprécié ou découvert en 2022.&lt;/p&gt;
&lt;h3 id="helix"&gt;Helix&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://helix-editor.com"&gt;https://helix-editor.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un éditeur de code, inspiré de Vim et Kakoune, avec (presque) toutes les
fonctionnalités requises intégrées nativement, une configuration par défaut
&amp;ldquo;saine&amp;rdquo; et une facilité de découverte et d&amp;rsquo;utilisation qui aide grandement à la
prise en main. En l&amp;rsquo;espace de quelques jours il a complètement remplacé Neovim
et tous les plugins qui allaient avec pour le rendre plus efficace (LSP,
tree-sitter, gestionnaire de plugins, gestionnaire de serveurs LSP, etc.). Le
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://blog.nikaro.net/2022/09/03/strategie_sauvegarde/</link><pubDate>Sat, 03 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog.nikaro.net/2022/09/03/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 place une stratégie de sauvegarde, il y a quelques éléments à determiner :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qu&amp;rsquo;est-ce que je veux protéger ? Quelle données ?&lt;/li&gt;
&lt;li&gt;Contre quoi ? contre qui ?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;À partir des réponses à ces questions je peux commencer à envisager différents scénarios et leurs conséquences. Par exemple :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Je sauvegarde les données de mon ordinateur sur un NAS à la maison, mais je me fais cambrioler, j&amp;rsquo;ai potentiellement tout perdu.&lt;/li&gt;
&lt;li&gt;Mes données sont synchronisées chez un fournisseur (iCloud, Google Drive, OneDrive, Nextcloud), si le fournisseur bloque mon compte j&amp;rsquo;ai potentiellement toujours accès aux données locales. Par contre si j&amp;rsquo;efface localement mes données et que l&amp;rsquo;effacement est synchronisé, s&amp;rsquo;il y a pas de corbeille j&amp;rsquo;ai tout perdu.&lt;/li&gt;
&lt;li&gt;Je suis journaliste, mes données sont très confidentielles car elles peuvent compromettre mes sources, je fais donc une sauvegarde chiffrée chez un fournisseur, je fais une copie de ma clé de chiffrement et je la met dans un coffre chez moi au cas où je perd mon ordinateur. Mais une nuit ma maison brûle, et le coffre n&amp;rsquo;était pas ignifugé. J&amp;rsquo;ai une sauvegarde, mais elle est indéchiffrable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous voyez ? Ce n&amp;rsquo;est pas forcément simple et il peut y avoir tout un tas de scénarios auxquels on a pas forcément pensé et qui pourraient faire qu&amp;rsquo;on se retrouve sans données ou sans moyen d&amp;rsquo;y accéder.&lt;/p&gt;</description></item><item><title>Chiffrer des secrets dans Terraform</title><link>https://blog.nikaro.net/2022/02/05/chiffrer-secrets-terraform/</link><pubDate>Sat, 05 Feb 2022 00:00:00 +0000</pubDate><guid>https://blog.nikaro.net/2022/02/05/chiffrer-secrets-terraform/</guid><description>&lt;p&gt;Pour que Terraform puisse communiquer avec les fournisseurs de services
(&amp;ldquo;providers&amp;rdquo;) sur lesquels il doit pouvoir créer ses ressources, il a besoin
des identifiants des plateformes en questions. Il y a plusieurs manières de
faire, la plus basique étant de les passer via des variables d&amp;rsquo;environnement.&lt;/p&gt;
&lt;p&gt;Personnellement je trouve embêtant d&amp;rsquo;avoir une étape supplémentaire qui
consiste à sourcer un éventuel fichier &lt;code&gt;.env&lt;/code&gt;. Puis si on est parano ou
imprudent on peut craindre de faire fuiter ses secrets, par exemple avec un
programme qui planterait et souhaiterait envoyer un rapport de plantage avec le
contenu des variables d&amp;rsquo;environnement.&lt;/p&gt;</description></item><item><title>Gestionnaire de dotfiles : yadm vs. chezmoi</title><link>https://blog.nikaro.net/2022/02/04/comparatif-yadm-chezmoi-dotfiles/</link><pubDate>Fri, 04 Feb 2022 00:00:00 +0000</pubDate><guid>https://blog.nikaro.net/2022/02/04/comparatif-yadm-chezmoi-dotfiles/</guid><description>&lt;p&gt;Il en existe un paquet d&amp;rsquo;autres, mais ce sont ces deux là qui ont retenu mon
attention car ils répondent à mes besoins et semblent aussi être ceux qui font
consensus.&lt;/p&gt;
&lt;p&gt;Mes besoins sont les suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;synchroniser ma config entre plusieurs machines, avec des OS différents&lt;/li&gt;
&lt;li&gt;conséquence du besoin précédent : pouvoir gérer simplement les différences
entre les machines au sein d&amp;rsquo;un même fichier&lt;/li&gt;
&lt;li&gt;avoir un historique des modifications, afin de pouvoir revenir en arrière si
besoin&lt;/li&gt;
&lt;li&gt;permettre un déploiement simple et rapide sur une nouvelle machine&lt;/li&gt;
&lt;li&gt;permettre de chiffrer/déchiffrer certains fichiers de manière transparente&lt;/li&gt;
&lt;li&gt;je veux un outil qui fait le job pour moi, pas un nouveau jouet à bidouiller&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Actuellement j&amp;rsquo;utilise simplement Git, avec un alias pour faire pointer le
&lt;code&gt;GIT_DIR&lt;/code&gt; ailleurs, la méthode est décrite plus en détails ici pour ceux que ça
intéresse : &lt;a href="https://www.atlassian.com/git/tutorials/dotfiles"&gt;https://www.atlassian.com/git/tutorials/dotfiles&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>