I have been running Firefly III for personal budgeting for a while now. It is a solid self-hosted finance manager, but the wife-approval-factor is pretty low thanks to its double-entry bookkeeping system. The thing that bothered me most was this: importing transactions from the bank leaves you with a wall of raw bank descriptions, no categories, no destination accounts, and no real sense of what…
I have been reading the Rob MacGregor Indiana Jones prequel novels for a while now. Peril at Delphi, Dance of the Giants, The Seven Veils, and currently working through Genesis Deluge. They are good adventure fiction and they got me thinking about the films again. So I sat down and watched all five in order. Some of them I had not seen in fifteen to twenty years. Raiders of the Lost Ark
BrickTracker 1.4 represents a significant evolution in how we track LEGO collections. While previous versions focused exclusively on tracking complete sets, version 1.4 introduces support for individual minifigures and individual parts—loose pieces that exist outside of any specific set. I’ll try and provides a technical deep-dive into the database architecture changes that made this…
About a year ago, I released BrickTracker, my selfhosted solution for tracking LEGO collections and missing pieces. Since then, it was featured as a Content Spotlight in the selfh.st newsletter (which was honestly a huge deal for me personally). Thanks to all the feedback and suggestions from this community, I’m excited to share version 1.3, which is a big overhaul! What’s…
Day 12 was the finale of Advent of Code 2025. The puzzle appeared to be about fitting oddly-shaped presents into regions under Christmas trees - a classic constraint satisfaction problem. But there was a twist. Part 1: Can They Fit? Given various present shapes and regions under trees, determine how many regions can fit all their listed presents. Example shapes: 1 2 3 4 Shape 0: Shape 4: Shape 5:…
Day 11 was about finding paths through a directed graph. Part 1 was straightforward DFS pathfinding. Part 2 looked like it needed the same approach, but brute force was too slow - the solution required combinatorics and memoization. Part 1: Count All Paths Given a graph of devices with directed connections, count all possible paths from you to out . Example: 1 2 3 4 5 6 7 you: bbb ccc bbb: ddd eee…
Day 10 was a mathematical disguise wrapped in a factory automation problem. What looked like pathfinding turned out to be linear algebra - specifically, systems of equations that need Gaussian elimination to solve efficiently. At least, that’s what I thought until Part 2 humbled me. The Problem Factory machines have indicator lights and buttons. Each button toggles specific lights. Find the…
Day 9 was about finding the largest rectangle between red tiles on a theater floor. Part 1 was straightforward geometry. Part 2 required checking if rectangles fit inside a polygon - which is where I reached for an external library. Part 1: Largest Rectangle Between Any Two Points Given coordinates of red tiles, find the largest rectangle using any two red tiles as opposite corners. This is pure…
Day 8 was brutal. Not because the algorithm is complex - but because I kept making implementation mistakes that cost hours of debugging. The Problem Given 3D coordinates of junction boxes, connect them with light strings. Connect the closest pairs first, forming circuits. After making a certain number of connections, find the sizes of the three largest circuits. This is essentially asking: perform…
Day 7 was about tachyon beams splitting through a manifold. Part 1 was a straightforward recursive beam tracer. Part 2 took a completely different approach with a quantum twist. Part 1: Classical Beam Splitting A tachyon beam enters at S and travels downward. When it hits a splitter ( ^ ), it stops and creates two new beams going down-left and down-right. Example: 1 2 3 4 5 .......S.......…