Note:
This is a previous version of this page.
The current version is here.
Mnemosyne Features:
Yes, I know there are a million and one wikis out there, but none of them did what I wanted, so I decided to write my own. The main goal was to build a simple system for storing personal information, in a clear, easily understandable format.
Standard Wiki capabilities:
- magical autolinking? check
- Backlinks? check
- Search? check
- User levels – coming!
Swappable parsers:
One of the most annoying things about any wiki is getting stuck with syntax you hate. Mnemosyne was designed to make it easy to swap in and out parsers. At the moment it supports three variants – textile and reStructured text. Adding others should be as easy as subclassing the Render class in main/views/render.py.
Note: There are mnemosyne-specific formats which are standard across all parsers.
Sensible Database Design:
Some of the database designs behind some of the bigger wikis is just, well, shocking. I've seen wikis which place the current version of a page in one table and the older versions in other tables. Others have hundreds of fields unused and/or redundant information. Yet others take literally hundreds of queries to render one page. So, Mnemosyne was written to have a simple, sensible, clean database design, and for this to be as lightweight as possible. See :DatabaseStructure for more information.
Versioning:
Keeping track of changes is very important, but some lightweight wikis don't store versions, whilst others just store them in a seriously screwed up way (see above). Mnemosyne tracks all this information for you.
Name spaces:
Namespaces are fun. More importantly, they provide a way of structuring your data into sections, and remove the problems of long and crufty urls coming from having to dream up distinct pagenames for each article. At the moment Mnemosyne can handle single-depth namespaces ( i.e. namespace:pagename, which is distinct to somethingelse:pagename, which in turn is completely distinct to Mnemosyne:pagename. One of the main aims in future is to expand this to arbitrarily nested namespaces.
Color Coded links:
Pages which exist are colored in a fetching shade of Mnemosyne blue. Pages which don't are colored in red. External links are green ( all this is, of course, changeable via a stylesheet ). Makes it easy to see which pages exist and which don't.
Macros:
Mnemosyne provides small macros which allow you to do certain actions, like list all pages in a namespace. Handy little things. Also allows you to add your own functions to the wiki. However, if you don't want them, turn them off!
File Attachments:
As one of the major goals of mnemosyne was to be a personal wiki, I needed to be able to attach files. Looking at other wikis I found that there seemed to be two approaches to this. First, store the file in the database – this is almost always a bad idea, and didn't sit well with me. This however, was much better than the other alternative which is to chuck all files into a 'files' directory and rename them after an md5 hash ( usually of the filename ). Seriously – what the hell happens if I want that file back again or if I upload two files called document.doc?
Mnemosyne handles file uploads sensibly – it places uploaded files in a subdirectory named after the page the file is attached to. So, document.doc uploaded on Mnemosyne:Features would be put inside the FILE_ROOT/Mnemosyne/Features/ directory. This means that you can have as many document.docs as you have pages! There's also no crazy renaming going on, unless you tell Mnemosyne to on the upload form.
Having the files stored externally also means that in the future we can look into using something like the extremely cool Swish-e, Beagle, and Spotlight to index your information too.
Finally, there's a (rudimentary) file browser which allows you to browse through the file hierarchy directly without digging through the wiki.
Tags:
Tags are the new black. Pages can be tagged with anything you want, and this information can be searched/extracted later.
Backlinks:
Easily see which pages link to the current one.
(Relatively) easily modifiable styles.
An irritating aspect of some wikis is that certain styles are hardcoded and not easily changeable. Mnemosyne attempts to abstract this and allow you to modify how it renders various page aspects. All this information is specified in the file main/views/styles.py. If you want to change the links to mnemosyne pages to have <blink> tags, go for it!
Features to come:
See :ToDo