Colophon
First published on . Last updated on .
Table of Contents
History
The first time I posted something resembling a colophon was in March 2007.
This website has existed, in some form or another, since 1997 or so. The software used to run this site has changed a number of times over the years. It was some kind of unholy Perl script way back in the day. In 2004 I started posting using a hand-written Atom feed. I switched to Wordpress in 2006, and then I switched again later that year, to custom software that used Atom Entry Documents as its backing store. I adopted the current unholy concoction of code in 2020.
Hosting
tess.oconnor.cx
is hosted on
trantor.cfhp.org
, a server running Apache on Debian. Its TLS cert comes from Let’s Encrypt.
Static site generator
Because I’m a fool who is entirely too opinionated about things, I wrote my own cold-blooded static site generator using an unholy combination of JavaScript (Node.js), Ninja, Python, Swift, and Zsh.
Backing store
New content is usually written in Markdown or HTML, though some posts are in more esoteric formats, like Bikeshed.) Old content is stored in a number of formats, depending on where it came from—much of it is imported:
- An earlier version of this site’s static generator used Atom Entry Documents as its backing store, so there’s a bunch of that still.
- Content imported for other sites and services—such as Twitter, ActivityPub (Mastodon), LiveJournal, Pownce, various Meta platforms (Facebook, Instagram, and Threads), is generally stored in JSON or XML files that contain whatever the site’s "download all your data" tool spat out.
- Several emails I CCed to my blog are stored in
.eml
files.
Publishing
On the static site generator’s first pass, it converts documents from all of the various backing store formats into HTML. This pass doesn’t have to run very often, because imported content doesn’t change all that much.
The HTML that comes out of the first pass is very generic—it doesn’t include things specific to the current site design. On the second pass, it alters all those HTML documents to be suitable for publication here. This is the phase where things like stylesheets and the site-wide masthead get added. I tweeted out the basic design philosophy back in 2010:
Instead of using templates to create transient HTML from your permanent content, infuse contingent markup into your permanent HTML.
There are several tasks that run after the second pass: the site’s Atom feed, sitemap, and the index of posts by tag all get generated then.
Markup and style
Elementa HTML non sunt multiplicanda praeter necessitatem.
My HTML style is sparse. I don’t put quotes around attribute values unless I have to. I don’t use end tags unless I have to. I don’t explicitly write out elements that the HTML parser will create for me (e.g. the <html>
, <head>
, and <body>
elements) unless I need to for some reason. (The markup served over the wire gets serialized from a DOM, so it doesn’t strongly resemble the way I actually write things.)
I try to avoid going overboard with CSS too. The colors tend to be close to the default UA stylesheet, though I do try to respect your system's dark mode setting by using the prefers-color-scheme
media feature. Links in dark mode are yellow and gold.
Most of this site is set in the Archivo, Chivo Mono, and Manuale variable fonts from Omnibus-Type.
I have scripts and styling in place to help me catch common authoring errors. For instance, empty figures get placeholder images automatically.
For more, see the custom elements and markup patterns I use on this site.
Content
Except where noted, I wrote and hold copyright to everything on this site. No large language models were used in its production.