41554 blogs · [ { "id": "01a08753-b516-71db-9d9a-bc831c65d32d", "title": "DIY Smart home project: Restoring the wall switch", "url": "https://blog.shalvah.me/posts/diy-smart-home-project-restoring-the-wall-switch", "published_at": "2026-06-21T14:12:32+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831c79fe8e", "title": "Dealing with domain modelling mismatches on external services", "url": "https://blog.shalvah.me/posts/dealing-with-domain-modelling-mismatches-on-external-services", "published_at": "2025-11-23T03:35:21+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831ce153cd", "title": "All decisions are wrong, but some are better", "url": "https://blog.shalvah.me/posts/all-decisions-are-wrong-but-some-are-better", "published_at": "2025-11-04T17:16:03+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831d8114bd", "title": "Making non-atomic actions atomic using intents", "url": "https://blog.shalvah.me/posts/making-non-atomic-actions-atomic-using-intents", "published_at": "2025-10-27T23:07:21+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831e75d1db", "title": "DIY Smart home project: Presence-activated lights", "url": "https://blog.shalvah.me/posts/diy-smart-home-project-presence-activated-lights", "published_at": "2025-05-01T12:42:15+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831efb239c", "title": "In defence of complexity", "url": "https://blog.shalvah.me/posts/in-defence-of-complexity", "published_at": "2024-12-24T11:04:45+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831f5d0b19", "title": "Reflections on Year 1 of my engineering studies", "url": "https://blog.shalvah.me/posts/reflections-on-year-1-of-my-engineering-studies", "published_at": "2024-10-18T00:10:58+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831f745366", "title": "Exploring software design problems and solutions: Transactions and side effects", "url": "https://blog.shalvah.me/posts/exploring-software-design-problems-and-solutions-transactions-and-side-effects", "published_at": "2024-07-19T07:29:32+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831fd9c216", "title": "An exploration of vector search", "url": "https://blog.shalvah.me/posts/an-exploration-of-vector-search", "published_at": "2024-06-02T15:12:33+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc831fda38e5", "title": "Lessons for me on leadership, from a film about apes", "url": "https://blog.shalvah.me/posts/lessons-for-me-on-leadership-from-a-film-about-apes", "published_at": "2024-04-21T19:24:46+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc832074a2ff", "title": "Learn SVG by drawing an arrow", "url": "https://blog.shalvah.me/posts/learn-svg-by-drawing-an-arrow", "published_at": "2024-01-11T17:44:33+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc832082f5cc", "title": "Building a PHP client for Faktory, Part 6: Higher-level usage", "url": "https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-6-higher-level-usage", "published_at": "2023-11-25T23:42:03+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc83209d3b4e", "title": "Exploring concurrent rate limiters, mutexes, semaphores", "url": "https://blog.shalvah.me/posts/diving-into-concurrent-rate-limiters-mutexes-semaphores", "published_at": "2023-09-11T22:38:27+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc8320d108ee", "title": "High and low cardinality", "url": "https://blog.shalvah.me/posts/high-and-low-cardinality", "published_at": "2023-08-13T12:35:42+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc8321109cec", "title": "Packing and unpacking bytes", "url": "https://blog.shalvah.me/posts/packing-and-unpacking-bytes", "published_at": "2023-07-22T00:03:40+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc83219448eb", "title": "Building a PHP client for Faktory, Part 5: Protocol", "url": "https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-5-protocol", "published_at": "2023-07-02T21:58:24+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc8321ccd81c", "title": "Building a PHP client for Faktory, Part 4: Refactoring", "url": "https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-4-refactoring", "published_at": "2023-05-07T13:29:50+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc832296f5a8", "title": "Building a PHP client for Faktory, Part 3: Making development easier", "url": "https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-3-making-development-easier", "published_at": "2023-04-23T13:27:01+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc8322b37140", "title": "How we cut down our CI build times by 50%", "url": "https://blog.shalvah.me/posts/how-we-cut-down-our-ci-build-times-by-50", "published_at": "2023-04-20T19:23:23+00:00" }, { "id": "01a08753-b516-71db-9d9a-bc8322c380ab", "title": "Solving a logic puzzle", "url": "https://blog.shalvah.me/posts/solving-a-logic-puzzle", "published_at": "2023-02-02T17:31:16+00:00" }, { "id": "01a08753-b517-724e-9926-ea9142cdadd0", "title": "Building a PHP client for Faktory, Part 2: Converting to code", "url": "https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-2", "published_at": "2023-01-27T22:22:17+00:00" }, { "id": "01a08753-b517-724e-9926-ea91437680cd", "title": "Building a PHP client for Faktory, Part 1: Talking over TCP", "url": "https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-1", "published_at": "2023-01-27T21:07:21+00:00" }, { "id": "01a08753-b517-724e-9926-ea9144085e09", "title": "Connecting to a Windows server process from WSL", "url": "https://blog.shalvah.me/posts/connecting-to-a-windows-server-process-from-wsl", "published_at": "2023-01-23T19:37:45+00:00" }, { "id": "01a08753-b517-724e-9926-ea9144706d17", "title": "Building a task queue, Part 4", "url": "https://blog.shalvah.me/posts/building-a-task-queue-part-4", "published_at": "2022-12-29T22:57:13+00:00" } ] posts Claim your blog
Back to blog.shalvah.me
Blog · corpus.blog/blogs/blog.shalvah.me/posts

blog.shalvah.me

blog.shalvah.me

2026

2025

2024

2023

2022