Site Design

The Pages

The site uses the ikiwiki "wiki compiler" written in perl. There are many custom plugins for ikiwiki which I wrote to make it do exactly what I want.

Some files are pre-generated before ikiwiki touches them. This is driven by make.

Dynamic content is generated with CGI scripts (including the ikiwiki.cgi script itself).

The site is run using an Apache web-server on a Ubuntu Linux server, using SSI

More details:

  • The navigation is generated by plugins and scripts using HTML::LinkList.
  • Text-to-HTML conversion is done with a plugin using txt2html.
  • PoD-to-HTML conversion is done with a plugin using pod2xhtml.
  • Site configuration data is set in a single site configuration file using a plugin which uses the Config::Context perl module.


I wrote a fair few plugins for IkiWiki to make the site do what I want.

* antispambot (conceals email addresses from spambots) * anypar (page templates for specific pages; uses field and concon plugins) * concon (Config::Context plugin; uses field plugin) * field (arbitrary meta-data for pages; make pages like records) * getfield (substitute fields variables) * handytoc (table of contents) * includepage (simplified version of inline plugin) * katspace (specialized variables etc for this site) * simpletrail (previous-next links for a group of pages) * pmap (pretty map; replace for IkiWiki map plugin) * pod (parse PoD format) * report (report generator; uses field plugin) * txt2html (parse .txt files with txt2html) * xhtm (replace IkiWiki html parser) * xslt (process XML data file with XSLT stylesheet and output the result) used by fandef, sns and stardig pages. * ymlfront (parse YAML format; uses field plugin) Some of the plugins I use, which were written by others: * album (gallery) * graphviz (diagrams) * mailbox (parses mbox format) * sortnaturally (enhanced sort)

Script-Generated Pages

A number of the pages on this site are pre-generated using other scripts.

The net-fic reviews uses the SQLite SQL database for their data, and are initially generated with my SQLite::Work perl module and scripts.

The tools pages are pre-processed with make targets to copy over the various tarballs from their respective source directories, and unpack the source files, so that the content of the tool page is exactly the same as the released version (rather than being my working copy). The documentation is then generated from the PoD in those files by the pod plugin.


Graphics were created using GIMP (for uncountable SFX), and Corel Draw 3.0 (for the original Refractions Logo), and ImageMagick (and Gimp) to convert old gifs to png files, and to resize photographs to be smaller.

More information about the title images can be found at Digital Art Notes.

The Layout

The content is separated from both the layout and the look; the initial HTML files have no layout information; that is added in the IkiWiki processing, and then enacted using CSS; there are separate CSS pages for layout and for "theme" (the colours, fonts, images).

The page design was inspired and abetted by various articles at A List Apart, the advice of Jakob Neilsen's column.

The Tools

I don't use none newfangled HTML editors, I use a text editor like I was born with. My preferred editor is Vim.

My reference bibles are Cascading Style Sheets : Designing for the Web (by the designers of CSS), HTML: The Definitive Guide, Cascading Style Sheets: The Definitive Guide, XSLT, Programming Perl, CGI Programming with Perl, The Perl Cookbook, Mastering Regular Expressions, (Gotta love O'Reilly!) and various reference web pages.

< About | Site FAQ >