<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ray Blair - Articles</title>
    <link>https://rayblair.co.uk/articles</link>
    <description>PHP internals, architecture, performance, and the trade-offs behind real-world engineering decisions.</description>
    <language>en-gb</language>
    <lastBuildDate>Mon, 06 Jul 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://rayblair.co.uk/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Yippee-Ki-Yay: Building a Die Hard Roguelike in C</title>
      <link>https://rayblair.co.uk/articles/yippee-ki-yay-building-a-die-hard-roguelike-in-c</link>
      <guid>https://rayblair.co.uk/articles/yippee-ki-yay-building-a-die-hard-roguelike-in-c</guid>
      <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
      <description>Learning C by building a Die Hard-inspired roguelike - splitting a reusable engine from the game, and getting fog of war right with brute-force Bresenham line-of-sight.</description>
      <category>gamedev</category>
      <category>c</category>
      <category>sdl2</category>
      <category>game-engine</category>
    </item>
    <item>
      <title>How I Built a 65 Million Item Array in PHP... Kind Of</title>
      <link>https://rayblair.co.uk/articles/building-a-65-million-item-array-in-php</link>
      <guid>https://rayblair.co.uk/articles/building-a-65-million-item-array-in-php</guid>
      <pubDate>Sat, 01 Nov 2025 00:00:00 GMT</pubDate>
      <description>Why PHP arrays are secretly memory-hungry hash tables - and how I used FFI and C structs to fit 65 million items into memory anyway.</description>
      <category>php</category>
      <category>performance</category>
      <category>memory</category>
      <category>c</category>
      <category>ffi</category>
      <category>php-internals</category>
      <category>data-structures</category>
    </item>
    <item>
      <title>Understanding Service Containers in PHP</title>
      <link>https://rayblair.co.uk/articles/understanding-service-containers-in-php</link>
      <guid>https://rayblair.co.uk/articles/understanding-service-containers-in-php</guid>
      <pubDate>Tue, 20 Aug 2024 00:00:00 GMT</pubDate>
      <description>How dependency injection containers store services, resolve their dependencies, and manage lifecycles - built up from scratch with a worked PHP-DI example.</description>
      <category>php</category>
      <category>architecture</category>
      <category>dependency-injection</category>
      <category>design-patterns</category>
      <category>laravel</category>
    </item>
    <item>
      <title>PSR-4 - Autoloader</title>
      <link>https://rayblair.co.uk/articles/psr4-autoloader</link>
      <guid>https://rayblair.co.uk/articles/psr4-autoloader</guid>
      <pubDate>Sun, 24 Mar 2024 00:00:00 GMT</pubDate>
      <description>How class autoloading actually works in PHP, and how to write a PSR-4 compliant autoloader yourself with spl_autoload_register - and when to just use Composer.</description>
      <category>php</category>
      <category>psr</category>
      <category>autoloading</category>
      <category>composer</category>
    </item>
    <item>
      <title>Skinny Controllers, Fat Models</title>
      <link>https://rayblair.co.uk/articles/skinny-controllers-fat-models</link>
      <guid>https://rayblair.co.uk/articles/skinny-controllers-fat-models</guid>
      <pubDate>Sun, 17 Mar 2024 00:00:00 GMT</pubDate>
      <description>Keeping controllers lightweight by moving business logic out of them - what the rule buys you in testing and reuse, and where a service or domain layer fits instead.</description>
      <category>php</category>
      <category>laravel</category>
      <category>architecture</category>
      <category>mvc</category>
      <category>design-patterns</category>
    </item>
    <item>
      <title>Simplify Your Build Process with Makefile</title>
      <link>https://rayblair.co.uk/articles/simplify-your-build-process-with-makefile</link>
      <guid>https://rayblair.co.uk/articles/simplify-your-build-process-with-makefile</guid>
      <pubDate>Sun, 10 Mar 2024 00:00:00 GMT</pubDate>
      <description>Turn scattered build commands into simple, standardised make targets - one clean, reusable entry point that works across languages and frameworks.</description>
      <category>tooling</category>
      <category>devex</category>
      <category>make</category>
      <category>docker</category>
      <category>automation</category>
    </item>
    <item>
      <title>Clean Architecture for PHP Applications</title>
      <link>https://rayblair.co.uk/articles/clean-architecture-for-php-applications</link>
      <guid>https://rayblair.co.uk/articles/clean-architecture-for-php-applications</guid>
      <pubDate>Sun, 03 Mar 2024 00:00:00 GMT</pubDate>
      <description>A multi-layered PHP architecture with Repository, Service, DTO, and Controller layers that keeps business logic clean, testable, and ready to scale.</description>
      <category>php</category>
      <category>architecture</category>
      <category>ddd</category>
      <category>design-patterns</category>
      <category>mvc</category>
    </item>
  </channel>
</rss>