Hail, and well met, my friend. It’s been a long time. Too long. I’ve been so quiet here that some might have wondered if something happened or I gave up. Nope. I’ve had more than my fair share of Real Life taking over in combination with some, well, really boring coding going on–nothing exciting, that is, until very recently.
Earlier this year I didn’t know up from down. In the span of three months I dealt with:
- Both of my children graduating — college and high school, respectively
- Putting on 2 graduation parties
- Attending — and playing a minor part in — 2 family weddings
- Unexpectedly saying goodbye to one of my parents
- My wife actively seeking new employment to be closer to family
- One of my children seeking and finding employment and moving out
I feel like I’ve been through the wringer and only relatively recently started feeling better. Almost all of it has been a string of massive blessings that had an equally sizable energy toll. I’m also really glad to be on the other side of it all.
New Plumbing
Development focus has shifted specifically to moving Mensago Connect forward, but I’ve also been learning a ton along the way. First, some initial work was done for a first-time startup wizard that will prompt for logging in, setting up a local-only profile, or even signing up for a new account on a server. Not long after laying the groundwork, though, it became obvious that some other missing components were needed to finish. At roughly this time I stumbled into the amazing work of Dave Barrett’s blog PragmaticCoding, a treasure trove of good practices and information for JavaFX, the graphical toolkit used to build Mensago Connect. One of the many jewels of wisdom gleaned from the blog is MVCI, which stands for Model View Controller Interactor. MVCI is a programming architecture Barrett has developed from years of programming with JavaFX, and it changed my whole outlook on how to build Connect. It also meant I needed to make changes based on what I learned so that Connect would be much more easily maintained.
Learning from Dave Barrett’s extensive materials and other sources, Connect has had a lot of plumbing improvements. The profile management code is easier to maintain now. Apparently purely random Universally Unique Identifiers (UUIDs) are highly inefficient when used for lookups in databases, so Mensago now uses a different method for generating them — Universally Unique Lexicographically Sortable Identifiers (ULIDs), which are sortable and, thus, much more efficient. Database storage itself was changed from SQLite to H2, a Java-native database which can be used embedded or as a server. It’s truly a dessert topping and a floor wax. 😏 The existing GUI for notetaking was updated to use the MVCI architecture. The changes completely rearranged the original code, so it’s not as far along as it was feature-wise, but adding the missing ones will be easier than before.
New Features
Three significant — and interdependent — components are largely complete now: device checking, update processing, and contact requests. Device checking is an important security feature: when a device logs into a person’s account to check for updates, the server verifies its unique identity, and if the device is not recognized, the server sends a confirmation message to all of the other devices attached to the account. This is bog-standard multifactor authentication except that the message is sent over a secure channel instead of a text message or email and approving a new device also shares the account’s encryption keys with it. Device checking depends on the ability of a client to log into the server, check for updates to the account, download them, and then act upon them. This includes downloading new messages, such as device confirmation messages. Building upon this, code for the entire contact request process has been built.
Connect’s graphical interface is also starting to come together. It is essentially a collection of modes similar to Outlook: Messages, Contacts, Calendar, Notes, and Tasks. Notetaking is largely working except for device sync, a feature that will be implemented soon. It’s limited to just plain text for the moment for technical reasons, but proper formatting and other expected features are part of the development roadmap. Messaging is taking design cues from Gmail–a familiar solution with notorious privacy problems but decent interaction design–and has filtering support and message display.
Contacts is currently receiving development focus. Although probably the most boring mode of the five, messaging depends on it — it’s impossible to send someone any Mensago message except a contact request if you don’t have them in your address book. Viewing address book entries works right now, complete with profile photos. It’s very basic, but functional.
Not Just Connect
With all of the focus being on Connect, you might think that little else has been done, but you’d be wrong. The Mensago platform design documents have had updates–some formatting changes, adjustments to contact and message structure, a new status command, and tweaks to update record structure. It’s been said that no specification survives its first implementation, which is why Mensago’s design documents are in the draft stage and won’t reach final form until much closer to Connect’s first release. Support for SHA3-256 as a password hashing algorithm was added to KEZNaCl, the encryption library upon which everything else builds. While hashing algorithms dedicated to passwords usage, such as PBKDF2 and Argon2, are normally recommended, SHA2 and SHA3 can be secure used if configured correctly, and including SHA3 means that integration tests for Connect and mensagod are much, much faster than before. mensagod is almost feature complete, so it has mostly received bugfixes, but device handling code was also finished.
The Road Ahead: a Demo
As both a gamer and a developer, I’ve taken a passing interest in the world of indie game development–not enough to actually make a game, but enough to understand, appreciate, and respect what game developers and designers do. There’s a lot of useful wisdom that can be applied elsewhere. Indie developers looking to work with a publisher develop a demo of their game which establishes the developer’s credibility and demonstrates to said publisher the concept and gameplay so the publisher can determine if they’d like to help the developer finish the game in return for a cut. Business startups target a Minimum Viable Product. My intentions are little different: get something out there that people can play with and test.
I’ve long thought about what the next step beyond the demo should look like. It might be crowdfunding through Ko-Fi, Liberapay, and Patreon. It might be partnering with (or getting hired by) an established company that has a vested interest in seeing this project fly. I can only do this on lunch breaks, evenings, weekends, and days off for so long. If you have connections, I’d absolutely be interested in talking further, and I can be reached on Mastodon at @jonyoder or email at mensago@protonmail.com. Be well, my friends. Until next time.