About This Site

My Web site has been slowly evolving since 1996. It's not something I work on constantly; it's not even something I work on regularly. More than anything, this is a place for me to experiment and play with the behind-the-scenes programming; when I get bored, I can add useless new features that nobody cares about just because it's a personally interesting challenge.

Technical Info

Photo of sticker: #!/usr/bin/perl

Every page is generated on the fly by a CGI script written in Perl. The files that contain the content of the site are stored entirely separately from the files that determine the appearance of the different themes, and the CGI scripts combine the two to display any page with any theme. If changes are made to a page, only one file needs to be edited, and the changes affect that page with all themes. If I develop a new theme (which can take as little as an hour, if the necessary HTML code isn't too complex or too different from what I've already developed for other themes), I don't have to update any of the Web pages - the entire site instantly works with the new theme.

Sometimes what appears to be a directory containing pages is really just a script, and I've used some interesting Apache tricks to make it appear like a directory. Each CGI script calls functions in Perl modules I've written. These functions read the text content of the page, as well as the layout and theme information, and generate the HTML code to be returned to the browser.

Cookies are used to remember your theme preference and keep track of which random quotes you've seen, and also to help ensure the accuracy of the counter. The counter is somewhat inflated because for awhile I relied on cookies entirely for this, but that's fixed now. You'll get a new random quote if you exit your browser and return to the site later. If you believe cookies to be evil, well, get over it.

JavaScript is used to automatically select the default background in the Themes box when you choose a new theme. Now that I've come to understand CSS better (and browsers have come to support it better), I've finally gotten rid of the nasty JavaScript hacks I devised back in 2000, as well as the not-so-nasty status-bar messages from 1997.

This is version 5.0 of the site. I've rewritten most of the HTML code to be W3C standards-compliant, reorganized much of the Perl code to be cleaner and more organized, and added localization support. I've rewritten large chunks of the code, started using Object-Oriented Programming, and made some changes to the format of various data files. If you like playing in Perl, I've been releasing the source code to this site under the GPL; go take a look.

Why do I use Perl instead of PHP? Well, the first answer is that I learned Perl first, I'm much more familiar with it, and I'm too Lazy to switch to something else. The second answer is, from what I know of PHP (admittedly little, but I've used it for a couple of projects), Perl is vastly more powerful and flexible. The syntax may appear bizarre to the uninitiated, but once you're used to it, it's quite liberating.

I usually do all of my coding these days in BBEdit, which I have to say is the best text editor in existance. On occasion when I need to edit something and BB Edit isn't convenient, I use pico. I do not use any WYSIWYG HTML editors. I do my graphics in GraphicConverter, although some older graphics were done with Aldus SuperPaint. The site is hosted at SlickHosting.com, which is a Web hosting company my friend and I started together. If you're interested in Web hosting, check us out!

History of the Site

To put everything in perspective, let me take you through the history of this site. As you may have guessed, this is not something I threw together overnight.

I originally began working on my home page in 1996. Netscape 3.0 was just being released (I'd been using beta versions of it), but the dominant browser was Netscape 2.02 for Windows 3.1. Versions of Netscape prior to 3.0 on the Windows platform had an annoying quirk: although they worked fine with 256-color graphics, they would only handle 16 colors of text. Since that was the dominant browser, I chose a color scheme for my home page based on text and link colors that were selected from that palette. The Simple theme still uses those colors, although it's not exactly the original background.

In late 1998 I finally redid the layout of the site so everything was contained within a centered, fixed-width table. By this time I figured Netscape 4.x and MSIE 4.x were standard enough that I could do that. However, I used CGI scripts to check the browser version, and for older browsers, I also made the old format available. I even made a slightly modified version for Netscape 3, just because it couldn't do background graphics in table cells. The CGI scripts allowed me to create a single Web page that could be displayed differently on different browsers (rather than actually having three completely separate Web pages, all of which would have to be maintained together if any changes were made).

At the end of 1999, I reworked my CGI code to be much more flexible, allowing for multiple themes, not just three versions for different browser versions. I also improved the layout of the site by making a navigation bar on the right-hand side of the page. In keeping with the spirit of the second version of the site, there were still two themes used as the defaults for older (or simply unrecognized) browsers: Netscape 3.x defaulted to the Plain theme, and Netscape 2.x, Lynx and unrecognized browsers default to the Simple theme. I also maintained the approximate appearance of that second version in the form of the Classic theme. In Spring of 2001, I added the ability to change backgrounds independently of themes.

During the spring and summer of 2002, I began rewriting much of the back-end code. I labeled this version 4.0. I wanted to use interesting Apache tricks to allow for nice simple URLs, but in order to do that I had to have many different CGI scripts that could all render pages in the various themes. For that to work without driving myself completely mad, the code had to be far more modular than before. So I did a lot of cleanup and code reorganization, and released the source code under the GPL.

When I released the code, I knew I would need to write some documentation so other people could understand what was going on. I soon realized that it simply wouldn't be possible to document without a great deal of work - there was too much junk lying around that had been there for four years or more, gradually built upon and hacked together, with no real plan or design. Plus, I'd just learned how to make objects in Perl, and wanted to try out OOP. So, I started shuffling code around again, cleaning things up further, and also streamlining the way files are stored, where they are and what formats they're in.

It's now 2004, and in the last two years I've done a lot of work on cleaning up and organizing the code, trying to get rid of all the weird hacks I've added on over the years, getting things to make a little more sense. Version 5 is the culmination of that effort. I now use Cascading Stylesheets extensively, and all the HTML code is compliant with the World Wide Web Consortium's HTML 4.01 Transitional specification.

Why do I do all this? This site is my personal project, to give me something with which to stretch my limits in Web design and programming. Everything I do to improve it is a challenge for me. I get bored easily.

About the Themes

Here's the list, in alphabetical order.

Aqua is of course based on Mac OS X. This new version of the Aqua theme is specifically derived from Mac OS X 10.3 Panther, which I find less annoying than previous incarnations. On my site, this theme is created with transparent alpha-channel PNGs, which may not work in some browsers (*cough* Internet Explorer *cough*).

The Be theme is based on the discontinued BeOS. If you liked the BeOS, the OpenBeOS project may interest you.

The Bluecurve is RedHat's Gnome-based desktop. I've heard a lot of bad things about RedHat, and there's no way I'd put it on a server, but for a desktop system, I'm actually pretty impressed. If you're not a “power user”, and the included apps do what you need, I don't see why any Windows user couldn't make the switch pretty easily.

Chicago was the code-name for Windows 95 (which was originally to be called Windows 4.0, and released in the first half of 1994).

Classic is based on the second major revision of this site, circa 1999.

E is based on a theme for the Enlightenment window manager that I found at e.themes.org, with a background from digitalblasphemy. The new version of this theme uses a transparent PNG; previously I had used a dithered transparent GIF.

Hi-Tech is a theme that Apple developed for Mac OS 8.5, but did not include in the final shipping version. I suppose only Steve Jobs will ever know why that decision was made. I've tried to make a Gizmo theme as well, but it's rather complicated, and I gave up on it.

Luna is the default theme for Windows XP. It's even worse than Aqua used to be.

The NeXT theme is based on OpenStep (originally called NeXTStep). Apple bought the company and used OpenStep as the basis for Mac OS X. A lot has changed, but there's a lot of stuff in Mac OS X that an OpenStep user will recognize. WindowMaker is a window manager for X based on OpenStep.

Plain is derived from Platinum, but greatly simplified with a lot of the graphics removed. This was originally the default theme for Netscape 3, because it didn't use background graphics in tables, which Netscape 3 doesn't support. Since I now use CSS extensively, which Netscape 3 doesn't support either, there's not much point anymore. I may remove this theme someday.

Platinum is the main theme I used to design this layout. Many of the other themes were derived from Platinum, with replaced graphics and slight code changes. Platinum is the theme Apple developed originally for the failed Copland project and then released with Mac OS 8 in 1997.

System Seven is what the Mac OS looked like prior to Mac OS 8.

The Simple theme, as I've already mentioned, is designed for old or limited browsers such as Netscape 2 and Lynx. It works with anything, and vaguely resembles the original version of this site. I chose this color scheme because Netscape 2 for Windows only supported 16 colors of text, and that's what most people were using at the time, so I chose text and link colors from the Windows 16-color palette.

The Slashdot theme is modeled to look like Slashdot, a computer-related news site. A few people have asked why it says “blah blah blah” along the side, it's just there for the look. If you have ideas on how I should improve this theme, let me know.

I threw together the Terminal theme in a couple minutes just to show an old coworker how easily I could create new themes.

Watercolor was the theme used in early versions of Windows XP (code-named Whistler). Microsoft chose not to ship the theme with XP (mimicking Apple AGAIN), but WindowBlinds and Trillian both have Watercolor themes available.

Many of the backgrounds are included with Mac OS 9. The Classic background I drew in Aldus SuperPaint.

If you have an idea for an original theme you'd like to see (not all themes have to look like windows on a desktop!) let me know, and if you're running a system that I haven't represented here feel free to send me screen shots (preferably PNG or zipped/stuffed PICT or BMP, rather than a lossy format like JPEG).