Monthly update, April 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 Fløte and Bjeff, Ares’s two sons, who are still living with me.
Projects
NextApp
NextApp is an upcoming GTD/productivity application for desktop and mobile.
This was a hectic month.
A minor feature, Notifications, ended up consuming considerably more time than expected. The purpose of notifications in NextApp is primarily to alert users about server-side errors, outages, new versions, and other important messages. It’s not meant to be a full messaging system, so I wanted to keep resource usage to a minimum - especially on the server and in the database.
Because NextApp allows multiple devices to share the same data, tracking “read” status locally on each device would lead to inconsistencies. If some state (e.g., which action you’re working on) is shared, but other state (e.g., which notifications you’ve seen) is local, it would annoy me as a user. On the other hand, storing each read notification individually in the server database would be a resource hog.
I considered being “smart”: storing the oldest unread message ID plus any read IDs after that. But that would complicate the feature - and I have far more important things to get ready - and it would likely backfire spectacularly (being smart with code has its own ways of going wrong). Eventually, I settled on saving only the latest message acknowledged by the user. That way, if the user has five unread notifications and clicks the newest one, all notifications are marked read on all devices. Not ideal, but an acceptable compromise between UX and overall system performance.
Of course, both the Boost (1.87 → 1.88) and Qt (6.8.2 → 6.8.3) updates caused regressions that had to be investigated and fixed.
My favorite new feature in April is Dynamic Priorities. Until now, each action had a fixed priority used when sorting actions in a view, so the most important items appeared first. That’s fine, but one of my favorite books in the self-help/personal-productivity genre is The 7 Habits of Highly Effective People by Stephen R. Covey. One important habit there is to rate tasks by importance and urgency - also known as the Eisenhower method. I’ve wanted to add that to NextApp since I started implementing actions, but I also wanted to keep the classic high/low priority model. What I ended up with is a single score
value, calculated either from a fixed priority or from an importance-and-urgency pair. The algorithm also factors in due time (if set) and time estimate (if provided).
In the background, I experimented with building a Qt app with gRPC on Windows using statically built Qt on a GitHub runner. Most days I started one or two attempts; by the end of the month, the build still failed after 5+ hours. Going into May, it’s still a work in progress.
Personal
I spent more time than usual with my dogs this month. It is spring after all! I took frequent bicycle-rides into the national park behind our village with one dog, or 7-15 km walks with a pack. According to my smartwatch, I’m in excellent physical shape. That has many positive effects, including improved focus, energy, and endurance.