An old-fashioned electric typewriter on a desk, with a piece of paper coming out of it showing faces and animals made out of typed characters.

Type Type Type

This is a blog where I add posts to the Internet.

There are two main types of writing here: technical and sincere.

Home - Resume - Projects - BlogRSS Feed

From Wednesday, February 11th, 2026

Vibe Check

A few hot takes for the #vibecoding era:

Read More right-pointing flowery thing

Tagged as computers, work.

From Friday, February 6th, 2026

Why Enterprise SaaS is Like That

Getting overwhelmed by emails is easy; millions are sent every second. They swim in the air around your phone, waiting to be let in; they’re in the wires in your walls; undersea cables are flooded with them. The world-spanning network of machine-to-machine systems that allows you to receive autopay notifications for stuff you forgot you signed up for is complicated, but the piece of software known as “Outlook” makes it so that when you look at your computer, you just see emails. That list of emails is an “abstraction,” which means “a version of something that’s simplified to make it easier to fit in people’s brains.”

You can think of emails as electronic signals propagating over cables (which is a low level of abstraction, of which I have very little understanding), as TCP traffic between machines using specific ports and mail transfer protocols (which is a slightly higher level of abstraction that I mostly get), or you can think of it as a bunch of new posts from Substack and Patreon, requests to donate to political campaigns, and alerts about outages from hosting providers (which is a quite high level of abstraction that I can easily use to understand my email inbox right now.)

There’s a strong tendency among a certain type of person to think of low levels of abstraction as “how things really work.” And this produces tension when combined with another fact: companies are mostly led by people operating at very high levels of abstraction.

Read More right-pointing flowery thing

Tagged as work.

From Monday, September 1st, 2025

Separation of Concerns and State

The term “separation of concerns” gives you an easy way to throw a wrench into almost any programming argument. It’s hard to interpret at the best of times, but it definitely sounds weighty and important, and so you can use it to argue against any code that you don’t like and for any code that you do like. Here are some models for separation of concerns that I have seen:

Model A: The Language Model

A one point, in the world of web development, it was easy to tell which part of the code was which, because each concern was addressed by a different language. The HTML created the content, the CSS established the styling, and the JavaScript added the interactivity:

Read More right-pointing flowery thing

Tagged as computers.

From Sunday, May 4th, 2025

Unemployable

It was during the 17th month of the job search that I decided that my approach needed to change. All the good jobs were going to LLMs, I was sure of it. I decided to turn the tables and make my own LLM that could go get a job and then do the work for me. I dumped my digital life into Markdown: a few hundred tweets, a handful of college essays from my university-provided OneDrive, a protracted series of attempts to be funny in comments on high school acquaintances’ Instagram posts; a smattering of notes scattered across Evernote, OneNote, Google Keep, and Obsidian, a few dozen outbound emails, and about ten thousand words worth of arguments in Discord servers over whether Twenty One Pilots were ever cool. Then I got to work. Logically, to make an LLM whose work I could take credit for, I just had to make an LLM that was me.

Read More right-pointing flowery thing

Tagged as personal, fiction.

From Sunday, April 27th, 2025

JavaScript Promises Break Code in Half

“Promises” are a ubiquitous feature in the JavaScript language. For example, if you call the function fetch in order to get some kind of JSON object from an API, fetch will return a Promise:

const thisIsAPromise = fetch("/api/get-id/1");

What does that mean? The MDN documentation informs us that a Promise “is a proxy for a value not necessarily known when the promise is created.” That’s kind of true, and for a while, I even believed it. However, nowadays, I think that it’s actually easier to think of Promises as a way to manage code, not data.

Read More right-pointing flowery thing

Tagged as computers, javascript, explainers.

From Saturday, April 19th, 2025

On Anger

Linus Torvalds is the legendary creator of the version control system “Git” and the kernel for the operating system “Linux,” which between them are used to develop approximately 125% of all software. He also gets mad on the Internet a lot. There’s a subreddit dedicated to his outbursts. He produces headlines like “Linus Torvalds on why he isn’t nice: ‘I don’t care about you’”. His feedback is often along the lines of:

So this patch is utter and absolute garbage, and should be shot in the head and buried very very deep. Please immediately delete it from the whole internet.

Or:

“Steven, stop making things more complicated than they need to be… You copied that function without understanding why it does what it does, and as a result your code IS GARBAGE. AGAIN.”

Read More right-pointing flowery thing

Tagged as personal, work.

From Monday, March 31st, 2025

Rain

Back when I worked on the farm, when it rained, it mattered. I have a lot of memories of ducking into a barn, or into the truck, or going all the way back to the house for an early lunch just because the rain had come.

Most people probably think that rain is generally good for crops, but unless the topography of the land is perfectly mapped out to drain excess rainfall away from them, things get dicey. Plants’ roots need to absorb oxygen; in other words, they have to breathe a little. Roots can get enough air to respire from between the gaps in clusters of soil, but they can’t breathe through water. Too much rain will make them wither away. The only solution is to change the landscape so that the water won’t build up where you have things planted; the simplest way to do that is to dig drainage ditches.

Not all drainage is visible on the surface. It’s common to dig a ditch, fill it in with highly porous gravel or drain tile, and then let the dirt cover it up again, instead of fighting to keep it from eroding away season after season. In my time, we mostly filled in ditches with heavily perforated black drain pipe. The fields also had an ancient network of old, brown square porcelain tubes (yes, square tubes) that were laid end-to-end under the soil. No one quite knew where they were laid, which was exciting when digging or plowing. My grandfather remembered the burying of them in trenches as a kid.

Tonight, I went on a walk to the gas station to buy soda and got trapped by the rain. It’s been a while since that happened. I mean, it has rained in the last five years, but it hasn’t really affected my life. It’s surprisingly pleasant to get trapped like that: there’s nothing you can do, and there’s nothing happening that’s not supposed to happen. It’s free peace.

Tagged as personal, history.

From Saturday, March 29th, 2025

Let vs. Const

In my post about GIFs, I pointed out that the creators of the GIF file format explicitly said that it wasn’t meant to be a great format for animations, but since it was widely available in people’s browsers, and no-one actually read that spec, it ended up being used for animations all over the place anyway, and now it’s all the format is known for. By opening a technological window, and allowing some limited animations to be stored in .gif files, they closed a door (new file formats with more advanced compression are constantly pushed back on because people are used to GIFs.)

Unrelatedly, here are two keywords that exist in JavaScript: const and let. let creates a variable that can have a new value assigned to it later, while const creates a variable that will always have the same value attached to it. const is the typical way that people declare variables in modern JavaScript; thanks largely to linting rules and style guides like the Airbnb JavaScript style guide, which for whatever reason was very popular back in the day, a generation of programmers learned that changing the values of variables was to be avoided, and obviously const is the way to do that, right?

Read More right-pointing flowery thing

Tagged as computers, low-effort titles, door vs. window conundra.

From Saturday, March 15th, 2025

Patterns, Samples, and Artificial Knowledge

Buckle up, everybody. The AI understander has logged on.

Human brains are wired to anticipate and recognize patterns. The quiet thump of footsteps coming up behind you; the sinuous stripes of a tiger’s fur, undulating as it quietly crouches in the bushes with knife, fork, and barbecue sauce clutched in its paws; the halting rhythm of popcorn in the microwave as it finishes up its popping and starts to burn. In particular, there’s something in us that responds to patterns in language. I don’t necessarily mean literary, sophisticated forms of language: I mean that people still put fragments of Radiohead lyrics in their Instagram bios, and that we all grew up enthralled by the three-syllable rhythms of Dr. Seuss.

But what if I told you that writing that kind of thing is now easy?

A chat with ChatGPT. The user says: "Write a short Dr. Seuss-style poem about driving with broken brake lines." ChatGPT replies: "Oh, the places you’ll go— but not where you planned! For your brake lines are broken, your stopping’s unmanned! You roll down the street, you pick up some speed, you pump on the pedal— but stop? No, indeed!"

Well, it’s not quite top-tier Dr. Seuss material, I guess, but that comes down to the prompt, right? I could have told it to write about something more Dr. Seuss-like. Animals, breakfast foods, headwear, that kind of thing. But the fact that it understood the prompt - the fact that it knows who Dr. Seuss is, that it presumably knows what a trisyllabic meter is, that it knows which words rhyme and which don’t - that makes it smart, right?

I’m not so sure? If a human sat down to write a Dr. Seuss-style poem, and produced that result, then we could probably conclude that the human knew those things, or at least had a fundamental intuitive sense of them. But at this point, in year three of their mildly terrifying reign, I’m pretty sure that large language models are mostly good at replicating patterns. That doesn’t mean that they make good decisions about what to replicate or why they’re doing it. But, they feel like they’re smart, partly because they hack the human brain by reproducing patterns that are interesting to us, and partly because they mix the patterns together.

Read More right-pointing flowery thing

Tagged as computers, coding, brains, music.

A tweet by Keara Sullivan (@superkeara) that reads, "I actually love it when a millennial sends me a gif. It's like hearing a cow go moo in real life. I can't help but smile when witnessing something so classic."

A GIF By Any Other Name

Tuesday, March 11th, 2025

The animated GIF is a new kind of ideogram that computers have added to our lives. (An ideogram is a visual symbol that indicates an idea without corresponding to any specific spoken sounds.) You can convey a vibrant feeling in a brief moment of video, as long as the feeling is along the lines of: Leonardo DiCaprio raising a wine glass. Donald Glover carrying pizzas reaching a room filled with flames. A white guy blinking in idle consternation.

So why is the GIF under attack? Everywhere, platforms and hosting services are trying to replace it with other file formats. “GIFs” on Twitter are MP4 videos, set to be soundless and looping. Imgur introduced the concept of “GifVs,” which are mp4 or WebM videos that are displayed like GIFs, way back in 2014. The framework I’m using to create this blog, Astro, will automatically turn GIFs into WebP files when I deploy the site to production. One of the ground zeroes for the animated GIF phenomenon, Tumblr, has been experimenting with videos-as-GIFs for years, writing extensive, carefully-worded posts to try to introduce the concept without angering their userbase.

And make no mistake - users hate new file formats, like WebP. Statistically, you probably hate .webp files already. Here’s what a brief Google search has to say about them:

Google image search results for "webp memes." The memes are all very negative.

So why does this format exist? Why do any file formats exist? Why do I care? Let’s consider the practicalities.

Read More right-pointing flowery thing

Tagged as computers, digital art, the culture, door vs. window conundra.