Interesting facts about Simplenote support in Notational Velocity

The newest version of Notational Velocity adds support for Simplenote, a web-based service and iPhone application from Cloud Factory.

I'd been planning this feature ever since I first discussed it with the Cloud Factory team in September, but unfortunately two months of near-constant traveling for work and vacation caused somewhat of a holdup.

In the end, though it took longer than I expected, the result was a unique, user-friendly, and admittedly somewhat over-engineered and excessive system of synchronization. Here are some things you might find interesting:

Notational Velocity knows when to push and when to sync

 For the time being, every two-way synchronization using the Simplenote API requires downloading the complete list of notes, which can get somewhat tedious with large repositories. Because NV schedules updates explicitly in certain circumstances, saving changes takes only as long as it ought to, and as a consequence NV takes far less time to quit when there are unsynchronized notes.

The engine is fully asynchronous

 NV conducts 100% of its network interaction via asynchronous APIs, and will never, ever block. What's more, Simplenote operations without dependencies or related side-effects can occur side-by-side.

No compromises were made to NV's existing model

 NV works exactly the same way it did before, so if you never use Simplenote syncing, you won't know the difference. And for reasons mentioned above, even if you do use Simplenote syncing, you still won't know the difference. There's no speed or usability impact either way.

 Furthermore, using separate RTF/TXT/HTML files as a backing store works as you would expect (with full round-tripping of creation and modification times to boot). Conversely you can also keep your notes encrypted on disk, though be forewarned that they'll be sent to Simplenote as cleartext.

You, not the "cloud", own your notes

 NV attempts to be somewhat more than a simple window into the remote notes repository (as a web application would be). If the Simplenote repository changes out from under you, either because you changed your account or because of an unfortunate server glitch, NV provides the option of "restoring" the local database back to the server.

merge warning

 Additionally, any deletion reported by the Simplenote server can be undone in Notational Velocity — or redone — or undone again, etc.

 NV also knows when a note has unsynchronized changes and doesn't step on your work during an automatic sync.

Accurate status display

 NV tries to model Mail.app in its status reporting; your notes are either up-to-date, being checked, or "offline". And if a sync takes too long, you can see what's actually going on.

 You'll also know when notes have finished downloading. I.e., notes are added and removed in discrete groups of changes rather than an unending flow of updates. This behavior is what allows merging and useful undos.

 

On top of all this, these features work through their own explicit APIs, so implementing synchronization with additional services will now be somewhat easier.

Now back up your database and go enjoy synchronized notes!