I've written some code over the years that I can publish.
This is generally just fun little stuff, or experiments.
Use at your own risk.
No fair making fun of it unless you post the code that
you wrote (up to) ten years ago.
Finds inverses in rings of integers, if they exist.
- Tree Pattern Matcher Generator
This is the code implementing
the ideas (and providing the benchmarks for) my 1987 POPL paper.
- Graph / table compress
This is an experiment testing a somewhat
lame heuristic for compressing the indexing tables from the tree pattern-matcher
generator with run-length-encoding.
- Generic C hash table
This generic hash table has probably
seen wider use than any other piece of code that I have written. It differs from the
standard presentation of hash tables in that it maps "things" into small integers (starting
at one, of course, and increasing upwards) which then makes creation of secondary
sets and secondary attributes about as easy as falling off a log.
- Manipulation of polynomials in Galois field GF(2N)
This is an experiment in manipulating and generating polynomials in GF(2N).
Primes in that fields are useful for making good feedback-shift-registers.
- Java Math.sin tester
Hans Boehm's Constructive Reals package
to evaluate the quality of Math.sin on a Java platform.
- A little runner/wrapper/logger
help in deciphering the behavior of programs that fire up lots of
processes. This way, if a one program invokes another and you
want to know how it is doing it (what parameters) you can capture
- Copy files from tapes
I bought a QIC tape drive on EBay to help unload personal
files from previous jobs. I wrote this program to copy
the files (one at a time) from the tape to disk, for further
processing with Cygwin tools (e.g., tar). Note, on
Windows 2000 this is a "legacy" application, and to read
from the tape drive you must first disable Removable Storage
Manager (RSM) for the drive. To do this, go to (are you ready?)
Control Panel ->
Administrative Tools ->
Computer Management ->
Removable Storage ->
Physical Locations ->
Tape Device ->
Right Click ->
and uncheck "Enable Library" and "Perform Full Inventory on Mount Failure".
I would have modified the program to play nice with RSM if anyone
had told me how, but they did not, and this worked instead.
- Generate a web site
The original motivation for writing this was that
my sister-in-law, an art dealer, wanted to put together
a web site, and she needed to be able to easily generate
and maintain pages for displaying and navigating pictures
of art. It also works for pictures of kids, all the
attachments in my mailbox, etc. Of course, there's no
documentation, at least not yet, and she sensibly chose
to hire a professional, who did an excellent job.
- Join Spread Sheets
My wife had multiple, related spread sheets that she needed converted into a
single large spreadsheet. That is, she needed a database join, but the tools
she had weren't interested in giving her that ability. This Java program
reads in two spreadsheets in tab-separated format, and two columns to join on,
and produces their join, suppressing identical and empty columns, and also
producing a difference file containing any extra rows from the second file.
- Fields to SpreadSheet
One of my wife's colleagues had some useful data in a Lotus Notes database,
and wanted it rendered into an analyzable (Excel, SPSS) format. This program
takes the "Structured text" representation of an Louts database and converts it
to a tab-separated format, roughly preserving the order of the fields (fields
appear in the order in which they were first encountered in the input).
It's a little hacky -- any non-space leading text followed by a colon gets
interpreted as a field. This turned out to be good enough.