August 16th, 2017

Sweet Jesus!

Simple Journal - A local FOSS journaling application

It's nice to have a place to write down your thoughts, even if you never think you'll ever go back and read them.  I've been using LiveJournal since 2005 to do that (on and off, anyway).  Most of my entries are private, the kind of stuff I'd like to only be seen by my eyes, so it's always made me a little uncomfortable that these private thoughts live on some server somewhere, probably unencrypted and readable by some administrator or something.  On top of that, LiveJournal was recently bought by a Russian company so US data protection laws aren't even in place anymore.

Given the general decline of LJ and the privacy concerns I had, I decided it was time to move on.  I began my search for a replacement platform to store my entries with a specific set of requirements in mind:

  1. Offline storage - While I plan to keep around my LJ for my public-facing entries, I have no desire to continue to keep my private entries in any online service or any place where safekeeping of my data is on anyone but me.  So the #1 requirement is something that can keep my my entries local.

  2. Encryption - This seems obvious as well.  Even though I'm keeping my data local, it needs to be encrypted-at-rest.

  3. Open, standard formatting - Software comes and goes.  A piece of software that seems like a great idea now might be impossible to run or use in a decade.  I don't want to have to go through a migration exercise every couple of years.  Ideally, I'd like to be able to access my data without any client at all -- why not just a standard text editor?

  4. Simplicity - I don't need a big heavy client with a million features.  I just need something that lets me write stuff, and maybe do some basic formatting, bullet lists, etc.  Ideally I'd like something that doesn't require an installer.  Oh, and of course, it has to run on Windows.  I don't care about other platforms.

I found a lot of candidates.  One open source solution looked promising, but used a proprietary format (broke #3) and required QT (broke #4).  I considered installing Wordpress in a VM, but this definitely broke bullets 3 and 4, and potentially bullet 2 as well.  I considered OneNote as a viable solution, but it definitely breaks #3 and possibly #2.  Probably the closest I got was Microsoft Word, but a giant password-protected document didn't seem ideal and still broke bullet 3.

The more I thought about it, the more I realized that this shouldn't be hard to implement myself.  Why not just store all my entries in an encrypted zip file?  This is an "open" standard that can be read and written by plenty of software and even the OS itself.  If I did this, I'd be free to choose the file format.  And, I reasoned, why not just throw together a quick WPF app to make it all easy?

So I did.  It took a couple of hours to get a working prototype and a couple more hours to pretty it up and add a few more features, but Simple Journal came together quickly and easily.  The file format is exceedingly simple - a bunch of Rich Text Files inside an encrypted zip using an almost-ISO standard date format for file naming.  You don't need the Simple Journal client software to read or write entries, it just makes things easier.

All in all this was 8-10 hours of work to throw together.  I decided I'm going to open-source it under the Microsoft Public License (MS-PL) and post the source to Github.  I'm in the process of doing this and should have it up in the next few days.  In the meantime, you can download the binaries here.  No install is required; the only pre-req is the .NET Framework version 4.6.2, which is pre-installed on Windows 10.

There's definitely room for improvement, and I may add features as I get the time, but I never plan on comprimising the 4 bullets above.  Design-wise, I took the quick-and-easy route and it shows in the code.  There's a lack of proper threading and despite the fact that this application lends itself to the MVVM design pattern, I didn't use it.  I'd also like to add search features and a text formatting bar, but it is still possible to format your text using keyboard shortcuts (Ctrl+B for bold, Ctrl+I for Italic, etc).  All of this can be fixed/added as time permits, but for now the application does what I want so the rest of the stuff can wait.  Porting this to a UWP app for publishing in the Windows Store should be relatively trivial as well.  I haven't tested this under Mono (I have no need) but it's quite possible it will work cross-platform in macOS and Linux.

I also wrote some custom code to grab my LiveJournal entries, download them, and convert them to this format, so I've effectively imported all my LJ entries into Simple Journal.  I don't have plans to share this code at the moment, but I could be convinced.

Hopefully someone else will find this useful, and if not at least I'll be using it ¯\_(ツ)_/¯

Screenshot and another download link:
Tags: , , ,