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]
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, see Wikipedia
- 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:AllPages
Special:AllPages gives an alphabetical listing of all pages. It's a kind of index.
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.
#REDIRECT [[Better 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.
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
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.
- See [[:Category:Fish]] produces Category:Fish.
Transclusion
{{:Name of page}}
Templates
Template = Transclusion + Substitution
- Parameters, Named and positional (demo)
- Parser Functions?
- includeonly, ...
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
http://www.mediawiki.org/wiki/File:How_to_hack_on_Wikipedia.pdf
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()