<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://blog.shalvah.me</loc></url><url><loc>https://blog.shalvah.me/posts/connecting-to-a-windows-server-process-from-wsl</loc><lastmod>2023-01-23T19:39:06Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/parsing-math-expressions-with-javascript</loc><lastmod>2022-09-13T00:16:31Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/exploring-software-design-problems-and-solutions-transactions-and-side-effects</loc><lastmod>2024-07-19T07:29:33Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/the-ultimate-cheatsheet-for-deploying-laravel-apps-to-heroku</loc><lastmod>2022-09-13T00:21:26Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/a-practical-tracing-journey-with-opentelemetry-on-node-js</loc><lastmod>2023-08-18T21:29:27Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/monkey-patching-the-express-router</loc><lastmod>2023-08-18T21:30:41Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/experiments-in-concurrency-1-single-threaded-webservers-in-php-and-node-js</loc><lastmod>2023-08-18T21:33:08Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/unconventional-databases</loc><lastmod>2023-08-18T21:33:25Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/diving-into-concurrent-rate-limiters-mutexes-semaphores</loc><lastmod>2023-09-13T21:38:05Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/php-8-attribute-quirks</loc><lastmod>2023-08-18T21:20:36Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/node-js-error-handling-gotcha-synchronous-errors-from-an-asynchronous-function</loc><lastmod>2023-08-18T21:23:05Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/solving-a-logic-puzzle</loc><lastmod>2023-08-18T21:25:38Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/how-we-cut-down-our-ci-build-times-by-50</loc><lastmod>2023-08-18T21:25:39Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/an-exploration-of-vector-search</loc><lastmod>2024-06-03T20:21:04Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/good-engineering-practices-while-working-solo</loc><lastmod>2022-09-12T23:48:13Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-trivia-bot-for-facebook-messenger-with-laravel-part-3</loc><lastmod>2022-09-12T23:49:37Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/data-constraints-database-layer-or-app-logic</loc><lastmod>2022-09-13T00:07:33Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/understanding-percentiles</loc><lastmod>2023-08-18T21:34:36Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-trivia-bot-for-facebook-messenger-with-laravel-part-1</loc><lastmod>2022-09-12T23:55:05Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/when-alternatives-are-unhelpful-a-ruby-case-study</loc><lastmod>2023-08-18T21:31:53Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/hacking-it-out-enforcing-code-quality-with-hooks-and-scripts</loc><lastmod>2022-09-12T23:56:20Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/how-to-build-a-math-expression-tokenizer-using-javascript-or-any-other-language</loc><lastmod>2022-09-12T23:56:54Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/pro-tip-using-promise-then-for-function-composition</loc><lastmod>2022-09-13T00:22:06Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-trivia-bot-for-facebook-messenger-with-laravel-part-2</loc><lastmod>2022-09-12T23:58:16Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/can-redux-be-used-on-the-server</loc><lastmod>2022-09-12T23:58:29Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-rest-api-with-laravel-standardise-your-responses-with-jsend</loc><lastmod>2022-09-13T00:23:02Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/blogging-update-from-medium-to-dev-to-and-beyond</loc><lastmod>2022-09-13T00:03:27Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/whats-the-big-deal-about-immutability</loc><lastmod>2023-08-18T21:37:05Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-task-queue-part-1</loc><lastmod>2023-08-18T21:26:51Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/base64s-goodness</loc><lastmod>2023-08-18T21:27:02Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/understanding-throttling-and-debouncing</loc><lastmod>2022-09-13T00:05:59Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-trivia-bot-for-facebook-messenger-with-laravel-part-4</loc><lastmod>2022-09-13T00:06:39Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/i-was-bored-so-i-made-my-website-into-a-node-package-heres-how</loc><lastmod>2022-09-13T00:06:40Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-task-queue-part-2</loc><lastmod>2023-08-18T21:26:52Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/proving-time-complexity-empirically</loc><lastmod>2023-08-18T21:31:54Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/ids-uuids-and-alternatives</loc><lastmod>2023-08-18T21:27:08Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-1</loc><lastmod>2023-08-18T21:20:31Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/why-arent-node-js-package-managers-interoperable</loc><lastmod>2023-08-18T21:21:48Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/what-i-learnt-from-participating-in-an-e-commerce-software-contest</loc><lastmod>2022-09-13T00:09:25Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/a-different-syntax-for-enforcing-business-requirements</loc><lastmod>2022-09-13T00:10:46Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/hacking-it-out-when-the-client-time-is-wrong</loc><lastmod>2022-09-13T00:12:14Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/hacking-it-out-when-cors-wont-let-you-be-great</loc><lastmod>2022-09-13T00:12:54Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/eliminating-hidden-dependencies</loc><lastmod>2022-09-13T00:14:36Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/hacking-it-out-creative-uses-of-object-destructors</loc><lastmod>2022-09-13T00:15:23Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/whats-software-development-like-as-a-non-native-english-speaker</loc><lastmod>2022-09-13T00:18:21Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/high-and-low-cardinality</loc><lastmod>2023-08-18T21:29:24Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/meet-burns-cleaner-application-events-for-node-js</loc><lastmod>2022-09-13T00:19:56Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/my-book-on-observability</loc><lastmod>2023-08-18T21:29:25Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/implementing-programmatic-file-transformations-in-php-part-2</loc><lastmod>2023-08-18T21:30:38Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/implementing-programmatic-file-transformations-in-php</loc><lastmod>2023-08-18T21:30:39Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-4-refactoring</loc><lastmod>2023-08-18T21:20:32Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-trivia-bot-for-facebook-messenger-with-laravel-part-5</loc><lastmod>2022-09-13T00:24:33Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/understanding-lockfiles</loc><lastmod>2023-08-18T21:31:55Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/experiments-in-concurrency-3-event-loops</loc><lastmod>2023-08-18T21:33:12Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/packing-and-unpacking-bytes</loc><lastmod>2023-08-18T21:23:14Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/fixing-the-host-header-vulnerability-with-nginx</loc><lastmod>2024-01-09T16:15:41Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/experiments-in-concurrency-2-coroutines</loc><lastmod>2023-08-18T21:33:09Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/experiments-in-concurrency-4-multiprocessing-and-multithreading</loc><lastmod>2023-08-18T21:33:10Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/promises-dont-hold-up-the-event-loop</loc><lastmod>2023-08-18T21:33:18Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/improving-reliability-part-1</loc><lastmod>2023-08-18T21:34:37Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/comparing-function-handles-across-languages</loc><lastmod>2023-08-18T21:34:38Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/a-shallow-dive-into-auto-instrumenting-node-js-applications-with-elastic-apm</loc><lastmod>2023-08-18T21:34:40Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/fun-stuff-representing-arrays-and-objects-in-query-strings</loc><lastmod>2023-08-18T21:35:53Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/running-non-blocking-code-in-php-with-amp</loc><lastmod>2023-08-18T21:43:04Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/on-costs-and-contexts</loc><lastmod>2023-08-18T21:38:16Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/good-design-is-analogous-and-intuitive</loc><lastmod>2023-08-18T21:38:17Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/living-with-your-tech-choices</loc><lastmod>2023-08-18T21:38:18Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/helpful-node-js-testing-utilities</loc><lastmod>2023-08-18T21:39:31Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-thisvid-spaces-open-page</loc><lastmod>2023-08-18T21:43:10Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/the-ux-of-urls</loc><lastmod>2023-08-18T21:39:37Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-5-protocol</loc><lastmod>2023-08-18T21:19:20Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-3-making-development-easier</loc><lastmod>2023-08-18T21:20:34Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-2</loc><lastmod>2023-08-18T21:20:35Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/string-encodings</loc><lastmod>2023-08-18T21:23:06Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/serialization</loc><lastmod>2023-08-18T21:23:08Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/a-mixed-multi-level-order-list-sort-implementation</loc><lastmod>2023-08-18T21:24:25Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/experimenting-in-production</loc><lastmod>2023-08-18T21:30:42Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-task-queue-part-4</loc><lastmod>2023-08-18T21:26:53Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-task-queue-part-3</loc><lastmod>2023-08-18T21:26:54Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/rubys-module-class-drives-me-crazy</loc><lastmod>2023-08-18T21:26:55Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/building-a-php-client-for-faktory-part-6-higher-level-usage</loc><lastmod>2023-11-25T23:43:47Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/diy-smart-home-project-presence-activated-lights</loc><lastmod>2025-05-01T19:24:04Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/learn-svg-by-drawing-an-arrow</loc><lastmod>2024-01-12T21:55:12Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/all-decisions-are-wrong-but-some-are-better</loc><lastmod>2025-11-04T17:16:04Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/lessons-for-me-on-leadership-from-a-film-about-apes</loc><lastmod>2024-04-21T19:51:01Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/reflections-on-year-1-of-my-engineering-studies</loc><lastmod>2024-11-02T18:56:54Z</lastmod></url><url><loc>https://blog.shalvah.me/pages/projects</loc><lastmod>2025-12-28T21:58:33Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/making-non-atomic-actions-atomic-using-intents</loc><lastmod>2025-10-27T23:27:01Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/dealing-with-domain-modelling-mismatches-on-external-services</loc><lastmod>2025-11-23T12:18:05Z</lastmod></url><url><loc>https://blog.shalvah.me/posts/in-defence-of-complexity</loc><lastmod>2025-12-05T08:35:01Z</lastmod></url></urlset>