work
I'm not currently looking, but here's my résumé.
software
Programs that I either use or wrote for other people's use.
- idel: A virtual machine for efficient cooperation of
mutually-suspicious mobile code modules.
- clickcheck: Lisp and
Python libraries for testing with random test-case generation.
- uts: A Scheme bytecode interpreter
I use for my personal scheming. It includes all of the R4RS
required procedures plus a few extras, like a debugger, yet
it's still very small and hackable. But it's not under
active development, and thus not recommended to others.
- consp: A multiuser dialect
of Scheme illustrating capability security.
- epan: Random
collection of code in E, including
Mark Miller's SmallCaps virtual
machine and my incomplete E compiler for it. Contributions welcome.
- expr: Evaluates arithmetic
expressions with variables, in Java.
There's a manual.
You may prefer the older version 1
for its smaller size; the newer version tries much harder to
give helpful error messages on bad inputs.
- tush: Literate testing for
shellscripts. Vaguely like doctest, UpDoc, and
FIT. More explanation.
- yabe: A Java bytecode emitter library. Comes with a Scheme
to JVM compiler descended from the `teeny' interpreter (see
'alg_gen' in the right column),
to test out the Java bytecode emission. (Check out Jscheme for a more
industrial-strength Scheme on Java.)
- vapour: I created a systems-programming dialect of Lisp for this
operating system that unfortunately is living
up to its name right now: the code's still unreleased.
- miasma: A machine-code
toolkit for x86 CPUs usable from C and Python, written in Scheme, extracted
from Vapour. With contributions by Brian Spilsbury.
- datastruct: Scheme data structures & algorithms. Includes purely
functional queues, priority queues (pairing heaps), and
unordered sets, plus mutable tries and Boyer-Moore-Horspool
string searching.
- bench: A multi-language set of tiny benchmarks that try to exercise
compilers in different ways. They're not a serious measure
of performance, but a first cut meant to winnow out
hopelessly slow systems quickly. Like the later Computer Language Shootout.
- req: A calculator programmable with rewrite rules. Very
old and another one of those programs I use daily but don't
recommend to others.
- nanocad: A free molecular modeler I contributed to.
- ridarama: Public-transit trip planning, with scope for lots more cool
stuff; this would be a good project for someone else to take
further.
- amazon rescuer: Takes the books from an Amazon wishlist and builds a new
wishlist page pointing to another site like
booksense.
- skwiki:
A Wiki server by Luke
Gorrie that runs Scheme code users can place inline on Wiki
pages. (My role was just design advice and some Scheme snippets.)
writings
personal
- contact: How to reach me, plus my PGP public key.
- books I like: Recommendations.
- sale: Books and stuff I used
to be selling (currently inactive).
- to read: Books I would like to check out but have not yet found.
- wry.me: My blog.
- livejournal: My online diary for regular people.
- advogato: Another one for free-software hackers.
- futurism: Some links about where we're going with technology in the
longer term.
- vitals: Random info about me
(somewhat outdated).
|
hacks
These I made more for fun or point-proving than utility.
- icbins: A self-hosting
Lisp-to-C compiler and interactive interpreter in about 10 pages of
code. No, not scrunched and obfuscated code. New: ichbins, a rewrite in 6 pages, sans
interpreter.
- hypercode: A HyperCard stack
prototyping some ideas about end-user programming.
- emacscard: A variation on
those ideas, in Emacs Lisp; one way to think of it is as a primitive
"spreadsheet for text". You can
browse the source online.
- scheme wiki: a
wiki that runs literate programs in Scheme. This is a bit like the
later Logo Wiki without
the graphics, or the earlier skwiki (at left) with better
modularity. Written in Python. Needs a real name and a server, but I hadn't
meant to release it yet.
- ikiwiki: A prototype webserver/Wiki in C. Makes its own code
publically editable. The Scheme wiki above is a more
interesting development of this.
- mixal: An assembler and interpreter for the MIX machine in Knuth's
The Art of Computer Programming. This code became the
starting point of GNU MDK.
- halp: Haskell Active Literate
Programming. Run your Haskell literate program as you're editing
it, with results inserted in place: a quickie hack in Elisp with Brandon Moore. A
more serious version of this ought to be pretty useful.
- plonk: A Java port of the bytecode engine of
uts. This was
the world's first full-scale Scheme for Java, but I considered
it too slow to be worth developing further. It's only known
to work in Java 1.0.
This all-Scheme version
of the engine also includes source for the bytecode compiler
and runtime.
- screenfuls: A `screenful' is the programming analog of
nanofiction: a
readable program that does something interesting and fits in
one screen. Send me more!
- lambda papers: code
from the Steele & Sussman papers on
Scheme running on a Common Lisp substrate.
- annotated rabbit: Guy Steele's
RABBIT
compiler, with extra notes I added while studying it.
- awklisp: A Lisp interpreter in Awk that ran faster than a commercially
available Basic interpreter at the time it was written.
Version 1.2 includes a contributed port to Perl with some
extra features.
- classfile: Parses and unparses Java classfiles. Written in Scheme.
- pisa: An instruction-level simulator for the MIT Pendulum
reversible computer,
in Scheme.
- doe: Yet another tiny
Emacs clone. While
even I don't use it (actually
I do use a version of it now, which I ought to upload), its
design and code influenced
Ermacs. There's
also a simpler
older version.
- bdd: Binary decision diagrams in Scheme.
- mlish: An infix syntax frontend for Scheme.
- indent: A more Python/Haskell-like syntax, using indentation in place
of parentheses. Also included are similar hacks by Paul
Fernhout and Egil Moeller.
- spelling: Corrects spelling using minimal edit distance from dictionary
words. Also in Scheme. Add
this code to
enumerate mangled
book titles like Nice Princes in Amber.
See also Peter
Norvig on spelling correction for a complementary
treatment. Both programs are short.
- toy compiler: My first compiler from a semi-real language to assembly code,
in SML. Based on ideas from Kelsey's ``A Correspondence
between Continuation Passing Style and Static Single
Assignment Form''.
- alg_gen: A variation on Will Ware's Algorithmic Generation
of Molecular Structures.
Includes a teeny Lisp in Java by
Luke Gorrie and
me. This wasn't meant as a fork in Ware's code so much as
``why don't you do it this way?''
- dcalc: A simplified C version of the Java expression calculator above, used by
the #C bot named algorithm.
See dcalc.h
and dcalc.c.
- lisp study: The result of my
participation in Erann Gat's
study
comparing Lisp programmers to C/C++/Java ones.
Peter Norvig also
tackled the problem later on, totally
kicking my butt.
- amoral carnage: The Lisp-study code was easily adapted to generate anagrams
instead of `phone-a-grams'. There are much fancier anagram
programs out there, but this one's short and simple and fast
enough.
- haste: My ICFP 2001 contest
entry. (You can find it in the results under `demoncrat'.)
Described here.
- icfp 1999: In 1999 I forgot the contest was coming up, wasted time
trying to assemble a team, and hacked up a fairly anemic
optimizer in Scheme. I was too embarrassed to submit it,
but from
the results
it looks like it would have placed decently. That's why I
went ahead and submitted my 2001 entry.
- factor: Factors numbers. Another ancient utility I call on
sometimes, that's too trivial to put under
`software'.
art
- deviantart: Digital
images created by interactive evolution.
- gallery: Earlier results from
the same program.
- evoart: My first efforts
in this line, including program source code.
|