<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Dmytro Hryniuk: Journal</title>
    <link>https://dhryniuk.com/journal</link>
    <atom:link href="https://dhryniuk.com/rss.xml" rel="self" type="application/rss+xml" />
    <description>I design, ship and run cloud platforms, as observable, reproducible and quiet at 3 a.m. as the job needs, without reinventing the wheel.</description>
    <language>en</language>
    <lastBuildDate>Sun, 27 Sep 2026 18:05:53 GMT</lastBuildDate>
    <item>
      <title>Why the inventory left Coolify</title>
      <link>https://dhryniuk.com/journal/why-the-inventory-left-coolify</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/why-the-inventory-left-coolify</guid>
      <pubDate>Sun, 27 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>adr</category>
      <category>ops</category>
      <category>k8s</category>
      <category>obs</category>
      <description>26 Apr 2026. Coolify deployed the app fast; backups, logs and alerts were what it could not give me.</description>
    </item>
    <item>
      <title>Authorisation moves back into the app</title>
      <link>https://dhryniuk.com/journal/authorisation-moves-back-into-the-app</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/authorisation-moves-back-into-the-app</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>sec</category>
      <category>adr</category>
      <category>postgres</category>
      <category>web</category>
      <description>23 Sep 2026. Why the rewrite trades row-level security for one data-access layer and a test suite.</description>
    </item>
    <item>
      <title>Dropping Supabase, keeping Postgres</title>
      <link>https://dhryniuk.com/journal/dropping-supabase-keeping-postgres</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/dropping-supabase-keeping-postgres</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>adr</category>
      <category>db</category>
      <category>postgres</category>
      <category>web</category>
      <description>23 Sep 2026. The Next.js rewrite of the parts inventory moves to plain Postgres, Drizzle and Better Auth.</description>
    </item>
    <item>
      <title>A LoRa star for garage and mailbox</title>
      <link>https://dhryniuk.com/journal/lora-star-garage-and-mailbox</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/lora-star-garage-and-mailbox</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>iot</category>
      <category>embedded</category>
      <category>adr</category>
      <category>supabase</category>
      <description>28 Jul 2025. One hub on Wi-Fi, battery nodes talking to it point to point, for places Wi-Fi does not reach.</description>
    </item>
    <item>
      <title>Pairing a sensor with no screen</title>
      <link>https://dhryniuk.com/journal/pairing-a-sensor-with-no-screen</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/pairing-a-sensor-with-no-screen</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>sec</category>
      <category>iot</category>
      <category>embedded</category>
      <description>28 Jul 2025. A hub key that never leaves the chip, a household key handed out at pairing, revocation by deleting a row.</description>
    </item>
    <item>
      <title>Porting the panel driver to an ESP32</title>
      <link>https://dhryniuk.com/journal/panel-driver-to-an-esp32</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/panel-driver-to-an-esp32</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>embedded</category>
      <category>hw</category>
      <description>27 Jul 2025. From Good Display's Arduino sample to a PlatformIO project, and an adapter board of my own.</description>
    </item>
    <item>
      <title>Appwrite in the morning, Supabase by the afternoon</title>
      <link>https://dhryniuk.com/journal/appwrite-morning-supabase-afternoon</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/appwrite-morning-supabase-afternoon</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>supabase</category>
      <category>web</category>
      <category>embedded</category>
      <description>24 Jun 2025. The e-ink frame renderer, built twice in one day on two backends.</description>
    </item>
    <item>
      <title>Render on the server, draw on the device</title>
      <link>https://dhryniuk.com/journal/render-on-server-draw-on-device</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/render-on-server-draw-on-device</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>adr</category>
      <category>embedded</category>
      <category>iot</category>
      <description>23 Jun 2025. The e-ink device fetches a finished picture; the server does the layout.</description>
    </item>
    <item>
      <title>Colour e-ink decides the chip</title>
      <link>https://dhryniuk.com/journal/colour-eink-decides-the-chip</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/colour-eink-decides-the-chip</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>embedded</category>
      <category>hw</category>
      <category>adr</category>
      <description>18 Jun 2025. A six-colour panel needs PSRAM, a dual-core ESP32-S3 and patience on every refresh.</description>
    </item>
    <item>
      <title>First backend on a rented VPS</title>
      <link>https://dhryniuk.com/journal/first-backend-on-a-rented-vps</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/first-backend-on-a-rented-vps</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>ops</category>
      <category>sec</category>
      <category>net</category>
      <description>18 Jun 2025. Two Hetzner servers, keys-only SSH and an admin console behind Zero Trust, ten months before the cluster.</description>
    </item>
    <item>
      <title>First colours on a Spectra 6 panel</title>
      <link>https://dhryniuk.com/journal/first-colours-on-a-spectra-6-panel</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/first-colours-on-a-spectra-6-panel</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>embedded</category>
      <category>hw</category>
      <description>9 Jan 2024. A four-inch six-colour e-paper panel on the bench, eighteen months before the device had a name.</description>
    </item>
    <item>
      <title>Field check: two phones, two trackers</title>
      <link>https://dhryniuk.com/journal/pettrack-field-check</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/pettrack-field-check</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>iot</category>
      <category>hw</category>
      <category>flutter</category>
      <category>firebase</category>
      <category>python</category>
      <category>mobile</category>
      <description>23 Mar 2022. The check a bench cannot do: a real GPS fix on a city street, seen on Android and iOS at once.</description>
    </item>
    <item>
      <title>Live video from a Raspberry Pi over LTE</title>
      <link>https://dhryniuk.com/journal/live-video-pi-over-lte</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/live-video-pi-over-lte</guid>
      <pubDate>Fri, 25 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>iot</category>
      <category>embedded</category>
      <category>hw</category>
      <category>python</category>
      <category>firebase</category>
      <description>31 Jul 2021. Let the camera's encoder do the video; the stream that stayed ran at a sixth of the first bitrate.</description>
    </item>
    <item>
      <title>Two languages, one JSON contract</title>
      <link>https://dhryniuk.com/journal/two-languages-one-json-contract</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/two-languages-one-json-contract</guid>
      <pubDate>Wed, 23 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>web</category>
      <category>flutter</category>
      <category>java</category>
      <category>aws</category>
      <category>serverless</category>
      <description>4 Oct 2024. A drag-and-drop layout editor in Flutter web, with Java Lambdas doing the heavy work.</description>
    </item>
    <item>
      <title>Decommissioning without deleting the docs</title>
      <link>https://dhryniuk.com/journal/decommissioning-without-deleting-docs</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/decommissioning-without-deleting-docs</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>ops</category>
      <category>k8s</category>
      <description>9 Jun 2026. A clean decommission checklist, including what lives outside the repository.</description>
    </item>
    <item>
      <title>The restore that broke logins</title>
      <link>https://dhryniuk.com/journal/restore-that-broke-logins</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/restore-that-broke-logins</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>db</category>
      <category>ops</category>
      <category>postgres</category>
      <category>supabase</category>
      <description>11 May 2026. A restore without ownership, and the confusing pair of errors it produces.</description>
    </item>
    <item>
      <title>First app on the cluster</title>
      <link>https://dhryniuk.com/journal/first-app-on-the-cluster</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/first-app-on-the-cluster</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>k8s</category>
      <category>ops</category>
      <category>supabase</category>
      <description>7 May 2026. The components inventory live on k3s, with the exact list of what went wrong.</description>
    </item>
    <item>
      <title>Backups that restore nothing</title>
      <link>https://dhryniuk.com/journal/backups-that-restore-nothing</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/backups-that-restore-nothing</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>db</category>
      <category>ops</category>
      <category>postgres</category>
      <description>6 May 2026. A backup job that exited 0 and restored zero rows, and the drill that caught it.</description>
    </item>
    <item>
      <title>systemd-resolved stub breaks CoreDNS</title>
      <link>https://dhryniuk.com/journal/systemd-resolved-breaks-coredns</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/systemd-resolved-breaks-coredns</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>net</category>
      <category>k8s</category>
      <description>6 May 2026. The second of two Hetzner and Ubuntu 24.04 traps; short and easy to miss.</description>
    </item>
    <item>
      <title>ADR: defer CloudNativePG</title>
      <link>https://dhryniuk.com/journal/adr-defer-cloudnativepg</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/adr-defer-cloudnativepg</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>adr</category>
      <category>db</category>
      <category>k8s</category>
      <category>postgres</category>
      <description>4 May 2026. Bundled Postgres per project for now, with written triggers to revisit.</description>
    </item>
    <item>
      <title>Four VMs, one k3s cluster, one repo</title>
      <link>https://dhryniuk.com/journal/four-vms-one-cluster</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/four-vms-one-cluster</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>k8s</category>
      <category>iac</category>
      <category>obs</category>
      <description>26 Apr 2026. The start of the self-hosted platform every later entry runs on.</description>
    </item>
    <item>
      <title>Fifty minutes after the first Coolify deploy</title>
      <link>https://dhryniuk.com/journal/fifty-minutes-after-coolify</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/fifty-minutes-after-coolify</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>ops</category>
      <category>web</category>
      <category>flutter</category>
      <category>supabase</category>
      <description>27 Nov 2025. Five fixes for Flutter web behind nginx, each a reusable gotcha.</description>
    </item>
    <item>
      <title>Let RLS do the filtering</title>
      <link>https://dhryniuk.com/journal/let-rls-do-the-filtering</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/let-rls-do-the-filtering</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>sec</category>
      <category>db</category>
      <category>supabase</category>
      <category>postgres</category>
      <description>27 Nov 2025. Moving authorisation from the client into the database, and the code that disappeared.</description>
    </item>
    <item>
      <title>Flatten the architecture, keep the app</title>
      <link>https://dhryniuk.com/journal/flatten-the-architecture</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/flatten-the-architecture</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>adr</category>
      <category>web</category>
      <category>flutter</category>
      <category>supabase</category>
      <description>31 Jul 2025. An honest ADR on removing abstraction from a small app.</description>
    </item>
    <item>
      <title>Dev and prod on Amplify branches</title>
      <link>https://dhryniuk.com/journal/dev-and-prod-on-amplify-branches</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/dev-and-prod-on-amplify-branches</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>aws</category>
      <category>amplify</category>
      <category>ops</category>
      <description>24 Jan 2025. Environment promotion for a serverless app done by branch merges.</description>
    </item>
    <item>
      <title>MySpool web: Amplify, Python 3.12 Lambdas</title>
      <link>https://dhryniuk.com/journal/myspool-web-amplify</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/myspool-web-amplify</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>aws</category>
      <category>amplify</category>
      <category>web</category>
      <category>flutter</category>
      <category>python</category>
      <category>serverless</category>
      <description>7 Sep 2024. A second-generation rewrite with a collaborator on the backend.</description>
    </item>
    <item>
      <title>Reading price tags with on-device OCR</title>
      <link>https://dhryniuk.com/journal/price-tags-on-device-ocr</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/price-tags-on-device-ocr</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>learning</category>
      <category>mobile</category>
      <category>flutter</category>
      <category>learn</category>
      <description>18 Feb 2022. A one-week, two-person Flutter experiment with on-device text recognition.</description>
    </item>
    <item>
      <title>MySpool mobile reaches 1.0</title>
      <link>https://dhryniuk.com/journal/myspool-mobile-1-0</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/myspool-mobile-1-0</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>ops</category>
      <category>mobile</category>
      <category>flutter</category>
      <description>13 Dec 2021. Thirteen months and ninety versioned builds for a solo mobile release.</description>
    </item>
    <item>
      <title>BLE-provisioned Wi-Fi on an ESP32</title>
      <link>https://dhryniuk.com/journal/ble-provisioned-wifi-esp32</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/ble-provisioned-wifi-esp32</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>learning</category>
      <category>embedded</category>
      <category>iot</category>
      <category>firebase</category>
      <category>learn</category>
      <description>3 Nov 2021. The first microcontroller project, and the device side of a problem the sensor app solved another way.</description>
    </item>
    <item>
      <title>MQTT spike to robot dashboard in a week</title>
      <link>https://dhryniuk.com/journal/mqtt-spike-to-robot-dashboard</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/mqtt-spike-to-robot-dashboard</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>iot</category>
      <category>mobile</category>
      <category>flutter</category>
      <description>8 Jul 2021. Prove the transport in a throw-away app, then wire the UI.</description>
    </item>
    <item>
      <title>Push on Firebase, everything else on AWS</title>
      <link>https://dhryniuk.com/journal/push-on-firebase</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/push-on-firebase</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>aws</category>
      <category>firebase</category>
      <category>adr</category>
      <category>flutter</category>
      <category>mobile</category>
      <description>10 May 2021. A two-cloud setup chosen for one feature, and what it costs in configuration.</description>
    </item>
    <item>
      <title>Clone the catalogue or parametrise it</title>
      <link>https://dhryniuk.com/journal/clone-or-parametrise</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/clone-or-parametrise</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>web</category>
      <category>adr</category>
      <category>php</category>
      <description>21 Jan 2021. Copy-per-model was the fast choice for a four-month job; here is what it cost.</description>
    </item>
    <item>
      <title>Cognito via Amplify from day one</title>
      <link>https://dhryniuk.com/journal/cognito-via-amplify</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/cognito-via-amplify</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>aws</category>
      <category>amplify</category>
      <category>adr</category>
      <category>flutter</category>
      <category>mobile</category>
      <description>7 Nov 2020. The first managed-auth decision, and the CloudFormation that came with it.</description>
    </item>
    <item>
      <title>Switching to Flutter</title>
      <link>https://dhryniuk.com/journal/switching-to-flutter</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/switching-to-flutter</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>mobile</category>
      <category>flutter</category>
      <category>adr</category>
      <description>19 Oct 2020. An eight-day onboarding prototype that decided the next five years of mobile work.</description>
    </item>
    <item>
      <title>Exploded-view drawings as image maps</title>
      <link>https://dhryniuk.com/journal/exploded-view-drawings-as-image-maps</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/exploded-view-drawings-as-image-maps</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>web</category>
      <category>php</category>
      <description>17 Sep 2020. How a catalogue with hundreds of drawings was made navigable without a CMS.</description>
    </item>
    <item>
      <title>Six days of camfix builds</title>
      <link>https://dhryniuk.com/journal/six-days-of-camfix-builds</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/six-days-of-camfix-builds</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>embedded</category>
      <category>hw</category>
      <category>ops</category>
      <category>android</category>
      <category>mobile</category>
      <description>28 Jul 2020. Eight builds to stabilise a USB camera on a tablet; the final fix was one line.</description>
    </item>
    <item>
      <title>React Native rhyme finder on Google Play</title>
      <link>https://dhryniuk.com/journal/react-native-rhyme-finder</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/react-native-rhyme-finder</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>mobile</category>
      <category>learn</category>
      <category>android</category>
      <description>14 Jul 2020. Second store app, two months after the first, and the only React Native project.</description>
    </item>
    <item>
      <title>First Google Play release in a week</title>
      <link>https://dhryniuk.com/journal/first-google-play-release</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/first-google-play-release</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>mobile</category>
      <category>android</category>
      <category>learn</category>
      <description>11 May 2020. A Kotlin age calculator: five days of code, a public listing eight days after the first commit.</description>
    </item>
    <item>
      <title>One branch per tablet generation</title>
      <link>https://dhryniuk.com/journal/one-branch-per-tablet-generation</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/one-branch-per-tablet-generation</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>embedded</category>
      <category>adr</category>
      <category>mobile</category>
      <category>android</category>
      <description>11 Feb 2020. Branching by hardware target: what it cost in merges and why alpha suffixes replaced versions.</description>
    </item>
    <item>
      <title>Three lessons, three languages</title>
      <link>https://dhryniuk.com/journal/three-lessons-three-languages</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/three-lessons-three-languages</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>mobile</category>
      <category>android</category>
      <category>ideas</category>
      <description>27 Nov 2019. Localising a content-heavy app early is cheap; retrofitting is not.</description>
    </item>
    <item>
      <title>First lab sensor talks to Android</title>
      <link>https://dhryniuk.com/journal/first-ble-lab-sensor</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/first-ble-lab-sensor</guid>
      <pubDate>Fri, 18 Sep 2026 09:00:00 GMT</pubDate>
      <category>personal</category>
      <category>iot</category>
      <category>embedded</category>
      <category>mobile</category>
      <category>android</category>
      <description>12 Oct 2019. The first hardware-in-the-loop code I shipped, nine days after the first commit, on a science tablet with its own sensor port.</description>
    </item>
    <item>
      <title>Wait on quota, don't fail the shape</title>
      <link>https://dhryniuk.com/journal/wait-on-quota</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/wait-on-quota</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>gcp</category>
      <category>benchmarking</category>
      <category>ops</category>
      <description>15 Sep 2026. Quota as a scheduling signal rather than an error.</description>
    </item>
    <item>
      <title>The vendor feed came back empty</title>
      <link>https://dhryniuk.com/journal/vendor-feed-empty</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/vendor-feed-empty</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>ops</category>
      <category>data</category>
      <description>23 Aug 2026. A weekly refresh that trusted an upstream feed, and the abort gate it earned.</description>
    </item>
    <item>
      <title>The chart that printed blank</title>
      <link>https://dhryniuk.com/journal/chart-that-printed-blank</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/chart-that-printed-blank</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>web</category>
      <category>ops</category>
      <category>node</category>
      <description>23 Jun 2026. A race between chart animation and a screenshot, diagnosed from both sides in one day.</description>
    </item>
    <item>
      <title>Two stacks, one bucket notification</title>
      <link>https://dhryniuk.com/journal/two-stacks-one-bucket</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/two-stacks-one-bucket</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>cdk</category>
      <category>iac</category>
      <category>s3</category>
      <description>26 May 2026. Two CDK stacks configuring one bucket overwrite each other silently.</description>
    </item>
    <item>
      <title>One launch script for every generation</title>
      <link>https://dhryniuk.com/journal/one-launch-script</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/one-launch-script</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>benchmarking</category>
      <category>bash</category>
      <description>13 Feb 2026. Replacing a per-instance script matrix with detection at boot.</description>
    </item>
    <item>
      <title>A fleet that launches itself</title>
      <link>https://dhryniuk.com/journal/fleet-that-launches-itself</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/fleet-that-launches-itself</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>benchmarking</category>
      <category>ops</category>
      <category>bash</category>
      <description>6 Feb 2026. What has to be in user-data for a machine to finish a job with nobody watching.</description>
    </item>
    <item>
      <title>Which failures should block the pipeline</title>
      <link>https://dhryniuk.com/journal/which-failures-block</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/which-failures-block</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>data</category>
      <category>ops</category>
      <category>aws</category>
      <category>serverless</category>
      <description>19 Jan 2026. How a hard validation gate turned into a warning, and why that was right.</description>
    </item>
    <item>
      <title>Rollback added at 16:30, muted at 16:55</title>
      <link>https://dhryniuk.com/journal/rollback-added-then-muted</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/rollback-added-then-muted</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>data</category>
      <category>aws</category>
      <category>ops</category>
      <description>8 Jan 2026. Why a rollback that runs on every failure can be worse than none.</description>
    </item>
    <item>
      <title>The LLM call moves behind a queue</title>
      <link>https://dhryniuk.com/journal/llm-call-behind-a-queue</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/llm-call-behind-a-queue</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>llm</category>
      <category>aws</category>
      <category>serverless</category>
      <description>7 Oct 2025. A model call is too slow for a request-response API behind a gateway timeout.</description>
    </item>
    <item>
      <title>Retiring Lambdas with a restore path</title>
      <link>https://dhryniuk.com/journal/retiring-lambdas-restore-path</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/retiring-lambdas-restore-path</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>ops</category>
      <category>serverless</category>
      <description>18 Sep 2025. Archive, verify, delete, keep a way back.</description>
    </item>
    <item>
      <title>The SAX day</title>
      <link>https://dhryniuk.com/journal/the-sax-day</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/the-sax-day</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>java</category>
      <category>perf</category>
      <category>ops</category>
      <category>etl</category>
      <description>21 Jul 2025. A streaming parser rolled back and re-landed in one day.</description>
    </item>
    <item>
      <title>A notebook becomes a Lambda</title>
      <link>https://dhryniuk.com/journal/notebook-becomes-a-lambda</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/notebook-becomes-a-lambda</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>serverless</category>
      <category>python</category>
      <description>30 Jun 2025. What has to change for an analyst's notebook to run as a production handler.</description>
    </item>
    <item>
      <title>Reverting the revert</title>
      <link>https://dhryniuk.com/journal/reverting-the-revert</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/reverting-the-revert</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>java</category>
      <category>etl</category>
      <description>13 Aug 2024. A new union approach, reverted, then re-applied the same evening.</description>
    </item>
    <item>
      <title>Climbing the heap</title>
      <link>https://dhryniuk.com/journal/climbing-the-heap</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/climbing-the-heap</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>java</category>
      <category>jvm</category>
      <category>perf</category>
      <category>ops</category>
      <description>24 May 2024. How a workbook engine eats memory, and where the real limit was.</description>
    </item>
    <item>
      <title>Visual regression before every release</title>
      <link>https://dhryniuk.com/journal/visual-regression-before-release</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/visual-regression-before-release</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>qa</category>
      <category>aws</category>
      <category>ops</category>
      <category>serverless</category>
      <category>web</category>
      <category>node</category>
      <description>26 Feb 2024. Screenshot diffs before every release, and why partial results mattered more than a perfect diff.</description>
    </item>
    <item>
      <title>The Excel engine moves to Java</title>
      <link>https://dhryniuk.com/journal/excel-engine-moves-to-java</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/excel-engine-moves-to-java</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>java</category>
      <category>aws</category>
      <category>fargate</category>
      <category>etl</category>
      <category>adr</category>
      <description>20 Nov 2023. From Node Lambdas to a Spring Boot container on Fargate, and why.</description>
    </item>
    <item>
      <title>When a Lambda outgrows itself</title>
      <link>https://dhryniuk.com/journal/lambda-outgrows-itself</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/lambda-outgrows-itself</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>serverless</category>
      <category>etl</category>
      <category>node</category>
      <description>13 Jun 2023. How a function grows to thousands of lines, and what that costs.</description>
    </item>
    <item>
      <title>The DLQ handler's first real failure</title>
      <link>https://dhryniuk.com/journal/dlq-first-real-failure</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/dlq-first-real-failure</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>serverless</category>
      <category>ops</category>
      <description>7 Jun 2023. A dead-letter handler is only tested when things fail.</description>
    </item>
    <item>
      <title>The intake pipeline gets its shape</title>
      <link>https://dhryniuk.com/journal/intake-pipeline-shape</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/intake-pipeline-shape</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>aws</category>
      <category>serverless</category>
      <category>etl</category>
      <category>node</category>
      <description>29 Jul 2022. Validate, clean, process: the pipeline shape that every later version kept.</description>
    </item>
    <item>
      <title>Leading zeros and exponents in identifiers</title>
      <link>https://dhryniuk.com/journal/leading-zeros-and-exponents</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/leading-zeros-and-exponents</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>etl</category>
      <category>data</category>
      <category>node</category>
      <description>9 Dec 2021. Numbers that are really strings, met in the first month and never forgotten.</description>
    </item>
    <item>
      <title>Stop hand-parsing spreadsheet formulas</title>
      <link>https://dhryniuk.com/journal/stop-hand-parsing-formulas</link>
      <guid isPermaLink="true">https://dhryniuk.com/journal/stop-hand-parsing-formulas</guid>
      <pubDate>Thu, 17 Sep 2026 09:00:00 GMT</pubDate>
      <category>work</category>
      <category>etl</category>
      <category>data</category>
      <category>node</category>
      <description>24 Nov 2021. The week a home-grown formula evaluator stopped paying for itself.</description>
    </item>
  </channel>
</rss>
