256 Universes in One Byte: Exploring 1D Cellular Automata
A row of cells. Each cell is either on or off. Every generation, each cell looks at itself and its two neighbors, then follows a rule to decide what it becomes next. That’s it. That’s the whole system.
From this absurdly simple setup, you get chaos, fractals, traffic jams, and even a system capable of computing anything a laptop can compute. All from one byte of information.
How It Works
The neighborhood is three cells wide: left, center, right. Since each cell can be 0 or 1, there are 2^3 = 8 possible patterns. A rule assigns an output (0 or 1) to each pattern. Eight binary choices = one byte = a number from 0 to 255.
Try My Physics Simulations: Live in Your Browser
I built a physics simulation library that models springs, pendulums, epidemics, gravity, and more. The simulations run locally with matplotlib, but you can also explore them interactively through Jupyter notebooks, no install required.
Click any button below to launch a live notebook in your browser via Binder. It takes about 30-60 seconds to spin up the first time (it’s building a fresh Python environment from my GitHub repo), then you’re in a full Jupyter session where you can run cells, tweak parameters, and see the results.
What Happens After You Submit Your First Pull Requests
A few days ago I submitted 10 pull requests to 7 different open source repos. I’d never done a PR before that day. Today I checked back on all of them and learned that submitting is the easy part. What happens next is where the real lessons are.
The Scorecard
Out of 10 PRs:
- 1 merged (Sentinel-AI, docs cleanup)
- 3 closed without merging
- 6 still waiting
That’s a 25% merge rate on decided PRs. Sounds low but it’s actually normal for someone doing rapid-fire first contributions. Here’s why the three got closed, and what each taught me.
I Built an Open Source Contribution Toolkit in 57 Tokens, Then Submitted 7 PRs in One Session
I’m a beginner programmer. I know what loops do, I can read Python, and I’ve done basic git pushes and pulls. But I’d never submitted a pull request. I didn’t even know what a PR was a few hours ago.
Now I have 7 pull requests across 3 different repos, including a bug fix in a famous 3,259-star chess engine, and a fully tested toolkit that helps anyone find and contribute to open source projects.
Building a 6502 Simulator in Python (Part 2)
From a 12-instruction teaching CPU to a full MOS 6502 emulator, inspired by Ben Eater’s breadboard projects.
Why the 6502?
The MOS 6502 is the processor that defined home computing in the late 1970s and early 1980s. It ran the Apple II, the Commodore 64, the Atari 2600, and the Nintendo Entertainment System. It powered the first affordable personal computers and launched an industry.
What makes it perfect for a simulator project:
Building a CPU Simulator in College (Part 1)
The original MM1 processor simulator: a custom instruction set architecture built in Python as a student.
The Assignment
In 2004, week 5 of the Modeling Motion program introduced something unexpected: we weren’t simulating springs or epidemics anymore. We were building a computer from scratch, in software.
The assignment was to implement a simple processor simulator. Not a real CPU architecture like x86 or ARM, but a custom one designed for teaching: the MM1 (Modeling Motion 1). It had 8 registers, 64 words of memory, a 12-bit instruction format, and just enough instructions to write meaningful programs.
Rendering a 3D Rubik's Cube with Matplotlib
How to draw a fully interactive Rubik’s cube using Poly3DCollection, handle keyboard events for face rotations, and integrate the Kociemba two-phase solver.
Why Matplotlib for a Rubik’s Cube?
Rubik’s cube visualizations typically use OpenGL, Three.js, or a game engine. Using matplotlib’s
mpl_toolkits.mplot3dis unconventional. It’s designed for scientific plotting, not real-time 3D interaction. But it has one huge advantage: zero dependencies beyond what you already have for data visualization. No WebGL, no GPU shaders, no build pipeline. Justpip install matplotliband you have a working 3D cube.Building a Physics Simulation Engine in Python
How the physics_modeling package is architected: base classes, numerical integrators, separation of physics from visualization, and property-based testing.
The Core Abstraction
Every physics simulation answers the same question: given a system’s current state, what is its state at the next instant? Whether you’re modeling a spring, an epidemic, or a galaxy of gravitating bodies, the computation follows one pattern: compute derivatives, advance time, repeat.
The
physics_modelingpackage encodes this pattern in aSimulationbase class:Modernizing Legacy Code: From 2004 VPython to Python 3.14
Taking old college physics simulations written twenty years ago and getting them running on modern Python.
The Time Capsule
In 2004, I was a student at The Evergreen State College in a program called Modeling Motion. We wrote Python simulations of physics phenomena (springs, gravity, epidemics, particle collisions) using a library called VPython. I was learning physics and programming simultaneously, translating equations of motion into running code for the first time.
Play Space MUD: A Free Browser Game
I made a game. It’s free, it runs in your browser, and you can play it right now:
No download. No account creation on some third-party platform. You open the link, make a character name and password, and you’re in.
What It Is
Space MUD is a text-based multiplayer game. You type commands, read descriptions, and explore a derelict space station. Think of it like a collaborative fiction that you interact with by typing things like
look,north,attack drone, orrepair reactor.