Play Robot-Game
A salvage robot wakes up on a derelict space station. Recover the seven scattered ship components from their guardians, reinstall each one, beat the thing that tore the station apart, and fly home to Earth. It runs entirely in your browser, with nothing to install.
Quick controls: move with WASD or the arrow keys, attack with Space, dash with Shift, interact (mine / install / read logs) with E, and open the map with T. Click the game first so it captures your keyboard. The full guide and source are on GitHub; the story behind it is in the post.
Robot-Game: Rebuilding a 2014 Dungeon Crawler Two Different Ways
I found a C# dungeon RPG I wrote in 2014, got it running on .NET 8, and then rebuilt it from scratch as a sci-fi browser game in TypeScript and Phaser.
It's Time for Pi
Pi is the number you get when you take any circle, measure the distance around it, and divide by the distance across it. Any circle. A dinner plate, the moon, a ring you draw in the sand. Always the same number. About 3.14159, and then it keeps going forever without repeating.
That last part is the part that gets people. It never ends. It never settles into a pattern. You can compute a trillion digits and you are no closer to the “end” than when you started, because there is no end. Pi is irrational (you can’t write it as a fraction) and transcendental (it isn’t the root of any nice polynomial), which are two math-flavored ways of saying it refuses to be pinned down.
Research First: Beating Kaggle's Titanic with History Books
Most Kaggle Titanic tutorials open with
import pandas as pdand immediately start running.describe(). I did something different: I read about the actual disaster first.The result was better feature engineering, more informed imputation strategies, and a clearer picture of what was noise versus signal. The model barely mattered. The features did all the work.
Why Research Before Code
The Titanic dataset has 891 rows and 11 features. You could get ~77% accuracy by predicting “all women survive, all men die.” Getting past 77% requires understanding why people survived beyond gender. That understanding comes from the history, not the data.
Building an AI-Assisted Kaggle Toolkit
I got tired of the standard Kaggle workflow. Open a notebook, import pandas, start typing
.describe(), throw some models at the wall. It works, but you don’t learn much, and three months later you can’t remember why you chose XGBoost over Random Forest.So I built a toolkit that forces a better process: research first, then model. Document everything. Produce educational content as a natural byproduct of doing the work.
Building a 24/7 Go Bot with KataGo on KGS
I wanted a Go bot that plays games on KGS while I sleep. Not to grief anyone, just to have a persistent presence on the server, accumulate games, and watch a machine play the oldest board game in the world against real humans, all day, every day.
The result: a Python wrapper around KataGo and kgsGtp.jar, running on a $5/month Lightsail instance, playing Chinese rules on 19x19, saving every game as an SGF file, and reporting stats back to me. Here’s how it works.
I'm on the Dark Web
I put my blog on the dark web.
Go ahead, visit it: qmhsnaocrhmpngqkqv6qgtpp3svmffegmbxmdyipk6cu64pvpp5urtid.onion (you’ll need Tor Browser to open that link).
It’s the same site you’re reading right now. Same posts, same CSS, same everything. It just lives at a
.onionaddress in addition toimadestuff.com. Let me tell you why.What the “Dark Web” Actually Is
The “dark web” has the most overblown reputation of any technology since nuclear energy. The media would have you believe it’s a shadow dimension of hitmen and drug markets. In reality, it’s just… a network protocol. A routing layer. A different way for bits to travel between computers.
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.
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?