Coding

Why I Started Writing Unit Tests for Personal Projects (And Why You Should Too)

If you've been skipping unit tests on your fun side projects because they feel like too much "work stuff," the article is here to tell you that you're actually making things harder on yourself! Unit tests give you the confidence to mess with your code without fear of breaking something. They can also act as documentation that actually works, and they seriously speed up your development cycle. Save the frustration, create unit tests and build cool things.
A 3D render of a wooden chess board during an endgame, featuring only a few metallic pieces—two kings and a lone rook—positioned strategically. In the background, a laptop displays the 'PyMinMaximus' Python code. A faint cyan glow connects the pieces, symbolizing the calculated precision of an endgame tablebase.
Coding

PyMinMaximus Part 5: Creating the Endgame Tablebase

Learn how to build and integrate a simple King + Rook vs King (KRK) endgame tablebase into the PyMinMaximus chess engine. This pre-computed database ensures perfect play in KRK positions, finding the quickest mate in O(1) time using the principles of retrograde analysis. The implementation covers position encoding, symmetry reduction, and the final search integration for a complete Book → Tablebase → Search hierarchy, saving thousands of search nodes.
Coding

PyMinMaximus Part 4: Creating an Opening Book

In or previous posts, we created a chess engine, but we have a glaring weakness: PyMinMaximus wastes time "thinking" about well-known opening positions that have been analyzed for centuries. While PyMinMaximus calculates for 5 seconds to decide between 1.e4 and 1.d4, it could instantly play proven opening theory and save that time for complex middlegame positions. With an opening book, PyMinMaximus plays the move instantly (0.001 seconds), saving 20-30 seconds in the opening phase. It plays mainline theory with proper move orders and avoids known tactical pitfalls. That's a massive practical advantage! In this post, we’ll solve this problem by implementing opening books from scratch, using the Polyglot format and Zobrist hashing.