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.
Building a Robot
An update coming soon.
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.