Building a Robot That Plays Go
I’m building a robot that plays the board game Go on KGS (the Kiseido Go Server). It will use KataGo as the analysis engine so it plays at a very high level, and I’m writing the glue in Python.
This project is in early planning. More to come as I build it.
What I Actually Think About AI
I use AI tools every day. Kiro writes code for me. I use it to organize my email, build projects, and scaffold blog posts. But I draw a line at having it think for me.
AI is a power tool. It’s a table saw, not a carpenter. The interesting decisions, the creative choices, the opinions in these blog posts, those are mine. The formatting, the boilerplate, the grunt work of turning ideas into deployed software, that’s where AI earns its keep.
Regression Analysis from Scratch
I have a regression analysis project where I’m implementing the math from scratch rather than calling a library function. The goal is to understand what’s actually happening inside
sklearn.linear_model.LinearRegression()before I use it as a black box.This post is coming soon. It will cover least squares, the normal equation, gradient descent, and polynomial regression, all in raw numpy.
Non-Symmetrical Dice: When Fairness Gets Weird
A fair die doesn’t have to be a cube. A fair die just needs each face to have equal probability of landing face-up. But how do you build one that isn’t symmetric?
I’ve been exploring this question computationally. The project is at early stage but the results are already counterintuitive. More details coming as I work through the geometry and the simulations.
Where Creativity Lives in Mathematics
Around 2004, during college, my mom told me that mathematics was creative.
She was a watercolor artist. She understood creativity as something you could point at: the choice of color, the decision to leave white space, the moment you stop adding paint. So when she said math was creative too, I took it seriously. But I couldn’t think of a good example. Math felt mechanical to me at the time. You follow the steps, you get the answer. Where’s the creativity in that?
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: