<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Jujens' blog - Programmation</title><link>https://www.jujens.eu/</link><description></description><lastBuildDate>Sun, 14 Sep 2025 00:00:00 +0200</lastBuildDate><item><title>My shell config</title><link>https://www.jujens.eu/posts/en/2025/Sep/14/my-shell-config/</link><description>&lt;p&gt;I discovered a lot of tools this year, most of them I now rely on daily.
So I thought it would be a nice time to share them with various custom configs I wrote.&lt;/p&gt;
&lt;p&gt;TL;DR: install &lt;tt class="docutils literal"&gt;zoxide&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;direnv&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;starship&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;atuin&lt;/tt&gt; and have this in your &lt;tt class="docutils literal"&gt;.zshrc&lt;/tt&gt; (or &lt;tt class="docutils literal"&gt;.bashrc …&lt;/tt&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sun, 14 Sep 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-09-14:/posts/en/2025/Sep/14/my-shell-config/</guid><category>Programmation</category><category>Linux</category><category>Shell</category><category>Bash</category><category>Zsh</category></item><item><title>My opinion on Django Ninja</title><link>https://www.jujens.eu/posts/en/2025/Jul/06/django-ninja/</link><description>&lt;p&gt;If you’re using &lt;a class="reference external" href="https://www.djangoproject.com"&gt;the Django web framework (DRF)&lt;/a&gt; and are building APIs, you probably know about &lt;a class="reference external" href="https://www.django-rest-framework.org"&gt;the Django Rest Framework&lt;/a&gt; a toolkit to build APIs in Django since more than a decade (the first 3.x version was release in 2014).
It’s great and I’ve used it …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sun, 06 Jul 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-07-06:/posts/en/2025/Jul/06/django-ninja/</guid><category>Programmation</category><category>Python</category><category>Django</category><category>Web</category></item><item><title>My opinions on HTMX</title><link>https://www.jujens.eu/posts/en/2025/Jun/24/htmx/</link><description>&lt;p&gt;&lt;a class="reference external" href="https://htmx.org/"&gt;HTMX&lt;/a&gt; is a JavaScript library designed to add interactivity to your web pages.
With it, you don’t build a single page application, you use standard templates (written in Django, Jinja) rendered in your backend, add attributes to your HTML elements and let HTMX add the appropriate interactivity.
From what …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Tue, 24 Jun 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-06-24:/posts/en/2025/Jun/24/htmx/</guid><category>Programmation</category><category>Python</category><category>Django</category><category>Web</category><category>JavaScript</category></item><item><title>Simply how licenses are applied to your project with SPDX and reuse</title><link>https://www.jujens.eu/posts/en/2025/Jun/22/reuse-licenses/</link><description>&lt;p&gt;&lt;a class="reference external" href="https://spdx.dev"&gt;SPDX (Software Package Data Exchange)&lt;/a&gt; is a project managed by the Linux foundation created to standardize how licenses are identified in a human and machine readable way.
In a nutshell, instead of adding a big header to your files to identify the applicable license, you apply a copyright text and …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sun, 22 Jun 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-06-22:/posts/en/2025/Jun/22/reuse-licenses/</guid><category>Programmation</category></item><item><title>Promise returned by async functions</title><link>https://www.jujens.eu/posts/en/2025/May/24/promise-async-functions/</link><description>&lt;p&gt;Recently at work, I encountered a problem with a function that should have returned a custom promise subclass.
The goal of this subclass is to be able to call a &lt;tt class="docutils literal"&gt;cancel&lt;/tt&gt; method to cancel some pending action done within the promise and then reject it.
It looks like this:&lt;/p&gt;
&lt;pre class="code JavaScript literal-block"&gt;
&lt;span class="kd"&gt;class …&lt;/span&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sat, 24 May 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-05-24:/posts/en/2025/May/24/promise-async-functions/</guid><category>Programmation</category><category>JavaScript</category><category>TypeScript</category></item><item><title>Using Pydantic models within enums</title><link>https://www.jujens.eu/posts/en/2025/Apr/26/pydantic-enums/</link><description>&lt;p&gt;In previous articles, I provided &lt;a class="reference external" href="https://www.jujens.eu/posts/en/2025/Apr/12/python-enums/"&gt;some tips on enums&lt;/a&gt; and explained
&lt;a class="reference external" href="https://www.jujens.eu/posts/en/2025/Apr/19/using-custom-classes-pydantic/"&gt;how to use a custom class with Pydantic&lt;/a&gt;. Now, I’ll dig into all
kinds of enum usages with Pydantic, including enums whose members are
Pydantic models themselves! Let’s dive right in!&lt;/p&gt;
&lt;p&gt;Just like before, you can access …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sat, 26 Apr 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-04-26:/posts/en/2025/Apr/26/pydantic-enums/</guid><category>Programmation</category><category>Python</category><category>Pydantic</category></item><item><title>Using Pydantic with custom classes</title><link>https://www.jujens.eu/posts/en/2025/Apr/19/using-custom-classes-pydantic/</link><description>&lt;p&gt;&lt;a class="reference external" href="https://docs.pydantic.dev/latest/"&gt;Pydantic&lt;/a&gt; is an awesome data
validation library for Python. It’s getting very popular these days
because it’s fast, has lots of features and is pleasant to use. I’m
using it at work and it personal projects. It’s one of the strong points
of &lt;a class="reference external" href="https://fastapi.tiangolo.com"&gt;FastAPI&lt;/a&gt;, the new …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sat, 19 Apr 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-04-19:/posts/en/2025/Apr/19/using-custom-classes-pydantic/</guid><category>Programmation</category><category>Python</category><category>Pydantic</category></item><item><title>Some tips on Python’s enums</title><link>https://www.jujens.eu/posts/en/2025/Apr/12/python-enums/</link><description>&lt;p&gt;I’d like to share a few tips I recently (re)discovered about Python’s enums.
While interesting on its own, this article is also paving the way on a more advanced article I hope to write soon.
Let’s dive right in!&lt;/p&gt;
&lt;div class="section" id="auto"&gt;
&lt;h2&gt;&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;&lt;/h2&gt;
&lt;p&gt;By using the function &lt;tt class="docutils literal"&gt;enum.auto …&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sat, 12 Apr 2025 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-04-12:/posts/en/2025/Apr/12/python-enums/</guid><category>Programmation</category><category>Python</category></item><item><title>Writing a browser extension</title><link>https://www.jujens.eu/posts/en/2025/Feb/16/writting-browser-extension/</link><description>&lt;p&gt;I recently wrote a browser extension for Firefox and Chromium based browsers for my &lt;a class="reference external" href="httsp://www.legadilo.eu"&gt;Legadilo (RSS feeds aggregator and articles saver)&lt;/a&gt; project.
The goal is to make it easier and faster to save an article or to subscribe to a feed directly on a web page without forcing you to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sun, 16 Feb 2025 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-02-16:/posts/en/2025/Feb/16/writting-browser-extension/</guid><category>Programmation</category><category>Web</category></item><item><title>Using podman for containers</title><link>https://www.jujens.eu/posts/en/2025/Feb/09/using-podman/</link><description>&lt;p&gt;&lt;a class="reference external" href="https://podman.io/"&gt;Podman&lt;/a&gt; is an alternative to Docker and Docker compose.
It uses the same CLI interface than Docker and uses the same standardized image format.
So you can use an image built with Docker with it or build an image and then use it with Docker.
Its &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;podman-compose&lt;/span&gt;&lt;/tt&gt; command is compatible …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sun, 09 Feb 2025 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-02-09:/posts/en/2025/Feb/09/using-podman/</guid><category>Programmation</category><category>Docker</category><category>podman</category><category>containers</category><category>systemctl</category><category>Linux</category></item><item><title>Systemd Timers</title><link>https://www.jujens.eu/posts/en/2025/Feb/01/systemd-timers/</link><description>&lt;p&gt;After using &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Anacron"&gt;anacron&lt;/a&gt; for years to run a backup script regularly, I decided to have a look at &lt;tt class="docutils literal"&gt;systemd&lt;/tt&gt; timers.
Overall, &lt;tt class="docutils literal"&gt;anacron&lt;/tt&gt; worked fine: I could run tasks as my user and it would start tasks if they missed a run.
But, I was still frustrated with how it worked …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sat, 01 Feb 2025 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-02-01:/posts/en/2025/Feb/01/systemd-timers/</guid><category>Programmation</category><category>systemctl</category><category>Linux</category></item><item><title>My take on UV and Ruff</title><link>https://www.jujens.eu/posts/en/2025/Jan/25/uv-and-ruff/</link><description>&lt;p&gt;I recently tried the new and shiny tools made by &lt;a class="reference external" href="https://astral.sh/"&gt;astral&lt;/a&gt;.
I only used them on my personal projects yet, but I’m still very impressed!
You may already have heard of them.
I’ll try to keep the article concise and won’t dig too deep into the tools …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sat, 25 Jan 2025 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2025-01-25:/posts/en/2025/Jan/25/uv-and-ruff/</guid><category>Programmation</category><category>Python</category></item><item><title>Weird test behavior in my Django project test suite after an IntegrityError</title><link>https://www.jujens.eu/posts/en/2024/Dec/01/django-integrityerror-tests/</link><description>&lt;p&gt;Recently I encountered a very weird behavior in my Django project test suite.
I created a view that caught an &lt;tt class="docutils literal"&gt;IntegrityError&lt;/tt&gt; from the database (caused by duplicates in a unique index).
When this error occurs, I want to respond with a &lt;tt class="docutils literal"&gt;409 - CONFLICT&lt;/tt&gt; status code and an error message.&lt;/p&gt;
&lt;p&gt;TL …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sun, 01 Dec 2024 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2024-12-01:/posts/en/2024/Dec/01/django-integrityerror-tests/</guid><category>Programmation</category><category>Python</category><category>Web</category><category>Django</category></item><item><title>Offline support almost without Javascript</title><link>https://www.jujens.eu/posts/en/2024/Feb/27/offline-support-almost-no-js/</link><description>&lt;p&gt;Recently I wandered wether I could build a website with offline support without building a full SPA.
The answer is yes it’s doable: you only need Javascript for the service worker.
Just for the fun, I also tried it with navigation done with &lt;a class="reference external" href="https://htmx.org/"&gt;HTMX&lt;/a&gt; and without much surprise it …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Tue, 27 Feb 2024 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2024-02-27:/posts/en/2024/Feb/27/offline-support-almost-no-js/</guid><category>Programmation</category><category>PWA</category><category>HTML</category><category>Javascript</category></item><item><title>Development containers</title><link>https://www.jujens.eu/posts/en/2024/Jan/02/decontainers/</link><description>&lt;p&gt;I recently discovered the &lt;a class="reference external" href="https://containers.dev/"&gt;dev containers standard&lt;/a&gt; (or development containers for long) recently after trying to contribute to a project which had them enabled by default.
It seems to be a new standard way to work with containers in development.&lt;/p&gt;
&lt;p&gt;The goal is to provide a container you can use …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Tue, 02 Jan 2024 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2024-01-02:/posts/en/2024/Jan/02/decontainers/</guid><category>Programmation</category><category>Docker</category></item><item><title>Django async</title><link>https://www.jujens.eu/posts/en/2023/Dec/10/django-async/</link><description>&lt;p&gt;Now that Django is fully async (views, middleware and ORM), I though it was a good time to test how it behaves when run asynchronously.
I’ll try to keep this article concise with only relevant data and resources.
Code can be seen in &lt;a class="reference external" href="https://gitlab.com/Jenselme/dj-test-async"&gt;a sample project&lt;/a&gt; so you can …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sun, 10 Dec 2023 00:00:00 +0100</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2023-12-10:/posts/en/2023/Dec/10/django-async/</guid><category>Programmation</category><category>Web</category><category>Django</category><category>Python</category></item><item><title>Writing RSS reading app with various frontend frameworks</title><link>https://www.jujens.eu/posts/en/2023/Sep/09/js-frameworks-rss/</link><description>&lt;!-- my notes: https://trello.com/c/swnG6rWA/2604-%C3%A9crire-un-article-sur-mes-lecteurs-rss --&gt;
&lt;p&gt;During the summer, I decided to test a few frontend framework to see what’s going on in this space and form a better opinions over alternatives to React.
I tested Svelte because after hearing from it I felt attracted to it, Vue because it is popular, React to have …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Sat, 09 Sep 2023 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2023-09-09:/posts/en/2023/Sep/09/js-frameworks-rss/</guid><category>Programmation</category><category>Web</category><category>Javascript</category><category>Typescript</category><category>React</category><category>Angular</category><category>Svelte</category><category>Vue</category></item><item><title>My opinion after testing some AI code assistant</title><link>https://www.jujens.eu/posts/en/2023/Aug/21/ai-tests/</link><description>&lt;!-- my notes: https://trello.com/c/SDmffwaT/2580-tester-les-ia --&gt;
&lt;p&gt;With all the hype around AI and since I had time to spare, I decided to test some AI coding assistants to make my own opinion about them.
I'll start by giving my opinion on each assistant I tried.
I will be a bit fuzzy since I didn't intend to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Mon, 21 Aug 2023 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2023-08-21:/posts/en/2023/Aug/21/ai-tests/</guid><category>Programmation</category><category>AI</category></item><item><title>My opinion on enums in TypeScript</title><link>https://www.jujens.eu/posts/en/2023/Aug/18/typescript-emuns/</link><description>&lt;p&gt;Today I'd like to dig a bit on enums in TypeScript and their potential alternatives.
For this, I'll be using the &lt;a class="reference external" href="https://www.typescriptlang.org/play"&gt;playground&lt;/a&gt; and TypeScript 5.1.6 (latest released version when I am writing this).
I expect you to know what enums are and to be comfortable in TypeScript.&lt;/p&gt;
&lt;p&gt;Let's …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Fri, 18 Aug 2023 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2023-08-18:/posts/en/2023/Aug/18/typescript-emuns/</guid><category>Programmation</category><category>TypeScript</category></item><item><title>Exploring a weird HTTP issues</title><link>https://www.jujens.eu/posts/en/2022/May/04/exploring-weird-http-issue/</link><description>&lt;p&gt;Today I'd like to explain how I tried to solve a weird HTTP issues that I found at work.
I hope you will find the method and the trials I used the useful/interesting if/when you will encounter something similar.&lt;/p&gt;
&lt;p&gt;The issue was this: I needed to dynamically generate …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Julien Enselme</dc:creator><pubDate>Wed, 04 May 2022 00:00:00 +0200</pubDate><guid isPermaLink="false">tag:www.jujens.eu,2022-05-04:/posts/en/2022/May/04/exploring-weird-http-issue/</guid><category>Programmation</category><category>Python</category><category>Django</category><category>nginx</category><category>GCP</category><category>devops</category></item></channel></rss>