site history

this is the 5th iteration of numist.net, and the second with a design I actually liked. unfortunately the other design I was satisfied with was written when I was 10, so I have no real history to share.
you didn't miss much.

the last version of numist.net was thrown away in around 2006 or so. I've come back to hosting myself because of a dissatisfaction with blogging software, both in user interface and in the creative process. I won't claim that this is a better architecture, but the goal is to lower the barrier between having a thought and sharing it, and this works for me.

about me

I'm a Canadian in the San Francisco bay area. I work for vmware on the USB subsystem and its related virtual devices. I suspect they keep me around because I'm good for morale. I live with 4 other vmwarites (though they are on a different team) and my partner Cindy.

for fun I hack up hare-brained projects as they strike me, only a few of which have any staying power. the oldest project still under active development is this might be offensive, the oldest that's still running is probably my blog aggregator for #sdcolleges.

I love to learn, but seldom find make the time to read a real book. I learn best from people. I'm equally comfortable with a wrench, keyboard, axe, rifle, steering wheel, screwdriver, soldering iron, camera, handlebar, reign, knife, tiller, or beer in my hand, though I'm by no means an expert with any of them.

In the past I've worked as a bus boy, cook, salesman, mechanic, software QA, and software developer. I've cleaned toilets for minimum wage in New York and I've flown a Cessna 172 on a 5 hour lunch from SMO → SBA → SMO. I have never been unhappy with my job, and I have no regrets in life.

the only things that bother me are anti-intellectualism and disrespect. I'm constantly amazed at people trying to be ignorant or going out of their way to degrade others.

out of habit I use serial commas and British English. as the grandson of an English teacher and the partner of a linguist I tend to be pedantic about language, so please report any errors you find.

colophon

the design of this blog is based heavily on andre torrez' blog, though I saw the icon set first on FilePile. andre was not just permissive, but surprisingly encouraging as I plundered his design. other inspiration came from The Ministry of Type, Michael Sippey, this might be offensive, and Mail.app.

on the right platforms, this site uses Monaco for code and fixed-width text, Georgia for timestamps, and Helvetica for everything else.

the backend of this site is entirely custom-built, and I call it Composing Stick, after the tool in typesetting. here's how it works:

create a post with the shell script blog-new and a directory is prepared for it containing everything you need:

post-directory
post.html
tags.txt

posts.html is a snippet of almost-HTML to be wrapped in a post container when published.
the engine understands a few macros:

  • text enclosed in a <ref> tag is an immediate footnote, <ref label="foo" /> is a footnote with text defined elsewhere in the post, itself referenced by its label, and <ref label="foo">bar</ref> defines the footnote text for the label (and does not emit a footnote marker).
  • the string local:// is replaced with the path to the post's directory, so images for the post can live next to the post html
  • ordinal suffixes are superscripted automatically
  • the macro tag <caption> is converted into the appropriately classed div

tags.txt contains a newline-separated list of all available tags. available tags are defined by the filenames of the icon files in images/tags: if the image doesn't exist, the tag doesn't exist. delete the ones that don't apply and you're done.

optionally you can add a timestamp.txt file to your directory. it should contain an absolute date, and the format is not strict. it will recognize 2009-9-10 22:32:32, Thu Sep 10 22:32:32 PDT 2009, but it won't recognize "my 33rd birthday". if it doesn't have a time in it, this file should not exist and will be set automatically when you publish your post.

if you are posting images or other local media in your post, they should go in this directory as well. in post.html, refer to them as local://filename.ext and the engine will do the right thing

if your EDITOR environment variable is set, then the blog-new script will open the new post folder so you can start writing immediately.

run the shell script blog-preview and a new file is added to your post's data folder named preview.html. what you see is what you will get when you publish.

once it's time to publish, run the shell script blog-publish and the engine will rebuild the index, feed, browse page, each affected tag page, and construct your post's page. if you make any changes to your post, just run blog-publish again.

behind the scenes, the engine is just some shell scripts, PHP, and a SQLite database. while the database is not strictly necessary if you are only generating static pages, it simplifies the data model (and, by extension, the engine code) and allows for your blog to have dynamic features if you want them.

the source code to Composing Stick is available via Subversion at:
svn://svn.numist.net/misc/trunk/composing-stick

share and enjoy

site content copyrighted under a Creative Commons Attribution-Noncommercial license

source code featured in posts is released to the public domain unless otherwise noted.