Hello, I’m Dylan.

A pig sitting in an open field, facing away toward the horizon.
Fig. 1

Iam a software engineer at Aina, where I work on infrastructure for large media and compute workloads. My work touches deployment, storage, databases, observability, and distributed systems.

Outside of work, I volunteer at the Morgan Hill Buddhist Community Center. At home, I have a homelab that is mostly a very expensive way to avoid paying for Netflix, especially once you count the hours. I also build practical effects and interactive Halloween props. This involves hobby electronics, PCB design, and regularly discovering that I am not very good at any of it. I keep doing it anyway.

This is where I write down some of what I learn.

What I’ve been up to

Drop2026-09-08

Moving TBs in the browser

A pig standing on its hind legs while unplugging a cable from a server rack.
Transfer supervision in progress.

The familiar browser download has a simple shape: one response becomes one file. That shape works until the thing being downloaded is not really a file at all. At Aina, a dataset can be a directory tree containing terabytes of footage. Asking the browser to download it exposes a mismatch between the interface and the thing a person actually wants.

There are a few conventional ways to hide that mismatch. The browser can start a separate download for every object, but thousands of independent downloads are difficult to supervise and do not reliably reconstruct a directory tree. The application can collect the data in memory, but the browser is the wrong place to assemble a multi-terabyte blob. The server can put everything into a zip file, which makes a folder look like the one file the download interface expects.

Zip is appealing because it solves the shape of the problem. It is less appealing when we look at what the bytes have to do.

A server can build the archive on demand and stream it without holding the whole result in memory. Now, however, every download is a new composite response. The individual source objects may already be cached at the edge, but the archive itself has to be assembled as one continuous stream. If the transfer stops near the end, resuming that stream is also more complicated than requesting an ordinary object again.

Prebuilding archives changes the tradeoff rather than removing it. For a long time, Aina kept pre-zipped copies of datasets. Those copies were easy to download and easy to cache, but they duplicated storage, needed their own lifecycle, and became stale whenever the underlying folder changed.

There was not even a compression win to offset those costs. Our large objects are usually camera media, which is already compressed. Wrapping it in…

Fabric2026-09-08

A GPU is not a number

A pig inspecting a boxed graphics card in a computer-parts store.
Capacity planning in progress.

A request for “one GPU” sounds precise. To a researcher, it may be the only unusual resource a job needs. To the system running that job, it is the beginning of a much longer description.

Which GPU models can run the code? How much device memory is required? How many CPU cores are needed to keep it fed? How much system memory and temporary disk will the input, cache, and output consume? Can the selected machine reach the data? Is the runtime image compatible with its architecture and driver? One GPU is not a complete unit of capacity; it is one constraint among several that have to agree at the same time.

Fabric is the interface Aina's researchers use to submit work to shared compute. The…

Redthing2026-09-08

Making S3 look like a file

A pig adjusting a professional cinema camera among several camera rigs.
The read path under inspection.

A file and an object in S3 look similar from a distance. Both have a name and a length, and both contain bytes. The difference appears when a decoder asks for a few thousand bytes from somewhere in the middle.

Video software is built around random access. It reads a header, jumps to an index, finds the location of a frame, and then reads the compressed data for that frame. An object store offers no file descriptor and no seek. The conventional answer is to download the entire object first, but that is a large entrance fee when the useful result might be a single thumbnail.

Redthing works with RED camera footage stored in S3. Its central idea is to avoid teaching the decoder anything about…