{
  "data": [
    {
      "keywords": [
        "home",
        "posts",
        "blog"
      ],
      "kind": "page",
      "path": "/blog/",
      "subtitle": "Notes on security, systems, radio, and building things, plus whatever else I'm chewing on.",
      "title": "Blog",
      "url": "https://londo.me/blog/"
    },
    {
      "keywords": [
        "about"
      ],
      "kind": "page",
      "path": "/blog/about/",
      "subtitle": "Notes on security, systems, radio, and building things, plus whatever else I'm chewing on.",
      "title": "About",
      "url": "https://londo.me/blog/about/"
    },
    {
      "keywords": [
        "contact"
      ],
      "kind": "page",
      "path": "/blog/contact/",
      "subtitle": "Ways to reach Londopy: a message form with optional PGP encryption, IRC, Discord, and GitHub.",
      "title": "Contact",
      "url": "https://londo.me/blog/contact/"
    },
    {
      "keywords": [
        "archive"
      ],
      "kind": "page",
      "path": "/blog/archives/",
      "subtitle": "",
      "title": "Archive",
      "url": "https://londo.me/blog/archives/"
    },
    {
      "keywords": [
        "tags"
      ],
      "kind": "page",
      "path": "/blog/tags/",
      "subtitle": "",
      "title": "Tags",
      "url": "https://londo.me/blog/tags/"
    },
    {
      "keywords": [
        "search"
      ],
      "kind": "page",
      "path": "/blog/search/",
      "subtitle": "",
      "title": "Search",
      "url": "https://londo.me/blog/search/"
    },
    {
      "keywords": [
        "api"
      ],
      "kind": "page",
      "path": "/blog/api/",
      "subtitle": "Every post on this blog as JSON: the full text, tags, the archive, the numbers, a JSON Feed and badges. Read-only, no key, open to any website.",
      "title": "API",
      "url": "https://londo.me/blog/api/"
    },
    {
      "keywords": [
        "github",
        "github-actions",
        "automation"
      ],
      "kind": "post",
      "path": "/blog/posts/github-actions-beyond-ci/",
      "published": "2026-10-22T09:00:00-07:00",
      "subtitle": "GitHub Actions is a free, event-driven computer attached to every repo. Running tests is just the start.",
      "title": "Things GitHub Actions Can Do That Aren't CI",
      "url": "https://londo.me/blog/posts/github-actions-beyond-ci/"
    },
    {
      "keywords": [
        "git",
        "internals",
        "deep-dive"
      ],
      "kind": "post",
      "path": "/blog/posts/git-internals/",
      "published": "2026-10-15T09:00:00-07:00",
      "subtitle": "Git isn't magic. It's a small, clever key-value store with a few text files on top. Here's how to explore it by hand.",
      "title": "Your .git Folder Is a Database. Let's Read It.",
      "url": "https://londo.me/blog/posts/git-internals/"
    },
    {
      "keywords": [
        "git",
        "debugging",
        "tooling"
      ],
      "kind": "post",
      "path": "/blog/posts/git-bisect-run/",
      "published": "2026-10-08T09:00:00-07:00",
      "subtitle": "Something broke, and you don't know which of the last 400 commits did it. Git can binary-search your history and find the exact commit, automatically.",
      "title": "git bisect run: Let Git Find the Bug for You",
      "url": "https://londo.me/blog/posts/git-bisect-run/"
    },
    {
      "keywords": [
        "git",
        "workflow",
        "tooling"
      ],
      "kind": "post",
      "path": "/blog/posts/git-worktree/",
      "published": "2026-10-01T09:00:00-07:00",
      "subtitle": "Check out multiple branches at the same time, in separate folders, from one repo. No stash, no second clone, no lost work.",
      "title": "git worktree: Stop Stashing, Start Branching in Parallel",
      "url": "https://londo.me/blog/posts/git-worktree/"
    },
    {
      "keywords": [
        "hackathon",
        "diresq",
        "python",
        "flask",
        "disaster-response",
        "machine-learning",
        "security"
      ],
      "kind": "post",
      "path": "/blog/posts/diresq/",
      "published": "2026-09-26T09:00:00-07:00",
      "subtitle": "During Hurricane Harvey, volunteers in fishing boats saved thousands of people, and nobody kept track of the volunteers. We built the first version of DiresQ in one 14-hour night at our first hackathon ever, kept building it for four more hackathons, and it placed 3rd in the Software Development track at Reverie Hacks 2026. Here's how it works, and the three times our own code lied to us.",
      "title": "The App That Reports You Missing",
      "url": "https://londo.me/blog/posts/diresq/"
    },
    {
      "keywords": [
        "food",
        "pescatarian",
        "history",
        "religion",
        "philosophy",
        "daoism"
      ],
      "kind": "post",
      "path": "/blog/posts/pescatarian/",
      "published": "2026-09-24T23:06:00-07:00",
      "subtitle": "For two thousand years, religions have argued about where meat ends and fish begins, with rulings on beavers, alligators, and geese that grow on driftwood. I've lived on that line for eight years. Here's the history, the Daoist philosophy behind how I think about it, and how I actually eat.",
      "title": "When Alligator Counts as Fish & Why I'm a Pescatarian",
      "url": "https://londo.me/blog/posts/pescatarian/"
    },
    {
      "keywords": [
        "git",
        "github",
        "gitattributes",
        "tooling",
        "devops"
      ],
      "kind": "post",
      "path": "/blog/posts/gitattributes/",
      "published": "2026-09-24T01:50:00-07:00",
      "subtitle": "Every repo has a .gitignore. Almost nobody has a .gitattributes. Here's everything it can do: line endings, smarter diffs, merge strategies, filters, release archives, and GitHub extras.",
      "title": "The Best Git Feature You've Never Used",
      "url": "https://londo.me/blog/posts/gitattributes/"
    },
    {
      "keywords": [
        "tag",
        "git"
      ],
      "kind": "tag",
      "path": "/blog/tags/git/",
      "subtitle": "4 posts",
      "title": "#git",
      "url": "https://londo.me/blog/tags/git/"
    },
    {
      "keywords": [
        "tag",
        "tooling"
      ],
      "kind": "tag",
      "path": "/blog/tags/tooling/",
      "subtitle": "3 posts",
      "title": "#tooling",
      "url": "https://londo.me/blog/tags/tooling/"
    },
    {
      "keywords": [
        "tag",
        "github"
      ],
      "kind": "tag",
      "path": "/blog/tags/github/",
      "subtitle": "2 posts",
      "title": "#github",
      "url": "https://londo.me/blog/tags/github/"
    },
    {
      "keywords": [
        "tag",
        "automation"
      ],
      "kind": "tag",
      "path": "/blog/tags/automation/",
      "subtitle": "1 post",
      "title": "#automation",
      "url": "https://londo.me/blog/tags/automation/"
    },
    {
      "keywords": [
        "tag",
        "daoism"
      ],
      "kind": "tag",
      "path": "/blog/tags/daoism/",
      "subtitle": "1 post",
      "title": "#daoism",
      "url": "https://londo.me/blog/tags/daoism/"
    },
    {
      "keywords": [
        "tag",
        "debugging"
      ],
      "kind": "tag",
      "path": "/blog/tags/debugging/",
      "subtitle": "1 post",
      "title": "#debugging",
      "url": "https://londo.me/blog/tags/debugging/"
    },
    {
      "keywords": [
        "tag",
        "deep-dive"
      ],
      "kind": "tag",
      "path": "/blog/tags/deep-dive/",
      "subtitle": "1 post",
      "title": "#deep-dive",
      "url": "https://londo.me/blog/tags/deep-dive/"
    },
    {
      "keywords": [
        "tag",
        "devops"
      ],
      "kind": "tag",
      "path": "/blog/tags/devops/",
      "subtitle": "1 post",
      "title": "#devops",
      "url": "https://londo.me/blog/tags/devops/"
    },
    {
      "keywords": [
        "tag",
        "diresq"
      ],
      "kind": "tag",
      "path": "/blog/tags/diresq/",
      "subtitle": "1 post",
      "title": "#diresq",
      "url": "https://londo.me/blog/tags/diresq/"
    },
    {
      "keywords": [
        "tag",
        "disaster-response"
      ],
      "kind": "tag",
      "path": "/blog/tags/disaster-response/",
      "subtitle": "1 post",
      "title": "#disaster-response",
      "url": "https://londo.me/blog/tags/disaster-response/"
    },
    {
      "keywords": [
        "tag",
        "flask"
      ],
      "kind": "tag",
      "path": "/blog/tags/flask/",
      "subtitle": "1 post",
      "title": "#flask",
      "url": "https://londo.me/blog/tags/flask/"
    },
    {
      "keywords": [
        "tag",
        "food"
      ],
      "kind": "tag",
      "path": "/blog/tags/food/",
      "subtitle": "1 post",
      "title": "#food",
      "url": "https://londo.me/blog/tags/food/"
    },
    {
      "keywords": [
        "tag",
        "gitattributes"
      ],
      "kind": "tag",
      "path": "/blog/tags/gitattributes/",
      "subtitle": "1 post",
      "title": "#gitattributes",
      "url": "https://londo.me/blog/tags/gitattributes/"
    },
    {
      "keywords": [
        "tag",
        "github-actions"
      ],
      "kind": "tag",
      "path": "/blog/tags/github-actions/",
      "subtitle": "1 post",
      "title": "#github-actions",
      "url": "https://londo.me/blog/tags/github-actions/"
    },
    {
      "keywords": [
        "tag",
        "hackathon"
      ],
      "kind": "tag",
      "path": "/blog/tags/hackathon/",
      "subtitle": "1 post",
      "title": "#hackathon",
      "url": "https://londo.me/blog/tags/hackathon/"
    },
    {
      "keywords": [
        "tag",
        "history"
      ],
      "kind": "tag",
      "path": "/blog/tags/history/",
      "subtitle": "1 post",
      "title": "#history",
      "url": "https://londo.me/blog/tags/history/"
    },
    {
      "keywords": [
        "tag",
        "internals"
      ],
      "kind": "tag",
      "path": "/blog/tags/internals/",
      "subtitle": "1 post",
      "title": "#internals",
      "url": "https://londo.me/blog/tags/internals/"
    },
    {
      "keywords": [
        "tag",
        "machine-learning"
      ],
      "kind": "tag",
      "path": "/blog/tags/machine-learning/",
      "subtitle": "1 post",
      "title": "#machine-learning",
      "url": "https://londo.me/blog/tags/machine-learning/"
    },
    {
      "keywords": [
        "tag",
        "pescatarian"
      ],
      "kind": "tag",
      "path": "/blog/tags/pescatarian/",
      "subtitle": "1 post",
      "title": "#pescatarian",
      "url": "https://londo.me/blog/tags/pescatarian/"
    },
    {
      "keywords": [
        "tag",
        "philosophy"
      ],
      "kind": "tag",
      "path": "/blog/tags/philosophy/",
      "subtitle": "1 post",
      "title": "#philosophy",
      "url": "https://londo.me/blog/tags/philosophy/"
    },
    {
      "keywords": [
        "tag",
        "python"
      ],
      "kind": "tag",
      "path": "/blog/tags/python/",
      "subtitle": "1 post",
      "title": "#python",
      "url": "https://londo.me/blog/tags/python/"
    },
    {
      "keywords": [
        "tag",
        "religion"
      ],
      "kind": "tag",
      "path": "/blog/tags/religion/",
      "subtitle": "1 post",
      "title": "#religion",
      "url": "https://londo.me/blog/tags/religion/"
    },
    {
      "keywords": [
        "tag",
        "security"
      ],
      "kind": "tag",
      "path": "/blog/tags/security/",
      "subtitle": "1 post",
      "title": "#security",
      "url": "https://londo.me/blog/tags/security/"
    },
    {
      "keywords": [
        "tag",
        "workflow"
      ],
      "kind": "tag",
      "path": "/blog/tags/workflow/",
      "subtitle": "1 post",
      "title": "#workflow",
      "url": "https://londo.me/blog/tags/workflow/"
    }
  ],
  "meta": {
    "api": "londopy-blog",
    "docs": "https://londo.me/blog/api/",
    "generated": "2026-10-27T05:20:06Z",
    "self": "https://londo.me/blog/api/v1/search.json",
    "version": "1.0.0"
  }
}