Spring update, 2026

Published

By Jarle Aase

These monthly may be a bit technical. They’re written primarily for my future self—to remember how I spent the time and to motivate me to do at least something remotely interesting. They’re also for friends and colleagues (past and future), to give an idea of what I’m working on, and of course for potential clients of my C++ freelance business and fellow software developers.

Projects

lgx

lgx is a high-performance log explorer for developers and DevOps engineers, designed to handle large files with fast indexing, smart filtering, and clear visual insight.

lgx is awesome. When I work on my projects now, I start lgx and it opens one pane for each of the logs for the applications I'm working on. For each log file, I can open as many filtered views as I want.

For example, when I work on NextApp, I have the server log in one pane. I typically create two filtered views: one that shows all errors and warnings in the log, and one that I use to look for messages from whatever component I'm working on at the moment. The main view simply follows the server log and shows all log messages as they appear.

What it doesn't handle well yet is very large files. I have solved most of the problems related to that, but I haven't merged that branch yet. There is still some testing to do, some optimizations to make, and I need to rewrite some of the log handlers so they can interpret files correctly while using fewer resources.

That said, it's already 100% what I need for the work I'm doing right now.

NextApp

NextApp is a GTD/productivity application for desktop and mobile.

I have spent most of my available time the last 2 months on NextApp. It's getting pretty good.

I guess I should make it's webpage better as well :/

Nsblast

Nsblast is a massively scalable authoritative DNS server.

NSBlast has been running in production for a long time now. I have two very small Linux VMs running, one in Europe and one in the US. They serve some of my own domains and are also a test of how the server actually works over time.

One of the primary features of NSBlast, compared to other DNS servers, is that it uses gRPC to replicate data from the primary server to the followers. This means that things like creating a TXT record for Let's Encrypt happen immediately. It's also using a very fast database, RocksDB, for its zones.

In the age of AI, I took NSBlast for a ride with Codex and asked it to find potential vulnerabilities and problems. It did identify a few things that we fixed.

The most important thing I did this time was to add a DynIP feature. I also created a DynIP client for Linux. The DynIP feature issues an API key to the DynIP client that is restricted to a specific FQDN. This makes it safe to use in unsafe locations. The worst thing that can happen is that the IP address for that location becomes incorrect, which is usually not a disaster for something behind a dynamic IP.

The disaster with a DNS server is if somebody gets an API key that gives them the right to change all of the addresses or add new records.

I also fixed some other bugs and got the user interface, which uses React, working. It is still not ready, but it has the most essential functionality, including a pane for DynIP and a pane with the latest log messages from the server.

stbl

stbl is an acronym for “Static Blog.” It’s a command-line application for Linux that I made in 2017. It generates an adaptable website from Markdown files with a special header. This website is generated by it.

Stbl has been doing its job for a long time, generating my websites. But it was getting slower and slower as the number of pages grew. I also had a lot of features I wanted to implement.

When Codex offered lots of extra tokens this spring, I decided to spend some of those free tokens on a complete rewrite of Stbl in Rust. Originally, it was written in C++, which worked, but it was not ideal because there are a lot of useful libraries available in Rust that are not that easy to use from C++.

Now I have much faster page generation. Not because Rust is faster than C++, but because I implemented a number of optimizations during the rewrite. The layout also got a complete shake-up, so it looks nicer.

Stbl has all the features it had before, but it also supports things like video more efficiently. It now generates alternative sizes for photos inside articles, not just for the banner image. That is especially nice on mobile phones, where visitors may now download much smaller images than before.

One important new feature is that CSS colors have been moved from being hard-coded in the CSS files to being variables controlled by Stbl. That makes it possible to define or generate a color scheme when a site is created, or later, simply by using Stbl commands.

I implemented almost everything that was on my wish list. What's left is to implement more general templates so the generator can be used easily for a new site with a totally different layout from the one I use today.

QVocalWriter

QVocalWriter is a cross-platform, local application for working with spoken and written language. It started as a speech-to-text tool and has grown into a modular toolset with independent features for transcription, translation, and assistant-based chat.

I have updated the Llama and Whisper libraries a few times and added some new LLM models.

The problem with running small LLM models is that their behavior is pretty unpredictable. For example, a Chinese model that usually works very well and runs quickly on my graphics card sometimes decides to answer in Chinese or completely misunderstand the context.

I don't have the latest graphics card to run large models, so if I want to run something bigger than the really small models, I have to disable the GPU and run them on CPUs instead. My workstation has a Threadripper with 64 vCPUs, so it can handle medium-sized models, but they are slow.

I hope that later this year I will have the money to buy a proper GPU or some other AI accelerator. It would be very nice to run models large enough for a coding agent locally.

I'm not really comfortable using AI in the cloud. QVocalWriter allows me to do things like translations, transcription, and other AI-assisted tasks without touching the cloud, so I have complete privacy.

There are still some bugs, especially in how it handles longer conversations using the Llama.cpp library. But the issue is time. There are so many things I want to do. Every time I use QVocalWriter, I think about how I need to fix this or that. Then, as soon as I'm done, I'm working on something else that feels more important, and I end up spending my time there instead.

It would be nice if somebody else started contributing to this project as well. It is really useful to have a lightweight, fast application that uses very few resources by itself to run local models. That means that when I use the application, the model gets access to whatever CPU power, memory, and other resources I have available in the machine.

Stripe

One thing I have spent significant time on this spring is implementing the payment backend that I can use with NextApp. I also plan to use it with other applications. For now it uses Stripe as the payment processor. It's written in a way that will allow me to add other payment providers later, and I plan to add a European provider for EU customers. I'm not that comfortable relying solely on big American corporation for money transactions. Big American corporations usually don't have the same view on privacy that we have in Europe.

It was a lot more complicated than I expected. When you look at headlines like "Add Stripe in one day" to your app, it sounds easy, but there are a lot of edge cases that need to be covered. Everything has to be thoroughly tested and thought through before you can put it into production.

That said, I now have a backend that is ready for production and that I can use with NextApp. I'll probably dive into the details in a separate post when I find the time. The work itself is interesting, but it also takes a lot of energy, at least for me, to see it through to completion. The problems and challenges are interesting, but running the whole marathon is exhausting.

I also had problems getting Stripe to verify my company account because they wanted documents that I simply did not have. Stripe is an American company, and sometimes it feels like they expect us to still use checkbooks and pay our utility bills with cash at the utility company. I haven't had a paper utility bill for many years, and the bank I use in Bulgaria will not issue bank statements for private accounts. I can get bank statements for my company accounts, but not for my personal accounts. Stripe wanted to see bank statements for my private account or mortgage documents, neither of which I have.

As a result, the verification process dragged on for three months. Eventually, I changed my internet provider and paid the first bill in cash at a payment office instead of from a bank account. I sent that receipt to Stripe, and they accepted it.

What makes this particularly strange is that they were trying to verify my home address. I sent them official documents showing my home address. My address is on my ID card, and I even got an official document from my bank stating my home address, complete with a stamp and signature. That was not good enough. But a receipt for an internet connection was.

This is honestly a bit scary. I'm nervous about using Stripe now because if they are this difficult to deal with before we even get started, how can I trust them to process the income that my company depends on in the future?

Hard times

After the January update I kind of stopped writing my monthly updates. One of the reasons for that is that I have been profoundly frustrated this spring. Sometimes that frustration has felt like depression. Sometimes it has felt like not wanting to work on programming or, frankly, not wanting to work at all because of the shape of the world right now.

After spending a lot of time reflecting on what is actually going on and why I feel so frustrated, I realized that the core problem is simple: I don't like the way the world is at the moment. I don't want the world to be the way it is. And that makes me very, very frustrated.

You have leaders in the Western world who are supporting or enabling wars and atrocities. I'm not talking about just one conflict. There are multiple humanitarian disasters and conflicts happening around the world right now. Large corporations are profiting from many of them, often the usual suspects, while governments act as if everything is normal. As if the intentional deaths of civilians, children, women, and men are perfectly OK.

Then there is AI, which is creating a lot of uncertainty. There are the data centers consuming enormous amounts of resources and causing inflation. That is already creating tensions in some places, especially in the United States, but elsewhere as well.

On top of that, I can't tell what the future will look like. Some people predict a technological utopia. Others predict mass unemployment. Some warn about existential risks, and bring up the Terminator scenario. Some think AI will simply become another tool. All I know for sure is that the world will change profoundly, and that our dear leaders doesn't care what we want. Will AI replace most forms of work? What happens if it does? What happens to purpose, to communities, to societies? What happens to people if the role work has played for centuries suddenly changes or disappears?

At the same time, there is a growing push toward digital IDs, central bank digital currencies, and other systems that, in my view, represent a major attack on privacy. We already know what highly monitored societies can look like. We know what happens when governments and corporations gain the ability to track, analyze, and influence every aspect of people's lives. Most people recognize that unlimited surveillance is not a good thing.

Yet there are politicians, lobbyists, thinktanks, technocrats, and corporate interests that seem eager to move in exactly that direction. A future where AI is used to monitor individuals, build detailed behavioral profiles, and influence what people can do, buy, say, watch, or what part of the society they can participate in. Whether or not that future fully arrives, the fact that these ideas are openly discussed is deeply disturbing to me.

If some of the things that are being proposed today had been suggested in the 1970s or 1980s, there would have been enormous public resistance. Today many of these ideas are treated as normal, inevitable, or even desirable.

That makes me profoundly frustrated because this is not the world I want to live in.

I believe in freedom. I believe in privacy. I believe in human rights. I believe people should be free to live their lives however they choose as long as they respect the rights of others and do not harm them.

We increasingly seem to live in societies where just expressing certain opinions can carry significant consequences, while actions that cause immense suffering are often excused, ignored, or rationalized by the government.

It feels upside down.

And if you criticize some of these developments, you can sometimes find yourself facing consequences that would have seemed unimaginable a few decades ago. That reality alone should concern people, regardless of their political views.

Sometimes I feel that we are living through one of the most significant periods of social and technological change since the Industrial Revolution. Yet we rarely talk about it honestly. Instead, we go on with our daily lives and pretend that everything is fine, that everything is normal.

From where I stand, it is neither fine nor normal.

Freelancing

If you know someone who’s looking for an experienced and quite passionate C++ freelancer, please get in touch.