For those who don't know, PIM is a personal information manager. It's a special program to store and manage any type of information on the computer that you might want to reference later. I think computer is the best tool to store any type of information, including personal notes, tasks, and so on. I use it for that purpose and looking back at the time when I used notebook to store my notes (or even worse, random pieces of paper) I can't imagine going back.
There are a lot of different PIM programs, and I think most of them suck. I'm lucky if program allows me to store notes as a tree (sometimes working with a tree is complicated, such as Microsoft OneNote. I hate clicking 5 times to open a page and simply avoid using the tool).
But to me tree organization is not enough. It's limiting. I often want to be able to access my notes using different paths. For example I want to reference a page dedicated to a book from the list of books I want to read and from a project page that holds all the materials related to the project, which include the book. How to store these relationships in a tree? A page might have two or more parents. In this case the book might be related to several projects. Good PIMs support custom flags (or other forms of references) and I might be able to mark each book as related to project A and B, but it's not always an answer. I need the PIM to support a graph structure.
Working with wikis I realized that they organize pages in a graph. Each page can reference any other page or itself. That's what I was looking for.
I'm not a big fan of the wikitext format, but I can live with it. Sometimes there are limitations with renaming a page (a link to the page will break unless all pages are parsed and the link text is updated), but most wikis have mechanism to overcome this. I started to look around the web and found out I wasn't the first who came up with the idea.
Initially I thought I will have to use a wiki on a server. However, it would have been an impediment to store quick notes on it. I would need to open a browser, navigate to the page, wait for it to load and so on. Plus I don't trust browsers to enter large amounts of data, such as a long article (I use w.bloggar to write blog posts). Soon I found wikiPad and fell in love with it (well, almost).
wikiPad is free, open source (runs on Python), stand-alone wiki that runs and stores wiki pages locally. It is designed specifically to organize information and uses the fact that it's a local application to go well beyond what most online wikis have to offer.
Here's a list of things that make it stand out for me:
- Dynamic tree view - Next to the page editor there's a tree that shows relationship between all pages. Each page is a node. When a page has several parents (referenced in several places) it is shown as a child node of each page that references it. This is very handy, since now I can have my book shown under each project that references it and under a separate page that lists all books I'm planning to read. It is also possible to see a list of all parents of the page.
- Custom attributes - Each page can have custom attributes defined in a way similar to how links are defined. Tree has a special "views" node that shows all pages grouped first by the attribute name and then by the attribute value (I use this to have two separate lists of projects that I currently work on and projects I want to work on in the future).
- Wikiword completion - wikiPad can show a list of existing wikiwords or attributes that start with the current word. It helps me to remember the exact wikiword I was looking for. In addition the program has a dialog that finds pages for the text you enter as you enter it.
The program is nice, but it isn't perfect. This is a list of things I wish would be better or different:
- No page history - Among other things, wikis are very useful for version control. In most wikis it's easy to see previous versions of the current page and compare it with the current page. Not in wikiPad. I miss this feature.
- Limited tree operations - Tree doesn't support add or drag and drop. It might be tricky to define what should happen (since links are embedded and mixed with the page text) and implement, but it would have been useful.
- No hotkey or single instance - The application can be minimized to the taskbar icons area, but there's no hotkey to open it. I could have created a hotkey to launch the application, but it doesn't support single instance.
- Flat pages relation - I like how open-ended wiki is, but sometimes it does get in the way (partially due to the way wiki works). For example I can't have "Project/Overview" page and then from "Overview" reference parent page using "../" or something like that. This way I cannot have multiple "Overview" pages that are related to different projects. It's a price I'm willing to pay. As a side note OpenWiking does support both, flat and structured pages location.
I also want to mention that with a graph structure it's really easy to create a mess out of the page relationships since the wiki is so open. I try to be careful with referencing a page in several places. If I do it I get a chaotic mixture in which it's really hard to find what I need. Most of the time I don't have this problem.
Alternatives
It wouldn't be fair to praise wikiPad without talking about alternatives. I have already mentioned that it's possible to just host a web-based wiki on a local server. I don't like that solution because it's sluggish and using browser to enter text can be unreliable. There's a number of wiki application designed to run locally (look at Desktop Wikis at Wikipedia), but most of them have limited support to show relations between wiki pages, such as dynamic tree in wikiPad.
The only other desktop wiki I found that I found interesting is ConnectedText. It's a shareware wiki with some features that are missing from the wikiPad. It supports inline images and page versions, but I don't like their "tree" with pages (both how it looks, how it acts and it misses some of the wikiPad features, such as custom icon for the node). I like it less than wikiPad. For me, wikiPad parts absent from the ConnectedText are important, but I can live without unique ConnectedText features.