Developments on Notational Velocity Development

With the help of all your feature requests and suggestions during the last year or so, I have quite a bit in store for Notational Velocity.

There are also quite a few forks now, but overall there's been less coordination and sharing than I'd hoped for, which has frustrated users who want a mix of features and the assurance that they're getting the newest updates.

So in the future I plan to consolidate and unify these various forks and modifications of top of adding some unique changes, starting with a Lion-compatible full-screen mode, integration with Markdown editing in ways you definitely haven't seen yet, and support for some of the new Simplenote features.

I'm also planning a separate paid version (which should end up in the Mac App Store if Apple allows it) for some of the more challenging features requested. Many people have inquired about donating to the project, so this should finally serve as an opportunity to contribute monetarily.

GPLv3 logo

To support this new model and direction, I'm switching Notational Velocity's license to the GNU GPL. This will help unify development by ensuring that [public] modifications to the source are truly available everywhere.

To contributors of code, for now just remember to specify the type of license (or whether it is a dual-license) under which your changes can be distributed. And if you need only a small piece of Notational Velocity for your closed-source or otherwise license-incompatible project, just send me an email and I'll write you a separate more permissive license for the relevant section(s).

Correspondingly, there is now also a central mailing list for discussing and coordinating development of Notational Velocity. Anyone wanting to participate in development should subscribe by emailing

develop.notational.velocity@librelist.org.

I hope to see you there!

Notational Velocity 2.0β4

With this version of Notational Velocity (version 2.0β4) I've tried to curb the ever-growing list of issues by fulfilling as many small-to-medium enhancement requests and bug fixes as possible. Contributions by others include two new localizations — Portuguese by Daniel Souza and German by Benedikt Hopmann — as well as a new icon designed by Taylor Carrigan:

Notational Velocity 2.0β4 icon

 

Overview of New Features

Horizontal Layout

Based on how many people seemed to be forking the project and rotating the splitview, I guessed that the demand for a horizontal layout of some sort was probably not insignificant. However, simply placing a column-based list next to the editor is somewhat space-inefficient, so I tried using a more compact representation.

Notational Velocity horizontal layout view

(So far I'd been worried that NV's "unique" style of note-entry might make an interface without a top-to-bottom order of control confusing to new users. But the demonstrated appeal of a horizontal layout in other project "forks" along with the benefit of making it optional has persuaded me of its other advantages.)

Note that when using horizontal layout, the Columns menu instead controls which properties are visible.

Internal Links Between Notes

There finally exists a kind of wiki-like linking in Notational Velocity, in the ability to turn any text into a link by placing it inside [[double square brackets]]. If that text is the title of an existing note, then clicking it will jump to that note, searching for it in the process. (The Deselect button in the search/title field will double as a back button.) If no such note exists, just press return to create one with that title, exactly as you're used to doing already. 

Furthermore, Notational Velocity will (optionally) try to auto-complete note-titles typed after the starting brackets. Hit tab or return to add the ending brackets.

Hopefully Steven Frank will appreciate this feature.

Tags

This version adds a little more support for tags — namely, it now stores and reads them using the OpenMeta specification for extended attributes when using separate files, and they're auto-completed in the tag-entry field. So with your notes folder in the right place, tags can be searched from Spotlight. And now that Dropbox will synchronize OpenMeta tags, they will correspondingly be transferred between similarly-connected copies of NV on multiple computers.

This was a bit more challenging than I thought it would be, as detecting OpenMeta-tag-changes required tracking attribute modification dates in addition to content modification dates. Unfortunately the former cannot be set from user space on Mac OS X, and thus cannot be synced by Dropbox. This effectively results in attribute modification dates being tied to a specific volume and causes alternating NV launches on other computers to detect every file as being changed. So NV consequently indexes disk-local sets of attribute modification dates by the disk's UUID.

And no, sorry, tags don't Synchronize with Simplenote yet. Yes, that feature is coming — you don't need to keep asking me for it. There will be a $350 penalty imposed by the state of New York for each offense in the blog-comments.

Strikethrough and Other Automatic Formatting

You can apply strikethrough formatting to your notes now. Moreover, when " @done" is appended to a line, NV will strike it through automatically. This is useful if you need to apply such formatting while editing a note as a separate external file.

NV will also carry leading list-bullets when performing automatic indentation; i.e., if a line starts with a bullet-type character with whitespace on both sides, then that bullet is copied upon pressing return, and Tab/Back-tab will shift it in and out. (And unlike most rich-text editors and word processors on Mac OS X, NV doesn't use any tab stops or paragraph formatting to preserve list indentation; your tabs are the real thing.)

These two features will hopefully make moving between NV and Hog Bay Software's TaskPaper that much easier.

Note-file Path Extensions

On the subject of external editing, NV now preserves a note-file's existing extension while saving, and allows you to specify an alternative default file extension for new notes.

Notational Velocity horizontal layout view

External nv:// Link Specification

Using a simple external URL scheme you can now reference existing notes in NV, as well as create new ones with a specified title, body, and set of tags. Use Edit > Copy URL (Command-Option-C) to place such a referencing URL on the clipboard.

Read a rough specification here.

Custom Foreground/Background Colors

You can finally set custom text and background colors for the editor (for all notes). NV will choose the link-text and cursor colors automatically using a perceptual color model.

For even more fixes and changes (and there are many), read the release notes

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!

Regarding "A case for storing all your info in text files"

Leo Babauta, who writes the excellent zenhabits web log, has made the argument that plain text files are all one needs for storing information, that they are simpler and faster than using programs like Evernote. While this is true in many cases, it quite specifically does not apply to Notational Velocity.

First of all, Notational Velocity can be configured to "maintain" its notes as a folder of text files (which can be moved anywhere on the hard drive as NV tracks it with alias data). So even in the case of a corrupted database file you won't lose a single note.
Notes-as-text-files
However, Notational Velocity actually launches in far less time than would be needed to read hundreds (or even thousands) of text files into memory, and suffers no speed loss when searching. This is because NV uses a hybrid approach; it actually synchronizes its database with the folder of text files in real time, and in doing so reaps the benefits of both storage formats.

Finally, adding a new note in Notational Velocity is always faster than creating a text file using any standalone text editor.

I realize that Leo was using NV's database to make a larger point about simplicity, but I felt that others could benefit from this information.