<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Laurentiu Niculescu - Writing</title>
    <link>https://laurentiu-niculescu.co.uk</link>
    <description>Software engineer in London. Windows security tooling in Python, a multi-tenant client platform in TypeScript, and two live web apps on Linux servers I provision and harden myself.</description>
    <language>en-gb</language>
    <atom:link href="https://laurentiu-niculescu.co.uk/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The permission check that did two jobs</title>
      <link>https://laurentiu-niculescu.co.uk/writing/permission-check-two-jobs</link>
      <guid isPermaLink="true">https://laurentiu-niculescu.co.uk/writing/permission-check-two-jobs</guid>
      <description>One flag guarded both &quot;can see every client&quot; and &quot;can create logins&quot;. Splitting it into two questions took an afternoon. Noticing it took a year.</description>
      <pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>My DMARC check passed domains that had no protection at all</title>
      <link>https://laurentiu-niculescu.co.uk/writing/dmarc-check-that-passed-everything</link>
      <guid isPermaLink="true">https://laurentiu-niculescu.co.uk/writing/dmarc-check-that-passed-everything</guid>
      <description>Looking for the record is not the same as reading it. A substring match gave a green tick to `+all` and to `p=none`, which are the two ways of having the record and none of the benefit.</description>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>258MB of JSON, and the query parameter that fixed it</title>
      <link>https://laurentiu-niculescu.co.uk/writing/258mb-of-json</link>
      <guid isPermaLink="true">https://laurentiu-niculescu.co.uk/writing/258mb-of-json</guid>
      <description>An endpoint that worked fine in testing started returning 502s in production. The response was a quarter of a gigabyte, and most of it was photographs.</description>
      <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Every script I write backs up what it touches</title>
      <link>https://laurentiu-niculescu.co.uk/writing/every-script-backs-up-what-it-touches</link>
      <guid isPermaLink="true">https://laurentiu-niculescu.co.uk/writing/every-script-backs-up-what-it-touches</guid>
      <description>The rule came from breaking a working config with no way back. It costs three lines and it has saved me more times than I would like to admit in public.</description>
      <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
