So MindMirror is the Project I’ve been working towards for the last couple of months.
Steven already mentioned it in the report from the kdepim meeting in osnabrück, I named it notetaker back then as I couldn’t decide for a name, but here’s finally my first blog post about it.
History/Motivation
I was always unhappy with the available solutions for taskmanagement and notetaking. I tried various online tools (which just don’t cut it if you’re sitting in a train…) like evernote, toodledo, doit and some others. After figuring out that online tools are definitely not for me, I decided looking for desktop apps.
Chandler and KJots were the ones I liked the most, KJots being super simple and fast for notes, Chandler has bit more to offer (including todos) but is not really fast, and doesn’t integrate with any webservice.
So I figured out already two years ago that I will have to create my own app, to help my ridcolously bad memory and my habit of being as unorganized as possible.
What I really wanted was an application which does not differentiate between notes and todos, as the frequently evolve from one to another (at least in my world). I wanted a place where I can store my thoughts, todos, events without having to think where it belongs.
Basically just a place where I can dump everything, and retrieve it later on as needed.
Further I wanted it to integrate well with existing solutions, such as KOrganizer, GMail, Evernote, etc.
With akonadi and nepomuk slowly evolving I was finally given the tools to start this task.
So I started last year the project MindMirror.
While the inital development started at a quick pace, I soon faced difficulties in the akonadi and nepomuk internals which occupied me for quite some time.
I spent a lot of time hacking on QProxyModels (the ETM, my own section model, …), also a conceptually proper Nepomuk integration was not easy and is still work in progress. Further I got sidetracked by the trashhandling implementation in akonadi (not yet in master), after attending the kdepim meeting, but more on that in another post.
Now that the needed fixes and additions slowly make their way into master, I feel that I can start spreading the word about this new tool.
MindMirror
MindMirror is supposed to be an interface to store everything you have to remember in form of Notes, Todos and Events. It is designed to be an additional Interface to the calendarview of KOrganizer and not to replace anything.
I try to keep the UI minimalistic, far from the full blown Interface of the KOrganizer Incidence editor. This means also ignoring some features, at least for now (I’ll probably add the option to open the fullblown editor).
Idea is, that a minimum effort is needed to enter something. You can simply create a new item (note/todo/event) and start typing right away, without another click needed. The focus will automatically move to the right fields to minimize user interaction. The UI is reduced to the minimum: title, text, an (optional) due date and a status are all that is usually needed IMHO. The status is the simplified version of the 10 priority levels a task can have in korganizer (States being Later/Now/Done). This gives some simple priority management, which is actually useful.
Organizing/Workflow
So the idea is, that you don’t have to organize the information when you enter it but rather later on (i.e. end of the day), if organisation is needed at all. This avoids breaking your workflow. To further improve this i.e. a krunner can be written so you don’t even need to open MindMirror.
For simple, short term notes, fulltext search and a list of the latest created notes should be enough to find your item again (I hope at least).
If you’re working on a long term project thought, it can be useful to organize your items in a treelike structure, which is typically solved using folders and alike.
MindMirror is not much different, you can organize your items into “Topics” (which can have subtopics and so on). The main difference to a folderstructure is, that you can add an item to several topics at the same time (the UI-parts are still missing currently), which should allow for a little more flexibilty.
Also the organisation of items is done through nepomuk, meaning that the “Topics” are actually pimo:topics and the whole structure is stored in nepomuk. Of course it is also possible to tag you items in MindMirror, so I hope this allows to fill Nepomuk with some more useful information.
With the means of nepomuk it is also possible to attach/link arbitrary documents, emails, to your notes/todos, which gets us one step closer to have everything at hand to fulfil a task.
When you’re done editing an item, don’t even bother saving, everything is already saved as you finish typing.
UI
The Userinterface consists of a single view, with the left pane for control/sorting, the listview in the middle for display of the items, and the editor on the right. I’m not a big fan of interfaces consiting of many tabs and different windows, so I try too keep everything together.
The “Views” which you can see on the topleft control mainly the organisation of the items in the listview:
- Work Layout:
This layout is for crossing of items on your todo, list. Only uncompleted todos are shown and your notes are there to support what you’re doing.
- Organize:
The organize layout shows all items sorted by date. It’s there to organize your items.
- Upcoming:
A list of upcoming events/todos
In the custom view you can control the sections and the shown items manually.
The listview in the middle groups the items in sections, currently we have there ItemType (Todo/Event/Note), Status (Done, Later, Now), and Date. If I manage that items can appear in multiple sections we will have some more possibilities like:
- by subtopics of the current topic
- by tags
While the listview already supports showing the todos in their hierarchy, this part is still very buggy and needs quite a bit of work first.
The editor is a normal KRichTextWidget, which allows you to enter RichText. Below you can see some toolviews, most interesting is probably the “Context” view which allows you to relate notes/todos/files/etc. to this item.
Instead of using a tabbed interface or windows when opening notes from there, the breadcrumbs on top are used to navigate back.
I don’t plan to add much more to the UI, as this should be all which is needed. There probably will be a couple of changes, and the UI could use some designer’s love (It’s a bit too grey atm.), but from a feature point of view thats more or less it.
I’ll probably add a fullscreen-mode to the editor and a search view for some more searching options though.
Current State
While it is not yet releaseable and I plan the first release earliest with KDE 4.8 (because of the required dependencies), I already use it in my daily notetaking and todo management (i.e. I drafted this blogpost in MindMirror), and I’m quite happy with the result.
There is still some work to be done until it’s fully stable though.
Integration / Collaboration with other applications
Using akonadi for datastorage, namely the akonotes resource for notes and the ical resource for calendar items, you can have the same items in KOrganizer, KJots and MindMirror (and of course every other application which uses akonadi).
This is of course key for event and todo management, as MindMirror does not have it’s own calendarview: KOrganizer is the calendarview.
I do think akonadi is the way to go for data which should be synchronisable to cellphones, webservices, etc.
Nepomuk is also good candidate, but it makes perfectly sense to separate the synchronisation part in akonadi
(maybe as a long term future nepomuk could completely encapsulate akonadi, but thats another story).
Anyways thats why I do not plan to intergrate with applications not using akonadi (in short term).
Since the nepomuk feeders feed the data from akonadi to nepomuk, most of the data is also available trough nepomuk (which might be a way to work with other apps using nepomuk only).
Of course I looked at many other programs like basket, semnotes, kjots, korganizer, zanshin, etc. to see if a couple of modifications would bring my to my target, but I don’t think so. Neither interface wise nor functionality wise any of those programs suits my needs, although all of them have some very nice ideas.
Future Plans
Apart from the obvious plans like having an awsome ui and being super userfriendly, there are also some plans for akonadi in general:
- Inline pictures in notes
- Synchronisation plugin for evernote (akonotes resource)
- krunner (I read there is already something cooking in the zanshin project)
- Search View with an additional list of item (files, emails, etc.) related to the search (aka. “Contextview”)
I’m sure I won’t run out of work =)
Codebase
While the codebase is generally in an ok state, it needs some cleanup and documentation.
There are still some classes with names that don’t really make much sense anymore, but that will be fixed.
Also for building some kdelibs code is needed (trashhandling and some etm fixes), which is partially only available in my private repos. Anyways, if anyone really feels like building, contact me, but be prepared =)
The code is currently here.
Also, contributions are, as always, more than welcome =)