smoores.dev

Building stuff on the Internet.

Welcome!

I'm Shane. I build stuff that lives on the internet, and sometimes I write about it, too. If you want to learn a little bit more about me, you can check out my résumé at resume.smoores.dev.

Recent Posts

What is smoores.dev?

Nov. 30, 2024

Recently, as I decided to reinvest in the contents of my personal blog, I also decided to rebuild it. Previously, it had been built as a very simple Flask app, with posts written in Jinja-templated HTML, and relied on the PyPI package Frozen-Flask to export the contents to static assets for deployment. This setup always required a bit more effort than I liked, but I really enjoyed the freedom that came with writing my posts as essentially plain HTML. So I gave my blogging system another shot, this time relying on React Server Components and Next.js to build out a system that was hopefully more fun to work on and easier to maintain.

Overcoming I/O Limits in Node.js

Nov. 18, 2024

Node.js has a (poorly) documented 2GB size limitation on file reads, and a seemingly undocumented 2GB size limitation on FormData parsing from web Request objects. This is a brief walkthrough of how I updated Storyteller to work around these limitations, allowing users to process longer books!

Phonetic Matching

Nov. 12, 2024

Recently, I’ve spent quite a lot of time working on Storyteller. It’s an open source, self-hostable platform for automatically syncing audiobooks and ebooks. You give Storyteller the ebook and audiobook files for the same book, and it spits out a new ebook file with the audio embedded, such that the text can be highlighted while the audio is playing. In order to do this, Storyteller has to answer a pretty challenging question: How do you automatically align the text with the corresponding audio?

Back to Basics

Feb. 28, 2023

The Oak Team, the engineering team responsible for building and maintaining The New York Times' collaborative rich text editor, just had the most engaging, fulfilling sprint that I've experienced since I joined the team in 2019. We collaborated, supported each other, and learned new things. And we didn't push a single commit. Instead, every engineer on the team spent two weeks learning about how the core technologies we use every day really work, so that we could engage with them more deeply, and hopefully solve some long-standing problems we face while developing Oak!

ESNI: Making the Internet Private by Default

Sept. 19, 2020

The internet as a system is inherently public. The primary protocols, like HTTP for website traffic and SMTP for email traffic, are plaintext protocols, and the underlying Internet Protocol (IP) includes fairly stable addresses (IP addresses) in every request, which means that the computers that serve content, like web servers and DNS servers, are constantly being informed about who, specifically, is making which request.

Dockerizing Legacy Scoop for Reproducible Development Environments

Sept. 14, 2020

That title is a bit of a mouthful, huh? Probably a good idea to start with some context. "Scoop" is the name of the CMS at the New York Times, which is actually made up of a number of separate frontend apps that sit atop a shared backend. Most of the time I work on Oak, the collaborative rich text editor that the newsroom uses for writing news and opinion stories. Oak actually has its own datastore (Google's Cloud Firestore) and backend, but presently the only way to be a part of the Scoop ecosystem is to also store at least a subset of our data in the shared backend.

SMTP: A Conversation

May 9, 2020

One crucial piece of network administration has always evaded me. Past the routers, VPNs, websites and Docker images, always just out reach, sits the big one: email. I have never been able to wrap my head around even the simplest pieces of email networking. Somehow, this fundamental part of the modern internet has always just been a little bit too complex, just a little bit too finicky.

Recent Talks

Slides for talks that I've given recently. These are usually made with reveal.js and hosted on my personal web server.

A Tale of 100 Blue Buttons

A brief intro to The New York Times' content management system, and why we needed to build Ink, a design system for that content management system.

Monads and You: How to think about Promises

A look at how the functional programming notions of functors and monads can help provide us with helpful mental models for thinking about Promises in Javascript. It's not as scary as it sounds, really!

Yarn Berry

A talk about how and why to migrate to Yarn Berry.

Unionizing NYTimes Tech Workers—with bubbles and red paint

A talk given by myself and my co-worker and fellow union organizer Vicki Crosson about how the New York Times Tech Guild built software to assist in their organizing process.