Speech given at Deloitte tech conference


A few months ago, Deloitte, a large professional consultancy, invited me to speak at a conference held for their tech consultants in the Midwest region. I delivered this address on September 21st, 2007:

Good morning... I'm honored to be here. I'm Dave Eads. I am an activist, a programmer, and a designer. I'll tell you more about my story in a bit. First, a question...

In Steven King's excellent book "On Writing: A Memoir of the Craft", he concludes with his ultimate description of the writer's vocation:

"Writing," he says, "isn't about making money, getting famous, getting dates, ... or making friends. In the end, it's about enriching the lives of those who will read your work, and enriching your own life, as well. It's about getting up, getting well, and getting over. Getting happy, okay? Getting happy. ... Writing is magic, as much the water of life as any other creative art."



Though the visual tweaks are few, the plumbing on this site is completely new -- Drupal 5, with a lot more best practices, better code, and better templates. The process to get here highlights a few of the things that I love, and hate, about Drupal.

Recently, I've become somewhat enamored of Django. Django is like a hammer and a bucket of nails -- you pick them up, and build what you want. Drupal is like a car that you buy, or a house someone else built. You didn't have to build it, but you also don't get to pick where the cabinets go, and changing where they go might cost a few bucks and take a little time.

It is always nice to do it yourself if you want serious control. But it can be nice to go along for the ride, too.


Launching websites!

In the past three days, I've launched two sites that I designed and developed. The Experimental Station site has been a long time coming, a big ol' Drupal site for a wonderful cultural space on Chicago's south side.

I also managed somehow to get involved in some Kalven Report insanity with UChicagoSTAND.org, an online petition urging the University of Chicago to divest from its interests in Sudan. That site was a very short time coming -- I wrote the petition app and a simple CMS in Django in an approximately 36 hour window.

As always, I'm amazed by the generosity of the free software community. Projects like Django and Drupal give projects like these powerful, smart tools for doing awesome work online.


Exim 4 routers and transport for Sympa

Sympa is a nifty mailing list manager with a nice architecture for distributing list management duties and a solid web interface that I developed. This is a brief howto on integrating Exim4 and Sympa on a Debian-based distribution.

The problem

As with all mailing list managers, the MTA must be able to correctly route email intended for a list to the mailing list manager processing applications. Back in the bad old days on *NIX systems, this often meant creating mail aliases in /etc/aliases that routed mailing list messages to the list processing executables via a pipe, as in listname: "| /path/to/sympa/bin/queue listname@my.domain.org". This stinks because the piped command must run as the MTA's user and because this is a management nightmare and effectively means that users trsuted to edit /etc/aliases become a bottleneck to list creation.

A solution

If you are running Exim4 and Sympa, you can use two custom Exim4 routers and one transport to handle all Sympa traffic. This example assumes a Debian-based Exim4 + Sympa setup, but it should be easy to adapt to any other distribution by changing the paths to reflect the locations of the Sympa scripts on your system. For this guide, it is critical that all Sympa virtual robots, including the main/default virtual robot, have their own configuration and data directories.


Last night, I learned all about handling BitTorrent behind an IPCop box. We have multiple systems in our new apartment, and we wanted to be able to run BitTorrent clients on each system, but were having connectivity problems. Specifically, new connections to files we were seeding were getting dropped.

The problem

The basic problem is that while a firewall that uses NAT to turn one public facing IP into a network that multiple internal systems uses (one-to-many NAT) works fine for more or less stateless protocols such as HTTP, peer to peer protocols such as BitTorrent have problems. When an outside client wants to leech from my BitTorrent seed, how does it know to grab the torrent I'm seeding, rather than hitting my roommate's computer, which may or may not be seeding anything, much less the torrent in question?