Hi. The short version is that I am a trained physicist,
have worked professionally as a computational
neuroscientist and data analysis type guy, and more
recently have been working in software development (games,
art, web, backend), primarily in the languages Common
idioms and ideas from functional programming into my
In addition to the raw pleasures of making bits move around
by typing symbols at machines, I am now nursing a deep
interest in the process of developing software in teams.
I've become particularly interested in what interpersonal
dynamics enable successful software development. I've
By Example, by Gojko Adzic,
by Marty Cagan.
Although professional life often intervenes, I make an
attempt to stay creative. I occasionally write non-fiction,
and recently have been working on a large series
of generative art pieces in a
Sorry humans looking for love: I'm quite happily married.
Of course, most of my time is spent working
for Sensus, where I write
all sorts of code to command and control city lighting
systems over the air. The rest of the time I get up
-Projects & Code-
The Death Of The Corpse
Wizard is a minimalist roguelike arena game made with
Death Of The Corpse Wizard is under active development,
and you can play an experimental
MULDER is a generative art piece which automatically
reconstructs images related to 20th Century Fox's "The X
Files" with fragments of images of meat, dead leaves, and
Clocks is a
generative art project (HTML5/Canvas) which tries to
make interesting images out of non-random but complex
behaviors. The above image was produced by one such
clock. The clocks are written in...
has built-in support for modules, metaprogramming, and
extensible pattern matching. Gazelle's pattern matching
is based on...
the name of which derives from a Yiddish word for
matchmaker, is an ml-ish pattern-matching library for
Common Lisp. I maintain two versions of this library, one
in Common Lisp and one
Lisp. The latter provides special forms which
implement self-recursion without growing the stack (most
Common Lisp implementations are capable of tail call
elimination) and forms for doing computations inside
monads (I tend to put experimental code into the Emacs
Lisp version first).
For many years I was devoted to finding patterns in
neural spike trains produced by grazing bifurcations.
While it has been some time since I worked with that code,
Also of interest may be...
which is sort of like Gazelle for Matlab, a Lisp dialect
that targets Matlab and Matlab-like languages while
preserving syntactic features for making vector-based
programming easier. Parenlab is a bit idiosyncratic, so if
you are interested in using it, let me know and I will help
hosts all sorts of other fun stuff, including a giant pile
of emacs-lisp utilities,
Demon Name Generator (almost purely functional), some
persistent data structures for Emacs Lisp and Common Lisp, a
version of Parenscript that will run on Franz Lisp's Modern
Mode and behave about as well as that implies, and a bunch
of other cool stuff which is probably not clean enough to
talk up on its own.
(archive here) is
my blog. I don't have nearly as much time to write as I
did back in my languorous graduate student days, but I
still update it periodically. A Dorophone is not a super
easy to use phone which I am now dismayed to find exists,
but a communication device
or Ardor which uses water to transmit sound, since
electricity is taboo.