Laura Dragan talks about work on a semantic note taking application, based on KDE and NEPOMUK technologies:
I work/study in Galway, Ireland, at
DERI, in a happy research group called
Smile. For the last 2 years, I've been working on different parts of the
NEPOMUK project.
SemNotes is a
note-taking application that uses
NEPOMUK to link notes to the data that is available on the user's desktop. The data stored about a note consists of: a title, content, tags, creation and last modification time. The notes and all the information about them are stored as RDF resources in the NEPOMUK repository. They are automatically linked to the resources they reference, by adding statements like:
<note> <references> <some_resource>
The referenced resources can be anything that makes sense, like people - contacts from the addressbook (crawled by Strigi); artists - taken from the music the user has on her computer; places, cities, countries - from Marble.
SemNotes uses plugins. There are 3 types of plugins: visualizer, analyzer and editor plugins. When SemNotes starts, a pretty icon (thanks Riccardo Iaconelli!) appears in the system tray. The main window is shown/hidden when clicking the system tray icon. The main window only displays the existing notes and provides a title filter and access to the plugins.
A visualizer plugin uses data from all the notes that are shown in the main window. This type of plugin can set filters on the list of notes that is displayed in the main window. The timeline and the tagcloud are visualizer plugins. The timeline adapts to the interval of time to be shown. The height of the bar for each interval is the normalized value of the number of notes created for the same interval. When a bar is clicked, a time filter is set, allowing only the notes created in that interval to be displayed. The tagcloud is built based on the tags assigned to all notes. The tags are clickable. When a tag is clicked, a corresponding tag filter is set. When a filter is set from a plugin or is removed from the main window, all the visualizer plugins are notified and refreshed, using only the filtered notes as a basis.
The analyzer plugins work on one note at a time. They analyze the note in various ways (the content, tags, references, etc.). So far there are three analyzer plugins. Two of them provide basic export functionality - to text and to HTML files. When a note is exported to a file, the tags that are set to the note are also assigned to the resulting file. A more interesting analyzer plugin is the keyword extraction. It uses natural language processing techniques to analyze the note and generates a list of possible keywords. The keywords are displayed in a dialog and the user can choose none, some or all of them to be set as tags to the note.
Editor plugins are, as the name correctly suggests, note editors. So far there are 2 editors for notes, a simple editor that does nothing fancy and a linked editor which automatically creates the links to the referenced resources. An editor window has a title line, body text editor and tag input field.
Tags are typed in the input field as comma separated words. When writing, the auto-completion feature provides existing tags from NEPOMUK as options, while new words become new NEPOMUK tags.
SemNotes is my first KDE/Qt project, so I have rewritten parts of it several times so far, as I discovered how everything works. The code for it is available on sourceforge, but I hope to put it in the KDE SVN soon (I need to get an SVN account first!). It is by no means finished, there are many, rather essential, features to be implemented - like the configuration dialogs for some of the plugins, file import into notes, drag and drop support and some code cleaning. I also plan to make a plasma applet for it sometime in the future.
Any comments on the code, usability or any other topic are welcome (and encouraged).
And one final request: I would love to find a better/cooler name for the app, something that is not as boring as SemNotes, but i've had no better idea so far. Danny suggested to make it a contest in the Digest, so here it is: whoever has the best idea for a name will get a pack of original (Irish) Guinness.