Have you hugged your AOLserver today?

This site runs on Web server software called AOLserver. Haven’t heard of it? A lot of people haven’t. But they’ve probably been served pages by it. Apple.netscape.com, the default page on Apple’s Safari Web browser, is served by AOLserver 3.5.5. You can tell it’s AOLserver from the “.adp” extensions in the URLs. Other sites using AOLserver: AOL.Com, Mapquest, Digital City, photo.net.
I learned how to work with AOLserver back at ArsDigita. Once upon a time, back when most of the world was programming in CGI, philg built his business on AOLserver because it had an embedded, multi-threaded script interpreter and database connection pooling. Reasons you might want these are covered here.
Since then I’ve tooled around in lots of other environments. And each time I come back to AOLserver I kind of fall in love again. Embedded scripting and connection pooling may be old hat today, but AOLserver still sets itself apart from the pack in a few notable ways.
For example, most Web environments still don’t ship with an embedded task scheduler. The OSes can do it, e.g. Windows Scheduled Tasks and *nix cron, but the scheduled jobs run outside the server and therefore don’t have access to its apis or memory. This tends to add overhead when you want to run regular tasks that clear internal caches or talk to an application database. Of course you can still accomplish these things but it’s overhead and everybody does it in different, non-standard ways. Yuk. AOLserver programmers use ns_schedule_proc, ns_schedule_daily and ns_schedule_weekly.
Another thing that’s just wonderfully simple is database connectivity. When you want to pull database data into a Web script, you typically have to: a) fetch a database connection, b) define a query, c) assign parameters to the query, d) issue the query, e) fetch a row result, f) assign column variables in the local environment. Each platform has its shortcuts, but with few exceptions they still require 2x to 10x more code than AOLserver-powered OpenACS:

set title "Late Night With Conan  O'Brien"

db_foreach get_matches {
select description, tvchannel, when_start, when_stop
where title = :title
} {
do_something_with $title $description $tvchannel
do_something_else_with $when_start $when_stop

The colon syntax in “:title”, btw, ensures that the single-quote in “Conan O’Brien” doesn’t look to the database like a SQL string boundary, a well-known source of syntax errors and security holes.
A final nugget is the “master template” capability that Karl Goldstein and team programmed into ACS a number of years ago. This lets you define a reusable template in a single file, using a placeholder for the page-specific embedded stuff. Sometimes when doing layout, you want a bird’s eye view of the whole page. Master templates give you this, separate header and footer files don’t. Many scripting environments can do master templates, but last time I checked this was close to impossible in ASP.NET.
So I discovered not too long ago that Frontier can do all of these things too: task scheduling, simple db connectivity and templating. Database connectivity with Frontier is superlatively easy because all variables are db-backed by default. As Emeril would put it, Bam! Frontier can do a lot of other amazing stuff as well, but that’s a subject for a different post.
Anyway, if you use AOLserver, give it a hug today. It was a fabulous piece of software when AOL bought it from NaviSoft back in 1994 (ten years ago!), and it still is.

Yep, MT-Blacklist *is* my friend. When one of my posts receives a comment or trackback, I get an email, which now contains a “de-spam” hyperlink. MT-Blacklist provides a bunch of powerful de-spamming tools including one-click deletion of all comments containing known spammer URLs or originating from a particular IP address. I’m so happy. But what really surprises me is that this incredible innovation came from a third party as opposed to a tool vendor. If I were Six Apart I’d be taking a serious look at trying to convince Jay Allen to let me bundle his product with mine.

So my weblog is getting hit by a slow-moving, multi-ip address using comment robot. Ugh. I suppose I could try to dream up a fancy anti-spam tactic and spend dozens of hours coding it. But it only takes about 5 minutes to delete 30 comments, so the spam is annoying but little more. The robot is still posting every ten minutes or so, btw. I went through Movable Type’s menus, looking for a “disable all comments” setting, but there doesn’t appear to be one. I may have to use brute force, and temporarily delete my mt-comments.cgi file.

A new SYO App: Subscriptions Like Mine. It looks for readers whose subscription lists are similar to a particular individual’s. The results are weighted by a “strength” measure that inversely weights the popularity of the feed, so you can find people with similarly obscure tastes, and also tracks the number of overlaps as a fraction of total subscriptions, so that Jay McCarthy isn’t automatically everyone’s friend (though he does show up quite a bit :-).