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 Möller.
- 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.
- 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.
|