The Perfect Wiki

From Jonathan Gardner's Tech Wiki
Jump to: navigation, search

Overview

What would I like to see in the perfect wiki?

Language

  • Very simple syntax. In the end, I don't think you can get much more simple than pure HTML, although LaTεΧ isn't to be underestimated. Perhaps a new syntax can be devised.
  • Complete freedom. I don't see a reason to limit what you can put in a page. As long as the person who writes the page can be trusted, why limit?
  • Macros and templates. This just makes sense. They need to be easy-to-use. In fact, the templating and macro language should be a full language.

Organization

  • Editing sections in-place using some Javascript. Ideally, I'd like to be able to edit stuff very, very quickly.
  • Pages as categories. That is, you can take a page and say it belongs to other pages, beyond links in the text.
  • Organize stuff into a book. That is, one page can be marked as the next of a previous page, and pages can be reordered and nested like as in an outline.
  • Combining parts of pages into one. For instance, you can take the lead paragraph of several articles and list them. Or you can take a section of one page and quote it.
  • Easy links to sections.
  • Pages link by ID When you first link to a page, the link is remembered so that no matter where the page goes, the link will still go there.

Representation

  • Multi-face. When you view the documents in a wiki, you can view them as HTML or some other format. You can view one page, or one section, in isolation, or you can view several pages altogether.

Syntax

Really, it comes down to four choices:

  • HTML
  • Lisp
  • LaTεΧ
  • Something else...

HTML

HTML is ubiquitous. I make my living working with HTML. However, HTML really, really stinks. It is wordy, imprecise, and completely non-standard.

Lisp

I can't think of anything that cannot be expressed more clearly and simply than in Lisp. It is the absolute minimum required to express human thought precisely.

For instance, in HTML, we may see:

<p>This is a <em>paragraph</em> that may contain markup...</p>

But in Lisp, this is simply expressed as:

(p This is a (em paragraph) that may contain markup...)

Since parentheses are so common in English, I'd like to use something else, perhaps curly braces, to represent nesting.

{p This is a {em paragraph} that may contain markup...}

I'll work out this language as I think of more things.

LaTεΧ

LaTεΧ has been around for a while, and for good reason. It is a very good syntax for text expression. Although wordier and somewhat more unweildy than Lisp, it is efficient, well-known, and standard within the scientific community.

Something Else

I cannot imagine anything else comparing to the above three.

Final Decision

I believe Lisp is the winner here, since it is so simple and extensible.

Complete Freedom

I believe anything should be allowed in the page---anything. Javascript, frames, objects, etc... I can't think of a good reason to limit it. Now, before people go shooting themselves in the foot, perhaps the wiki administrator should be allowed to limit certain people's choices.

Macros and Templates

Macros and templates are really functions defined elsewhere in the site. If I go with the Lisp-like qualities, then I have to think of my site as a data structure. I'd need some way to create new macros and templates. If I treat them as any old page, then that could become weird. After all, what would a browser want to see on a template page? If I treat them as a different kind of object in a different namespace, then things would be easier to manage.


Design

The web server is a machine that takes a URL and handles it depending on what it is.

A simple page view takes the URL and maps it to an object in the page namespace. From there, control is handed off to the page component.

There are pages that are really special controllers to allow the creation of new pages and the editing of existing pages--including these controllers!