Eric Hopper's Technical Stuff


These are my writings on technical topics, and links to projects I'm working on. Some of them are essays about how I think things should be done. Some of them are documentation.

Anyway, they're clearly labelled. Have fun!

Good stuff written by others

Consulting services

I offer consulting services.

Software written by (mostly) me

I also have bunches of various pieces of software I've written. Most of them are rough hewn scripts. Some of them are packages I maintain carefully.

I've begun trying to serve up as much of my Open Source licensed source code as possible via Mercurial repositories. These can be found at:

A C++ library for handling asynchronous behavior, most especially inter-process communication. It encourages structuring your program as a series of small modules the perform independent tasks. If C++ had closures, modules would probably be closures. The event system is a good cooperative multithreading model. A lot of the different pieces of this system can be picked up and used independently.
CAKE (Key Addressed Crypto Encapsulation)
A bunch of Python and C++ code tied together by Swig that implements a new cryptography protocol in which all messages are addressed to public keys.
A few small Python scripts that rely on Python 2.5 and python-openid to implement a very minimal test Open ID consumer and a very minimal test Open ID server. This is good for testing your own programs that use Open ID or for understanding how to make your programs use Open ID.
Deliver Maildir
A small program to reliably and correctly deliver stdin to a Maildir directory. You must read the documentation in order to use this program properly. Trying to use it without reading the documentation will result in no mail being delivered.
A bunch of Java applets
I wrote when I was experimenting with Java Beans and Java applets. I still think that J2EE and other server-side Java efforts are slow, bloated pieces of garbage. If you want to have a scripting language server side, use Python.
A small shell script to find all executables using deleted files.
Under Unix/Linux, when you delete a file, it doesn't go away until the last process that has it open closes it. This means that if you upgrade, say, a shared library, all the currently running programs keep using the old version. It would be nice to know which programs those were, and that's what this script is for. It's Linux specific as it uses the /proc filesystem.

It's a small Python script that checks a file containing a list of rpms against rpms in a list of directories giving rpms who's versions differ, preferring the earliest directory. This is because I mirror the updates directory for RedHat, and they have architecture directories. I want to update to the best RPM for my system, so I want to check to see if there are any athlon RPMs before checking for i386 ones.

A useful change here would be to only list things who's version in the directories was newer.

Typical usage line: <(rpm -qa) athlon i686 i586 i386

Of course, it is now completely obsoleted by yum, which is a much, much better system.
It's a python script to convert XML formatted log entries from the Subversion change control system into ChangeLog entries.
A set of python scripts that wrap the CRM 114 discriminator matching engine in an attempt to detect spam. I think there is an actual final solution to the spam problem, and this has nothing to do with it. But, until the real solution happens, this is an interesting and fun substitute.


I also package a few software packages into RPMs. These are all packages I either create or use.

Eric Hopper My homepage

Valid XHTML 1.0! Valid CSS!