Posts
All Blogs Posts and Notes.
Mainlining Nostalgia: Making the Winamp Skin Museum
Thoughts on what I think made the Winamp Skin Museum successful.

Speeding Up Webamp's Music Visualizer with WebAssembly
Writing an in-browser compiler to compile untrusted user-supplied code to fast and secure Wasm at runtime.

Grats: A More Pleasant Way to Build TypeScript GraphQL Servers
Bringing Implementation-First GraphQL to TypeScript via a novel static analysis approach.

{transitions} = f(state)
Thinking about the React component tree as modeling a state machine can help clarify the implications of asynchronous updates and React’s concurrent features.

Interesting Bugs Caught by ESLint’s no-constant-binary-expression
I contributed a rule to ESLint that catches a surprisingly wide variety of logic bugs.

This Software is Punk Rock
A reprint of an interview I did with the Italian design magazine Progetto Grafico about Winamp's significance in our digital culture.

Talk: Design as an Optimization Problem
Video of a talk I gave at Speakeasy JS about the engineering and design philosophy behind the Winamp Skin Museum.

Rendering Animated .ani Cursors in the Browser
Technical breakdown of how the NPM module ani-cursor converts .ani files into CSS animations in the browser.

I gave a talk about compiling to WebAssembly in the browser
Video of my TSConf 2021 talk entitled "Faster, Safer: Compiling Untrusted Code to WebAssembly in the Browser".

A VSCode Extension to Clarify Operator Precedence in JS
I wrote a VS Code extension which shows subscript parentheses in your JS code to help clarify operator precedence.

Using Machine Learning to Generate Winamp Skins
I used thousands of screenshots of Winamp skins and StyleGAN2 to train an ML model to generate more Winamp skins.

Refresh Hero Avatar Game
I turned my forum avatar image into an interactive rhythm streak game.
Refresh Cannon
I turned my forum avatar image into an interactive projectile aiming game.
Charlie Chaplin's Smile: Ukulele Solo
A solo ukulele arrangement of Charlie Chaplin's 'Smile'.

Generating a 12 hour YouTube video with Python
Making a video that smoothly scrolls through 70k Winamp skins over the course of 12 hours.

How I DDOSed myself with an avatar
An inventive trick with dynamically generated avatar images, or: How I learned the hard way just how motivated people are by leader boards.
Building the @WinampSkins Twitter Bot
How my Twitter bot @winampskins works under the hood, how it has evolved over time, and what I've learned from the project.

Electric ukulele ring-tone for Chelsea
While visiting my parent's cabin in the woods, I created a little ring-tone song with my Electric Ukulele for Chelsea.

Open .ani Animated Cursors Online
I made a simple website where you can instantly open and view any .ani file for free.

My first barbershop multi-track: Love Letters
I recorded a multi-track of the barbershop tag 'Love Letters Straight From the Heart'
Surviving Hacker News traffic with the help of free CDNs
Free CDNs are a thing, and they can be put to use almost instantaneously during an unexpected traffic spike.
Implementation-First GraphQL
Defining a meaningful distinction within code-first GraphQL server libraries.
Get alerts when the emails you send are opened
I wrote a script that sends you an email when the image you embed in your emails is opened.
A trick to get consistent checkbox form values
A tehcnique to ensure that unchecked checkboxes submit a value of zero with PHP apps.
My Git alias for shipping a feature branch
A handy Git alias for merging a feature branch into master and pushing it to the server.
WhatTheFuckShouldIBeForHalloween.com
Generate infinite sexy Halloween costume ideas.

Markdown Today: Journal from any browser
A private, mobile-first web app that writes your journal directly to Dropbox.

How Winamp2-js loads native skins in your browser
How we get from a binary Winamp skin file to seeing Winamp2-js take on the look of your favorite skin, all within the limitations of your browser.
[Original Song] "Our Love Will Last As Long"
I wrote and recorded a novelty love song for Chelsea.

Silly fach generator
I created a website that will generate silly fach names.
Original Barbershop Tag: You Beside My Side
I wrote a barbershop tag for my girlfriend Chelsea.
PHP: Avatar Hack
A php script that generates an image for use as an avatar.
Alice 'n The Irving Street Kidz
My friends and I recorded a rendition of 'I Want to Hold Your Hand' by The Beatles.
Video: I Made a $4 Electric Ukulele
I got bored over winter break and make an electric ukulele out of stuff I found in my parent's basement.

New Song: Ballad of the man who can't sing
I wrote and recorded an original song about not being able to write.
Barbershop multi-track: Original cell phone ring tone tag
I wrote and recorded a multi-track of a barbershop tag for my cell phone ring tone.
Play the card game "War" in my avatar
I programed a dynamic avatar that plays the card game war.
Found: "Update on Money Unpaid to Me and Evil Needed to be Stopped"
A chaotic note I found taped to a newspaper vending box.
Found: Three smutty paper airplanes
Three paper airplanes I found in San Francisco with writing on them which is decidedly not safe for work.
Drawing mandalas with PHP for my Papa
I wrote a PHP script that generates mandalas based on the size and number of points you give it.
"The Surprise Slide" Ukulele Micro Song
A micro song for Chelsea, written and recorded while she was in San Diego.

Jazz Ukulele "Love Is a Song" from Bambi
I arranged and recorded 'Love Is a Song' from Walt Disney's Bambi on my new ukulele.

I did a Q/A with the Reactiflux community
Read the transcript of a live Q/A I did about Webamp and Nuclide.
Laravel 4.1 handles ambiguous routes differently than 4.0
Documenting a change in Laravel 4.1 that affects how ambiguous routes are handled.
Speed up Laravel tests with database transactions
How I used transactions to make my tests run eight times faster.
FachMe: Find your roles
I built a website to help opera singers discover role which might suite their voice.
I'm glad I factored out jQuery
I refactored Winamp2-js to not depend on jQuery, and learned native JavaScript is not so bad.
Barbershop Happy Birthday For Amanda
I multitracked 'Happy Birthday' for my friend Amanda Ortmayer's birthday.
Implementing Python's Context Manager Pattern in JavaScript
Python Context Managers are a great way to model resources with setup and teardown. Here's how to implement that pattern in JavaScript.
I did an interview for the Changelog podcast
I talked about Winamp2-js on the Changelog podcast.
Eight-Part Barbershop Tag In Parallel Fifths
Experimenting with recording every part in a barbershop tag a perfect fifth higher to create jazzy chords.
Backyard Ukulele Session: Ukulele Videos with Chelsea
Chelsea and I recorded a few songs in our backyard with the help of Beau Lambert.

Multitrack Video: "In My Room"
On New Years Day some friends and I recorded a multitrack video of The Beach Boys' song 'In My Room'.

Breaking into open source
A detailed guide for those who are struggling to find a way to contribute to open source.
Piano Four-Hands Arrangement (Wedding Gift)
As a wedding gift for Chelsea I arranged a piano four-hands version of the song her dad wrote to sing her to sleep.

Intro to Vim Talk
I gave a talk at the San Francisco Vim Enthusiasts user group.
Barbershop multi-track: Lord, You Made the Night Too Long
I recorded a multi-track of the barbershop tag 'Lord, You Made the Night Too Long'
[Ukulele Solo] Never On Sunday
I arranged and recorded a solo ukulele version of the classic song 'Never on Sunday'.

I think my new paste bin should be immune to takedown notices
I recently released a new website called HashBin which avoids being able to see the content the pastes it helps create.

Better indent support for PHP in Vim
A .vimrc snippet for better indent support for PHP with HTML.
Setting up PHP completion in Vim
.vimrc settings for PHP completion in Vim
Barbershop multi-track: Happy Anniversary Chelsea
I recorded a barbershop tag for Chelsea on our year and a half anniversary.
Barbershop Multitrack Tag: Overtone experiment / robot quartet
I recorded a barbershop tag in a robot voice to experiment with overtones.
[Multitrack] "That's Why I Love You"
I recorded an a cappella version of 'That's Why I Love You' by The Flamingos.
Refresh Cannon Bot
Geoff's Boring Programming Stuff wrote a bot to beat my Refresh Cannon game.
Jazz Ukuele Video: What's New?
I arranged and recorded a jazz ukulele version of the classic song 'What's New?'

"Ah leave me not to pine" ukulele solo
Video and PDF tablature of a Gilbert and Sullivan aria arranged for ukulele.

Original Song: "Driving"
I wrote a song for Chelsea after three years of dating.

My brother's minuet
I recorded myself playing a minuet my brother wrote for a music course.
Drawing mandalas with JavaScript and canvas
Rewriting a PHP script from 2008 in JavaScript.

Crash Safari with the Web Audio API
Discovering, reproducing, and working around a bug that crashes Safari hard.
Creating the Shepard Tone audio illusion with JavaScript
The Shepard Tone is an audio illusion that creates the impression of an endlessly rising or falling tone.
Implementing a Robust Web Audio API Balance Node
After more than four years, I'm finally happy with how Webamp implements balance.
The ABCs Backwards
I learned to sing the alphabet song backwards and recorded it in Golden Gate Park.

Why I switched from Vundle to Plug
I've found Plug to be superior to Vundle in several regards.
Barbershop multi-track: Cry
I recorded a multi-track of the barbershop tag 'Cry'
You're underusing Underscore
Ten common mistakes people make when using Underscore, and a linting tool to detect them.
Doo-Wop Multitrack: "Earth Angel" (for Chelsea)
I recorded a doo-wop arrangement of 'Earth Angel' for my girlfriend Chelsea.

I gave a talk: Finding Creativity Through Constraints
In which I discuss how constraints have inspired my creative process as a musician and programmer.

Backwards ABCs One Step Nerdier
I recorded myself singing the ABCs backwards while playing the ukulele.

I Come To the Garden Alone (For George Morris)
I arranged and recorded the hymn 'In The Garden' on ukulele in memory of George Morris.

Your Debut Album (Automated)
I wrote a PHP script that automates a hilarious method for generating Your Debut Album.
no-unused-binary-expressions: From code review nit to ecosystem improvements
How implementing an ESLint rule led to changes in how people write JavaScript
Alvin sings Schumann's Widmung
I tricked my professor into thinking I found a recording of the Chipmunks singing Schumann's Widmung.
Barbershop multi-track: Who'll Take My Place When I'm Gone
I recorded a multi-track of the barbershop tag 'Who'll Take My Place When I'm Gone'
"Lazy Afternoon" Barbershop Tag
I wrote and recorded a barbershop tag for Chelsea.

Found: Henry system of music transcription
A strange document I found on the ground which refers to an unknown music transcription system.
Multi-track Jazz Standard: Everything I have is yours
I record a multi-track of the jazz standard Everything I Have is Yours, with strange harmonies.
[Original Song] "Parking Garage"
I recorded a short song in a parking garage.
Free Edition of Charles Gounod’s Le Crucifix
I typeset a Creative Commons edition of Charles Gounod's a cappella choral work 'Le Crucifix'.

Chelsea's Text Tone [Ukulele]
A tiny ukulele track for Chelsea's iPhone text tone.

I Love You Truly [Ukulele Mp3]
I arranged and recorded 'I Love You Truly' on electric ukulele for Chelsea.

Papageno's Glockenspiel-kulele [Ukulele Ringtone]
A ringtone for Chelsea based on Papageno's Glockenspiel music from Mozart's The Magic Flute.

A Tour of Winamp2-js Features
Demo videos of Winamp2-js' more interesting features with notes on how they are implemented.

I Wish I Had The Time [Ukulele/Vocal Multitrack]
I wrote and recorded a song about not having time to write songs.

We're Going To Be Friends (White Stripes Cover)
I recorded a cover of 'We're Going To Be Friends' by the White Stripes with multiple voice parts and ukulele.
I was interviewed for a podcast
My work interviewed me as part of their "employee spotlight" series.
Endlessly rising Shepard Tone
I created the Shepard Tone audio illusion using Lilypond.
Why linting errors should cause tests to fail
Making the case against allowing linting errors in master.
Video: Barbershop tag taught with hand signs
I recorded a video multitrack of a barbershop tag, showing all four parts in sol-feg hand signs.

Fixed the two major problems with the MAME cabinet
Update on my MAME cabinet project.
Issue tracking for your workflow
I've been using GitHub issues to track problems with my workflow.
Mac OS X keychain fix
How to fix a corrupt keychain file on Mac OS X
Only the first and last letters of a word need be in the right place
A made a script that scrambles the inner letters of words but, surprisingly, leaves them still readable.
PGP Desktop was causing OS X to run slowly
Sharing an issue I found where PGP Desktop was causing my computer to run slowly.
Irving Berlin's "Blue Skies" on Eleuke electric ukulele
I arranged and recorded Irving Berlin's 'Blue Skies' on my new Eleuke electric ukulele.

Mary Had a Little Lamb - Parallel Fifths
My dad and I recorded a version of Mary Had a Little Lamb where I sang and played the same song a fifth above.

Listen Faster: How I Found 30 Extra Hours in My Week
I've added the equivalent of 30 hours to my week, all dedicated to reading and listening.

I talked about Winamp2-js on the Zeal Interestings Podcast
I appeared on the Zeal Interestings Podcast to talk about Winamp2-js.

The game Snake in 90 lines of JavaScript
I wrote a minimal implementation of the game Snake in JavaScript.
Barbershop multi-track: I Love To Sing 'Em (Best tag so far!)
I recorded a multi-track of the barbershop tag 'I Love To Sing 'Em'
Barbershop Multitracks with Zane
I recorded two barbershop tags with my friend Zane Fiala.
Found: Envelope of old photos and slides
I found an envelope of old photos and slides in a PG&E bill return envelope.
Found: Socrates Myspace Page
A drawing I found depicting what Socrates' Myspace page would look like.
Found: "still, the fire hasn't burnt out yet for us Baby, just keep holding on to me Alfonso"
I found a letter in which the writer tries to assure the recipient that the fire hasn't burnt out yet for them.
Colors of The Wind (Alice n' The Irving Street Kidz)
My friends and I recorded a cover of 'Colors of The Wind' from the major motion picture _Pocahontas_.

Happy Birthday/PhD Nathaniel: "That's Mathematics"
I got my family to record a math themed song for my brother's birthday and graduation.
Tom Waits' "Ol' 55" for Jared and Kathleen [Ukulele]
I recorded a simple version of Tom Waits' 'Ol' 55' for my friends Jared and Kathleen's wedding.

Walking Away [Ukulele]
An original song from the vaults. Recorded on my first ukulele into my first (MacBook) laptop.

Vim Awesome: Talk at the San Francisco Vim meetup
Video of a talk I gave introducing and explaining Vim Awesome.

One way "curl pipe sh" install scripts can be dangerous [proof of concept]
One way in which 'curl pipe sh' install scripts can be dangerous.
?? "" is a Code Smell
Defaulting to empty string is a lie we tell our type checker.
Gzip hates your DRY code
How to remove code and still increase your library weight.
Acceptance testing with Codeception and Vagrant
How to get Codeception acceptance tests working in a Vagrant workflow.
Globally install PHP command-line tools with Composer
How to install CLI tools with Composer.
Php only serving one page at a time [fix!]
I uncovered the reason why my php server was only serving one page at a time.
Testing emails with Codeception
A Codeception helper to test emails sent by your application.
The two characters that were destroying our CodeIgniter sessions
Documenting a bug in CodeIgniter that causes sessions to be irretrievable.
Writing a custom Codeception module
How to write a custom Codeception module and distribute it as a Composer package.
Further Backwards ABCs Foolishness
I sing the alphabet song with the melody backwards, the words backwards while showing solfegge hand signs and conducting.

SFSU Chamber Singers sing for ACDA
A video of my choir singing at St. Boniface Church in Anaheim, California.

Video: Overtone singing
I experiment with overtone singing.

Youtube also caught my choir
Sharing a youtube video of the choir in which I sing.

[Multitrack] Gilbert + Lisa 30th Anniversary
I recorded a little audio drama for my parents 30th wedding anniversary featuring characters and musical excerpts from the hilarious musical Forever Plaid.
Making the case for building something useless
Why I'm perfectly happy to have built something that nobody really uses.
Podcasts I like
A summary of the podcasts to which I subscribe.
UrlMeme: Make memes anywhere you can type a URL
I made a meme generator where the URL is the user interface.

Functional JavaScript: Learn by refactoring
Learn the basics of functional programming by iteratively refactoring imperative code.
Infinite javascript array using AJAX
A simple way to asynchronously load suggestions into an array in JavaScript.
Shrewd Simon Short
I recorded myself reading a tongue twister story about Shrewd Simon Short.