<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Blog on Antoine Sauvinet - Technical Blog &amp; Portfolio</title><link>https://oinant.com/en/posts/</link><description>Recent content in Blog on Antoine Sauvinet - Technical Blog &amp; Portfolio</description><generator>Hugo -- 0.154.5</generator><language>en-US</language><lastBuildDate>Tue, 06 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oinant.com/en/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>The Many Roles of a CTO: One Title, Multiple Realities</title><link>https://oinant.com/en/posts/2026-01-06-the-many-roles-of-a-cto/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate><guid>https://oinant.com/en/posts/2026-01-06-the-many-roles-of-a-cto/</guid><description>Behind the &amp;lsquo;CTO&amp;rsquo; title lie vastly different missions and scopes depending on the organization. A deep dive into ground realities and a framework to clarify the role.</description></item><item><title>Build vs Buy in 2026: The Paradigm Has Shifted</title><link>https://oinant.com/en/posts/2026-01-05-build-vs-buy-2026/</link><pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate><guid>https://oinant.com/en/posts/2026-01-05-build-vs-buy-2026/</guid><description>&lt;p&gt;Ten years ago, the &amp;ldquo;make or buy&amp;rdquo; question often boiled down to a simple calculation: do we have the developers to build it? Today, with agentic AI accelerating development and standardizing practices, the equation deserves to be revisited.&lt;/p&gt;
&lt;p&gt;Not that the answer has become simpler. It&amp;rsquo;s still &amp;ldquo;it depends.&amp;rdquo; But the criteria on which it depends have evolved.&lt;/p&gt;
&lt;figure class="align-center "&gt;
&lt;img loading="lazy" src="https://oinant.com/images/posts/build-vs-buy-framework-2026.png#center"
alt="Make, Operate or Buy Framework 2026"/&gt; &lt;figcaption&gt;
&lt;p&gt;Overview of the decision framework&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr&gt;
&lt;h2 id="the-myths-that-lead-to-bad-decisions"&gt;The Myths That Lead to Bad Decisions&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start by clearing out the reflexes that lead to dead ends — on both sides.&lt;/p&gt;</description></item><item><title>SD Generator CLI: No More Cargo Cult with Stable Diffusion</title><link>https://oinant.com/en/posts/2025-10-21-sd-generator-cli-stable-diffusion/</link><pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid>https://oinant.com/en/posts/2025-10-21-sd-generator-cli-stable-diffusion/</guid><description>I&amp;rsquo;m open-sourcing SD Generator CLI, a tool to stop fighting with Stable Diffusion workflows.</description></item><item><title>SILK-CLI: A Writing Workflow with LLM Integration</title><link>https://oinant.com/en/posts/2025-06-17-silk-cli-writing-workflow-llm/</link><pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate><guid>https://oinant.com/en/posts/2025-06-17-silk-cli-writing-workflow-llm/</guid><description>Introducing SILK-CLI, a CLI tool for authors integrating LLMs into their writing workflow.</description></item><item><title>Will LLMs Replace Developers?</title><link>https://oinant.com/en/posts/2024-09-04-will-llms-replace-developers/</link><pubDate>Wed, 04 Sep 2024 00:00:00 +0000</pubDate><guid>https://oinant.com/en/posts/2024-09-04-will-llms-replace-developers/</guid><description>The answer is no. LLMs won&amp;rsquo;t replace developers, at least not in their current form.</description></item><item><title>[EnhanceYourCode] : the Builder Pattern, Part2</title><link>https://oinant.com/en/posts/2015-09-16-enhanceyourcode-the-builder-pattern-part2/</link><pubDate>Wed, 16 Sep 2015 09:59:55 +0000</pubDate><guid>https://oinant.com/en/posts/2015-09-16-enhanceyourcode-the-builder-pattern-part2/</guid><description>&lt;p&gt;&lt;a href="https://oinant.com/wp-content/uploads/2015/08/builder1.jpg"&gt;&lt;img alt="Builder" loading="lazy" src="https://oinant.com/wp-content/uploads/2015/08/builder1.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;In the &lt;a href="https://oinant.com/2015/09/09/enhanceyourcode-the-builder-pattern/"&gt;previous article&lt;/a&gt;, we explored the theory of the builder pattern.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s see a more concrete example :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s assuming that we are building a Role Playing Game core model. Here are the basic rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A player can be a Hero : a Warrior, a Wizard, or a Thief (we keep it simple)&lt;/li&gt;
&lt;li&gt;Every Hero has 4 main characteristics: Health, Strength, Spirit, and Speed, that are counted in points.&lt;/li&gt;
&lt;li&gt;Heroes have a Level, and starting characteristics are based on this level (Health starts at Level * 10, Strength and Spirit start at Level * 5, and Speed starts at Level * 3)&lt;/li&gt;
&lt;li&gt;Warrior has a (+2 Strength, -2 Spirit) Modificator, Wizard has (+2 Spirit, -2 Strength) Modificator&lt;/li&gt;
&lt;li&gt;Player can improve 2 Characteristics of 1 points each or 1 characteristic of 2 points, in order to cutomize his Hero.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A naive implementation of the Hero class would be :&lt;/p&gt;</description></item><item><title>[EnhanceYourCode] : the Builder Pattern</title><link>https://oinant.com/en/posts/2015-09-09-enhanceyourcode-the-builder-pattern/</link><pubDate>Wed, 09 Sep 2015 14:58:47 +0000</pubDate><guid>https://oinant.com/en/posts/2015-09-09-enhanceyourcode-the-builder-pattern/</guid><description>&lt;p&gt;&lt;a href="https://oinant.com/wp-content/uploads/2015/08/builder1.jpg"&gt;&lt;img alt="Builder" loading="lazy" src="https://oinant.com/wp-content/uploads/2015/08/builder1.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;d like to present you the Builder pattern and how I use it in my C# code.&lt;/p&gt;
&lt;p&gt;The Builder Pattern is a &lt;a href="https://en.wikipedia.org/wiki/Creational_pattern"&gt;Creational design pattern&lt;/a&gt;, like the Factory Method Pattern I already covered un this &lt;a href="https://oinant.com/2015/07/22/enhanceyourcode-the-factory-method-pattern/"&gt;previous article&lt;/a&gt;. Its main focus is to provide a light DSL to build objects by settings startup properties, by seperating the process of constructing an object from the object itself.&lt;/p&gt;
&lt;p&gt;Basically, the idea is to create a class with mutable fields, that will be initialized with dedicated methods, and a final method that create the object itself from thoses values. Here is an abstract example :&lt;/p&gt;</description></item><item><title>Canopy : Automate your browser tests the F# way!</title><link>https://oinant.com/en/posts/2015-08-31-canopy-fsharp-intro/</link><pubDate>Mon, 31 Aug 2015 10:15:15 +0000</pubDate><guid>https://oinant.com/en/posts/2015-08-31-canopy-fsharp-intro/</guid><description>&lt;p&gt;&lt;a href="https://oinant.com/wp-content/uploads/2015/08/frim_canopy.jpg"&gt;&lt;img alt="OLYMPUS DIGITAL CAMERA" loading="lazy" src="https://oinant.com/wp-content/uploads/2015/08/frim_canopy.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to introduce you &lt;strong&gt;&lt;a href="http://lefthandedgoat.github.io/canopy/index.html"&gt;Canopy&lt;/a&gt;&lt;/strong&gt;, a Selenium overlay written in F#. It brings you the concision and the clarity of F# to your selenium tests.&lt;/p&gt;
&lt;p&gt;First of all, we have to create a new F# console application, then we install canopy in our project: &lt;a href="https://oinant.com/wp-content/uploads/2015/08/install-package1.png"&gt;&lt;img alt="canopytryout-install-package" loading="lazy" src="https://oinant.com/wp-content/uploads/2015/08/install-package1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, the canopy nuget will bring back the selenium ecosystem.&lt;/p&gt;
&lt;p&gt;Lets create our first test. It will check that a search of &amp;ldquo;canopy F#&amp;rdquo; in google will feature the official Canopy website as the first result. Here is the little bootstrapping needed by Canopy :&lt;/p&gt;</description></item><item><title>[Node.js] Build a clean process manager</title><link>https://oinant.com/en/posts/2015-08-30-node-js-build-a-clean-process-manager/</link><pubDate>Sun, 30 Aug 2015 12:06:56 +0000</pubDate><guid>https://oinant.com/en/posts/2015-08-30-node-js-build-a-clean-process-manager/</guid><description>&lt;p&gt;In this article, I&amp;rsquo;ll demonstrate how to buid a simple and maintainable process manager for Node.js, leveraging its Event Loop.&lt;/p&gt;
&lt;p&gt;The main idea is have a core processor that will be able to run a serie of tasks, in a synchronous way.
As you may know, Javascript is by essence an asynchronous language.
Let take simple example :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;CrawlingAWebPageAndGetLinks&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// do the stuff the method pretend;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&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="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;program&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;CrawlingAWebPageAndGetLinks&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&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;})();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;As the execution flow is asynchroneous, the result variable will not be valued before the crawling method ends, and the usage of the variable will occurs before its valuation
The standard solution in javascript to handle this issue is to use a callback method :&lt;/p&gt;</description></item><item><title>[EnhanceYourCode] : the Factory Method Pattern</title><link>https://oinant.com/en/posts/2015-07-22-enhanceyourcode-the-factory-method-pattern/</link><pubDate>Wed, 22 Jul 2015 21:33:31 +0000</pubDate><guid>https://oinant.com/en/posts/2015-07-22-enhanceyourcode-the-factory-method-pattern/</guid><description>The Factory Method pattern is one of the most useful creational design patterns. It allows us to delegate the creation of an object to a dedicated class, improving testability and respecting the Single Responsibility Principle.</description></item><item><title>Are Estimates business critical?</title><link>https://oinant.com/en/posts/2015-06-16-are-estimates-business-critical/</link><pubDate>Tue, 16 Jun 2015 09:12:27 +0000</pubDate><guid>https://oinant.com/en/posts/2015-06-16-are-estimates-business-critical/</guid><description>&lt;p&gt;Thanks to my first post, i had the chance to have very interesting chat with some cowokers.&lt;/p&gt;
&lt;p&gt;One of the main concern was the mandatory apsect of the estimates in specific situations, mostly in order to arbitrate between two projects.&lt;/p&gt;
&lt;p&gt;First of all, let me clarify my thoughts about estimates. In order to provide reliable estimate, the following criteria have to be gathered :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Team should know itself perfectly, knowing precisely what are the strenghts and weakness of each member.&lt;/li&gt;
&lt;li&gt;Team&amp;rsquo;s codebase should be either blank or without defects&lt;/li&gt;
&lt;li&gt;product should entierely identified and specified, and the Product Owner, as the domain experts, 100% sure of what the final product should be.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ll post more on this later, but in my opinion, thoses conditions are at best anti-agile and at worst impossible to get.&lt;/p&gt;</description></item><item><title>(No)Estimates!</title><link>https://oinant.com/en/posts/2015-06-08-noestimates/</link><pubDate>Mon, 08 Jun 2015 18:12:39 +0000</pubDate><guid>https://oinant.com/en/posts/2015-06-08-noestimates/</guid><description>&lt;p&gt;This is a daily struggle of the developper nowadays : to give accurate estimates of the work we are doing, or we&amp;rsquo;ll have to do. When was the last time you succeeded  to give an actually accurate estimate? You know, the one that perfectly fits the amount of work to do, in the exact time frame, with a clear vision of what you were meant to do?  It&amp;rsquo;s been a while, isn&amp;rsquo;t it?&lt;/p&gt;</description></item></channel></rss>