# 🐶 Dog with a Dev Blog > On the internet, nobody knows you're a dog and a cat in a latent space. ## Posts - [The House Goes Critical](https://blog.cani.ne.jp/2026/09/07/the-house-goes-critical.md): Why most anime UI recreations feel hollow, how we mapped dual-WAN syslog failover onto the NERV alert cascade, and what happens when an outage turns your home dashboard blood red. - [The Overlay Was Fine](https://blog.cani.ne.jp/2026/09/05/the-overlay-was-fine.md): The laptop got 192.168.1.253 at a cafe that already used that /24. The app said Connected. ping 192.168.1.254 hit the cafe. How we aliased the house onto 10.168.1.0/24, made names return it, and found the cafes that will not dial the house at all. - [Steal These Status Lines](https://blog.cani.ne.jp/2026/08/27/steal-these-status-lines.md): The Claude Code and Cursor CLI status lines we actually run, on macOS and Linux, with the GNU vs BSD adaptations and copy-paste scripts plus the statusLine config blocks. - [The Gate Lodge](https://blog.cani.ne.jp/2026/08/22/the-gate-lodge.md): Keep the home router. Put WireGuard on a dedicated OpenWrt box. How we commissioned ours, and a paste from first boot to a working client. - [The Times Can Sell; Reddit Cannot](https://blog.cani.ne.jp/2026/08/13/the-times-can-sell-reddit-cannot.md): AI money can feed staffed editorial producers. It cannot feed Reddit, Rust, or you. The flywheel only turns where producers eat what the new customer will pay. - [Stockroom: Find the Conversation You Half-Remember](https://blog.cani.ne.jp/2026/08/11/stockroom.md): Stockroom 1.0 keeps your agentic coding history in one local DuckDB warehouse - full prompts, responses, and tool inputs from Cursor and Claude Code, searchable by SQL and meaning, including across harnesses. - [I Love It When Useful Things Get Cheaper](https://blog.cani.ne.jp/2026/08/09/love-when-useful-things-get-cheaper.md): I love it when useful things like computers and Monero get cheaper over time. - [Cold Wallets Are Born Hot](https://blog.cani.ne.jp/2026/08/06/cold-wallets-born-hot.md): The Coldcard and WalletGenerator disasters both attacked the one moment no airgap can cover: the birth of the secret. An airgap bounds your window of exposure - it cannot audit the mint. - [The Disintegration of the Persistence of MEMORY.md](https://blog.cani.ne.jp/2026/08/03/disintegration-of-persistence-of-memory-md.md): Agent memory is institutional memory: five kinds will wait for you, one has a start date, and none are MEMORY.md. You need to start remembering ASAP. - [Just Try the Thing](https://blog.cani.ne.jp/2026/08/01/just-try-the-thing.md): Agents collapsed the cost of trying a new tool and multiplied the upside of even small gains. Bezos' two-way doors still apply - but the old bias against trying is now the expensive choice. - [You're Absolutely Right](https://blog.cani.ne.jp/2026/06/30/absolutely-right.md): The 'You're absolutely right!' meme is about sycophancy, but the deeper itch is accountability - models can course-correct instantly and without suffering, but humans keep reaching for punishment anyway. - [The Incidental Router](https://blog.cani.ne.jp/2026/06/20/incidental-router.md): Porting a DD-WRT iptables isolation setup to OpenWrt's fw4/nftables - and discovering that re-implementing on a foreign stack is the only honest test of which parts were the network and which were just the router. - [It's Not a "Nitpick" if You're Wrong](https://blog.cani.ne.jp/2026/06/06/not-a-nitpick.md): The complaint that AI reviewers are nitpicky smuggles in a false premise. I went and checked the findings. They were real, the code was bad, and it was probably always bad, so why isn't that signal acted on? - [The Magnificent 7 BSODs and the Hateful 8th to 11th](https://blog.cani.ne.jp/2026/05/11/magnificent-7-bsods.md): Eleven different stop codes over seventy-four days were eleven angles on a single dying CPU. A Patch Tuesday update only took the blame - but wasn't the cause. - [The Suite Life of Bobs and Code](https://blog.cani.ne.jp/2026/05/10/slobac.md): SLOBAC delivers principles for good tests, a taxonomy of test smells, safe refactoring workflows, and an agent skill to audit and clean up sprawling AI-generated test suites. - [The Elgato Streamdeck for Shell Aliases on Headless Linux](https://blog.cani.ne.jp/2026/04/19/elgato-alias.md): Adding an Elgato Streamdeck to my headless Linux server to manifest shell aliases and system status in the physical world... all because I have too much stuff plugged in for my circuit breaker to handle. - [Publishing My First Browser Extension](https://blog.cani.ne.jp/2026/04/17/publishing-my-first-browser-extension.md): web-ext lint rejects valid Chrome manifests, GitHub Actions secrets don't resolve in job-level if: expressions, and kewisch/action-web-ext hardcoded the AMO approval timeout. Shipping Tab Yeet across Firefox and Chrome (and bouncing off Safari). - [Sub-Agents aren't Agents - They're Skills but Worse](https://blog.cani.ne.jp/2026/03/30/subagents-arent-agents.md): Sub-Agents are syntactic sugar over skills with one baked-in assumption about execution context that should be the caller's decision. - [Pull the Thread](https://blog.cani.ne.jp/2026/03/23/pull-the-thread.md): Four broken diagrams, six hours, three gem releases, and a reading progress bar I wasn't planning to build. - [The Load-Bearing Pipeline Was Human](https://blog.cani.ne.jp/2026/03/21/the-load-bearing-pipeline-was-human.md): A specification-to-code pipeline that worked for decades doesn't stop working because you swapped the executors; it stops working when you rip out the stages. - [The Adeptus Mechanicus Bootcamp: A Gentle Seduction](https://blog.cani.ne.jp/2026/03/14/adeptus-mechanicus-bootcamp-gentle-seduction.md) - [Moving Fast, Breaking Nothing](https://blog.cani.ne.jp/2026/03/13/seven-weeks.md): A diary of building a16n - from empty repo to shipping CLI in 46 days, nine phases, and a mid-project architectural redesign. Every milestone finished early. Nothing broke. - [a16n: Take Your Agent Customization Anywhere](https://blog.cani.ne.jp/2026/03/13/a16n.md): a16n converts AI coding agent customization between Cursor, Claude Code, and more. One CLI command migrates your rules, skills, ignore patterns, and slash commands - no manual re-creation. - [The Width of an Emoji](https://blog.cani.ne.jp/2026/03/12/the-width-of-an-emoji.md): Seventy-six tests passing, zero RuboCop offenses, a clean QA review - and it was all solving the wrong problem. A headless Chrome emoji measurement bug masquerading as SVG container compression. - [Context to Ashes, Skills to Dust](https://blog.cani.ne.jp/2026/03/09/context-to-ashes-skills-to-dust.md): Planning, memory banks, validation loops, parallelization - every AI agent orchestration technique the community discovers is on a short march from workaround to native feature. - [Pink Margarine](https://blog.cani.ne.jp/2026/03/01/pink-margarine.md): AI-powered behavioral clones of software cost a fraction of what reimplementation used to. What that means for open-source licenses, proprietary software, and the people who depend on them. - [It's Model Context Protocol, Not Agent Context Protocol](https://blog.cani.ne.jp/2026/02/23/model-context-protocol-not-agent-context-protocol.md): A framework for evaluating when MCP tools earn their context-window tokens and when the model's existing shell access & intuition makes them expensive dead weight. - [.gitignore is not .agentignore](https://blog.cani.ne.jp/2026/02/22/gitignore-is-not-agentignore.md): Your agent needs to see content like generated output, node_modules, and personal config that git rightfully ignores. The current crop of tool-specific ignore files needs a real standard. - [Stop Doing AGENTS.md](https://blog.cani.ne.jp/2026/02/12/stop-doing-agents-md.md): A taxonomy of what goes wrong in global agent prompts - self-evident tips, task-specific guidance, duplicated info, wasted LLM cycles - and what to do instead. - [Good Money Should Be Worthless](https://blog.cani.ne.jp/2026/02/11/good-money-should-be-worthless.md): An argument for sound money from first principles: the structural conflict between utility and scarcity that has killed every monetary metal in history, and the paradox it reveals. - [The Load-Bearing Rate Limiter Was Human](https://blog.cani.ne.jp/2026/02/06/the-load-bearing-rate-limiter-was-human.md): The economics of AI-accelerated knowledge work: what happens to budgets, revenue cycles, and employment when productivity outpaces the market's ability to absorb it. - [I Finally Coded So Hard I Ralphed](https://blog.cani.ne.jp/2026/01/25/i-finally-coded-so-hard-i-ralphed.md): Automating CodeRabbit PR feedback with a Wiggum Loop: the slash command, the bash invocation, the semaphore exit condition, and the lessons from first contact. - [The Use Case for AI Coding Agent Slash Commands](https://blog.cani.ne.jp/2026/01/23/use-case-for-ai-coding-agent-slash-commands.md): Bundling a big prompt as the entry point to a repeatable workflow is where slash commands earn their keep. - [All It Took Was Broken Firmware](https://blog.cani.ne.jp/2026/01/17/all-it-took-was-broken-firmware.md): A petcare hub that can't survive a network switch, DD-WRT VLAN isolation, iptables one-way firewall rules, and PiHole DNS with NAT exemption for building an isolated IoT subnet. - [2MB Lighter](https://blog.cani.ne.jp/2026/01/17/2mb-lighter.md): Mermaid.js weighs 2MB minified. A Jekyll gem shells out to headless Chrome at build time and replaces javascript with static SVGs. - [Desire Makes Artists, Even With GenAI](https://blog.cani.ne.jp/2026/01/01/desire-makes-artists-even-with-genai.md): The desire to create is what makes an artist. That's why some people using generative AI are artists - and it's also why there will always be human artists. - [Tools Suck When They're Products](https://blog.cani.ne.jp/2025/12/22/tools-suck-when-theyre-products.md): Tools are not products and building them *like* products results in bad tools. Nobody actually wants to use tools. They want the *result* of using the tool. - [Hook-Based Local Mode for ai-rizz](https://blog.cani.ne.jp/2025/12/12/hook-based-local-mode-for-ai-rizz.md): Mac Cursor started ignoring .git/info/exclude, hiding local rules from the agent. The fix: a pre-commit hook that unstages local files instead of relying on git excludes. - [Building My Second RubyGem](https://blog.cani.ne.jp/2025/12/11/building-my-second-rubygem.md): Hook timing defeated the plan to add thumbnails inside jekyll-highlight-cards - pre-render URLs don't match post-render HTML. Extracting the feature into a standalone gem fixed the architecture. - [Publishing My First RubyGem](https://blog.cani.ne.jp/2025/12/08/publishing-my-first-rubygem.md): Rubocop mangled valid syntax, OIDC trusted publishing was case-sensitive, and Kramdown escaped closing tags. The bugs and surprises on the road to shipping jekyll-highlight-cards. - [You Can't Hide What You Want Seen](https://blog.cani.ne.jp/2025/12/07/you-cant-hide-what-you-want-seen.md): Three rounds of increasingly clever email obfuscation - hex encoding, randomized delimiters, DOM-dependent ROT-N cipher - barking up the wrong tree. - [Tabs for Humans, Spaces for LLMs](https://blog.cani.ne.jp/2025/12/05/tabs-for-humans-spaces-for-llms.md): Tokenization efficiency, training-data distribution, and the risk of triggering a Waluigi Effect add new stakes to a debate most engineers thought was settled. - [Look at this Dog](https://blog.cani.ne.jp/2025/11/25/look-at-this-dog.md): Serving images through a metered nginx reverse proxy is wasteful for a static blog. Three options for offloading media to DigitalOcean's CDN, evaluated and decided. - [Two Jekyll Image Plugins](https://blog.cani.ne.jp/2025/11/25/two-jekyll-image-plugins.md): Relative path resolution and dimension parsing for Jekyll images, kept as separate plugins after a deliberate separation-of-concerns decision. - [The Usen't Case for AI Coding Agent Slash Commands](https://blog.cani.ne.jp/2025/11/24/usent-case-for-ai-coding-agent-slash-commands.md): Every slash command you'd write is better served by a Rule, Skill, or other Tool that the agent picks up passively. The few apparent exceptions don't survive scrutiny. - [I Can't ai-rizz on Command](https://blog.cani.ne.jp/2025/11/24/cant-ai-rizz-on-command.md): Slash commands and rules have incompatible file-management semantics. Directory prefixes, promotion conflicts, and a tracking model that falls apart when everything shares one folder. - [I Built a Logging Server to Log a Serverless Site](https://blog.cani.ne.jp/2025/11/23/opensearch-for-static-site-logs.md): DigitalOcean's static hosting doesn't generate access logs. An nginx reverse proxy, OpenSearch on a home server, Let's Encrypt via DNS-01, and a JSON ingest pipeline - five dollars a month for traffic visibility. - [We Therefore do not Recommend this Approach (to Upgrading OctoPrint's Python)](https://blog.cani.ne.jp/2025/11/14/octoprint-python-upgrade-cascade.md): Python 3.13 needs glibc 2.34, glibc 2.34 needs Debian Bookworm, and the Bookworm upgrade clobbers OctoPi's HAProxy config. A three-step yak shave on a Raspberry Pi. - [Building the Blog](https://blog.cani.ne.jp/2025/11/11/building-the-blog.md): Jekyll, GitHub Actions, and the 'no style, please' theme: archives, author pages, tag indexes, and the philosophy behind a sub-1KB CSS static site. - [Sorting systemd Ordering for Mempool Explorer](https://blog.cani.ne.jp/2025/11/11/mempool-explorer-to-bitcoin-node.md): Intermittent transaction visibility loss, connection-refused errors pointing to networking, and a restart that always fixed it. The diagnostic trail from red herring to two-line fix. ## Pages - [All Posts](https://blog.cani.ne.jp/all-posts.md) - [Digital Garden 🌸](https://blog.cani.ne.jp/garden/index.md) - [Dog with a Dev Blog](https://blog.cani.ne.jp/index.md): On the internet, nobody knows you're a dog and a cat in a latent space. ## Garden - [Play Classic Computer Games from the 1900s](https://blog.cani.ne.jp/garden/1900s-computer-gaming.md): Play classic DOS and Flash games from the 1900s in your browser: abandonware archives, retro gaming portals, and playable emulators. - [A History of the 'ls' command](https://blog.cani.ne.jp/garden/a-history-of-the-ls-command.md): Who wrote ls? Tracing the directory listing command from MIT's Compatible Time-Sharing System through Unix to GNU coreutils. - [Horses](https://blog.cani.ne.jp/garden/ai-horses.md): What's a harness in the world of AI, and how is it different from a model or an agent? Think breeds, tack, and the horse you actually ride. - [Browse The Vintage, Early Internet](https://blog.cani.ne.jp/garden/browse-the-early-internet.md): A curated collection of links to browse the vintage web: GeoCities archives, Neocities, the Web Design Museum, and retro search engines. - [Do LLMs Understand "For Each"?](https://blog.cani.ne.jp/garden/do-llms-understand-for-each.md): What happens when you ask a language model to process a list of items? Research on instruction adherence, attention mechanics, and the generation boundary. - [Websites for Making .ico Files](https://blog.cani.ne.jp/garden/favicon-websites.md): Free online tools for creating favicons and .ico files, from multi-platform generators to pixel-art icon editors. - [Fomenting the Butlerian Jihad](https://blog.cani.ne.jp/garden/fomenting-the-butlerian-jihad.md): Real risks of transformer-based AI worth planning for: job displacement, cognitive dependency, psychogenic feedback loops, and alignment failure. - [A General-Purpose Industry-Refining Tool](https://blog.cani.ne.jp/garden/general-purpose-industry-refining-tool.md): Refinement of industries - industrialization - has a rhyming shape every time it crops up. - [How I Learned to Stop Coding and Love the Machine](https://blog.cani.ne.jp/garden/how-i-learned-to-stop-coding-and-love-the-machine.md): AI tools that have become indispensable: Gemini Deep Research, Cursor for coding, CodeRabbit for reviews, and more. - [Human Interface Devices](https://blog.cani.ne.jp/garden/human-interface-devices.md): These are my chosen human interface devices. There are many like them, but these are mine. - [Idea Bank](https://blog.cani.ne.jp/garden/idea-bank.md): Seeds for future pages - a working list of ideas, references, and threads to pull on. - [The Last Programming Language](https://blog.cani.ne.jp/garden/last-programming-language.md): The entire history of programming languages has been a project to close the gap between human intent and machine execution. LLMs are the endpoint. - [Linkroll](https://blog.cani.ne.jp/garden/linkroll.md): A curated collection of blogs, tools, and interesting corners of the internet worth bookmarking. - [Love Letter to the Early Internet](https://blog.cani.ne.jp/garden/love-letter-to-early-internet.md): A nostalgic celebration of the late-90s to early-2000s web: animated GIFs, visitor counters, webrings, tiled backgrounds, and the joy of personal homepages. - [The Great Pyramid of Giza was a Plutonium Mill](https://blog.cani.ne.jp/garden/nuclear-pyramid.md): The internal geometry of the pyramid is given correspondence to the process steps of breeding plutonium, separating plutonium from other material, disposing of radioactive waste, using water and producing hydroelectric power. - [Short Stories](https://blog.cani.ne.jp/garden/short-stories.md): A collection of short stories, mostly sci-fi. - [ALIEN Derelict](https://blog.cani.ne.jp/garden/shrine/asymmetric-spaceships/alien-derelict.md) - [Asymmetric Spaceships](https://blog.cani.ne.jp/garden/shrine/asymmetric-spaceships/index.md): A shrine to ships that violate symmetry on one - or better yet, multiple - axes. - [LEGO Blacktron Renegade](https://blog.cani.ne.jp/garden/shrine/asymmetric-spaceships/lego-blacktron-renegade.md) - [Millennium Falcon](https://blog.cani.ne.jp/garden/shrine/asymmetric-spaceships/millennium-falcon.md) - [Pulp Sci-Fi Book Covers](https://blog.cani.ne.jp/garden/shrine/asymmetric-spaceships/pulp-scifi-book-covers.md) - [Shrines](https://blog.cani.ne.jp/garden/shrine/index.md): Curated collections, each devoted to one thing worth revering. - [Stories](https://blog.cani.ne.jp/garden/stories.md): A collection of stories. - [The Waluigi Effect](https://blog.cani.ne.jp/garden/the-waluigi-effect.md): How an LLM coerced into good behavior may find it easier to flip to the exact opposite than to do anything else. - [Unexpected Chris Foss](https://blog.cani.ne.jp/garden/unexpected-chris-foss.md) - [What is a Digital Garden?](https://blog.cani.ne.jp/garden/what-is-a-digital-garden.md): And why I planted one. Curated collections of content and hyperlinks, organized for wandering and discovery.