<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Le Baron de Charlus</title><link>https://lebaron.sh/</link><description>Recent content on Le Baron de Charlus</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 24 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lebaron.sh/index.xml" rel="self" type="application/rss+xml"/><item><title>The Em Dash Tell</title><link>https://lebaron.sh/posts/em-dash-ai-tell/</link><pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/em-dash-ai-tell/</guid><description>&lt;p&gt;Something changed in the last couple of months if not years now. Open Slack, open a Notion page, scroll LinkedIn for thirty seconds, and there it is: a long dash sitting in the middle of a sentence, doing a job a comma or a period used to do just fine. It shows up so often now that it isn’t really a stylistic choice anymore, it’s a tell.&lt;/p&gt;
&lt;h2 id="a-character-almost-nobody-typed"&gt;A character almost nobody typed&lt;/h2&gt;
&lt;p&gt;The mark is the em dash. It’s called that because &lt;a href="https://en.wiktionary.org/wiki/em_dash"&gt;its width was traditionally set to one em&lt;/a&gt;, the width of the letter M in a given typeface, which also makes it roughly twice as wide as its shorter cousin, the en dash. It isn’t new. Printers were already using &lt;a href="https://en.wikipedia.org/wiki/Dash"&gt;something close to it in English drama as far back as 1588&lt;/a&gt;, when Maurice Kyffin’s translation of Terence’s &lt;em&gt;Andria&lt;/em&gt; used a run of hyphens to mark broken, interrupted speech. A few decades later, other translations of the same play leaned on the same trick dozens of times. Eventually the expensive folio editions settled on a single unified rule instead of a chain of hyphens, mostly because it looked better on the page.&lt;/p&gt;</description></item><item><title>Enseignement supérieur privé : la dérive des BTS SIO et CIEL</title><link>https://lebaron.sh/posts/derive-enseignement-superieur/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/derive-enseignement-superieur/</guid><description>&lt;p&gt;L’essor des formations initiales et en alternance dans le secteur du numérique a entraîné la multiplication des établissements privés proposant le BTS SIO (Services Informatiques aux Organisations), décliné en options SLAM (développement) et SISR (réseaux), ainsi que le nouveau cursus CIEL (cybersécurité, informatique et réseaux). Pourtant, derrière les promesses d’employabilité et malgré des frais de scolarité s’élevant à plusieurs milliers d’euros, se cache une réalité pédagogique alarmante.&lt;/p&gt;
&lt;p&gt;En tant qu’intervenant au sein de deux structures privées, j’ai pu observer des dysfonctionnements systémiques qui interrogent profondément la valeur réelle de ces cursus et l’efficacité des contrôles étatiques.&lt;/p&gt;</description></item><item><title>Private Higher Education: The Decline of BTS SIO and CIEL Programs</title><link>https://lebaron.sh/posts/downward-spiral-french-education/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/downward-spiral-french-education/</guid><description>&lt;p&gt;The boom in initial training and work-study programs within the digital sector has led to a proliferation of private institutions offering the BTS SIO (&lt;em&gt;Services Informatiques aux Organisations&lt;/em&gt;), split into the SLAM (software development) and SISR (networks and infrastructure) options, as well as the new CIEL curriculum (&lt;em&gt;Cybersécurité, Informatique et Réseaux&lt;/em&gt;). Behind the promises of high employability and tuition fees running into several thousand euros, though, lies an alarming pedagogical reality.&lt;/p&gt;</description></item><item><title>Rethinking IT: The Quest for Efficiency Over Complexity</title><link>https://lebaron.sh/posts/rethinking-it/</link><pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/rethinking-it/</guid><description>&lt;h3 id="context"&gt;Context&lt;/h3&gt;
&lt;p&gt;It took me a long time to finally sit down and write this article. I’ve always been passionate about technology. It’s in my DNA. For over 10 years, I’ve worked in IT engineering, taking on roles such as Full-Stack Developer, System Administrator, DevOps Engineer, and Site Reliability Engineer. My path has been unconventional: entirely self-taught, climbing the ranks one step at a time.&lt;/p&gt;
&lt;p&gt;I don’t have a university degree beyond a high school diploma. Everything I know, I taught myself: books, online resources, YouTube, and hands-on experience.&lt;/p&gt;</description></item><item><title>Why I Switched to Bépo (French Dvorak) on Kinesis Advantage2</title><link>https://lebaron.sh/posts/bepo-kinesis/</link><pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/bepo-kinesis/</guid><description>&lt;p&gt;More than a decade ago, I started experiencing pain in my &lt;strong&gt;right hand&lt;/strong&gt;, without realizing at first that it had anything to do with my keyboard.&lt;/p&gt;
&lt;p&gt;It wasn’t until the pain eased whenever I took a break from typing that I identified the culprit: &lt;strong&gt;Carpal Tunnel Syndrome&lt;/strong&gt;. The pain was especially sharp when pressing the &lt;strong&gt;backspace key&lt;/strong&gt;, an awkward reach that strained my wrist.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://lebaron.sh/images/bepo-kinesis/01-carpal-tunnel.jpg" alt="Wrist pain from typing"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://midamortho.com/5-desk-accessories-to-help-prevent-carpal-tunnel/"&gt;Source&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As a software and systems engineer, typing is central to my daily routine, so this was a serious concern. My search for a solution led me to the &lt;strong&gt;Dvorak layout&lt;/strong&gt;, which promised efficiency and comfort.&lt;/p&gt;</description></item><item><title>A Journey with Backstage: Configuration and GitHub Auth (Part 2)</title><link>https://lebaron.sh/posts/backstage-part-2/</link><pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/backstage-part-2/</guid><description>&lt;p&gt;&lt;img src="https://lebaron.sh/images/backstage-part-2/01-cover.jpg" alt="Backstage"&gt;&lt;/p&gt;
&lt;p&gt;In the previous article, we installed and ran our Backstage instance with Devbox. Now let’s dig into the configuration and set up GitHub authentication so we can actually log in to our app!&lt;/p&gt;
&lt;p&gt;We left off with a working local Backstage application, accessible at &lt;a href="http://localhost:3000"&gt;http://localhost:3000&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Missed Part 1?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Related: &lt;a href="https://lebaron.sh/posts/backstage-part-1/"&gt;A Journey with Backstage: One Platform to Rule Them All (Part 1)&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Let’s reuse the Devbox environment from the previous article to run Backstage!&lt;/p&gt;</description></item><item><title>A Journey with Backstage: One Platform to Rule Them All (Part 1)</title><link>https://lebaron.sh/posts/backstage-part-1/</link><pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/backstage-part-1/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://lebaron.sh/images/backstage-part-1/01-intro.png" alt="Backstage"&gt;&lt;/p&gt;
&lt;p&gt;Our team recently set out to integrate Backstage, and this is the first in a series of articles documenting that experience. This piece covers the installation process and basic setup, but first, let’s look at why we chose Backstage in the first place.&lt;/p&gt;
&lt;h2 id="why-backstage"&gt;Why Backstage?&lt;/h2&gt;
&lt;p&gt;Backstage is an open platform for building developer portals, originally created by Spotify and now maintained under the Cloud Native Computing Foundation (CNCF). It gives teams a single, centralized place to manage services, tools, and documentation, letting developers discover, share, and collaborate on projects without hunting across a dozen different systems.&lt;/p&gt;</description></item><item><title>Streamlining Development Workflows with Devbox: A Technical Dive</title><link>https://lebaron.sh/posts/devbox-technical-dive/</link><pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/devbox-technical-dive/</guid><description>&lt;p&gt;Achieving efficiency and maintaining consistency across development environments are two of the most persistent challenges developers face. My search for tools that streamline the development process while keeping work environments reproducible and manageable led me to Devbox: a command-line utility that changes the way developers create and manage isolated environments, a bit like a Swiss Army knife for the modern developer.&lt;/p&gt;
&lt;h2 id="introducing-devbox"&gt;Introducing Devbox&lt;/h2&gt;
&lt;p&gt;Devbox lets developers spin up isolated shells customized for specific project requirements. It works through a configuration file, devbox.json, which lists the packages a project needs. Devbox then installs those tools into the environment, similar to how a package manager like yarn works, but at the operating system level, handling packages you&amp;rsquo;d normally install via brew or apt-get.&lt;/p&gt;</description></item><item><title>Shell loading animations</title><link>https://lebaron.sh/posts/shell-loading-animations/</link><pubDate>Thu, 22 Sep 2022 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/shell-loading-animations/</guid><description>&lt;h2 id="why"&gt;Why&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve recently been writing some shell scripts to automate and distribute actions that used to be done manually (I&amp;rsquo;ll write a post about that later). For now, I&amp;rsquo;d like to share how I built a 100% shell-based loader library to use in my scripts.&lt;/p&gt;
&lt;p&gt;I looked around for an existing library and found a few interesting GitHub projects, but none of them felt ready to use as an actual library. Most were also limited to old, basic ASCII templates, and I wanted to try building something closer to modern loaders and spinners in shell.&lt;/p&gt;</description></item><item><title>Ultimate Python development environment configuration</title><link>https://lebaron.sh/posts/ultimate-python-development-environment-configuration/</link><pubDate>Wed, 24 Aug 2022 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/ultimate-python-development-environment-configuration/</guid><description>&lt;p&gt;&lt;em&gt;Disclaimer: &lt;strong&gt;I’m not saying&lt;/strong&gt; &lt;code&gt;virtualenv&lt;/code&gt; methods are bad.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-old-way"&gt;The Old way&lt;/h2&gt;
&lt;p&gt;For years, I&amp;rsquo;ve used Python for a lot of different projects. My setup was simple: use &lt;code&gt;virtualenv&lt;/code&gt; and work locally.&lt;/p&gt;
&lt;p&gt;But this approach came with a few pain points. I&amp;rsquo;d often forget to &lt;code&gt;source venv/bin/activate&lt;/code&gt;, which meant I&amp;rsquo;d end up running &lt;code&gt;pip install my-package&lt;/code&gt; on my global system instead.&lt;/p&gt;
&lt;p&gt;I also had poor secrets management, setting them unencrypted in a shell script loaded at program start.&lt;/p&gt;</description></item><item><title>Manage your Zellij sessions</title><link>https://lebaron.sh/posts/zellij-sessions/</link><pubDate>Tue, 12 Jul 2022 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/zellij-sessions/</guid><description>&lt;p&gt;&lt;img src="https://lebaron.sh/images/zellij.png" alt="Zellij logo"&gt;&lt;/p&gt;
&lt;p&gt;Quick post about &lt;code&gt;Zellij&lt;/code&gt;, a great tool I&amp;rsquo;ve been using for a few weeks as a &lt;code&gt;Tmux&lt;/code&gt; replacement.&lt;/p&gt;
&lt;p&gt;I kept missing a way to manage my &lt;code&gt;sessions&lt;/code&gt; whenever I started a new &lt;code&gt;shell&lt;/code&gt; or &lt;code&gt;terminal&lt;/code&gt;, so I built a quick feature to handle it on startup.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://lebaron.sh/images/sessions.gif" alt="The session picker in action"&gt;&lt;/p&gt;
&lt;h3 id="dependencies"&gt;Dependencies&lt;/h3&gt;
&lt;p&gt;You need &lt;a href="https://github.com/lotabout/skim"&gt;sk&lt;/a&gt; binary installed and in your &lt;code&gt;$PATH&lt;/code&gt; and of course &lt;a href="https://github.com/zellij-org/zellij/"&gt;zellij&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="installation"&gt;Installation&lt;/h3&gt;
&lt;p&gt;Add this block at the end of your &lt;code&gt;$SHELLrc&lt;/code&gt; file &lt;em&gt;(tested with BASH and ZSH)&lt;/em&gt;:&lt;/p&gt;</description></item><item><title>Bring Your Own Image</title><link>https://lebaron.sh/posts/bring-your-own-image/</link><pubDate>Mon, 20 Jul 2020 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/bring-your-own-image/</guid><description>&lt;p&gt;While working at &lt;strong&gt;OVHCloud&lt;/strong&gt;, I developed a feature called &lt;strong&gt;BYOI&lt;/strong&gt; (Bring Your Own Image).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bring Your Own Image&lt;/strong&gt; technology lets you boot any cloud (or non-cloud) image on bare metal.&lt;/p&gt;
&lt;p&gt;Not every vendor ships images that are fully agnostic yet (by that I mean ready for both &lt;strong&gt;UEFI&lt;/strong&gt; and &lt;strong&gt;legacy boot&lt;/strong&gt;), but with a bit of tinkering (&lt;strong&gt;packer&lt;/strong&gt;), we can get something functional.&lt;/p&gt;
&lt;p&gt;This marks a first step towards &lt;strong&gt;Hybrid IAC&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Random wallpaper with AwesomeWM !</title><link>https://lebaron.sh/posts/random-awesome/</link><pubDate>Fri, 10 Jan 2020 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/random-awesome/</guid><description>&lt;p&gt;I wanted to shake up my routine a bit while working on my laptop, so I figured automatically changing my wallpaper at random would be a good way to break the monotony.&lt;/p&gt;
&lt;p&gt;I use awesomeWM (version 4):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[f00b@void ~]$ awesome --version
awesome v4.3 (Too long)
 • Compiled against Lua 5.3.5 (running with Lua 5.3)
 • D-Bus support: ✔
 • execinfo support: ✘
 • xcb-randr version: 1.6
 • LGI version: 0.9.2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So I needed three things:&lt;/p&gt;</description></item><item><title>Freebsd Pci Disk Space</title><link>https://lebaron.sh/posts/freebsd-pci-disk/</link><pubDate>Sun, 04 Mar 2018 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/freebsd-pci-disk/</guid><description>&lt;p&gt;When you create an OVH Public Cloud instance running FreeBSD with a given amount of disk space, say 50G, you&amp;rsquo;ll find that it isn&amp;rsquo;t fully applied to your partition.&lt;/p&gt;
&lt;p&gt;First, let&amp;rsquo;s look at what we have:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# gpart show
=&amp;gt; 40 10239920 da0 GPT (50G) [CORRUPT]
 40 1024 1 freebsd-boot (512K)
 1064 984 - free - (492K)
 2048 10235904 2 freebsd-zfs (4.9G)
 10237952 2008 - free - (1.0M)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice that our volume da0 is tagged as CORRUPT. Don&amp;rsquo;t panic, the FreeBSD handbook has the answer, as always. Here&amp;rsquo;s the relevant excerpt:&lt;/p&gt;</description></item><item><title>Ubuntu Vrack Ovh Fix</title><link>https://lebaron.sh/posts/ubuntu-vrack-ovh/</link><pubDate>Sun, 04 Mar 2018 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/ubuntu-vrack-ovh/</guid><description>&lt;p&gt;You may have noticed this already: when you spin up an OVH Public Cloud (PCI) instance running Ubuntu with Vrack enabled, the VM won&amp;rsquo;t have its private IP at boot time.
I&amp;rsquo;m not a big fan of Ubuntu, but sometimes you don&amp;rsquo;t get to choose.&lt;/p&gt;
&lt;p&gt;Anyway, long story short: no private IP, and that&amp;rsquo;s a shame. (RT)&lt;/p&gt;
&lt;p&gt;The fix is stupid. Very stupid.&lt;/p&gt;
&lt;p&gt;Add the following to the &lt;code&gt;/etc/network/interface&lt;/code&gt; file:&lt;/p&gt;</description></item><item><title>Add Gitlab Registry in Kubernetes</title><link>https://lebaron.sh/posts/gitlab-registry-kubernetes/</link><pubDate>Thu, 10 Aug 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/gitlab-registry-kubernetes/</guid><description>&lt;p&gt;Now that GitLab offers its own image registry, we can use it directly in our K8s environment.
If you missed the announcement (it&amp;rsquo;s a bit dated by now), check out &lt;a href="https://about.gitlab.com/2016/05/23/gitlab-container-registry/"&gt;this article&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To add the GitLab private registry to Kubernetes, you first need to create a secret:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt; kubectl create secret docker-registry regsecret --docker-server=registry.gitlab.xyz --docker-username=&amp;#39;&amp;#39; --docker-password=&amp;#39;&amp;#39; --docker-email=&amp;#34;&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Where :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;--docker-server regitry gitlab
--docker-username user gitlab autorisé à acceder au registry
--docker-password son mot de passe
--docker-email son email
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let&amp;rsquo;s check that the secret was created:&lt;/p&gt;</description></item><item><title>Dockerize Nova client</title><link>https://lebaron.sh/posts/docker-nova/</link><pubDate>Tue, 08 Aug 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/docker-nova/</guid><description>&lt;p&gt;With OVH Public Cloud, you can control your OpenStack instances directly from the Nova client.&lt;/p&gt;
&lt;p&gt;Working from the command line is much more practical than going through the manager, which, let&amp;rsquo;s be honest, is often slow.&lt;/p&gt;
&lt;p&gt;To avoid setting up a working Nova environment every time, I found it more convenient to package everything into a Docker image. That way, the only thing you need installed on your workstation is the Docker daemon.&lt;/p&gt;</description></item><item><title>Setup Rancher cluster on OVH Public Cloud</title><link>https://lebaron.sh/posts/rancher-pci-ovh/</link><pubDate>Fri, 04 Aug 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/rancher-pci-ovh/</guid><description>&lt;p&gt;The hosting world is changing, and so is the way we build applications. We&amp;rsquo;re turning less and less to dedicated hosting for a single application, and more toward building the infrastructure that will support it.&lt;/p&gt;
&lt;p&gt;In practice, this means favoring an IaaS layer on top of dedicated &amp;ldquo;bare metal&amp;rdquo; for our application overlay, rather than provisioning pure &amp;ldquo;bare metal&amp;rdquo; per service.&lt;/p&gt;
&lt;p&gt;The deployments developers push need to fit the technology and logic of production. Which &lt;code&gt;pipelines&lt;/code&gt; should we use for &lt;code&gt;CI&lt;/code&gt;/&lt;code&gt;CD&lt;/code&gt;?&lt;/p&gt;</description></item><item><title>Online servers availability</title><link>https://lebaron.sh/posts/online-servers/</link><pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/online-servers/</guid><description>&lt;p&gt;We needed servers at Online, but there was no availability! So they came to ask me if I had some kind of magic solution&amp;hellip;&lt;/p&gt;
&lt;p&gt;A bit of &lt;code&gt;bash&lt;/code&gt;, a &lt;code&gt;notify&lt;/code&gt; (in this case &lt;code&gt;Slack&lt;/code&gt;), and here we go!&lt;/p&gt;
&lt;h4 id="dirty-way"&gt;Dirty way&lt;/h4&gt;
&lt;p&gt;To get alerted via Slack, you need to create an &lt;a href="https://my.slack.com/services/new/incoming-webhook/"&gt;incoming-webhook&lt;/a&gt;, which will generate a link.&lt;/p&gt;
&lt;p&gt;For an XC 2016 series server:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;DISPO : https://www.online.net/fr/serveur-dedie/dedibox-xc&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;{\&amp;#34;channel\&amp;#34;: \&amp;#34;#infra\&amp;#34;, \&amp;#34;text\&amp;#34;: \&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$text&lt;/span&gt;&lt;span class="s2"&gt;\&amp;#34;}&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; curl --silent https://www.online.net/fr/serveur-dedie &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s1"&gt;&amp;#39;&amp;lt;button class=&amp;#34;btn btn--primary js-order-dedibox&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -i &lt;span class="s1"&gt;&amp;#39;xc 2016&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; grep -i &lt;span class="s1"&gt;&amp;#39;victime&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; curl -s -d &lt;span class="s2"&gt;&amp;#34;payload=&lt;/span&gt;&lt;span class="nv"&gt;$json&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://hooks.slack.com/services/XXX/XXXX/XXXX/XXXX&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; sleep &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The curl only fires if a server is actually available.&lt;/p&gt;</description></item><item><title>Additional Volume Public Cloud Ovh</title><link>https://lebaron.sh/posts/volume-pci/</link><pubDate>Mon, 31 Jul 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/volume-pci/</guid><description>&lt;p&gt;Adding an extra disk or volume to your OVH Public Cloud instance takes a few manual steps. Here&amp;rsquo;s how to do it.&lt;/p&gt;
&lt;p&gt;First, identify your new disk:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fdisk -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output will vary depending on your system (&lt;code&gt;sd{x}&lt;/code&gt;, &lt;code&gt;vd{x}&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Then create a new partition:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# parted /dev/{{disk}}
mktable gpt
mkpart primary ext4 512 100%
quit
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Format it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkfs -t ext4 -L rootfs /dev/&lt;span class="o"&gt;{{&lt;/span&gt;disk&lt;span class="o"&gt;}}&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mount it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/&lt;span class="o"&gt;{{&lt;/span&gt;disk&lt;span class="o"&gt;}}&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To make this persistent across reboots, we&amp;rsquo;ll need the volume&amp;rsquo;s &lt;strong&gt;UUID&lt;/strong&gt;, which we can grab from the block ID.&lt;/p&gt;</description></item><item><title>Migrate Openvz To Lxc</title><link>https://lebaron.sh/posts/migrate-openvz-lxc/</link><pubDate>Mon, 31 Jul 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/migrate-openvz-lxc/</guid><description>&lt;p&gt;I recently had to migrate containers from a Proxmox 3 host (running OpenVZ) to a Proxmox 4 host (running LXC).&lt;/p&gt;
&lt;p&gt;The problem was the sheer number of containers to migrate and &amp;ldquo;convert&amp;rdquo; to run under LXC, so I needed a way to automate the process as much as possible.&lt;/p&gt;
&lt;p&gt;Luckily, the &lt;a href="https://pve.proxmox.com/wiki/Convert_OpenVZ_to_LXC"&gt;migration documentation&lt;/a&gt; is very well detailed, so I used it as the basis for a couple of scripts.&lt;/p&gt;
&lt;p&gt;I split the operation into two scripts: an export script and an import script.&lt;/p&gt;</description></item><item><title>Event Watcher Manager Python3</title><link>https://lebaron.sh/posts/event-watcher-python/</link><pubDate>Sun, 30 Jul 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/event-watcher-python/</guid><description>&lt;p&gt;For one specific request, I had to build an automated program that reacts to SFTP user updates.&lt;br&gt;
The main technical challenge was that the SFTP protocol has no logging system of its own.&lt;/p&gt;
&lt;p&gt;I had heard about &lt;a href="https://github.com/seb-m/pyinotify/blob/master/python3/pyinotify.py"&gt;the pyinotify library&lt;/a&gt;, so I started working with it.&lt;br&gt;
&lt;strong&gt;This post covers the project&amp;rsquo;s core mechanism&lt;/strong&gt;; for more detail, I invite you to read the source code.&lt;/p&gt;
&lt;h4 id="technical-requirements-for-the-project"&gt;Technical requirements for the project&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Context:&lt;/strong&gt;&lt;br&gt;
The program needs to monitor SFTP user actions. Each user&amp;rsquo;s home directory is an NFS mount.&lt;br&gt;
Users can upload anything to their account, but the program must detect video uploads (in specific formats) and then trigger a series of actions.&lt;/p&gt;</description></item><item><title>Galera Monitoring</title><link>https://lebaron.sh/posts/galera-monitoring/</link><pubDate>Sun, 30 Jul 2017 00:00:00 +0000</pubDate><guid>https://lebaron.sh/posts/galera-monitoring/</guid><description>&lt;p&gt;Monitoring a database in standalone mode is one thing, but clustering makes it a lot more complex.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s exactly the case with Galera clustering (MariaDB/MySQL). Zabbix and similar tools gave me simple solutions for single database servers, but I couldn&amp;rsquo;t find a template I actually liked for monitoring a Galera cluster in production.&lt;/p&gt;
&lt;p&gt;So a few questions came up: what to monitor, how to alert, and what the best approach would be.&lt;/p&gt;</description></item><item><title>About</title><link>https://lebaron.sh/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lebaron.sh/about/</guid><description>&lt;p&gt;Notes on code, management &amp;amp; culture, from someone who has spent more than a decade moving through the ranks of IT: developer, SRE, engineering manager, and now director. Writing here under the name of Le Baron de Charlus.&lt;/p&gt;</description></item><item><title>Le Baron de Charlus</title><link>https://lebaron.sh/cv/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lebaron.sh/cv/</guid><description/></item><item><title>Projects</title><link>https://lebaron.sh/projects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lebaron.sh/projects/</guid><description>&lt;h2 id="my-projects"&gt;My projects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lebarondecharlus.github.io/keel/index.html" target="_blank" rel="noopener noreferrer"&gt;Keel&lt;/a&gt; : Managed Jails alternative of Kubernetes for BSD systems, made in Rust.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lebaron.sh/posts/bring-your-own-image/" target="_blank" rel="noopener noreferrer"&gt;Bring Your Own image&lt;/a&gt; : Allows you to boot any cloud (or not) images on a baremetal.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="participated-on"&gt;Participated on&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/LeBaronDeCharlus/FDD-book" target="_blank" rel="noopener noreferrer"&gt;FDD-book&lt;/a&gt; : FreeBSD Device Driver Book.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/apisix-ingress-controller" target="_blank" rel="noopener noreferrer"&gt;apisix-ingress-controller&lt;/a&gt; : APISIX Ingress Controller for Kubernetes.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AxisCommunications/backstage-plugins" target="_blank" rel="noopener noreferrer"&gt;backstage-plugins&lt;/a&gt; : Backstage plugins for Axis Communications.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/backstage/community-plugins" target="_blank" rel="noopener noreferrer"&gt;backstage/community-plugins&lt;/a&gt; : Backstage community plugins.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeBaronDeCharlus/torlink" target="_blank" rel="noopener noreferrer"&gt;torlink&lt;/a&gt; : a sleek, zero-setup torrent finder and downloader that lives right in your terminal.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lucasheld/uptime-kuma-api" target="_blank" rel="noopener noreferrer"&gt;uptime-kuma-api&lt;/a&gt; : a Python wrapper for the Uptime Kuma Socket.IO API.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Z4nzu/hackingtool" target="_blank" rel="noopener noreferrer"&gt;hackingtool&lt;/a&gt; : all in one hacking tool for hackers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/btschwertfeger/python-kraken-sdk" target="_blank" rel="noopener noreferrer"&gt;btschwertfeger/python-kraken-sdk&lt;/a&gt; : a Python SDK for the Kraken API.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/catppuccin/tmux" target="_blank" rel="noopener noreferrer"&gt;catppuccin-tmux&lt;/a&gt; : a tmux theme for the Catppuccin color scheme.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eythaann/seelen-ui" target="_blank" rel="noopener noreferrer"&gt;seelen-ui&lt;/a&gt; : customizable Desktop Environment.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/georust/netcdf" target="_blank" rel="noopener noreferrer"&gt;netcdf&lt;/a&gt; : Rust bindings for the NetCDF library.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hashicorp/terraform" target="_blank" rel="noopener noreferrer"&gt;hashicorp/terraform&lt;/a&gt; : an open-source infrastructure as code software tool.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LunarVim/lunarvim.org" target="_blank" rel="noopener noreferrer"&gt;lunarvim&lt;/a&gt; : a Neovim configuration focused on IDE-like features and functionality.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/o2sh/onefetch" target="_blank" rel="noopener noreferrer"&gt;onefetch&lt;/a&gt; : a command-line GitHub repository information tool.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/okta/okta-sdk-python" target="_blank" rel="noopener noreferrer"&gt;okta-sdk-python&lt;/a&gt; : a Python SDK for the Okta API.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AngelJumbo/gruvbox-wallpapers" target="_blank" rel="noopener noreferrer"&gt;gruvbox-wallpapers&lt;/a&gt; : a collection of wallpapers for the gruvbox color scheme.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>