Monday, November 29, 2010

Linux Outliners

I have used outline-based tools to record notes and reference information since KAMAS became available for CP/M. Currently there are a number of outliners (or similar wiki-based software) available for Linux. Here is a comparison of the features of several of them. The applications and the features considered here reflect my personal judgements regarding importance and usability.

The outliners, or similar applications, considered here are:
• NoteCase (http://notecase.sourceforge.net/).
• Zim (http://zim-wiki.org/).
• KeepNote (http://keepnote.org/keepnote/).
• CherryTree (http://www.giuspen.com/cherrytree/).
• NeverNote (http://nevernote.sourceforge.net/) -- Not really an outliner, but used for the same general purpose
• BasKet Note Pads (http://basket.kde.org/)
• Tomboy (http://projects.gnome.org/tomboy/) -- A wiki rather than an outliner an outliner.

Feature Descriptions

Features that are important to me are described individually below, followed by a matrix showing the features in each application. This list of features reflects only those that are either important or interesting to me, and is far from a complete list of all the features found in any of these applications.

Text formatting
Text formatting features include use of bold, italic, or monospace typefaces; different text sizes; foreground and background colors; bulleted lists and numbered lists; and alignment and indentation. All of these applications have some subset of these features, although not necessarily all of them. This comparison does not include a detailed accounting of the differences between applications. For my use, almost any basic set of text formatting features is adequate.

Tables
Much of the reference information that I want to have readily available is best presented in tabular format. The ability to insert a table in a note, or create an outline node that is entirely a table, is therefore very high on my list of important features. Sorting and other spreadsheet features are not necessary.

Embedded images
Although most of my reference information and ongoing notes are textual, diagrams and other illustrations are often very valuable accompaniments to the text. Quite a few of my notes include equations or mathematical/statistical expressions, and these are most clearly presented in the form of images, such as TeX output.

Tags
Although an outline is a useful paradigm for structuring a lot of information, it is not necessarily the only, or the best, way to represent the relationships between different chunks of information. The ability to assign tags opens up the possibility of identifying related notes in a way that cuts across the more rigid outline structure (or flat structure for non-outlining software). Searching, selecting, or highlighting features should therefore be available that operate upon the tags.

Password / encryption
I have several dozen records of user IDs and other types of login information that I prefer to keep stored in encrypted format. Although this is a relatively small amount of information, and a single encrypted text file could be used to store it, I would prefer to be able to manage this information using the same application that I use for all my other notes.

Windows version
Despite the fact that this comparison is specifically for Linux-based software, I also use Windows both at work and at home. Therefore, the ability to access and update my notes on Windows computers is important to me.

Cross-computer sync
The file(s) used by each of these applications to store notes can be synchronized across computers using DropBox or Ubuntu One (though I have not confirmed this with all the applications). However, an application-specific synchronization tool that is able to identify and help resolve possibly inconsistent updates is preferable.

Wiki links
The ability to directly link one note to another provides a valuable alternative to the outline for structuring information. (In the case of NeverNote and Tomboy, wiki links are actually the only way to structure the information.)

File links
Notes about ongoing projects frequently reference files or directories on disk, and the ability to embed links to those files within a note makes the note-taking software more useful as a place to centralize documentation, explanation, interpretation, and planning information.

URL links
Live links to URLs are equivalent to live links to files: an important feature that makes the note-taking software a useful place to centralize documentation.

Mailto links
Although not as important as file links and URL links, live links to e-mail addresses can also be very useful. Ideally (but not generally implemented) is to have e-mail addresses in text automatically recognized (e.g., when the text of an e-mail is dropped or pasted into a note).

Equations
Mathematical or statistical formulae are important for a small fraction of my notes. Plain text representations of equations are usually unclear. Automatic rendering of equations following entry of TeX or MathML is a very nice feature--very valuable on those occasions when formulae are called for.

Date integration
Several types of notes, particularly those for work projects, are fundamentally date-related. These include daily journal entries, meeting notes, records of deliverables, and important communications. The ability to assign a date as an attribute of a note, not just in the text of the note, would allow notes to be selected and sorted by date or date range.

Drop e-mail to create note
A lot of information that arrives by e-mail would be valuable to capture in project notes. Although the information can be copied and pasted from e-mail messages to notes, drag-and-drop capability would be a more efficient means of capturing the information--especially if combined with automatic creation of links for all e-mail addresses in the text of the dropped e-mail. My testing of e-mail dropping was done with Evolution.

List notes matching search
Whether searching by text, tags, or dates, often the search must be conducted across an entire branch or the entire outline. In such cases, the most useful result of the search is a display of all of the matching notes. From this display the user can then quickly determine which note or notes he or she is searching for. Although all applications provide some form of searching, few display a list of all of the notes that match the search criteria.

Saved searches
Some searches may be carried out repeatedly. An example would be a search to find all notes of a certain type that were created in the last week or in the last month, as may be used to help create a recurring project status report. Rather than re-entering the search criteria every time this search is to be run, executing a saved version of the search specifications would be quicker and less error-prone. (This feature is also of greatest use when combined with the ability to list all the notes that match the search criteria.)

Outline colors or icons
Notes, or outline nodes, may be of various different types. The ability to apply custom icons or colors to distinguish these types helps the user to rapidly find information in the outline.

To-do integration
A frequent use for a note-taking application in a work environment is to record meeting notes, and commonly this includes identification of actions that the note-taker is to complete. These actions, or tasks, will ordinarily be recorded in the text of the meeting notes. At this point:
• The tasks may be manually re-entered into a different to-do list application,
• The tasks may be automatically transferable to a to-do list application, or
• The note taking software itself may have adequate features to be used as a to-do list application.
Either of the latter two is preferable to the first.

Code formatting
Although a note-taking application is not an appropriate tool for managing source code, nevertheless it is sometimes valuable to include code snippets in a note. Features that facilitate the display of code in a note are the use of a monospaced font and syntax highlighting.

Line numbering
Line numbering is useful when the text of a note needs to reference other text, such as a quote or a code snippet.

Multi-user collaboration
Allowing multiple individuals to view, enter, and update notes facilitates collaborative project work. This reduces the effort and time to extract, summarize, and transmit notes between team members, and to integrate any updates and comments that they may have.

Feature Comparisons

FeatureNoteCaseZimKeepNoteCherryTreeNeverNoteBasKetTomboy
Version reviewed1.9.80.470.6.70.160.92.11.0.cmake1.4.0
Text formattingYesYesYesYesYesYesYes
TablesYesYes (a)
Embedded imagesYesYesYesYesYesYes
TagsYesYes
Password / EncryptionYesYes
Windows versionYesYesYesYesYes (b)Yes
Cross-computer syncYesYes
Wiki linksYesYesYesYesYes
File linksYesYesYes (c)YesYes
URL linksYesYes (d)YesYesYesYes
Mailto linksYesYes (d)YesYesYes
EquationsYesYes
Date integrationYes (e)Yes (f)
Drop e-mail to create note(g)(h)(h)(h)(n)(o)
List notes matching searchYesYes
Saved searchesYes (i)
Outline colors or iconsYes (j)Yes (j)
To-do integrationYes (k)Yes (k)
Code formattingYes (l)Yes (m)YesYes (l)
Line numberingYesYes
Multi-user collaborationYes


Notes

a) In Evernote, tables can't be modified after creation. Tables are not implemented in the Linux client (NeverNote), thus their availability and usability are very limited.
b) Evernote, not NeverNote.
c) As attachment to note rather than as a link in the note text.
d) Zim automatically recognizes and creates appropriate links for text beginning with "http:" or "mailto:". Other applications require extra steps to establish these types of links.
e) Notes can be created in the outline structure by date (via a plugin), but there is no other way to sort notes by date.
f) Creation and modification date are stored, and a view can show them sorted by date, but a note can't be assigned to a specific date.
g) The temporary cached file can be attached--but it is temporary.
h) A link to the temporary cached file is inserted--but the file is temporary.
i) Applies only to current note; does not find all notes with the search term.
j) A custom icon can be applied to each note.
k) Including hierarachical to-do items with completion rollup, but no date, alarms, or time tracking.
l) Allows switch to monospace font within a note, which can be used to set off code.
m) Allows language-specific syntax highlighting (and line numbering) of code within blocks inside a note or in separate notes.
n) The title of the e-mail is copied into the note, and the body is inserted as an attachment that, when clicked, is imported into Evolution again.
o) Dropping produces a link in the note, but clicking that link crashes Evolution.


Intangibles

KeepNote has the nicest interface. In addition to a pane showing the outline and a pane showing the current note, it has a third pane that shows children of the node selected in the outline (even if that node is collapsed in the outline) or all of the nodes that match a search criterion.

Nevernote (Evernote) and Tomboy are not really outliners--the notes are unstructured. NeverNote has tags to organize notes, and Tomboy has wiki links. Neither is as suitable for keeping a number of related notes together as are the outline-based applications.

BasKet Note Pads is very slow to start up. NeverNote is relatively slow also. BasKet has a relatively odd paradigm for notes, which I find distracting during use. BasKet (or a BasKet file) also can be damaged in ordinary use so that it causes BasKet to crash a couple of seconds after startup. (Inserting a text item after a link to an image file will do it.)

Summary

All of these applications have features that I like, but none clearly dominates the others. Putting together elements from my own list, above, of important or nice-to-have features, the ideal outliner would have a combination of KeepNote's three-pane interface, CherryTree's tables, Zim's automatic recognition of URL and mailto links, and NeverNote's tags. Add good to-do list integration, good calendar integration, and CherryTree's code formatting for a comprehensively powerful note-taking application.

(This post was composed in CherryTree, exported to HTML, and simply pasted here.)