Posts
No-Guess Minesweeper Boards: First-Click Rules and Solver Verification
A solver can filter no-guess Minesweeper boards from the chosen start. Opening odds and completion rates help choose between retries and perturbation.
Solvable Lights Out Boards and Level Generation with GF(2) Linear Algebra
GF(2) elimination shows why a quarter of 5x5 Lights Out boards are solvable. Pressing each button with probability 1/2 from a dark board samples them uniformly.
From ModelCompare to PHP2Shell: finding, proving and patching are measured in different units
Twelve models agree on their criticism of humans while PHP, the kernel and Node.js ship fixes. Agreement, discovery, proof and a shipped patch are measured in different units.
Estimating AI Prototypes in Two Stages: From Zero to Demo, From Demo to Production
AI makes a demo cheap. Verification, concurrency, payment handling and observability haven't become much cheaper, so I estimate and quote the two stages separately.
Protobuf as the Single Source of Truth: Serving gRPC and HTTP/JSON from One Go Port
One .proto contract generates types and entry points for gRPC, HTTP/JSON and MCP. A Go example serves gRPC and HTTP/JSON from one h2c port and shows where shared timeouts break streams.
Batching ClickHouse Inserts: A Queue and Go Worker, Async Inserts and Deduplicated Retries
I prefer a queue and Go worker to control ClickHouse batching. Async inserts suit clients that cannot batch; retries depend on deduplication and its limits.
Shared Memory for Several AI Tools: SQLite Holds the Truth, Qdrant Only Searches
I use SQLite as the canonical store and Qdrant for retrieval through MCP. Sharing AI memory means deciding who may write and how the stores stay in sync.