Jeremy's Free Software

Quick Links

For the impatient, this is a quick list of the most popular and/or interesting software I've written. A complete, annotated list of all my software is further down the page.

Why release free software?

I use free software for almost everything I do with computers, both personally and professionally. Over the years, I've found that freeware is almost always better than commercial equivalents. Even though commercial software has a lot of corporate money funding its development, it is usually written by rows of anonymous programmers in cubicles who are often just programming for the money and don't have very much emotional investment in the software they're writing. Freeware, on the other hand, is usually written by one person (or a small group) out of a pure motivation to actually solve a specific problem. Freeware writers do what they do for no reason other than out of a genuine desire to write the code they're writing. Also, freeware is much more personal: it is very strongly associated with the name of the author, so in most cases, the author is strongly motivated to release good code by a feeling of pride for his or her creation.

Because I use so much free software, I feel that is my responsibility to contribute free software to the community from which I take it. In that spirit, I try to make a lot of the software I've written publically available. Most of it is esoteric and will never reach a wide audience, but if even a single person finds any of it useful, then it was worth my time in releasing it.

I've written a lot of software over the years, some for business and some for pleasure. Some of it is large, complex, and well-documented; some represents the result of a quick, 1-hour hack. Most of it is written in C, C++, or Perl; some of the older software is in Pascal or even QuickBasic. I used to think that there was no point in spending my time indexing my software and making it available on the Internet -- after all, even if there were people who wanted to use some piece of code that I'd written, there was an amazingly small chance that they'd ever know my software existed, let alone ever be able to find it. That all changed with the advent of powerful Web-searching engines (such as my favorite, Google). Now, esoteric software that I put on the Web has a good chance of being found by someone who might need it.

Feel free to take and use anything you find here (and please write to me to let me know that you're using it). All of the software on this page can be downloaded from my FTP site. This software comes with NO WARRANTY of any kind. Unless otherwise indicated, all of this software is postcardware: if you use it, and you like it, please drop me a postcard and let me know!

You can jump to:

Sysadmin and Security Software
Miscallaneous Utilities
Teaching Projects
Business Ventures
Fun and Games
Software for the U.S. Government

System Administration and Security-Related Software

I've done my time as both an amateur and professional UNIX system administrator. No, I never want to do it again. This is one of the precious few jobs in which your employer shouldn't notice your job if you're doing it correctly and therefore thinks you aren't doing anything. You come in at 3AM to fix something so that no one ever realizes that it broke, and nary a word is said; your boss walks in one day and can't log in to his workstation, and all Hell breaks loose.
tcpflow (April 10, 1999; last updated February 28, 2001)
tcpflow is a program that captures data transmitted as part of TCP connections (flows), and stores it in a way that is convenient for protocol analysis or debugging.

mhsearch (December 16, 1997)
A Perl hack to scan a LAN for devices that are using more than one IP address (a multi-homed host). Useful if people are hogging IP addresses.

udpsend and udpsendraw (November 24, 1997)
Two small C programs to generate UDP/IP datagrams. I used this as a debugging and testing tool when our network was getting killed by InocuLAN broadcasts.

The gethostbyname() Exploit (November 18, 1996)
My one and only claim to pseudo-fame in the security community: a bug I found in the domain name resolution libraries of Solaris 2.5 that compromises root access for local (and possibly remote) users.

rkloffl and kloffld (November 1994)
A pair of small C programs for recording login information on a secured logging host.

inetdr (November 1994)
A modification of inetd (the Internet superserver daemon) to restrict logins to trusted sites, based on modifications by Andy Poling. Similar to the tcp_wrappers package.

Miscellaneous Utilities

Radiometrix RPC Radio Device Drivers (July 10, 2000)
Linux device drivers for the RPC (Radio Packet Controller) model of radio manufactured by Radiometrix. The RPC is a fairly low-power, self-contained, short-range, plug-on radio.

emlog (June 14, 2000; last updated August 13, 2001)
A Linux kernel module that makes it easy to access the most recent (and only the most recent) output from a process. It works just like "tail -f" on a log file, except that the storage required never grows.

parapin (March 30, 2000)
A C library for Linux for controlling individual pins of a PC Parallel port. This kind of control is very useful for electronics projects that use the PC's parallel port as a generic digital I/O interface.

quote (February 22, 2000; last updated September 27, 2000)
A Perl command-line utility for retrieving stock quotes from Yahoo! Finance.

ncstat (April 14, 1997)
A Perl script to generate activity statistics for sites using Mike Gleason's NcFTPd FTP server software.

hypermh (March 3, 1997)
A Perl front-end to hypermail to build web pages from mail archives in MH format. I wrote this script when I was setting up the CircleMUD mailing list archives.

toy compiler (Spring 1994)
A compiler for the "toy" language that uses C as a back-end. I wrote this for my Advanced Compiler Writing class taught by Scott Smith.

Hopefully coming soon to this web page...

Distributed Utilities using C-Linda
Text searching, compilation, and other functions distributed across a network of workstations using the C-Linda environment.

Computer Graphics Projects
Software implementing various graphics algorithms, including Bresenham's algorithm, perspective projection, hidden surface elimination, etc.

World Trade Center
An exciting X11-based multiplayer board game that was my final project for my C++ class in 1992.

Teaching Projects

I love teaching. It can be very satisfying to successfully organize a body of knowledge and present it in such a way that someone else can understand it. I've taught C and C++ countless times over the years, both as a teaching assistant while I was at Hopkins, and later as a seminar instructor at the NIH training program.
C++ For C Programmers: A 4-Day Seminar (April 1998)
This is a link to the home page of my 4-day C++ seminar that I taught four times while working at the NIH. The page has all of my class notes, example programs, and homework assignments (with solutions).

Hopefully coming soon to this web page...

Network Game Framework
One of the years that I taught C, the final project was a multiplayer network game. This framework allowed students to write the code for the framework without the gory details of network programming.

The TA's Friend
A set of Perl scripts to help TA's manage their students. The scripts simplify and automate the process of grading assignments, mailing grades and announcements to students, and reporting the section's grades to the professor.

Homework Assignments with Solutions
A number of homework assignments from previous classes that I've taught, along with full solutions.

Business Ventures

My friend Josh Adler and I often embarked on various successful and not-so-successful business ventures throughout high school and college. We were a good match: he's an excellent marketer and business manager with a good understanding of computers; I specialize in writing software and doing system integration, but with a good understanding of business and marketing. The programs below are the results of some of our past projects.
The Capital Search (Summer 1991)
A lightning-fast search engine I wrote to search The Capital Source, a lobbyist's phone book published by a company called The National Journal.

Hopefully coming soon to this web page...

The MatchMaker
A large software suite that was formerly used to manage my company, Scholastic Matchmakers, that specialized in running computer-matching games for high schools as a fundraiser.

Fun and Games

Boggle Solver (December 19, 1995; last updated 12 August 1999)
"There are worse things in life than making a mockery of an online Boggle game." --Josh Adler

CircleMUD (ongoing)
This is by far the most widely used piece of software that I've written! CircleMUD is my own derivative of DikuMUD. While Circle still retains the "look and feel" of the original DikuMUD, it has dozens of additional features and bug fixes, and much of the code has been rewritten to be more flexible, efficient, easy to understand, and easy to extend.

wld2html (c. 1993)
This was my first and only attempt to integrate MUDs with the web: a simple conversion of DikuMUD-format world files to a set of web pages.

Software written for the U.S. Government

I worked for the National Institutes of Health in Bethesda, MD every summer between 1990 and 1995, and full time from my graduation from Johns Hopkins in 1996 until July of 1998. For legal reasons, I can't allow anonymous downloads of this software, but most of it is still freely available. Just drop me a note telling me who you are and what you want to do with the software, and we can arrange something.
EVE -- The Electronic Viewbox Environment (ongoing)
My current project -- an ATM-based telemedicine environment to support remote consultation with voice, full-motion NTSC video, and diagnostic quality digital images with a shared cursor and tracing tools. (I have several papers describing the system.)

Temperature Monitor (June 16, 1997)
This is a small collection of Perl programs that we use to monitor the temperature in our lab by querying a digital thermometer connected to one of our UNIX boxes through the serial port.

Hopefully coming soon to this web page...

Data acquisition application; correlates position with time by querying a SMPTE Time Code Generator and an Ascension Technologies "Bird" position/orientation tracking system.

An application that scans the image of a 12-lead ECG with an 8-bit black and white scanner, finds the waveforms (ignoring gridlines, stray marks, etc.), and reconstructs the original voltages from the scanned waveform.

A search engine with a fancy GUI for querying a database of patients. The database was in a proprietary format, generated by the data acquisition software that came with with a treadmill the cardiology department used for testing patients.

A simple DOS program for creating a mirror of a directory tree on a different disk, or somewhere else on the same disk.

<-- Back to my home page
Last updated: August 1, 2002