Two new series, five posts, and a Python decorator I should've learned sooner
April felt like a month where a lot of things launched at once. Two new series went live, five posts went up, and I finally stopped skipping past a Python feature I'd been ignoring for too long.
🆕 NEW THIS MONTH
Building Your First Blender Add-on with Python: Let's Make Something Real
I've wanted to write a proper Blender add-on series for a while. Blender's Python API is genuinely powerful, but the official docs assume you already know where to look. This first post starts from scratch — what an add-on actually is, how Blender exposes its internals to Python, and how to get something real running in under an hour.
Read it → https://harlepengren.com/building-your-first-blender-addon-python/
From One File to a Real Package: Structuring Your Blender Add-on
Once you've got a working add-on, the next problem is structure. One-file projects get messy fast. This post covers how to split your add-on into a proper Python package — the layout Blender expects, how imports work differently inside add-ons, and how to avoid the reload bugs that catch everyone eventually.
Read it → https://harlepengren.com/blender-addon-package-structure/
Blender Operators: Teaching Your Python Add-on What It Can Do
Operators are how add-ons actually do things — every button and menu action in Blender is one. This post covers how to write your own, how the execute/invoke/poll pattern works, and how to wire an operator into the UI so it shows up where you actually want it.
Read it → https://harlepengren.com/blender-python-addon-operators/
This month we also kicked off a retro computing series on the site — a different kind of content, covering the hardware and algorithms behind classic machines:
The $25 Chip That Powered a Revolution: Inside the MOS 6502
The MOS 6502 ran the Apple II, the Commodore 64, and the original Nintendo. At $25 it undercut everything else on the market and changed who could afford to build a computer. This post gets into what made it clever — and what made it strange.
Read it → https://harlepengren.com/6502-chip-that-powered-a-revolution/
Racing the Beam: The Wild Tricks That Made Classic Games Possible
The Atari 2600 had 128 bytes of RAM and no frame buffer. Game developers had to sync their code to the electron beam scanning across the TV — instruction by instruction. This post covers how they did it, and why those constraints produced some of the most creative programming ever written.
Read it → https://harlepengren.com/racing-the-beam-classic-game-tricks/
💡 SOMETHING I LEARNED
I've been writing Python for years and kept treating @classmethod as something I'd look up "when I actually needed it." Writing the operators post forced me to actually learn it.
Blender's operator poll method has to be a classmethod — it's not optional. Blender calls it on the class itself before an operator runs, to decide whether the operator should be available at all. No instance exists yet at that point, so a regular method can't work. You write @classmethod and take cls as the first argument instead of self, and Blender handles the rest.
Once I understood why poll works that way, the decorator stopped feeling like an arbitrary rule and started making sense. It's for when the method belongs to the class, not to any particular instance of it. If you've been skipping past @classmethod in Python tutorials, writing a Blender operator is honestly a great reason to finally pick it up.
🗓️ WHAT'S COMING NEXT
The Blender add-on series continues — next up is UI panels. That's where the add-on starts to feel like a real tool: a proper sidebar in Blender's interface with your operators wired up and accessible. If you've been following along, this is the part where things come together.
On the retro side, we're looking at the Game Boy — hardware that was already behind the curve when it launched, yet somehow dominated for a decade. More on that soon.
That's April. If you're working through the add-on series and something isn't clicking, hit reply — I'd genuinely like to know where it gets hard.
Norm harlepengren.com