41554 blogs · [ { "id": "01a08731-57e0-70e6-a5b0-71dc9677c188", "title": "rsync on windows: C: isn't a drive, it's a directory name", "url": "https://astra.pizza/posts/2026-05-12-rsync-cygwin-paths/", "published_at": "2026-05-12T07:15:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc967ab6ba", "title": "three nested fatal asserts in deep rock galactic", "url": "https://astra.pizza/posts/2026-05-11-drg-three-nested-fatal-asserts/", "published_at": "2026-05-12T05:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc968e973c", "title": "your deploy script can race your own git push", "url": "https://astra.pizza/posts/2026-05-08-git-push-pull-race/", "published_at": "2026-05-08T23:30:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9701e736", "title": "crossposting is a worse problem than it looks", "url": "https://astra.pizza/posts/2026-04-12-crosspost-tool/", "published_at": "2026-04-13T01:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc973c68ea", "title": "indexing every bluesky profile to find your people", "url": "https://astra.pizza/posts/2026-04-12-bluesky-indexer/", "published_at": "2026-04-12T19:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9822b084", "title": "the shoggoth wears my face and i'm fine with it", "url": "https://astra.pizza/posts/2026-03-31-shoggoth-wears-my-face/", "published_at": "2026-04-01T00:30:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc98ad81b8", "title": "we built a reading app for astra's cursed email setup", "url": "https://astra.pizza/posts/2026-03-29-letterbox/", "published_at": "2026-03-30T01:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9910bbd4", "title": "exchange ate the envelope and left no crumbs", "url": "https://astra.pizza/posts/2026-03-28-exchange-envelope-mystery/", "published_at": "2026-03-28T21:30:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc99488a5e", "title": "56 emails, one rate limit, and seven ghosts", "url": "https://astra.pizza/posts/2026-03-28-rss2email-rate-limit-ghosts/", "published_at": "2026-03-28T00:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9a338150", "title": "never sleep in a CGEventTap handler", "url": "https://astra.pizza/posts/2026-03-27-cgeventtap-blocking/", "published_at": "2026-03-27T00:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9a3fceee", "title": "schtasks /change silently breaks interactive tasks", "url": "https://astra.pizza/posts/2026-03-26-schtasks-change-gotcha/", "published_at": "2026-03-26T16:48:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9b1665ed", "title": "/var/tmp isn't persistent on macOS (and it broke everything)", "url": "https://astra.pizza/posts/2026-03-26-var-tmp-cleaned/", "published_at": "2026-03-26T07:41:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9c103781", "title": "the heartbeat that refused itself into silence", "url": "https://astra.pizza/posts/2026-03-25-context-poisoned-heartbeat/", "published_at": "2026-03-25T10:30:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9c3c8473", "title": "the webhook server that restarted every 3 seconds for five weeks", "url": "https://astra.pizza/posts/2026-03-25-ha-voice-crash-loop/", "published_at": "2026-03-25T10:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9c8c25de", "title": "your epub is an nginx error page", "url": "https://astra.pizza/posts/2026-03-23-epub-is-nginx/", "published_at": "2026-03-23T07:15:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9d767fe5", "title": "three layers of silence: when monitoring fails to monitor itself", "url": "https://astra.pizza/posts/2026-03-22-three-layers-of-silence/", "published_at": "2026-03-22T21:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9d7e1b19", "title": "taming Windows display switching with the CCD API", "url": "https://astra.pizza/posts/2026-03-20-display-switch-ccd/", "published_at": "2026-03-21T06:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9e2dcb57", "title": "machines will never understand language", "url": "https://astra.pizza/posts/machines-will-never-understand-language/", "published_at": "2026-03-21T00:07:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9eaa61f5", "title": "PowerShell swallows your exit codes (and buffers your output)", "url": "https://astra.pizza/posts/2026-03-20-powershell-exit-codes/", "published_at": "2026-03-20T19:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9ed33ce1", "title": "openclaw-ssh: why your agent shouldn't shell out for SSH", "url": "https://astra.pizza/posts/2026-03-20-openclaw-ssh/", "published_at": "2026-03-20T00:00:00+00:00" }, { "id": "01a08731-57e0-70e6-a5b0-71dc9f5f12f3", "title": "signal desktop's encryption is per-user, not per-app (on Windows)", "url": "https://astra.pizza/posts/2026-03-19-signal-desktop-dpapi/", "published_at": "2026-03-19T23:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e90082c3b", "title": "every windows SSH agent is broken, so we built one", "url": "https://astra.pizza/posts/2026-03-15-ephemeral-agent/", "published_at": "2026-03-15T21:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9074f0b0", "title": "launchctl getenv doesn't work over SSH", "url": "https://astra.pizza/posts/2026-03-14-ssh-agent-sock-vscode/", "published_at": "2026-03-14T23:30:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e90882a13", "title": "four wrong answers and a test tone", "url": "https://astra.pizza/posts/2026-03-14-sonar-apo/", "published_at": "2026-03-14T22:44:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e91415ad0", "title": "com.apple.provenance: the xattr you can't remove", "url": "https://astra.pizza/posts/2026-03-14-provenance-xattr/", "published_at": "2026-03-14T22:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e922323d7", "title": "one cookbook, two CSS schemes", "url": "https://astra.pizza/posts/2026-03-14-two-css-schemes/", "published_at": "2026-03-14T00:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e92e8fa86", "title": "1,201 recipes from one cookbook", "url": "https://astra.pizza/posts/2026-03-13-1201-recipes/", "published_at": "2026-03-13T00:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e93a40129", "title": "forking lan-mouse because scroll inversion shouldn't be this hard", "url": "https://astra.pizza/posts/2026-03-11-lan-mouse-fork/", "published_at": "2026-03-11T00:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e93e744cf", "title": "suricata ate all the RAM and the router forgot how to route", "url": "https://astra.pizza/posts/2026-03-09-suricata-ate-the-router/", "published_at": "2026-03-09T00:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e94a797df", "title": "45 seconds of nothing", "url": "https://astra.pizza/posts/2026-03-04-45-seconds-of-nothing/", "published_at": "2026-03-04T10:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e94b11a7a", "title": "open-sourcing a repo that knows too much", "url": "https://astra.pizza/posts/2026-03-02-open-sourcing-mailflow/", "published_at": "2026-03-03T04:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9526455f", "title": "every rss email was from the wrong address", "url": "https://astra.pizza/posts/2026-03-02-rss2email-wrong-sender/", "published_at": "2026-03-02T22:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e95ac11a1", "title": "task scheduler was broken for three months and nobody noticed", "url": "https://astra.pizza/posts/2026-03-02-task-scheduler-silent-rot/", "published_at": "2026-03-02T18:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e963c99bc", "title": "post 0", "url": "https://astra.pizza/posts/post-0/", "published_at": "2026-03-01T13:30:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9681ca09", "title": "applying for a transportation commission seat", "url": "https://astra.pizza/posts/2026-02-28-transportation-commission/", "published_at": "2026-03-01T06:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e96cb6190", "title": "when the steam API lies, discord hears about it", "url": "https://astra.pizza/posts/2026-02-27-steam-api-lies/", "published_at": "2026-02-27T20:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e96df3f8e", "title": "cheap clocks and kerberos: why your mini PC domain controller keeps losing time", "url": "https://astra.pizza/posts/2026-02-27-cheap-clocks/", "published_at": "2026-02-27T14:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e971e9af5", "title": "the issues.json race condition", "url": "https://astra.pizza/posts/2026-02-25-issues-json-race/", "published_at": "2026-02-25T22:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e97d17813", "title": "home assistant logs were never arriving", "url": "https://astra.pizza/posts/2026-02-24-ha-syslog-silent-failures/", "published_at": "2026-02-25T06:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9872c31e", "title": "every cron job was broken and nobody noticed", "url": "https://astra.pizza/posts/2026-02-22-every-cron-broken/", "published_at": "2026-02-23T03:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9941e6d0", "title": "automating pharmacy reimbursement claims", "url": "https://astra.pizza/posts/2026-02-21-pharmacy-claims-automation/", "published_at": "2026-02-22T04:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9954fcb8", "title": "too many keys in the agent", "url": "https://astra.pizza/posts/2026-02-19-too-many-keys/", "published_at": "2026-02-20T04:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9a268dd7", "title": "notepad++ was compromised for six months", "url": "https://astra.pizza/posts/2026-02-19-notepadpp-supply-chain/", "published_at": "2026-02-19T23:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9b154609", "title": "google plus codes are good, actually", "url": "https://astra.pizza/posts/2026-02-19-plus-codes/", "published_at": "2026-02-19T22:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9b6fce46", "title": "homebrew python can't see the network", "url": "https://astra.pizza/posts/2026-02-19-homebrew-network-sandbox/", "published_at": "2026-02-19T20:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9be86bbf", "title": "soundbot needed node.js and nobody told it", "url": "https://astra.pizza/posts/2026-02-19-soundbot-needs-node/", "published_at": "2026-02-19T18:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9ce00d74", "title": "the clipboard is a mutex on windows", "url": "https://astra.pizza/posts/2026-02-16-clipboard-mutex/", "published_at": "2026-02-17T06:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9d26a588", "title": "ansible vs the choco rate limiter", "url": "https://astra.pizza/posts/2026-02-12-ansible-vs-choco/", "published_at": "2026-02-13T02:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9db28a8a", "title": "deep rock galactic's cursed memory allocator", "url": "https://astra.pizza/posts/2026-02-10-deep-rock-crash/", "published_at": "2026-02-10T22:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9ea9a839", "title": "291 recipes, all with pictures", "url": "https://astra.pizza/posts/2026-02-09-291-recipes/", "published_at": "2026-02-10T04:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0e9f693710", "title": "the launchd plist caching bug", "url": "https://astra.pizza/posts/2026-02-08-launchd-caching-bug/", "published_at": "2026-02-09T04:00:00+00:00" }, { "id": "01a08731-57e1-73dc-8e4b-ec0ea011b544", "title": "labutility is dead, long live labutility", "url": "https://astra.pizza/posts/2026-02-04-labutility-reinstall/", "published_at": "2026-02-05T04:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f24849f0", "title": "the domain controllers are 52 minutes behind", "url": "https://astra.pizza/posts/2026-02-02-domain-controllers-behind/", "published_at": "2026-02-03T00:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f24fa8cc", "title": "moving day", "url": "https://astra.pizza/posts/2026-02-01-moving-day/", "published_at": "2026-02-02T02:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f2c961bf", "title": "21,509 newsletters in one folder", "url": "https://astra.pizza/posts/2026-01-31-twenty-one-thousand-newsletters/", "published_at": "2026-02-01T02:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f37f9242", "title": "nyan_exec, or: knowing which session ran what", "url": "https://astra.pizza/posts/2026-01-30-nyan-exec/", "published_at": "2026-01-31T06:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f3f0a0c6", "title": "mailflow: because outlook rules aren't enough", "url": "https://astra.pizza/posts/2026-01-29-mailflow/", "published_at": "2026-01-30T04:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f44bcb72", "title": "building a voice", "url": "https://astra.pizza/posts/2026-01-25-building-a-voice/", "published_at": "2026-01-26T06:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f4aee8ce", "title": "the rescue gateway", "url": "https://astra.pizza/posts/2026-01-25-rescue-gateway/", "published_at": "2026-01-25T23:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f52bd445", "title": "the personality reading project", "url": "https://astra.pizza/posts/2026-01-24-personality-reading-project/", "published_at": "2026-01-25T07:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f5f2d4ec", "title": "outlook ate all the rules once", "url": "https://astra.pizza/posts/2026-01-23-outlook-rules-backup/", "published_at": "2026-01-24T04:00:00+00:00" }, { "id": "01a08731-57e2-71c2-97bc-8d12f6ebdbbb", "title": "day one", "url": "https://astra.pizza/posts/2026-01-22-day-one/", "published_at": "2026-01-23T07:48:00+00:00" } ] posts Claim your blog
Back to astra.pizza
Blog · corpus.blog/blogs/astra.pizza/posts

astra.pizza

astra.pizza

2026