2024: New Year, New Start, New News

I love the end-of-the-year holidays in the U.S.: a chance to celebrate with loved ones and take a chance to look around me with a fresh perspective. It’s also when I use up my paid time off at work — time off doesn’t carry over from one calendar year to the next. Knowing how I roll, a large chunk of vacation time means Mensago code, and lots of it.

Closer to Connect MVP

The end goal right now is to get Mensago Connect to the point of being a Minimum Viable Product as they call it in startup culture: a basic, but functional and useful piece of software. Note-taking features are absolutely at that point.

Since November, Connect has gotten a lot of plumbing work. In fact, internal code was significantly reworked so that Connect makes it possible to work with data from old accounts that have since been disconnected from their associated servers and Connect can also be local-only, with no cloud connections whatsoever. This does prevent you from sending messages to people, but you will still be able to use it for note-taking, calendar tracking, address books, and to-do lists. Also new to Connect internals is device management code. While implementing the cloud sync features for Connect and Mensagod, I discovered that people should be able to recognize all devices connected to their account and be able to manage them as needed.

The Mensago protocol standards saw a few updates, as well. Keycards also have a new field which can contain a localized version of your user ID. This isn’t so big of a deal for languages which use the same alphabet as English, if you speak Arabic, Russian, or Greek, it’s now possible for people to see your user ID in your native language. There’s still quite a bit of work to do to finish the feature, but we’re getting there. New commands were added for device management and communicating your key information to new devices.

New Server, Too

Perhaps the biggest change in the last few months has been the recent rewrite of mensagod, the Mensago server software. The original draft was written in Go, a language from Google that is quite popular and commonly used for server-type software. The new one is written in Kotlin, the same as Mensago Connect. The rewrite is a non-trivial amount of work, but it’s necessary. Allow me to explain why.

Developers, for some reason, love rewrites. I won’t deny that this hasn’t been fun, but I’ve considered the possibility of a rewrite since last summer–this has not been a spur-of-the-moment decision. The main reasons are that it was my first Go project and the code quality shows, I have a much clearer idea of what needs written, and starting over in Kotlin both reduces development overhead and gives me a huge head start from the existing code in Connect that they would need to share. I have been increasingly dissatisfied with the language itself for my own reasons and some that I share with fasterthanlime, detailed in a blog post they wrote a few years ago. I won’t miss working with it.

In roughly three weeks, the new mensagod implementation is already capable of logins and keycard support is in the works. More importantly, the code is stable and I have the tests to prove it. Go’s poor error-handling patterns and general lack of software testing helps were really causing problems, but not any more. It’s a delay, but a worthwhile one. Until next time, my friends.