<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Articles on Doby Baxter Computing</title>
    <link>https://dobybaxter127.gitlab.io/articles/</link>
    <description>Recent content in Articles on Doby Baxter Computing</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 28 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://dobybaxter127.gitlab.io/articles/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>One Rule Per File: Building a Conformance Corpus for CellML 2.0</title>
      <link>https://dobybaxter127.gitlab.io/articles/one-rule-per-file-cellml-2-conformance/</link>
      <pubDate>Wed, 28 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/one-rule-per-file-cellml-2-conformance/</guid>
      <description>&lt;p&gt;CellML is an XML format for describing mathematical models of biology: the equations behind a beating heart cell, a nerve impulse, a metabolic pathway. Researchers write a model once, and many different tools can read it, check it and simulate it.&lt;/p&gt;&#xA;&lt;p&gt;That only works if the tools agree on what a valid model is. So I built a small project to find out where they do: the &lt;strong&gt;CellML 2.0 Conformance Corpus&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Access, Not Ownership: My Thoughts on Digital Currency</title>
      <link>https://dobybaxter127.gitlab.io/articles/access-not-ownership/</link>
      <pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/access-not-ownership/</guid>
      <description>&lt;p&gt;These are my thoughts about digital currency, and about what gives money its value at all.&lt;/p&gt;&#xA;&lt;p&gt;Currencies like Bitcoin are often presented as a fix for what&#39;s wrong with money: no central bank, a fixed supply, rules that nobody can quietly change. I understand the appeal. But the more I thought about it, the less I believed the problem was where money is kept, or who controls the ledger.&lt;/p&gt;&#xA;&lt;p&gt;What I keep coming back to is an old problem in a new shape: &lt;strong&gt;owning something is not the same as being able to use it&lt;/strong&gt;, and a system can be perfectly correct and still fail the person it exists for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Software Can Show Us About Neurodivergent Minds</title>
      <link>https://dobybaxter127.gitlab.io/articles/what-software-can-show-us-about-neurodivergent-minds/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/what-software-can-show-us-about-neurodivergent-minds/</guid>
      <description>&lt;p&gt;People have compared minds to machines for as long as we&#39;ve had machines: clockwork, telephone switchboards, and then computers. It&#39;s an old comparison, and it isn&#39;t perfect. But it&#39;s very good at one thing: making something invisible easier to see. As an autistic software engineer with ADHD, I think it shows something important about masking, and about why its cost is so easy to miss.&lt;/p&gt;&#xA;&lt;p&gt;This essay is also published &lt;a href=&#34;https://dev.to/dobybaxter127/what-software-can-show-us-about-neurodivergent-minds-4b5o&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;on dev.to&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Status Is Not Proof: The Laptop I Never Received, and the Job I Was Handed Anyway</title>
      <link>https://dobybaxter127.gitlab.io/articles/a-status-is-not-proof/</link>
      <pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/a-status-is-not-proof/</guid>
      <description>&lt;p&gt;In October, an online marketplace asked me to return a laptop I never received.&lt;/p&gt;&#xA;&lt;p&gt;A day later, after looking into it, they agreed I had never received it. Then they asked me to go and fetch it, and send it back myself.&lt;/p&gt;&#xA;&lt;p&gt;I said no.&lt;/p&gt;&#xA;&lt;p&gt;This is a small story compared with the ones I usually write about. But it shows, step by step, how one wrong record can travel through a system until a customer who did nothing wrong is first treated as the problem, and then asked to be the fix.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Am Not an Archivist: What Careless Automation Asks of Disabled People</title>
      <link>https://dobybaxter127.gitlab.io/articles/i-am-not-an-archivist/</link>
      <pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/i-am-not-an-archivist/</guid>
      <description>&lt;p&gt;I&#39;m writing this in a studio that has had no heating since early July.&lt;/p&gt;&#xA;&lt;p&gt;I have reported it by email, by phone, through a formal complaint form, and to the building&#39;s reception. This week, a phone call finally explained why nothing happened: my emails and calls had been going to a team in another city the whole time.&lt;/p&gt;&#xA;&lt;p&gt;Nobody noticed. Nobody told me. I only found out because I kept chasing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Label Is Not a Review: Following One Closed Merge Request</title>
      <link>https://dobybaxter127.gitlab.io/articles/a-label-is-not-a-review/</link>
      <pubDate>Tue, 06 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/a-label-is-not-a-review/</guid>
      <description>&lt;p&gt;This is a follow-up to two earlier pieces: &lt;a href=&#34;https://dobybaxter127.gitlab.io/articles/why-this-time-is-different/&#34;&gt;Why This Time Is Different: Following the Chain of Consequences&lt;/a&gt; and &lt;a href=&#34;https://dobybaxter127.gitlab.io/articles/learning-to-build-without-a-ladder-site/&#34;&gt;Learning to Build Without a Ladder&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In the first one, I listed the assumptions that let the tech industry recover from past downturns. The last one was the easiest to miss: &lt;strong&gt;there was a way in.&lt;/strong&gt; Someone outside the industry could still reach a person who would let them in, and open source was one of the places where that still worked. I wrote about how automated gates on both sides are closing that door.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Built to Stop Bots, Built to Stop Me: How CAPTCHAs Fail the Humans They Claim to Protect</title>
      <link>https://dobybaxter127.gitlab.io/articles/built-to-stop-bots-built-to-stop-me/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/built-to-stop-bots-built-to-stop-me/</guid>
      <description>&lt;h2&gt;The gate I could not pass&lt;/h2&gt;&#xA;&lt;p&gt;I was invited to join a community. Between me and the people who invited me stood one question: are you human?&lt;/p&gt;&#xA;&lt;p&gt;I am. I could not prove it. The images moved faster than I could track, and I failed again and again until I gave up and emailed the organizer instead.&lt;/p&gt;&#xA;&lt;p&gt;I build validation systems for a living, so this stung twice. A validator built to stop software had rejected a real person. And it was far from the first time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thank You, Every Time: What the Pyxel Team at ESA Taught Me That No Employer Ever Did</title>
      <link>https://dobybaxter127.gitlab.io/articles/thank-you-every-time/</link>
      <pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/thank-you-every-time/</guid>
      <description>&lt;p&gt;Every time I sent the Pyxel team something, they said thank you.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Not once at the end, as a formality. Every time. A fix, a new version of the tool I was building, an answer to a question: thank you. I want to write about that, because in all my years of working and applying for work, no employer ever thanked me for my work, and I didn&#39;t know how much I needed it until it happened.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why This Time Is Different: Following the Chain of Consequences</title>
      <link>https://dobybaxter127.gitlab.io/articles/why-this-time-is-different/</link>
      <pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/why-this-time-is-different/</guid>
      <description>&lt;p&gt;I have been thinking a lot about where software engineering is heading, and I keep arriving at the same conclusion: this time is different.&lt;/p&gt;&#xA;&lt;p&gt;I know how that sounds. Whenever people worry about the tech industry, the usual reassurance is that we have been here before. There was the dot-com crash, then the financial crisis, and both times the industry recovered and came back bigger.&lt;/p&gt;&#xA;&lt;p&gt;I do not think that reassurance holds anymore, and I want to show why rather than just say it. When I want to rely on a system, I list what it depends on and check whether each dependency still holds. So that is how I approach this. First I describe how I see past recoveries working, then I follow what is happening now one link at a time, and look at which of those dependencies are still in place.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odoo 19 Quietly Drops Your _sql_constraints: How to Find Them Before Your Data Does</title>
      <link>https://dobybaxter127.gitlab.io/articles/odoo-19-drops-your-sql-constraints/</link>
      <pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/odoo-19-drops-your-sql-constraints/</guid>
      <description>&lt;p&gt;Odoo 19 changed how a model declares a database constraint, and it made the change quietly. A module that still uses &lt;code&gt;_sql_constraints&lt;/code&gt; keeps installing, keeps updating and keeps passing its tests. The only sign is one warning in the server log, and the rule the module declared is no longer enforced by anything.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;That is the kind of failure I care most about: nothing breaks on the day, and the cost turns up months later as duplicate records nobody can explain. This post walks through what the 19.0 source does with the old attribute, what happens to a constraint that already existed before the upgrade, and how to check your own modules and database.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Is Where My Actions Count: What a Special Interest Actually Does</title>
      <link>https://dobybaxter127.gitlab.io/articles/software-is-where-my-actions-count/</link>
      <pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/software-is-where-my-actions-count/</guid>
      <description>&lt;p&gt;People assume a special interest is just a hobby turned up too loud. It isn&#39;t. It&#39;s the one environment where my actions reliably produce consequences I can see, understand, and stand behind. Mine maps onto software, and that single fact explains more about my career than any decision I ever consciously made. This piece is also published &lt;a href=&#34;https://dev.to/dobybaxter127/software-is-where-my-actions-count-what-a-special-interest-actually-does-4cgl&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;on dev.to&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;What a special interest actually is&lt;/h2&gt;&#xA;&lt;p&gt;The casual version of the term is something like &#34;an autistic person who is really into trains.&#34; Technically true, completely missing the mechanism.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Rule It Cannot Quietly Break: Building an Assistant That Checks Its Own Answers</title>
      <link>https://dobybaxter127.gitlab.io/articles/nexa-checking-its-own-answers/</link>
      <pubDate>Sun, 13 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/nexa-checking-its-own-answers/</guid>
      <description>&lt;p&gt;An answer should not have to be taken on trust. I&#39;m building &lt;a href=&#34;https://gitlab.com/dobybaxter127/nexa&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Nexa&lt;/a&gt; because I believe a coding assistant should be able to show you what it checked — which rule, from which source, and whether the code it just wrote actually obeys it — grounded in a corpus you can read rather than in a confident paragraph. The first version is now finished, and this is why it exists and how it&#39;s built. The deeper technical walkthrough lives in the &lt;a href=&#34;https://dev.to/dobybaxter127/ai-as-a-fluency-machine-what-software-engineering-taught-me-about-checking-a-models-answer-mgj&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;companion article on dev.to&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When Is a System Not Fit for Purpose?</title>
      <link>https://dobybaxter127.gitlab.io/articles/when-is-a-system-not-fit-for-purpose/</link>
      <pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/when-is-a-system-not-fit-for-purpose/</guid>
      <description>&lt;p&gt;In software engineering we have a fairly plain answer to the question of whether something is fit for purpose: a system is fit for purpose if it reliably does the thing it was designed to do. We seem to apply a much softer standard to the systems people actually have to live inside. A public service can have a department, an application portal, a helpline, a set of criteria, a budget, and hundreds of people working within it, and none of that tells us whether it is achieving its purpose. A system existing is not the same thing as a system working. The longer technical walkthrough lives in the &lt;a href=&#34;https://dev.to/dobybaxter127/when-is-a-system-not-fit-for-purpose-587d&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;companion article on dev.to&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning to Build Without a Ladder</title>
      <link>https://dobybaxter127.gitlab.io/articles/learning-to-build-without-a-ladder-site/</link>
      <pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/learning-to-build-without-a-ladder-site/</guid>
      <description>&lt;p&gt;I never got the junior job.&lt;/p&gt;&#xA;&lt;p&gt;Not for lack of trying. I spent well over a year applying, building, learning, and applying again. For long stretches I could not get past the first filter, let alone into a room with an engineer. And I am not unusual. I am one of a very large group of people who entered software and security over the past five years or so and found that the door marked &#34;start here&#34; had quietly been taken off its hinges.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enforcing Data Invariants in Odoo: Model Constraints, Migrations, and Tests That Actually Cover the Fix</title>
      <link>https://dobybaxter127.gitlab.io/articles/enforcing-data-invariants-in-odoo/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/enforcing-data-invariants-in-odoo/</guid>
      <description>&lt;p&gt;This post collects a few things I ran into while contributing fixes to &lt;a href=&#34;https://openspp.org/en/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenSPP&lt;/a&gt;, a social-protection platform built on Odoo. They are all variations on one question: when a value has to satisfy a rule, where does that rule need to live so it holds on every path the value can arrive through.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This article is also published &lt;a href=&#34;https://dev.to/dobybaxter127/enforcing-data-invariants-in-odoo-model-constraints-migrations-and-tests-that-actually-cover-the-1le0&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;on dev.to&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Write paths in Odoo&lt;/h2&gt;&#xA;&lt;p&gt;A stored model field can be written through several paths:&lt;/p&gt;</description>
    </item>
    <item>
      <title>If GOV.UK Knows the Application Is Invalid, Why Did It Take My Payment?</title>
      <link>https://dobybaxter127.gitlab.io/articles/if-govuk-knows-the-application-is-invalid/</link>
      <pubDate>Fri, 21 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/if-govuk-knows-the-application-is-invalid/</guid>
      <description>&lt;p&gt;TL;DR — I applied for a British passport on GOV.UK, answered &amp;quot;No&amp;quot; to a question that quietly made the whole application invalid, and the system still walked me all the way to a non-refundable payment — without ever acting on the answer it had held since question three. This isn&amp;#x27;t really a politics post, it&amp;#x27;s a post-mortem. The real failure wasn&amp;#x27;t input validation; it was workflow validation: an invalid state was allowed to propagate all the way to an irreversible action. Below I separate the layers of validation that actually matter, argue that irreversible actions must be gated on provable eligibility rather than mere navigation, show why real-world dependencies are asynchronous, and make the case that accessibility is a property of the workflow, not just the UI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Floor Beneath Every Person: Building Toward Survival as a Right</title>
      <link>https://dobybaxter127.gitlab.io/articles/a-floor-beneath-every-person/</link>
      <pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/a-floor-beneath-every-person/</guid>
      <description>&lt;p&gt;&lt;em&gt;Updated October 2026. The blueprint has moved on since I first wrote this: the rules now live in the contracts themselves, the checks prove they fire, the smallest honest pilot has been rehearsed end to end on synthetic records, and all of it can now be explored in your browser. The sections below say what changed, including a leak the rehearsal caught in its own public report.&lt;/em&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Human survival should not depend on financial access. I&#39;m building the &lt;a href=&#34;https://gitlab.com/dobybaxter127/social-resource-floor&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Social Resource Floor&lt;/a&gt; because I believe there should be an open, shared way for a person to reach the resources they need to stay alive (food, water, housing, energy, healthcare), grounded in being human rather than in what they can pay. The blueprint is now complete, and this is why it exists, how it&#39;s built, and how far it has come. The deeper technical walkthrough lives in the &lt;a href=&#34;https://dev.to/dobybaxter127/a-floor-beneath-every-person-design-choices-in-the-first-social-resource-floor-blueprint-2hb5&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;companion article on dev.to&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Floor Beneath Which No One Falls: Why I Started the Social Resource Floor</title>
      <link>https://dobybaxter127.gitlab.io/articles/social-resource-floor-essay/</link>
      <pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/social-resource-floor-essay/</guid>
      <description>&lt;p&gt;&lt;em&gt;Updated October 2026. Everything below about why the Social Resource Floor exists still stands. What has changed is how far it has come: the early blueprint this essay describes is now complete, machine-checked, and explorable in your browser, and a new section near the end says where it stands today.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Survival should be grounded in being human, not in financial access. I started the &lt;a href=&#34;https://social-resource-floor-5a9cc0.gitlab.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Social Resource Floor&lt;/a&gt; because I could not stop noticing the gate that stands between people and the resources they need to live, and because I believe the structure that coordinates access to those resources should be owned by no one and open to everyone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenSPP And Why This Work Matters to Me: Infrastructure, Openness, and Survival as a Right</title>
      <link>https://dobybaxter127.gitlab.io/articles/why-this-work-matters/</link>
      <pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/why-this-work-matters/</guid>
      <description>&lt;p&gt;Where a government cannot reach its people, software sometimes can. I contribute to &lt;a href=&#34;https://openspp.org/en/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenSPP&lt;/a&gt; because I believe the infrastructure that carries survival to a human being should belong to everyone — and I hope that one day it reaches everyone.&lt;/p&gt;&#xA;&lt;h2&gt;The gap infrastructure is meant to close&lt;/h2&gt;&#xA;&lt;p&gt;OpenSPP&#39;s homepage states it plainly: more than four billion people worldwide still have no access to social protection. That number is easy to read past, but it isn&#39;t abstract. It is the measure of how many people are one bad harvest, one illness, or one disaster away from having nothing to fall back on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Teleporter Problem Was Never About Teleporters</title>
      <link>https://dobybaxter127.gitlab.io/articles/teleporter-problem/</link>
      <pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/teleporter-problem/</guid>
      <description>&lt;p&gt;TL;DR — I usually write about tools and tests. This one starts with a teleporter and ends somewhere much stranger. The setup is the science-fiction one: scan a person completely, turn them into information, transmit it, and rebuild them atom-for-atom at the other end. The interesting question isn&#39;t whether we can build the machine. It&#39;s the one the engineering never touches — how do we know the person who steps out is actually alive, and actually &lt;em&gt;them&lt;/em&gt;, and not a sophisticated enough copy that behaves exactly like the original? Following that question honestly, teleportation quietly stops being the mystery. Underneath the copy sits a stack of much older problems — why there are separate perspectives at all, why there is any experience at all, and why, even if reality prefers nothing whatsoever, no perspective inside it can ever share that neutrality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Paving the wrong Path: What a Broken Government System Taught Me About Feedback Loops</title>
      <link>https://dobybaxter127.gitlab.io/articles/paving-the-wrong-path/</link>
      <pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/paving-the-wrong-path/</guid>
      <description>&lt;p&gt;Last year I was made redundant from an NHS role. Around the same time, the team I worked in got a &amp;quot;new system.&amp;quot; Everything that used to live on paper — or, honestly, in something that behaved like a shared Excel sheet — was going digital.&lt;/p&gt;&#xA;&lt;p&gt;I was still employed during the first few weeks of rollout, so I watched it happen. And the thing I remember most clearly is that it didn&amp;#x27;t make anything better. The forms moved from paper to screen, and that was more or less the whole story. The same duplications, the same overlaps, the same unanswered questions. If anything, it felt more primitive than the retro spreadsheet it replaced.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reconstructing cloud identity intrusions from O365 and CloudTrail logs</title>
      <link>https://dobybaxter127.gitlab.io/articles/reconstructing-cloud-identity-intrusions/</link>
      <pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/reconstructing-cloud-identity-intrusions/</guid>
      <description>&lt;p&gt;The uncomfortable truth of modern cloud IR is that there is often nothing to &amp;quot;detect&amp;quot; in the old sense. Attackers don&amp;#x27;t break in anymore; they log in. CrowdStrike&amp;#x27;s 2026 Global Threat Report put 82% of last year&amp;#x27;s detections in the malware-free column, with valid-account abuse behind roughly a third of cloud incidents. No dropper, no exploit chain — just a legitimate identity doing legitimate-looking things across Entra, M365, and a dozen SaaS apps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI as a Laundering Machine: What Software Engineering Taught Me About Accountability</title>
      <link>https://dobybaxter127.gitlab.io/articles/ai-laundering-machine/</link>
      <pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/ai-laundering-machine/</guid>
      <description>&lt;p&gt;If an employer uses AI to decide whether I&amp;#x27;m worth interviewing, we call it innovation. If I use the same technology to write more clearly or work around a disability, we call it cheating. The algorithms haven&amp;#x27;t changed — only who benefits.&lt;/p&gt;&#xA;&lt;h2&gt;The paradox&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;#x27;s an asymmetry in how we talk about AI and work that I can&amp;#x27;t stop thinking about, because when an employer runs ten thousand applications through a ranking model, we call it efficiency. When an applicant uses that same technology to organize their thoughts or compensate for a cognitive barrier, the language suddenly turns to authenticity, fairness, and &amp;quot;unfair advantage.&amp;quot;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Safety Net Is an Accessibility Feature: ADHD, AI, and How I Actually Build Software</title>
      <link>https://dobybaxter127.gitlab.io/articles/safety-net-accessibility-feature/</link>
      <pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/safety-net-accessibility-feature/</guid>
      <description>&lt;p&gt;A while back I wrote that you don&amp;#x27;t need perfect code — you need a safety net that talks back. People read it as an engineering post, which it was. But I left something out. I don&amp;#x27;t build those systems only because they&amp;#x27;re good engineering. I build them because they&amp;#x27;re how I stay functional as a developer with ADHD and autism. The clear error messages, the validation that runs before anything else does, the tests that fail loudly and specifically — those aren&amp;#x27;t just reliability features to me. They&amp;#x27;re external memory. They&amp;#x27;re the structure my own brain doesn&amp;#x27;t reliably hold on its own.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a FastAPI Backend That Serves Live Satellite Imagery and Orbital Position</title>
      <link>https://dobybaxter127.gitlab.io/articles/fastapi-satellite-backend/</link>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/fastapi-satellite-backend/</guid>
      <description>&lt;p&gt;TL;DR — I built a full-stack app that shows one place — the Sheffield Cholera Monument — from two scales at once: a satellite&amp;#x27;s-eye vegetation view from space, and a centimeter-scale 3D model from the ground. This post is about the backend: a FastAPI service that authenticates against the Copernicus Sentinel Hub, pulls the newest real Sentinel-2 scene over a bounding box, computes NDVI, and then pins a satellite marker to the exact point in orbit where Sentinel-2A passed closest to the monument for that scene. The satellite-data pipeline is the heart of it, so that&amp;#x27;s where I&amp;#x27;ll spend most of the words.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Instrumented a System the OTel GenAI Conventions Weren&#39;t Built For - Here&#39;s Where They Broke</title>
      <link>https://dobybaxter127.gitlab.io/articles/otel-genai-frictions/</link>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/otel-genai-frictions/</guid>
      <description>&lt;p&gt;TL;DR — I instrumented a deterministic, content-blind AI workflow enforcer with the emerging OpenTelemetry GenAI semantic conventions. It technically worked, but pinched in six specific places — each one exposing the same hidden assumption: that a GenAI system is, by definition, a model invoker. This post catalogs the six frictions, shows the design I shipped instead, and follows one friction into a live semantic-conventions discussion.&lt;/p&gt;&#xA;&lt;h2&gt;What you&amp;#x27;ll get out of it&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A concrete map of where the GenAI conventions assume a model sits at the center of every span&lt;/li&gt;&#xA;&lt;li&gt;A reusable pattern for instrumenting orchestration / governance / policy layers that don&amp;#x27;t call models&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;ul&gt;&#xA;&lt;li&gt;Why &amp;quot;refused&amp;quot; must not be encoded as &amp;quot;errored,&amp;quot; and how to fix that in one line&lt;/li&gt;&#xA;&lt;li&gt;How a friction log — not a formal proposal — can still move a standard&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;h2&gt;Contents&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The system under instrumentation&lt;/li&gt;&#xA;&lt;li&gt;The six frictions (at a glance)&lt;/li&gt;&#xA;&lt;li&gt;The frictions in detail&lt;/li&gt;&#xA;&lt;li&gt;What I shipped instead: own the namespace&lt;/li&gt;&#xA;&lt;li&gt;The pattern underneath&lt;/li&gt;&#xA;&lt;li&gt;Where one friction ended up&lt;/li&gt;&#xA;&lt;li&gt;Takeaways&lt;/li&gt;&#xA;&lt;/ul&gt;&lt;h2&gt;The system under instrumentation&lt;/h2&gt;&#xA;&lt;p&gt;First, a disambiguation, because &amp;quot;LLM router&amp;quot; is an overloaded term.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing Against State Drift: Guarding a Config Tool Whose Source of Truth Lives Somewhere Else</title>
      <link>https://dobybaxter127.gitlab.io/articles/testing-against-state-drift/</link>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/testing-against-state-drift/</guid>
      <description>&lt;p&gt;TL;DR — I maintain a browser-based configuration tool for ESA&amp;#x27;s Pyxel detector-simulation framework. Its whole job is to help people write configs that a separate, independently-versioned project will accept. That makes drift — my tool&amp;#x27;s idea of &amp;quot;valid&amp;quot; quietly falling out of sync with Pyxel&amp;#x27;s — the central failure mode. This post is about the testing and automation I built to catch drift at three different layers, and the one principle that ties them together: test each invariant at the seam where it actually lives.&lt;/p&gt;</description>
    </item>
    <item>
      <title>You Don&#39;t Need Perfect Code - You Need a Safety Net That Talks Back</title>
      <link>https://dobybaxter127.gitlab.io/articles/you-dont-need-perfect-code/</link>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/you-dont-need-perfect-code/</guid>
      <description>&lt;p&gt;TL;DR — My last post was about catching drift: the moment my config tool&amp;#x27;s idea of &amp;quot;valid&amp;quot; silently diverges from the real Pyxel framework. This post is about the other half of the same system — what happens the instant a human hits one of those checks. A safety net has two jobs: it has to catch you, and it has to talk to you when it does. Perfect code chases the first and forgets the second. I dug into ~60 years of error-message research to work out what a net that talks back should actually say, and mapped each finding onto a concrete rule I now hold my own diagnostics to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitLab vs GitHub in 2026: Integrated Platform vs. Composable Ecosystem</title>
      <link>https://dobybaxter127.gitlab.io/articles/gitlab-vs-github-2026/</link>
      <pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/gitlab-vs-github-2026/</guid>
      <description>&lt;p&gt;Pick GitLab or GitHub in 2026 and you&amp;#x27;re not really choosing between two Git hosts — you&amp;#x27;re choosing between two philosophies about what a development platform should be. The old comparison (&amp;quot;GitLab has CI/CD built in, GitHub needs external tools&amp;quot;) is out of date. GitHub has native CI/CD, native security scanning, and a native container registry now. The real difference is architectural: GitLab bundles the whole DevSecOps lifecycle into one integrated application, while GitHub gives you a strong core and an enormous ecosystem to compose the rest yourself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Validate Your LLM Workflow Before It Runs (Python &#43; YAML Topology Checks)</title>
      <link>https://dobybaxter127.gitlab.io/articles/validate-llm-workflow-topology/</link>
      <pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://dobybaxter127.gitlab.io/articles/validate-llm-workflow-topology/</guid>
      <description>&lt;p&gt;Your LLM app boots fine. It answers the first few messages fine. Then, ten minutes into a real conversation, it quietly walks from the support step into the billing step that doesn&amp;#x27;t exist anymore, or loops faq → support → faq → support until something times out. Nothing crashed at startup. The mistake was in the workflow&amp;#x27;s shape the whole time — you just didn&amp;#x27;t find out until runtime, in production, with a user watching.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
