An esoteric language with silly features.

Daisy Bell

The iconic Daisy Bell played in an ever-expanding collection of languages.



Projects involving electrons. But all projects involve electrons...

Laser Projector

Simple Arduino-controlled laser projector, a group project for an embedded systems class. Because lasers.

7400 Digital Clock

Digital clock with 7400 series core logic, built for a school assignment. Time, date, alarm, temperature, and touch sensing!


A musical controller for live instrumentation based on optical sensing. Because lasers.

Web Audio

Web Audio

Audio on the web is intriguing, especially given the recent developments in the Web Audio API.

Synth Zero

A demo of the Web Audio API. Multi-oscillator, full polyphony, with a seriously large effects chain and completely customizable parameters. Takes input from QWERTY keyboard.

Synth Uno

Multi-oscillator, full polyphony, simple effects chain, and onscreen keyboard with support for QWERTY keyboard.

FM Synth

Basic two-operator FM synthesizer with custom waveforms, single oscillator, and visualization. MIDI input is currently broken.

Custom Waveforms Demo

Demo of custom waveforms in Web Audio using setPeriodicWave() and createPeriodicWave(), complete with variable-trigger oscilloscope for wave visualization. Also has a few different keymap schemes.


Lindenmayer Systems

Lindenmayer systems (commonly 'L-systems') are a type of formal grammar that can be used to create intricate geometric structures, often displaying fractal characteristics.

HTML5 Canvas-based L-system

With the help of the canvas element in HTML5, the geometric structures generated by an L-system are rendered to an image.

L-system Documentation

Documentation and implementation notes.

Older L-system

An older L-system that lacks the stunning UI, speed improvements, and extended functionality of its successor.

3D & WebGL

3D Graphics with WebGL

Using three.js for WebGL-based 3D graphics in the browser. Note that cross-browser support is very inconsistent; these should all work on Chrome 32+.

dancer.js Waveform Visualiser

Using dancer.js and plotting waveform data in three dimensions.

dancer.js Basic Demo

Thanks to jsantell's dancer.js, there's an easy way to get FFT and waveform data in the browser.

Basic three.js Demo

A simple demo of three.js with basic meshes and lighting.



Canvas-based screensavers. I intend to eventually have some Quartz screensavers also.

Canvas-based Screensavers

These have served as a nice way to learn the HTML5 canvas API.