Published:

Jarle Aase

Monthly update, August 2025

bookmark 3 min read

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 Google Play with NextApp, after a little makeover in GIMP.

Projects

NextApp

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

I finally got the app approved in Google Play. The Android version is not as good as the desktop version yet, but it will get there—at least for the features that are possible to support on small screens.

I added support for logging to disk. I noticed that some apps on my phone, like Nextcloud, have files in ~/Android/media/<package>/, and I figured out how to use that from my Qt app. Now I can log to a “public” location—that is, a location that file managers can reach—which is nice. I also added an option to use this directory for exports, for the same reason. By default, though, exports will use the app’s private directory for better privacy.

Besides that, I did some polishing and incremental improvements.

logfault

logfault is a simple-to-use, header-only C++ library for application logging on all major platforms.

Logfault got some care in August, as I wrote a longer blog post titled Logging in C++: Lessons from Three Decades, from the Console to the Cloud. Curious about the relative performance of logfault versus more popular and well-known logging libraries, I wrote a simple performance test against Boost.Log and spdlog. While I was at it, I spent a few evenings implementing a faster buffer for std::ostream to see what impact that would have on performance. It improved it a bit compared to using std::ostringstream, but the CPU hog in std::ostream is probably in the design of the native C++ streams and all the bits that have to be checked all the time.

I also added a driver for systemd, which may be useful for some Linux daemons. Currently logfault supports:

  1. StreamHandler Logs messages to any C++ output stream (std::ostream), such as std::cout or a file stream.

  2. StreamBufferHandler (C++20+) Writes log messages directly to a stream buffer (low-level efficiency, useful with file descriptors).

  3. FileIOHandler (requires LOGFAULT_ENABLE_POSIX_WRITE) Logs directly to a POSIX file descriptor using write(). Very efficient for Unix-like systems.

  4. JsonHandler Outputs structured logs in JSON format. Useful for machine parsing and log aggregation tools.

  5. ProxyHandler Allows plugging in a custom callback function to handle log messages however you like.

  6. SystemdHandler Sends logs to the systemd journal (Linux).

  7. SyslogHandler Sends logs to the system syslog service (Unix/Linux).

  8. AndroidHandler Logs messages to the Android system log (logcat).

  9. QtHandler Routes log messages through Qt’s logging system (qDebug(), etc.).

  10. OsLogHandler Logs messages to Apple’s newer os_log logger (macOS/iOS).

  11. CocoaHandler Sends logs to Apple’s legacy NSLog (macOS/iOS).

  12. WindowsEventLogHandler Logs to the Windows Event Log.

The motivation to make the library was that I needed a logger that would work on desktop and mobile without any changes to the log statements in the code.

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 added support to create landing pages with stbl, not just pure blog sites. To make the blog part more visible, I added a macro to allow me to list the last n blog posts from any content section on any page. Since I prefer static websites with no or minimal need for JavaScript, this was the best way to do it.

Another feature in stbl is embedding videos directly in pages. It will scale the original video to various sizes and use the optimal version for the user’s device. I implemented this so that I don’t have to rely on YouTube or other external sites that may track users or decide to show ads. In August I improved the UX so that videos in portrait mode don’t take up too much screen space.

cpp-push

cpp-push is a C++ library to send push notifications.

Added support for Apple push.

New Android app

I also started work on a new Android app this month. This is a commercial app in the wellness space written in Kotlin. It’s been some years since I wrote anything in Kotlin, so there’s lots of catching up and reading.