(/bin/date > /dev/null)
Stuff I was/am working on. When working on my own I tend to work
on small projects to do simple tasks; the odds of sustaining energy
and interest until it's usable are much better.
Young programmers grow old, unless they die in the attempt. Hopefully
disk storage will grow old successfully with us -- our old source code
will be far better to inflict upon our hapless young descendants than
faded photographs. :)
- 2009 Glen Park Festival
- I did the website for the 2009 Glen Park Festival
- DYI Baby Mobile
- I made a baby mobile out of old CDRs,
and took a bunch of pictures.
- No Moving Parts
Lately (2002) I've taken an interest in electronic gadgets that
have no moving parts. Rationale: I've mucked about with computers
for about twenty years now. All along the way, things have broken;
most of what broke was stuff that had to move to stay working. Fans,
hard drive platters, the C64 1541 floppy drive, etc. Devices are
tending to add more breakable components (e.g. cryogenic
cooling devices) to keep others (e.g. comically fast CPUs) from
breaking. However, if you can build a device with a CPU that doesn't
put off a furnace's worth of waste heat, and without rotational,
random-directional storage, you can make something pretty reliable,
silent and power-efficient.
In one project along these lines, I took a TuxScreen (essentially a cheap
StrongARM-based desk phone with a bit of RAM, a bit of flash-ROM
and a Linux kernel) and made a firewall.
There's a fair chance that the page you're now reading passed
through it just a moment ago. :)
- I serve as the technical moderator for
one of Usenet's few surviving
sexuality forums. Most of this work involves building
software to make lives easier for legitimate users,
and other moderators, and harder for spammers. It also
means dealing with penis-enlargement
spam and WebTV users, two
of the more painful parts of the job.
- I'm a developer on the Debian project -- an enormous, vigorously
correct and perpetually unfinished (GNU/)Linux distribution. I
packages, though my major interest is in improving Debian as
a platform for embedded development, and possibly direct use as
an embedded OS.
- Qpsmtpd is an SMTP daemon implemented in Perl, which emphasizes
spam detection and rejection during the SMTP conversation. I've
written a number of plugins for qpsmtpd; some are here, others are in the main
distribution. The one I'm most proud of, check_earlytalker, was the
first (so far as I know) attempt to detect spambots who weren't
actually waiting for the SMTP prompts, and still gets a respectable
detection rate today.
- I was Undersecretary of Postal Lubrication for the
North Bay Linux Users' Group. Mostly that means I helped run
the installfests, helped run the servers and wrote whatever
code needed to be written to wrangle what needed to be
wrangled. I also provided valuable supplementary cynicism.
- A synthetic load generator for Linux systems -- lets you select
how much CPU, memory and/or disk activity you want a host to exhibit,
and tries to keep utilization at that level. Handy for dodging
certain types of budget audits. :)
- An automated, aggressive spambot poisoner, with some
nifty features. Recently posted to Slashdot, somewhat to the detriment of my
- A derivative of sugarplum intended for tarpitting
and otherwise hindering censorware spiders. Mainly a one-off
wild notion on which I don't really intend to follow up.
- Mayonnaise Jar
- A facetious distributed P2P backup system using spam as a conduit,
and spammers' databases as remote storage.
- A plugin for SpamAssassin to perform
frequency checks on punctiation appearing in mail, which seeks to
provide high-confidence detection of punctuation obfuscation without
needing to know the spammers' vocabulary in advance.
- A plugin for XMMS which adds
support for the XF86Audio keysyms -- with it, XMMS can make use
of those audio-control keys found on many modern keyboards.
- A match-finder for the Dominoes problem in computing theory.
The problem concerns the search for arrangements of a set of
symbolic pairs so that the concatenation of the two respective
elements of each tuple will be equal. It seemed easier to
write this than to solve a textbook exercise on paper, which was
the author's intention.
- Inflation Calculator
- A small contraption to plot the "value" of a US dollar over time
given the effects of inflation. I was curious one day as to how to
interpret a historical price in terms current dollars, and couldn't
find any immediately accessible references. Also, it allowed me to
give Google's charting API a try.
- Sample arithmetic lexer/parser
- At one point I wanted to teach myself about lex and yacc, and
started in the usual way by writing a calculator in them. While
learning I often wanted a running sample I could fiddle with,
since most introductions on the subject tend to leave out the
fiddly little details about what your main() is supposed to do and so
- A semiautonomous console application test harness, written
using perl5's Expect module, adding automatic computation of
input class cartesian-products, which simplifies the definition
of app tests to a little math rather than a lot of typing. The
name derives from "Gauntlet," the test environment used to develop
the first version of the OmniPage OCR software.
- I'm the unofficial (but first and sofar only) maintainer
of the Debian-Slink packages of
wonderful lisp-configured window manager.
[obsolete -- sawmill, now sawfish, was adopted into Debian
Potato, and Slink has happily been retired.]
- A lightweight, pretty-looking curses CD player application.
Written with non-X machines in mind; does
CDDB and SQL track
data loading in a light footprint. Written for Linux, though
it should be portable to other platforms. No longer
maintained, as there's seldom any demand for an app with
these particular specializations; also the code was a disgusting