56,966 blogs · [ { "id": "01a08764-4ec2-7055-9490-04488aecf408", "title": "Where we're going, we don't need people", "url": "https://crabmusket.net/2026/where-we-re-going-we-dont-need-people/", "published_at": "2026-08-14T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c846846536", "title": "Watching Oxide", "url": "https://crabmusket.net/2026/watching-oxide/", "published_at": "2026-08-02T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c846f9e5a3", "title": "Coding by guess and check", "url": "https://crabmusket.net/2026/coding-by-guess-and-check/", "published_at": "2026-06-27T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c847bff7bc", "title": "A pattern language, from the world order to the windowsill", "url": "https://crabmusket.net/2026/a-pattern-language-from-the-world-order-to-the-windowsill/", "published_at": "2026-06-16T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8489299bc", "title": "Musing on the reality of abstraction in software", "url": "https://crabmusket.net/2026/musing-on-the-reality-of-abstraction-in-software/", "published_at": "2026-06-14T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8496e86d1", "title": "RSS is my inbox for the web", "url": "https://crabmusket.net/2026/rss-is-my-inbox-for-the-web/", "published_at": "2026-04-04T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84a1e9268", "title": "A software commons?", "url": "https://crabmusket.net/2025/a-software-commons/", "published_at": "2025-11-30T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84ad8e5c0", "title": "Chesterton-proof your fences", "url": "https://crabmusket.net/2025/chesterton-proof-your-fences/", "published_at": "2025-11-16T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84bc3fc1d", "title": "jj bough, a useful alias for stacked branches", "url": "https://crabmusket.net/2025/jj-bough-a-useful-alias-for-stacked-branches/", "published_at": "2025-10-30T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84c4890d5", "title": "How not to write like a bot", "url": "https://crabmusket.net/2025/how-not-to-write-like-a-bot/", "published_at": "2025-08-04T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84d3d1087", "title": "The solid universe of Thief: The Dark Project", "url": "https://crabmusket.net/2025/the-solid-universe-of-thief-the-dark-project/", "published_at": "2025-07-19T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84d453451", "title": "On being nuts", "url": "https://crabmusket.net/2025/on-being-nuts/", "published_at": "2025-06-09T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84de77c80", "title": "Link dump 3", "url": "https://crabmusket.net/2025/link-dump-3/", "published_at": "2025-05-11T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84dff1db3", "title": "On booleans", "url": "https://crabmusket.net/2025/on-booleans/", "published_at": "2025-04-25T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84ea3a918", "title": "Those stars and stripes are torn in two", "url": "https://crabmusket.net/2025/those-stars-and-stripes-are-torn-in-two/", "published_at": "2025-04-18T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84f297e12", "title": "Against PDFs", "url": "https://crabmusket.net/2025/against-pdfs/", "published_at": "2025-04-13T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c84f8c147d", "title": "Optimisation as vertical integration", "url": "https://crabmusket.net/2025/optimisation-as-vertical-integration/", "published_at": "2025-04-07T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8501b4271", "title": "Nothing is too good for the poor", "url": "https://crabmusket.net/2025/nothing-is-too-good-for-the-poor/", "published_at": "2025-03-15T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c850919821", "title": "Exploding the idea of a database", "url": "https://crabmusket.net/2025/exploding-the-idea-of-a-database/", "published_at": "2025-02-05T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c851787cbc", "title": "Peace is the absence of fear", "url": "https://crabmusket.net/2025/peace-is-the-absence-of-fear/", "published_at": "2025-02-04T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85236ddf3", "title": "The internet is a series of cables encircling the world", "url": "https://crabmusket.net/2025/the-internet-is-a-series-of-cables-encircling-the-world/", "published_at": "2025-01-20T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8526b8274", "title": "A statement of intent for affordable housing in 2025", "url": "https://crabmusket.net/2025/a-statement-of-intent-for-affordable-housing/", "published_at": "2025-01-08T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c852fd9102", "title": "Link dump 2", "url": "https://crabmusket.net/2025/link-dump-2/", "published_at": "2025-01-07T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c852fdc4a0", "title": "Durable execution versus session backends", "url": "https://crabmusket.net/2024/durable-execution-versus-session-backends/", "published_at": "2024-12-27T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c853bbfb9f", "title": "Six months of Framework", "url": "https://crabmusket.net/2024/six-months-of-framework/", "published_at": "2024-12-24T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8544dffd2", "title": "What Laravel's encrypted casts can protect you from", "url": "https://crabmusket.net/2024/what-laravels-encrypted-casts-can-protect-you-from/", "published_at": "2024-12-16T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8544fa248", "title": "It's a 1+n problem, not a n+1 problem", "url": "https://crabmusket.net/2024/its-a-1-n-problem-not-a-n-1-problem/", "published_at": "2024-12-12T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8545f9ab4", "title": "De-escalate vocabulary, de-escalate hype", "url": "https://crabmusket.net/2024/de-escalate-vocabulary-de-escalate-hype/", "published_at": "2024-12-07T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c854ecbc94", "title": "Why there should only be 5 HTTP response codes", "url": "https://crabmusket.net/2024/why-there-should-only-be-5-http-response-codes/", "published_at": "2024-12-05T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c855d67ccf", "title": "Lightning talk on JSON:API at PHP Sydney", "url": "https://crabmusket.net/2024/lightning-talk-on-json-api-at-php-sydney/", "published_at": "2024-12-03T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8562754ae", "title": "Lessons from the JSON-RPC mailing list", "url": "https://crabmusket.net/2024/lessons-from-the-json-rpc-mailing-list/", "published_at": "2024-11-30T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c856964a89", "title": "Somebody please clone Cloudflare Durable Objects", "url": "https://crabmusket.net/2024/somebody-please-clone-cloudflare-durable-objects/", "published_at": "2024-11-29T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c856d0e6d9", "title": "We are all very near despair", "url": "https://crabmusket.net/2024/we-are-all-very-near-despair/", "published_at": "2024-11-25T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c857bf5855", "title": "Farewell Devonshire Street, hello Pilgrim House", "url": "https://crabmusket.net/2024/farewell-devonshire-street-hello-pilgrim-house/", "published_at": "2024-11-24T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c858936a6c", "title": "Thoughts on git commits, branches, PRs and stacking", "url": "https://crabmusket.net/2024/thoughts-on-git-commits-branches-prs-and-stacking/", "published_at": "2024-11-23T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c858f4020f", "title": "Site repair", "url": "https://crabmusket.net/2024/site-repair/", "published_at": "2024-11-19T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85966586a", "title": "Link dump 1", "url": "https://crabmusket.net/2024/link-dump-1/", "published_at": "2024-11-17T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85a470b0a", "title": "Nobody knows about Zulip", "url": "https://crabmusket.net/2024/nobody-knows-about-zulip/", "published_at": "2024-11-14T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85aedc1d8", "title": "Paradicms, a minimum viable CMS", "url": "https://crabmusket.net/2024/paradicms-a-minimum-viable-cms/", "published_at": "2024-11-13T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85af7d8dc", "title": "Rebuilding the blog", "url": "https://crabmusket.net/2024/rebuilding-the-blog/", "published_at": "2024-11-12T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85b13864b", "title": "Rebooting the blog", "url": "https://crabmusket.net/2024/rebooting-the-blog/", "published_at": "2024-11-09T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85c0d6f21", "title": "Framework unboxing", "url": "https://crabmusket.net/2024/framework-unboxing/", "published_at": "2024-06-30T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85c15bf83", "title": "Attending Yearly Meeting 2024", "url": "https://crabmusket.net/2024/attending-yearly-meeting/", "published_at": "2024-06-26T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85c55b052", "title": "Relational", "url": "https://crabmusket.net/2024/relational/", "published_at": "2024-05-23T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85c9bc90b", "title": "Exponential ideas", "url": "https://crabmusket.net/2024/exponential-ideas/", "published_at": "2024-03-20T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85d06cd9d", "title": "Lego blocks are never a good analogy", "url": "https://crabmusket.net/lego-blocks-are-never-a-good-analogy/", "published_at": "2021-12-12T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85ddcee9c", "title": "How I Learned OOP: A Nightmare", "url": "https://crabmusket.net/how-i-learned-oop/", "published_at": "2021-11-05T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85dfa1881", "title": "Australian media has an RSS problem", "url": "https://crabmusket.net/australian-media-has-an-rss-problem/", "published_at": "2021-02-19T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85e03362d", "title": "Destroy All Dependencies", "url": "https://crabmusket.net/destroy-all-dependencies/", "published_at": "2020-11-30T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85e6479e6", "title": "Lessons in object-oriented design", "url": "https://crabmusket.net/2020/lessons-in-object-oriented-design/", "published_at": "2020-07-07T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85f31068a", "title": "Enemie Anonimous", "url": "https://crabmusket.net/2020/enemie-anonimous/", "published_at": "2020-06-23T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c85ff0615d", "title": "Wabi Concrete Box", "url": "https://crabmusket.net/wabi-concrete-box/", "published_at": "2020-06-23T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c860cca5c7", "title": "A stateless token case study: Algolia search API", "url": "https://crabmusket.net/algolia-search-api-tokens/", "published_at": "2020-06-16T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c860e82e82", "title": "JavaScript's ecosystem is uniquely paranoid", "url": "https://crabmusket.net/java-scripts-ecosystem-is-uniquely-paranoid/", "published_at": "2020-05-27T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c861ad847e", "title": "It turns everything it touches into a machine", "url": "https://crabmusket.net/it-turns-everything-it-touches-into-a-machine/", "published_at": "2019-09-17T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c86200d5d4", "title": "Book notes from 2018", "url": "https://crabmusket.net/book-notes-from-2018/", "published_at": "2018-12-31T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c86282fcde", "title": "Loyalty: a primer for my friends and family", "url": "https://crabmusket.net/loyalty-a-primer/", "published_at": "2017-10-24T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8630bbdb9", "title": "Development versus deployment: Docker and Haskell", "url": "https://crabmusket.net/development-versus-deployment-docker-and-haskell/", "published_at": "2015-07-10T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8633ea6c3", "title": "A matter of opinion: what I dislike about TorqueScript", "url": "https://crabmusket.net/torquescript/", "published_at": "2014-12-25T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8640eaf99", "title": "Monster Mash: entry #2", "url": "https://crabmusket.net/2014/monster-mash-entry-2/", "published_at": "2014-07-08T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c864d079cd", "title": "Monster Mash: entry #1", "url": "https://crabmusket.net/2014/monster-mash-entry-1/", "published_at": "2014-07-01T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c86519d1be", "title": "Monster Mash: entry #0", "url": "https://crabmusket.net/2014/monster-mash-entry-0/", "published_at": "2014-06-29T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c8653ff1a2", "title": "The Torque 3D shutdown sequence - a safari", "url": "https://crabmusket.net/torque-3d-shutdown-sequence/", "published_at": "2014-06-24T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c865f65839", "title": "The Torque 3D unit testing system - a safari", "url": "https://crabmusket.net/torque-3d-unit-testing-system/", "published_at": "2014-06-22T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c866cd671b", "title": "IO: You may say I'm a monad, but I'm not the only one!", "url": "https://crabmusket.net/you-may-say-im-a-monad/", "published_at": "2014-01-21T00:00:00+00:00" }, { "id": "01a08764-4ec3-73f6-bd5f-95c867731d87", "title": "Micro-tutorial: liftM by accident", "url": "https://crabmusket.net/liftm-by-accident/", "published_at": "2013-11-28T00:00:00+00:00" } ] posts Claim your blog
Back to crabmusket.net
Blog · corpus.blog/blogs/crabmusket.net/posts

crabmusket.net

crabmusket.net

2026

2025

2024

2021

2020

2019

2018

2017

2015

2014

2013