Jeremy's Free Software
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.
- EmStar - software
for wireless sensor networks
- fusd - framework for implementing Linux
devices in user-space instead of as a kernel module
- tcpflow - TCP flow recorder used for
network debugging or learning about wire protocols
- CircleMUD - multi-user
network text adventure game
- quote - quick and simple Perl program for
getting stock quotes from the command line
- emlog - Linux kernel module that implements a
circular memory buffer for temporarily storing log messages
- parapin - Linux library for using a PC
parallel port as a general purpose I/O controller
- Boggle and Word Racer solver - tiny
utility that solves Boggle
boards; its web interface is inexplicably
used about 200-300 times every day
Why release free software?
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
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
Fun and Games
Software for the U.S. Government
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
- 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
- udpsend and udpsendraw (November 24,
- 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.
- 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
- 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
- ncstat (April 14, 1997)
- A Perl script to generate activity statistics for sites using Mike
Gleason's NcFTPd FTP server
- 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
- 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
- World Trade Center
- An exciting X11-based multiplayer board game that was my final
project for my C++ class in 1992.
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
- 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.
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
- 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
Matchmakers, that specialized in running computer-matching games
for high schools as a fundraiser.
- 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
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
- 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
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.
- ECG WCS
- 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