81 hacks in an 81-day Summer of Hacking

Brilliant Jennifer Dewalt did “180 websites in 180 days”, which has been an inspiration to me ever since. So I’m trying something similar. My Sierpinski calendar has 81-day seasons, the current one of which (spring) ends on January 6th, and the following one of which (summer) runs from January 7th to March 27th. On each of those days, I will add a new DHTML hack to the list below. Topics I want to explore include zooming user interfaces, writing systems, topology optimization, secure multiparty computation, search engines, reverse engineering of junk hardware, portable offline reference material, multitouch interfaces, metrology, mechanical computation, maps, machine learning, linear and nonlinear feedback control, interactive data exploration, input methods for text, hardware synthesis and place-and-route, graphics rendering, GPGPU programming, digital signal processing, digital morphogenesis, decentralized mobile-code applications, deep learning neural networks, data visualization, data compression, constraint programming, computer music, computational complexity, caching, bootstrapping manufacturing, automatic differentiation, automated non-monotonic and probabilistic reasoning, automated digital fabrication, augmented-reality interfaces using off-the-shelf cellphones, array languages, archival virtual machines, and alternate-history retrogaming. I probably won’t get to them all.

Obviously the focus here is a bit different from Dewalt’s; my hack pages are not going to look as good as hers, and I’m trying to explore what kind of user experiences we could or should be creating, what role computers could or should play in our world, and what is possible with the things that are only now becoming possible, rather than seeking mastery of anything or making web “sites”. But the principle is the same: by keeping my expectations low about what I will get done each day, putting a hard time box on it, and having other people look at it, I encourage myself to make some progress each day.

I expect that most of the things I try will end up looking different from what I expected, and most of them will probably be kind of a disappointment. To me. But you’ll never know! You’ll just see what I did manage to achieve, rather than what I hoped for.

You can get a copy of the development history with git, if you have it installed:

git clone http://canonical.org/~kragen/sw/81hacks/


Lame leaf vein morphogenesis, 2016-01-15, because I left my charger at work and my battery ran out.

In-browser vector polygon editing with EPS export, 2016-01-14, a sort of code prototype for generating vector files for driving laser cutters.

Approximating an image with random hill-climbing polygons, 2016-01-13, where adding random solid-colored pentagons to a canvas may eventually result in some kind of approximation of a target image if you wait long enough.

Graphing with automatic differentiation, 2016-01-12, is a graphing RPN calculator with functions that performs forward-mode univariate automatic differentiation on them.

Heightfield embossing, 2016-01-11, animates a textured surface by doing an extremely simplified version of Lambertian rendering of a heightfield in changing light.

Engraving from the webcam, 2016-01-10, turns your webcam image into wavy lines of varying thicknesses.

Drawing with the webcam, 2016-01-09, lets you draw lines with a webcam.

Coupled-oscillator-array morphogenesis, 2016-01-08, is an exploration of a very simple kind of local coupling which gradually gives rise to self-organization over time.

Interactive K-means visualization, 2016-01-07. This doesn't do the standard random restarting thing, so it can sometimes get stuck in local optima.


Simple cellphone accelerometer VR, 2015-12-30, rotates a three-dimensional scene according to accelerometer input, or continuously if there is none.

Idea generator, 2015-12-29, combines pairs of topics from the above in order to generate inspiration.