<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <!-- Homepage -->
  <url>
    <loc>https://www.billy-ruffian.co.uk/</loc>
    <lastmod>2026-04-03</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  
  <!-- Individual posts -->
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-how-to-pick-a-random-line-from-a-file-in-ruby-without-holding-it-in-memory</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-how-to-delete-a-key-value-from-an-arbitrarily-deep-ruby-hash</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-array-denaturing-in-ruby</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-regex-r</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-warnings</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-s-built-in-timeout</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-incrementing-alphanumerics</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-matching-multiple-values-in-a-case-statement</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-named-structs</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-automatic-deep-keys-with-ruby-hashes</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-associative-arrays</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-has-a-built-in-persistance-database</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-using-file-locking-for-exclusivity-in-ruby</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-knows-the-source-of-required-code</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-you-can-use-lambdas-in-ruby-case-statements</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-how-to-quickly-get-regex-matches-in-ruby</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-how-to-prettify-ruby-s-inject-method</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-s-loop-automatically-breaks-at-the-end-of-iteration</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/controlling-state-variables-in-cucumber</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-complex-string-interpolation-with-ruby</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-working-with-long-element-ids-with-capybara</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-how-to-export-env-variables-to-the-current-shell</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-2-7-s-enumerable-filter_map</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-methods-can-take-tuples</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-fun-with-ruby-method-creation</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-methods-are-functions-getting-a-reference</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-currying</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-lambda-composition-in-ruby</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-finding-the-source-of-a-ruby-method</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/mini-ruby-dsl-template</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/inline-bundler-for-ruby-scripts</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-denaturing-ruby-array-to-get-the-last-element-and-remainder</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-splat-operator-builds-arrays</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-counting-consecutive-items-in-a-ruby-array</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-asserting-exceptions-with-cucumber-ruby</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/activerecord-without-rails</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/a-gem-that-provides-rake-tasks</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/fun-with-ruby-pattern-matching</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/playing-with-ruby-ractors</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/tail-call-optimisation-in-elixir-ruby</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/default-values-for-ruby-hashes</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-s-looping-suffixes</loc>
      <lastmod>2025-09-24</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-s-tap-and-then</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-itself</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/clean-monkey-patching-in-ruby</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/open3</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/parsing-a-gemfile</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/is-it-an-integer</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/catching-and-throwing-in-ruby</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-string-substitution-with-hashes</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/method-parameters-and-constructing-defaults-in-ruby</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/xor-magic-trick</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-s-secret-file</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/memoization-the-right-way</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/rightward-assignment-in-ruby</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-english-ruby</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-each_with_object</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-ruby-slice_when</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/til-private-ruby-constants</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/gem-documentation</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-hashes-defaults-and-overrides</loc>
      <lastmod>2025-09-22</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/fakermaker-1-3-0</loc>
      <lastmod>2025-09-21</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-globals-that-are-not-global</loc>
      <lastmod>2025-09-21</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/fully-loaded-features-ruby-knows-the-files-it-has-required</loc>
      <lastmod>2025-09-21</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/chutney-inconsistent-quoting</loc>
      <lastmod>2025-09-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/rails-7-leaflet-and-import-maps-with-esm-and-stimulus</loc>
      <lastmod>2025-09-20</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/turbo-streams-rails-broadcasting-nested-model-changes</loc>
      <lastmod>2025-09-20</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/turbo-frames-updating-persistent-islands</loc>
      <lastmod>2025-09-20</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-s-anonymous-parameter-forwarding</loc>
      <lastmod>2025-09-20</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-async-and-http</loc>
      <lastmod>2025-09-19</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/non-blocking-methods-ruby</loc>
      <lastmod>2025-09-19</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/tsort-ruby-s-built-in-topological-sort-algorithm</loc>
      <lastmod>2025-10-23</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-matrix</loc>
      <lastmod>2025-09-18</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/agentic-ai-with-ruby</loc>
      <lastmod>2025-09-18</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/giving-up-the-ghost</loc>
      <lastmod>2025-10-07</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/interacting-with-rail-s-cache</loc>
      <lastmod>2025-11-04</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/ruby-divmod</loc>
      <lastmod>2025-12-02</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/jackdaw-simple-fast-static-site-generator</loc>
      <lastmod>2026-01-06</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/exploding-gems</loc>
      <lastmod>2026-03-02</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/posts/temporary-directories-in-ruby</loc>
      <lastmod>2026-03-02</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
    </url>
  
  <!-- Individual pages -->
    <url>
      <loc>https://www.billy-ruffian.co.uk/pages/about</loc>
      <lastmod>2025-10-08</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.7</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/pages/projects</loc>
      <lastmod>2026-01-14</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.7</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/pages/chutney</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.7</priority>
    </url>
    <url>
      <loc>https://www.billy-ruffian.co.uk/pages/faker-maker</loc>
      <lastmod>2025-09-25</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.7</priority>
    </url>
</urlset>
