Eric's Recent Projects

Every so often I do something which strikes me as kind of cool. There are at least three reasons for undertaking a project. One is for the fun of doing it. Another is for the benefit I derive from the end product. And the third is for the benefit other people might derive from said end product. This page exists for the third purpose. Actually, it mostly exists for my own amusement. But I like to claim a higher purpose. And I do hope stuff proves to be useful. I may go digging around for older stuff, but for the moment, this page only lists relatively recent things.

Disclaimer: These are hacks, and I know it. There's little or no documentation, testing, or other quality software engineering going on here. That's OK by me, these are quick scratches for minor itches. I just don't want anyone to look at this and think this is the way I do serious work.

Subversion: Ensure Properties
This is a tool for manipulating Subversion properties. Several subversion properties e.g. svn:ignore are really lists of entries, but the command-line svn tools only provide for manipulating the whole list as a single value. This script lets you add (or remove) entries individually. Especially, you can ensure that particular files are ignored. The file ensure.py provides a basic command-line tool and several useful classes.
Linux at CU Boulder
This is mostly written in English, not code. If you're at the University of Colorado at Boulder, and you're trying to use a GNU/Linux system, this mini-tutorial may help. Some of it was a pain to figure out, so you might as well not have to do it to.
EIRS - Election Incident Reporting System
The Election Incident Reporting System is a joint project by a whole bunch of organizations to track - and respond to and hopefully correct - problems which occur in the current election. Unlike the rest of the stuff on this page, it's actually important, and I'm only playing a small role in it. But it's really cool, and you should know about it. Here's CPSR's press release.
Stacker
Stacker is another program that's grown out of teaching Programming Languages: It's a run-time stack drawing program. You give it a set of (possibly nested) sub-programs and a calling sequence, and you get out a picture of the stack at that moment in time.

Download stacker and play with it! Stacker actually produces a graph specification and then uses Graphviz to draw the actual images, and gv to display them, so you'll need to install both of those in order to use it.

EGAD! Eric's Grading Application Distribution
EGAD is a set of programs designed to help automate the process of grading assignments for a course. EGAD does not actually assign grades; it's sort of a poor man's work-flow management tool for grading.

I'm currently (meaning, in the fall of 2004) TAing an undergraduate programming languages course with eighty-odd students. With that many students, any automation is a welcome thing. EGAD started out as a handful of unrelated scripts, and it's being slowly mashed into uniformity.

Wireless Network Sign-on
This is a glorified wrapper around wget which performs web-based log-in and log-out operations for wireless network users. This script reads credentials from a configuration file, attempts to log in/out, and processes the resulting page. It's written for the University of Oregon wireless network, but it's probably a good start for other networks, too.

To perform the web operations, this script requires post operations and SSL. POST form submission is not in wget 1.8 (the most recent stable release as of 24 June 2004), so you'll need the CVS version. If you're using Debian GNU/Linux, you can get wget-cvs from the experimental "release". My current laptop is an Apple iBook with OS 10.3, so I built wget from source, as described in the script. Previously, when I had an IBM Thinkpad with Debian on in it, I had the networking scripts configured to call a wrapper script whenever the wireless card was ifconfig-ed. The wrapper used iwconfig from Jean Tourrilhes' wireless tools for Linux to get the network SSID, and called the predecessor to this script if it was "uowireless." If you have any suggestions on how to do this under OS X, please drop me a line!

Here are the relevant files:

Firefox Oxford English Dictionary Search
The Mozilla browsers (both Seamonkey and Firefox) support search plug-ins based on Apple's Sherlock standard. I've hacked up one for looking up words in the OED. This what Mozilla refers to as a semi-plugin because it just takes you to the search results page, rather than parsing the output and filling in the sidebar. Firefox doesn't have a sidebar, I don't really like it in Seamonkey anyway, and the OED's search output is a little bit ugly, so I haven't added support for that yet. Also, the plug-in's self-update fields point to the Mozilla project's main plug-in repository, but this plug-in hasn't been added yet (as of 17 Feb. 2004). I'm not aware of any problems arising from this, but caveat emptor.

Note that I use this from the University of Oregon which has a site-wide subscription to the OED. If you're not a subscriber, or if you have an individual subscription which requires you to authenticate yourself somehow, then this may not work for you. If you're in the latter category, please let me know how it works!

Here's the pseudo-xml source and here's some javascript to install it.

HTML Calendar (aka gsched2)
You'd think there were enough calendar applications out there to meet any reasonable need. And you'd be right. But for your unreasonable needs, here's a common LISP module for rendering a schedule, described as a list of activities, into a web page. It's got a lot of configurable parameters, especially if you use the make-schedule function instead of the wrapper make-page. The results of either are valid XHTML/CSS and many of the display attributes are controllable simply by providing your own style sheet without having to change the htmlcal code. This is done by using :afterstyles and a list of stylesheet URLs. These stylesheets are included after the default style and thus override it. As you might imagine, there's a corresponding :beforestyles key if you want to include style sheets which htmlcal should override.

Right now, you can write a small common LISP program, or directly invoke the htmlcal library, but I'm currently hacking up a wrapper program so you can use this from the command line like any other Unix tool. That said, I think the main strength of this software is that it's easily modifiable / extensible, which is only of use to you if you're willing to do some programming.

<un-named> version 0-point-diddly-squat
I was setting up an OpenBSD box to act as a NAT-ing router, firewall, DHCP server and internal DNS server for my home LAN the other day. In the course of doing so, I had to enter the same host information in the DNS configuration files, the DHCPD configurations file, and the PF routing rules, which seems wasteful and error-prone. I'm also learning Python because it's my team's language of choice for a current research project.

So, to get some practice playing with Python and to automate this task, I wrote a little tool to read host information out of one file and plug it into N other configuration files, each with its own syntax. Since its purpose is to generate all my configuration files, I called it GenItAll. The next morning, the error of my ways became apparent. I haven't thought of a better name yet, though, so it sticks for now. If you have a better idea — and any idea at all is surely better — let me know!

At this point, this program is less than entirely useful because it only generates the DHCPD configuration file, so the rest have to be done by hand. I post it because even in this primitive state I find it easier to edit the hosts file than the more verbose and easier to hose up dhcpd.conf. There are a few features of this program which strike me as reasonable:

Jardinains! Ports
Jardinains! is a lawn-gnome-filled Breakout derivative by Tom Darby. I'm working with him to develop versions for non-Windows operating systems. This is a project in progress, so I'll post further when there's something to show for it. Right now, you should just go find an unenlightened friend who's running Windows, and play on her or his computer.
The Goats Rapacious Greed Tracker
My favorite on-line comic, Goats has begun soliciting donations using Amazon.com's Honor System. I thought it would be fun to see a graph of their progress, so I wrote the Goats Rapacious Greed Tracker to keep and display a record. The page is written in TCL and uses the AOLserver and ArsDigita Community System APIs. The source code is now on-line. Here's goats-2.tcl which displays the main page, and here's goats-requery.tcl which queries Amazon for the data and puts it in the database.

Note: This is off line because the server (aka my personal workstation) is sitting in a box on a shelf in a basement in a house in Minnesota. Much to my chagrin, Carleton College did not elect to continue giving me bandwidth after I graduated.

Time and tide, as they say, wait for no man. Goats now has their own progress-tracking system, and this would be redundant. Also, they change their account number at Amazon now and then, and keeping up with that would be more maintenance than a why-the-hell-not hack really deserves. So off-line it shall stay.

Connect
Like any good programmer or sysadmin, I have accounts on way too many different servers. And it's a pain to remember, and type, my user name and the full machine name all the time. To reduce this problem, I wrote this connect script. Essentially, you tell it what host to connect to, and it parses a configuration file for the full domain name, user name, and connection protocol (eg. telnet, rsh, ssh).

There are two features which (in my mind) make it slightly more useful than it sounds: First, the configuration file is stored on the web so that the user only has to change it in one place. This eliminates the need to keep the configuration updated on zillions of different machines. This configuration file is encrypted to keep the contents (comparatively) safe despite it being available on the web. There are lots of reasons why a list of machines one has access to (and by extension, organizations one is affiliated with) could be sensitive. If nothing else, that information could give spammers and crackers a leg up. So encrypting it is a Good Thing (TM). The second nice feature is that you can define shorthand aliases for the host/user name pairs. This script requires OpenSSL or SSLeay for crypto, and wget to fetch the configuration.

If you want to use it yourself, here's a sample config file, and here's the tiny script I use to encrypt and upload the configuration file. There's no documentation, but the command line syntax is: connect alias. Of course, you'll probably want to change the URL where it looks for the config file, but that's not hard.

Academic Projects
Stuff I've done for classes or research should show up off my computer science home page.

This page uses Cascading Style Sheets, and may be aesthetically suboptimal on browsers not supporting CSS.

Valid XHTML 1.0!