My Resume

You can view my official resume with all its pretty formatting, or read on for a little more detailed and practical description of what I know.

Technical

I run my own small linux server, with Apache, Postgres, Subversion, RRDtool, OpenSSH, and other semi useful tools. I do not have the resources to keep it properly secured though, so it is not exposed too much to the outside internet. My crappy residential DSL is not adequate enough for running a server anyway.

Software

I also have been know to write a bit of software now and then. Unfortunately, since I code full time, that does not leave me a lot of time and motivation for free lance projects. Some of my old, half-finished demo projects are in my programs section. My two most mature pieces of software are a web based picture gallery and the framework for this website, both described below

Gallery

Although there are a billion and one versions of picture gallery software freely available, none of them had all the options I desired so I rolled my own. Specifically I wanted to be able to keep track of the locations at which the pictures were taken, who was in them, and arranged in hierarchical albums. I wrote some Perl scripts mainly from scratch which accomplished this. All of the meta information for the pictures is stored in a backend Postgres database which is used to render all of the gallery's web pages. The code to generate the pages uses HTML::Template, which may not be the most efficient program, but it does a really good job of separating program logic and display code. No HTML is contained in the already unreadable perl source. The whole thing runs under mod_perl too, so it is decently fast on my old server.

I have stitched together some administration pages so I do not have to manually manipulate the database. They look pretty ugly and have plenty of rough edges, but they suffice for my own use.

I do not yet have the bandwidth to have the gallery available over the internet, so I leave you with some selected screen shots.

Album DisplayCalendar Display
Map

Using Google Maps to display location information.

Person Display

Website Management

Using FrontPage to make a website would be too easy, so I once again took my own road. Although there are also many different CMSs, none quite met all my needs. I liked the flexibility which dynamic pages provide, but did now want their overhead on a site which rarely changes. To achieve a slightly better solution, I store just the base content for each page and render them into static HTML pages with the correct headers and footers. So in essence a source directory from the website is 'compiled' into the final web pages suitable for a web server.

At its heart is an Ant script controlling everything. The main task is to take the text for every page, which is stored in a quasi-HTML file, and transform it into valid XHTML 1.1 and CSS using XSLT. This method allows for a uniform look and feel to be applied to the whole website, while still allowing for dynamic sections. For example, the path to the current webpage (displayed just underneath the logo at the top) is generated from a data file, independent of the physical directory layout. This data file is also used to generate links within the website that automatically update if a page moves, create the sitemap, and provide per page custom dictionaries for spell checking.

Another useful feature is image manipulation. When developing a webpage, every image is stored in its original form. Since these are often too large for practical use on a website, they are automatically scaled to something a little more web friendly for the live website. Thumbnails are created if necessary and the <img> tag is filled in with the correct height and width.

The Ant script also handles spelling checking (via Aspell), XHTML validity checking, validating links, generating a sitemap index, and deployment to a remote web server. I am even paranoid enough to store the whole thing in a Subversion repository so I can have history and saneness of configuration management.

Although definitely not perfect, this system provides some of the benefits of server generated pages, but none of the usual overhead. For sites which do not change very often, it seems like a good fit. I will eventually put a snapshot of the management scripts up for other people's reference, but I have no plans of polishing them into any kind of release.