I keep a large number of notes in Notational Velocity, which has two key advantages: entering and subsequently retrieving notes is very fast, and notes can be stored as individual text files in a directory.
Creating a new note requires no mouse-clicks, and only a few key-presses: Cmd-space to open Quicksilver, “no” to select notational velocity, and enter to launch it. Then Cmd-L moves the cursor to the title area, and I can type the title for the new note. Hitting enter moves to the body of the note, so I can type the note itself, then hit Cmd-Q to close the application and go back to whatever I was doing.
This is incredibly fast, and makes note-taking minimally disruptive to other tasks.
Searching notes is similarly fast: typing anything in the title area displays a filtered list of notes. You can click on the desired note directly, or move through the list with Cmd-J/Cmd-K.
Notational Velocity can sync its notes with simplenote, so that they can be accessed and edited in a web browser or the iPhone/iPad app. This allows me to taking notes with the simplenote app on my iPad during a talk, and have them be searchable in Notational Velocity as soon as I get back to my room. It also means that I have all of my notes with me wherever I am (which would not be true if I had separate paper notebooks).
By default, Notational Velocity saves notes in a single file, but it also offers the option of saving one plain-text file per note (Notational Velocity -> Preferences -> Notes -> Storage). By default, these are saved in ~/Library/Application Support/Notational Data/.
I have a cron script on my computer that commits this directory into a Git repository every 15 minutes. Not only does this give me some protection against accidentally deleting or overwriting part of a note, but it also allows me to go back and check exactly when I edited each note and how they changed over time.
At the top of some notes, I also attach metadata. This is ignored by Notational Velocity and Simplenote, but is very useful to me. For example, a recipe may begin:
Title: Herman the Friendship Cake Type: Baking Tried: Rachel made it; it was good #recipe
For several common types of notes (recipes, talks etc.) I have snippets set up in TextExpander. This means that I can just type “;recipe” and have an appropriate template appear, ready to be filled in.
I wrote a series of ruby scripts that goes through each file, and does useful things with the metadata that I’ve added. For example, I can view a random recipe (note containing “#recipe”) with
./NVrandom.rb recipe. Alternatively, I can produce a tab-separated values file containing one row per recipe, and one column per key (eg. title, type, tried):
./NVtabulate.rb recipe > recipes.tsv. Then I can open this file in Excel:
open -a "Microsoft Excel" recipes.tsv.
Note that the metadata system is very flexible: the keys do not have to be predefined. If I wanted to add a new key to one recipe to mark it as vegetarian, I can just type “Vegetarian: yes” at the top of the note, then rerun
./NVtabulate.rb. A column will appear labelled ‘Vegetarian’, even though it is empty for all but one note.
Notational Velocity allows you to add links from one note to another (with the same
[[target]] syntax as Wikipedia/MediaWiki). I have another script that lets me see the network of links by outputting a .dot file that can be opened by GraphViz.