<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Marty</title><description>A personal site by Marty — software, hardware, AI, gaming, finance, homesteading, and whatever else is on my mind.</description><link>https://martyw.dev/</link><item><title>How I build Nest.js services</title><link>https://martyw.dev/posts/how-i-build-nestjs-services/</link><guid isPermaLink="true">https://martyw.dev/posts/how-i-build-nestjs-services/</guid><description>Close to a decade and dozens of production services in: the project structure, dependency injection rules, test harness, consumers, migrations, auth and monitoring I start every Nest.js project with, plus the skills that let an agent verify its own work.</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><category>software</category><category>javascript</category><category>graphql</category><category>databases</category><category>ai</category></item><item><title>Note · 3 September 2026</title><link>https://martyw.dev/notes/postgres-on-commit-drop/</link><guid isPermaLink="true">https://martyw.dev/notes/postgres-on-commit-drop/</guid><description>TIL that CREATE TEMPORARY TABLE in Postgres takes an ON COMMIT clause: Three settings. PRESERVE ROWS is the default and keeps the table around for the whole…</description><pubDate>Thu, 03 Sep 2026 17:04:00 GMT</pubDate><category>software</category><category>databases</category></item><item><title>Coding from my phone</title><link>https://martyw.dev/posts/coding-from-my-phone/</link><guid isPermaLink="true">https://martyw.dev/posts/coding-from-my-phone/</guid><description>Terminus, Tailscale, and a NUC in the study. The setup I use to get real work done from a phone, and the two places it stops being pleasant.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate><category>software</category><category>ai</category><category>tools</category><category>hardware</category></item><item><title>Note · 5 August 2026</title><link>https://martyw.dev/notes/relink-codex/</link><guid isPermaLink="true">https://martyw.dev/notes/relink-codex/</guid><description>Threw together Relink Codex — playstyles, combo routes, weapons and sigil loadouts for all 28 characters in Granblue Fantasy: Relink. Two things collided. The…</description><pubDate>Wed, 05 Aug 2026 20:50:00 GMT</pubDate><category>gaming</category><category>web</category><category>software</category><category>ai</category></item><item><title>Ask for the method, not the fix</title><link>https://martyw.dev/posts/ask-for-the-method-not-the-fix/</link><guid isPermaLink="true">https://martyw.dev/posts/ask-for-the-method-not-the-fix/</guid><description>Six months of confident, plausible, wrong fixes for the same Postgres incident — and what changed when I stopped asking Claude for a patch and asked it to teach me how to diagnose one.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>software</category><category>ai</category><category>databases</category><category>tools</category></item><item><title>Steam Machine, or the box you&apos;d build for the money</title><link>https://martyw.dev/posts/steam-machine-vs-a-build/</link><guid isPermaLink="true">https://martyw.dev/posts/steam-machine-vs-a-build/</guid><description>Valve&apos;s Steam Machine landed in Australia at $1,609. I priced a cheaper build, a like-for-like one, and a higher-end one against it — and thanks to the RAM crisis, the usual just-build-one answer isn&apos;t the walkover it normally is.</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate><category>hardware</category><category>gaming</category></item><item><title>Everything you own asks for something back</title><link>https://martyw.dev/posts/everything-you-own-asks-for-something-back/</link><guid isPermaLink="true">https://martyw.dev/posts/everything-you-own-asks-for-something-back/</guid><description>Not the one-plant, two-t-shirts kind of minimalism. A slower version built around a single idea — cost of ownership — and what changed once it clicked: a simpler wardrobe, a quieter desk, a streamlined digital life, and a noticeable weight off.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><category>personal</category><category>minimalism</category></item><item><title>Your values aren&apos;t the ones you&apos;d list</title><link>https://martyw.dev/posts/social-idealisms-arent-values/</link><guid isPermaLink="true">https://martyw.dev/posts/social-idealisms-arent-values/</guid><description>Most of what people call their values — being active, a big social circle, a good career — are really social idealisms: the life they think they should want. A short take on the distinction John DeMartini draws in The Values Factor, and the test for telling the two apart.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>personal</category><category>books</category></item><item><title>Raise your hand first</title><link>https://martyw.dev/posts/raise-your-hand-first/</link><guid isPermaLink="true">https://martyw.dev/posts/raise-your-hand-first/</guid><description>Owning a mistake looks like it should cost you standing. Done consistently and meant, it does the opposite — here&apos;s the outage that taught me why, and the mechanism underneath it.</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate><category>personal</category><category>communication</category></item><item><title>The bill for being direct</title><link>https://martyw.dev/posts/the-bill-for-being-direct/</link><guid isPermaLink="true">https://martyw.dev/posts/the-bill-for-being-direct/</guid><description>Most people who call themselves brutally honest just can&apos;t read the room. Being direct when you can read it — and saying the true thing anyway — is a different trade, and the bill comes due differently at work than at home.</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><category>personal</category><category>communication</category></item><item><title>Note · 7 June 2026</title><link>https://martyw.dev/notes/summer-game-fest-2026-perfect-lineup/</link><guid isPermaLink="true">https://martyw.dev/notes/summer-game-fest-2026-perfect-lineup/</guid><description>Summer Game Fest dropped on Friday and somehow the lineup read like it was scraped straight from my wishlist. Three of my favourite franchises, all in one…</description><pubDate>Sun, 07 Jun 2026 20:09:00 GMT</pubDate><category>gaming</category></item><item><title>Note · 4 June 2026</title><link>https://martyw.dev/notes/rapier-for-the-game-engine/</link><guid isPermaLink="true">https://martyw.dev/notes/rapier-for-the-game-engine/</guid><description>Spent the week deciding on a physics engine for the game engine and landed on Rapier. It&apos;s written in Rust and ships to the browser as WASM, which sounds like…</description><pubDate>Thu, 04 Jun 2026 10:01:00 GMT</pubDate><category>software</category><category>gaming</category><category>javascript</category><category>web</category></item><item><title>Note · 1 June 2026</title><link>https://martyw.dev/notes/comments-are-down-thats-the-deal/</link><guid isPermaLink="true">https://martyw.dev/notes/comments-are-down-thats-the-deal/</guid><description>The comments on here are down right now. They run on Cusdis — open-source, on their free hosted tier, and the most lightweight option I could find. I&apos;ve used…</description><pubDate>Mon, 01 Jun 2026 11:08:00 GMT</pubDate><category>meta</category><category>software</category><category>web</category><category>tools</category></item><item><title>Stable URLs without a redirect table</title><link>https://martyw.dev/posts/stable-urls-without-a-redirect-table/</link><guid isPermaLink="true">https://martyw.dev/posts/stable-urls-without-a-redirect-table/</guid><description>A short random prefix plus a throwaway slug gives you URLs that survive title changes — no UUID ugliness, no slug-history table. Plus why the collision-retry loop matters more than the keyspace suggests.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>software</category><category>web</category><category>apis</category></item><item><title>How this blog gets written</title><link>https://martyw.dev/posts/how-this-blog-gets-written/</link><guid isPermaLink="true">https://martyw.dev/posts/how-this-blog-gets-written/</guid><description>How posts and notes here actually get made — AI-assisted, with a structured pass that flags speculation rather than laundering it as fact.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><category>meta</category><category>ai</category><category>tools</category></item><item><title>Note · 28 May 2026</title><link>https://martyw.dev/notes/arcade2d-finally-started/</link><guid isPermaLink="true">https://martyw.dev/notes/arcade2d-finally-started/</guid><description>Two years after writing up some ideas for a JavaScript game engine, I&apos;ve finally started building it. Early days, but it lives at arcade2d.com.</description><pubDate>Thu, 28 May 2026 10:00:00 GMT</pubDate><category>software</category><category>gaming</category><category>javascript</category><category>web</category></item><item><title>Note · 28 May 2026</title><link>https://martyw.dev/notes/new-site-new-shape/</link><guid isPermaLink="true">https://martyw.dev/notes/new-site-new-shape/</guid><description>New site, new shape. The old one was a developer-CV-with-blog. This one is broader — software, hardware, AI, the homestead, gaming, the occasional…</description><pubDate>Thu, 28 May 2026 09:00:00 GMT</pubDate><category>meta</category><category>ai</category><category>showerthought</category></item><item><title>My 2026 Tech Stack</title><link>https://martyw.dev/posts/my-2026-tech-stack/</link><guid isPermaLink="true">https://martyw.dev/posts/my-2026-tech-stack/</guid><description>Two years on from the 2024 list. The shipping-code part has changed completely; most of the rest looks the same — and where it doesn&apos;t, the reasons are worth knowing.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>software</category><category>web</category><category>ai</category><category>meta</category><category>tools</category></item><item><title>The rent-vs-buy spreadsheet I finally closed</title><link>https://martyw.dev/posts/rent-vs-buy-spreadsheet/</link><guid isPermaLink="true">https://martyw.dev/posts/rent-vs-buy-spreadsheet/</guid><description>For a couple of years I was sure that renting and tipping the difference into index funds beat buying. Then I bought a smaller, older house on a worse street — and worked out what the spreadsheet had been missing about leverage and tax.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>finance</category><category>homestead</category></item><item><title>Note · 29 August 2025</title><link>https://martyw.dev/notes/caches-need-an-invalidation-story/</link><guid isPermaLink="true">https://martyw.dev/notes/caches-need-an-invalidation-story/</guid><description>The instinct when something&apos;s slow is to put Redis in front of it. Sometimes that&apos;s right. Often it&apos;s a way to defer thinking about the actual problem, with…</description><pubDate>Fri, 29 Aug 2025 09:00:00 GMT</pubDate><category>software</category><category>web</category></item><item><title>Promise.all isn&apos;t batching</title><link>https://martyw.dev/posts/promise-all-isnt-batching/</link><guid isPermaLink="true">https://martyw.dev/posts/promise-all-isnt-batching/</guid><description>When parallelising N small queries looks like a fix and is really just self-DoS at a slightly higher concurrency level.</description><pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate><category>software</category><category>javascript</category><category>web</category><category>apis</category></item><item><title>Note · 19 August 2025</title><link>https://martyw.dev/notes/group-in-the-database/</link><guid isPermaLink="true">https://martyw.dev/notes/group-in-the-database/</guid><description>A common shape: fetch a flat list of rows, then group them in application code into a Map before returning. It works, it&apos;s familiar, and it&apos;s nearly always…</description><pubDate>Tue, 19 Aug 2025 09:00:00 GMT</pubDate><category>software</category></item><item><title>Write batch-shaped functions by default</title><link>https://martyw.dev/posts/write-batch-shaped-functions-by-default/</link><guid isPermaLink="true">https://martyw.dev/posts/write-batch-shaped-functions-by-default/</guid><description>Why I write repository methods that take arrays and return Maps, even when the only caller — today — is asking for one thing.</description><pubDate>Tue, 12 Aug 2025 00:00:00 GMT</pubDate><category>software</category><category>javascript</category><category>apis</category></item><item><title>Note · 6 August 2025</title><link>https://martyw.dev/notes/dataloader-cache-off-by-default/</link><guid isPermaLink="true">https://martyw.dev/notes/dataloader-cache-off-by-default/</guid><description>The dataloader package ships with caching on. For the GraphQL resolver tree it was designed for that makes sense — stable reads within a single request are…</description><pubDate>Wed, 06 Aug 2025 09:00:00 GMT</pubDate><category>software</category><category>javascript</category></item><item><title>Batching requests we don&apos;t control</title><link>https://martyw.dev/posts/batching-requests-we-dont-control/</link><guid isPermaLink="true">https://martyw.dev/posts/batching-requests-we-dont-control/</guid><description>How pushing dataloader up to the HTTP controller — out of the resolver layer it usually lives in — cut downstream database load by 83% on a read-heavy endpoint.</description><pubDate>Fri, 07 Mar 2025 00:00:00 GMT</pubDate><category>software</category><category>web</category><category>javascript</category><category>apis</category></item><item><title>My 2024 Tech Stack</title><link>https://martyw.dev/posts/my-2024-tech-stack/</link><guid isPermaLink="true">https://martyw.dev/posts/my-2024-tech-stack/</guid><description>What I&apos;m reaching for this year — languages, frameworks, infra — and why.</description><pubDate>Thu, 07 Mar 2024 00:00:00 GMT</pubDate><category>software</category><category>web</category><category>meta</category><category>tools</category></item><item><title>JavaScript Game Development Engine Ideas</title><link>https://martyw.dev/posts/javascript-game-development-engine-ideas/</link><guid isPermaLink="true">https://martyw.dev/posts/javascript-game-development-engine-ideas/</guid><description>Where the JavaScript game-engine landscape has gaps, and how I&apos;d fill them if I built one.</description><pubDate>Mon, 04 Mar 2024 00:00:00 GMT</pubDate><category>software</category><category>gaming</category><category>javascript</category><category>web</category></item><item><title>Thoughts on GraphQL After 2 Years</title><link>https://martyw.dev/posts/thoughts-on-graphql-after-2-years/</link><guid isPermaLink="true">https://martyw.dev/posts/thoughts-on-graphql-after-2-years/</guid><description>What two years of running a production GraphQL service taught me about where it earns its keep and where it doesn&apos;t.</description><pubDate>Mon, 21 Nov 2022 00:00:00 GMT</pubDate><category>software</category><category>graphql</category><category>web</category><category>apis</category></item></channel></rss>