SKELETON CREW — SONG SKELETONS, BAR BY BAR
Skeleton Crew generates song skeletons: the form, the arrangement and the moments in between, laid out bar by bar as a flat graphic score. It’s a starting point for writing or producing when you know the vibe but not the shape.
ENCLOSURE WOODSHED — BEBOP GUITAR PRACTICE
Enclosure Woodshed is a practice book for jazz guitar enclosures, with every exercise written out as tab. The exercises are numbered E1, E2, E3… in practice order, most-played material first.
THE WIRE — A QUIET NEWS AGGREGATOR
The Wire pulls 19 high-trust newsrooms onto a single page. It polls every source once an hour into SQLite and shows the latest stories in one place.
LIESEL — A LOCAL-FIRST READER WITH RSVP
Liesel is a local-first web app for reading .txt and .epub documents, with RSVP (Rapid Serial Visual Presentation) as the flagship mode. Everything you do persists, so reloading drops you back on the exact word, page or scroll position.
MURMUR — CATCH THE TUNE IN YOUR HEAD
murmur is a place to hum. Catch the tune in your head before it slips away, then turn those rough recordings into loops, MIDI and song sketches — all in the browser.
UNDERSONG — A ROOM FOR LYRICS
Undersong is a distraction-free writing room for song lyrics. Beneath every song there’s a quieter one — a line that keeps returning, asking to be written — and this is a place to catch it.
GRIDI — MIDI GRID CONTROLLER
gridi is a full-screen grid of programmable MIDI buttons that runs in the browser. Plug in a synth, drum machine or DAW over Web MIDI, then turn each cell of the grid into a note, a chord, a CC sweep or a timed sequence of messages.
CHORD PROGRESSION BUILDER
I’ve built an interactive chord progression builder and sequencer that runs entirely in the browser. Choose from 39 chord qualities across all 12 root notes, then arrange them into progressions with drag-to-reorder.
TEXT PREDICTION WITH MARKOV CHAINS IN HASKELL
Let’s work through a few prediction techniques that can give us text that resembles some source material. Using Haskell, we can reuse lots of code while we work up to a Markov chain. First, we will predict words at random by choosing, with replacement, from all unique words in the material. Next, we will predict using the previous technique on every word position in a sentence. Then we will implement a Markov chain which allows us to predict the next word given a chunk of words from the material. So, given a chunk of words from the source material, we keep track of the unique words that follow it. We then build a cumulative distribution function (CDF) for each list of found words. We can then build the next chunk using a word chosen at random from the cumulative distribution function.
C++ :: MAPPING USER INPUT TO ACTIONS
Writing programs to perform some tasks is useful but writing programs that respond to user input are infinitely more useful. We will run through some common ways to respond to user input with varying degrees of flexibility and maintainability.