41554 blogs · [ { "id": "01a0d9df-2dbb-708b-a7a2-94607ae59a51", "title": "The Shape of a Pull Request You Can Trust", "url": "https://mcginniscommawill.com/posts/2026-09-25-the-shape-of-a-pull-request-you-can-trust/", "published_at": "2026-09-25T00:00:00+00:00" }, { "id": "01a0d9df-2dbb-708b-a7a2-94607ba5fb75", "title": "Metering Is a Ledger, Not a Counter", "url": "https://mcginniscommawill.com/posts/2026-09-23-metering-is-a-ledger-not-a-counter/", "published_at": "2026-09-23T00:00:00+00:00" }, { "id": "01a0c5aa-4388-7061-a3d5-b971fa6876df", "title": "Trusting X-Forwarded-For Is How Rate Limiting Quietly Stops Working", "url": "https://mcginniscommawill.com/posts/2026-09-21-trusting-x-forwarded-for/", "published_at": "2026-09-21T00:00:00+00:00" }, { "id": "01a0bb92-0230-71a1-be41-5452b9d03362", "title": "An RSS Reader Is an SSRF Machine", "url": "https://mcginniscommawill.com/posts/2026-09-18-an-rss-reader-is-an-ssrf-machine/", "published_at": "2026-09-18T00:00:00+00:00" }, { "id": "01a0bb92-0230-71a1-be41-5452ba66b4c3", "title": "Deduplicating the Result Is Not Deduplicating the Work", "url": "https://mcginniscommawill.com/posts/2026-09-16-deduplicating-results-versus-work/", "published_at": "2026-09-16T00:00:00+00:00" }, { "id": "01a0bb92-0230-71a1-be41-5452baa4f216", "title": "Validate At the Lowest Public Boundary", "url": "https://mcginniscommawill.com/posts/2026-09-14-validate-at-the-lowest-public-boundary/", "published_at": "2026-09-14T00:00:00+00:00" }, { "id": "01a09523-a635-70e2-9374-c0d322af614c", "title": "The Whole UI Is a Hashtag", "url": "https://mcginniscommawill.com/posts/2026-09-11-the-whole-ui-is-a-hashtag/", "published_at": "2026-09-11T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-144697b6e96e", "title": "How Date Inference Works, and Why Ambiguity Is the Problem", "url": "https://mcginniscommawill.com/posts/2026-09-09-how-date-format-inference-works/", "published_at": "2026-09-09T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446988920b2", "title": "Bounded Autonomy: Retry, Escalate, Never Go Silent", "url": "https://mcginniscommawill.com/posts/2026-09-07-bounded-autonomy-retry-escalate-never-go-silent/", "published_at": "2026-09-07T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-144698928f05", "title": "Your API Is Already an MCP Server", "url": "https://mcginniscommawill.com/posts/2026-09-04-your-api-is-already-an-mcp-server/", "published_at": "2026-09-04T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-144699782f00", "title": "Bradley-Terry: Maximum Likelihood Ratings on an Elo Scale", "url": "https://mcginniscommawill.com/posts/2026-09-02-bradley-terry-on-an-elo-scale/", "published_at": "2026-09-02T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469a49d31a", "title": "Five Backtest Invariants Worth Enforcing In Code", "url": "https://mcginniscommawill.com/posts/2026-08-28-five-backtest-invariants/", "published_at": "2026-08-28T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469a8a40b7", "title": "Evergreen 1.7 Lets the Phone Do the Work", "url": "https://mcginniscommawill.com/posts/2026-08-27-evergreen-1-7-lets-the-phone-do-the-work/", "published_at": "2026-08-27T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469b5d058a", "title": "Same App, Ten Years Apart", "url": "https://mcginniscommawill.com/posts/2026-08-26-same-app-ten-years-apart/", "published_at": "2026-08-26T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469bc6b37f", "title": "PyGeoHash v3.3.2: Reliability at the Edges", "url": "https://mcginniscommawill.com/posts/2026-08-24-pygeohash-v3-3-2-release/", "published_at": "2026-08-24T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469c491934", "title": "Summer Reading List 2026", "url": "https://mcginniscommawill.com/posts/2026-08-23-summer-reading-list-2026/", "published_at": "2026-08-23T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469d3c07e1", "title": "Cache Keys Must Come From the Resolved Call", "url": "https://mcginniscommawill.com/posts/2026-08-21-cache-keys-come-from-the-resolved-call/", "published_at": "2026-08-21T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469df4ceab", "title": "The Kelly Criterion With Real Payoffs and Real Fees", "url": "https://mcginniscommawill.com/posts/2026-08-19-kelly-with-real-payoffs-and-fees/", "published_at": "2026-08-19T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469e66df02", "title": "The Billing Bug You Can't Have", "url": "https://mcginniscommawill.com/posts/2026-08-17-the-billing-bug-you-cant-have/", "published_at": "2026-08-17T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469f0ffc89", "title": "Prove the Test Can Fail: Mutate the Fix", "url": "https://mcginniscommawill.com/posts/2026-08-14-prove-the-test-can-fail/", "published_at": "2026-08-14T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469f2c8d66", "title": "Stars, Views, and Clones Across 63 Repos", "url": "https://mcginniscommawill.com/posts/2026-08-13-stars-views-and-clones-across-63-repos/", "published_at": "2026-08-13T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-14469f901df2", "title": "Running GitHub Actions Efficiently", "url": "https://mcginniscommawill.com/posts/2026-08-12-running-github-actions-efficiently/", "published_at": "2026-08-12T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a08fc378", "title": "Rampart v0.8: Full Fleet Coverage and Better Ruleset Support", "url": "https://mcginniscommawill.com/posts/2026-08-11-rampart-v08-full-fleet-coverage/", "published_at": "2026-08-11T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a0a331e1", "title": "Sharing 100 Requests With Every User You Have", "url": "https://mcginniscommawill.com/posts/2026-08-10-sharing-100-requests-with-every-user/", "published_at": "2026-08-10T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a10b19bc", "title": "What a Month of Portfolio-Wide Engineering Looks Like", "url": "https://mcginniscommawill.com/posts/2026-08-07-a-month-of-portfolio-wide-engineering/", "published_at": "2026-08-07T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a1fc240b", "title": "Programmable Feeds: RSS Is the Bus", "url": "https://mcginniscommawill.com/posts/2026-08-05-programmable-feeds-rss-is-the-bus/", "published_at": "2026-08-05T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a2a63d1b", "title": "This Blog's Newsletter Now Runs on Emit", "url": "https://mcginniscommawill.com/posts/2026-08-03-this-blogs-newsletter-runs-on-emit/", "published_at": "2026-08-03T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a308b54d", "title": "Emit: Pay for Emails, Not Subscribers", "url": "https://mcginniscommawill.com/posts/2026-07-31-emit-pay-for-emails-not-subscribers/", "published_at": "2026-07-31T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a3721986", "title": "MCP Goes Stateless, and Sampling Goes With It", "url": "https://mcginniscommawill.com/posts/2026-07-30-mcp-goes-stateless-sampling-goes-with-it/", "published_at": "2026-07-30T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a39b8634", "title": "Pedal Wrencher Is Back", "url": "https://mcginniscommawill.com/posts/2026-07-29-pedal-wrencher-is-back/", "published_at": "2026-07-29T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a3e6fac7", "title": "Easy Beans (Borracho-Style Pinto Beans)", "url": "https://mcginniscommawill.com/posts/2026-07-28-easy-beans/", "published_at": "2026-07-28T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a44d1f05", "title": "Charred Roasted Salsa", "url": "https://mcginniscommawill.com/posts/2026-07-21-roasted-salsa/", "published_at": "2026-07-21T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a50a2206", "title": "Distilling Skills From a Knowledge Base You Build While You Work", "url": "https://mcginniscommawill.com/posts/2026-07-20-distilling-skills-from-an-okf-knowledge-base/", "published_at": "2026-07-20T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a5ca3c97", "title": "PyGeoHash v3.3.1: A Round of Sharp-Edge Fixes", "url": "https://mcginniscommawill.com/posts/2026-07-19-pygeohash-v3-3-1-release/", "published_at": "2026-07-19T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a5db651e", "title": "Swamp Club: Deterministic Automation for AI Agents", "url": "https://mcginniscommawill.com/posts/2026-07-15-swamp-club-deterministic-agent-automation/", "published_at": "2026-07-15T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a6baae23", "title": "Mexican-Style Grilled Meat Marinade (With a Little Miso)", "url": "https://mcginniscommawill.com/posts/2026-07-14-mexican-grilled-meat-marinade/", "published_at": "2026-07-14T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a6fa4e61", "title": "Setting Up Lexicon with Claude Code and Claude Desktop", "url": "https://mcginniscommawill.com/posts/2026-07-13-lexicon-mcp-claude-code-setup/", "published_at": "2026-07-13T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a7d73330", "title": "Google's Open Knowledge Format", "url": "https://mcginniscommawill.com/posts/2026-07-11-google-open-knowledge-format/", "published_at": "2026-07-11T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a8765055", "title": "Building Reusable Prompt Templates in Lexicon", "url": "https://mcginniscommawill.com/posts/2026-07-08-prompt-templates-lexicon/", "published_at": "2026-07-08T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a88490e2", "title": "The Unified Theory of Food: A Salad-Sandwich Taxonomy", "url": "https://mcginniscommawill.com/guides/unified-food-theory-salad-sandwich-guide/", "published_at": "2026-07-07T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a8fc3c05", "title": "idea.log Now Has an MCP Server", "url": "https://mcginniscommawill.com/posts/2026-07-06-idealog-mcp-server/", "published_at": "2026-07-06T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446a9d12e34", "title": "Lexicon: A Prompt Library for macOS", "url": "https://mcginniscommawill.com/posts/2026-07-01-lexicon-prompt-library-for-macos/", "published_at": "2026-07-01T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446aa68ad1a", "title": "Share Ideas Between idea.log Users with Universal Links", "url": "https://mcginniscommawill.com/posts/2026-06-29-idealog-idea-sharing/", "published_at": "2026-06-29T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446aafad926", "title": "Automating App Store Connect with Fastlane (and Letting Agents Drive)", "url": "https://mcginniscommawill.com/posts/2026-06-24-fastlane-app-store-connect-automation-with-agents/", "published_at": "2026-06-24T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446ab64e796", "title": "idea.log Comes to macOS", "url": "https://mcginniscommawill.com/posts/2026-06-22-idealog-comes-to-macos/", "published_at": "2026-06-22T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446ac2bdb29", "title": "Into the C: Making PyGeoHash Decode Twice as Fast", "url": "https://mcginniscommawill.com/posts/2026-06-17-pygeohash-c-extension-decode/", "published_at": "2026-06-17T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446acef2b2d", "title": "Evergreen Skills - Teaching Claude to Manage Your Relationships", "url": "https://mcginniscommawill.com/posts/2026-06-15-evergreen-skills-marketplace/", "published_at": "2026-06-15T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446addba8a3", "title": "Evergreen Comes to iPhone and iPad", "url": "https://mcginniscommawill.com/posts/2026-06-12-evergreen-comes-to-iphone/", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446ae9878ce", "title": "Optimizing PyGeoHash Without Touching the C", "url": "https://mcginniscommawill.com/posts/2026-06-10-optimizing-pygeohash-wrapper-overhead/", "published_at": "2026-06-10T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446aef5277a", "title": "Managing Context at Organization Scale", "url": "https://mcginniscommawill.com/posts/2026-06-08-organization-scale-context/", "published_at": "2026-06-08T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446aff4fd6f", "title": "Yakitori Negima: Chicken, Scallions, and a Pot of Tare", "url": "https://mcginniscommawill.com/posts/2026-06-06-yakitori-chicken-scallion-tare/", "published_at": "2026-06-06T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b05ee7fb", "title": "Benchmarking PyGeoHash: Where It Lands Against the Field", "url": "https://mcginniscommawill.com/posts/2026-06-03-benchmarking-pygeohash-speed/", "published_at": "2026-06-03T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b10a1df9", "title": "The OODA Loop for Startup Engineering", "url": "https://mcginniscommawill.com/posts/2026-06-01-ooda-loop-startup-engineering/", "published_at": "2026-06-01T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b1484bef", "title": "Rampart v0.7: Push Allowlists for Protected Branches", "url": "https://mcginniscommawill.com/posts/2026-05-27-rampart-push-allowlists/", "published_at": "2026-05-27T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b1a9d8d5", "title": "Pasta e Piselli: A Simple Italian Pasta with Peas", "url": "https://mcginniscommawill.com/posts/2026-05-25-pasta-e-piselli/", "published_at": "2026-05-25T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b27de8e5", "title": "Spring Reading List 2026", "url": "https://mcginniscommawill.com/posts/2026-05-05-spring-reading-list-2026/", "published_at": "2026-05-05T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b302f9fb", "title": "The Full McGinnis Stack: An Opinionated Python Developer Setup", "url": "https://mcginniscommawill.com/posts/2026-04-29-the-full-mcginnis-stack/", "published_at": "2026-04-29T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b372388e", "title": "Using Claude Code Hooks to Force uv", "url": "https://mcginniscommawill.com/posts/2026-04-27-claude-code-hooks-force-uv/", "published_at": "2026-04-27T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b3b56e9e", "title": "uv Changed How I Think About Python Projects", "url": "https://mcginniscommawill.com/posts/2026-04-24-uv-changed-python-packaging/", "published_at": "2026-04-24T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b4a64caa", "title": "Code Archaeology with AI", "url": "https://mcginniscommawill.com/posts/2026-04-22-code-archaeology-with-ai/", "published_at": "2026-04-22T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b4eb4abf", "title": "Technical Debt Is a Leadership Problem", "url": "https://mcginniscommawill.com/posts/2026-04-20-tech-debt-as-leadership-problem/", "published_at": "2026-04-20T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b5c81361", "title": "You Don't Need a Justfile", "url": "https://mcginniscommawill.com/posts/2026-04-17-you-dont-need-a-justfile/", "published_at": "2026-04-17T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b5e24b1e", "title": "Advanced Makefile Patterns for Python Projects", "url": "https://mcginniscommawill.com/posts/2026-04-15-advanced-makefile-patterns/", "published_at": "2026-04-15T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b6dd4d98", "title": "Data Science Career", "url": "https://mcginniscommawill.com/guides/data-science-career-guide/", "published_at": "2026-04-14T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b765dcf3", "title": "Hiring Data Scientists: What Actually Matters in 2026", "url": "https://mcginniscommawill.com/posts/2026-04-14-hiring-data-scientists-2026/", "published_at": "2026-04-14T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b780aa93", "title": "A Full SDLC with MCP Servers", "url": "https://mcginniscommawill.com/posts/2026-04-13-full-sdlc-with-mcps/", "published_at": "2026-04-13T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b7ee8392", "title": "Rating Systems Compared: Choosing the Right Algorithm", "url": "https://mcginniscommawill.com/posts/2026-04-10-rating-systems-compared/", "published_at": "2026-04-10T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b8db53e1", "title": "mutmut-mcp: Tests, CI, and Survivor Prioritization", "url": "https://mcginniscommawill.com/posts/2026-04-09-mutmut-mcp-update/", "published_at": "2026-04-09T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446b9988385", "title": "writing-tools-mcp: Still Useful, Now With uvx", "url": "https://mcginniscommawill.com/posts/2026-04-08-writing-tools-mcp-update/", "published_at": "2026-04-08T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446ba3117e3", "title": "todolist-mcp: Dependencies, Kanban, and Where It Fits Now", "url": "https://mcginniscommawill.com/posts/2026-04-07-todolist-mcp-update/", "published_at": "2026-04-07T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bad0e150", "title": "ContextSwitch Is Now Free", "url": "https://mcginniscommawill.com/posts/2026-04-06-contextswitch-is-now-free/", "published_at": "2026-04-06T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bad9906a", "title": "Ensemble Rating Systems: Combining the Best of All Worlds", "url": "https://mcginniscommawill.com/posts/2026-04-03-ensemble-rating-system/", "published_at": "2026-04-03T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bb771ddd", "title": "uvx --from: Run Any Python Tool Directly from GitHub", "url": "https://mcginniscommawill.com/posts/2026-04-01-uvx-run-from-github/", "published_at": "2026-04-01T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bc0dc0fc", "title": "Building idea.log with SwiftUI and SwiftData", "url": "https://mcginniscommawill.com/posts/2026-03-31-building-idealog-with-swiftui-and-swiftdata/", "published_at": "2026-03-31T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bcfa32fa", "title": "Sentinel: Using MCP Sampling to Analyze Your Own Tool Security", "url": "https://mcginniscommawill.com/posts/2026-03-30-sentinel-mcp-security-advisor/", "published_at": "2026-03-30T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bd118002", "title": "The Colley Matrix: A Linear Algebra Approach to Ratings", "url": "https://mcginniscommawill.com/posts/2026-03-27-colley-matrix-rating-system/", "published_at": "2026-03-27T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446be03fdfd", "title": "MCP Sampling and Elicitation: The Features That Make Servers Smart", "url": "https://mcginniscommawill.com/posts/2026-03-25-mcp-sampling-elicitation-guide/", "published_at": "2026-03-25T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446be381cbf", "title": "A Practical Guide to GitHub Branch Protection Rules", "url": "https://mcginniscommawill.com/posts/2026-03-24-github-branch-protection-deep-dive/", "published_at": "2026-03-24T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bebcb6ca", "title": "Stargazers Now on Homebrew", "url": "https://mcginniscommawill.com/posts/2026-03-23-stargazers-homebrew-release/", "published_at": "2026-03-23T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bef9ab45", "title": "The DWZ Rating System: German Engineering for Chess Ratings", "url": "https://mcginniscommawill.com/posts/2026-03-20-dwz-rating-system/", "published_at": "2026-03-20T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bfbb2f6c", "title": "makefile-mcp: Output Caching, Pagination, and Search", "url": "https://mcginniscommawill.com/posts/2026-03-18-makefile-mcp-output-caching/", "published_at": "2026-03-18T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446bfd877d2", "title": "Setting Up a Personal Homebrew Tap with GoReleaser", "url": "https://mcginniscommawill.com/posts/2026-03-17-personal-homebrew-tap/", "published_at": "2026-03-17T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c0d0475f", "title": "How I Use AI to Act on Ideas, Not Just Collect Them", "url": "https://mcginniscommawill.com/posts/2026-03-16-how-i-use-ai-to-act-on-ideas/", "published_at": "2026-03-16T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c0f6eb15", "title": "TrueSkill: Microsoft's Rating System for Xbox Live", "url": "https://mcginniscommawill.com/posts/2026-03-13-trueskill-rating-system/", "published_at": "2026-03-13T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c188141c", "title": "hugo-frontmatter-mcp: Tests, CI, and uvx Support", "url": "https://mcginniscommawill.com/posts/2026-03-11-hugo-frontmatter-mcp-update/", "published_at": "2026-03-11T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c1975483", "title": "Introducing Vanity: Sync Your GitHub Contributions Across Accounts", "url": "https://mcginniscommawill.com/posts/2026-03-10-introducing-vanity/", "published_at": "2026-03-10T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c19a7a34", "title": "Maintaining Open Source Libraries Nobody Uses", "url": "https://mcginniscommawill.com/posts/2026-03-09-maintaining-oss-nobody-uses/", "published_at": "2026-03-09T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c26a5d84", "title": "Bankroll Management with Keeks: Strategy Comparison", "url": "https://mcginniscommawill.com/posts/2026-03-06-strategy-comparison/", "published_at": "2026-03-06T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c35378f7", "title": "Rampart v0.3: Default Branch Support and HTML Reports", "url": "https://mcginniscommawill.com/posts/2026-03-04-rampart-default-branches-and-html-reports/", "published_at": "2026-03-04T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c3762853", "title": "Your Ideas Deserve Better Than Apple Notes", "url": "https://mcginniscommawill.com/posts/2026-03-03-your-ideas-deserve-better-than-apple-notes/", "published_at": "2026-03-03T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c3a352ae", "title": "Team MCP Servers - From Personal Tools to Shared Infrastructure", "url": "https://mcginniscommawill.com/posts/2026-03-02-team-mcp-server-infrastructure/", "published_at": "2026-03-02T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c4393f67", "title": "Bankroll Management with Keeks: The Naive Strategy", "url": "https://mcginniscommawill.com/posts/2026-02-27-naive-strategy/", "published_at": "2026-02-27T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c4bf54bf", "title": "AI Regulation One Year Later: What Changed in 2025", "url": "https://mcginniscommawill.com/posts/2026-02-26-ai-regulation-updates-2026/", "published_at": "2026-02-26T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c4ef5aae", "title": "Introducing Rampart: Branch Protection Rules Across All Your Repos", "url": "https://mcginniscommawill.com/posts/2026-02-25-introducing-rampart/", "published_at": "2026-02-25T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c53408d4", "title": "category_encoders in the Wild: A Tour of the Research", "url": "https://mcginniscommawill.com/posts/2026-02-24-category-encoders-in-the-wild/", "published_at": "2026-02-24T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c57255e2", "title": "Winter Reading List 2026", "url": "https://mcginniscommawill.com/posts/2026-02-23-winter-reading-list-2026/", "published_at": "2026-02-23T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c5bee0e3", "title": "Bankroll Management with Keeks: Dynamic Strategies", "url": "https://mcginniscommawill.com/posts/2026-02-20-dynamic-bankroll-management/", "published_at": "2026-02-20T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c6a6d977", "title": "The Case for a Dumb Idea App", "url": "https://mcginniscommawill.com/posts/2026-02-18-case-for-a-dumb-idea-app/", "published_at": "2026-02-18T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c71da608", "title": "python-skills: Packaging Library Development as Claude Skills", "url": "https://mcginniscommawill.com/posts/2026-02-17-python-skills-marketplace/", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a087a3-2b8a-7122-bb89-1446c7ad8a18", "title": "Training a Deep Q-Network for Trading", "url": "https://mcginniscommawill.com/posts/2026-02-16-training-a-deep-q-network-for-trading/", "published_at": "2026-02-16T00:00:00+00:00" } ] posts Claim your blog
Back to McGinnis, Will
Blog · corpus.blog/blogs/mcginniscommawill.com/posts

McGinnis, Will

mcginniscommawill.com

2026