Search
Search all blog posts and notes.
Mainlining Nostalgia: Making the Winamp Skin Museum
Thoughts on what I think made the Winamp Skin Museum successful.

The bizarre secrets I found investigating corrupt Winamp skins
I started looking through corrupt Winamp skins and it lead me down some very strange rabbit holes

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.

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.

{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.

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.

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.

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

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.

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.

Charlie Chaplin's Smile: Ukulele Solo
A solo ukulele arrangement of Charlie Chaplin's 'Smile'.

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".

Rendering “modern” Winamp skins in the browser
Writing an interpreter for a custom bytecode opens the door for rendering interactive custom Winamp skins in the browser

Refresh Cannon
I turned my forum avatar image into an interactive projectile aiming game.
Refresh Hero Avatar Game
I turned my forum avatar image into an interactive rhythm streak game.
A nice way to render Markdown in React apps
A pattern for rendering Markdown in React apps directly from an AST without any serialized HTML

The Winamp Skin Museum is powered by an sqlite3 database
The Winamp Skin Museum is powered by an sqlite3 database containing 1.2gb of metadata about 86,000 Winamp skins and exposed as a public GraphQL endpoint

Generating a 12 Hour Youtube Video With Python
Making a video that smoothly scrolls through 70k Winamp skins over the course of 12 hours.

Preserving Winamp skins for posterity at the Internet Archive
The story of how the Internet Archive came to preserve over 100k Winamp skins and include Webamp as one of their embedded media players
