Monthly update, June 2025
These monthly updates may be a bit technical. They’re written for my future self (to remember how I spent the month, and to motivate me to do at least something remotely interesting), for friends and colleagues (past and future) to give them an idea of what I’m working on, and, of course, for potential clients of my C++ freelance business and fellow software developers.
The picture shows (from left) Nusse, Glad, Fløte, Kleo, and Bjeff on our weekly walk together out in nature.
The last seven weeks, before the beta release of NextApp at the end of May, I worked a lot. If you look at my GitHub contributions map, there were commits almost every day. After the beta, I was prepared to handle emergencies, and when none emerged, I allowed myself to relax and enjoy life. Not that I don't enjoy coding. I really do. But it was nice to spend some evenings on the terrace with the dogs, having a few beers, reading a good book (with my own eyes, using my own imagination - not just listening to someone else reading for me), and really just enjoying warm summer evenings. Listening to the sounds of nature and music from places far away. I live in a rural village. There are normally no sirens or any of the noise and air pollution that you get in a city.
Projects
NextApp
NextApp is a GTD/productivity application for desktop and mobile.
I want to get NextApp into Google Play. Not because I like Google (I don't), but because it's convenient for a large number of its potential users. Convenience is important. Getting something on Google Play is a lot more work now than it used to be. In some ways, it's for the better. You have to fill out lots of forms explaining in detail how you exploit your users. Google reminds me a little of the EU now. They seem opposed to anyone else doing the exploitative stuff.
One of the things they asked about was whether the user can download the data they've shared with your app. Data export and import have always been a natural part of NextApp, especially since users must be able to run their own servers. However, it was not implemented for the first beta, and it was not planned until the normal release. I changed the priority and added that feature in June. To make Google happy, I even added an option to save the data as JSON. That way, developers can easily reuse the data for their own apps, and if NextApp gains popularity, competing apps can easily add an import feature. If the data is saved for NextApp import, I use a more efficient format; basically a stream of protobuf messages, prefixed by a 32-bit integer with the message length. So it's easy to serialize and easy to import. JSON is convenient, but the repeated field names in each object are not exactly efficient. While I was at it, I added data import as well. So now users can move all their data between backends. The client app has both the export and import functionality.
Another question was whether users could delete their data. This is, of course, also a requirement under GDPR. So I added a delete account option as well. I put this in my action list as a five-hour task. It ended up taking several days. Now it works correctly. If you have several devices connected to the backend and delete your account, all of them will be logged off and show the sign-on wizard. On the backend, the user account and all the users data is deleted from the database immediately.
There is also a "Factory Reset" option where you can disassociate a device from your account, for example, if you want to use it with another account or backend. This leaves your data intact on the backend and other devices.
Mysqlpool
Mysqlpool is a lightweight async connection pool library, built on top of Boost.MySQL.
I added batch inserts. It made sense now that NextApp supports data imports. I wanted Mysqlpool to handle errors during batch imports, so there are two ways to do it: You can either add a container with the data (usually just views to the data) for smaller imports, or use a generator that returns a tuple with the arguments for each row. I'm not 100% happy with this solution, but it works, and it's much faster than individual inserts.
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.
I recently made some changes to also support more general websites, optionally with a blog, in order to generate next-app.org. That’s not a pure blogging site, but a landing page with some documentation pages. And a blog.
In June, I added better support for videos. Now it scales and aggressively compresses videos to several resolutions and uses CSS to let the browser select the best one. It can also use the Plyr JavaScript video player if JavaScript is enabled. If not, it falls back to the HTML <video>
tag and CSS.
Personal
I’ve always felt that my productivity could be a lot better than it is. That has motivated me to write applications like Whid (What Have I Done) and VikingGTD, along with a lifelong search for life hacks and productivity hacks to improve my own performance. I’ve read a number of self-help and self-improvement books. Some of them gave me insights and ideas. Most were a waste of time.
With NextApp, things have gotten a lot better for me. But there’s still the daily struggle to do all the things I know will improve my performance over time - like exercise and meditation - versus the desire to just lock myself in with the computer and spend the next 18 hours in flow, coding.
One thing I’ve done over the last year to motivate myself to stick with my daily routines and goals (12 minutes of morning exercise, two types of meditation, journaling, having a productive day) is to write them down on a sheet of paper, with one line of checkboxes representing each day. For some reason I can’t explain, paper still works better for me when I need to sketch out ideas, brainstorm something, or track something important.
For a long time, I kept that piece of paper on my desk and updated it occasionally, hoping for divine inspiration or some friendly fairies to make it work. In the last week of June, I decided to just make it work, every day, without exception. And it did. Magically. It took real effort, and it hurt my actual output, but after 8 days I started feeling calmer. It’s not that I haven’t done these things in the past. It’s just that I had no habit of doing them every day, even on days I felt like doing something entirely different.