All blogs / JavaScript / TypeScript
Jordan Eldredge's Blog
The personal website of Jordan Eldredge, a software engineer and musician.
- Posts
- 209 from 29 Oct 2007 to 24 Oct 2026
- Posting
- monthly (12 in the last year)
- Kind
- personal blog
- Feed
- https://jordaneldredge.com/feed/rss.xml
2026 10
- I was interviewed for People of GraphQL
- Clip of me singing Despard in Ruddigore in 2013
- Talk: React Server Components Vs. GraphQL
- Building a metadata database with AI agents
- Talk: Grats - Bringing Implementation-First GraphQL to TypeScript
- This blog has secrets
- Prevent MacOS from inserting a period after two spaces
- Markdown is great for encoding test snapshots
- Aliasing alias
- Keynote: GraphQL at Meta
2025 27
- Talk: The Big Ideas in Relay
- “’S Wonderful” by George Gershwin
- Winamp in Your Pocket: 63 artist depictions of physical Winamp players
- A Mental Model for Data in UI Applications
- React’s useTransition and state update reordering
- 2018 Talk by Tracey Jaquith: Webamp at archive.org
- SQLite Railroad Diagrams
- [2012] FachMe mentioned on Voicebox
- Podcast episode on the history of the Real Book
- SQLite can emit ASCII art diagrams of its parse AST
- List Out of Lambda
- Preserving Winamp skins for posterity at the Internet Archive
- My one, awkward, Winamp Skin
- My old websites
- An archive of 31k GeoCities badge images
- Teenagers making Winamp skins in 2025
- Grats’ very nice testing strategy
- My blog’s audio player
- An SQL murder mystery
- A C program who’s source code is a Magic Eye
- {transitions} = f(state)
- “A Dream is a Wish Your Heart Makes” (piano/whistling)
- Fumbling through “Aria” from Bach’s Goldberg Variations
- “A Glorious Dawn”, a brilliant remix of Carl Sagan and Stephen Hawking
- Dr. Richard Hipp Lectures on SQLite
- Kids on Youtube playing my ukulele arrangement
- Philip Glass Piano Works by Víkingur Ólafsson
2024 35
- “The Old Dope Peddler” by Tom Lehrer
- Open Goldberg Variations
- You can now “read” this blog as a podcast
- “A Christmas Carol” by Tom Lehrer
- Partitioning complexity
- Client data should not need to exceed O(screen size)
- Rendering “modern” Winamp skins in the browser
- Hyper-Reality
- Webamp can pose for the camera
- Code golfing interview questions
- The Birth & Death of JavaScript
- 100k skins: Reflections on the Winamp Skin Museum’s upload flow
- Reactive GraphQL Architecture
- Why use the Relay Connection Spec?
- “KillsParentOnException” a lesson in API naming
- no-unused-binary-expressions: From code review nit to ecosystem improvements
- From opera to tech
- Videos: I used to sing with a men’s chorus
- My GraphQL Conf 2024 talk: Semantic Nullability
- A video of my wife and I singing Mozart’s Requiem
- I was on the Changelog podcast again
- How the React model tames N by N code complexity
- Hal fixing a light bulb (what software development always feels like to me)
- Itsy Bitsy Data Structures
- Bob Nystrom explains the Pratt Parser algorithm
- Windows93.net
- Using Notion as my CMS with Next.js
- The Winamp Skin Museum has a secret debug mode
- The Winamp Skin Museum is powered by an sqlite3 database
- Winamp Skin Mosaics
- The bizarre secrets I found investigating corrupt Winamp skins
- How I indirectly helped remove stray characters from across the web
- Next.js’s unstable_cache() demystified
- “Alexa, add half & half”
- Grats: A More Pleasant Way to Build TypeScript GraphQL Servers
2023 1
2022 2
2021 10
- A VSCode Extension to Clarify Operator Precedence in JS
- Implementing Python's Context Manager Pattern in JavaScript
- Open .ani Animated Cursors Online
- I gave a talk about compiling to WebAssembly in the browser
- This Software is Punk Rock
- Generating a 12 hour YouTube video with Python
- Building the @WinampSkins Twitter Bot
- Using Machine Learning to Generate Winamp Skins
- Speeding Up Webamp's Music Visualizer with WebAssembly
- Talk: Design as an Optimization Problem
2020 2
2019 1
2018 5
2017 3
2016 10
- Functional JavaScript: Learn by refactoring
- I was interviewed for a podcast
- "Ah leave me not to pine" ukulele solo
- Why linting errors should cause tests to fail
- Podcasts I like
- Listen Faster: How I Found 30 Extra Hours in My Week
- The game Snake in 90 lines of JavaScript
- Breaking into open source
- Vim Awesome: Talk at the San Francisco Vim meetup
- You're underusing Underscore
2015 6
- UrlMeme: Make memes anywhere you can type a URL
- I gave a talk: Finding Creativity Through Constraints
- I think my new paste bin should be immune to takedown notices
- How Winamp2-js loads native skins in your browser
- Creating the Shepard Tone audio illusion with JavaScript
- Drawing mandalas with JavaScript and canvas
2014 10
- Surviving Hacker News traffic with the help of free CDNs
- I'm glad I factored out jQuery
- Why I switched from Vundle to Plug
- Speed up Laravel tests with database transactions
- Globally install PHP command-line tools with Composer
- Writing a custom Codeception module
- Infinite javascript array using AJAX
- Testing emails with Codeception
- Acceptance testing with Codeception and Vagrant
- Intro to Vim Talk
2013 12
- The two characters that were destroying our CodeIgniter sessions
- A trick to get consistent checkbox form values
- Laravel 4.1 handles ambiguous routes differently than 4.0
- My Git alias for shipping a feature branch
- Setting up PHP completion in Vim
- Better indent support for PHP in Vim
- Issue tracking for your workflow
- WhatTheFuckShouldIBeForHalloween.com
- Free Edition of Charles Gounod’s Le Crucifix
- Piano Four-Hands Arrangement (Wedding Gift)
- Papageno's Glockenspiel-kulele [Ukulele Ringtone]
- Silly fach generator
2012 7
2011 5
2010 5
2009 23
- Video: I Made a $4 Electric Ukulele
- Mary Had a Little Lamb - Parallel Fifths
- Original Song: "Driving"
- Colors of The Wind (Alice n' The Irving Street Kidz)
- Eight-Part Barbershop Tag In Parallel Fifths
- [Multitrack] "That's Why I Love You"
- [Multitrack] Gilbert + Lisa 30th Anniversary
- Happy Birthday/PhD Nathaniel: "That's Mathematics"
- [Original Song] "Parking Garage"
- [Original Song] "Our Love Will Last As Long"
- "Lazy Afternoon" Barbershop Tag
- We're Going To Be Friends (White Stripes Cover)
- Alice 'n The Irving Street Kidz
- Refresh Cannon Bot
- Refresh Cannon
- Refresh Hero Avatar Game
- Original Barbershop Tag: You Beside My Side
- Endlessly rising Shepard Tone
- Barbershop Happy Birthday For Amanda
- Further Backwards ABCs Foolishness
- Backwards ABCs One Step Nerdier
- The ABCs Backwards
- Doo-Wop Multitrack: "Earth Angel" (for Chelsea)
2008 32
- Barbershop Multitracks with Zane
- Shrewd Simon Short
- How I DDOSed myself with an avatar
- Play the card game "War" in my avatar
- Php only serving one page at a time [fix!]
- Your Debut Album (Automated)
- PHP: Avatar Hack
- New Song: Ballad of the man who can't sing
- Get alerts when the emails you send are opened
- Drawing mandalas with PHP for my Papa
- Multi-track Jazz Standard: Everything I have is yours
- Video: Barbershop tag taught with hand signs
- Video: Overtone singing
- Barbershop Multitrack Tag: Overtone experiment / robot quartet
- Barbershop multi-track: Happy Anniversary Chelsea
- Alvin sings Schumann's Widmung
- Barbershop multi-track: Cry
- Barbershop multi-track: I Love To Sing 'Em (Best tag so far!)
- Found: "still, the fire hasn't burnt out yet for us Baby, just keep holding on to me Alfonso"
- Found: Envelope of old photos and slides
- Barbershop multi-track: Original cell phone ring tone tag
- Barbershop multi-track: Who'll Take My Place When I'm Gone
- Found: Three smutty paper airplanes
- Found: "Update on Money Unpaid to Me and Evil Needed to be Stopped"
- Barbershop multi-track: Lord, You Made the Night Too Long
- My first barbershop multi-track: Love Letters
- Found: Socrates Myspace Page
- Found: Henry system of music transcription
- SFSU Chamber Singers sing for ACDA
- My brother's minuet
- Youtube also caught my choir
- PGP Desktop was causing OS X to run slowly