Hello! I am a software engineer, writer, and musician, the common ground between which is the manipulation of structures like code, chords, layouts, grammar, and so on. Over the years I’ve worked as an interactive data visualization engineer at the New York Times and as a journalist for The New Yorker magazine, helped CNN cover election night, coded custom multimedia software for Bob Dylan’s internal archives, edited a weekly newspaper, engineered and produced recording sessions, taught kids how to code and play instruments, and written columns for Spin, The Village Voice, The Awl, and McSweeney’s.

🚨 idk 🚨

Data visualization library which adds web accessibility features to the Vega Lite standard to help people with disabilities interpret the graphics.
An Interactive Guide To Ambiguous Grammar
Satirical English lesson for McSweeney’s about destructive uses of language.
(Rap) Genius security vulnerability
After concerns about harassment via the controversial web annotation tool arose, I coded some tools to confound it. Along the way, I discovered that it was strategically undermining and exploiting a browser security feature, so I wrote a long reported feature about my findings for The Verge.
Writers of Color
An index of writers sorted by location and expertise to help diversify editorial recruiting, with an accompanying Twitter account for posting job opportunities.

🤓 code 🤓
A shell preprocessor for extracting and executing Markdown code blocks to enable documentation-first “literate programming” in any language, an agnostic implementation of similar functionality as found in CoffeeScript and Haskell. (Also see lit-web.js for a web-native variant.)
Browser extension which prevents user activity from being logged by the ping attribute in HTML.
Basic math reimplemented in artisanal hand-coded WebAssembly, hey look it seemed like a good idea at the time.
Extracts code from fenced code blocks in Markdown during a Rollup build process. Essentially the same functions as, but optimized for JavaScript and available via npm.
Data structure traversals from functional programming made easy.
object iteration
Exactly reimplements the ES5 array method interface for key-value pairs stored in plain JavaScript objects.
Binds arrays across time ranges in HTML5 audio and video elements so the current position of the playback head can serve as the array index.
Repeatable randomization for JavaScript.
D3.js plugin to enable deep-linking in data visualizations.
D3.js plugin to overcome the limitations of text wrapping in SVG images.
D3.js plugin which selects nodes by searching upward in the DOM hierarchy.
Bookmarklet to enable visual debugging of D3.js data binds on the fly without inserting console.log() calls.
CSS Zen Garden API
A lightweight JSON REST API implemented in pure CSS, sort of.

✏ words ✏

The Evolution of the Web, In A Blink
An article for the New Yorker’s tech blog about the shifts in web browser rendering engines and their likely effects on the future of the internet.
Software Can Have Opinions
For New York magazine, explaining the design philosophy of “opinionated” software and its possible ramifications for the FBI’s legal assault on encryption.
It’s No. 1 Somewhere
A column about major pop chart hits in foreign countries, first launched with Spin and then later reconstituted for the Awl.
The Internet Is Lying To You
For New York magazine, theorizing that breaking URLs has also started to break everything else.
The Internet Can Save Itself
For New York magazine, how the architecture of the internet intrinsically fights for net neutrality.
Billionaires Are A Security Threat
For Wired, generalizing the risks demonstrated by Elon Musk’s acquisition of Twitter.
My Heart Feeds A Series of Tubes
For The Message, Medium’s internal editorial incubator, a history of the personal problems I’ve tried to solve through technology.
iPhone 12 review
For Wired, a smartphone review, sort of.
The Software that Builds Software
An early history of GitHub for the New Yorker.
Nobody Can Build An Email Killer
An opinionated argument for New York magazine about how the funding practices of Silicon Valley impede the development of new communication tools. (Also see follow-up regarding Google’s AMP for Email.)
A New Premise to Capture Prices Around the World
For the New Yorker, looking into a clever new financial index assembled entirely with smartphones.
Where Did Twitter’s Extra Characters Come From?
For Motherboard, an attempt to divine possible futures for Twitter based on subtle changes to their developer-focused API documentation.
Meltdown, Spectre, and the Costs of Unchecked Innovation
How the twin security exploits illustrate our inability to safely imagine.
Loving The Robots
For the Village Voice, an essay about moving to New York City while trying to listen primarily to academic experimental music.

🎨 graphics 🎨

Demonstrations of my D3.js plugins and other sketches and experiments, many in literate programming style.
CNN election coverage
Data visualizations for CNN’s coverage of the 2018 midterm elections in the Senate and House.
Are Zombies Racist?
Satirical interactive network visualization for McSweeney’s.
What You Look Like to a Social Network
For the New Yorker, an accounting of the data fields contained in API responses.
Diversity in Journalism
Historical demographics of newsroom leadership positions across a wide array of newspapers, magazines, and web sites.

🔊 audio 🔊

Tape Op archive
Assorted feature articles for the recording studio industry magazine.
Yo! Audio
Absurdist fake research paper about sampling rates and bit depths.
Cast In Concrete
Village Voice column reviewing field recordings I captured of New York City buskers and street musicians.

🏆 accolades 🏆

Processing Foundation fellow
Written documentation of p5.js software architecture (2018).
Brooklyn Magazine 100 most influential people in Brooklyn culture
For Writers of Color (2016).
TechCrunch Disrupt hackathon
CrunchBase prize (2013).