Londopy

Notes on security, systems, radio, and building things, plus whatever else I’m chewing on.

New posts every Thursday. Get them by email or RSS.

A terminal printing a scheduled GitHub Actions workflow, above the post title

Things GitHub Actions Can Do That Aren't CI

Most people meet GitHub Actions as “the thing that runs tests on pull requests.” But under the hood it’s much more general: a computer that wakes up when something happens, runs whatever you tell it, and goes back to sleep. For public repos, it’s free. Here are things you can do with it that have nothing to do with CI. How it works in 30 seconds A workflow is a YAML file in .github/workflows/. It has: ...

October 22, 2026 · 4 min · Londopy
A terminal hashing a file with git hash-object, above the post title

Your .git Folder Is a Database. Let's Read It.

Every Git repo has a hidden .git folder. Most people never open it. That’s where all of Git lives: every version of every file, every branch, every commit message. And it’s surprisingly simple once you look. Let’s take it apart. Setup Make a throwaway repo so we can poke at it safely: mkdir git-internals && cd git-internals git init -b main echo "hello" > hello.txt git add hello.txt git commit -m "first commit" Now look inside: ...

October 15, 2026 · 5 min · Londopy
A terminal running git bisect run to find the first bad commit, above the post title

git bisect run: Let Git Find the Bug for You

It worked last month. It doesn’t work now. There are 400 commits in between. You could read them all. Or you could let Git find the guilty one in about nine steps. The idea: binary search through history git bisect takes two points: a commit where things were good and one where they’re bad. It checks out the commit halfway between and asks you which it is. Then it throws away the half that can’t contain the bug and repeats. ...

October 8, 2026 · 4 min · Londopy
A terminal running git worktree commands, above the post title

git worktree: Stop Stashing, Start Branching in Parallel

You’re halfway through a feature. Files are open, tests are half-written, nothing compiles. Then someone says: “Production is broken, can you look?” Most people do one of these: git stash, switch branches, fix, switch back, git stash pop, pray. Commit a “WIP” mess they’ll have to clean up later. Clone the whole repo again into another folder. There’s a better option that has been in Git since 2015: worktrees. What a worktree is A normal repo has one working directory: the folder where your files live. A worktree is an extra working directory attached to the same repo. Each one can have a different branch checked out, and they all share the same history, objects, and remotes. ...

October 1, 2026 · 4 min · Londopy
A terminal running the DiresQ sweep: two responders checked in and one overdue, above the post title

The App That Reports You Missing

During Hurricane Harvey in 2017, ordinary people took their own fishing boats into the floodwater and pulled thousands of their neighbors off roofs. Some of them didn’t come back. Here’s the detail that stuck with me: when a volunteer like that heads out, nobody writes down that they went. There’s no dispatcher, no roster, no log. If they stop answering their phone, nothing notices. Eventually, someone realizes they haven’t heard from them in a while. ...

September 26, 2026 · 19 min · Londopy
A terminal listing animals that religious rulings counted as fish, above the post title

When Alligator Counts as Fish & Why I'm a Pescatarian

In 2010, a Catholic in Louisiana asked his archbishop a very specific question. During Lent, Catholics skip meat on Fridays. So: was it okay to eat alligator? The archbishop’s answer: yes. As far as the Church was concerned, alligator counted as seafood. He wasn’t the first religious authority to get a question like that. Over the centuries, priests, bishops, and theologians have been asked to rule on beavers, muskrats, capybaras, and a goose that medieval Europeans believed grew on driftwood. ...

September 24, 2026 · 16 min · Londopy
A terminal printing a .gitattributes file, above the post title

The Best Git Feature You've Never Used

Every repo has a .gitignore. Almost nobody has a .gitattributes. That’s a shame, because this one small file controls how Git sees, diffs, merges, normalizes, and exports your files. Once you know what it can do, you’ll want one in every project. What it is .gitattributes is a plain text file that assigns attributes to paths. Each line is a pattern followed by one or more attributes: *.sh text eol=lf *.png binary docs/** linguist-documentation The patterns work much like .gitignore, with two catches. Negation (!pattern) isn’t allowed. And a directory pattern like vendor/ does not apply to the files inside it, so you need vendor/**. ...

September 24, 2026 · 7 min · Londopy