Wiki

From XPUB & Lens-Based wiki

<slidy theme="aa" />

A little history

Wiki Wiki Web

1995, Ward Cunningham

"Portland Pattern Repository" and c2.com

  • About speed, of moving from read to write
  • Inspired by HyperCard (and HyperText)

Software with an attitude

You're browsing a database with a program called Wiki Wiki Web. And the program has an attitude. The program wants everyone to be an author. So, the program slants in favor of authors at some inconvenience to readers.

Posted on the original "wiki", the Portand Pattern Repository; sadly the original seems to no longer be online

Which Wiki Was Which

"WikiWikiWeb" for a while referred to four things: the website hosted on c2.com, the software used to run it (written in Perl), and later any user-editable website (what is now known as a wiki), and any application used to run such a site (now known as wiki software). There was no greate distinction for the first five years or so between the code used to run a wiki and the content on it, partly becuase there was nearly a 1:1 correspondence between the two: many of the original wiki administrators were programmers, and they tended to create their own new, or modified, version of the software to run their own wikis. [1]

Wikipedia

  • 2000 Jimmy Wales creates Nupedia, a failed attempt to create a free online encyclopedia
  • Wales hires Larry Sanger to edit
  • wikipedia.com launched January 15, 2001
  • 2001: first subdomains for non-english (deutsche.wikipedia.com)
  • August 2002 all content tranferred to wikipedia.org
  • Wales and Sanger fall out

Mediawiki

Mediawiki is the software that runs Wikipedia, and the PZI wikis

UseModWiki, like most wiki software at the time, was the work of tinkerers: it was based on AtisWiki, which was based on CvWiki, which in turn was based on WikiWikiWeb, Cunningham's original application. And again, like most wiki software of the time, UseModWiki used flat text files to store all page revisions. ... In late 2001 Wales hired Magnus Manske, a German programmer and active Nupedia contributor, to rewrite the software in PHP, now storing edits in a MySQL database. [2]

Wiki essentials

Links

Two kinds

  • Internal (to other wiki pages)
  • External

Internal

This sentence contains a link to [[another page]].

You can customize the displayed text (label) by using a "pipe": At first [[Mediawiki | the software]] used in wikipedia was written in [[PERL]].

External

  • Use single square brackets
  • No pipe, just a space to specific a label
  • If no label is given, the link appears in "footnote" style [1]
  • Raw URLs (that start with http://) will be made automatically clickable (http://wikipedia.org)

Redlinks

Significantly, wikis allow links to pages that do not (yet) exist. These are called "redlinks" (typically they appear in red to differentiate from "blue" normal links). In this was editors can write with links without knowing (or caring) if a given page exists. Redlinks can form a "potential page" or "todo" articles that when created in the future, will already be linked. Non-existent (redlink) Pages do display backlinks even before they are given any content (though they will not appear in Special:AllPages, they can be seen via Special:WantedPages)

Citations

Using the extension Cite, the wiki supports making proper academic style footnotes. It works by putting your reference directly into your text surrounded by the "ref" tag, e.g. <ref>Yaron Koren, p. 3</ref>

Page History / diff

  • SHOW

Special:RecentChanges

Special:RecentChanges

Special:AllPages

Special:AllPages gives an alphabetical listing of all pages. It's a kind of index.

Special:AllPages

Redirect

Redirects add a bit of the thesaurus to the wiki. Redirects can be used to establish synonyms, and to specify a preferred title or term (the page that actually holds the content). Special pages (like the "index" Special:All pages) and functions like "Backlinks" respect redirects and generally show the preferred title.

Moving pages

Move = (Copy and Paste) + (Redirect or Delete)

Move lets you effectively rename a page. By default, a move shifts content to the new title, and creates a redirect from the old title to the new one; in this way links to the old page will not break and will simply redirect to the correct page. In this way, a move is consistent with the wiki attitude of keeping history visible.

Deleting pages

Deleting a page is also possible. Note however that a delete is simply a way of marking that page as deleted. While the title will no longer appear in search results or in Special:All pages, the page history can still be viewed.

Notes / Citations

HTML

  • Simple tags are allowed by default, all tags when enabled
  • HTML comments work too! <!-- this is a comment -->

nowiki

HTML like tag that allows to include stuff that the wiki won't touch

Transclusion

{{:Name of page}}

Templates

Template = Transclusion + Substitution

  • Parameters, Named and positional (demo)
  • Parser Functions?
  • includeonly, ...

Categories

  • [[Category: People]]
  • Categories can themselves be tagged with categories to create hierarchies
  • Extensions exist to make working with (hierarchical) categories easier

To link to a category page without tagging the current page with that category, add a colon at the start.

Variables

  • {{CURRENTPAGE}}
  • {{CURRENTTIME}}
  • {{CURRENTUSER}}
  • {{NUMBEROFPAGES}} ?

http://www.mediawiki.org/wiki/Help:Magic_words#Variables

Behavior switches

"Switches"

  • __NOTOC__
  • __NOINDEX__
  • __HIDDENCAT__ : don't show this category

Switches with parameters:

  • DISPLAYTITLE: Set the proper title
  • DEFAULTSORT: Tell the wiki how to order the page title

{{DISPLAYTITLE:cat}}

{{DEFAULTSORT:Wales, Jimmy}}

Widgets

Hacking MediaWiki

LINK TO PRESENTATION

  • Userscripts as a quick way to start hacking MW.

Python: mwclient

mwclient is a python library that gives convenient access to a wiki (via the Mediawiki API)

mwmclient can be installed with pip.

pip install mwclient
site = mwclient.Site("http://pzwart3.wdka.hro.nl", path="/mediawiki")
for page in site.allpages(namespace="Main", limit=500):
    print page.page_title, page.exists
imgfile = open(imgpath, "rb")
site.upload(file=imgfile, filename=page.page_title)
imgfile.close()
  1. Koren, p. 2
  2. Koren, p. 3