software, hardware,
the maths, pictures,
sound, music, and text.
due to:

Steve Witham
Crazy putting together stuff all the time guy, viz.

see also:
my github projects

my Linkedin™ profile

toes first-- a blog about ways of thinking about the future.

April 2021:

"Binary Hyperbolic" Pairing Function
Another "hyperbolic" pairing function. This one gets reasonable run-time by bit-wrangling, although the shells are a little thick. Includes a tupling function a.k.a. list codec, tests, Python module, and explanatory notebook in pdf.

November 2020:

The Walrus Binary Entropy Coder
The Walrus coder has very nearly the same coding efficiency as arithmetic coders, the same latency, and the same API, while mapping symbols to bits in a very different way. Literate code with correctness and efficiency tests.

October 2020:

A Gaussian Cheat Sheet with Python
Basic information about Gaussian, a.k.a. normal, distribution functions, and where to find them in the Python libraries.

July 2020:

"Feathers" in the scatterplot of OEIS A001414
More pictures, and some code.

May 2020:

Torus Knot
Fixing a fragile demo of the Apple Grapher app.

Mar 2020:

Hyperbolic Pairing
A way to encode two numbers... in one number!

Feb 2014:

A command-line utility to combine PDF pages into a new PDF.

A sunflower growth animation in processing.js .

The Witham Button is Nigh.
A wireless button that triggers a configurable computer action.

Oct 2010:

Ramid II
Music notation output for the melody composer.

Aug 2010:

After Morning A Be To Got There's
A practical application of the EchoNest Remix API.

Mar 2010:

The 2% of make that does 50% of what I need (in 374 lines of Python)

Feb 2010:
A pure Python implementation of Daniel J. Bernstein's Salsa20 cipher.

Nov 2009:
A melody composer written in Python at Music Hackday Boston. music

Oct 2009:

Squozen Sort
The question is sometimes raised whether it's possible to sort a set of, say, one million thirty-two-bit numbers using only, say, two million bytes of memory.

Clumpy Heapsort
What if you laid out a heapsort heap differently to improve locality of reference?

Jan 2009:

Mounting Holes for the WET-11 Wireless Bridge
The Linksys WET-11 wireless bridge can't easily be mounted with status lights in front and the antenna pointing up. Holes in the back would help. Some disassembly required.

Oct 2008:

Hilbert Walk in other than 2D.
Python code and hopefully a clear explanation for an unexpectedly tricky task.

Sep 2008:

Iterated Complex Log
The ReportLab pdfgen library made it easy to produce this PDF picture in Python.

May 2008:

Microsoft BASIC Decoder
My BASIC interpreter from 1988 stopped working. I still want to be able to read my old programs. The decoder is written in Python.

Apr 2008:

Rounder Router
A "quasirandom" diffusion model by Jim Propp, illustrated with an applet, table, graph, code and audio. The page involves code in Processing (Java), Python, PHP and C.

Nov 2007:

2D Median applet
What's the generalization of the concept of the median to more than one dimension? This applet tries out one idea. Update: Now with two equivalent ideas! Recently learned this is called the geometric median.

Sketch of an on-line graph-connectedness algorithm
This is a data structure and "Ginsu Scrambled Eggs" algorithm for adding and removing arcs in a graph, and checking whether two nodes are in the same connected component, all quickly. It's not the fastest out there ( O(log*sqrt) vs. O(log^2) ), but it's simple if you understand 2D enfilades. (Written in 2005).

Apr 2007:

PyraQuant5 fractal music program
Here is the code and a writeup. You might like the "PyraQuant Theme."

Feb 2007:

"Information Overload" in the Headlines (a retro-update).
Two more anagrams of that phrase, in honor of the Boston Mooninite scare.

Steve Gray's Oval.
An oval or egg shape is like an ellipse, but with a fat end and a pointy end. What's the simplest oval? Some discussion and pictures.

Fun and problem with the asinh function.
You can make cool perspective pictures using the hyperbolic arc sine function. Also, a gnarly graph of a problem with a naive implementation of asinh.

Mar 2006:

Upgrading the disk in an old SCSI laptop.
I wanted something more than the 250 MB disk that was in my PowerBook 520c. Unfortunately, 2.5 inch SCSI disks with more space are hard to find. A story of time travel, cyborgization and a hero named Arnie.

Dec 2005:

Computer-Composed Theme Song and Ramblings
The directory now includes the code and a writeup, too.
Da Vinci-fied Affine Transform Fractal Applet
Generates random fractals whose arms are decorated with circles- within- circles-- like Da Vinci's man. Solves the smallest- circle- enclosing- three- transformed- versions- of- itself problem. Illustrations inspired by Samurai Jack and the B52s. Source code included. For the applet.

May 2005:

Another Escher Grid
With help from the "Escher and the Droste Effect" web site, a better approximation of one of M.C. Escher's sketches.

Mar 2005:

Mandala applet
I was looking at how an integerized rotation transformation behaves when you apply it repeatedly. That led to a program that draws a variety of kaleidoscopic patterns. A friend saw it and said, "It's Islamic!" Funny because I was going to call it "Alhambramatic." Source code! Source code!

Jan 2005:

Logitech PlayStation keyboard works with Mac
A $19 keyboard from Circuit City takes over after milk is spilled. Review, detailed comparison to the iBook keyboard, and praise for transparent duct tape.

Aug 2004:

Xanadu "Transclusion"
Short piece with diagrams about the main technical idea of Ted Nelson & friends' Xanadu hypertext system. Should mention and

Jun 2004:

Spam and Helplessness
A piece to the Hackers Conference list, about the "learned helplessness" phenomenon, attitudes toward spam, and sender-pays approaches to spam prevention in particular. Oh yeah, I coin the term "transitive seizure."

Dec 2003:

Happy Decemberween!
A Strongbad-themed display in a Cambridge, Mass. shop window.

Nov 2003:

Technology as Dribble Glass
People who feel guilty about not understanding modern technology are falling for a huge, not-funny practical joke.

Oct 2003:

The Jakks Atari TV Game
Ten games from the famous 1970s series, crammed into a joystick. Pictures of the innards: two tiny chips and a crystal. Technical questions this raises. A hack to make the color display right.

Aug 2003:

Finding the Cheapest Gas
A mathematical puzzle about the best strategy for finding cheap gas while traveling on a one-way street, including a simulation (source code included) to compare two strategies. In that connection...

Some quotes about Leibnitz's dream that someday philosophical arguments could be settled by an advanced sort of calculation that could be carried out by machine.

Jul 2003:

What Price Transhumanity?
A visual pun on the transhumanist urge to Become.

Jun 2003

Variation on a Grid by Escher
My first attempt to approximate a sketch of M.C. Escher by computer (source code included). The second, better attempt is here.

Apr 2003:

FastMech Mechanical Simulation
Applets demonstrating approaches to a mechanical simulation problem I'm working on. The first one is fun to watch, like a scene from The Andromeda Strain crossed with Alien. Source code for the applets is included.

Jan 2003:

Inside a Toaster Oven
Picture showing the surprising complexity of a modern toaster.

Anagrams for "Information Overload"
Including, e.g., "iron oven of Maladroit".

Older Stuff... Java applets

Anneal-- Crystalization or annealing by assigning random "energies" to local bit configurations. Boring results with interesting code.

dumbflops--a crude speed test.


ColorChart -- and the small graphics library it uses: DGeom2D.

Langton's Ant-- Speedy, industrious, pixel-sized artificial lifeform.


True BASIC programs

These programs are in True BASIC. You can run them on your PC or Mac with a free interpreter: Web Basic. On the download page there are instructions for setting up Web Basic as a helper application for your web browser. Download it! The extension for these files is ".tra", for "TRue App". If you don't like loading and running software from strangers, click the picture on the left to see a full-sized shot of the program in action.

-- This simulates plant tissue growth using a "Map-L System". Right now the "tissue" is a washrag-like shape, but it's fun to watch the cells divide and wobble and stretch as it grows. I'm hoping to eventually simulate leaves, but right now I'm working on speeding up the physics simulation. The whole method was taken from a paper by deBoer, Fracchia, and Prusinkiewicz in the proceedings of the second Artificial Life conference. The picture is of a late stage of its output. (The color of a cell just indicates the number of sides it has.)

maplsys.txt -- the source code for maplsys.tra.

angels.tra --This draws morphing fractals with color trails. After a while the screen looks like... an abstract expressionist painting... a flock of birds... cars driving on ethereal freeways at night (that's why I called it "City of Angels")... The original program, "IFS/Julia," was written by David H. Doff at Trinity College, Dublin, Ireland.

angels.txt -- the source code for angels.tra.

--The original of the ColorChart applet above. Run this to see how Web Basic treats colors on your computer. If you don't get a cute picture with 216 (6 x 6 x 6) *different* color swatches, the other Basic programs here might not produce great output.

colors.txt -- the source code for colors.tra.



Here are some short poems I wrote on my Apple Newton 110. The early Newton's handwriting recognition was slow and error-prone, so the game was to write short lines and fight with the Newton to correct them before I forgot what I'd intended to write.

Tell me if you've heard this one.