-
Zed Turtle Extension
I have just released the first version of a Zed extension for the Turtle format.
Zed?
Zed is a very cool text editor / IDE by the creators of Atom and Tree-Sitter. It is written in Rust and it caught my interest because it is very very lean, it has Vim, JetBrains, VSCode, Helix and Emacs keybindings and a growing extension system. It has multiple advantages (at least in my opinion) over the competition, and I feel it builds upon other IDEs’ strengths while being very pleasant to use. It has pair-programming and remote development baked-in from day one. Most importantly, it is not owned by a multi-billionnaire-led, fascist-supporting company that will eventually sunset or paywall the product once the whole world is addicted to it. And yes, it features AI, MCP and agentic editing if that’s your thing, but that’s something you can turn off, which I did. Zed is currently driving me away from Emacs (and that means something if you ask me). You really should give it a try. Stop reading and download it.
Turtle?
That’s the RDF file format I use extensively at work. It renders RDF graph triplets in a readable format, making it easier to manage than plain RDF/XML or JSON-LD other semantic web file formats. This is an sample Turtle file: ```turtle @prefix rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# . @prefix dc: http://purl.org/dc/elements/1.1/ . @prefix ex: http://example.org/stuff/1.0/ .
Read more
-
Set up Ghost with Podman on a VPS
I recently moved this website / blog from Jekyll to Ghost, just to try it out after hearing quite a lot of nice buzz about it lately. I had this small personal VPS at hand, so I decided to give it some space there, and use Podman (and its quadlets feature) to set it up. This leverages Systemd to run your docker images. Here is a quick walkthrough, should anyone be interested: Obviously, you need a VPS with SSH access. It must have its firewall open to the web on port 443. My VPS is running Ubuntu, so my install commands will reflect this. I also chose to use root mode to run the quadlets, but there are other options available.
Read more
-
An introduction to Barley, the fast model serializer

The story
The company I used to work for had an ageing API in v1 that was very poorly designed and slow in its implementation. It served 4 frontend platforms (a website, two mobile apps and an administration tool). Being in a startup environment, our team had to move fast, but that was at the expense of performance and maintainability. This was the situation when I arrived there. Returning JSON objects was very cumbersome. It used a custom method, available in each model that built a nested Hash, based on the attributes you gave it. That turned out to be a mess with poor performance and concerning security implications. It was difficult to maintain, with odd variable naming and behavior, so we set out to get rid of it somehow and moved to a kind of serializer DSL that was gradually introduced to replace the old mess. Later, we decided to tighten up our API with a new version to get rid of the legacy. A few requirements quickly emerged, among which:
- API V2 should be easy to maintain, with clear naming conventions and namespacing
- Since it is an internal API, it should be tightly coupled to the intended use and platform
- API V2 should use some sort of view DSL to generate the JSON payloads
- API V2 should be as predictable as possible in terms of typing and formatting.
- API V2 should be super fast by default. It should be the last thing we need to optimize.
-
Working For Your Manager’s Success

As software developers, we are constantly tasked with estimating the time it will take to complete tasks or deliver a feature. However, estimating the time and effort required for software development is notoriously difficult. The unpredictability of technical challenges, changing requirements, and unforeseen obstacles often means that our best efforts to estimate can still lead to frustration when things don’t go according to plan. The idea of writing this post came to my mind as I was reading Robert C. Martin’s book The Clean Coder, in which he explains that estimates are inherently imprecise. This is particularly true in the software industry, where problems are often complex and the hurdles we face are, by essence, unpredictable. While we may have a rough idea of how long a task will take, there is no way to foresee all the complications that might arise along the way. However, what true professionals do, as opposed to merely estimating, is committing to deadlines. According to Robert C. Martin, while we can estimate internally, we must also commit to a specific date or deadline. This level of responsibility requires maturity and accountability. It’s one thing to give an estimate, but it’s another to commit to a date, knowing the challenges that lie ahead. It is this commitment, rather than just an estimate, that we, as software developers, must learn to master.
Read more
-
From Chaos to Clarity: My Journey with ADHD, TickTick, and PARA

I have ADHD.
If you want to learn more about what it is, check out this video. The TL;DR is that my attention doesn’t work like most people’s. It’s either scattered in a thousand directions or laser-focused on one topic.
I’m the guy who goes to the store for milk and comes home without it—not because I’m stupid, tired, or forgetful. It’s not a one-off thing; I have an attention disorder.
The challenge
This disorder impacts several areas of my life in big ways. I struggle with switching contexts, planning ahead, and making decisions in certain situations.
Before I was diagnosed, I knew I lacked the organizational skills I saw in others. I couldn’t seem to finish things, at least not in the long term. I thought I was lazy and blamed my procrastination on that. But here’s the thing—I’m not lazy. I work incredibly hard. Sometimes I get so deeply absorbed in my work that I lose all track of time. I’ve gone hours, days, and even weeks working almost non-stop.
So, I started looking for solutions to compensate for my lack of organization. I explored so many techniques and apps that I became a bit of an expert in task management and time tracking. I needed the right tool.
Read more
-
Track and debug your ActiveRecord SQL queries with annotations

I recently discovered a handy feature introduced in Rails 6. This feature allows you to annotate your SQL queries with comments directly embedded in the query itself. I know, I’m a bit late to the party, but I suspect I’m not the only one, so here’s a quick rundown.
In our app, we have a deeply nested hash called
public_datathat’s often used to render a record’s JSON payload, along with its associations, in the controller.This
public_datahash is built from a mix of attributes and model methods. However, it also calls thepublic_datamethods of associated models, which might, in turn, call back to the original model’spublic_data. This circular complexity has been a challenge, and while we’ve started transitioning to the Barley serializer gem for better structure, we still rely on this method in parts of our codebase for backward compatibility.So when
@user.public_datais called in the controller, it often triggers a long chain of database queries. Tracking down where a specific relation is being called—whether inUser,Profile, orSubscription—can be daunting.While Rails logs are helpful, they require sifting through the output to correlate the log entry with the SQL query. This becomes even trickier when debugging in remote environments and searching through extensive logs in tools like New Relic or CloudWatch.
Enter
Read moreActiveRecord::Relation#annotate…
-
Ruby Best Practices - Method Arguments

To write readable and maintainable code, follow a few simple rules about argument ordering.
Read more
-
Love your error messages as thyself
Photo by Michael Dziedzic on UnsplashLearn to hate, then love error messages.
Stack Overflow overflow
I have lost so much time on Stack Overflow.
I mean Stack Overflow is great, and software development knowledge would not be so advanced and so widespread without its great influence. What I mean is that I have often found myself repeating the endless pattern of ‘Hey, I have an error… Wow, so many words… Let’s google this. Stack Overflow has it! Let’s see what they say’
I am not talking about the infamous Stack Overflow copy-paste syndrome, nor am I dismissing the great answers produced by the great developers out ther, but rather about the missing step in the example above: making sense of the error message myself before actually looking for a ready-made answer.
Read more
-
Writing code for your future self
Photo by Debby Hudson on UnsplashWe all write bad code. Let’s face it. Even if we do our best at writing the most efficient and well-designed code, we all happen to write this dirty method we don’t feel so proud of and dread having to debug next month, or next year.
I’m not going to talk about that code, because it’s so easy to spot and there is no need to write blog posts about it. What I’m interested in is code which looks fine when you have finished typing, but will bite you in the back someday. It ends up being hard to maintain, extend or even understand. After years of coding, I have come up with a set of warnings that alert me whenever I am heading for a dead end.
Read more
-
Lessons learned after migrating from Heroku to a kubernetes cluster
Photo by Markus Spiske on UnsplashPart of the mission I was given when I arrived at my now workplace was the complete migration of our rails hosting from a Heroku service to a kubernetes solution. This was my first experience migrating a production stack, and my first experience with kubernetes as well. And just in case you’d think the task wasn’t daunting enough, the previous sole developper decided to leave for another opportunity a few weeks after my arrival. This departure was soon forgotten with the company hiring another developper who had already transitioned an app to kubernetes. So I took a course on udemy, read the kubernetes documentation thouroughly, took notes, and played around with a toy cluster. Then I set out on the transition journey.
Six months later, the Heroku-Kubernetes transition is now over. I have gained a lot of experience. And I feel it’s time to share it.
Read more
-
An alternative to the ActiveRecord after_initialize callback

I was playing with dynamic nested forms with Stimulus today and I stumbled upon a void left by Rails’ ActiveRecord callbacks.
Read more
-
Chaining conditions in regular expressions

I recently had to make a semi-complex check on a string to validate it.
Basically, I have this model method which produces a serial number based on the ID of the object. Valid returned values for this method are
L00000002,L00000587orL00014522. In short, they should be constituted of a capitalLfollowed by 8 digits composed of theidof the object padded with zeros.So I had to find a way to simply created a matcher for this to use in my model spec. I could have built two expectations, one for the length, and one for the composition. But I just decided to believe that regular expressions are powerful enough to do both at the same time. So I headed to rubular and started fiddling and googling around.
Read more
-
A Leap Into the Unknown

As I mentioned in a previous post, I’ve started the journey of a career change. After two failed attempts, I’ve finally landed a job as a fullstack developer at a really great company in the Poitiers area. The leave request was sent out yesterday, all my colleagues are now aware, and I find myself facing a new challenge in the form of a fresh start. And honestly — it’s pretty unsettling right now.
Read more
-
Prevent Devise from sending confirmation emails

I am about to release a huge rails project I have been working on for quite a while. This project is meant to replace an old app that manages a database of customers with emails. The new rails project uses Devise for authentication.
Before we push the final update to the production server, we need to find a way to import the users without sending confirmation emails, but still keep them unconfirmed until they actually login to the new system and provide a password. New registrations should also still be confirmable.
Read more
-
Genesis of a Career Change

“It’s about time!”, my friends will probably say.
If I stayed a teacher in the French National Education system for so long, it’s because I never really listened to them.
Since the goal of this post isn’t to share my 19 years of fascinating wanderings, I’ll just say that I chose teaching more out of pragmatism than passion. That, in itself, was a mistake.
So the time has come to leave teaching and turn to full-time software development. For now, nothing is set. I’m still in my job, grading papers, running classes… My colleagues, my superiors, and my students know nothing about my decision. Their time will come.
I intend to come here regularly to reflect, to share my thoughts on this transformation—both to help me formalize my own evolution and to give a hand to others who may be in a similar situation.
Read more
-
First, I drink the coffee...
…Then, I do the things.
Here is a wallpaper I made. Feel free to download…
Read more
MoskitoHero