Hello! I’m Nathan. I like building cool things and occasionally even finish them. You can find my notes, thoughts, and articles on this website.

Ripping the data off an Atari cartridge
Ripping the data off an Atari cartridge A little while ago, I read Racing the Beam: The Atari Video Computer System about the Atari 2600. I quite enjoyed it. It’s fascinating to read about the herculean efforts required to write software for such limited hardware. One throwaway line caught my attention: since RAM was so expensive in those days, the game cartridges only had ROM chips to store the software.
Thinking too much about memory latency
Thinking too much about memory latency I’ve been learning about query optimizers in databases, which are responsible for determining the runtimes of various algorithms based on the size of the tables, memory, and data distribution. Which got me thinking: how long do these algorithms take to run? If we assign real-world values to these computations, it can give us an intuition of what values we might expect in the real world.
Justifying the visitor pattern for ASTs (in Java anyway)
Justifying the Visitor Pattern for ASTs (in Java anyway) (I mean, let’s take a second and appreciate how dumb this looks) I’ve started writing a relational DBMS to better understand how they work. Any good relational DBMS uses SQL, and therefore requires parsing a SQL AST. So I find myself implementing a basic interpreter as well. I turned to Robert Nystrom’s book Crafting Interpreters to help with this task. Nystrom’s book does a great job of explaining the different parts of an interpreter and creating intuition for the design choices made.
Trying to understand...'Linux Server Operating Systems: Red Hat Enterprise Linux and Beyond'
Trying to understand… ‘Linux Server Operating Systems: Red Hat Enterprise Linux and Beyond’ Welcome to “Trying to understand…”, a series devoted to me trying to understand a piece of media (usually a blog post or technical article) until I feel confident that I generally understand it. Introduction In a previous post, I wrote If we want to be someone who knows a lot and doesn’t make mistakes, we have to start making more mistakes.
Three random thoughts at the end of 2023
Introduction Sometimes, I wonder why I made a blog. I mean, who really cares what a twenty five year old has to say? Then again, I suppose my writing doesn’t have to be FOR anything or anyone. It’s interesting to think if self-expression needs an ‘other’ to receive the expression. If so, are we beholden to the other to witness us? That need seems at odd with the power of self-expression, so that feels intuitively wrong.
A few thoughts on programming language as a set of vectors
Preamble Below are some thoughts on me trying to understand programming language design for the first time. I found an axiomatic or vector-based approach makes most intuitive sense to me, so I try to explain my thoughts. I can’t promise that all of the thoughts are complete, self-consistent, or even little more than emotions. But if we knew where we were going, we wouldn’t have to make the journey in the first place.
Trying to understand...'AI Drives Need For Optical Interconnects In Data Centers'
Trying to understand… ‘AI Drives Need For Optical Interconnects In Data Centers’ Welcome to “Trying to understand…”, a series devoted to me trying to understand a piece of media (usually a blog post or technical article) until I feel confident that I generally understand it. Introduction I never took an electrical-engineering class in college. In fact, I only had a dim awareness that the field existed at all. Once I jumped the digital-analog gap (thanks MIT) and started exploring the elemental order of electricity, I realized I had a lot to learn.
Updating Gdbgui with 0xide's Frontend: Part 1
Updating Gdbgui with 0xide’s Frontend: Part 1 Motivation While working on my OS, I’m constantly looking for tools to improve my development process. I was recently introduced to gdb’s tui (text user interface) mode by Greg Law’s Strangeloop talk. This mode replaces the arcane gdb terminal with a much more friendly user interface. I wanted to see if anyone had improved gdb’s interface further. Surely the useful tool of gdb with the achilles heel of a horrible UI would have been fixed by now?
Trying to understand...'Add special game perf workaround for Starfield and other DGC junkies'
Trying to understand ‘Add special game perf workaround for Starfield and other DGC junkies’ This entry is the first in a series where I take a specific example of something I don’t understand and research it until I understand what’s going on. I’ve found taking a vertical slice of an existing problem to be a great way of exposing myself to new topics and understanding while limiting the work or surface area needed.
xv6 Diagrams
I’ve found diagrams and comics to be quite useful in understanding topics and digesting information. There are a few reasons for this: Diagrams are a visually rich medium where the layout can convey as much information as the content of the diagram Because diagrams are non-linear, they allow a progressive disclosure of complexity, where the viewer can mentally zoom in/out freely to understand relationships They offer a fun and approachable way to learn about topics that are otherwise intimidating or opaque Therefore, for my current OS project, I’ve decided to diagram each chapter of MIT’s xv6 textbook and OS.