The principal raison d'être for this website is so that I can play around with web programming technology. Which goes some way towards excusing its weedy content. These pages summarise some of the goings-on behind the scenes. None of this is highly sophisticated—I'm only a hobbyist dabbler—but some of the tips and tricks might be of interest.
All of the techniques discussed here are actually in use on my webpages here or other pages I have built. All the examples are real examples. That's why I hope they will be useful to you. These pages are not intended to be a comprehensive source of information on the techniques discussed: there are much better sources of that, some of which I try to link to in the Links section.
I have been an almost daily user of the World Wide Web since about 1993, and an Internet user before that. As I write that is a timespan of over a decade: short by human standards, but several generations for the Web. Over that time I have seen dozens of browsers come and go, revision after revision of the HTML specifications, and any number of new webpage technologies and proprietary browser extensions.
The prejudices which pervade these pages arise from this long exposure to the Web, and the frequently frustrating and challenging experience surfing has now become. So, my first obsession is with web standards. My second is a corollary of the first, a drive for accessibility.
HTML and CSS are fine for delivering static content to peoples' web-browsers. It's much more fun, however, to generate web pages dynamically.
Some of my pages are dynamically generated for trivial reasons: the date stamp in the title of the "who am I?" page changes with each access; the title of my homepage changes according to whether you access it as www.edginet.org or ben.edgingtonfamily.org.
Some of my pages are dynamically generated for easy maintenance. The What's New list appears on the homepage as well as having a more comprehensive page of its own. Rather that maintain the list separately on each page I create a single list which is read by the scripts that generate each page. My sermon pages are dynamically generated to make adding a new sermon as straightforward as possible. The page you are reading is dynamically generated so that I can include the title, index, navigation, footer etc. on each of pages without duplicating all the code. In fact, the page-index is automatically generated for even easier maintenance (see the server-side XSLT section for details).
Some of my pages are dynamically generated because they do interesting things not possible with static HTML. The M'Cheyne Bible Calendar is the most sophisticated script on the site, with output that changes daily. The HTTP header viewer processes a form and returns the result. And although it would be possible to implement the GIF-server statically it would require over 100 million individual files, occupying some ten gigabytes of disk space. A single 2835 byte Perl script seems a sensible alternative 8^).