Table of Contents

1. Content

I have been blogging since 2007, but as things have moved on I have discarded posts pre-dating the last two blogs I have run. The content was stored in a variety of annoying formats, but the current contents of the site and its addresses will be stably maintained.

The writing and other content, except where otherwise attributed or sourced, is under my authorship (2009–present), including all moral rights granted by the Copyright, Design and Patents Act 1988. All page and article content with copyright owned by me I licence under a Creative Commons licence (by-3.0). This covers all HTML or other content files, generated and static, in particular any text which might be seen by a user with a graphical or console browser. The code running the site is licenced under a BSD licence. If in doubt, which licence applies to which files is indicated by COPYING files.

Unless otherwise indicated, “scripture quotations are from The Holy Bible, English Standard Version, copyright © 2001 by Crossway Bibles, a publishing ministry of Good News publishers. Used by permission. All rights reserved.”

2. Design

Before this system, the site was run on Wordpress, which comes built-in with some serious flaws, such that I found it unsuitable for both authoring and publishing a technical blog. This site is built on a small, end-to-end XML publishing system which was designed to overcome Wordpress’ deficiencies and allow for future work on a suitable authoring system. The main aims are to write and maintain only a minimal publishing system, reusing existing tools for authoring, transforming, and versioning content.

Apart from legacy content, the back-end design is a flow from flat DocBook files which get converted to tidied and outlined HTML5 on demand, and the pages are assembled from collections of the relevant resources by extensive XSLT. My MathML and SVG content is therefore seamlessly handled with safety. In addition to the XSLT layouts, PHP is used for flow logic. All the source code for the site can be browsed in the view-source display. LaTeX to MathML conversion is done using the itexToMML tool for speedy typing of equations.

The user-facing design uses recent web standards requiring a modern graphical or terminal browser. The layout is flexible according to the font and screen size, and the columns are reconfigured by CSS media queries to fit narrow or mobile screens. The article pages use horizontally scrolling columns when possible (in Firefox and Opera). The entire site is laid out on a 1.5em vertical grid, so that lines of text in adjacent columns line up (including some snippets of JavaScript to fiddle the spacing around equations and illustrations). The site colours are saturated hues, with the principal royal blue at 215° and complementary accents taken with the same temperature. The monogram is constructed from a tracing of Garamond with smoothed serifs.

Selected articles are available in PDF using PrinceXML. I love Prince, because it produces extremely high quality output, and closely mimics the site’s main style. The automatic maintenance scripts use PDFedit for some post-processing.

The main body is set in Computer Modern derivative Latin Modern, nominally 12/18pt. Additional symbols and ornaments come from various other open-rights fonts.

3. Future plans

3.1. General

I maintain this site in my free time, and spend much more time working on content than styling. This is as it should be, and I have no plans to make the system into a particular project, and am pleased so far that it is possible to knock together something really rather slick with minimal effort. It is well-architectured and has a fundamentally sound organisation into content-types with taxonomies and so on, but if I ever outgrow its current capabilities there are ways I have in mind to re-work it.

This is, to my knowledge, currently the only blog using DocBook on the internet, so feel free to browse the source code. If someone else has an interest in what I can only describe as a rather snazzy and convenient way of authoring and managing mixed format and future-proofed semantic content, I would be very glad to hear from interested people and put the code on github. With another contributor, I would be willing to improve the system, since it does fit into a currently empty niche on the CMS market. As already mentioned, please do have a look at the view-source and email me any comments you have.

3.2. Specific features

  1. Possibly turn on commenting. I am still unconvinced I want it, but I may cave in to the friends who have asked for it.

  2. Tidy up fonts. The LModern distribution I have and some of the other glyphs I use could do with a bit of web optimisation, as I have already done with the retraced swashes on the front page. The main work to do is slimming down the character count in some areas, auto-optimising the hinting, adding in some curly dingbats I want to use, and swapping in the lower-case numerals for browsers other than Fx.

  3. Think about more about accessibility links and browsing. The design is minimalist, though it does have enough links to navigate, but I feel I could perhaps present more links to old content.

  4. Code syntax highlighting. Lots of silly CSS to fiddle with and some PHP library to hack in there.

  5. Fixing the annoying scrolling behaviour when clicking on TOC or footnote links in column mode. Next up: handle tabbing better to allow mouse-free browsing of endnotes.

  6. A major-über plan is to write a stonking JavaScript library to handle layout. Browsers can’t be trusted to do nice line-breaking which minimises raggedness; nor do they place floats cleverly; nor do they handle column breaking well (WebKit very buggily, Opera with quite a few features but poor float handling; Fx stably but with non-existent break handling). Basically, the text layout problem is quite hard, dealing with at least line-breaks, hyphenation, justification, column-breaks, and tables and floats and footnotes in columnar material. This is all very performance sensitive (typically O(# words 2)O(\text{# words}^2)), so browsers will never get as pretty as here as static renderers like LaTeX or InDesign. If re-flow takes 0.25 s in LaTeX, that is considered pretty good, but those sorts of algorithms are totally unacceptable in browsers. Where the content is not dynamic however, a single-pass of the appropriate algorithms can be done at page load. JavaScript, with its excellent selector languages (XPath and CSS) and clear separation between content tree, and rendering and painting/font metrics, actually makes the ideal way to go about implementing this sort of thing, and could even outdo TeX, which, for legacy reasons, is forced to accommodate the memory and processing power of 100 MHz computers and so uses first-fit fill for handling page breaks. There are libraries which have made a start on using JavaScript for beautiful text layout, but the sort of highly elegant handling of columns, floats, footnotes, and so on, all together, is still an open problem. Tackling it would take a decent time commitment and resolve, because it’s pointless to write or use until you get to the point where performance, features, and lack of glitches exceed browsers’ native layout.

  7. The system I use for PDF generation is annoying and I may switch to something better. Using Prince is fine, but it doesn’t quite feel like the right way of doing things, and I have very little control over the output.

  8. Back-end work to refactor some code, making it much more generic moving some of bits specific to this site’s layout into configuration options, rather than baked in. Mostly done.

  9. A few more scripts to help me automate some bits and pieces of validation and management, and CSS generation.

  10. Unify my feeds. Having the GReader items in a separate feed feels clunky, and I could easily make a page which presents them more neatly than the default one offered by Google. New goal: document the logging in better, possibly add Facebook connect as well, and help users generate selective feeds. Various subscription options need to be better documented (as described).