<?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>Coding on MoskitoHero</title><link>https://moskitohero.com/tags/coding/</link><description>Recent content in Coding on MoskitoHero</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 21 May 2026 08:23:11 +0200</lastBuildDate><atom:link href="https://moskitohero.com/tags/coding/index.xml" rel="self" type="application/rss+xml"/><item><title>Make Your Vcs Fly With Jujutsu</title><link>https://moskitohero.com/post/make-your-vcs-fly-with-jujutsu/</link><pubDate>Thu, 21 May 2026 08:23:11 +0200</pubDate><guid>https://moskitohero.com/post/make-your-vcs-fly-with-jujutsu/</guid><description>I am always attracted by new tools that promise to make my life easier. I recently started using Jujutsu, a version control system that makes your git workflow much more flexible.</description><content:encoded><![CDATA[<div class="paragraph">
<p>I like to try things out. I like new, shiny, alternative stuff that is not hype yet. I created my first Twitter account when you could see the world timeline of tweets refresh in real time on the home page. I also like new ideas that build upon great systems in order to improve them or take them a few steps further. That’s why I use <a href="https://zellij.dev">Zellij</a>, not Tmux. That’s why I use <a href="https://www.nushell.sh/">Nushell</a>, not bash, or zsh, as my main terminal shell. And that’s why I started using <a href="https://www.jj-vcs.dev">Jujutsu</a> to version control my code.</p>
</div>
<div class="paragraph">
<p>Jujutsu is a version control system UX that builds upon multiple VCS backends (Git, Mercurial, Breezy…​). Jujutsu (or JJ) provides a user-facing abstraction that makes your git workflow much more flexible.</p>
</div>
<div class="paragraph">
<p>For instance, there is no such things as branches. The closest equivalent is bookmarks. But bookmarks are more akin to mutable git tags. Git commits belong to a branch, and move when the branch gets merged into another. JJ puts this the other way round: bookmarks behave the way you’d expect a bookmark to behave: they can be moved around revsets (the jj equivalent of git commits). This alone opens a wide range of possibilities.</p>
</div>
<div class="paragraph">
<p>One of the key difference with Git is that you do not have a staging area. Instead, you tend to use revsets as throwaway commits to keep track of your work in progress. You can then squash them, or move them around, or abandon them. You can come back to an earlier revision and edit it! It’s as simple as calling <code>jj edit nf</code> (<code>nf</code> being the shortcode of the revision you wish to edit) and go modify your code. No commit needed. The revision is edited as is.</p>
</div>
<div class="paragraph">
<p>No stashes either. I have a list of bookmarks with a <code>stash</code> prefix that I use as stashes, but they are just revsets that I can move around and manipulate as I wish.</p>
</div>
<div class="paragraph">
<p>Other killer feature: conflicts are not blockers. You can have a conflict in your code, but you can still commit and move on, dealing with the conflict later on. Especially useful when you are working on a feature branch and want to keep up with the main branch. You can just merge the main branch into your feature branch, and deal with the conflicts later on, when you have more time to focus on them.</p>
</div>
<div class="paragraph">
<p>The icing on the cake is the undo/redo feature. Yes, you read that right. JJ provides an operation log (<code>jj op log</code>) that tracks all your operations, including commits, merges, rebases, splits, etc. Calling <code>jj undo</code> will undo the last operation.</p>
</div>
<div class="paragraph">
<p>JJ lives on top / besides of your git repo. All you have to do after you install JJ is cd into your repository and run <code>jj git init</code>. Voilà, you can now use JJ with your git backend.</p>
</div>
<div class="paragraph">
<p>It provides you with home-made, yet efficient diff and merge tool, but you can also use your own (Meld, Neovim, Ediff, you name it). It is designed to be very user-friendly from the command line — much more than git — but a few TUI clients and IDE integrations also exist. More on that in a later post.</p>
</div>
<div class="paragraph">
<p>I started using JJ a few weeks ago, and I never looked back. I really feels it makes my VCS workflow much less of a burden.</p>
</div>
<div class="paragraph">
<p>I will probably post more about the way I use it day-to-day, along with configuration tips and tools. Stay tuned!</p>
</div>
]]></content:encoded></item><item><title>Disconnected: One Day Working Without the Internet</title><link>https://moskitohero.com/post/2026-05-16-disconnected-one-day-working-without-the-internet/</link><pubDate>Sat, 16 May 2026 06:09:59 +0200</pubDate><guid>https://moskitohero.com/post/2026-05-16-disconnected-one-day-working-without-the-internet/</guid><description>What does it feel like to work without the internet in 2026? Circumstances got me unplugged myself for a day, leaving me with a flaky 5G connection to rely on.</description><content:encoded><![CDATA[<div class="paragraph">
<p>When I got up this morning, I quickly realized that my landline was out of service. Called my ISP, and apparently , it is due to thunderstorms in my area last night.</p>
</div>
<div class="paragraph">
<p>Pretty bad news. As a full-remote engineer, this means I will have to rely on the flaky 5G network I get round my house to work and communicate with co-workers.</p>
</div>
<div class="paragraph">
<p>I realize that I will have to write code in a completely gated environment, which, two days after writing <a href="https://moskitohero.com/post/2026-05-12-opening-the-mind-of-a-thinking-agent/">a post about unplugging AI and reclaiming my thinking</a>, means that I will have to code without the help of AI. This is a good test, a kind of reality check. What does it feel to code like it’s 2010 again?</p>
</div>
<div class="paragraph">
<p>And what a good idea for a blog post! I am going to write down my thoughts here along the way.</p>
</div>
<div class="sect2">
<h3 id="827-am"><a class="anchor" href="#827-am"></a>8:27 am</h3>
<div class="paragraph">
<p>Re-opening my IDE where I left it yesterday only to realize that the feature I was working on is a front-end task in TypeScript / React 🤡. I am Ruby backend developer, but I get to do these kind of features for the admin from time to time, and I don’t mind. I can code in TypeScript, but this is going to be a little more challenging than I thought — there will be no agent at hand to guide me along the way.</p>
</div>
<div class="paragraph">
<p>Let’s take a deep breath and dive in.</p>
</div>
</div>
<div class="sect2">
<h3 id="908-am"><a class="anchor" href="#908-am"></a>9:08 am</h3>
<div class="paragraph">
<p>It’s quiet in here. Let’s put some music on…​</p>
</div>
<div class="paragraph">
<p>😬</p>
</div>
<div class="paragraph">
<p>Oh well, all I have is an Apple Music subscription! Where is my music collection? I guess that’s something I must address sooner or later. This is not work-related, but it is telling of our dependency to the internet.</p>
</div>
</div>
<div class="sect2">
<h3 id="942-am"><a class="anchor" href="#942-am"></a>9:42 am</h3>
<div class="paragraph">
<p>Time for a break. I am feeling quite productive so far. I do lose a little time, though, due to the absence of code completion &#34;on steroids&#34;. I have to type most of my code the old-school way, tabbing through variable completions. It’s fine.</p>
</div>
<div class="paragraph">
<p>My co-workers should now be up and working. I tell them about my network issues and re-activate notifications on my phone Slack app.</p>
</div>
</div>
<div class="sect2">
<h3 id="1107am"><a class="anchor" href="#1107am"></a>11:07am</h3>
<div class="paragraph">
<p>I need to check the JIRA ticket I am working on to get some exact wording for a string. I don’t have the JIRA app installed on my phone, so I share my phone’s connection to the computer.</p>
</div>
<div class="paragraph">
<p>This is sluggish. Like 1995/33k-modem-sluggish. And JIRA is not the lightest UI around.</p>
</div>
<div class="paragraph">
<p>While the UI loads, I remember that I have the JIRA extension set up in Raycast. This will mean simple, faster API calls. It works and responds almost instantly. I can read the specs and get on with my work.</p>
</div>
<div class="paragraph">
<p>But it leaves me thinking: how on earth did we end up with such bloated web apps? There is such a contrast between the delay I experienced fetching data through the API (a few kilobytes in a few milliseconds) and the lagging UI that loads up megabytes of javascript just to have it displayed on a page. There is something broken here. We all know it. But actually experiencing it sheds a different light.</p>
</div>
<div class="paragraph">
<p>The irony of it all is that I am currently working on a React project used to render the admin backend at my company. The typical example of what React should not be used for — and yes, trust me, it si terribly slow to navigate.</p>
</div>
</div>
<div class="sect2">
<h3 id="1144-am"><a class="anchor" href="#1144-am"></a>11:44 am</h3>
<div class="paragraph">
<p>I had to do the daily meeting with my squad in the garden.</p>
</div>
<div class="paragraph">
<p>Currently looking for how to do string interpolation in TypeScript…​ Good old Stack Overflow comes to the rescue on my phone. I heard they are going through hard times with the rise of vibe coding. I hope we don’t get to the point where they have to shut down. They are the Wikipedia of software engineering. They should be part of the commons and kept as a public utility service. What will happen when you really have to pay for AI (I mean the <em>real</em>  price, not the huge discount we get these days)?</p>
</div>
<div class="paragraph">
<p>Still no internet. One neighbor just told me that it is going to last a few days. My ISP proposes to lend me a 4G home router in the mean time.</p>
</div>
</div>
<div class="sect2">
<h3 id="205-pm"><a class="anchor" href="#205-pm"></a>2:05 pm</h3>
<div class="paragraph">
<p>I need to restart both front and backend servers, and this hurts. Front-end keeps repeating <code>There appears to be trouble with your network connection. Retrying…​</code> . Backend is stuck…​</p>
</div>
<div class="paragraph">
<p>I decide to share my lousy 5G connection. After a few minutes, my phone picks up a signal, and servers boot. At last!</p>
</div>
<div class="paragraph">
<p>Coding locally should be possible without the need for an internet connection. If you server calls external APIs as it boots, it should be fixed — what happens if they are down? Will file a ticket for this.</p>
</div>
</div>
<div class="sect2">
<h3 id="223-pm"><a class="anchor" href="#223-pm"></a>2:23 pm</h3>
<div class="paragraph">
<p>I have a question on the way TypeScript handles <code>undefined</code> and booleans, and whether I can do some kind of type casting — I know I can, I just can’t remember how.</p>
</div>
<div class="paragraph">
<p>My first reaction is to fire up a search engine on Vivaldi. Ah yes, no internet. I get up, walk to the garden and find the answer to this. Not the shortest feedback loop. It would have been much worse if I had to go look up an obscure error message and figure out what it means.</p>
</div>
</div>
<div class="sect2">
<h3 id="248-pm"><a class="anchor" href="#248-pm"></a>2:48 pm</h3>
<div class="paragraph">
<p>I am quite satisfied with my work now. Let’s review it.</p>
</div>
<div class="paragraph">
<p>This is usually when Claude walks in. I guess I will have to review it closely myself before I create the PR. This is hard, actually. I am not fluent in TypeScript, so I don’t have much to say about the stuff I have written. I just remove some unneeded code. Fingers crossed!</p>
</div>
</div>
<div class="sect2">
<h3 id="306-pm"><a class="anchor" href="#306-pm"></a>3:06 pm</h3>
<div class="paragraph">
<p>Time to push. It’s connection-sharing time again. This is a little tricky, and I am moving my phone round the house, desperately trying to find a proper signal. Once I get something, I fetch latest main, but by the time I rebase, the signal is gone, so I have to find a better spot.</p>
</div>
<div class="paragraph">
<p>After a few minutes, the signal stabilizes and I can do some online stuff: push, create the PR, notify the reviewers…​ Let’s hope Github doesn’t decide it’s time to have an outage…​</p>
</div>
</div>
<div class="sect2">
<h3 id="427pm"><a class="anchor" href="#427pm"></a>4:27pm</h3>
<div class="paragraph">
<p>Yay! It’s the weekend!</p>
</div>
<div class="paragraph">
<p>Overall, this was an interesting experience. It was satisfying to find out that I can still code by myself, like a grown-up developer. It was also quieter, with less interruptions to deal with, since Slack notifications arrived when my phone caught a signal, so it was more a question of me reaching to my phone than the other way round.</p>
</div>
<div class="paragraph">
<p>I think I am going to reproduce this regularly. Switch off the wi-fi and work with no strings attached. But I need to regain control of my music library first!</p>
</div>
<div class="paragraph">
<p>And guess what? As I am writing these words, I just noticed that the internet is back on…​ True story.</p>
</div>
</div>
]]></content:encoded></item><item><title>Opening the Mind of a Thinking Agent</title><link>https://moskitohero.com/post/2026-05-12-opening-the-mind-of-a-thinking-agent/</link><pubDate>Tue, 12 May 2026 22:10:00 +0000</pubDate><guid>https://moskitohero.com/post/2026-05-12-opening-the-mind-of-a-thinking-agent/</guid><description>Reflecting on my experience of using AI agents for coding, I start wondering what is really hiding behind the concept of a &amp;#34;thinking agent&amp;#34;. Time to take a look inside its brain…​</description><content:encoded><![CDATA[<div class="paragraph">
<p>My brain is a dumpster tonight.</p>
</div>
<div class="paragraph">
<p>I kind of felt lazy all day, so I decided to rely on agents to leverage most of the work I had to do. The result is that I now feel totally depressed and tired. Everything was wrong with that day’s work.</p>
</div>
<div class="paragraph">
<p>It was tempting, at first. I thought I would have AI do the boring bits, type less on my keyboard and become an orchestrator. I thought it would give me more control over my priorities and help me dash through the day like a warrior, like a knight proudly riding his horse.</p>
</div>
<div class="paragraph">
<p>Now it’s 6 p.m. It feels like the horse has been trampling on my back all afternoon and is now chewing on my hair.</p>
</div>
<div class="paragraph">
<p>What did I get from today’s coding session? I remember giving instructions to the agent. I remember waiting for it to reply. I remember being unsatisfied with what it proposed as a solution. I remember guiding him step by step through the process. I remember looking at the screen in disbelief as it took five minutes to move a piece of code from one file to another.</p>
</div>
<div class="paragraph">
<p>I could have done it in seconds. Still, I was kind of relieved not to do the boring chores.</p>
</div>
<div class="paragraph">
<p>Looking back, I feel that what really happened is that I switched off my brain and surrendered it to the Machine. Now I feel ashamed.</p>
</div>
<div class="paragraph">
<p>All that time the machine was thinking. I wasn’t.</p>
</div>
<div class="sect2">
<h3 id="thinking"><a class="anchor" href="#thinking"></a><em>Thinking…​</em></h3>
<div class="paragraph">
<p>That word intrigued me. So I clicked on it. A toggle opened. And man, was that ugly…​</p>
</div>
<div class="paragraph">
<p>What AI companies advertise as thinking is actually a computer program mumbling for ages, balancing ideas and their opposites, trying to figure out what exactly I meant, taking U-turns, battling against itself on details so insignificant it would drive anyone with a sane mind totally nuts. This is not thinking. This is vomiting words by the gallon. This is a brute-force parody of a french political debate.</p>
</div>
<div class="paragraph">
<p>My experience of thinking is not filling up pages and pages of words based on the likelihood of their occuring in a single sequence, and then taking these pages of writing to write yet another round of pages of nonsense until I decide I am confident enough to tell you I have finished thinking.</p>
</div>
<div class="paragraph">
<p>My experience of thinking actually implies growing up as a person and as a professional, backed by an intimate network of neurons I have patiently connected throughout the years by the means of experience, reading, learning, meeting, confronting ideas.</p>
</div>
<div class="paragraph">
<p>My experience of thinking is tied to the dose of dopamine I get when, Eureka! I finally found the solution. I didn’t get my fix today. I gave it up to Claude, who took five long minutes of water-heating, climate-warming and deforesting to spit out an unconvincing solution while I looked bluntly at my screen like a Half-Life zombie crying out for brain.</p>
</div>
<div class="literalblock">
<div class="content">
<pre>🧟‍♂️🧟‍♂️🧟‍♂️ Braaaaaiiiin... 🧠🧠🧠</pre>
</div>
</div>
<div class="paragraph">
<p>Luckily enough, I got woken up by a message telling me I had reached my daily quota. That’s when I realized the pain and frustration I had been inflicting myself.</p>
</div>
<div class="paragraph">
<p>Thinking is a pleasure. I will not let a machine with no feelings take it away from me.</p>
</div>
</div>
<div class="sect2">
<h3 id="lets-wrap-it-up"><a class="anchor" href="#lets-wrap-it-up"></a>Let’s wrap it up.</h3>
<div class="paragraph">
<p>I am not anti-AI. That would be stupid. Like being anti-electricity, or anti-dishwasher, or anti-railway. I just want to keep my agent saddled-up tight underneath me like a faithful horse I can control. I want to <strong>use</strong> AI, and never let it be the other way round.</p>
</div>
<div class="paragraph">
<p>I feel it is time to review my AI deontology. This is the plan:</p>
</div>
<hr/>
<div class="ulist">
<ul>
<li>
<p>Remove uneeded CLI agents I have installed just &#34;to try it out&#34;.</p>
</li>
<li>
<p>Remove IDE plugins, extensions, apart from code completion stuff. That is often useful.</p>
</li>
<li>
<p>In Zed, check &#34;disable AI&#34;</p>
</li>
<li>
<p>Keep Claude Code (company subscription) installed — Claude  desktop was already uninstalled a long time ago — and stick to these rules:</p>
<div class="ulist">
<ul>
<li>
<p>Only reviews and ideation</p>
</li>
<li>
<p>No thinking models</p>
</li>
<li>
<p>No write access to anything whatsoever. Yes, even elisp.</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<hr/>
<div class="paragraph">
<p>And for the rest, I will stick to good old Organic Intelligence.</p>
</div>
</div>
]]></content:encoded></item></channel></rss>