During some portion of my free time, I've been experimenting with coding a hybrid weblog, wiki, and general content management system I have called ChickenScratch. This has been the project I've used to familiarize myself with the new features in Whidbey. My goals thus far have been:
- Maintain socialness of a weblog (link tracking like referrals, pingbacks, and trackbacks)
- Maintain the ease of use, openness, and automatic cross referencing features of a Wiki (You don't have to worry with markup)
- Maintain the organizational/security capabilities of a content management system (Role-based ACLs, user profiles, deeply hierarchical content structure)
This project was the result of some frustration with how hard it would be to add these features to FlexWiki. I wanted a system that would be just as suitable for holding personal brainstorming ideas not suitable for public consumption as for holding blog entries, or collaborating with my friends on coding projects or film scripts.
I've succeeded on these goals to a great extent, but one of my biggest problems has been deciding on grammar for the content. I think one of the most powerful features of a Wiki is when you mention a topic and that topic gets cross referenced “accidentally”. At work, we use a Wiki to help us track features, bugs, and changes to our API (which we treat differently than features) and we have lots of these happy accidents, but only because we are disciplined on how we name topics.
Most Wikis create topics by concatenating words together (or removing the space between them) like MyVacation2004. The downfall of this (I've found) is that non-coders find this unnatural and annoying. Other wikis use some syntax to identify a topic such as square brackets like [My Vacation 2004]. The problem here is that this removes the ability to have those happy accidents that I like so much.
So, I've decided to not put the burden of topic identification on the user (the person entering content), but rather on the system itself. I think it makes a much more interesting problem to solve.