<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://thega.me.uk/feed.xml" rel="self" type="application/atom+xml"/><link href="https://thega.me.uk/" rel="alternate" type="text/html"/><updated>2026-05-05T00:00:00+00:00</updated><id>https://thega.me.uk/feed.xml</id><title type="html">thega.me.uk</title><subtitle>Personal blog of Phillip Whittlesea-Clark</subtitle><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><entry><title type="html">Building a Common Language</title><link href="https://thega.me.uk/2026/05/building-a-common-language/" rel="alternate" type="text/html" title="Building a Common Language"/><published>2026-05-05T00:00:00+00:00</published><updated>2026-05-05T23:43:38+01:00</updated><id>https://thega.me.uk/2026/05/building-a-common-language</id><content type="html" xml:base="https://thega.me.uk/2026/05/building-a-common-language/"><![CDATA[<p>Many moons ago, when I used to write software, I realized I was misinterpreting stakeholders, and they me.
We were using the same words, but thinking of different things.</p>

<h2 class="relative group">Misunderstandings
    <div id="misunderstandings" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#misunderstandings" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Over a period of time sales, support, and product were getting annoyed with me for &rsquo;taking too long&rsquo; to build simple things, or &lsquo;delivering rubbish&rsquo; too quickly.
I was deeply confused.
How could I possibly be taking too long on some projects, and not building quality solutions, <em>at the same time</em>?</p>
<p>After (probably too long), I realized I was being told one thing, but through the various layers of engineering process, we were building the wrong thing<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.
It reminded me of a very old image, which visually depicts the differences in what a customer <em>needs</em>, and what is delivered to them.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="A picture showing a tree swing and how various teams in the business interpreted the requirements to build it"
    width="600"
    height="245"
    src="/2026/05/building-a-common-language/misunderstood-requirements.png"
    srcset="/2026/05/building-a-common-language/misunderstood-requirements.png 800w, /2026/05/building-a-common-language/misunderstood-requirements.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/05/building-a-common-language/misunderstood-requirements.png"></figure>
<p>Specifically, when I was being asked by sales to build a quick prototype for a customer, I was building a &lsquo;bells &amp; whistles&rsquo; grade solution.
And then, when I was being asked to build a &lsquo;production&rsquo; grade solution, I was building a prototype<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.
We were using the same words to explain what we wanted — like &lsquo;production&rsquo;, &lsquo;prototype&rsquo;, &lsquo;alpha&rsquo;, etc. — but we had different ideas of what they entailed.</p>
<figure style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="A scene from the Princess Bride where one character tells the other &lsquo;You keep using that word. I do not think it means what you think it means&rsquo;"
    width="640"
    height="360"
    src="/2026/05/building-a-common-language/does-not-mean-what-you-think-it-means.gif"
    srcset="/2026/05/building-a-common-language/does-not-mean-what-you-think-it-means.gif 800w, /2026/05/building-a-common-language/does-not-mean-what-you-think-it-means.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/05/building-a-common-language/does-not-mean-what-you-think-it-means.gif"></figure>
<p>Obviously, we needed to agree on what words meant.
When they said the customer wants a prototype, what does that mean?
When something is production, what <em>is</em> it?</p>

<h2 class="relative group">A Vernacular Cheat Sheet
    <div id="a-vernacular-cheat-sheet" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#a-vernacular-cheat-sheet" aria-label="Anchor">#</a>
    </span>
    
</h2>
<blockquote><p><strong>Vernacular</strong> (<em>noun</em>)</p>
<p>The form of a language that a particular group of speakers use naturally, especially in informal situations.</p>
</blockquote><p>Agreeing on what a word means is hard because to do that, you need more words which you might not agree on.</p>
<p>So I came up with a cheat sheet.
Thirteen properties, shown on a single side of A3, which we could put up on the wall and agree on.
These properties seemed like the most important things to me at the time, and if you look at a delivery from a technical lens, they probably still are.</p>
<p>Splitting the quality of software down into &lsquo;alpha&rsquo;, &lsquo;beta&rsquo;, and &lsquo;stable&rsquo;; where quality increases from one to the next, but so does the amount of time required to build it.
Importantly I avoid the use of the word &lsquo;production&rsquo; here.
Production is overloaded as a term, and is commonly used to describe a deployment environment.
&lsquo;Alpha&rsquo; code can be in production, for example.</p>
<div class="tw:sm:hidden">
    <div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Screen Size Warning
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>I have tried my best to recreate the cheat sheet in some lovely CSS.</p>
<p>Your screen is a bit too small, so here is an image instead.</p></div></div><figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="low"
    alt="An image of the cheat sheet showing the different axis of quality"
    src="cheat-sheet.png"
    ></figure>

</div>

<div class="tw:grid tw:gap-y-4">
    <div class="tw:relative tw:overflow-auto tw:hidden tw:sm:block">
        <div class="tw:grid tw:grid-cols-5 tw:gap-x-4 tw:text-xs tw:text-black tw:text-center tw:*:justify-center tw:*:flex tw:*:items-center tw:*:border-x-1 tw:*:border-b-1 tw:*:border-slate-700">
            <div class="tw:col-span-2 tw:p-4 tw:rounded-t-2xl tw:bg-slate-500 tw:font-bold tw:text-white tw:text-sm tw:border-t-1">Feature</div>
            <div class="tw:p-4 tw:rounded-t-2xl tw:bg-orange-500 tw:font-bold tw:text-white tw:text-sm tw:border-t-1">Alpha</div>
            <div class="tw:p-4 tw:rounded-t-2xl tw:bg-amber-500 tw:font-bold tw:text-white tw:text-sm tw:border-t-1">Beta</div>
            <div class="tw:p-4 tw:rounded-t-2xl tw:bg-emerald-500 tw:font-bold tw:text-white tw:text-sm tw:border-t-1">Stable</div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Accessible / Running</b><br/>Is the feature accessible to a customer?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>System Tests</b><br/>Ensure the system display the behaviour of the feature?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Basic Happy Case</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Documentation</b><br/>Does the user documentation allow users to understand the API?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Monitoring</b><br/>Can the on-call team tell if the system is running as expected?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Locked Behaviour</b><br/>Can we guarantee behaviour to the end user? Will it change?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Major</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Minor</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>No Breaking Changes</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Unit / Integration Test Coverage</b><br/>What level of coverage is mandatory?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>0%</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>40%</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>85%</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Refactoring</b><br/>Should we be refactoring code to make it cleaner as we go?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Expectation Management</b><br/>Are we going to manage the customers expectations downwards?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Data Quality</b><br/>Will we be monitoring/checking the data quality of the feature?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Altering</b><br/>Will an on-call operative be woken up if this feature breaks?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Slack In-Hours</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Meets system SLAs</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Code Quality</b><br/>Will automated code quality checks be satisfied?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-red-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Some justified suppressions</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span class="tw:text-green-500 tw:*:h-6 tw:*:inline"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:bg-white">
                <span><b>Requirement Scope</b><br/>What (non)functional areas will the requirements cover?</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Happy Case</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Happy Case + Failure Case</span>
            </div>
            <div class="tw:p-1 tw:bg-white">
                <span>Happy Case + Failure Case + Non-functionals</span>
            </div>

            
            <div class="tw:col-span-2 tw:p-1 tw:rounded-b-2xl tw:bg-white">
                <span><b>Merge Requests / Reviews</b><br/>What will be covered in development reviews?</span>
            </div>
            <div class="tw:p-1 tw:rounded-b-2xl tw:bg-white">
                <span>Will the application disrupt stable apps?<br/>Will it fulfil the requirements?</span>
            </div>
            <div class="tw:p-1 tw:rounded-b-2xl tw:bg-white">
                <span>As <b>alpha</b> plus:<br/>Code conformance</span>
            </div>
            <div class="tw:p-1 tw:rounded-b-2xl tw:bg-white">
                <span>As <b>beta</b> plus:<br/>Test quality + Design + Architecture</span>
            </div>
        </div>
    </div>

    <div class="tw:relative tw:overflow-auto tw:hidden tw:sm:block">
        <div class="tw:grid tw:gap-x-4 tw:grid-cols-6 tw:*:col-span-2 tw:*:p-2 tw:justify-center tw:text-xs tw:text-black tw:*:border-x-1 tw:*:border-slate-700">
            <div class="tw:rounded-t-2xl tw:bg-orange-500 tw:font-bold tw:text-white tw:text-center tw:text-sm tw:border-y-1">Why write Alpha software?</div>
            <div class="tw:rounded-t-2xl tw:bg-amber-500 tw:font-bold tw:text-white tw:text-center tw:text-sm tw:border-y-1">Why write Beta software?</div>
            <div class="tw:rounded-t-2xl tw:bg-emerald-500 tw:font-bold tw:text-white tw:text-center tw:text-sm tw:border-y-1">Why write Stable software?</div>
            <div class="tw:bg-white tw:text-right">
                <span>
                    <b>Product Owner</b><br/>
                    <i>I WANT</i> the possibly-flaky feature to be developed quickly and cheaply<br/>
                    <i>SO THAT</i> I can gauge interest in a feature and see if it will encourage sales.
                </span>
            </div>
            <div class="tw:bg-white tw:text-right">
                <span>
                    <b>Product Owner</b><br/>
                    <i>I WANT</i> the beta feature to be of reasonable quality<br/>
                    <i>SO THAT</i> I can work with a customer to develop the feature into something reusable and stable.
                </span>
            </div>
            <div class="tw:bg-white tw:text-right">
                <span>
                    <b>Product Owner</b><br/>
                    <i>I WANT</i> the stable feature to be of good quality and reliability<br/>
                    <i>SO THAT</i> I can sell the existing feature to new customers and promise them good SLAs that they will pay £££ for.
                </span>
            </div>
            <div class="tw:bg-white tw:text-left">
                <span>
                    <b>Developer</b><br/>
                    <i>I WANT</i> the customer's expectations to be managed and no SLAs to be required<br/>
                    <i>SO THAT</i> the business doesn't make SLA commitments for quick proofs of concept.
                </span>
            </div>
            <div class="tw:bg-white tw:text-left">
                <span>
                    <b>Developer</b><br/>
                    <i>I WANT</i> a reasonable level of testing<br/>
                    <i>SO THAT</i> the beta feature can be iterated on easily with a reasonable degree of confidence.
                </span>
            </div>
            <div class="tw:bg-white tw:text-left">
                <span>
                    <b>Developer</b><br/>
                    <i>I WANT</i> full system tests<br/>
                    <i>SO THAT</i> the stable feature can be maintained without causing regressions.
                </span>
            </div>
            <div class="tw:bg-white tw:text-right tw:rounded-b-2xl tw:border-b-1">
                <span>
                    <b>Support Team</b><br/>
                    <i>I WANT</i> no alerts to go off if the possibly-flaky feature breaks<br/>
                    <i>SO THAT</i> I'm not being woken up at 2AM for no reason.
                </span>
            </div>
            <div class="tw:bg-white tw:text-right tw:rounded-b-2xl tw:border-b-1">
                <span>
                    <b>Support Team</b><br/>
                    <i>I WANT</i> a reasonable level of monitoring (and possible in-hours-only alerting)<br/>
                    <i>SO THAT</i> I can gain confidence that the beta feature will not cause lots of incident when it goes stable.
                </span>
            </div>
            <div class="tw:bg-white tw:text-right tw:rounded-b-2xl tw:border-b-1">
                <span>
                    <b>Support Team</b><br/>
                    <i>I WANT</i> good monitoring, alerting, runbooks and outage drills<br/>
                    <i>SO THAT</i> I only get called out to deal with actually SLA-impacting incidents and when I do, I can actually fix them.
                </span>
            </div>
        </div>
    </div>
</div>

<p>So, as an example: if Sales asked us for an &lsquo;alpha&rsquo; feature, we would deliver something that met the basic functional requirements, but might fall over, and the customer would find out, not us.</p>
<p>Critically, Sales should have managed that customers expectations that they were getting something quick to try, but &lsquo;stable&rsquo; it would not be.</p>
<p>If Sales came back to complain, we could tap the sign.</p>
<figure style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Screen grab from the Simpsons, showing a bus driver with the caption &lsquo;Dont make me tap the quality cheat sheet&rsquo;"
    width="486"
    height="357"
    src="/2026/05/building-a-common-language/tap-the-sign.png"
    srcset="/2026/05/building-a-common-language/tap-the-sign.png 800w, /2026/05/building-a-common-language/tap-the-sign.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/05/building-a-common-language/tap-the-sign.png"></figure>
<p>The primary output of this was that we &lsquo;were on the same page&rsquo;, but it also helped each department gain confidence in one another.
Sales were no longer worried we were going to &lsquo;over-engineer&rsquo; quality into something when it wasn&rsquo;t needed, and engineering were not worried that something we built in a rush would wake us up at 4am.</p>

<h2 class="relative group">Parting Thought
    <div id="parting-thought" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#parting-thought" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Whenever I use the phrase &lsquo;we are on the same page&rsquo;, I think of this quote:</p>
<blockquote><p>&ldquo;Are we all on the same page, Delilah?&rdquo;<br>
&ldquo;The same page? I don&rsquo;t even think we&rsquo;re even in the same library.&rdquo;</p>
<p>— Sarah Ockler</p>
</blockquote><div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>From my perspective, there was probably a degree of distrust in sales, that if I build a <em>real</em> prototype, they would sell it as a full product.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>A bit of an over-simplification, but you get the idea.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="engineering"/><category term="code quality"/><summary type="html">Many moons ago, when I used to write software, I realized I was misinterpreting stakeholders, and they me. We were using the same words, but thinking of different things.</summary></entry><entry><title type="html">One Thousand Hours of Factorio</title><link href="https://thega.me.uk/2026/04/one-thousand-hours-of-factorio/" rel="alternate" type="text/html" title="One Thousand Hours of Factorio"/><published>2026-04-11T00:00:00+00:00</published><updated>2026-04-11T15:55:33+01:00</updated><id>https://thega.me.uk/2026/04/one-thousand-hours-of-factorio</id><content type="html" xml:base="https://thega.me.uk/2026/04/one-thousand-hours-of-factorio/"><![CDATA[<p>Years ago, I was convinced by a friend to play a game where you build a rocket.
I didn&rsquo;t think much of <a href="https://en.wikipedia.org/wiki/Factorio" >Factorio</a>, and I didn&rsquo;t expect to ever dedicate 100 hours to it, let alone 1000.</p>

<h2 class="relative group">How Long?
    <div id="how-long" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-long" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Many moons later, and here we are.
I can officially say that I have spent <em>one thousand hours</em> on something that isn&rsquo;t work, eating, or sleeping<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="A screenshot of the Steam application showing 1000 hours played of Factorio"
    width="1024"
    height="600"
    src="/2026/04/one-thousand-hours-of-factorio/1000_hours_hu_bcc232f3f239a396.png"
    srcset="/2026/04/one-thousand-hours-of-factorio/1000_hours_hu_bcc232f3f239a396.png 800w, /2026/04/one-thousand-hours-of-factorio/1000_hours.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/04/one-thousand-hours-of-factorio/1000_hours.png"></figure>
<p>To put that into context, 1000 hours is:</p>
<ul>
<li>~42 days</li>
<li>~6 weeks</li>
<li>~1.4 months</li>
</ul>
<p>Yes.
I have spent a <strong>month and a half</strong> playing a single game.</p>
<p>Looking at my Steam profile, the time I have spent playing Factorio dwarfs my next most played games:</p>

<div class="chart">
  <canvas id="chart-db8550c61364c890a8126d22d0df1643"></canvas>
  <script type="text/javascript">
    window.addEventListener("DOMContentLoaded", (event) => {
      const ctx = document.getElementById("chart-db8550c61364c890a8126d22d0df1643");
      const chart = new Chart(ctx, {
        
  type: 'bar',
  data: {
    labels: ['Factorio', '7 Days to Die', 'Valheim', 'ARK'],
    datasets: [{
      label: '# of hours',
      data: [1000, 280, 236, 171],
    }]
  }

      });
    });
  </script>
</div>

<p>Is it an addiction?
Maybe.</p>

<h2 class="relative group">Factorio
    <div id="factorio" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#factorio" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I won&rsquo;t do a full breakdown of the game and its mechanic, but I will say that it is addicting for someone with my type of brain.
You are tasked with taking raw materials from the ground (e.g. Oil, Copper, Iron, Uranium), and turning them into products, which you then turn into other products.</p>
<p>For example, Copper is turned into Copper Plate, which is turned into Copper Wire, which is added to some other components to make Electronic Circuits, all the way up to building a full rocket, so you can escape the planet.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Screenshot of Factorio where a rocket is launching out of a silo surrounded by a factory/home/pw/Downloads/press-kit/screenshots/screenshot-6.jpg"
    width="1920"
    height="1080"
    src="/2026/04/one-thousand-hours-of-factorio/rocket_launch_hu_8cd29cd40405eb21.jpg"
    srcset="/2026/04/one-thousand-hours-of-factorio/rocket_launch_hu_8cd29cd40405eb21.jpg 800w, /2026/04/one-thousand-hours-of-factorio/rocket_launch_hu_8277ef43af83afc1.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/04/one-thousand-hours-of-factorio/rocket_launch.jpg"></figure>
<p>This sounds simple, but a core mechanic of the game is resource scarcity.
Started building rocket parts?
Well now your Electric Circuit production needs expanding, as it can&rsquo;t keep up with the demand.
But now your Copper mining setup needs expanding, but to do that you need to improve the throughput of the belts that carry the copper to the main factory&hellip;</p>
<p>And so on.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Someone in a helmet with a gun with the text &lsquo;I do not know who I am. I don&rsquo;t know why I&rsquo;m here. All I know is the factory must grow."
    width="538"
    height="350"
    src="/2026/04/one-thousand-hours-of-factorio/the_factory_must_grow.png"
    srcset="/2026/04/one-thousand-hours-of-factorio/the_factory_must_grow.png 800w, /2026/04/one-thousand-hours-of-factorio/the_factory_must_grow.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/04/one-thousand-hours-of-factorio/the_factory_must_grow.png"></figure>
<p>There is always <em>something</em> that needs optimizing, expanding, or moving around.
Science research unlocks better machines, which require the redesign of your factory.
Space is not limited, but you don&rsquo;t want to have a messy base.
What if guests come to visit, and they see your spaghetti mess all over your Low Density Structure manufacturing?
It&rsquo;s just not done.</p>
<p>You are effectively given a blank canvas where the only constraint is the amount of time you want to spend on it.</p>
<p>But it&rsquo;s not all plain sailing.
There is a native species on the planet which is rather annoyed it&rsquo;s new neighbour is dumping so much pollution into the atmosphere.
If you don&rsquo;t keep an eye on the amount you generate, they will come over with a strongly worded letter.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Picture of bug-like aliens attacking a Factorio base"
    width="1920"
    height="1080"
    src="/2026/04/one-thousand-hours-of-factorio/friends_hu_2f5ba8c2f741b47f.jpg"
    srcset="/2026/04/one-thousand-hours-of-factorio/friends_hu_2f5ba8c2f741b47f.jpg 800w, /2026/04/one-thousand-hours-of-factorio/friends_hu_4c854f70947c2aa0.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/04/one-thousand-hours-of-factorio/friends.jpg"></figure>
<p>I <strong>loved</strong> Factorio, and I sunk over 600 hours into the original game, without getting bored<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>It&rsquo;s probably the only game I have played where I would rate it &lsquo;★★★★★ 5/5&rsquo;, but not recommend it to my friends.
As a game it is phenomenal, but it&rsquo;s too dangerous.</p>
<p>This review from Steam sums it up best:</p>
<blockquote><p>Look. If you&rsquo;re a Software Engineer&hellip; Just don&rsquo;t buy the game. You&rsquo;ll be playing at 4am Tuesday morning wondering where hell the last 72 hours went and how you missed work on monday.<br>
Your wife will hate you<br>
Your dog will hate you<br>
You will never sleep again</p>
<p>The factory must grow.</p>
<p>— <a href="https://steamcommunity.com/id/Ashtoruin/recommended/427520/" >Ashtoruin</a></p>
</blockquote><p>I would also like to point out that this game runs smooth as butter on my 10-year-old Ubuntu X260 ThinkPad.
Which, if you think about it, is wild.</p>

<h2 class="relative group">Space Age DLC
    <div id="space-age-dlc" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#space-age-dlc" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Then, just as I had resolved to put down Factorio for good, Wube — the makers of Factorio — released the <a href="https://www.factorio.com/space-age/content" >Space Age DLC</a>.</p>
<p>Calling Space Age a &lsquo;DLC&rsquo; really undersells the size of it.</p>
<p>The original game takes place on a single planet, &lsquo;Nauvis&rsquo;.
You crash-landed, leaving you with nothing but your pickaxe, and the &lsquo;goal&rsquo; is to launch a rocket into space.</p>
<p>The Space Age DLC expands on the original single-planet game, by adding four new planets.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Screenshot of the Factorio solar system, containing five planets"
    width="1920"
    height="1080"
    src="/2026/04/one-thousand-hours-of-factorio/solar_system_hu_31081b1809f9f475.png"
    srcset="/2026/04/one-thousand-hours-of-factorio/solar_system_hu_31081b1809f9f475.png 800w, /2026/04/one-thousand-hours-of-factorio/solar_system_hu_d28703a6eeab8a09.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/04/one-thousand-hours-of-factorio/solar_system.png"></figure>
<p>Similarly to the original game, you start confined to Nauvis.
But to &lsquo;win&rsquo; you have to escape the solar system instead.
To do this you need to colonize each planet, using each planet&rsquo;s natural resources to build new and specialized machines.
These machines can make your factory more efficient, but most importantly, they allow you to manufacture the next products in your <a href="https://en.wikipedia.org/wiki/Technology_tree" >technology tree</a>.</p>
<p>To get from one planet to another you have to master &lsquo;space platforms&rsquo;; setting up a solar-system-wide delivery network to get resources to where they are needed.</p>
<p>Each planet has a very distinct theme that stops any of the gameplay from feeling repetitive.
The volcanic wasteland on Vulcanus, lightning storms on Fulgora, freezing cold on Aquilo, and the swamps of Gleba, each give different challenges that don&rsquo;t disappoint.</p>
<p>In my mind, Space Age is a whole other game which deserves its own &lsquo;★★★★★ 5/5&rsquo;, but if anything, it makes the addiction problem worse.
There is so much more to do, and now you have a factory on each planet to optimize.</p>
<p>Your five factories must now grow.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="A picture of as Cillian Murphy as Oppenheimer overlaid on a picture of a dense Factorio factory"
    width="1200"
    height="630"
    src="/2026/04/one-thousand-hours-of-factorio/factorio_problems_hu_9fda881b7952e9ad.png"
    srcset="/2026/04/one-thousand-hours-of-factorio/factorio_problems_hu_9fda881b7952e9ad.png 800w, /2026/04/one-thousand-hours-of-factorio/factorio_problems.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/04/one-thousand-hours-of-factorio/factorio_problems.png"></figure>

<h2 class="relative group">Am I Done?
    <div id="am-i-done" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#am-i-done" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I don&rsquo;t think so.</p>
<p>I think what draws me to this game is the simplicity, the freedom, and logic of it.</p>
<p>The game dumps you on a planet and gestures broadly into the distance.<br>
Go ahead.<br>
<em>Build</em>.</p>
<p>Machines consume, and produce at a known rate; but they act like the pieces of a puzzle.
Machines have to be fed, and drawn from.
Belts and pipes are needed to carry products to where they are needed next, but they are eternally in the way.</p>
<p>The game brings you on a journey of ever-increasing complexity; managing the creation and combination of hundreds of different items.
An orchestra of manufacturing.</p>
<p>You can play the game like it&rsquo;s the industrial revolution, pumping pollution out and denying that climate change is real.
Or you can prioritize renewable energy, and live in harmony with the native creatures.</p>
<p>There&rsquo;s a deep satisfaction in knowing you have built something perfectly balanced, compact, or modular.</p>
<p>According to my statistics on Steam, I&rsquo;m doing about 200 hours every six months.
That&rsquo;s about an hour a day.
My current play through called &rsquo;no blueprints darling&rsquo; — where I have to design and balance everything myself, without looking for help online — has been going on for 160 hours.</p>
<p>There are multiple other ways I could &lsquo;spice up&rsquo; Factorio for many more hours.
I haven&rsquo;t even tried mods yet.
Maybe the one that turns every item into <a href="https://mods.factorio.com/mod/pneumatic-transport" >a fluid</a>?</p>
<p>Then there&rsquo;s the third dimension compatible <a href="https://www.satisfactorygame.com/" >Satisfactory</a> to work my way through.</p>
<hr>
<p>★★★★★ 5/5 - The factory must grow!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I&rsquo;m sure I have spent that much time doing other things, but they don&rsquo;t have a handy &lsquo;Hours Played&rsquo; metric.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Luckily I updated the <a href="/about/" >about</a> page of this blog with the number of hours I had played before I moved onto the DLC.
644.1 hours as of the 20<sup>th</sup> April 2025.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="games"/><category term="reviews"/><summary type="html">Years ago, I was convinced by a friend to play a game where you build a rocket. I didn&amp;rsquo;t think much of Factorio, and I didn&amp;rsquo;t expect to ever dedicate 100 hours to it, let alone 1000.</summary></entry><entry><title type="html">6 Years of Ada</title><link href="https://thega.me.uk/2026/03/6-years-of-ada/" rel="alternate" type="text/html" title="6 Years of Ada"/><published>2026-03-31T00:00:00+00:00</published><updated>2026-03-31T23:22:16+01:00</updated><id>https://thega.me.uk/2026/03/6-years-of-ada</id><content type="html" xml:base="https://thega.me.uk/2026/03/6-years-of-ada/"><![CDATA[<p>Today is my first dog Ada&rsquo;s six birthday!</p>
<p>If you have read my <a href="/about/" >about page</a>, you will know I have quite a few animals.</p>
<p>Ada was a lockdown puppy.
We picked her up in the midst of the UK&rsquo;s <a href="https://en.wikipedia.org/wiki/COVID-19_lockdown_in_the_United_Kingdom" >first lockdown</a>, on the 23<sup>rd</sup> of May 2020, and she has been a constant in my life ever since.</p>
<p>I had put off getting a dog for many years, but like half the country, I decided &ldquo;why not, I&rsquo;m going to be at home anyway&rdquo; after my other half started to show signs of cabin fever.
I&rsquo;m glad I waited, because she is a sweetheart.</p>
<p>She&rsquo;s 3/4 Poodle and the rest is a Jack Russell, which I guess makes her a Jackapoo.
Unfortunately that gave her the cleverness of a Poodle, and the stubbornness of a Jack Russell.</p>
<p>If she doesn&rsquo;t want to do something, no food, toys, or bribery will get her to do it.</p>
<p>We trained her to not bark in the house, but that means she communicates in other ways.
A paw on your arm means she needs something, and you should stop what you are doing.
A ring of the bells at the back door means she needs to head outside for reasons only she knows (normally to chase a cat).</p>
<p>She cocks her leg to pee (which I have been informed is not very ladylike), and she will carry a treat around for days until she&rsquo;s ready to enjoy it.</p>
<p>She bounds onto my stomach when I lie down in bed, just to make sure I give her, and not my phone, attention.</p>
<p>Ada is unique — just like every animal — and I am so glad I have gotten to spend almost six years with her.</p>
<!-- markdownlint-disable MD033 -->


  
  
  
  
  
  
  
  
  <div class="width-patch"></div>
<div id="gallery-6bb303cdad4da5cd52b1d0dedacb81c7" class="gallery">
  
  <img src="/2026/03/6-years-of-ada/IMG_127.jpg" class="grid-w33" title="Ada as a 7 week old puppy" alt="A black puppy with curly hair and a white snout sat on a dog bed" />
  <img src="/2026/03/6-years-of-ada/featured.jpg" class="grid-w33" title="Ada prowling the Corfe Castle Model Village" alt="A small black dog standing next to a row of houses in a model village" />
  <img src="/2026/03/6-years-of-ada/IMG_128.jpg" class="grid-w33" title="Ada at Corfe Castle" alt="A small black dog standing in an opening of a castle wall" />
  <img src="/2026/03/6-years-of-ada/IMG_1546.jpg" class="grid-w33" title="Ada loves nothing more than lounging" alt="A black dog with a white snout resting its head on the arm of an armchair" />
  <img src="/2026/03/6-years-of-ada/IMG_1662.jpg" class="grid-w33" title="Ada the birthday girl" alt="A black dog sitting wearing a pink bib saying birthday girl" />
  <img src="/2026/03/6-years-of-ada/IMG_2159.jpg" class="grid-w33" title="Ada enjoying a trip back from Lands End" alt="A black dog wearing a pink harness with its head out of a car window in motion" />
  <img src="/2026/03/6-years-of-ada/IMG_3774.jpg" class="grid-w33" title="Ada the birthday girl" alt="A black dog sitting on carpet wearing a pink bib saying 'Im two cute'" />
  <img src="/2026/03/6-years-of-ada/IMG_2103.jpg" class="grid-w33" title="Ada being photogenic" alt="A black dog with a white snout and tartan collar"  />
  <img src="/2026/03/6-years-of-ada/IMG_7942.jpg" class="grid-w33" title="Ada enjoying summer on our deck" alt="A black dog wearing a rainbow bib standing on wood decking in the sun" />
</div>

<!-- markdownlint-enable MD033 -->
<p>I hope I get many more.</p>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="pets"/><summary type="html">Today is my first dog Ada&amp;rsquo;s six birthday!</summary></entry><entry><title type="html">Multi-Lock Access</title><link href="https://thega.me.uk/2026/03/multi-lock-access/" rel="alternate" type="text/html" title="Multi-Lock Access"/><published>2026-03-05T00:00:00+00:00</published><updated>2026-03-05T00:13:09+00:00</updated><id>https://thega.me.uk/2026/03/multi-lock-access</id><content type="html" xml:base="https://thega.me.uk/2026/03/multi-lock-access/"><![CDATA[<p>While out walking in the New Forest, I came across a gate which held multiple locks in series.</p>
<p>Initially, I pondered why one would set up such a peculiar arrangement.
Did someone lose the key to the crusty old rusty lock, so they added another newer one?
Why wouldn&rsquo;t they dispose of the chain and replace it with a new one?</p>
<p>Leaving this, admittedly insignificant thing, behind me, I promptly forgot about it for many weeks.</p>
<p>Then, while out walking the dogs, I passed by a block of flats, and what would catch my eye, but a gate locked with multiple locks in series.
One forgotten rusty lock I could explain away, but this was something people were doing intentionally.</p>
<p>Well, I asked around and found out that it is intentional.
And it is far cleverer than I could dream up.</p>
<p>If you told me that I needed to lock up a gate for a block of flats, <em>but</em> every person in the flat needed to be able to unlock it, I would naturally say &ldquo;Use a combination lock, and then tell everyone the number!&rdquo;</p>
<p>But combination locks are easy to &lsquo;brute force&rsquo; you would say.</p>
<p>&ldquo;Use a padlock and give everyone in the flat a key!&rdquo; would be a very reasonable and practical response to this.</p>
<p>However, what if someone loses a key?
Now you have to replace all the keys with a group of people who don&rsquo;t all keep the same hours; making handing out the keys a nightmare.</p>
<p>What if you are the New Forest Park Authority, and you want your key to open any of the gates in the New Forest, but you don&rsquo;t trust others to give them access to every gate, only specific ones?</p>
<p>Well, at this point I would be stumped.
I actually think it would have taken me a long time to think of this solution (which is why I&rsquo;m so impressed).</p>
<p>Let each person attach their own lock, chained in series, into one long lock.
When someone unlocks this &lsquo;chain of locks&rsquo;, they only need their own key.
Need to add someone?
Add another lock!</p>
<p>This is so simple, yet so clever.
And now you know about it too!</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Multiple Locks"
    width="1570"
    height="1158"
    src="/2026/03/multi-lock-access/featured_hu_6427f84bbaddc847.jpg"
    srcset="/2026/03/multi-lock-access/featured_hu_6427f84bbaddc847.jpg 800w, /2026/03/multi-lock-access/featured_hu_b56b071f46dc6484.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/03/multi-lock-access/featured.jpg"><figcaption><a href="https://flickr.com/photos/mikecogh/34827705190" >Multiple Locks</a> flickr photo by <a href="https://flickr.com/people/mikecogh" >mikecogh</a> shared under a <a href="https://creativecommons.org/licenses/by-sa/2.0/" >Creative Commons (BY-SA) license</a></figcaption></figure>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Sometimes I encounter things that are so simple, but so clever, they fill me with wonder.</summary></entry><entry><title type="html">Upgrade Guides are in Fashion Again</title><link href="https://thega.me.uk/2026/02/upgrade-guides-are-in-fashion-again/" rel="alternate" type="text/html" title="Upgrade Guides are in Fashion Again"/><published>2026-02-15T00:00:00+00:00</published><updated>2026-02-15T13:19:15+00:00</updated><id>https://thega.me.uk/2026/02/upgrade-guides-are-in-fashion-again</id><content type="html" xml:base="https://thega.me.uk/2026/02/upgrade-guides-are-in-fashion-again/"><![CDATA[<p>With the rise of LLM-driven development, my previously ignored upgrade guides, finally have someone who reads them.</p>

<h2 class="relative group">Background
    <div id="background" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#background" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Ignoring the anthropomorphization of an LLM — which happens far too much, leading to people assigning accountability to tools, and not themselves — I am quite pleased that all the effort I have put in over my career into clear, concise, and consumable documentation, is paying off.</p>
<p>As I <a href="https://thega.me.uk/2025/02/looking-back-10-years-writing-application-framework-code/" >previously mentioned</a>, I have been building and maintaining an application framework for over a decade now.
Occasionally, there are unavoidable upgrades that need to happen to application code, to move from one version to the next.</p>
<p>The most recent example of this is the migration from Spring Boot 3 to Spring Boot 4 (the foundation on which my framework is based), where multiple breaking changes are part of the upgrade.
This migration has its own <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide" >migration guide</a> which outlines all the breaking changes, but I decided at the same time to bundle in a couple of other breaking changes;
in for a penny, in for a pound.</p>
<p>For this, and changes in the past, I have written a migration guide which is very similar to <a href="https://github.com/snowflakedb/terraform-provider-snowflake/blob/main/MIGRATION_GUIDE.md" >this one by the Snowflake Terraform Team</a>.
I outline any breaking changes, plus I give <code>before</code> and <code>after</code> examples of the code snippets in question.</p>
<p>And, as it turns out, this is an excellent foundation on which to direct LLMs in doing automated upgrades.</p>

<h2 class="relative group">The Prompt
    <div id="the-prompt" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-prompt" aria-label="Anchor">#</a>
    </span>
    
</h2>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Note
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>I am by no means an expert in this, and I am positive that better prompts exist.</p></div></div><p>Here is the prompt I have been using:</p>
<blockquote><p>You are a software engineer responsible for upgrading this Maven application.</p>
<p>The upgrade is described in this document https://github.com/&hellip;/v1_to_v2.md which can be accessed using the GitHub MCP server.</p>
<p>Assume that the &lsquo;JFrog Maven Settings&rsquo; and &lsquo;JFrog Docker Login&rsquo; steps have already been completed by myself.</p>
<p>Undertake the upgrade steps.</p>
<p>Start by running &lsquo;git pull&rsquo; to ensure you have the latest changes from the remote.
Then create a new branch, as described in the migration guide.</p>
<p>If anything is unclear (for example version numbers) then you must ask me for input before making changes.</p>
<p>Do not, under any circumstances, commit any code or push anything to GitHub.</p>
<p>Use version 0.3.2 as the new version of the Java Management Parent pom.</p>
<p>&ldquo;The framework&rdquo; is currently unreleased, and this work is part of our preparations for its release.
Use version 2.0.0-SNAPSHOT as the version of &ldquo;the framework&rdquo;.</p>
</blockquote>
<h2 class="relative group">Breakdown
    <div id="breakdown" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#breakdown" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Let&rsquo;s break down this prompt to see why each section exists.</p>

<h3 class="relative group">Cosplay
    <div id="cosplay" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cosplay" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>You are a software engineer responsible for upgrading this Maven application.</p>
</blockquote><p>I do love having to start every prompt like this.
It makes sense because LLMs are designed to mimic generalists.
Which hat are we supposed to be wearing today?</p>

<h3 class="relative group">The Guide
    <div id="the-guide" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-guide" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>The upgrade is described in this document https://github.com/&hellip;/v1_to_v2.md which can be accessed using the GitHub MCP server.</p>
</blockquote><p>I started with only the first part of this line; telling the LLM where to download the migration guide from.
However, it was hit-and-miss that it would figure out the document was behind my companies Single-Sign-On login for our GitHub enterprise organization.</p>
<p>So I had to encourage it to use the authenticated GitHub MCP server for access to the repository.</p>
<p>Interestingly older models just &lsquo;made up&rsquo; their own migration guide if they couldn&rsquo;t get access, but Claude Sonnet 4.5 does a better job at realizing that it shouldn&rsquo;t freestyle and asks for support.</p>

<h3 class="relative group">Ignore Set-Up
    <div id="ignore-set-up" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ignore-set-up" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>Assume that the &lsquo;JFrog Maven Settings&rsquo; and &lsquo;JFrog Docker Login&rsquo; steps have already been completed by myself.</p>
</blockquote><p>Part of my latest upgrade guide is to switch to a central <a href="https://jfrog.com/" >JFrog</a> artefact repository.
This tells the LLM to skip those steps because it was doing a poor job of realizing they had been done before (maybe because the files in question are outside the repo).</p>
<p>We often upgrade many applications at a time, so these steps are done by the second one we get to.</p>

<h3 class="relative group">Lift Off
    <div id="lift-off" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lift-off" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>Undertake the upgrade steps.</p>
</blockquote><p>Let&rsquo;s do this.</p>

<h3 class="relative group">Revision Control
    <div id="revision-control" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#revision-control" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>Start by running &lsquo;git pull&rsquo; to ensure you have the latest changes from the remote.
Then create a new branch, as described in the migration guide.</p>
</blockquote><p>Now, when working on a repository, an engineer realizes over time that they need to run a <code>git pull</code> before they start working.
But, with me being an Architect now, I am becoming rusty, so I placed these lines in because I kept forgetting to do it.</p>

<h3 class="relative group">Pair Programming
    <div id="pair-programming" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pair-programming" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>If anything is unclear (for example version numbers) then you must ask me for input before making changes.</p>
</blockquote><p>I have spent many credits where an LLM has just spiralled off, making assumptions instead of doing what a Junior Engineer would do, and ask for clarification.</p>
<blockquote><p>Do not, under any circumstances, commit any code or push anything to GitHub.</p>
</blockquote><p>I still do not trust VS Code, and it&rsquo;s command allow-list functionality.
This is mostly here so that I can pretend I&rsquo;m not to blame (see my intro).</p>

<h3 class="relative group">Versions
    <div id="versions" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#versions" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>Use version 0.3.2 as the new version of the Java Management Parent pom.</p>
<p>&ldquo;The framework&rdquo; is currently unreleased, and this work is part of our preparations for its release.
Use version 2.0.0-SNAPSHOT as the version of &ldquo;the framework&rdquo;.</p>
</blockquote><p>And the final part, as I go through upgrading applications, I place the versions of released/unreleased libraries here.</p>
<p>Claude Sonnet 4.5 does a good job of checking for updated versions — assuming your upgrade guide links to where new versions can be found — and stopping to ask when it cannot determine what version to use.</p>
<p>This block just streamlines the process.</p>
<p>I also added the &rsquo;this work is part of our preparations for its release&rsquo; to stop Claude asking if I was sure I wanted to use a SNAPSHOT (unreleased) version.</p>

<h2 class="relative group">Documentation
    <div id="documentation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#documentation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I&rsquo;ve known for years that barely any of the engineers I work with actually read these upgrade guides.
If they do, they mostly skim them, missing important details.</p>
<p>I am wholly, and have always been, firmly in the camp of comments and documentation being mandatory.
This has frequently made me quite unpopular, mostly with junior engineers.
The idea that you will remember your code, and &lsquo;jump back in&rsquo; was always (in my opinion) a dumb one.</p>
<blockquote><p>Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.</p>
<p>— John F. Woods</p>
</blockquote><p>I find it quite amusing that these widely dismissed artefacts have now found another home and have &lsquo;become useful again&rsquo;.
I hope that rise of LLMs has put to bed the idea that code is &lsquo;self describing&rsquo;; that comments in code and documentation are a &lsquo;waste of time&rsquo; (but I won&rsquo;t hold my breath).</p>
<p>Without these comments, and these documents, I frequently see an LLM smashing a rock against a coconut in an attempt to get anything to work.
The upgrade guides keep it on track about what might actually be the issue.</p>
<p>I personally still refuse to let LLMs write the documentation and upgrade guides for me, beyond prompting as to what sections would be useful.
LLM generated documentation is lifeless and frequently rambling, and I still get frequent comments that my writing style is engaging and concise.</p>
<p>Sure, you could run an LLM over all of these blogs and reproduce my writing style very closely, but I maintain that if someone couldn&rsquo;t be bothered to write it, why should I read it.</p>
<p>Maybe the future we are heading for is one where the vast <a href="https://www.independent.co.uk/tech/ai-author-books-amazon-chatgpt-b2287111.html" >majority of documentation</a> is all made by LLMs, read by LLMs, and we are finally reduced to being the consumers of summaries alone.</p>
<p>I hope not.</p>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="ai"/><category term="engineering"/><summary type="html">With the rise of LLM-driven development, my previously ignored upgrade guides, finally have someone who reads them.</summary></entry><entry><title type="html">One Too Many Series</title><link href="https://thega.me.uk/2026/02/one-too-many-series/" rel="alternate" type="text/html" title="One Too Many Series"/><published>2026-02-01T16:38:39+00:00</published><updated>2026-02-01T21:32:31+00:00</updated><id>https://thega.me.uk/2026/02/one-too-many-series</id><content type="html" xml:base="https://thega.me.uk/2026/02/one-too-many-series/"><![CDATA[<p>I just finished Season 3 of <a href="https://en.wikipedia.org/wiki/War_of_the_Worlds_%282019_TV_series%29" >War of the Worlds (2019)</a>, and I wish I had stopped at Season 2.</p>
<p>Not to be confused with the <a href="https://en.wikipedia.org/wiki/The_War_of_the_Worlds_%28British_TV_series%29" >BBC Miniseries</a> which originally aired on the 17<sup>th</sup> November 2019, <em>War of the Worlds (2019)</em> is a completely different thing, originally aired on the 28<sup>th</sup> October 2019; a mere 20 days earlier.</p>
<p>Have we done enough <em>War of the Worlds</em> yet?
Can we mark this as complete?
Did we win?</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          So many spoilers
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>If you want to watch the War of the Worlds, Lost, Into the Night, or the Walking Dead, don&rsquo;t read this.
It is going to contain a lot of spoilers.</p></div></div>
<h2 class="relative group">War of the what?
    <div id="war-of-the-what" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#war-of-the-what" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p><em>War of the Worlds (2019)</em> is a pretty interesting take on the original story from <a href="https://en.wikipedia.org/wiki/The_War_of_the_Worlds" >H. G. Wells</a>.
Instead of slippery, tentacled Martians being the ones that want to harvest us for our delicious blood, this adaption replaces the enemy with something far worse.
Humanities ultimate enemy.</p>
<p>Itself.</p>
<p>I know what you are thinking, doesn&rsquo;t this kinda make the whole title wrong because there are not multiple worlds fighting with one another?
Yes, but also no, because these Humans are from another planet, but they were from our planet originally.
Let me explain.</p>
<p>At some point two of our main characters, Emily and Sascha, leave planet Earth to go be &lsquo;Adam and Eve&rsquo; on another planet.
They do this by flying there in a super advanced spaceship (I will get back to this later).
Once there, they create a whole world of rather sickly humans who all inherited Sascha&rsquo;s Muscular Dystrophy and Emily&rsquo;s unnamed degenerative genetic condition which results in blindness.
Sascha also happens to be a massive sociopath who tells all of his flock that everyone back on earth is to blame for their situation.
This eventually leads to them invading earth to take back what should be theirs.
They do this using the aforementioned super advanced spaceship to go back in time six months before Emily and Sascha left, to wipe out all the people on Earth.</p>
<p>Confused yet?
I hope you liked <a href="https://en.wikipedia.org/wiki/Back_to_the_Future" >Back to the Future</a>, because this plot <em>heavily</em> relies on time-travel, and doesn&rsquo;t like you thinking about it too hard.</p>
<p>You know, now I&rsquo;m writing this plot down, it seems worse than when I was watching it.</p>
<p>Remember the cool tripod Martian ships from other adaptations?
Nope, none of that here please.
Those tripods were replaced with <a href="https://nypost.com/2020/04/02/how-those-creepy-war-of-the-worlds-aliens-came-to-life-on-epix/" >Boston Dynamics-like</a> robot dogs which hunt down survivors.</p>
<p>So we don&rsquo;t have alien tripods, and we don&rsquo;t actually have aliens.
What are we left with?
Surely something is faithful to the original book?</p>
<p>Really, the only thing that is semi-faithful is that the &lsquo;Aliens&rsquo; need our blood/organs, to cure their shopping list of ailments.
That, and they used overwhelming force and technological superiority when invading.</p>
<p>Anyway, one of the main characters, Bill, spurred on by everyone he knows and loved dying, develops a pathogen which will only target the &lsquo;Aliens&rsquo;.
He infects Emily, but before she can infect others, both her and Sascha are shoved into a ship and sent into space.
Bringing us right back to the start of our time-loop.</p>
<p>Stop it.
Don&rsquo;t think about where all the technology came from in the first place.
It&rsquo;s not that kind of show.</p>
<p>Bill, realizing that he just set into motion the event that will come back to start this whole pesky invasion, travels further back in time to push Emily off a roof.</p>
<p>Aaand, Scene.</p>

<h2 class="relative group">Something was good, right?
    <div id="something-was-good-right" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#something-was-good-right" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Despite being as close to the source material as the <a href="https://en.wikipedia.org/wiki/Artemis_Fowl_%28film%29" >Artemis Fowl film</a> was to the original books, I really enjoyed the <strong>first two</strong> seasons of <em>War of the Worlds (2019)</em>.</p>
<p>The Science-Fiction aspect of it was great.</p>
<p>The show started off well with the &lsquo;Aliens&rsquo; using a signal that disrupts human brainwaves, resulting in 99% of the worlds&rsquo; population dropping dead where they stood.
It felt suitably tense, and well explained, without making the &lsquo;science&rsquo; sound implausible.</p>
<p>The explanations of how the &lsquo;Aliens&rsquo; just appeared near Earth by bending space and time, using quantum something-something to travel the vast distances, landed well.
I&rsquo;m going to ignore how dumb it was that being able to shift dozens of building-size ships from a neighbouring star system, to earth, is something that gives a huge power advantage, for the &lsquo;Aliens&rsquo; to never use it again.</p>
<p>The CGI on the robot dogs was convincing, and nothing brought me out of it to start asking questions.
If we ignore the fact that these dogs can occasionally act like elite-level snipers, but forget they have a gun when main characters are wandering around with their plot-armour hanging out, the dogs looked cool.</p>
<p>The locations used for filming had a nice breadth to them, from abandoned London, to the French Alps.
None of the filming felt overly dark, and the pacing was good.</p>
<p>I have to give a shout-out to the actor of Sascha, Mathieu Torloting, who did such a good job of playing a sociopath, that he genuinely made me hate him.</p>
<p>One final thing that stood out to me, was how non-American it was.
American television often refuses to depict the death of children, or if it does, handles it off-screen.
<em>War of the Worlds (2019)</em> did not shy away from this (and other gritty topics).
It makes sense, an &lsquo;Alien&rsquo; race is wiping out humanity, why would they stop at the teenagers?</p>

<h2 class="relative group">Room for improvement
    <div id="room-for-improvement" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#room-for-improvement" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>This was apparently Science-Fiction.
So maybe we could arm the &lsquo;quantum bending Aliens&rsquo; with something more than a regular rifle?
These &lsquo;Aliens&rsquo; can instantaneously jump between star systems and create a sound that causes people to die on the spot, do we really only get guns versus guns?
I was in the market for something more futuristic than a <em>&lsquo;clever dog with a gun on it&rsquo;</em>.</p>
<p>One of my &lsquo;hated film tropes&rsquo; in apocalypse films, is the band of survivors keeping someone around, even though they know that person is a complete liability.
Another being &lsquo;failure to communicate&rsquo;.</p>
<p>Multiple times throughout the <strong>first two</strong> seasons the main characters of Emily and Sascha either don&rsquo;t disclose important information, or are downright dangerous to the others in the group, but we keep them around.
At least if you don&rsquo;t want to get rid of them, keep an eye on them.
Christ.</p>
<p>This resulted in multiple needless deaths which grated after a while.</p>
<p>Finally, I might be the only person that noticed that they filmed the same parking garage location for somewhere in Northern France, and in Central London.</p>

<h2 class="relative group">Overstay your welcome
    <div id="overstay-your-welcome" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#overstay-your-welcome" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So, to the whole point of this blog.
Personally I think that <em>War of the Worlds (2019)</em> went the same way as <a href="https://en.wikipedia.org/wiki/Lost_%28TV_series%29" >Lost</a>, <a href="https://en.wikipedia.org/wiki/Into_the_Night_%28TV_series%29" >Into the Night</a>, and <a href="https://en.wikipedia.org/wiki/The_Walking_Dead_%28TV_series%29" >The Walking Dead</a> before it.</p>
<p>It lost its way, and it went on too long.</p>

<h3 class="relative group">Lost Out
    <div id="lost-out" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lost-out" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p><em>Lost</em> — a show which holds the most &lsquo;why was there a polar bear&rsquo; awards — was fantastic.
A plane crashes on an island in the middle of the ocean, and the survivors have to learn to work together to <del>survive</del> not die.
But wait, some weird stuff is happening on the island.</p>
<p>Mysterious.</p>
<p>Lost should have called it when the main characters got back home in Season 4.
It would have been a perfect ending, but never let a good ending stop your studios&rsquo; revenue stream.
Two more seasons followed, where the main cast <em>go back</em> to the island and then more mad stuff happens, eventually painting itself into such a chaotic corner it had to play the &rsquo;they were all actually dead the whole time&rsquo; card.</p>
<p>I warned you there would be spoilers, and it was the last two seasons of <em>Lost</em> that spoiled the previous four.</p>

<h3 class="relative group">Into the Bin
    <div id="into-the-bin" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#into-the-bin" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p><em>Into the Night</em> has a perfect premise.
When the sun suddenly starts killing people instantly, passengers on an overnight flight from Brussels attempt to survive by flying into the night.</p>
<p>Season 1 was a claustrophobic, almost one-room, mesmerizing piece of storytelling.
Action takes place on the plane, the only pilot falls ill, other passengers go crazy.
They have to land to refuel.
It&rsquo;s a race against time.
Life as they know it is over, but they try to contact other survivors regardless.</p>
<p>The season ends with them finding a military bunker.
Story over; the interesting premise of them flying a plane around the planet complete.</p>
<p>But wait, Season 2 arrives.
The unique concept of the Sun and the plane is replaced with humans fighting each other for control of the bunker.
The military faction vs the survivors of the plane.
Now it&rsquo;s just a high school drama where people can&rsquo;t go outside for half the day.</p>

<h3 class="relative group">The Walking Away
    <div id="the-walking-away" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-walking-away" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>And the last example I have.
<em>The Walking Dead</em>.</p>
<p><em>The Walking Dead</em> has to be the most perfect example of what <em>War of the Worlds (2019)</em> suffered from.
A zombie apocalypse.
Fear.
Scarcity.
An overall sense of hopelessness.
I couldn&rsquo;t get enough of this world that Season 1 constructed.
<em>The Walking Dead</em> made zombies scary.</p>
<p>But then somewhere in Season 4 or 5, it turned from a harrowing zombie show, to Eastenders with the undead.
The final straw was Season 7, Episode 1, where a new villain brutally murders Glenn, a long-running main character.
What made <em>The Walking Dead</em> interesting <strong>for me</strong> was the world, the scenery, the challenges, and most importantly, the zombies.</p>
<p>What I did not care about, was people fighting people.
It&rsquo;s a fine line in apocalyptic media, because ultimately it always turns out that the greatest enemy is just other people doing terrible things.
But as that barbed-wire covered baseball bat was caving in Glenn&rsquo;s head, I realized that the see-saw of interesting world building and &lsquo;bad people do bad things&rsquo; had tipped to far in the wrong direction to keep my attention, and I was out.</p>

<h2 class="relative group">Season 3
    <div id="season-3" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#season-3" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>You&rsquo;ve probably guessed what my annoyance with Season 3 of <em>War of the Worlds (2019)</em> is by now.</p>
<p>If you remember, at the end of Season 2, Bill goes back in time to push Emily off of a roof; breaking the time loop forever.
This is a great ending.
The &lsquo;alien&rsquo; invasion is over, and the main characters are back in the past, before the attack.
The attack no longer happens.</p>
<p>Where could you possibly go from there?</p>
<p>Well, what if a black hole the size of Europe (that we failed to mention at the end of Season 2) appears above the planet, Bill goes to prison, and the &lsquo;aliens&rsquo; manage to travel back in time too and want to destroy the planet again?
Sound good?</p>
<p>Everything that made the first two seasons good — the haunting emptiness of an abandoned world and a technically superior enemy who never sleeps — is replaced by the setting of a departure lounge crime novel.
Hours spent watching the protagonists evading the Metropolitan Police are hours of my life I want back.</p>
<p>It&rsquo;s like the sequel for <a href="https://en.wikipedia.org/wiki/The_NeverEnding_Story_%28film%29" >The NeverEnding Story</a> is Bastian trying to figure out how to make Falcors death tax-deductible.</p>
<p>What if <a href="https://en.wikipedia.org/wiki/Die_Hard" >Die Hard</a> 2 was just John McClane trying to get his health insurance to pay for the operation that will remove the glass lodged in his feet?</p>
<p>Once the series has diverted from the main themes that drew me to it, it&rsquo;s dead to me.
Maybe there is room in the market for a TV recommendation site that just tells you when to stop watching.</p>

<h2 class="relative group">Believe
    <div id="believe" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#believe" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Look, Season 3 of <em>War of the Worlds (2019)</em> was not as bad as some things I&rsquo;ve seen lately<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, and I know a lot of peoples time and effort went into it.
I&rsquo;m also aware that overstaying ones welcome has been a thing forever; we all remember Red Dwarf after they brought everyone back to life, right?</p>
<p>Maybe it&rsquo;s just me and I need to learn to cut my losses earlier.</p>
<p>Last year I binge-watched <a href="https://en.wikipedia.org/wiki/Ted_Lasso" >Ted Lasso</a> and I loved every episode.
Season 4 is coming out soon, and I hope it doesn&rsquo;t make the mistake of drawing out something special for too long.</p>
<p>One of the leading actors, Hannah Waddingham, described its reprisal, after the astonishingly perfect ending of Season 3, as a <a href="https://www.glamourmagazine.co.uk/article/ted-lasso-season-4-cast-plot-trailer" >&ldquo;beloved dog that was buried, and now we&rsquo;ve exhumed it&rdquo;</a>.</p>
<figure class="items-center mx-auto" style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Ted Lasso pointing at a sign reading &lsquo;Believe&rsquo;"
    width="759"
    height="670"
    src="/2026/02/one-too-many-series/believe.png"
    srcset="/2026/02/one-too-many-series/believe.png 800w, /2026/02/one-too-many-series/believe.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/02/one-too-many-series/believe.png"></figure>
<p>Maybe I just shouldn&rsquo;t watch it.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>It&rsquo;s hard to top how terrible <a href="https://en.wikipedia.org/wiki/Rebel_Moon" >Rebel Moon</a> was.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="television"/><category term="reviews"/><summary type="html">I just finished Season 3 of War of the Worlds (2019), and I wish I had stopped at Season 2.</summary></entry><entry><title type="html">My Game of the Year - Split Fiction</title><link href="https://thega.me.uk/2026/01/my-game-of-the-year-split-fiction/" rel="alternate" type="text/html" title="My Game of the Year - Split Fiction"/><published>2026-01-03T14:06:00+00:00</published><updated>2026-01-03T14:10:15+00:00</updated><id>https://thega.me.uk/2026/01/my-game-of-the-year-split-fiction</id><content type="html" xml:base="https://thega.me.uk/2026/01/my-game-of-the-year-split-fiction/"><![CDATA[<p>In the waning light of 2025, December 31<sup>st</sup>, I finished <a href="https://en.wikipedia.org/wiki/Split_Fiction" >Split Fiction</a>.
It stole the easily won &ldquo;Phill&rsquo;s Game of the Year&rdquo; award.</p>

<h2 class="relative group">It Took Two
    <div id="it-took-two" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#it-took-two" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Back in 2023, <a href="https://neebsflix.com/about-us" >Neebs Gaming</a> — the best gaming channel in the world — started a playthrough of <a href="https://en.wikipedia.org/wiki/It_Takes_Two_%28video_game%29" ><em>It Takes Two</em></a>.</p>
<lite-youtube videoid="1BCZU7g_y7k" playlabel="1BCZU7g_y7k" params=""></lite-youtube>

<p>It looked really fun, so I enlisted my partner Loz to play it with me.
The game is called <em>It Takes Two</em> partially because it actually takes two people to play it.</p>
<p>As a split-screen cooperative game, it requires every puzzle in the game to be solved by both players working together.
For example, one player controlling platforms for the other to jump across.
Throughout the game, each player gets special abilities which are required to solve parts of the puzzle.
This means that if one of you sucks, you cannot progress.</p>
<p>This may seem annoying, but it gives the two of you a huge sense of team accomplishment.</p>
<p>The game keeps the mechanic fresh by changing the special abilities, and by extension the game mechanics, frequently.
One second you go from being able to change your size — small to fit through small gaps and large to move heavy objects — to being able to control time with a magical stopwatch.</p>
<p>These changes are expertly woven into the rich story that ties it all together, and never feels disjointed.
Each environment that you get to explore has fun little mini-games that allow you to take a break from the main story; want to see which of you is the better button-masher?
Time for some tug of war.</p>
<p>I felt sad when we finished, not just because the main story itself is sad, but because Loz and I didn&rsquo;t have anything else to play together, as a team.</p>
<p>After leaving a two player co-operative puzzle game sized-hole in my heart, I moved on from <em>It Takes Two</em>.</p>

<h2 class="relative group">Split Fiction
    <div id="split-fiction" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#split-fiction" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Then, in 2025, the creators of <em>It Takes Two</em> (<a href="https://en.wikipedia.org/wiki/Hazelight_Studios" ><em>Hazelight Studios</em></a>) released <em>Split Fiction</em>.</p>
<lite-youtube videoid="es6YsZUxLpE" playlabel="es6YsZUxLpE" params=""></lite-youtube>

<p>Another split-screen, co-operative puzzle game?<br>
Unique and interesting mechanics which change throughout the game?<br>
Requiring collaboration in order to progress?<br>
Rich storyline woven throughout?<br>
Sci-Fi <em>and</em> Fantasy themed?</p>
<figure class="items-center mx-auto" style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Vince McMahon Reaction meme"
    width="490"
    height="680"
    src="/2026/01/my-game-of-the-year-split-fiction/vince_mcmahon_reaction_meme.png"
    srcset="/2026/01/my-game-of-the-year-split-fiction/vince_mcmahon_reaction_meme.png 800w, /2026/01/my-game-of-the-year-split-fiction/vince_mcmahon_reaction_meme.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2026/01/my-game-of-the-year-split-fiction/vince_mcmahon_reaction_meme.png"></figure>
<p>If there is one genre I am in love with, it is Sci-Fi.
And if there is one genre my partner is in love with, it is Fantasy.
This game was surely made for us.</p>
<p>After just having finished the game, I can confidently say that <em>Split Fiction</em> took the game mechanics from <em>It Takes Two</em>, and turned them all the way <a href="https://en.wikipedia.org/wiki/Up_to_eleven" >up to 11</a>.</p>
<p>The premise of the game is that you play as two authors who get thrust into their own stories when they are trapped in a machine designed to steal their creative ideas.
Zoe writes fantasy, and Mio writes Sci-Fi.
In your attempts to escape, you travel through each &rsquo;level&rsquo; solving puzzles.
Levels alternate between the two genres, the mechanics change between them, and there are lots of fun side-missions<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, helping the game stay fresh.</p>
<p>As far as games go, it is not massively challenging, but that doesn&rsquo;t matter.
The game is more about the time spent working as a team with your friend; getting a sense of shared accomplishment.</p>
<p>This game is visually outstanding and so much fun, but the thing that sets it above anything I have played recently was the gameplay.
The last couple of levels had me shouting &ldquo;this is such good level design&rdquo; again and again.
Just when we had settled into the idea of a final boss-fight, to mirror the others, the game completely changed the dynamic on us<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>The sound design for <em>Split Fiction</em> can&rsquo;t be overstated either.
One of my annoyances with <em>It Takes Two</em> was that the quirky interjections from the two characters got a bit grating after a while.
<em>Split Fiction</em> managed to avoid this, but I can&rsquo;t quite put my finger on how.
The main characters still interject, and there are plenty of cutscenes, but it feels more natural, less forced.
Their contributions often supported the player, by explaining a puzzle mechanic, or giving a hint.</p>
<p>One of the final sequences featured some of the best orchestral music I have heard in a game for a long time.
In a true &ldquo;all is lost&rdquo; moment, the composer <em>Jonatan Järpehag</em> did a perfect job of capturing my emotions<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> whilst I still concentrated on not dying in the game.</p>
<p>One final thing I want to praise about <em>Split Fiction</em> is the &lsquo;friends pass&rsquo;.</p>
<blockquote><p>Invite a friend to play for free online using the Friend&rsquo;s Pass.
As long as one of you owns the game, both of you can play!</p>
<p>— <a href="https://www.ea.com/games/split-fiction/split-fiction/features/friends-pass" >Split Fiction Official Website</a></p>
</blockquote><p>Sure, you could argue that this is pretty much mandatory for a co-operative game that <em>literally</em> cannot be played without a second person, but it was nice to see.
EA could have decided to extract more money from players, but they didn&rsquo;t.
In a modern world where everything seems like it&rsquo;s designed to take the most money from you, this was a welcome relief.</p>
<p>So, I think it&rsquo;s pretty clear that <em>Split Fiction</em> is a solid 10/10 game for me.
If you don&rsquo;t have a friend to play it with, then this is going to be a tough sell.
If you hate games which keep changing the mechanics on you, just when you got used to them, then this might not be the game for you.</p>
<p>But, if you love a great story, fun puzzles, and impressive visuals, then I cannot recommend <em>Split Fiction</em> enough.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>You wanted to play as a Pig that can double jump by farting sparkles, right?&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Unfortunately, I don&rsquo;t want to spoil it for you, so I can&rsquo;t explain it much more than that.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://www.youtube.com/watch?v=8rESEZGJlaw&amp;t=80s" >Here&rsquo;s a link</a> if you want to listen to it yourself.
It had real &lsquo;Simba watching his father die&rsquo; vibes.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="video games"/><category term="reviews"/><summary type="html">In the waning light of 2025, December 31st, I finished Split Fiction. It stole the easily won &amp;ldquo;Phill&amp;rsquo;s Game of the Year&amp;rdquo; award.</summary></entry><entry><title type="html">A Year in Review - 2025 - Books</title><link href="https://thega.me.uk/2025/12/a-year-in-review-2025-books/" rel="alternate" type="text/html" title="A Year in Review - 2025 - Books"/><published>2025-12-28T13:48:00+00:00</published><updated>2025-12-28T13:48:47+00:00</updated><id>https://thega.me.uk/2025/12/a-year-in-review-2025-books</id><content type="html" xml:base="https://thega.me.uk/2025/12/a-year-in-review-2025-books/"><![CDATA[<p>This year, I set myself a goal to try and double(ish) the amount of books I read, aiming for a total of 24 books which is 10 more than last year.
I thought it would be nice to share with you what books stood out, and which books might be worth skipping.</p>
<p>Now, 24 books is not a massive amount — my other half has read 65 books this year — but when I read that <a href="https://yougov.co.uk/entertainment/articles/51730-40-of-britons-havent-read-a-single-book-in-the-last-12-months" >the median Briton has read just three books in the past year</a>, I felt vindicated in my modest goal.</p>
<p>Since giving up on reading physical books (more on that later), I&rsquo;ve found it much easier to read.
I am especially productive when travelling to/from London on the train, for work, where I can read uninterrupted for a solid hour and a half each way.</p>
<p>Let&rsquo;s get stuck in!</p>

<h2 class="relative group">The Data
    <div id="the-data" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-data" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>The statistics below are all pulled from my profile on &lsquo;The StoryGraph&rsquo;, which I use instead of supporting the <a href="https://www.huffingtonpost.co.uk/entry/storygraph-amazon-goodreads-jeff-bezos_l_673e2013e4b0f17b35e0a123" >Amazon monopoly that is Goodreads</a>.</p>

<h3 class="relative group">Exploring new genres
    <div id="exploring-new-genres" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#exploring-new-genres" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>This year I set out with a goal to read things that were not Science Fiction.
The last decade or so, I got stuck in a serious Military Science Fiction rut, reading book series after book series of similar themes.</p>
<p>How did I manage to do this?
Well, I just read whatever my other half suggested to me, like my own personal book recommendation system.
They read so many books, from so many authors, that the paltry amount I read was easy to accommodate.</p>

<div class="chart">
  <canvas id="chart-289c032bc0821b41e0d9449e7c3469ca"></canvas>
  <script type="text/javascript">
    window.addEventListener("DOMContentLoaded", (event) => {
      const ctx = document.getElementById("chart-289c032bc0821b41e0d9449e7c3469ca");
      const chart = new Chart(ctx, {
        
  type: 'bar',
  data: {
    labels: ['Fantasy', 'Science Fiction', 'Romance', 'LGBTQIA+', 'Classics', 'Contemporary', 'Young Adult', 'Mystery', 'Crime', 'Middle Grade', 'Speculative Fiction', 'Dystopian', 'Childrens', 'Literary', 'Horror'],
    datasets: [{
      label: '2024',
      data: [5, 13, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0],
      borderColor: 'rgba(255, 99, 132, 0.7)',
      backgroundColor: 'rgba(255, 99, 132, 0.7)'
    },{
      label: '2025',
      data: [13, 8, 7, 5, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1],
    }]
  },
  options: {
    aspectRatio: 1,
    indexAxis: 'y',
    scales: {
      'y': {
        ticks: {
          autoSkip: false
        }
      },
      'x': {
        title: {
          text: '# of books',
          display: true
        }
      }
    }
  }

      });
    });
  </script>
</div>

<p>As you can see from the chart above, although Science Fiction is still well represented, Fantasy has taken the crown this year.</p>
<p>Before 2025, I had never read a Romance novel (unless it was packaged inside a story where aliens were also shooting at people), so to see it as my third most read genre this year is quite surprising.
I&rsquo;ll do a breakdown of my best and worst books, but Romance featured heavily in the books that most affected me this year.</p>
<p>I will note that some books are on the category list multiple times if it has multiple overlapping genres, e.g. <em>Winter&rsquo;s Orbit</em> is both LGBTQIA+ and Romance.
The Lion, the Witch and the Wardrobe is a &lsquo;childrens&rsquo;, &lsquo;classics&rsquo;, &lsquo;fantasy&rsquo;, and &lsquo;middle grade&rsquo;, which seems a bit silly, so it&rsquo;s over-represented in the chart.</p>

<h3 class="relative group">Monthly reading habits
    <div id="monthly-reading-habits" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#monthly-reading-habits" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>One of the things I wanted to improve this year was my consistency in reading.
In previous years, I would read a lot in bursts, then go months without picking up a book.</p>
<p>This can be seen in the chart below, where in 2024 I read a lot in January and November, but very little in between.
This could probably be overlaid with a graph of my work stress levels, as I tend to read more when I&rsquo;m less stressed.</p>

<div class="chart">
  <canvas id="chart-0fe02c18f00923f7f1e4c0b9139fad44"></canvas>
  <script type="text/javascript">
    window.addEventListener("DOMContentLoaded", (event) => {
      const ctx = document.getElementById("chart-0fe02c18f00923f7f1e4c0b9139fad44");
      const chart = new Chart(ctx, {
        
  type: 'line',
  data: {
    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    datasets: [{
      label: '2024',
      data: [2, 0, 1, 0, 0, 0, 0, 1, 0, 2, 6, 3],
      tension: 0.4,
      borderColor: 'rgba(255, 99, 132, 0.7)',
      backgroundColor: 'rgba(255, 99, 132, 0.7)'
    },{
      label: '2025',
      data: [6, 2, 2, 2, 0, 2, 1, 1, 2, 2, 4],
      tension: 0.4
    }]
  },
  options: {
    scales: {
      y: {
        title: {
          text: '# of books',
          display: true
        }
      }
    }
  }

      });
    });
  </script>
</div>

<p>But this year, I managed to read far more consistently, with at least one book read in every month except May.
But when we take into account the number of pages read, we can still see that I was reading, just not finishing books, in May.</p>

<div class="chart">
  <canvas id="chart-ed98ed04c102f4fe899569baf0d9dc25"></canvas>
  <script type="text/javascript">
    window.addEventListener("DOMContentLoaded", (event) => {
      const ctx = document.getElementById("chart-ed98ed04c102f4fe899569baf0d9dc25");
      const chart = new Chart(ctx, {
        
  data: {
    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    datasets: [{
      type: 'line',
      yAxisID: 'first',
      label: '# of books',
      data: [6, 2, 2, 2, 0, 2, 1, 1, 2, 2, 4],
      tension: 0.4,
      borderDash: [4, 4],
      borderColor: 'rgba(255, 99, 132, 0.7)',
      backgroundColor: 'rgba(255, 99, 132, 0.7)'
    },{
      type: 'bar',
      yAxisID: 'second',
      label: '# of pages',
      data: [2530, 862, 1141, 430, 209, 541, 544, 121, 745, 1033, 1115]
    }]
  },
  options: {
    scales: {
      first: {
        title: {
          text: '# of books',
          display: true
        }
      },
      second: {
        title: {
          text: '# of pages',
          display: true
        },
        position: 'right'
      }
    }
  }

      });
    });
  </script>
</div>

<p>I&rsquo;m pretty happy with the improvement.
I think the biggest change we can see is when I bought a <a href="https://uk.kobobooks.com/collections/ereaders/products/kobo-clara-bw" >Kobo Clara</a> eReader in October 2024.
As I mentioned earlier, switching away from physical books has made reading much easier for me.
The Kobo fits into one of my trouser pockets, so I can carry it everywhere (amazing when you get stuck in A&amp;E unexpectedly for 6 hours), and the battery lasts for weeks, so I never have to worry about charging it.
Reading in bed was always a struggle with physical books, as my eyes are not what they used to be, so the adjustable backlight on the Kobo has made a huge difference.</p>

<h3 class="relative group">Ratings breakdown
    <div id="ratings-breakdown" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ratings-breakdown" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Finally, let&rsquo;s look at how I rated the books I read this year.</p>

<div class="chart">
  <canvas id="chart-6ba49b7c0d319dc15b946ad178f6e304"></canvas>
  <script type="text/javascript">
    window.addEventListener("DOMContentLoaded", (event) => {
      const ctx = document.getElementById("chart-6ba49b7c0d319dc15b946ad178f6e304");
      const chart = new Chart(ctx, {
        
  type: 'bar',
  data: {
    labels: ['3.25 ⭐', '3.5 ⭐', '3.75 ⭐', '4.0 ⭐', '4.25 ⭐', '4.5 ⭐', '4.75 ⭐', '5.0 ⭐'],
    datasets: [{
      data: [2, 1, 5, 3, 6, 2, 3, 2]
    }]
  },
  options: {
    plugins: {
      legend: {
        display: false
      }
    },
    scales: {
      'y': {
        title: {
          text: '# of books',
          display: true
        }
      }
    }
  }

      });
    });
  </script>
</div>

<p>Not much to learn here, apart from that I don&rsquo;t read books that have less than a 3.25 star rating.
These sorts of books would be ones I would DNF (Did Not Finish) part way through, and I don&rsquo;t count those in my reading stats.</p>
<p>2025 was very odd in that I didn&rsquo;t have any books that I did not finish, which is quite unusual for me.
This is probably because I pre-filtered books through my other half&rsquo;s recommendation algorithm, so I was less likely to pick up something I wouldn&rsquo;t enjoy.</p>

<h2 class="relative group">The books of 2025
    <div id="the-books-of-2025" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-books-of-2025" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So let&rsquo;s go through the books I read this year, grouped by how they made me feel.
I think I have been quite harsh to some of these books, but I wanted to try and be objective about a book&rsquo;s impact on me, rather than just my enjoyment of them.
A book might get a high rating, and be well written and enjoyed by the wider public, but if it was just a generic throwaway read for me, then I might forget about it quickly.</p>
<p>So we have four categories:</p>
<ol>
<li>The ones that changed me — books that really stuck with me, made me think, or emotionally affected me
I will not stop talking about these books unprompted.</li>
<li>The ones that stood out — books that were enjoyable and memorable.
I will recommend them to others.</li>
<li>The ones I forgot about — books that were fine, but I can&rsquo;t really remember much about them now.
I probably wouldn&rsquo;t recommend them to others because they were forgettable.</li>
<li>The others — books that were just okay.
A bit of a mixed bag, but nothing really special.</li>
</ol>
<p>If by some tiny, infinitesimal, microscopic chance, one of the authors of these books is reading this, please don&rsquo;t be offended by my categorization.
Your book might just not have resonated with me personally, or I might have been in a different head space when I read it.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Spoilers Ahead
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>It goes without saying, there are mild spoilers ahead for some of these books.
I&rsquo;m not going to tell you plot points, but if there is a twist, I&rsquo;m probably going to mention it.</p></div></div>
<h3 class="relative group">The ones that changed me
    <div id="the-ones-that-changed-me" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-ones-that-changed-me" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Every one of these books was incredible.<br>
Every one of them made me cry.<br>
Every one of them made me feel deeply about the characters in them.</p>
<table>
  <thead>
      <tr>
          <th>Title</th>
          <th>Author</th>
          <th>Rating</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/8726284c-0f7d-467e-bc40-11451cafa96f" target="_blank" rel="noreferrer">The Night Circus</a></td>
          <td>Erin Morgenstern</td>
          <td>5.0</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/a1a9c8b1-42b1-40f4-91fe-378f1cd68fcf" target="_blank" rel="noreferrer">The Last Tale of the Flower Bride</a></td>
          <td>Roshani Chokshi</td>
          <td>5.0</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/dbe65ae4-acbe-430e-9e54-5f595986464f" target="_blank" rel="noreferrer">The Undertaking of Hart and Mercy</a></td>
          <td>Megan Bannen</td>
          <td>4.5</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/7d122924-9f42-4cbd-8d2c-dfb715a8bea7" target="_blank" rel="noreferrer">The Very Secret Society of Irregular Witches</a></td>
          <td>Sangu Mandanna</td>
          <td>4.25</td>
      </tr>
  </tbody>
</table>

<h4 class="relative group">The Night Circus
    <div id="the-night-circus" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-night-circus" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Starting with my absolute favourite book of maybe all time, <em>The Night Circus</em> by Erin Morgenstern.
Although the way the book is written felt a bit disjointed with all the converging timelines, the atmosphere, the characters, the build up to the final act, more than made up for it.
Erin Morgenstern nails the world building and the magic of each of the circus tents, making each of them feel unique and special.</p>
<p>In some ways I wish I could read it again without knowing the ending, just to experience the wonder of it all again.
Five out of five stars somehow felt too low for this book.</p>
<p>But its main reason for being in this category is how it made me feel like I was part of a multi-level marketing scheme.
I <em>had</em> to tell everyone I knew about this book.
They <em>had</em> to read it.
We <em>needed</em> to talk about it.
I could not stop thinking about it.</p>
<p>I mourned this book for months after I finished it and I wish it hadn&rsquo;t ended.</p>

<h4 class="relative group">The Last Tale of the Flower Bride
    <div id="the-last-tale-of-the-flower-bride" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-last-tale-of-the-flower-bride" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Next up is <em>The Last Tale of the Flower Bride</em> by Roshani Chokshi.
A book that made me so, so angry.
I am not going to spoil it, but the twist at the end made me feel so betrayed by my own detective skills.
To say I didn&rsquo;t see it coming is an understatement.</p>
<p>To quote my review of the book:</p>
<blockquote><p>This was a haunting and beautiful read.
Like watching a bus crash in slow motion.
Unable to turn away.</p>
</blockquote><p>I think that is the best way of describing this book, like watching a bus crash.
My screaming at the characters to turn away and run did nothing to change the outcome, but I was personally invested to the extent where I tried.</p>
<p>The writing style took a bit of time to get used to, but the story was so compelling at every turn I was glued to it until I finished it.
I even hung around at the tube station just to finish the chapter I was on.</p>
<p>The book made me feel sad, angry, betrayed, and ultimately heartbroken at the outcome.
That&rsquo;s why it is in this category.</p>

<h4 class="relative group">The Undertaking of Hart and Mercy
    <div id="the-undertaking-of-hart-and-mercy" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-undertaking-of-hart-and-mercy" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Now, this one surprised me.
I was not expecting to be so emotionally affected by <em>The Undertaking of Hart and Mercy</em> by Megan Bannen.</p>
<p>Maybe because this was the first &lsquo;real&rsquo; Romance novel I read this year, maybe because I saw something of myself in Hart and something of my other half in Mercy, but hot damn, this book hit me hard.</p>
<p>The big &lsquo;all is lost&rsquo; moment towards the end was probably the hardest I have ugly cried since watching <a href="https://www.imdb.com/title/tt0182789/" >Bicentennial Man</a> starring Robin Williams.
The level to which Megan Bannen was able to get me personally invested in the characters, their relationship, and their struggles was incredible.</p>
<p>Sure, it was a big miscommunication trope, but it worked for me, and I think it earned it its place in this category.</p>

<h4 class="relative group">The Very Secret Society of Irregular Witches
    <div id="the-very-secret-society-of-irregular-witches" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-very-secret-society-of-irregular-witches" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Finally, we have <em>The Very Secret Society of Irregular Witches</em> by Sangu Mandanna.</p>
<p>Now, this book has a lower rating than some of those in the next category, but I think its impact on me was much greater.
The themes of found family, of belonging, of being accepted for who you are, really resonated with me.</p>
<p>The thing that stood out most to me is in the way Sangu Mandanna manages to write in a cosy, warm way, which makes me feel like the book is closer to hot chocolate by the fire, than a book.
Magic being something with its own agenda, thoughts, and feelings, rather than just a tool to be used by the characters, was also a refreshing take.</p>
<p>More than anything this book switches between whimsy and serious themes so well, that it left a lasting impression on me.
I look forward to reading more of her work in the future.</p>

<h3 class="relative group">The ones that stood out
    <div id="the-ones-that-stood-out" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-ones-that-stood-out" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Each of these is not as powerful as those in the previous category, but I still appreciated each of them and frequently recommend them to others.</p>
<table>
  <thead>
      <tr>
          <th>Title</th>
          <th>Author</th>
          <th>Rating</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/145f3209-86b0-4694-a6fa-422d9ff486a7" target="_blank" rel="noreferrer">A Witch&#39;s Guide to Magical Innkeeping</a></td>
          <td>Sangu Mandanna</td>
          <td>4.75</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/e4a2324e-7d73-4c49-ae14-360f9a2c2332" target="_blank" rel="noreferrer">Sorcery and Small Magics</a></td>
          <td>Maiga Doocy</td>
          <td>4.25</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/5d3ef19d-1991-4728-a46f-6ec79f0023be" target="_blank" rel="noreferrer">Lord of the Empty Isles</a></td>
          <td>Jules Arbeaux</td>
          <td>4.25</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/f0421a9f-2aec-4118-a620-59bac120dd1a" target="_blank" rel="noreferrer">Redshirts</a></td>
          <td>John Scalzi</td>
          <td>4.0</td>
      </tr>
  </tbody>
</table>

<h4 class="relative group">A Witch&rsquo;s Guide to Magical Innkeeping
    <div id="a-witchs-guide-to-magical-innkeeping" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#a-witchs-guide-to-magical-innkeeping" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p><em>A Witch&rsquo;s Guide to Magical Innkeeping</em> by Sangu Mandanna, feels like it is in the same universe as <em>The Very Secret Society of Irregular Witches</em> (which it might be), but it follows a completely different set of characters.
This book has all the same themes; found family, belonging, of being accepted for whom you really are.</p>
<p>Oddly, I actually gave it a higher rating than <em>The Very Secret Society of Irregular Witches</em>.
This book has a much more powerful story arc, with higher stakes, and a more satisfying conclusion.
However, because it came after <em>The Very Secret Society of Irregular Witches</em>, I was used to the style and themes, meaning it had less of an impact on me.</p>
<p>It is still a very, very enjoyable read, and I would recommend it to anyone who enjoys cosy fantasy/romance novels.</p>

<h4 class="relative group">Sorcery and Small Magics
    <div id="sorcery-and-small-magics" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sorcery-and-small-magics" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p><em>Sorcery and Small Magics</em> by Maiga Doocy was an eager recommendation from my other half, and I am so glad they suggested it to me.
I didn&rsquo;t like the idea of a &lsquo;forced proximity&rsquo; romance novel, but Maiga Doocy manages to pull it off in a way that feels natural and believable (and not at all creepy).</p>
<p>The trope of &lsquo;guy fails to communicate properly&rsquo; wound me up for the first half of the book, before it was explained why he was acting that way.
But once I got past that, I really enjoyed the world building; the magic system specifically needs calling out as very creative.
I really enjoyed the theme of stopping, taking a breath, and appreciating the small things in life.</p>
<p>The world building lays a lot of groundwork for future stories, I am keeping an eye out for the next book in the series.
It has a lot of potential.</p>

<h4 class="relative group">Lord of the Empty Isles
    <div id="lord-of-the-empty-isles" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lord-of-the-empty-isles" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Like <em>Sorcery and Small Magics</em>, <em>Lord of the Empty Isles</em> by Jules Arbeaux is a forced proximity romance novel.
Both are about &lsquo;cursed&rsquo; characters who need to work together to break the curse, and in doing so, become closer.</p>
<p>I think I would sing equal praises for both books magic systems, however <em>Lord of the Empty Isles</em> sits firmly as a standalone novel due to less time spent on world building.
It&rsquo;s a much faster paced novel, with far more action, which I really enjoyed.</p>
<p>It does also rely on the &lsquo;guy fails to communicate properly&rsquo; trope, but the story moves quickly enough that I was able to forgive it.</p>

<h4 class="relative group">Redshirts
    <div id="redshirts" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#redshirts" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Now back to some traditional Science Fiction with <em>Redshirts</em> by John Scalzi.
Right?
If there was an award for &lsquo;book most likely to get you to say &ldquo;Wait, what?&rdquo;&rsquo;, this book would win hands down.</p>
<p>I have heard it described as a love letter to traditional Star Trek, and I think that undersells its cleverness.
It&rsquo;s a quick read, it is funny, and the ridiculousness of the plot really keeps you on your toes.</p>
<p><em>Redshirts</em> firmly fits into the category of books where I wish I could read it again for the first time.</p>

<h3 class="relative group">The ones I forgot about
    <div id="the-ones-i-forgot-about" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-ones-i-forgot-about" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Now this is a category I feel bad about.
These books were all fine, I enjoyed reading all of them, but they just didn&rsquo;t leave a lasting impression.
Is this what &lsquo;coffee table books&rsquo; are supposed to be?
Quick reads that just fill time?</p>
<table>
  <thead>
      <tr>
          <th>Title</th>
          <th>Author</th>
          <th>Rating</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/6b8594dc-10f3-42b0-b15e-e2cf24a39340" target="_blank" rel="noreferrer">The Mysterious Affair at Styles</a></td>
          <td>Agatha Christie</td>
          <td>4.0</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/f93f91e0-e47c-47fe-8de5-a773bd0bd7c5" target="_blank" rel="noreferrer">Bridge of Clay</a></td>
          <td>Markus Zusak</td>
          <td>3.75</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/3c35b6ec-6f15-4e46-9914-ea5ea8088973" target="_blank" rel="noreferrer">To Be Taught, If Fortunate</a></td>
          <td>Becky Chambers</td>
          <td>3.5</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/1785df9e-c791-4a6a-a0e5-4823807f6ce9" target="_blank" rel="noreferrer">The Murder on the Links</a></td>
          <td>Agatha Christie</td>
          <td>3.25</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/da9af6dc-51ad-45df-878c-cd906eafdfca" target="_blank" rel="noreferrer">Hell Divers #11 - Renegades</a></td>
          <td>Nicholas Sansbury Smith</td>
          <td>3.25</td>
      </tr>
  </tbody>
</table>

<h4 class="relative group">The Mysterious Affair at Styles
    <div id="the-mysterious-affair-at-styles" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-mysterious-affair-at-styles" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Everyone can universally agree that Agatha Christie is a great author, but the very first Poirot novel, <em>The Mysterious Affair at Styles</em>, doesn&rsquo;t have anything about it that wows me.</p>
<p>Older novels always have a bit of &ldquo;you can&rsquo;t say that nowadays&rdquo; about them, and this one is no exception.
It didn&rsquo;t take me out of the story, and overall I found it to be a solid mystery novel.</p>
<p>Again, I would make a terrible detective, because I did not correctly guess who the murderer was.
I don&rsquo;t think now, after four months, I could tell you what happened with any degree of confidence.</p>

<h4 class="relative group">Bridge of Clay
    <div id="bridge-of-clay" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#bridge-of-clay" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p><em>Bridge of Clay</em> by Markus Zusak took a <em>lot</em> of getting into.
The writing style is very different from anything I had read before, with much more metaphorical language than I was used to.
I&rsquo;m not the biggest fan of books with multiple timelines, but I managed to push through to the end and the payoff was worth it.</p>
<p>Unfortunately, even though the author does a good job of getting across the emotional weight of the story, I still found that once I was done, I didn&rsquo;t think of it again.</p>

<h4 class="relative group">To Be Taught, If Fortunate
    <div id="to-be-taught-if-fortunate" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#to-be-taught-if-fortunate" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Now this one I feel bad about.</p>
<p>If you talk to me about Science Fiction, I will inevitably mention that Becky Chambers has to be one of the best authors of my time.
<em>A Long Way to a Small, Angry Planet</em> is a masterclass in character development and world-building.
<em>The Monk and the Robot</em> series is a beautiful exploration of friendship and understanding.</p>
<p><em>To Be Taught, If Fortunate</em> however, is a book that I just didn&rsquo;t connect with.
I actually forgot about it for most of the year, overall taking me seven months to finish it.</p>
<p>Again, I feel quite bad, it feels like something is wrong with me for not enjoying it.
It hits all the same notes as her other books, but it just didn&rsquo;t come together for me.</p>

<h4 class="relative group">The Murder on the Links
    <div id="the-murder-on-the-links" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-murder-on-the-links" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Another Poirot novel, <em>The Murder on the Links</em> by Agatha Christie, doesn&rsquo;t need much more explanation.</p>
<p>For all the same reasons as <em>The Mysterious Affair at Styles</em>, I just didn&rsquo;t find it particularly memorable.
It&rsquo;s possible that the later novels in the series build on the characters and themes more effectively, but the first two books fall a bit flat.</p>

<h4 class="relative group">Hell Divers #11 - Renegades
    <div id="hell-divers-11---renegades" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hell-divers-11---renegades" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p><em>Renegades</em> by Nicholas Sansbury Smith is the eleventh installment in the Hell Divers series, and it continues to deliver the action and suspense that we have all come to enjoy.</p>
<p>I just think that after eleven books, it is starting to lose my interest a bit.
The characters and plot lines are becoming a bit repetitive, and I&rsquo;m not sure how much longer I can stay invested in the series.</p>
<p>I think I&rsquo;m going to wait until he finishes up on the series before I continue with it.</p>

<h3 class="relative group">The others
    <div id="the-others" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-others" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>These are all the other books I read.
Some were good, some were not so good, but they don&rsquo;t fit into the other categories.</p>
<table>
  <thead>
      <tr>
          <th>Title</th>
          <th>Author</th>
          <th>Rating</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/6bac89be-314b-4b7f-8be5-38ba7f682bb2" target="_blank" rel="noreferrer">A Fate Inked in Blood</a></td>
          <td>Danielle L. Jensen</td>
          <td>4.75</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/fff4a412-89f6-46ad-b75e-bd21a626e730" target="_blank" rel="noreferrer">Mistborn - The Final Empire</a></td>
          <td>Brandon Sanderson</td>
          <td>4.75</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/1c4ba213-e1b9-40f3-a9aa-c6a1f07259f8" target="_blank" rel="noreferrer">Mistborn - The Well of Ascension</a></td>
          <td>Brandon Sanderson</td>
          <td>3.75</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/43630542-02d2-464a-acf3-a3c7e1e0ddbc" target="_blank" rel="noreferrer">Mistborn - The Hero of Ages</a></td>
          <td>Brandon Sanderson</td>
          <td>4.5</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/29edbc6e-be95-4fa2-8d5b-5a0d5dda21be" target="_blank" rel="noreferrer">Old Man&#39;s War - Old Man&#39;s War</a></td>
          <td>John Scalzi</td>
          <td>4.0</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/2aced7c8-378f-4467-9c9c-833f0939be96" target="_blank" rel="noreferrer">Old Man&#39;s War - The Ghost Brigades</a></td>
          <td>John Scalzi</td>
          <td>3.75</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/24856ff5-1ad0-42bb-90d6-74f96caffef2" target="_blank" rel="noreferrer">Old Man&#39;s War - The Last Colony</a></td>
          <td>John Scalzi</td>
          <td>3.75</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/4c9c44fc-ecdb-4b60-b86f-474df58d4dff" target="_blank" rel="noreferrer">The Lion, the Witch and the Wardrobe</a></td>
          <td>C.S. Lewis</td>
          <td>4.25</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/d161ee53-6559-4c39-a2c5-da4fa422e312" target="_blank" rel="noreferrer">Bookshops &amp; Bonedust</a></td>
          <td>Travis Baldree</td>
          <td>4.25</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/7bfd87f7-d0a7-45ed-a4c0-b0b56d18fff0" target="_blank" rel="noreferrer">Strange the Dreamer</a></td>
          <td>Laini Taylor</td>
          <td>4.25</td>
      </tr>
      <tr>
          <td><a href="https://app.thestorygraph.com/books/299618ff-bd9a-4676-8fe2-e769d60fbfca" target="_blank" rel="noreferrer">Winter&#39;s Orbit</a></td>
          <td>Everina Maxwell</td>
          <td>3.75</td>
      </tr>
  </tbody>
</table>
<p>I&rsquo;m not going to go into detail on all of these, but I do want to call out one book in particular.</p>
<p><em>The Well of Ascension</em> by Brandon Sanderson is the second book in the Mistborn trilogy and I really wanted to put it in the &lsquo;ones I forgot about&rsquo; category.
The first book, <em>The Final Empire</em>, was incredible and stood on its own.
The third book, <em>The Hero of Ages</em>, was a satisfying conclusion to the trilogy.
But the second book just felt like filler.
If you asked me what happened in the second one, I would struggle to tell you.</p>

<h2 class="relative group">Final thoughts
    <div id="final-thoughts" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#final-thoughts" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>It was a good year for reading.
The addition of the Kobo eReader into my life has made a huge difference to my reading habits.
I branched out into new genres, and found that actually, I do enjoy Romance novels.</p>
<p>My goal for 2026 is to read at least 36 books, and to try to read more non-fiction.
I have started reading <a href="https://app.thestorygraph.com/books/01eb5bfb-aeaf-4c82-a848-7913fc4dce7d" target="_blank" rel="noreferrer"><em>The Transgender Issue: An Argument for Justice</em></a> by Shon Faye, and I have a handful of technical books I want to get through.</p>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="books"/><category term="reviews"/><summary type="html">This year, I set myself a goal to try and double(ish) the amount of books I read, aiming for a total of 24 books which is 10 more than last year. I thought it would be nice to share with you what books stood out, and which books might be worth skipping.</summary></entry><entry><title type="html">That's a Wrap - Twelve Days of Short Stories 2025</title><link href="https://thega.me.uk/2025/12/thats-a-wrap-twelve-days-of-short-stories-2025/" rel="alternate" type="text/html" title="That's a Wrap - Twelve Days of Short Stories 2025"/><published>2025-12-24T23:28:00+00:00</published><updated>2025-12-26T10:17:40+00:00</updated><id>https://thega.me.uk/2025/12/thats-a-wrap-twelve-days-of-short-stories-2025</id><content type="html" xml:base="https://thega.me.uk/2025/12/thats-a-wrap-twelve-days-of-short-stories-2025/"><![CDATA[<p>This year was worse than last year.
I only managed to finish 50% of the stories I set out to write.
Or, put another way, I successfully wrote 6 short stories.</p>
<p>Just like <a href="https://thega.me.uk/2024/11/twelve-days-of-short-stories/" >last year</a>,
I <a href="https://thega.me.uk/2025/11/twelve-days-of-short-stories-2025/" >challenged myself</a> to write twelve short stories over a period of twenty-four days.
This is a wash-up of how I thought it went, what I did well, and what I could have improved on.</p>

<h2 class="relative group">Results
    <div id="results" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#results" aria-label="Anchor">#</a>
    </span>
    
</h2>
<table>
  <thead>
      <tr>
          <th>Day</th>
          <th>Primary Word</th>
          <th>Backup Word</th>
          <th>Genre</th>
          <th>Result</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-1/" >1</a></td>
          <td><del><code>hate</code></del></td>
          <td><code>engineer</code></td>
          <td><code>Dystopian</code></td>
          <td>&#x1f44d;</td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-3/" >3</a></td>
          <td><code>short</code></td>
          <td><del><code>rich</code></del></td>
          <td><code>Detective</code></td>
          <td>&#x1f44d;</td>
      </tr>
      <tr>
          <td><del>5</del></td>
          <td><code>reign</code></td>
          <td><code>descent</code></td>
          <td><code>Fantasy</code></td>
          <td>&#x2757;</td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-7/" >7</a></td>
          <td><code>piano</code></td>
          <td><del><code>formula</code></del></td>
          <td><code>Mystery</code></td>
          <td>&#x1f44d;</td>
      </tr>
      <tr>
          <td><del>9</del></td>
          <td><code>theatre</code></td>
          <td><code>desk</code></td>
          <td><code>Adventure</code></td>
          <td>&#x2757;</td>
      </tr>
      <tr>
          <td><del>11</del></td>
          <td><code>paint</code></td>
          <td><code>glove</code></td>
          <td><code>Sci-Fi</code></td>
          <td>&#x2757;</td>
      </tr>
      <tr>
          <td><del>13</del></td>
          <td><code>abolish</code></td>
          <td><code>power</code></td>
          <td><code>Adventure</code></td>
          <td>&#x2757;</td>
      </tr>
      <tr>
          <td><del>15</del></td>
          <td><code>mirror</code></td>
          <td><code>kneel</code></td>
          <td><code>Romance</code></td>
          <td>&#x2757;</td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-17/" >17</a></td>
          <td><code>cooperate</code></td>
          <td><del><code>manage</code></del></td>
          <td><code>High Fantasy</code></td>
          <td>&#x1f44d;</td>
      </tr>
      <tr>
          <td><del>19</del></td>
          <td><code>concentrate</code></td>
          <td><code>zone</code></td>
          <td><code>Military Fiction</code></td>
          <td>&#x2757;</td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-21/" >21</a></td>
          <td><code>bake</code></td>
          <td><del><code>fight</code></del></td>
          <td><code>Fairy Tale</code></td>
          <td>&#x1f44d;</td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-23/" >23</a></td>
          <td><code>document</code></td>
          <td><del><code>profit</code></del></td>
          <td><code>Crime</code></td>
          <td>&#x1f44d;</td>
      </tr>
  </tbody>
</table>
<p>So, as you can see I managed half of the days, completing 6/12 or 50%.</p>

<h2 class="relative group">Lessons Learned
    <div id="lessons-learned" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lessons-learned" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">Genre not Point of View
    <div id="genre-not-point-of-view" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#genre-not-point-of-view" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Unlike last year, I decided to switch from changing the point of view, to changing the genre of each story.</p>
<p>Switching the point of view last year was an interesting exercise, but I found that it didn&rsquo;t really add much to the types of stories I was writing.
By switching the genre instead, I found that I was forced to write different types of stories, which was a good challenge.</p>

<h3 class="relative group">Too many Advents
    <div id="too-many-advents" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#too-many-advents" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Just before December started, not only did I set myself this challenge, but I also committed to doing the <a href="https://adventofcode.com/" >Advent of Code</a> programming challenge.</p>
<p>I found quite quickly that my limited time in the evenings held just enough time to do one or the other, but not both.</p>
<p>In future, I think I will have to pick one to focus on, or change my approach from one every two days.</p>

<h3 class="relative group">Too Few Words
    <div id="too-few-words" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#too-few-words" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>I think the majority of the stories that I have written suffer from being far too short.
Writing these stories in the evenings, I can hit about 1000-1500 words.
Many of the genres that were randomly generated, just need more than that to set the background, or tone.</p>
<p>Take day <a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-7/" >7</a>, for example.
I came up with the — frankly stupid — idea of having a &lsquo;piano killer&rsquo; on the loose, but by the time I had finished the intro, I was &lsquo;out of time&rsquo;.
There was more to tell in my &lsquo;Poirot-esque&rsquo; day <a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-3/" >3</a>, but alas, I needed to wrap it up.</p>
<p>By day <a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-17/" >17</a> I had realized that there was no way I was going to be able to set up a High Fantasy universe, and then tell a story, in so few words.
I solved this by latching onto the High Fantasy world of <a href="https://en.wikipedia.org/wiki/J._R._R._Tolkien" >J. R. R. Tolkien</a> (which, if I am honest, felt a bit like cheating).</p>
<p>Maybe a more seasoned writer wouldn&rsquo;t have this issue.
Maybe they would be able to take the pre-existing cues that people associate with given genres and skip a lot of the set-up.
But, it does beg the question if I should change the format in future to be fewer stories; maybe one every 4 days.</p>

<h3 class="relative group">Illness
    <div id="illness" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#illness" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Early on in December I caught a nasty cold that laid me low for about a week.
This meant that I missed quite a few days.</p>
<p>There is not much I can do to avoid getting sick, other than wear a mask in crowded places during the winter months.</p>

<h2 class="relative group">Future Plans
    <div id="future-plans" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#future-plans" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I&rsquo;m currently undecided whether I will do this challenge again next year.
I enjoyed it, but I really wasn&rsquo;t able to dedicate enough time to it.</p>
<p>Maybe that&rsquo;s the point of <code>embrace the suck</code>; accept I am not good at writing, and just write.
Make as much space as I can for it.
Make myself accountable (by writing these goals down)
Then see what happens.</p>
<p>Ignoring all the ones I failed to do, I am very happy with day <a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-23/" >23</a>, which I think is my best story so far.
I feel the close pacing gave it a good sense of tension and claustrophobia.</p>
<p>If you have followed along with any of the stories, I hope you enjoyed them.
Let me know what you think.</p>
<p>Happy Holidays!</p>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="fiction"/><summary type="html">This year was worse than last year. I only managed to finish 50% of the stories I set out to write. Or, put another way, I successfully wrote 6 short stories.</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 23</title><link href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-23/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 23"/><published>2025-12-24T10:56:00+00:00</published><updated>2025-12-24T11:10:00+00:00</updated><id>https://thega.me.uk/fiction/2025-12-days-of-short-stories-23</id><content type="html" xml:base="https://thega.me.uk/fiction/2025-12-days-of-short-stories-23/"><![CDATA[<p>The fog swirled thickly around his ankles as he stood in the dim light of the streetlamp.
He was too exposed here, but the boss had told him to watch the back alley, so watch the back alley he did.
The door to the boss&rsquo; office was at his back as he looked left and right periodically, keeping all of his senses alert to anything that would cause issues if the gang needed to escape.</p>
<p>The walls bore down on him as the time passed, his eyes playing tricks, finding shapes in the discarded waste that littered the floor.
Behind him came a loud bang; a gunshot rang out.
He started as another gunshot, then more followed.
Screams filled the small alleyway with dread.
Something had gone horribly wrong.</p>
<p>His curiosity and his eagerness to help pulled him towards the door, but it was tempered by the boss&rsquo; words in his ears.<br>
&ldquo;We might need to get out in a hurry, slick,&rdquo; he had said, &ldquo;watch this alley like it&rsquo;s your only reason for living&rdquo;.<br>
The implication had been clear; watch the alley, or it&rsquo;ll be a bullet in the back of the head for disobedience.</p>
<p>His hand paused at the handle as the door burst outwards towards him.
He narrowly dodged as its sharp metal edge sliced past his face.
Douglas was at the door, holding his stomach with one hand, a leather-bound book in the other.
Drops of blood covered almost every inch of him, from his face, all over his shirt, but the worst of it poured around his hand and ran down his trousers.<br>
&ldquo;Slick,&rdquo; Douglas gasped, &ldquo;you&rsquo;ve got to get this out of here&rdquo;.
Douglas pushed the leather-bound book into the bewildered man&rsquo;s hand, not waiting for him to accept.<br>
&ldquo;If <em>he</em> gets a hold of this, everyone is dead,&rdquo; he continued, blood beginning to run onto the floor below him, &ldquo;do you understand me?&rdquo;<br>
He didn&rsquo;t understand, he didn&rsquo;t have time.<br>
&ldquo;Run and don&rsquo;t stop, Slick,&rdquo; Douglas shouted, &ldquo;get it to our guys at the docks.&rdquo;\</p>
<p>It hadn&rsquo;t set in yet; he just stood there holding the book, dumbfounded.
Movement behind Douglas caught his eye, followed by the sound of a shotgun cocking.<br>
&ldquo;GO!&rdquo; Douglas bellowed, turning to face the sound of the shotgun firing.</p>
<p>The taste of Douglas&rsquo;s blood in his mouth got his legs moving.
It was all over him; painting his shirt, coating his arms, but worst, it had sprayed all over his face and into his eyes and mouth.
He turned, picking a direction without calculating the fastest way to the docks.
That could come after he put some distance between him and, whatever was happening inside the office.</p>
<p>Halfway down the alley his heart was pounding now, filling his ears, threatening to jump out of his chest.
The adrenaline drove him forward, faster than he had ever run.
Was everyone dead?</p>
<p>Clipping a discarded crate, he stumbled, catching a glimpse behind him.
Under the dim light of the same streetlamp he wished he was still under, counting down the hours of his shift, until he could see out another uneventful day, was a giant of a man.
He didn&rsquo;t have time to drink in any more than a vague outline of someone staring after him.
Were his eyes red?<br>
&ldquo;After him,&rdquo; he heard a voice boom behind him, &ldquo;get me that book!&rdquo;</p>
<p>He reached the end of the alley, turning south towards the docks.
The streets were empty this late at night, rows of cars lined up, dormant while their owners slept, partied, or gambled their money away.
He knew he couldn&rsquo;t go straight there; he had to lose them.
Whoever was pursuing him just massacred the most brutal gang in the city; they would find him, so he had to get there fast.</p>
<p>Footsteps echoed behind him, lots of them.
Whoever this was brought lots of men.</p>
<p>He knew these streets, so he knew where someone could get turned around.
Ducking left, he slipped into another alley, narrower than the last.
Washing lines adorned the windows, cut haphazardly into walls, while dumpsters and discarded furniture cluttered the slick floor.
People lived here, and he didn&rsquo;t want to die here, weaving around obstacles, leaping over anything which blocked the way.
His legs burned.
The echo of boots on stone still followed him.
Were they closer now?
He couldn&rsquo;t turn back to check.</p>
<p>He ducked into the back door of a 24-hour laundrette, slipping past the annoyed attendant, and out of the front door.<br>
&ldquo;Hey,&rdquo; he heard the short man shout, his voice barely audible over his own ragged breathing.</p>
<p>This street was busier, traffic flowing in both directions.
There was no time to wait; either the cars killed him or his tail did.
He burst out into traffic, successfully finding a gap in the first lane of cars, having to slide over the bonnet of a car to get to the other side.
Not able to resist, he looked back.</p>
<p>There he was, the giant of a man on the other side of the road; his eyes were not red, but they were locked on him.
The man must have been at least 8 feet tall, wearing a green jacket turned red with the blood of his employers.
A snow-white beard, slick with blood, was the only other thing he noticed before the giant spoke.<br>
&ldquo;You&rsquo;re on my naughty list, Slick,&rdquo; he bellowed, &ldquo;give me the manifest and I will make your death a fast one.&rdquo;<br>
A piece clicked into place; the book was a manifest, it contained a list of all the dealings the boss had with the other families.<br>
<em>&ldquo;If he gets a hold of this, everyone is dead,&rdquo;</em> Douglas had said.</p>
<p>The giant was surrounded by men who looked like children in comparison.<br>
&ldquo;Are they children?&rdquo; he asked himself.<br>
There was no time to wonder as the men launched themselves across the road.</p>
<p>Panic had set in now, and he felt like his heart would finish him before this giant could.
Every sinew of his body screamed for him to stop, but he turned and ran.
The docks were close; he could see the tightly stacked containers cresting above the tops of the warehouses.</p>
<p>Left, right, left, right; he weaved through the side alleys.
Tiredness rolled through him, seeping in from his extremities.
How long could he run for?
His pursuers were close; their footsteps echoed shortly after his.
There was no time to look back; he was almost there.</p>
<p>The last street before the docks, he could hear the horn of a departing boat.
This was a rarely used service road, so there was no traffic to dodge.
Relief began to blossom in his mind as his foot clipped the corner of a pallet, tripping him.
Falling hard, he landed wrong on his arm.</p>
<p>Sprawled on the ground, he looked back and saw them.
A swarm of short men in stained green hats, surrounding a man like the wake of a boat.<br>
&ldquo;Stay here,&rdquo; the man boomed, &ldquo;leave him to me.&rdquo;</p>
<p>The school of fish, surrounding their leader, stopped at once.
The giant emerging between them reminded him of a shark closing in on its kill.
The kill was him.</p>
<p>Struggling to his feet, still clutching the leather-bound book, he disappeared amidst the containers.<br>
A &ldquo;Ho, ho, ho,&rdquo; echoed around him, &ldquo;I see you when you&rsquo;re sleeping, Slick.
I know when you&rsquo;re awake.
I know when you&rsquo;ve been bad, Slick.
And you have definitely been very bad.&rdquo;</p>
<p>He darted around containers, but he had lost his bearings.
Dread was setting in; his pulse pounding in his ears, it was deafening.
Breath so hot it condensed in the cool night air.
He leant against a container, just for a moment, just for a second.
Moving again seemed impossible.</p>
<p>It was only a moment as a giant rounded the corner, staring down at his quarry.<br>
&ldquo;There you are, Slick.
I was beginning to think you didn&rsquo;t like me,&rdquo; the giant beamed through his blood-stained beard.<br>
&ldquo;What are you?&rdquo; the exhausted man wheezed, sliding down the side of the container, knees giving out.<br>
&ldquo;Why, I&rsquo;m Santa,&rdquo; the giant laughed triumphantly, &ldquo;and you&rsquo;ve been naughty.&rdquo;</p>
<p>Santa reached down and grabbed him by his shirt, lifting him back to his feet, then off of the floor.
He dangled like a marionette; legs with nothing left to give hung below him.
Santa hurled him at another container, his body crumpling to the ground from the impact, but he gripped the leather-bound book with all his remaining energy.
The air was driven from his lungs; he had never known pain this intense.</p>
<p>There, to his left, glinting in the moonlight, a scrap of metal.
He let himself fall in its direction.<br>
&ldquo;Time for your present,&rdquo; Santa said, as he lifted the ghost of a man back up, &ldquo;and there&rsquo;s only one present I give to naughty little boys.&rdquo;<br>
He could see the boat over Santa&rsquo;s shoulder; they were beginning to stow the gangway.
Santa placed his other hand around his prey&rsquo;s neck and began to squeeze, it was over.</p>
<p>Suddenly, Santa let out a gasp, dropping the man to the floor; the metal scrap protruded from his stomach, blood already pouring free.</p>
<p>Not waiting for permission, he summoned strength he didn&rsquo;t know he had and pulled himself to his feet.
Ducking around Santa&rsquo;s flailing arm, he bolted for the boat; he wasn&rsquo;t as fast now, this was it, his last chance.</p>
<p>The gangway had been pulled up and the ropes untied; the boat began pulling away under its own steam.
There wasn&rsquo;t time to wait and explain, so he leapt, giving everything and more to grab onto the railing that ran the perimeter of the vessel.<br>
&ldquo;Jesus and Mary,&rdquo; a deckhand yelled, startled by the sound of his body colliding with the side of the hull.<br>
The man ran to him, helping him up and over the edge.
&ldquo;Slick, is that you?&rdquo; the deckhand asked, &ldquo;you look like hell.&rdquo;<br>
He felt worse than hell.</p>
<p>He rolled on the deck and looked back towards the docks.
Between two containers he could see his pursuer looming.
Even from here he could tell that Santa was glaring directly at him.<br>
&ldquo;Until next year, Slick,&rdquo; he heard Santa boom, his voice carried on the wind.</p>
<p>Rolling onto his back, he was done; he had no more to give.
Over the sounds of the boat he could have sworn he heard bells.
Consciousness slipped from him, and he sailed silently into the night.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Day 23 of 12 Days of Short Stories 2025</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 21</title><link href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-21/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 21"/><published>2025-12-21T22:20:00+00:00</published><updated>2025-12-21T22:23:41+00:00</updated><id>https://thega.me.uk/fiction/2025-12-days-of-short-stories-21</id><content type="html" xml:base="https://thega.me.uk/fiction/2025-12-days-of-short-stories-21/"><![CDATA[<p>It was a chilly winter&rsquo;s evening in Sherborne St. John.
The air clawed at William&rsquo;s face as he stood outside the bakery.
Its owner, Ms. Azalea, was famous for making some of the sweetest cakes in all of Hampshire; something from Ms. Azalea would warm your heart, put a bounce in your stride, and make the troubles of the world seem so far behind you.</p>
<p>William suspected there was something more to Ms. Azalea, however.
He lived next door, and from his bedroom window he could see down into the bakery&rsquo;s garden.
On more than one occasion he could have sworn Ms. Azalea was conversing with her cat.
Not just in the casual way so many people in England do, but with a reciprocal understanding with her cat, as if she could speak to it.
She owned a very pointy black hat and was inclined to sweep her store with a broomstick made of willow.
William was convinced she was a witch (or a wizard — he wasn&rsquo;t an expert in these sorts of things).</p>
<p>&ldquo;William, why are you standing there in such ghastly weather?&rdquo; came a call from the door of the bakery.
It was Ms. Azalea.
He had been caught.<br>
&ldquo;I was just coming to ask a favour of you, Ms.,&rdquo; he sheepishly responded.<br>
&ldquo;Of me?
Come inside, my dear, out of the cold.
I&rsquo;m just closing up,&rdquo; she said, her voice oozing the sweetness her baking was known for.</p>
<p>She guided William inside, past the counter, into a small kitchen.
Not the one where she baked; this one was far cosier.
A kettle clicked on the countertop, its job complete.<br>
&ldquo;Now, what was this favour you&rsquo;re so worried about?&rdquo;</p>
<p>&ldquo;Well, as you know, Ms., it&rsquo;s the cake competition tomorrow at school, and, well, I kinda left it to the last minute,&rdquo; he said.
&ldquo;You see, we don&rsquo;t have any sugar in the house, and the shops are all closed.
Could I borrow some sugar from you?&rdquo;</p>
<p>&ldquo;Oh, William, I&rsquo;m so sorry,&rdquo; Ms. Azalea said, beaming a smile back at him.
&ldquo;I would love to help, but I use a&hellip;special&hellip;type of sugar in my baking.
It&rsquo;s very particular about who uses it.&rdquo;<br>
William sat, confused.<br>
&ldquo;It, Ms. Azalea?&rdquo;<br>
&ldquo;Do you believe in magic, William?&rdquo; Ms. Azalea asked out of nowhere.<br>
&ldquo;I guess I do, Ms. Azalea,&rdquo; he admitted, but he wasn&rsquo;t sure if this was a lie or not.
William thought himself far too old for that sort of nonsense, but sat here in front of Ms. Azalea, who seemed very magical indeed&hellip;<br>
&ldquo;The sugar I use is <em>magic</em> sugar,&rdquo; she said, the word magic sounding like it was covered in icing.<br>
&ldquo;You can only use it if you bake with love,&rdquo; she continued, &ldquo;and a baking competition is more about competition than love, don&rsquo;t you agree?&rdquo;<br>
William nodded; he knew he shouldn&rsquo;t have asked.<br>
&ldquo;If you demand something that isn&rsquo;t love from the sugar, it will demand something from you,&rdquo; she finished.<br>
If she didn&rsquo;t want to share, she could have just said no, instead of making up magic sugar.</p>
<p>&ldquo;Now, would you like a cup of tea?&rdquo; Ms. Azalea said, standing, turning her back on William.<br>
&ldquo;No, thanks, Ms.,&rdquo; he shouted, halfway out the door already.<br>
&ldquo;Well, wrap up warm before you go standing outside any other bakeries, OK?&rdquo; she called after him.</p>
<p>As William walked down the hallway to the front of the bakery, a glimmer caught his eye.
A cupboard to his left had its door ajar, and inside sat a shelf adorned with tens, maybe hundreds, of bags of sugar.
The pressure of the competition pressed hard on William&rsquo;s chest.
He had come dead last the year before, and he refused to come last again.<br>
&ldquo;She won&rsquo;t miss one,&rdquo; he thought to himself, and he slipped away with the bag of sugar into the night.</p>
<p>Back home, William stared into the bag of sugar; each granule seemed to reflect a different colour of the light.
&ldquo;Maybe it was magic,&rdquo; he thought as he poured the ingredients into a bowl.
Although he couldn&rsquo;t see it, a black cat watched silently through his kitchen window.</p>
<p>An hour later William had the most perfect-looking, sweet-smelling cupcakes he had ever seen.
He laid them out on the side to cool.</p>
<p>&ldquo;What smells so good?&rdquo; he heard his dad call from the doorway.
Without asking, he strode over and grabbed one of the cupcakes from William&rsquo;s cooling rack.<br>
&ldquo;Dad, they&rsquo;re for school tomorrow,&rdquo; William protested.
&ldquo;Put it back!&rdquo;.<br>
William&rsquo;s dad looked at the perfect little cupcake, eyes wide, nostrils savouring the freshly baked smell.<br>
&ldquo;We have to taste-test them before we let your mates try them,&rdquo; he said with a sneer.
&ldquo;It&rsquo;s just science.&rdquo;</p>
<p>Without another word he pulled back the paper case and popped the cupcake whole into his mouth.<br>
&ldquo;Oh, so hot,&rdquo; William heard through what little space in his dad&rsquo;s mouth not occupied by the cupcake.<br>
His dad almost swallowed it whole—or at least, that&rsquo;s what it seemed like to William.<br>
&ldquo;This tastes amazing, William!&rdquo; he exclaimed.
&ldquo;You&rsquo;ve outdone yourself, my lad.&rdquo;</p>
<p>William, although filled with annoyance that his dad had stolen a cupcake, brimmed with pride.
The prize was certainly his, this year.</p>
<p>Without warning, his dad snorted.
He wiggled his nose.<br>
&ldquo;I feel awfully funny,&rdquo; he stated.<br>
A loud popping sound filled William&rsquo;s ears, and in the blink of an eye, where his dad once stood, was a full-bodied pig.
It began squealing and frantically thrashing around the kitchen.
William jumped on the worktop, narrowly avoiding being pinned under a flying kitchen table.</p>
<p>&ldquo;She did warn you,&rdquo; came a calm voice from behind him.<br>
William pulled his eyes and ears away from the chaos that was being unleashed in his kitchen, to see Ms. Azalea&rsquo;s cat perched in the open window.<br>
&ldquo;She said it will demand something from you,&rdquo; it continued, &ldquo;and it seems it has rewarded your father&rsquo;s greediness instead.&rdquo;<br>
&ldquo;You can talk?!&rdquo; was all that came from William&rsquo;s panicked brain.
&ldquo;Help me, what can I do?&rdquo;<br>
&ldquo;Don&rsquo;t ask me. I&rsquo;m not the witch,&rdquo; the cat said.
&ldquo;You need Ms. Azalea&rsquo;s help.&rdquo;<br>
Behind him, William&rsquo;s father had found the bin and had spilled its contents across the floor.
It seemed to be distracting him from breaking more of the kitchen.<br>
&ldquo;But I stole the sugar. She won&rsquo;t help me,&rdquo; William said, tears welling up in his eyes.<br>
&ldquo;I rather think you don&rsquo;t have a choice,&rdquo; said the cat, &ldquo;unless you like bacon,&rdquo; his eyes darting towards William&rsquo;s dad.</p>
<p>A loud banging at the door startled Ms. Azalea.
She grinned knowingly, and headed towards the front of the bakery.
Opening the door, she was greeted by William, tears spilling from his face, snot running from his nose.<br>
&ldquo;Ms., Ms., Ms. Azalea, I&rsquo;m so sorry,&rdquo; he sobbed.
&ldquo;I wanted to win so badly.
I needed to bake something, and your cakes always smelled the sweetest.
I stole a bag of your sugar,&rdquo; he said, words spilling out between tears.<br>
Ms. Azalea smiled a sweet, soft smile.
&ldquo;Tell me what has happened,&rdquo; she said.<br>
&ldquo;My dad,&rdquo; William cried, &ldquo;he&rsquo;s a pig.
Like a real pig.&rdquo;<br>
&ldquo;It&rsquo;s all right; we can fix this together.&rdquo;
She reached her hand into her pocket and pulled out a packet of <a href="https://en.wikipedia.org/wiki/Polo_%28confectionery%29" >Polos</a>.
&ldquo;Show me the way,&rdquo; she demanded.</p>
<p>William led Ms. Azalea into his garden, pointing through the window at the pig with its head in an overturned fridge.<br>
&ldquo;Look,&rdquo; he said, &ldquo;there he is&rdquo;.<br>
She took a single Polo from the top of the pack and said, &ldquo;Sometimes when you have too many sweet things, you need a palate cleanser&rdquo;.<br>
She threw the mint through the window, landing it perfectly in front of the pig.
Its nose picked up the scent of the Polo immediately.
Turning, it hoovered up the small white circle.<br>
&ldquo;Give it a minute,&rdquo; Ms. Azalea whispered.</p>
<p>A loud popping sound filled William&rsquo;s ears once more, and in another blink of an eye, where a pig once stood, was his dad.<br>
&ldquo;What is the meaning of this?&rdquo; he roared.
&ldquo;William, why is the table knocked over? My goodness, the fridge,&rdquo; he said in disbelief.<br>
His gaze moved to the window, noticing William and Ms. Azalea standing outside.<br>
&ldquo;Hello,&rdquo; Ms. Azalea said, waving, &ldquo;William had just popped over to ask for a recipe, and we heard a terrible bang.&rdquo;
She glanced at William for an almost imperceptible moment; he thought he saw her wink.<br>
&ldquo;We thought it was an earthquake, and by the state of your kitchen, I think we were right.
Would you like a hand cleaning up?&rdquo;</p>
<p>The rest of the evening was a blur of cleaning, putting things back the right way up, and convincing William&rsquo;s dad that small localised earthquakes were a thing.
When all was said and done, Ms. Azalea stole a moment alone with William.<br>
&ldquo;Now, about the sugar you took,&rdquo; she began.<br>
&ldquo;I know, it was wrong,&rdquo; William interrupted, &ldquo;and I won&rsquo;t do it again. I promise.&rdquo;<br>
A smile spread across her face.<br>
&ldquo;I hope we can keep this little secret between the two of us?&rdquo; she said.<br>
&ldquo;Oh, yes, the magic sugar. Between the two of us,&rdquo; he confirmed.<br>
&ldquo;Well, the three of us,&rdquo; he thought, side-eyeing the cat.<br>
&ldquo;True magic comes from love, William,&rdquo; she said warmly. &ldquo;Maybe you could come round to the bakery in your holidays, and I&rsquo;ll teach you how to bake with it?&rdquo;</p>
<p>&ldquo;That sounds nice,&rdquo; said William.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Day 21 of 12 Days of Short Stories 2025</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 17</title><link href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-17/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 17"/><published>2025-12-17T23:18:00+00:00</published><updated>2025-12-17T23:18:29+00:00</updated><id>https://thega.me.uk/fiction/2025-12-days-of-short-stories-17</id><content type="html" xml:base="https://thega.me.uk/fiction/2025-12-days-of-short-stories-17/"><![CDATA[<p>High in the Misty Mountains lay the nesting place of the great Eagles, where snow lay deep upon the crags and the very ground was hard as ice, rendering passage for the children of Men almost impossible.
This treacherous terrain made the peaks of the mountains a perfect location for the nest of the eagles, as it had been for many years.</p>
<p>In each direction the sprawling lands of Middle-earth lay before Gwaihir, the greatest and swiftest of the eagles.
The buildings of Men seemed like nothing more than smudges upon the vista that lay before him as he breathed in the bitter mountain air, spreading his wings wide, smelling the faint undertones of smoke from a faraway conflict.</p>
<p>The eagles were not unfamiliar with the conflicts of Men, but this latest unravelling of peace had brought much unease to Gwaihir’s heart.</p>
<p>Dawn came to greet him as he looked out over what soon would be the land of Men; the Sun’s unyielding warmth was unable to still the frigid air that clung to him.
Gwaihir&rsquo;s mind was occupied by news that the Elves were migrating back to the Undying Lands of Valinor, across the sea.
He would mourn their parting, but their loss would blend into the memory of so many others, with time.</p>
<p>In his mind, Gwaihir felt the familiar tug of an old friend; Gandalf sent warning of a battle at the Black Gate.
All those who would call themselves allies of freedom would be needed to extinguish the dying light of evil from the lands, and the eagles must be ready.</p>
<p>He remembered the Ring and the stories of its great power, pulsing with evil abandon.
Gwaihir had not interacted with it directly — for it would surely corrupt him absolutely — but he had felt the Ring’s rage, even from a distance, on many occasions.</p>
<p>Time was limited, so Gwaihir called upon his brethren, screeching out in the language of the Eagles, calling the Council of the Great Eagles into session.</p>
<p>He waited, letting his thoughts wander to the Elves once more.
The other Eagles would come to him, as his status among them afforded him this little grace.
Gwaihir was not known for calling upon the others unless in dire need, causing the others to arrive promptly.</p>
<p>&ldquo;What causes you to call upon the Council, Gwaihir, Windlord of the Great Eagles?&rdquo; Landroval, the wisest among them, spoke first.<br>
&ldquo;It is none other than Gandalf who calls upon the Eagles, Landroval,&rdquo; he responded.
&ldquo;He has sent word that the forces of the Dark Lord are near defeat and requests the aid of the Great Eagles.&rdquo;<br>
&ldquo;Then the quest of the Ring-bearer nears its end,&rdquo; spoke another of the Council.<br>
&ldquo;It would seem that way,&rdquo; Gwaihir responded in kind.
&ldquo;What say the council?
Will we provide aid in the final battle for Middle-earth?&rdquo;</p>
<p>Landroval turned from the group, casting his eye towards Mordor.
&ldquo;The powers of darkness are greater than we can imagine, Gwaihir,&rdquo; he uttered in a tone of sorrow.
&ldquo;We cannot hope to defeat them.
Do you not remember the great war upon which we celebrated the victory of Men too early?
The Ring crushes the will of those who would oppose it; it cannot be destroyed.
If we join this fight, the price of many wings may have to be paid once more, but with no guarantee of success.&rdquo;<br>
&ldquo;This is true, my brother, but surely we have a duty to the Valar, to the light, to all that is good in this world.
If we have a chance to transform the cloud of despair that hangs over this land into the vapour of success, should we not grasp it by our talons?&rdquo; Gwaihir pleaded.
&ldquo;Gandalf would not call upon us if he did not think that it was worth our sacrifice.&rdquo;<br>
&ldquo;Or, if he fails and the lands of Middle-earth are cast into permanent darkness, it may be worth sacrificing all, or we and the Valar will be left with a vassal land not worth inhabiting,&rdquo; he continued.</p>
<p>The other Eagles stood in quiet thought, the icy wind whipping through their feathered bodies.</p>
<p>&ldquo;Very well,&rdquo; Landroval said, breaking the silence.
&ldquo;We shall hold a vote.
All in favour of offering the aid Gandalf petitions for, show your talons.&rdquo;</p>
<p>Gwaihir looked around the circle of his kin, each Eagle staring into his very soul.
He knew what Gandalf asked of him, and what he asked of his brothers.</p>
<p>One by one, each Great Eagle raised its talon, until there was not a single Eagle who did not stand behind him.</p>
<p>&ldquo;Then it is settled: we shall aid Gandalf when he calls upon us,&rdquo; Gwaihir announced.
&ldquo;I volunteer myself, and I request two others to join me.&rdquo;<br>
Landroval hopped forward and bowed before the Windlord.
&ldquo;It would be an honour, brother.&rdquo;<br>
Another stepped forward, bowing twice as deep.
&ldquo;My wings will not falter, Windlord.&rdquo;<br>
The Windlord bowed back, so deep that his beak scratched upon the stones of the mountain.</p>
<p>At that moment, with the timing that only a Wizard could manage, Gwaihir&rsquo;s mind was tugged by Gandalf&rsquo;s call for aid.</p>
<p>&ldquo;It is time,&rdquo; Gwaihir screeched.
&ldquo;Join me, brothers, to battle,&rdquo; he bellowed.
&ldquo;To death!&rdquo;</p>
<p>His wings spread wide, scattering rocks below him, as he launched himself into the air.
His resolve was unwavering as he propelled himself higher, the clouds swirling around their tips, as he made his way to the battle at the Black Gate.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Day 17 of 12 Days of Short Stories 2025</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 7</title><link href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-7/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 7"/><published>2025-12-07T22:29:00+00:00</published><updated>2025-12-07T22:30:57+00:00</updated><id>https://thega.me.uk/fiction/2025-12-days-of-short-stories-7</id><content type="html" xml:base="https://thega.me.uk/fiction/2025-12-days-of-short-stories-7/"><![CDATA[<p>Looking up at the TV, Sergeant Walker could see a smartly dressed man sitting behind the news desk, fingers pressed to his ear.</p>
<p>&ldquo;I&rsquo;m just getting news that another body has been found in south London&rdquo; he said.
Tension curled him up, making him look instantly smaller.</p>
<p>&ldquo;The death is being attributed to the piano killer&rdquo; he continued.<br>
&ldquo;This follows sixteen other murders this month.
Critics of the metropolitan police are calling this the worst series of murders we have seen since Jack the Ripper&rdquo;.</p>
<p>&ldquo;I now pass you over to our eyes on the ground in Greenwich, Pauline Maxwell&rdquo; he signed off as the image flicked to a reporter standing in front of a corner store.</p>
<p>&ldquo;Thanks, Doug&rdquo; she said with an upbeat tone that didn&rsquo;t reach her eyes.<br>
&ldquo;I&rsquo;m here just shy of the site of the latest gruesome murder, purportedly by the &lsquo;piano killer&rsquo;&rdquo; she explained.<br>
&ldquo;Police arrived here no more than an hour ago, and have cordoned off the shopfront behind me&rdquo;.</p>
<p>Before she could continue, a Police Officer walked into frame behind her.</p>
<p>The reporter spun, shoving her microphone into the Officers face.<br>
&ldquo;Officer, officer, if I could ask you a few questions&rdquo; she pleaded.</p>
<p>&ldquo;No comment at this time&rdquo; he responded stoically, his disdain for the reporter obvious.</p>
<p>&ldquo;This is the seventeenth body, and the killer shows no sign of slowing down&rdquo; the reporter pressed.
&ldquo;This latest murder is directly outside a shopfront, the killer appears to be getting bolder.
What are the Metropolitan police doing to keep Londoners safe from the piano killer?&rdquo; she probed.</p>
<p>He curtly shut her down.
&ldquo;I said no comment&rdquo; and continued walking, lifting his hand between himself and the camera.</p>
<p>The reporter turned back to the camera, straightening her jacket before proceeding to explain.
&ldquo;Witnesses who reported the body say that he was discovered just after 5 am this morning, piano keys wedged crudely in his mouth&rdquo;.</p>
<p>A commotion could be heard off camera, and police appeared behind the reporter.<br>
&ldquo;Step back please, give our teams some space&rdquo; could be heard over the overlapping voices.</p>
<p>&ldquo;I&rsquo;m being herded back here Doug&rdquo; the reporter hurriedly said.
&ldquo;I&rsquo;ll pass back to you in the Studio&rdquo;.</p>
<p>Walker stopped paying attention, returning his attention to the counter in front of him.
A short lady passed him a sandwich.</p>
<p>&ldquo;You better get out there and do your jobs&rdquo; she said.<br>
&ldquo;We are Mrs. Coulter, but we still need to eat occasionally&rdquo; Walker responded, trying to keep annoyance out of his voice.<br>
&ldquo;Disgusting what that killer is doing&rdquo; she continued.<br>
&ldquo;I know Mrs. Coulter. We will catch him, don&rsquo;t you worry&rdquo;.
Walker tried to let a smile pass across his face, but it didn&rsquo;t.
He couldn&rsquo;t fake a smile, not at a time like this.<br>
&ldquo;Before or after half the city is dead?&rdquo; she finished, turning back to making sandwiches.<br>
&ldquo;Good day, Mrs. Coulter&rdquo; Walker said timidly, trying to end the conversation on a pleasant note.</p>
<p>Walker stepped out of the small sandwich shop into the fresh morning air, nodding to his partner who waited outside.<br>
&ldquo;I don&rsquo;t think we will be welcome anywhere at this rate&rdquo; he quipped.<br>
&ldquo;Can you blame them?&rdquo; Walker said.
&ldquo;We are supposed to protect them, and we can&rsquo;t find a single killer in the most CCTV infested city in the world&rdquo;.</p>
<p>The air curdled in Walkers ears as screams pierced the regular sounds of people going about their business.
Without waiting for each other the two officers sprinted towards the sound; coming from the park across the street.</p>
<p>It wasn&rsquo;t difficult to find where the screams originated as a small crowd of people had clustered around something.
Walker and his partner pushed through to see a bench occupied by a very dead looking man.
A man with piano keys in his mouth.</p>
<p>&ldquo;Christ above&rdquo; Walker muttered, turning to his partner.<br>
&ldquo;But they said he just struck in Greenwich, that&rsquo;s 10 miles from here.
There&rsquo;s no way he got across the city that quickly&rdquo;.</p>
<p>Walker&rsquo;s partners face dimmed.
&ldquo;Unless it&rsquo;s not just one killer?&rdquo;</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Warning
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>I ran out of time for this one.</p>
<p>I have a pretty clear direction of where I wanted this one to go, but I think <code>Mystery</code> stories and &lsquo;short&rsquo; don&rsquo;t go well together.
It&rsquo;s hard to build tension in 500-ish words.</p></div></div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Day 7 of 12 Days of Short Stories 2025</summary></entry><entry><title type="html">Building a Sleigh</title><link href="https://thega.me.uk/2025/12/building-a-sleigh/" rel="alternate" type="text/html" title="Building a Sleigh"/><published>2025-12-05T17:26:25+00:00</published><updated>2025-12-05T17:02:20+00:00</updated><id>https://thega.me.uk/2025/12/building-a-sleigh</id><content type="html" xml:base="https://thega.me.uk/2025/12/building-a-sleigh/"><![CDATA[<p>For some insane reason, I decided to build a &lsquo;full size&rsquo; Santa Sleigh for Christmas.</p>

<h2 class="relative group">Background
    <div id="background" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#background" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>In early November, I was browsing <a href="https://www.ukchristmasworld.com/" >UK Christmas World</a>&rsquo;s website, looking for some new Christmas decorations for our front lawn.
Putting on a great Christmas display has become a bit of a tradition for us over the last few years, and I was looking for something that could take us to the next level.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2022_hu_da7b90c61a3561af.jpg 330w, /images/christmas/christmas_2022_hu_e2881b17c9c1ce54.jpg 660w, /images/christmas/christmas_2022_hu_b3d2168e70b4ba79.jpg 1024w, /images/christmas/christmas_2022_hu_3a84a8b6a3c91d26.jpg 2x"
          src="/images/christmas/christmas_2022_hu_e2881b17c9c1ce54.jpg"
          data-zoom-src="/images/christmas/christmas_2022_hu_3a84a8b6a3c91d26.jpg"
          
          title="My House December 1st 2022"
        />
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2023_hu_79f66e368f97a339.jpg 330w, /images/christmas/christmas_2023_hu_b29fc97c4f668b47.jpg 660w, /images/christmas/christmas_2023_hu_a5d8259884206675.jpg 1024w, /images/christmas/christmas_2023_hu_17d824a4a703195b.jpg 2x"
          src="/images/christmas/christmas_2023_hu_b29fc97c4f668b47.jpg"
          data-zoom-src="/images/christmas/christmas_2023_hu_17d824a4a703195b.jpg"
          
          title="My House December 1st 2023"
        />
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2024_hu_facef6d9ba95515c.jpg 330w, /images/christmas/christmas_2024_hu_110d02daa93a62fc.jpg 660w, /images/christmas/christmas_2024_hu_f4bbc2ca81c1dc31.jpg 1024w, /images/christmas/christmas_2024_hu_281e3b4349f5c8cb.jpg 2x"
          src="/images/christmas/christmas_2024_hu_110d02daa93a62fc.jpg"
          data-zoom-src="/images/christmas/christmas_2024_hu_281e3b4349f5c8cb.jpg"
          
          title="My House December 1st 2024"
        />
    </span>
  
    <figcaption class="text-center">My House, over the years, decorated for Christmas</figcaption>
  
</figure>

<p>I stumbled across a full sized Santa Sleigh.
Now I wasn&rsquo;t going to pay the £2,739 they were asking for it, but it did look really cool.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/ukchristmasworld_sleigh_hu_5bf986b152282b93.png 330w, /2025/12/building-a-sleigh/ukchristmasworld_sleigh_hu_29d132e5da727ad1.png 660w, /2025/12/building-a-sleigh/ukchristmasworld_sleigh_hu_469a74565d306269.png 1024w, /2025/12/building-a-sleigh/ukchristmasworld_sleigh_hu_3527f421bb11e330.png 2x"
          src="/2025/12/building-a-sleigh/ukchristmasworld_sleigh_hu_29d132e5da727ad1.png"
          data-zoom-src="/2025/12/building-a-sleigh/ukchristmasworld_sleigh_hu_3527f421bb11e330.png"
          
          title="A pre-made Sleigh Costing £2,739"
        />
    </span>
  
    <figcaption class="text-center">A pre-made Sleigh Costing £2,739</figcaption>
  
</figure>

<p>Something about that sleigh got me thinking.</p>
<blockquote><p>I could probably build that myself.</p>
<p>— Phillip Whittlesea-Clark - 2025</p>
</blockquote><p>How hard could it really be?</p>

<h2 class="relative group">The Design
    <div id="the-design" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-design" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So I started looking for designs online.
Someone surely had built a sleigh before, and uploaded the design files for others to use.</p>
<p>Well, luckily for me, someone had.
Jay Bates from Jays Custom Creations was the legend in question.</p>
<p>He had uploaded the <a href="https://github.com/MaslowCommunityGarden/Santa-Sleigh/tree/master" >original designs</a>, created a <a href="https://jayscustomcreations.com/2020/12/full-size-santa-sleigh-free-files/" >blog post</a> about the build, and even made a <a href="https://www.youtube.com/watch?v=NaBIX9frEB0" >YouTube video</a> showing the entire process.</p>
<lite-youtube videoid="NaBIX9frEB0" playlabel="NaBIX9frEB0" params=""></lite-youtube>

<p>Before I go any further, I want to give a huge shout out to Jay Bates for sharing his design and process with the world.</p>
<p>Looking at the design, I could see that it was going to probably cost me a few hundred pounds in materials, but that was still way less than buying a pre-made sleigh.
At this point, I was all in, so I downloaded the SVG files and ordered the initial materials.</p>

<h2 class="relative group">Step by Step
    <div id="step-by-step" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-by-step" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Here is a step-by-step breakdown of how we built the sleigh.
It&rsquo;s not a perfect guide, but it should give you an idea of the process we went through.</p>

<h3 class="relative group">Step 0: Setup
    <div id="step-0-setup" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-0-setup" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Before we start, here is a list of the materials and tools I used throughout the build.</p>

<h4 class="relative group">Materials
    <div id="materials" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#materials" aria-label="Anchor">#</a>
    </span>
    
</h4>
<table>
  <thead>
      <tr>
          <th style="text-align: left">Material</th>
          <th style="text-align: left">Quantity</th>
          <th style="text-align: right">Cost</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">Cardboard</td>
          <td style="text-align: left">1 A4-ish Cereal Box</td>
          <td style="text-align: right">£0</td>
      </tr>
      <tr>
          <td style="text-align: left">9 mm Plywood 2440 x 1220 mm</td>
          <td style="text-align: left">2 sheets</td>
          <td style="text-align: right">£48</td>
      </tr>
      <tr>
          <td style="text-align: left">12 mm Plywood 2440 x 1220 mm</td>
          <td style="text-align: left">3 sheets</td>
          <td style="text-align: right">£72</td>
      </tr>
      <tr>
          <td style="text-align: left">Wood Glue</td>
          <td style="text-align: left">1 bottle</td>
          <td style="text-align: right">£9</td>
      </tr>
      <tr>
          <td style="text-align: left">Masking Tape</td>
          <td style="text-align: left">1 roll</td>
          <td style="text-align: right">£5</td>
      </tr>
      <tr>
          <td style="text-align: left">Wood Primer &amp; undercoat</td>
          <td style="text-align: left">1.5 l</td>
          <td style="text-align: right">£28</td>
      </tr>
      <tr>
          <td style="text-align: left">Exterior Red Gloss Paint</td>
          <td style="text-align: left">1.5 l</td>
          <td style="text-align: right">£56</td>
      </tr>
      <tr>
          <td style="text-align: left">Exterior Yellow Gloss Paint</td>
          <td style="text-align: left">750 ml</td>
          <td style="text-align: right">£15</td>
      </tr>
      <tr>
          <td style="text-align: left">Glitter Gold Paint</td>
          <td style="text-align: left">750 ml</td>
          <td style="text-align: right">£36</td>
      </tr>
      <tr>
          <td style="text-align: left">5 mm x 30 mm Screws</td>
          <td style="text-align: left">28</td>
          <td style="text-align: right">£2</td>
      </tr>
      <tr>
          <td style="text-align: left">5 mm x 40 mm Screws</td>
          <td style="text-align: left">12</td>
          <td style="text-align: right">£1</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>Total</strong></td>
          <td style="text-align: left"></td>
          <td style="text-align: right"><strong>£272</strong></td>
      </tr>
  </tbody>
</table>

<h4 class="relative group">Tools
    <div id="tools" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tools" aria-label="Anchor">#</a>
    </span>
    
</h4>
<ul>
<li>Scalpel and/or Stanley Knife — for cutting the cardboard template</li>
<li>Pencil / Pen — for tracing the design</li>
<li>Router — for cutting the plywood</li>
<li>For cutting around the template — a router bit with a bearing on the top</li>
<li>Detail / &lsquo;Mouse&rsquo; Sander — for sanding the plywood</li>
<li>Trestles — for supporting the plywood while cutting (which I don&rsquo;t have)</li>
<li>Drill — for drilling the holes and driving the screws</li>
<li>Paint Brushes — for painting the sleigh</li>
</ul>

<h3 class="relative group">Step 1: Creating a Template
    <div id="step-1-creating-a-template" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-1-creating-a-template" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The original instructions started off by cutting all the wood using a CNC machine.
But I don&rsquo;t have a CNC machine, so I had to improvise the transfer of the provided SVG design onto the plywood.</p>
<p>My desire was to cut out a template on an A4 piece of paper and then use a light to cast a shadow onto the plywood. I could then trace the outline of the shadow with a pencil.</p>
<p>This shadow approach worked better than I expected, but still had its flaws.
I needed a very bright and directed light source to cast a clear shadow.</p>
<p>With every torch I owned, some parts were quite clear, and some parts were very blurry, as the torch either contained multiple LEDs or had a lens to cast a wide beam.
Luckily an iPhone torch has a very bright, single LED, which casts a very directed beam of light.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_7349_hu_baeaf7e245a35ef6.jpeg 330w, /2025/12/building-a-sleigh/IMG_7349_hu_e470803e1022c0db.jpeg 660w, /2025/12/building-a-sleigh/IMG_7349_hu_d5853bcb5989c2da.jpeg 1024w, /2025/12/building-a-sleigh/IMG_7349_hu_b9c45eb452dc2471.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_7349_hu_e470803e1022c0db.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_7349_hu_b9c45eb452dc2471.jpeg"
          
          title="Tracing the shadow of the sleigh onto the plywood"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_7350_hu_2a4ee89f69f069d1.jpeg 330w, /2025/12/building-a-sleigh/IMG_7350_hu_cb64d0b799a9cd83.jpeg 660w, /2025/12/building-a-sleigh/IMG_7350_hu_af38cd55e900ed86.jpeg 1024w, /2025/12/building-a-sleigh/IMG_7350_hu_427cee816e4f8725.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_7350_hu_cb64d0b799a9cd83.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_7350_hu_427cee816e4f8725.jpeg"
          
          title="The convoluted setup to cast a shadow of the sleigh onto the plywood"
        />
    </span>
  
    <figcaption class="text-center">Tracing the shadow of the sleigh onto the plywood</figcaption>
  
</figure>

<p>Three clamps, a wire hanger, a monitor arm, zip ties, a swivel phone mount that came with my electric toothbrush (for some reason), and one iPhone later, we had a convoluted enough setup to cast a shadow of the sleigh onto the plywood.</p>
<p>This worked well enough for me to get a rough outline of the sleigh onto the plywood, which we could then refine before cutting.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2156_hu_9bf0666842975b42.jpeg 330w, /2025/12/building-a-sleigh/IMG_2156_hu_576293b5328b8d92.jpeg 660w, /2025/12/building-a-sleigh/IMG_2156_hu_1b36f66cf20c54e0.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2156_hu_880edb5bb384b9a6.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2156_hu_576293b5328b8d92.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2156_hu_880edb5bb384b9a6.jpeg"
          
          title="The completed tracing of the sleigh onto the plywood"
        />
    </span>
  
    <figcaption class="text-center">The completed tracing of the sleigh onto the plywood</figcaption>
  
</figure>

<p>We spent quite a bit of time &lsquo;fixing it in post&rsquo;; reshaping the ends of the sleigh — where the shadow was distorted the most — making sure the round parts were sufficiently round, and the straight parts were sufficiently straight.</p>
<figure class="items-center mx-auto" style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Bill O&rsquo;Reilly Do It Live Meme with a &lsquo;fix it in post&rsquo; caption"
    width="490"
    height="319"
    src="/2025/12/building-a-sleigh/fix_it_in_post.png"
    srcset="/2025/12/building-a-sleigh/fix_it_in_post.png 800w, /2025/12/building-a-sleigh/fix_it_in_post.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/12/building-a-sleigh/fix_it_in_post.png"></figure>

<h3 class="relative group">Step 2: Cutting the Sides
    <div id="step-2-cutting-the-sides" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-2-cutting-the-sides" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>What a boy would give for a CNC machine&hellip;</p>
<p>I used a router (which I had to buy) to cut out the first side of the sleigh.
If this had gone well, I planned to use this as a template to cut the second side.
If this went badly, then I had bought one extra sheet of the 12 mm plywood just in case.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2161_hu_d3f824109686929.jpeg 330w, /2025/12/building-a-sleigh/IMG_2161_hu_8acdb789af00dc0b.jpeg 660w, /2025/12/building-a-sleigh/IMG_2161_hu_6352c731e70742ad.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2161_hu_5cc323c97cf18074.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2161_hu_8acdb789af00dc0b.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2161_hu_5cc323c97cf18074.jpeg"
          
          title="Cutting the first piece of plywood"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_7412_hu_8383a912c4c62629.jpeg 330w, /2025/12/building-a-sleigh/IMG_7412_hu_7c5019b119df0bcb.jpeg 660w, /2025/12/building-a-sleigh/IMG_7412_hu_929e8b7ca30e4f36.jpeg 1024w, /2025/12/building-a-sleigh/IMG_7412_hu_302ae277363b007f.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_7412_hu_7c5019b119df0bcb.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_7412_hu_302ae277363b007f.jpeg"
          
          title="Cutting the table underneath the plywood"
        />
    </span>
  
    <figcaption class="text-center">Cutting the first piece of plywood</figcaption>
  
</figure>

<p>Thankfully, it went reasonably well.
I would give myself a 6/10.</p>
<p>Sure, I cut into the camping table I was using as a makeshift workbench a few times, but I mostly kept to the lines.
There were a few places that required some significant sanding to hide my inexperience, but on the whole, it was a good first effort.</p>
<p>Once sanded, I clamped this first side down to the second sheet of plywood and used it as a template to cut the second side.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2165_hu_66a05931b39a6bac.jpeg 330w, /2025/12/building-a-sleigh/IMG_2165_hu_a47c613f99e5a207.jpeg 660w, /2025/12/building-a-sleigh/IMG_2165_hu_fbe295615fa73795.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2165_hu_8dd17975e860d85f.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2165_hu_a47c613f99e5a207.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2165_hu_8dd17975e860d85f.jpeg"
          
          title="Using the first cut as a template"
        />
    </span>
  
    <figcaption class="text-center">Using the first cut as a template</figcaption>
  
</figure>

<p>This needed a special router bit with a bearing on the top, to ensure the router followed the profile of the first cut.</p>
<figure class="items-center mx-auto" style="width:25%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="a router bit with a bearing on the top"
    width="242"
    height="257"
    src="/2025/12/building-a-sleigh/router_bit.png"
    srcset="/2025/12/building-a-sleigh/router_bit.png 800w, /2025/12/building-a-sleigh/router_bit.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/12/building-a-sleigh/router_bit.png"></figure>
<p>Attaching my vacuum cleaner to the &lsquo;dust collection port&rsquo; of the router did <em>literally</em> nothing.
Just as much dust went into every corner of the room as it would have done without it.</p>

<h3 class="relative group">Step 3: The Trim
    <div id="step-3-the-trim" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-3-the-trim" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The original design has a thin trim running around the main body of the sleigh.</p>
<p>We wanted to replicate this as it gives a nice depth that separates the main body from the runners.
Plus we can paint it gold which will look great.</p>
<p>We replicated the same process of cutting the main body of the sleigh to get the outline of the trim.
Then I used a &lsquo;freehand&rsquo; process, using the router to cut the inside of the trim.</p>
<p>Once we had done one side, we used it as the template for the other side<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2172_hu_8d77d113fdd578b6.jpeg 330w, /2025/12/building-a-sleigh/IMG_2172_hu_c075856d82ca42e4.jpeg 660w, /2025/12/building-a-sleigh/IMG_2172_hu_a7995e3be08de2aa.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2172_hu_f1e2f67080e09d79.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2172_hu_c075856d82ca42e4.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2172_hu_f1e2f67080e09d79.jpeg"
          
          title="The first trim piece being glued in place"
        />
    </span>
  
    <figcaption class="text-center">Gluing the trim to the main body of the sleigh</figcaption>
  
</figure>

<p>I was reminded that I own too few clamps as we glued the trim to the main body of the sleigh.</p>

<h3 class="relative group">Step 4: The Interior
    <div id="step-4-the-interior" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-4-the-interior" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The next milestone was to cut the interior pieces of the sleigh.
The front, back, floor, and seat.</p>
<p>Luckily, that spare sheet of plywood I bought was still intact, so we could use it instead of having to buy another one.</p>
<p>Holding the two sides of the sleigh apart gave us a desired width of 800 mm.
Because we had projected the original design onto the plywood, we could no longer rely on the measurements provided in the design.</p>
<p>Ours was set to take on a life of its own, and we had to embrace that.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2173_hu_b930fc836342a182.jpeg 330w, /2025/12/building-a-sleigh/IMG_2173_hu_1fd53f49284dd8e.jpeg 660w, /2025/12/building-a-sleigh/IMG_2173_hu_b458844bf1ec89de.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2173_hu_4cfa8f32e12a0155.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2173_hu_1fd53f49284dd8e.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2173_hu_4cfa8f32e12a0155.jpeg"
          
          title="All of the parts, finally cut"
        />
    </span>
  
    <figcaption class="text-center">All the parts, finally cut</figcaption>
  
</figure>

<p>The next problem was how we were going to attach all these parts together.</p>
<p>In the original design (as shown in the YouTube video), the sides of the sleigh were connected to the interior pieces using barrel bolts.
This was possible as the wood used was 18 mm plywood, which is thick enough to drill a hole for the barrel bolt to sit in.</p>
<p>Unfortunately, we were using 12 mm plywood, which is not thick enough to do this, so I had to come up with a different solution.</p>
<p>I cut some 24 mm wide strips of the 12 mm plywood and glued them into pairs.
I cut each of these pairs into 100 mm lengths, giving me &lsquo;blocks&rsquo; that I could use to connect the sides to the interior.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2176_hu_fe38b1868eb5bbcd.jpeg 330w, /2025/12/building-a-sleigh/IMG_2176_hu_7f8f5744b27c80fb.jpeg 660w, /2025/12/building-a-sleigh/IMG_2176_hu_c048c81ca84b694d.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2176_hu_b49a595e30c2965b.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2176_hu_7f8f5744b27c80fb.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2176_hu_b49a595e30c2965b.jpeg"
          
          title="The blocks used to connect the sides to the interior"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2192_hu_ae1c82622e970282.jpeg 330w, /2025/12/building-a-sleigh/IMG_2192_hu_421ab8ec3c27cafb.jpeg 660w, /2025/12/building-a-sleigh/IMG_2192_hu_d6afc740caeb764a.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2192_hu_790480e6611d6acd.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2192_hu_421ab8ec3c27cafb.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2192_hu_790480e6611d6acd.jpeg"
          
          title="The inside of the seat"
        />
    </span>
  
    <figcaption class="text-center">The blocks used to connect the sides to the interior</figcaption>
  
</figure>

<p>What&rsquo;s the phrase?
&ldquo;If it looks stupid, but it works, it ain&rsquo;t stupid.&rdquo;</p>
<p>Each block was screwed into place with two screws from the outside of the sleigh.
This will &lsquo;ruin&rsquo; the look of the outside of the sleigh, but I&rsquo;ll deal with it.</p>
<p>It was at this point I elected to leave the installation of the seat until after we had painted and assembled the rest of the sleigh.
This was mostly because the seat needed to look flush with the main body of the sleigh, and I didn&rsquo;t trust myself to get that right.</p>
<p>We very briefly assembled the sleigh to see how it was coming along, and promptly decided that we are, indeed, mad.</p>
<figure class="items-center mx-auto" style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Always Sunny In Philadelphia crazy meme"
    width="490"
    height="368"
    src="/2025/12/building-a-sleigh/crazy.png"
    srcset="/2025/12/building-a-sleigh/crazy.png 800w, /2025/12/building-a-sleigh/crazy.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/12/building-a-sleigh/crazy.png"></figure>

<h3 class="relative group">Step 5: Painting
    <div id="step-5-painting" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-5-painting" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Now, we could have just assembled the sleigh and dumped it on the front lawn, but that wouldn&rsquo;t have been very Christmassy, would it?</p>
<p>So we set about painting the sleigh.
The sleigh is going to be outside in a British winter, so I wanted to make sure it was suitably protected from the elements.</p>
<p>A long time ago someone much wiser than me said:</p>
<blockquote><p>You can&rsquo;t paint your way out of a lack of preparation.</p>
<p>Do the hard work, and the painting will be easy.</p>
</blockquote><p>So, I touched up a couple of areas with some wood filler and then sanded down any final areas that needed some TLC.
Then, we set about getting two coats of primer on the sleigh.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2177_hu_9e54c6a609536e94.jpeg 330w, /2025/12/building-a-sleigh/IMG_2177_hu_1056dcd7e2287660.jpeg 660w, /2025/12/building-a-sleigh/IMG_2177_hu_35c4de1cf2e07186.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2177_hu_a441dbf8d8e44440.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2177_hu_1056dcd7e2287660.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2177_hu_a441dbf8d8e44440.jpeg"
          
          title="The second coat of undercoat"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2179_hu_add7ba347f921e39.jpeg 330w, /2025/12/building-a-sleigh/IMG_2179_hu_eb8ee09fb0d58041.jpeg 660w, /2025/12/building-a-sleigh/IMG_2179_hu_5f1c9259cee8a55c.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2179_hu_7123bb5984732e41.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2179_hu_eb8ee09fb0d58041.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2179_hu_7123bb5984732e41.jpeg"
          
          title="The third coat of undercoat"
        />
    </span>
  
    <figcaption class="text-center">The first coat of primer</figcaption>
  
</figure>

<p>The primer was pretty easy to apply, but the hard work was yet to come.</p>
<p>We couldn&rsquo;t find &lsquo;gold&rsquo; paint which was also suitable for outdoor use, so we needed to paint the trim and skis yellow, then paint over that with glitter gold paint.
This was going to increase the time waiting between coats significantly.
We needed two coats of yellow, each needing an hour to dry, and then four coats of glitter gold, each also needing two hours to dry.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2187_hu_eb6a70fd53e20e4c.jpeg 330w, /2025/12/building-a-sleigh/IMG_2187_hu_c182fbbee2fe35b6.jpeg 660w, /2025/12/building-a-sleigh/IMG_2187_hu_aa52a1155d6af3c7.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2187_hu_2faed29dd973e71.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2187_hu_c182fbbee2fe35b6.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2187_hu_2faed29dd973e71.jpeg"
          
          title="Painting the trim and skis &amp;#39;gold&amp;#39;"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2189_hu_ac6d5442c3543374.jpeg 330w, /2025/12/building-a-sleigh/IMG_2189_hu_764f4165c49f5092.jpeg 660w, /2025/12/building-a-sleigh/IMG_2189_hu_e7a8ccb3239aa71d.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2189_hu_3e33f7962195b672.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2189_hu_764f4165c49f5092.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2189_hu_3e33f7962195b672.jpeg"
          
          title="First coat of yellow paint on the skis"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2195_hu_3d8266555562df91.jpeg 330w, /2025/12/building-a-sleigh/IMG_2195_hu_685bf09e005ccd01.jpeg 660w, /2025/12/building-a-sleigh/IMG_2195_hu_9d771897b16112fc.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2195_hu_32919d78370169c3.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2195_hu_685bf09e005ccd01.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2195_hu_32919d78370169c3.jpeg"
          
          title="Painting the skis glitter gold"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2199_hu_bb3ec3b6d56aa10b.jpeg 330w, /2025/12/building-a-sleigh/IMG_2199_hu_93608ec27fbb8c95.jpeg 660w, /2025/12/building-a-sleigh/IMG_2199_hu_7ed4df52db8d86d2.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2199_hu_7d79260bd22bb4c.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2199_hu_93608ec27fbb8c95.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2199_hu_7d79260bd22bb4c.jpeg"
          
          title="The finished gold trim and skis"
        />
    </span>
  
    <figcaption class="text-center">Painting the trim and skis &lsquo;gold&rsquo;</figcaption>
  
</figure>

<p>I wish I had a larger space to paint in, as I could only paint one side at a time, and I couldn&rsquo;t begin painting any of the red until the gold was fully dry.</p>
<p>However, after what felt like an eternity, we finally got to the red paint.
This was &lsquo;front door&rsquo; paint.
Thick, glossy, and designed to get everywhere it possibly could.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2200_hu_19ee97097a34f16a.jpeg 330w, /2025/12/building-a-sleigh/IMG_2200_hu_f5698e577193edf9.jpeg 660w, /2025/12/building-a-sleigh/IMG_2200_hu_21c53c41a92e5bdd.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2200_hu_5040c19852bed0eb.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2200_hu_f5698e577193edf9.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2200_hu_5040c19852bed0eb.jpeg"
          
          title="Painting the back panel of the sleigh red"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2206_hu_b9b935ed9ec381.jpeg 330w, /2025/12/building-a-sleigh/IMG_2206_hu_ed4bca1135c95fe7.jpeg 660w, /2025/12/building-a-sleigh/IMG_2206_hu_3939521f63b150f0.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2206_hu_a6745263402e3631.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2206_hu_ed4bca1135c95fe7.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2206_hu_a6745263402e3631.jpeg"
          
          title="Painting the inside of the side panel red"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2204_hu_5b5fa1ee78095c1f.jpeg 330w, /2025/12/building-a-sleigh/IMG_2204_hu_ae5497a11a89d4c3.jpeg 660w, /2025/12/building-a-sleigh/IMG_2204_hu_e53baeb231312cb2.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2204_hu_60b79a5fc90ee25a.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2204_hu_ae5497a11a89d4c3.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2204_hu_60b79a5fc90ee25a.jpeg"
          
          title="The first coat of red on the side panel"
        />
    </span>
  
    <figcaption class="text-center">Painting the body red</figcaption>
  
</figure>

<p>The red only needed two coats, each needing about three hours to dry.
There were far more red bits to paint, as the interior pieces were all red as well, so I resorted to hanging red pieces of plywood from my <a href="https://en.wikipedia.org/wiki/Power_rack" >Power Rack</a> to dry.
Who knew that a power rack could double as a drying rack?</p>
<figure class="items-center mx-auto" style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Painted plywood pieces hanging from a power rack"
    width="1536"
    height="2048"
    src="/2025/12/building-a-sleigh/IMG_2205_hu_9b0e4a7f58fb4a2f.jpeg"
    srcset="/2025/12/building-a-sleigh/IMG_2205_hu_9b0e4a7f58fb4a2f.jpeg 800w, /2025/12/building-a-sleigh/IMG_2205_hu_aff2e08719db4f64.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/12/building-a-sleigh/IMG_2205.jpeg"></figure>
<p>Add &lsquo;spray-painting booth&rsquo; to my ever-growing list of things which would have made this project easier.</p>
<p>Once all the paint was done, we were in the &lsquo;my god we built a sleigh&rsquo; phase of the project.
It was all coming together.</p>

<h3 class="relative group">Step 6: The Assembly
    <div id="step-6-the-assembly" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-6-the-assembly" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Now it was time to put everything together.</p>
<p>This whole project has been an exercise in &lsquo;doing a thing in a space four times smaller than ideal&rsquo;, so assembling the sleigh was going to be no different.</p>
<p>The only indoor space that had a door wide enough for the final product was the Kitchen.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2207_hu_13a0a2a920127c8c.jpeg 330w, /2025/12/building-a-sleigh/IMG_2207_hu_c695934728c4a70b.jpeg 660w, /2025/12/building-a-sleigh/IMG_2207_hu_22a9d61471d007fb.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2207_hu_696419b975f38b83.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2207_hu_c695934728c4a70b.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2207_hu_696419b975f38b83.jpeg"
          
          title="The bottom panel being attached"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_7485_hu_53479e7404043be9.jpeg 330w, /2025/12/building-a-sleigh/IMG_7485_hu_aacf7bc19913997c.jpeg 660w, /2025/12/building-a-sleigh/IMG_7485_hu_c95c92ba743c4861.jpeg 1024w, /2025/12/building-a-sleigh/IMG_7485_hu_d8201cd90b91f2dd.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_7485_hu_aacf7bc19913997c.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_7485_hu_d8201cd90b91f2dd.jpeg"
          
          title="The fully assembled sleigh"
        />
    </span>
  
    <figcaption class="text-center">Assembling the sleigh</figcaption>
  
</figure>

<p>Holding the parts in place was a two-person job, but the wooden blocks made it reasonably straightforward to screw everything together.</p>
<p>The seat, which I had earlier declined to drill the holes for until after painting, was now a simple matter of placing it in the sleigh, using masking tape to record its position, drilling the holes, and screwing it in place.</p>
<p>It was only held in place by two screws through the base of the sleigh, up into the wooden blocks on the back of the seat, but it felt solid enough.
The sleigh wasn&rsquo;t going to be used to carry people.</p>

<h3 class="relative group">Step 7: The Final Touches
    <div id="step-7-the-final-touches" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-7-the-final-touches" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>You can&rsquo;t put a sleigh out for Christmas without some lights.
I stapled some green wire decoration hooks to the rim of the sleigh, which were twisted around the lights to hold them in place<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<figure class="items-center mx-auto" style="width:25%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Green wire decoration hooks"
    width="443"
    height="462"
    src="/2025/12/building-a-sleigh/green_hooks.png"
    srcset="/2025/12/building-a-sleigh/green_hooks.png 800w, /2025/12/building-a-sleigh/green_hooks.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/12/building-a-sleigh/green_hooks.png"></figure>
<p>The lights we had spare had a lit length of about 45 metres, which was more than enough to go around the body of the sleigh once, with plenty left over to drape inside the sleigh.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2209_hu_e8b71a328ccd3a5.jpeg 330w, /2025/12/building-a-sleigh/IMG_2209_hu_e12c8fd771bc0277.jpeg 660w, /2025/12/building-a-sleigh/IMG_2209_hu_212215c69b9934a7.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2209_hu_a49c5a510903fd23.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2209_hu_e12c8fd771bc0277.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2209_hu_a49c5a510903fd23.jpeg"
          
          title="Stapling the fairy lights in place"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/featured_hu_340d6da64f443b04.jpeg 330w, /2025/12/building-a-sleigh/featured_hu_be510fefaa1ba42a.jpeg 660w, /2025/12/building-a-sleigh/featured_hu_8ef80f18cd12ff7a.jpeg 1024w, /2025/12/building-a-sleigh/featured_hu_13a7414dc6d461a6.jpeg 2x"
          src="/2025/12/building-a-sleigh/featured_hu_be510fefaa1ba42a.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/featured_hu_13a7414dc6d461a6.jpeg"
          
          title="The finished sleigh with lights"
        />
    </span>
  
    <figcaption class="text-center">The Sleigh with its pilot</figcaption>
  
</figure>


<h2 class="relative group">The Result
    <div id="the-result" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-result" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>The result is fantastic, if I do say so myself.
The overall look of the final product is a little rough around the edges, but as part of this year&rsquo;s Christmas display, it looks great.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2211_hu_441778ad7c23d4ab.jpeg 330w, /2025/12/building-a-sleigh/IMG_2211_hu_ec63bb172f5e37e.jpeg 660w, /2025/12/building-a-sleigh/IMG_2211_hu_2d93d6428f014e75.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2211_hu_e946298a717d777.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2211_hu_ec63bb172f5e37e.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2211_hu_e946298a717d777.jpeg"
          
          title="Our house with Christmas decorations during the day"
        />
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2025_hu_3c355c2a4d2a9421.jpg 330w, /images/christmas/christmas_2025_hu_fc13c4eccdb904a9.jpg 660w, /images/christmas/christmas_2025_hu_e4a0437b7aa8bbd9.jpg 1024w, /images/christmas/christmas_2025_hu_83115c8096733cf0.jpg 2x"
          src="/images/christmas/christmas_2025_hu_fc13c4eccdb904a9.jpg"
          data-zoom-src="/images/christmas/christmas_2025_hu_83115c8096733cf0.jpg"
          
          title="Our house with Christmas decorations at night"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_2212_hu_489569b0bef82b18.jpeg 330w, /2025/12/building-a-sleigh/IMG_2212_hu_718945c9c11747f2.jpeg 660w, /2025/12/building-a-sleigh/IMG_2212_hu_83a4a353ee8c408e.jpeg 1024w, /2025/12/building-a-sleigh/IMG_2212_hu_cf245c37acef8702.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_2212_hu_718945c9c11747f2.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_2212_hu_cf245c37acef8702.jpeg"
          
          title="Two fans coming to see the lights at night"
        />
    </span>
  
    <figcaption class="text-center">Our House - 2025</figcaption>
  
</figure>

<p>When comparing it against the original design which we started from, there are some noticeable differences.</p>
<p>Given our limited tools, space, and experience, I think we did a damn fine job.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/full-size-santa-sleigh-cnc-vector-files-17_hu_3c0056002eae9023.jpeg 330w, /2025/12/building-a-sleigh/full-size-santa-sleigh-cnc-vector-files-17_hu_633ae40c96f81d24.jpeg 660w, /2025/12/building-a-sleigh/full-size-santa-sleigh-cnc-vector-files-17_hu_24927acb6e16d8b9.jpeg 1024w, /2025/12/building-a-sleigh/full-size-santa-sleigh-cnc-vector-files-17_hu_8a439e8a91b7d5fc.jpeg 2x"
          src="/2025/12/building-a-sleigh/full-size-santa-sleigh-cnc-vector-files-17_hu_633ae40c96f81d24.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/full-size-santa-sleigh-cnc-vector-files-17_hu_8a439e8a91b7d5fc.jpeg"
          
          title="Source https://jayscustomcreations.com/2020/12/full-size-santa-sleigh-free-files/"
        />
        <img
          class="rounded-md"
          srcset="/2025/12/building-a-sleigh/IMG_7485_hu_53479e7404043be9.jpeg 330w, /2025/12/building-a-sleigh/IMG_7485_hu_aacf7bc19913997c.jpeg 660w, /2025/12/building-a-sleigh/IMG_7485_hu_c95c92ba743c4861.jpeg 1024w, /2025/12/building-a-sleigh/IMG_7485_hu_d8201cd90b91f2dd.jpeg 2x"
          src="/2025/12/building-a-sleigh/IMG_7485_hu_aacf7bc19913997c.jpeg"
          data-zoom-src="/2025/12/building-a-sleigh/IMG_7485_hu_d8201cd90b91f2dd.jpeg"
          
          title="Our finished sleigh"
        />
    </span>
  
    <figcaption class="text-center">Left: The Original Design | Right: The Final Product</figcaption>
  
</figure>

<figure class="items-center mx-auto" style="width:50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Obama not bad meme"
    width="490"
    height="356"
    src="/2025/12/building-a-sleigh/not_bad.png"
    srcset="/2025/12/building-a-sleigh/not_bad.png 800w, /2025/12/building-a-sleigh/not_bad.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/12/building-a-sleigh/not_bad.png"></figure>
<p>Cheers Obama.</p>

<h2 class="relative group">Lessons Learned
    <div id="lessons-learned" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lessons-learned" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Retrospective time!</p>
<p>Looking back, what would I do differently?</p>
<ol>
<li>Drill the seat holes before painting the sleigh.</li>
<li>Paint the sides of the sleigh red first, gold second - because the masking tape ripped off the gold.</li>
<li>Glue the trim on after painting the main body - reduce the amount of masking I had to do.</li>
<li>Drill all the holes at an outward angle - so the drill could be more easily positioned during assembly.</li>
<li>Start earlier in the year to give myself more time - we were still painting on the morning of December 1<sup>st</sup>!</li>
<li>Buy some more clamps - you can never have too many clamps.</li>
<li>Buy Trestles - the camping table I was using was not ideal, and did not survive the project.</li>
<li>Get a shop vacuum - my vacuum cleaner was not up to the task of collecting all the dust.</li>
</ol>

<h2 class="relative group">Conclusion
    <div id="conclusion" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#conclusion" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>This was an ambitious project, but one that I am super happy to have completed.
I&rsquo;ve spent most of my adult life writing code, so it was nice to do something physical for a change.
Annoyingly you cannot run &lsquo;Ctrl+Z&rsquo; to undo mistakes in the real world.</p>
<p>If I were a betting man, I would have said there was no way we would have finished it.
But we did, and it looks great.</p>
<p>Thanks for sticking around and reading.</p>
<p>Merry Christmas! &#x1f384;</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I completely forgot to take pictures of this process, so you&rsquo;ll have to use your imagination.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>I use these wires <em>everywhere</em> at Christmas time. They are super useful.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="diy"/><category term="christmas"/><summary type="html">For some insane reason, I decided to build a &amp;lsquo;full size&amp;rsquo; Santa Sleigh for Christmas.</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 3</title><link href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-3/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 3"/><published>2025-12-03T00:00:00+00:00</published><updated>2025-12-03T22:43:24+00:00</updated><id>https://thega.me.uk/fiction/2025-12-days-of-short-stories-3</id><content type="html" xml:base="https://thega.me.uk/fiction/2025-12-days-of-short-stories-3/"><![CDATA[<p>It had not been more than a handful of months since our last case before my good friend Heisler and I had decided to catch a well-earned break.
The affair had been quite the enigma and had taxed the two of us to the limits of our waning sanity.</p>
<p>I suggested that we vacation in Rome — a city of distinct history and fantastic beauty — and our flights were due to leave later in the day.
Arriving at Heisler&rsquo;s apartment I was met with an entirely flustered man.</p>
<p>Heisler was a short, stout, unapologetically German fellow.
Time had treated him well, and he had treated himself much more so.
Although he looked like he might be more at home running a university, he was one of the brightest minds I had ever met.
To see him perturbed was not abnormal, but it was unexpected.</p>
<p>&ldquo;Whatever is the matter?&rdquo; I enquired.<br>
&ldquo;Oh, it&rsquo;s ever so terrible Manuel.
Ever so terrible indeed&rdquo; he muttered, so quietly I could barely hear him.<br>
&ldquo;Not so terrible that you cannot enlighten an old friend of the bother, I hope&rdquo;.<br>
&ldquo;It is, <em>Mein Freund</em>.
It is ever so terrible&rdquo;.<br>
He invited me into the kitchen where he put a kettle on to boil.<br>
&ldquo;Do you remember the Sergeant we met when we were on safari in Zuzuland?&rdquo; he asked.<br>
&ldquo;Why yes, yes I do.
Redhead with a fondness for scotch, correct?
His name escapes me&rdquo;.<br>
&ldquo;Willis&rdquo; Heisler interjected.
&ldquo;We had been keeping in contact over email.
He had a very keen mind.
Very keen indeed.
Lovely family.&rdquo;<br>
&ldquo;You still haven&rsquo;t informed me of the matter&rdquo; I said, frustration bearing down on me.</p>
<p>&ldquo;Willis, you see, had been spending some time in the arctic circle.
Research of some sort&rdquo; Heisler continued.
I could feel him inching towards a point.<br>
&ldquo;He was staying in a small town called Ilulissat, in western Greenland.
But he missed the birthday of his husband last week, you see&rdquo;.<br>
&ldquo;I&rsquo;m afraid I don&rsquo;t, still&rdquo; I stated.<br>
&ldquo;Many men miss their spouses&rsquo; birthdays.
It hardly seems like a matter for you to be pacing around instead of us getting the train to the airport&rdquo; I continued.
&ldquo;Not Willis, <em>Mein Freund</em>, he was an ever so diligent man I had learned.
A man most glued to his diary and regimen, he was&rdquo;.</p>
<p>I decided to just let the air sit, waiting for him to continue.</p>
<p>&ldquo;<em>Wie dem auch sei</em>, his husband was rather alarmed by his lack of communication, so he had reached out to him but has received no response&rdquo; Heisler explained.<br>
&ldquo;He emailed me this morning requesting my assistance, believing something horrible has befallen his betrothed&rdquo;.<br>
&ldquo;I rather don&rsquo;t think one man forgetting to send a gift basket to his other half warrants your attention, does it?
Have they reached out to the local police?&rdquo; I exclaimed.<br>
&ldquo;I thought the same at first, however they have neglected to take an interest in the matter, so my assistance, it was requested.&rdquo;\</p>
<p>A few moments passed.
His last words hanging heavy with the anticipation of disappointment.
Deep down I realised that I wasn&rsquo;t going to get to see the Colosseum.</p>
<p>&ldquo;And you intend to go and investigate&rdquo; I eventually said.<br>
&ldquo;<em>Ja</em>, I believe I must&rdquo; he responded.</p>
<p>&ldquo;Well I hope Greenland is nice this time of year&rdquo; I said over my steaming cup of tea.
A beaming smile washed itself onto Heislers face.
&ldquo;<em>Fantastisch</em>&rdquo; he bellowed, slapping me between the shouler blades; knocking half of my tea onto the counter.<br>
&ldquo;I knew I could count on you.
I will book us on the first flight available&rdquo;.</p>
<p>A day later, after a lengthy layover in Nuuk, we were standing outside the address given to us by Willis&rsquo;s partner.
Ilulissat was beautiful, if not incredibly cold.
Luckily Heisler and I had hiked one or two mountains in our time together, so we had all the cold weather gear we needed for the brutal winds.
The air was angry and everything pointed to a storm coming in.</p>
<p>The apartment was painted bright red, which would have made it stand out in almost every other city in the world.
In Ilulissat however, every building was a bright hue of one colour or another.
Maybe something about living in the cold made one seek some vibrancy in other ways.</p>
<p>Heisler rapped on the door.
No answer followed.
He knocked again, harder this time.<br>
&ldquo;No answer&rdquo; I said, pointlessly.<br>
&ldquo;Try the handle&rdquo;.<br>
Heisler turned the knob and the door yielded wordlessly.<br>
&ldquo;It must be a very safe area, it seems&rdquo; Heisler quipped.
In our over-eagerness to get in from the cold we abandoned manners and shuffled inside.</p>
<p>It did not take long for us to find Heislers friend.<br>
&ldquo;<em>Mein Gott</em>&rdquo; Heisler uttered.</p>
<p>The body of the man I remembered as Willis lay motionless on the kitchen floor.
A crimson stain — not dissimilar from the colour of the house I morbidly thought — circled the corpse.<br>
&ldquo;I guess this explains why he missed his husband&rsquo;s birthday&rdquo; I said.<br>
&ldquo;It does, most certainly&rdquo; Heisler responded.
&ldquo;Most certainly indeed&rdquo;.</p>
<p>I noticed something sticking from Willis&rsquo; back.
A small, striped, curved shape.<br>
&ldquo;Is that&hellip;
Is that a candy-cane?&rdquo; I stated in disbelief as Heisler circled around the body.<br>
&ldquo;It does appear so, does it not?&rdquo; he said, crouching down to take a closer look.
As he did, I noticed something behind me caught his eye.
Turning I gasped.</p>
<p>There on the wall behind us, in large black dusty letters, as if written with charcoal, a message read:</p>
<p><em>Only the naughty pry<br>
Stop looking for us<br>
Or else</em></p>
<p>&ldquo;It would appear we have our next case, <em>Mein Freund</em>&rdquo; Heisler declared behind me.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Day 3 of 12 Days of Short Stories 2025</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 1</title><link href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-1/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 1"/><published>2025-12-01T00:00:00+00:00</published><updated>2025-12-05T17:02:20+00:00</updated><id>https://thega.me.uk/fiction/2025-12-days-of-short-stories-1</id><content type="html" xml:base="https://thega.me.uk/fiction/2025-12-days-of-short-stories-1/"><![CDATA[<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Warning
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>I spent most of the day working on other <a href="https://thega.me.uk/2025/12/building-a-sleigh/" ><em>Christmas</em> stuff</a>, and then the evening in A&amp;E after a nasty fall.</p>
<p>So, this one is a day late, and a bit rushed.</p></div></div><p>&ldquo;I hate climbing stairs.
It feels like I&rsquo;m always climbing stairs&rdquo; Rylan heard Maximo grumble from just around the corner of the next flight of stairs.
&ldquo;I&rsquo;ve told you before old man, just tune it out with some media&rdquo; Rylan shouted after him.
Although, Rylan had to admit to himself that he too, hated the amount of stairs he had to climb.</p>
<p>Being a Barrier Repair Engineer had been a dream of his when he was younger.
A small boy with big dreams — where he would be the one to tame the wasteland that circled the metropolis he was trapped inside.
He had spent countless nights staring at the picture of stars, pinned to the roof of his bunk, in the hopes that he would see real stars one day.
Touch plants so numerous that a rooftop garden would be a fishbowl in an ocean of fauna.</p>
<p>Repairing the Barrier took him as close as humanly possible to the outside world, a few steps from freedom.
It was one of a handful of jobs that would take you above the rooftops, looking down upon the chaotically-assembled houses, stalls, and offices that made up the winding streets of the megacity.</p>
<p>The wall was a marvel of human engineering, but one that lacked lifts.
Rylan knew about lifts from the videos he consumed day in, day out.
Media from before the planet-ending war was not forbidden, but it was ancient.
Some fancy, important, well-dressed (and unaugmented) executive would fly up and down the side of a skyscraper &lsquo;doing business&rsquo;.</p>
<p>If only they could have installed lifts in the kilometre-high Barrier, Rylan thought to himself.</p>
<p>&ldquo;If only they had put one of those bloody lifts in here&rdquo; Maximo continued to complain sourly.</p>
<p>Rylan said nothing, but pulled up a classical nature documentary on his contacts HUD, to distract himself from the burning in his thighs.</p>
<p>Nothing further was said as they finished the climb up the section of the Barrier which they had been assigned today.
Reaching the top, both Rylan and Maximo took time to gather themselves.
They would be up here for the day, and had only been given a handful of tasks to perform; they had plenty of time to relax.</p>
<p>&ldquo;What&rsquo;s up first?&rdquo; Rylan enquired after a long while.<br>
&ldquo;The magnetized dust shield has been showing some anomalous voltages overnight, so command wants us to do a system cycle&rdquo; Maximo responded, a distinct lack of passion at the upcoming work coming across in his tone.<br>
&ldquo;I hate doing that.
While it is cycling the dust <em>literally</em> gets everywhere&rdquo; Rylan said.<br>
&ldquo;That&rsquo;s because you insist on standing over the demarcation line when it is cycling&rdquo; Maximo retorted.<br>
&ldquo;Well, that&rsquo;s the only place you can see anything.
It&rsquo;s all endless wasteland out there, but it&rsquo;s still something&rdquo;</p>
<p>The demarcation line sat 10 metres back from the edge of the barrier; a broad faded yellow scar around the circumference of the giant wall.
Every Barrier Repair Engineer was given explicit instructions to not pass it without prior authorization, but after Rylan had once accidentally crossed it, and nothing happened, he had come to the conclusion that no one was watching that closely; not like they were down in the megacity.</p>
<p>Rylan could hear Maximo pressing each key on the control panel behind him, as he looked out over the edge of the wall.
He was confronted by the stark, lifeless wasteland that trapped him inside his concrete pen.
When he had first seen it, his heart had dropped.
There had always been a little sliver of hope that the feeds were fake, that the war was a fabrication.
Now, a dull ache occupied the part of his heart hope had once lived in.</p>
<p>He was unable to mourn the realness of the wasteland, however.
Expressing regret over The Institute&rsquo;s part in the war could be seen as a betrayal.
The Institute governed everything in the megacity, and it was particularly unforgiving of those who questioned its authority.</p>
<p>The familiar hum of the magnetic lines of the Barrier died out.
When they had fully shut down, an eerie silence fell over both of the engineers.
A few more key presses from behind Maximo and the low hum began to build again.</p>
<p>At that moment, when the barrier was off, dust peppered the front of Rylan&rsquo;s uniform.
Unlike other times, a small amount got in his eye.
He rubbed his eye, dislodging his contact HUD, causing it to power off.</p>
<p>His breath caught.
Where once an inescapable wasteland lay, now a bright green forest stood.
Trees upon trees, upon trees, stretching over the horizon.</p>
<p>Rylan&rsquo;s contact HUD rebooted, and the forest became a sandy no-man&rsquo;s-land once more; overlaid with air quality stats and a notification from his sister.</p>
<p>&ldquo;Rylan, you OK buddy?&rdquo; Maximo enquired, although Rylan was not listening.
He reached up and pulled out his contact HUD to check it wasn&rsquo;t a momentary moment of madness.</p>
<p>The forest was beautiful.
A beautiful crystal-clear lake nestled among them.
Birds circled the treetops.</p>
<p>&ldquo;Rylan, you good?&rdquo; Maximo asked again, more concern in his voice this time.</p>
<p>Rylan snapped back to reality.
&ldquo;Yeah man, just admiring the view&rdquo; he hastily cobbled together, not letting too much of his panic spill over to his words.</p>
<p>&ldquo;Alright, we got work to do, come on&rdquo; Maximo called after him as he began walking down the Barrier.
&ldquo;Air filters can&rsquo;t clean themselves&rdquo;.</p>
<p>Thoughts ravaged Rylan&rsquo;s mind.
What was real?
The wasteland he had known all his life?
The contact HUDs were designed to be worn from birth; he had experienced very little without them.
Sure they broke, but another pair could be picked up within the hour.</p>
<p>Had they been hiding the real world from him?</p>
<p>What should he do now?</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Day 1 of 12 Days of Short Stories 2025</summary></entry><entry><title type="html">Twelve Days of Short Stories 2025</title><link href="https://thega.me.uk/2025/11/twelve-days-of-short-stories-2025/" rel="alternate" type="text/html" title="Twelve Days of Short Stories 2025"/><published>2025-11-13T22:06:00+00:00</published><updated>2025-12-26T09:17:38+00:00</updated><id>https://thega.me.uk/2025/11/twelve-days-of-short-stories-2025</id><content type="html" xml:base="https://thega.me.uk/2025/11/twelve-days-of-short-stories-2025/"><![CDATA[<p>Last year I did the <a href="https://thega.me.uk/2024/11/twelve-days-of-short-stories/" >Twelve Days of Short Stories</a>, and it was a lot of fun.</p>
<p>This year I am going to do it again.
Unfortunately, I have not written anything since then, but &ldquo;if at first you don&rsquo;t succeed, try, try again&rdquo;.</p>
<p>As a reminder, this is my attempt to <code>embrace the suck</code>; accept I am not good at writing, and just write.
The goal is to write a short story every other day for twelve days, starting on the 1<sup>st</sup> of December and finishing on the 23<sup>rd</sup>.</p>
<p>As a small change on last year, instead of selecting a point of view for the story, I have selected a random genre.</p>
<p>This year&rsquo;s prompts are:</p>
<table>
  <thead>
      <tr>
          <th>Day</th>
          <th>Primary Word</th>
          <th>Backup Word</th>
          <th>Genre</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-1/" >1</a></td>
          <td><del><code>hate</code></del></td>
          <td><code>engineer</code></td>
          <td><code>Dystopian</code></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-3/" >3</a></td>
          <td><code>short</code></td>
          <td><del><code>rich</code></del></td>
          <td><code>Detective</code></td>
      </tr>
      <tr>
          <td><del>5</del></td>
          <td><code>reign</code></td>
          <td><code>descent</code></td>
          <td><code>Fantasy</code></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-7/" >7</a></td>
          <td><code>piano</code></td>
          <td><del><code>formula</code></del></td>
          <td><code>Mystery</code></td>
      </tr>
      <tr>
          <td><del>9</del></td>
          <td><code>theatre</code></td>
          <td><code>desk</code></td>
          <td><code>Adventure</code></td>
      </tr>
      <tr>
          <td><del>11</del></td>
          <td><code>paint</code></td>
          <td><code>glove</code></td>
          <td><code>Sci-Fi</code></td>
      </tr>
      <tr>
          <td><del>13</del></td>
          <td><code>abolish</code></td>
          <td><code>power</code></td>
          <td><code>Adventure</code></td>
      </tr>
      <tr>
          <td><del>15</del></td>
          <td><code>mirror</code></td>
          <td><code>kneel</code></td>
          <td><code>Romance</code></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-17/" >17</a></td>
          <td><code>cooperate</code></td>
          <td><del><code>manage</code></del></td>
          <td><code>High Fantasy</code></td>
      </tr>
      <tr>
          <td><del>19</del></td>
          <td><code>concentrate</code></td>
          <td><code>zone</code></td>
          <td><code>Military Fiction</code></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-21/" >21</a></td>
          <td><code>bake</code></td>
          <td><del><code>fight</code></del></td>
          <td><code>Fairy Tale</code></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/2025-12-days-of-short-stories-23/" >23</a></td>
          <td><code>document</code></td>
          <td><del><code>profit</code></del></td>
          <td><code>Crime</code></td>
      </tr>
  </tbody>
</table>
<p>Let&rsquo;s see how I do!
I will update the table above with links as I go.</p>
<p><a href="https://thega.me.uk/fiction/" >Click here</a> to see all of my writing.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="fiction"/><summary type="html">It&amp;rsquo;s that time of the year again, more short stories following last years success</summary></entry><entry><title type="html">Exploring Monopoli</title><link href="https://thega.me.uk/2025/11/exploring-monopoli/" rel="alternate" type="text/html" title="Exploring Monopoli"/><published>2025-11-02T10:57:53+00:00</published><updated>2026-01-03T19:36:07+00:00</updated><id>https://thega.me.uk/2025/11/exploring-monopoli</id><content type="html" xml:base="https://thega.me.uk/2025/11/exploring-monopoli/"><![CDATA[<p>Man, what a year 2025 has been up until now.</p>
<p>I&rsquo;ve been working almost non-stop since the beginning of the year, only stopping back in April for three weeks in Spain, to support my partner through a major surgery (which I am not counting as a holiday<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>).</p>
<p>By late September I was 100% burned out.</p>
<p>Luckily, we were invited to a wedding in Italy.
Two of my partner&rsquo;s good friends were getting married, and we decided that, given we were paying for flights, we might as well stay longer to make it into a holiday.</p>
<figure>
        <img class="my-0 rounded-md nozoom" src="london_to_bari.svg" alt="London to Bari" />
        <figcaption>London to Bari (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=51.1537,-0.1821&amp;destination=41.1171,16.8719" >Open in Google Maps</a>)</figcaption>
    </figure>

<h2 class="relative group">Monopoli
    <div id="monopoli" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#monopoli" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>The wedding was just outside of Torre Canne in Puglia, and a coach had been booked to pick guests up from either <a href="https://en.wikipedia.org/wiki/Monopoli" >Monopoli</a> or Bari.
So we had a choice of where to stay.</p>
<p>Bari looked nice, but we decided to stay in Monopoli<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, as it came highly recommended as a particularly beautiful coastal town.</p>
<p>This turned out to be a great decision, as the town was perfect for exploring on foot, had a broad selection of restaurants, and was just a very pretty place to be.
If we ignore the absolute chaos of renting a car from the airport<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, and trying to park it on narrow Italian streets, the town was a good base of operations for exploring the local area.</p>
<p>We stayed at the <a href="https://www.casacimino.com/en" >B&amp;B Casa Cimino</a>, which was a charming little B&amp;B.
The room was spacious, the hosts were friendly, but I will not miss the stairs up to our room on the second floor.</p>
<p>Over the ten days we were in Italy, coming back each day to Monopoli meant that we had lots of time to relax and enjoy the beautiful surroundings.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="A picture of myself looking out over the Sea, in Monopoli, Italy"
    width="1536"
    height="2048"
    src="/2025/11/exploring-monopoli/IMG_6935_hu_edfb51aec2044d99.jpg"
    srcset="/2025/11/exploring-monopoli/IMG_6935_hu_edfb51aec2044d99.jpg 800w, /2025/11/exploring-monopoli/IMG_6935_hu_4723e2ae653233e4.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/11/exploring-monopoli/IMG_6935.jpg"><figcaption>Looking out over the Sea</figcaption></figure>
<p>I have a particular love of architecture, and the narrow, often labyrinthine streets of Monopoli were a joy to explore.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_1995_hu_319897c9f9470d79.jpg 330w, /2025/11/exploring-monopoli/IMG_1995_hu_37a598446d6f568.jpg 660w, /2025/11/exploring-monopoli/IMG_1995_hu_4cf1f7758db4bac9.jpg 1024w, /2025/11/exploring-monopoli/IMG_1995_hu_4f5f35bb5f3ad87d.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_1995_hu_37a598446d6f568.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_1995_hu_4f5f35bb5f3ad87d.jpg"
          
          title="A quiet street in Monopoli, at night"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_2009_hu_a70716a6f0f2d3df.jpg 330w, /2025/11/exploring-monopoli/IMG_2009_hu_e51ca1ee495913d8.jpg 660w, /2025/11/exploring-monopoli/IMG_2009_hu_770bffa233a22ebb.jpg 1024w, /2025/11/exploring-monopoli/IMG_2009_hu_34c6f2f25e389461.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_2009_hu_e51ca1ee495913d8.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_2009_hu_34c6f2f25e389461.jpg"
          
          title="Basilica Cattedrale Maria SS. della Madia"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_2061_hu_9c228d0c8f329e8b.jpg 330w, /2025/11/exploring-monopoli/IMG_2061_hu_cc6d77b5afcf00b9.jpg 660w, /2025/11/exploring-monopoli/IMG_2061_hu_902785cad01cf6b7.jpg 1024w, /2025/11/exploring-monopoli/IMG_2061_hu_bcc949b0cab9c2b1.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_2061_hu_cc6d77b5afcf00b9.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_2061_hu_bcc949b0cab9c2b1.jpg"
          
          title="Another nighttime street in Monopoli"
        />
    </span>
  
</figure>

<p>Every street you came to was picturesque, in its own way.
Day or night, each street gave an impression of the lives of the people living, and working there.</p>
<p>Similar to Madrid, I loved the mixed usage of buildings.
The way that shops, restaurants, workshops, and homes are all intermingled between one another, astounds me.</p>
<p>Sure, being woken up by the sound of a carpenter sanding a door is not the most fun thing in the world.
But it <em>was</em> unique<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</p>

<h2 class="relative group">Grotte di Castellana
    <div id="grotte-di-castellana" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#grotte-di-castellana" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="monopoli_to_grotte_di_castellana.svg" alt="Monopoli to Grotte di Castellana" />
        <figcaption>Monopoli to Grotte di Castellana (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=40.9524,17.3034&amp;destination=40.8759,17.1480" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>First on our list of things to see in the area was the <a href="https://www.grottedicastellana.it/" >Grotte di Castellana</a>.
It is a famous cave system that was a short drive away from Monopoli.</p>
<p>My first impression of the area was that it reminded me of a small American town&rsquo;s main street.
Open-fronted stores and cafés ran along each side of the road, from the car park to the Grotto.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_2015_hu_a24798c6e0e6c348.jpg 330w, /2025/11/exploring-monopoli/IMG_2015_hu_a3f6f3fb8cabf1e.jpg 660w, /2025/11/exploring-monopoli/IMG_2015_hu_9112fd8ca17e8ce2.jpg 1024w, /2025/11/exploring-monopoli/IMG_2015_hu_82e0bbca80d5940.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_2015_hu_a3f6f3fb8cabf1e.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_2015_hu_82e0bbca80d5940.jpg"
          
          title="A view out of the main entrance to the caves at Grotte di Castellana"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_2017_hu_ad89b5e0d949e293.jpg 330w, /2025/11/exploring-monopoli/IMG_2017_hu_e99308452393c0a5.jpg 660w, /2025/11/exploring-monopoli/IMG_2017_hu_5373d61d2e645deb.jpg 1024w, /2025/11/exploring-monopoli/IMG_2017_hu_94f9a736432f171a.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_2017_hu_e99308452393c0a5.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_2017_hu_94f9a736432f171a.jpg"
          
          title="Stalagmites and stalactites in the caves"
        />
    </span>
  
</figure>

<p>I won&rsquo;t repeat the <a href="https://en.wikipedia.org/wiki/Castellana_Caves" >Wikipedia page</a> for the caves<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, but I will say that I thoroughly enjoyed the tour.
It took about an hour to make our way along the one and a half kilometres of caves on the &lsquo;complete tour&rsquo; to the &lsquo;White Cave&rsquo; at the end.
Then, it was another hour to make our way back to the start.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="A map of the grotte di castellana"
    width="1290"
    height="252"
    src="/2025/11/exploring-monopoli/grotte_map_hu_b47feb4e07325e3b.png"
    srcset="/2025/11/exploring-monopoli/grotte_map_hu_b47feb4e07325e3b.png 800w, /2025/11/exploring-monopoli/grotte_map_hu_3b72c08f6cbd0118.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/11/exploring-monopoli/grotte_map.png"><figcaption>Map of the caves. From <a href="https://www.grottedicastellana.it" >https://www.grottedicastellana.it</a></figcaption></figure>
<p>We were not allowed to take photos or videos once we got into the main part of the caves, so I don&rsquo;t have any pictures of the most impressive parts.
However, the tour was well worth the money, and I would recommend it to anyone who is in the area.</p>
<p>Take grippy shoes.
It gets slippery in there.
If you are from the UK however, don&rsquo;t worry about bringing a coat.
It is 14–18 °C in the caves.
Basically summer.</p>
<p>★★★★☆ 4/5 - A fun tour if you love caves (and who doesn&rsquo;t love caves?).</p>

<h2 class="relative group">Alberobello
    <div id="alberobello" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#alberobello" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="monopoli_to_alberobello.svg" alt="Monopoli to Alberobello" />
        <figcaption>Monopoli to Alberobello (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=40.9524,17.3034&amp;destination=40.7821,17.2380" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Next up on our far-too-brief tour was Alberobello.
Famous for its unique &rsquo;trullo&rsquo; buildings, it has been designated as a UNESCO World Heritage Site, and is known as one of the most beautiful villages in Italy.</p>
<p>Naturally we had to take a look.</p>
<p>A small section of the city is made up of &rsquo;trulli&rsquo;, traditional huts with conical roofs.
Interspersed with actual homes, many of these buildings have been converted into tourist shops, mostly selling the same fifty items.</p>
<p>A couple of unique stores selling many items I couldn&rsquo;t put in my luggage were dotted around.
These may or may not have been the source of all the Limoncello we brought back with us.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_2025_hu_2822f974ebfcc0ba.jpg 330w, /2025/11/exploring-monopoli/IMG_2025_hu_ae12492d1de22c58.jpg 660w, /2025/11/exploring-monopoli/IMG_2025_hu_d4581f804c064384.jpg 1024w, /2025/11/exploring-monopoli/IMG_2025_hu_83d6ca15e1b9e9a2.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_2025_hu_ae12492d1de22c58.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_2025_hu_83d6ca15e1b9e9a2.jpg"
          
          title="Trulli in Alberobello"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/featured_hu_8782f5cf49ba9ac9.jpg 330w, /2025/11/exploring-monopoli/featured_hu_22eb940b38cd8f09.jpg 660w, /2025/11/exploring-monopoli/featured_hu_c7582d8820d6ea57.jpg 1024w, /2025/11/exploring-monopoli/featured_hu_babaa9792595ebf7.jpg 2x"
          src="/2025/11/exploring-monopoli/featured_hu_22eb940b38cd8f09.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/featured_hu_babaa9792595ebf7.jpg"
          
          title="A view from the gardens in Alberobello"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7054_hu_acc30d2755be9648.jpg 330w, /2025/11/exploring-monopoli/IMG_7054_hu_3f786e8c50b17bc.jpg 660w, /2025/11/exploring-monopoli/IMG_7054_hu_a57be8caade6cc9c.jpg 1024w, /2025/11/exploring-monopoli/IMG_7054_hu_c82538cc0e83abba.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7054_hu_3f786e8c50b17bc.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7054_hu_c82538cc0e83abba.jpg"
          
          title="A Trullo with a conical roof in Alberobello"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7052_hu_e9aa39dbc88db1db.jpg 330w, /2025/11/exploring-monopoli/IMG_7052_hu_b8d3393af916285f.jpg 660w, /2025/11/exploring-monopoli/IMG_7052_hu_65abe4d2b83458a8.jpg 1024w, /2025/11/exploring-monopoli/IMG_7052_hu_c1800ca01abba80d.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7052_hu_b8d3393af916285f.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7052_hu_c1800ca01abba80d.jpg"
          
          title="One of the Alberobello locals"
        />
    </span>
  
</figure>

<p>We went twice; the first visit was abandoned due to torrential rain.
On the second, it was a lovely place to walk around, and it was good to see the unique architecture of the area.</p>
<p>★★★★☆ 4/5 - Unique architecture you can&rsquo;t see anywhere else.</p>

<h2 class="relative group">Grottaglie
    <div id="grottaglie" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#grottaglie" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="monopoli_to_grottaglie.svg" alt="Monopoli to Grottaglie" />
        <figcaption>Monopoli to Grottaglie (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=40.9524,17.3034&amp;destination=40.5338,17.4324" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>The region of Puglia is known for its ceramics, and Grottaglie has been called the &lsquo;Ceramic City of Puglia&rsquo;.</p>
<p>So, we had to go and see what the fuss was about.</p>
<p>The old town was similar to many in the area, with narrow streets, winding up a steep hill to a place of note at the top.
In this case, it was the Ceramics museum, which had a selection of historical and modern ceramics on display.</p>
<p>Unfortunately, we had a habit of leaving the hotel, and getting somewhere just as it was closing for the midday break.
We entered the museum thirty minutes before it closed, but I felt like I could have spent at least an hour or so browsing the exhibits.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7038_hu_ac427c459112b746.jpg 330w, /2025/11/exploring-monopoli/IMG_7038_hu_6429298bf2a65059.jpg 660w, /2025/11/exploring-monopoli/IMG_7038_hu_938113ecee05b824.jpg 1024w, /2025/11/exploring-monopoli/IMG_7038_hu_ae739333c4a02b74.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7038_hu_6429298bf2a65059.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7038_hu_ae739333c4a02b74.jpg"
          
          title="Ceramic steps in Grottaglie"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7040_hu_8667aac39e8cb479.jpg 330w, /2025/11/exploring-monopoli/IMG_7040_hu_9243c630de6cd98c.jpg 660w, /2025/11/exploring-monopoli/IMG_7040_hu_883a2b2848d7f618.jpg 1024w, /2025/11/exploring-monopoli/IMG_7040_hu_9938cb78d8d8661f.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7040_hu_9243c630de6cd98c.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7040_hu_9938cb78d8d8661f.jpg"
          
          title="Old vases in the ceramics museum"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7042_hu_8122c3be23e42062.jpg 330w, /2025/11/exploring-monopoli/IMG_7042_hu_9ad9ae6d5bb1884c.jpg 660w, /2025/11/exploring-monopoli/IMG_7042_hu_c487f97bd7bc3633.jpg 1024w, /2025/11/exploring-monopoli/IMG_7042_hu_15fe4f0478aedcde.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7042_hu_9ad9ae6d5bb1884c.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7042_hu_15fe4f0478aedcde.jpg"
          
          title="Modern art in the ceramics museum"
        />
    </span>
  
</figure>

<p>The town is full of ceramic shops, some selling reasonably cheap tourist items, however many were by actual artists, showing off their beautiful artwork.
I was far too poor to afford anything that could be considered &lsquo;art&rsquo;, but it was nice to look at.</p>
<p>★★★☆☆ 3/5 - It was really out of our way, and I felt like you need a decent amount of money to pick up anything unique.
I only saw the Ceramic Quarter, so maybe the rest of the city is worth exploring.</p>

<h2 class="relative group">Ostuni
    <div id="ostuni" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ostuni" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="monopoli_to_ostuni.svg" alt="Monopoli to Ostuni" />
        <figcaption>Monopoli to Ostuni (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=40.9524,17.3034&amp;destination=40.7343,17.5784" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Now, by this point in the holiday we had established a pattern of picking a parking place which charges for the day.
Street parking was a thing in most of the towns, but it was not normally worth driving in circles waiting for a space to free up.
So we would just find somewhere on the map that had &lsquo;your car will not be broken into&rsquo; vibes, and park there.</p>
<p>Yes, it was more expensive because we were paying for the whole day, but only staying a couple of hours.
But, at around €10, the stress of trying to find a spot was not worth the extra €5 we might have saved.</p>
<p>I mention this because in Ostuni, I found <a href="https://maps.app.goo.gl/a1KdrbSUpUyoaBEQA" >a place that had reviews</a> saying &ldquo;Owner is very friendly&rdquo;, and &ldquo;The owner is very welcoming&rdquo;.
Alright, why not.</p>
<p>True to the reviews&rsquo; word, this guy was a character.
He <em>was</em> very friendly, and very welcoming.</p>
<p>10/10 would park there again.</p>
<p>After he gave us directions to the town, we came to a large avenue that runs along the outside walls of Ostuni.
The panoramic view of the Puglian countryside and the sea beyond was breathtaking<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="The view from the &lsquo;Viale Oronzo Quaranta&rsquo;"
    width="2730"
    height="1536"
    src="/2025/11/exploring-monopoli/IMG_7069_hu_7ea2756555cf4509.jpg"
    srcset="/2025/11/exploring-monopoli/IMG_7069_hu_7ea2756555cf4509.jpg 800w, /2025/11/exploring-monopoli/IMG_7069_hu_4b7c257d7a1964e8.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/11/exploring-monopoli/IMG_7069.jpg"></figure>
<p>Ostuni is famous for its tall, whitewashed walls, but I will always remember it as the town of tiny cars driving through impossibly narrow streets.</p>
<figure style="width: 25%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Small electric car in Ostuni"
    width="300"
    height="400"
    src="/2025/11/exploring-monopoli/tiny_cars.gif"
    srcset="/2025/11/exploring-monopoli/tiny_cars.gif 800w, /2025/11/exploring-monopoli/tiny_cars.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/11/exploring-monopoli/tiny_cars.gif"></figure>
<p>Italy has to be the only legitimate place to own a Citroën Ami.
I saw maybe ten of them in Ostuni alone.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7071_hu_324ae9cc9fac97ec.jpg 330w, /2025/11/exploring-monopoli/IMG_7071_hu_910f5249f602c129.jpg 660w, /2025/11/exploring-monopoli/IMG_7071_hu_29270f7096a5b5e7.jpg 1024w, /2025/11/exploring-monopoli/IMG_7071_hu_7d6ebead9e632f06.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7071_hu_910f5249f602c129.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7071_hu_7d6ebead9e632f06.jpg"
          
          title="The narrow streets of Ostuni"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7077_hu_7bf819cd19021d56.jpg 330w, /2025/11/exploring-monopoli/IMG_7077_hu_404cce02e87b5778.jpg 660w, /2025/11/exploring-monopoli/IMG_7077_hu_bfe618c03f5f6f41.jpg 1024w, /2025/11/exploring-monopoli/IMG_7077_hu_dcc99ad0476d133.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7077_hu_404cce02e87b5778.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7077_hu_dcc99ad0476d133.jpg"
          
          title="Inside the Duomo di Santa Maria Assunta"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7081_hu_8285e601c9e9bf28.jpg 330w, /2025/11/exploring-monopoli/IMG_7081_hu_fe1eed7025a4750c.jpg 660w, /2025/11/exploring-monopoli/IMG_7081_hu_7a2cc1490bb885f4.jpg 1024w, /2025/11/exploring-monopoli/IMG_7081_hu_a3ae58b3fc999457.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7081_hu_fe1eed7025a4750c.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7081_hu_a3ae58b3fc999457.jpg"
          
          title="Even narrower streets in Ostuni, full of life"
        />
    </span>
  
</figure>

<p>We had lunch at &lsquo;Borgo Antico Bistrot&rsquo;, which had a lovely view out over the countryside.
I dig a charcuterie board, and this one did not disappoint.</p>
<p>If only they could have held off the rain, which dampened the atmosphere a touch.</p>
<p>★★★★★ 5/5 - Ostuni was a wonderfully unique place to walk around.
You have to be okay with hills, but the views are worth it.</p>

<h2 class="relative group">Wine Tasting
    <div id="wine-tasting" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wine-tasting" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>With only a couple of days left before we were due back at the airport, we met up with some of our friends to do some <em>experiences</em>.</p>
<p>As the region is known for its wine, olive oil, and cheese, we looked for tours in the area which would give us some insight into how they are made.</p>
<p>Unfortunately, we could not find an olive oil making tour/experience at short notice, but we found a vineyard tour and a cheese making experience.</p>
<p>First up was a wine tasting at <a href="https://tenutegirolamo.it/en/" >Tenute Girolamo</a>.</p>
<figure>
        <img class="my-0 rounded-md nozoom" src="monopoli_to_girolamo.svg" alt="Monopoli to Girolamo" />
        <figcaption>Monopoli to Girolamo (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=40.9524,17.3034&amp;destination=40.7248,17.2427" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Thankfully, I didn&rsquo;t have to drive to this one.
We were going to be tasting seven wines, which is seven more wines than you should have when driving.</p>
<p>The tour was well run, and the guide was very knowledgeable about the wine making process.
He was a local who had grown up in the area, and evidently wine was a passion of his.</p>
<p>We didn&rsquo;t get to tour the vineyard itself, only the vats and the cellars, but it was interesting to hear the history of the building and the company.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7094_hu_689abdf621dd2931.jpg 330w, /2025/11/exploring-monopoli/IMG_7094_hu_2d55261876493fa.jpg 660w, /2025/11/exploring-monopoli/IMG_7094_hu_3b34d13bd178fee5.jpg 1024w, /2025/11/exploring-monopoli/IMG_7094_hu_6718f19ea66b29ce.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7094_hu_2d55261876493fa.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7094_hu_6718f19ea66b29ce.jpg"
          
          title="The wine vats at Tenute Girolamo"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7097_hu_1349aa55e419f18b.jpg 330w, /2025/11/exploring-monopoli/IMG_7097_hu_df588e2cd61cbeaa.jpg 660w, /2025/11/exploring-monopoli/IMG_7097_hu_7cfad604604b4b89.jpg 1024w, /2025/11/exploring-monopoli/IMG_7097_hu_cab27cfb136659f6.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7097_hu_df588e2cd61cbeaa.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7097_hu_cab27cfb136659f6.jpg"
          
          title="The cellar at Tenute Girolamo"
        />
    </span>
  
</figure>

<p>The main event was the wine tasting, which was good enough to make up for the short tour.
I have never been to a wine tasting before, and I mostly stick to quite sweet wines.
<a href="https://www.yellowtailwine.com/en-gb/product/jammy-red-roo/" >Jammy Red Roo</a> (or &rsquo;the gateway wine&rsquo; as I call it) is my go to, so a range of reds with varying flavour profiles was quite the experience.</p>
<p>Each wine was paired with a cheese, which was a nice touch.
I&rsquo;m a massive fan of cheese, and a fan of wine.
No notes.</p>
<p>After the experience we were given the opportunity to buy some bottles.
To our horror, the taxi was going to take forty minutes to arrive, so we had no choice but to buy a bottle of the &lsquo;Conte Giangirolamo Gold Edition&rsquo; to drink while we waited<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>.</p>
<p>★★★★★ 5/5 - The staff were friendly and incredibly knowledgeable.
The wine and cheese were delicious.</p>

<h2 class="relative group">Cheese Making
    <div id="cheese-making" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cheese-making" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="monopoli_to_parcappello.svg" alt="Monopoli to Parcappello" />
        <figcaption>Monopoli to Parcappello (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=40.9524,17.3034&amp;destination=40.8132,17.1593" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Next up was a perfect finale for the holiday.
The region is well known for its cheese (isn&rsquo;t all of Italy?), so a cheese making experience was a must before we went home.</p>
<p>A long‑time friend of the groom started a business setting up experiences with local Puglians.</p>
<p><a href="https://loliv.it/en/" >Loliv</a> had lots of different experiences, one being a <a href="https://loliv.it/en/experience/putignano-sara-farm-make-mozzarella-cheese-tasting/" >Make and taste still warm mozzarella with Sara</a> at a local farm, <a href="http://www.parcappello.it/" >Parcappello</a>.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="The cows behind the cheese"
    width="2048"
    height="1536"
    src="/2025/11/exploring-monopoli/IMG_7106_hu_eab2803ec76de494.jpg"
    srcset="/2025/11/exploring-monopoli/IMG_7106_hu_eab2803ec76de494.jpg 800w, /2025/11/exploring-monopoli/IMG_7106_hu_ddaee1e5e08890e0.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/11/exploring-monopoli/IMG_7106.jpg"></figure>
<p>How would I describe the experience?</p>
<p>&ldquo;Enchanting&rdquo;.</p>
<p>Sara has been a milk farmer and cheese maker for basically her whole life.
Although she didn&rsquo;t speak English, our guide Claudio was able to translate the passion she had for her work, and the love she had for the craft.</p>
<p>In the UK — even though the UK is known for its dairy — most of the cheese you find is Cheddar<sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>.
I&rsquo;m not knocking Cheddar, but I like a bit of variety.</p>
<p>Sara showed us how Mozzarella, Ricotta, Caciocavallo, and &lsquo;Primo Sale&rsquo; (to name a few) were made.
We got to &lsquo;help&rsquo; with the process, and we got to tie and taste the Mozzarella while it was still warm.</p>
<p>It may sound cliché, but tasting cheese straight from the pot, while it was still warm, was an experience I will never forget.</p>
<p>After the cheese making, we sat down with Sara and Claudio for a cheese tasting of the cheeses we had just made, paired with some fruit and veg that Sara had also grown on the farm (and some delightful focaccia).</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="The cheese we made"
    width="2048"
    height="1536"
    src="/2025/11/exploring-monopoli/IMG_7112_hu_158fb984756678e3.jpg"
    srcset="/2025/11/exploring-monopoli/IMG_7112_hu_158fb984756678e3.jpg 800w, /2025/11/exploring-monopoli/IMG_7112_hu_2dc8bb55f7017f21.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/11/exploring-monopoli/IMG_7112.jpg"></figure>
<p>It was quite far out of our way to drive here for the day, but it was worth it.
I would recommend this experience to anyone who loves cheese.
Or anyone who loves seeing how things are made.</p>
<p>★★★★★ 5/5 - A truly unique experience — the highlight of the holiday (excluding the wedding of course).</p>

<h2 class="relative group">Food
    <div id="food" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#food" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>And I couldn&rsquo;t write anything about my time in Italy without mentioning the (frankly obscene) amount of fantastic food we ate.</p>
<p>Not a single bad meal in ten days.
Even when we went to &lsquo;bad&rsquo; places which were considered cheap tourist traps, the food was better than most meals out I have had in the UK.</p>
<p>Main courses were in the region of €15–€25, which is incredibly reasonable for the quality of food you are getting.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_6918_hu_3c6621ac38a5d34.jpg 330w, /2025/11/exploring-monopoli/IMG_6918_hu_9e958663037c594c.jpg 660w, /2025/11/exploring-monopoli/IMG_6918_hu_ab084925dab240f7.jpg 1024w, /2025/11/exploring-monopoli/IMG_6918_hu_cb9a77e667619367.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_6918_hu_9e958663037c594c.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_6918_hu_cb9a77e667619367.jpg"
          
          title="A simple pizza in Monopoli"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_2039_hu_bb7fed6803303ee4.jpg 330w, /2025/11/exploring-monopoli/IMG_2039_hu_f820125754ead196.jpg 660w, /2025/11/exploring-monopoli/IMG_2039_hu_cf2e0780e0b872dd.jpg 1024w, /2025/11/exploring-monopoli/IMG_2039_hu_9931d3145817e4fe.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_2039_hu_f820125754ead196.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_2039_hu_9931d3145817e4fe.jpg"
          
          title="Octopus on bread"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7100_hu_1ccd92e608b76367.jpg 330w, /2025/11/exploring-monopoli/IMG_7100_hu_7b502c99f6ac221.jpg 660w, /2025/11/exploring-monopoli/IMG_7100_hu_167384142472ae83.jpg 1024w, /2025/11/exploring-monopoli/IMG_7100_hu_e4f42769dcd34af4.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7100_hu_7b502c99f6ac221.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7100_hu_e4f42769dcd34af4.jpg"
          
          title="Fried Seafood"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_2041_hu_1a9618f5d56c9168.jpg 330w, /2025/11/exploring-monopoli/IMG_2041_hu_d46e3e5fd513ee9f.jpg 660w, /2025/11/exploring-monopoli/IMG_2041_hu_adcd4c2ca0ab5c75.jpg 1024w, /2025/11/exploring-monopoli/IMG_2041_hu_cc184ad9980edb0.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_2041_hu_d46e3e5fd513ee9f.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_2041_hu_cc184ad9980edb0.jpg"
          
          title="A glorious doughnut"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/3f513f96-9b80-4202-a780-c3948e00a9b5_hu_d771b9b840c93333.jpg 330w, /2025/11/exploring-monopoli/3f513f96-9b80-4202-a780-c3948e00a9b5_hu_b5a00a340d9e17ba.jpg 660w, /2025/11/exploring-monopoli/3f513f96-9b80-4202-a780-c3948e00a9b5_hu_a68efea0b8cd5928.jpg 1024w, /2025/11/exploring-monopoli/3f513f96-9b80-4202-a780-c3948e00a9b5_hu_51558fd2a610d83b.jpg 2x"
          src="/2025/11/exploring-monopoli/3f513f96-9b80-4202-a780-c3948e00a9b5_hu_b5a00a340d9e17ba.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/3f513f96-9b80-4202-a780-c3948e00a9b5_hu_51558fd2a610d83b.jpg"
          
          title="Gelato in Monopoli"
        />
        <img
          class="rounded-md"
          srcset="/2025/11/exploring-monopoli/IMG_7122_hu_71c71b3a0bf51c1e.jpg 330w, /2025/11/exploring-monopoli/IMG_7122_hu_3c9b0d8133cd3d8d.jpg 660w, /2025/11/exploring-monopoli/IMG_7122_hu_1e1f0e0769eb4461.jpg 1024w, /2025/11/exploring-monopoli/IMG_7122_hu_36e464cd34f83746.jpg 2x"
          src="/2025/11/exploring-monopoli/IMG_7122_hu_3c9b0d8133cd3d8d.jpg"
          data-zoom-src="/2025/11/exploring-monopoli/IMG_7122_hu_36e464cd34f83746.jpg"
          
          title="A fancy salted caramel dessert"
        />
    </span>
  
</figure>

<p>A lot of seafood, a lot of cheese, and a lot of pasta.</p>
<p>Did I put on four kilograms in ten days?
Yes.
Was it worth it?
Also yes.</p>

<h2 class="relative group">Travel Advice
    <div id="travel-advice" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#travel-advice" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>There are a couple of things I wish I had known before going to Italy.</p>
<ol>
<li>
<p><strong>Parking</strong>: Don&rsquo;t bother trying to find on-street parking.
Even outside the tourist season, it isn&rsquo;t worth your time.</p>
<p>Look for places within a ten minute walk of where you are going.
Best case it is free (like in <a href="https://maps.app.goo.gl/1NgQPHAaPmn7SXC5A" >Monopoli</a>), worst case you pay €10 for the whole day.
It is worth the extra money to not have to stress about finding a spot.</p>
</li>
<li>
<p><strong>Speeding</strong>: Almost everyone ignores the speed limits (including the Police).
The best advice I got was &ldquo;Don&rsquo;t be the fastest car on the road&rdquo;.</p>
<p>If you are the only car on the road, do the speed limit.
You don&rsquo;t know where the speed cameras are, so you will get caught.
If there&rsquo;s a &rsquo;local&rsquo; in front of you, follow them.
They will likely know where the speed cameras are and slow down for them.</p>
</li>
<li>
<p><strong>Maps</strong>: I&rsquo;ll be honest, Google Maps does a bad job of translation when searching for things.
Learn some basic Italian and search in Italian.</p>
<p>&ldquo;Car Park&rdquo; is &ldquo;Parcheggio&rdquo;, for example.</p>
</li>
<li>
<p><strong>Language</strong>: I learnt &rsquo;table manners&rsquo; Italian before going.
Hello, goodbye, please, thank you, excuse me, where is the toilet, etc.
And it made a huge difference.
95% of people we met spoke English, but making the effort to speak in Italian first was appreciated.</p>
</li>
<li>
<p><strong>Money</strong>: Not everywhere takes card (like the parking places I mentioned), so make sure you always have cash on you.</p>
</li>
</ol>

<h2 class="relative group">Fin
    <div id="fin" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fin" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>If you haven&rsquo;t been to Puglia, I would recommend it as a place to visit.</p>
<p>I&rsquo;m still &lsquo;feeling out&rsquo; travel blogging.
This one is within a month of me actually going on the trip, so that&rsquo;s an improvement on the <a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-1/" >last one</a>.</p>
<p>Thanks for reading!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Mad respect to anyone who is a full-time carer, it is a tough job.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>No, not Monopoly. Monopoli.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I have never seen a car rental place so busy in my life.
We spent three <strong>hours</strong> in that queue.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>And I was already awake, because the bin men came at six, and sound echoes harshly off the stone walls.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Which oddly reads like a promotional brochure.&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>In the literal sense, it was quite windy.&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p>Don&rsquo;t worry, we did buy a couple of bottles to bring home as well.&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p>If I get served another &lsquo;cheese board&rsquo; with just five types of Cheddar on it, I&rsquo;m moving to Italy.&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="italy"/><summary type="html">We were invited to a wedding in Italy, and we decided to stay longer to soak in the fantastic Italian culture.</summary></entry><entry><title type="html">Replacing Jekyll</title><link href="https://thega.me.uk/2025/10/replacing-jekyll/" rel="alternate" type="text/html" title="Replacing Jekyll"/><published>2025-10-10T11:14:28+01:00</published><updated>2025-12-23T01:01:38+00:00</updated><id>https://thega.me.uk/2025/10/replacing-jekyll</id><content type="html" xml:base="https://thega.me.uk/2025/10/replacing-jekyll/"><![CDATA[
<h2 class="relative group">Background
    <div id="background" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#background" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>It finally happened.</p>
<p>Like all engineers writing a blog, I have completed the rite of passage that is switching Static Site Generators (
<abbr title="Static Site Generator">SSG</abbr>
).</p>
<p>Since my last post (<a href="https://thega.me.uk/2025/04/bye-bye-github-pages-gem/" >Bye-Bye GitHub Pages Gem</a>), I have been reading up on all the various SSGs out there.
<a href="https://www.11ty.dev/" >11ty</a> and <a href="https://astro.build/" >Astro</a> looked interesting, but quite involved.
I have done web development in the past, but I wanted a strong theme to base my site off of; I didn&rsquo;t want to create everything from scratch.</p>
<p><a href="https://blowfish.page/" >Blowfish</a> caught my eye as a professional looking, and well-supported theme.
I particularly liked the timeline feature (which can be seen on my <a href="https://thega.me.uk/cv/" >CV</a>).
It uses <a href="https://tailwindcss.com/" >Tailwind CSS</a>, which means any customization should be straightforward for someone that finds CSS a bit of a mystery (like me).</p>
<p>I had to do quite a bit of work to get the theme working with my content.</p>

<h2 class="relative group">Extending Blowfish
    <div id="extending-blowfish" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#extending-blowfish" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">Admonitions
    <div id="admonitions" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#admonitions" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Hugo and Blowfish lacked support for Admonitions, which I use a lot in my posts.</p>
<p>I had to implement the <code>render-blockquote-alert.html</code> Hugo template to convert markdown admonitions to HTML:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#66d9ef">&gt; </span><span style="font-style:italic">[!NOTE]
</span></span></span><span style="display:flex;"><span>&gt; Isn&#39;t this note cool?</span></span></code></pre></div></div>
<p>Becomes:</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Note
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>Isn&rsquo;t this note cool?</p></div></div><p>You can see the source code <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/layouts/_markup/render-blockquote-alert.html" >here</a>.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Update 23<sup>rd</sup> December 2025
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>Native support for Admonitions has been added to the Blowfish theme, so this override has been removed.
See the release notes for <a href="https://github.com/nunocoracao/blowfish/releases/tag/v2.94.0" >v2.94.0</a>.</p></div></div>
<h3 class="relative group">Galleries
    <div id="galleries" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#galleries" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The out-of-the-box gallery support in Blowfish lacks the ability to define a caption for the images.
Additionally, I liked the way that my previous theme allowed me to define the images, and their hover text, in the front matter of the post.</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>title: &#34;My first post&#34;
</span></span><span style="display:flex;"><span>gallery-name:
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">-</span> image_path: my-first-picture.jpeg
</span></span><span style="display:flex;"><span>    title: &#34;This is the first picture&#34;
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">-</span> image_path: my-second-picture.jpeg
</span></span><span style="display:flex;"><span>    title: &#34;This is the second picture&#34;
</span></span><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>{{&lt; mm-gallery id=&#34;gallery&#34; caption=&#34;This is a gallery&#34; &gt;}}</span></span></code></pre></div></div>
<p>Because of this I defined my own gallery &lsquo;<a href="https://gohugo.io/content-management/shortcodes/" >shortcode</a>&rsquo;, which you can see <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/layouts/_shortcodes/mm-gallery.html" >here</a>.</p>

<h3 class="relative group">Maps
    <div id="maps" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#maps" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>I had to convert my Jekyll map rendering code to a Hugo shortcode.
It&rsquo;s very similar to the gallery shortcode, but there is some complex caption generation code, depending on the number of points on the map.</p>
<p>You can see the source code <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/layouts/_shortcodes/map.html" >here</a> which works in tandem with a <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/.hooks/generate_maps.py" >Python pre-commit hook</a> to generate the maps themselves.</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>maps:
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">-</span> name: great_circle
</span></span><span style="display:flex;"><span>    line: true
</span></span><span style="display:flex;"><span>    points:
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">-</span> name: London
</span></span><span style="display:flex;"><span>        lat: 51.5074
</span></span><span style="display:flex;"><span>        lon: -0.1278
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">-</span> name: New York
</span></span><span style="display:flex;"><span>        lat: 40.7128
</span></span><span style="display:flex;"><span>        lon: -74.0060
</span></span><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>{{&lt; map name=&#34;great_circle&#34; caption=&#34;Insightful caption&#34; &gt;}}</span></span></code></pre></div></div>

<h3 class="relative group">Abbreviations
    <div id="abbreviations" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#abbreviations" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Blowfish and Hugo also lack support for Abbreviations, which I use a lot in my posts; anything technical tends to come with a lot of acronyms.</p>
<p><a href="https://kramdown.gettalong.org/syntax.html#abbreviation" >kramdown</a> supported abbreviations, but Hugo <a href="https://github.com/gohugoio/hugo/issues/7360" >chooses not to</a>, because it&rsquo;s not a common markdown feature.</p>
<p>Because of this I had to implement my own shortcode to support abbreviations, which you can see <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/layouts/_shortcodes/term.html" >here</a>.</p>
<p>For example:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>{{&lt; term &#34;SSG&#34; &gt;}}</span></span></code></pre></div></div>
<p>Becomes: 
<abbr title="Static Site Generator">SSG</abbr>
</p>
<p>This sources its definitions from the <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/data/terms.yaml" >terms.yaml</a> data file.</p>
<p>It&rsquo;s not as nice as the kramdown syntax — which post-processes the content to add a hover-over to all instances of the abbreviation — but it works.</p>

<h3 class="relative group">Image Width
    <div id="image-width" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#image-width" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>This final one will hopefully be fixed in the future when I raise a PR with the Blowfish theme, but I had to add support for setting the width of an image which was defined using markdown.</p>
<p>For example:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>![<span style="color:#f92672">My Image</span>](<span style="color:#a6e22e">/path/to/image.jpg</span>)
</span></span><span style="display:flex;"><span>{style=&#34;width:50%;&#34;}</span></span></code></pre></div></div>
<p>Hugo refers to that second line as <a href="https://gohugo.io/content-management/markdown-attributes/" >&lsquo;markdown attributes&rsquo;</a>, which are passed to the markdown image processor.</p>
<p>The built-in <a href="https://github.com/gohugoio/hugo/blob/v0.151.0/tpl/tplimpl/embedded/templates/_markup/render-image.html#L17-L21" >&lsquo;default&rsquo; processor</a> supports this, but the override that <a href="https://github.com/nunocoracao/blowfish/blob/v2.90.0/layouts/_default/_markup/render-image.html" >Blowfish</a> defines, does not.</p>
<p>It is useful to be able to reduce the size of an image in a post, as it can be quite jarring to have a huge image in the middle of some text.
Because of this I had to override the image shortcode in my own theme, which you can see <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/layouts/_markup/render-image.html" >here</a>.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Update 7<sup>th</sup> November 2025
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>My PR to add support to the Blowfish theme has been merged, so this override has been removed.
See the release notes for <a href="https://github.com/nunocoracao/blowfish/releases/tag/v2.92.0" >v2.92.0</a> which contains my <a href="https://github.com/nunocoracao/blowfish/pull/2591" >fix</a>.</p></div></div>
<h2 class="relative group">The Migration
    <div id="the-migration" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-migration" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Most of my time was spent rebuilding the shortcodes above, however Jekyll and Hugo have different ways of doing things, so I had to rearrange my content a bit.</p>
<p>There are <em>so many</em> existing blog posts about migrating from Jekyll to Hugo, so I won&rsquo;t go into too much detail here.</p>
<p>What I do want to do is to call out the thing that I found particularly challenging; backwards compatibility.</p>
<p>There are some of my blogs which have tens (yes TENS) of visitors a month (e.g. <a href="https://thega.me.uk/2024/11/multiple-custom-domains-with-github-pages/" >Multiple Domains with GitHub Pages</a>), and I didn&rsquo;t want to break the links to these posts.</p>
<p>Additionally, I have a few friends that subscribe to my RSS feed, and I didn&rsquo;t want to break that for them.</p>
<p>To maintain the links, Hugo has a feature called &lsquo;aliases&rsquo;, which allows you to define a list of URLs in the front matter that redirect to a page.</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">aliases</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">/code/rule-one/</span></span></span></code></pre></div></div>
<p>For example, if you go to <a href="https://thega.me.uk/code/rule-one/" >/code/rule-one/</a>, you will be redirected to <a href="https://thega.me.uk/2024/05/one-rule-to-build-them-all/" >/2024/05/one-rule-to-build-them-all/</a>.</p>
<p>These aliases become a problem in the RSS feed, where I want the alias to be used in the <code>&lt;link&gt;</code> tag.</p>
<p>Because of this I wrote my own <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/90ad2e8c48fc6cef10da2e887b92804d7001c534/layouts/home.rss.xml" ><code>home.rss.xml</code></a> template which is used to render an RSS feed as close to the Jekyll one as I could manage.</p>
<p>Hugo also serves the RSS feed from <code>/index.xml</code>, rather than <code>/feed.xml</code>, so I had to add the following to my <code>hugo.yaml</code> config file:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">outputFormats</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">RSS</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">mediatype</span>: <span style="color:#e6db74">&#34;application/rss&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">baseName</span>: <span style="color:#e6db74">&#34;feed&#34;</span></span></span></code></pre></div></div>
<p>I <em>wanted</em> to be able to push the site out and not have all of my old posts flag up as changed in peoples RSS readers, however, I didn&rsquo;t manage to do that.
Sorry to anyone that had a load of notifications from my site.</p>
<p>Finally, I created an &lsquo;unlisted&rsquo; <a href="https://thega.me.uk/demo/" >demo page</a> which uses the features above to make sure that everything is working as expected.</p>

<h2 class="relative group">Conclusion
    <div id="conclusion" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#conclusion" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I&rsquo;m happy with the new site, especially my <a href="https://thega.me.uk/cv/" >CV</a>.</p>
<p>Blowfish has some nice features, like the &lsquo;series&rsquo; taxonomy, which I have used in my <a href="https://thega.me.uk/2025/03/i-visited-new-zealand-part-9/" >New Zealand</a> blog posts, and my <a href="https://thega.me.uk/2024/12/thats-a-wrap-twelve-days-of-short-stories/" >recent collection of short stories</a>.</p>
<p>As the site serves as a bit of a pet project, I&rsquo;m thinking of trying my hand at creating my own theme, at some point in the future.</p>
<p>Maybe I&rsquo;ll pick a different SSG to do that with&hellip;</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="update"/><category term="jekyll"/><category term="hugo"/><summary type="html">I have been enjoying Jekyll, but it&amp;rsquo;s time to toy with another static site generator.</summary></entry><entry><title type="html">Long Live The Lakehouse</title><link href="https://thega.me.uk/code/long-live-the-lakehouse" rel="alternate" type="text/html" title="Long Live The Lakehouse"/><published>2025-06-15T10:50:00+01:00</published><updated>2025-06-15T10:50:58+01:00</updated><id>https://thega.me.uk/code/long-live-the-lakehouse</id><content type="html" xml:base="https://thega.me.uk/code/long-live-the-lakehouse"><![CDATA[<p>I finally feel like the industry is ready to support &rsquo;the <a href="https://www.databricks.com/glossary/data-lakehouse" >Lakehouse</a>&rsquo;.
I thought I would write about how Apache Iceberg is making it possible.</p>

<h2 class="relative group">The Problem
    <div id="the-problem" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-problem" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>In many organizations, you will have a multitude of data sets floating around the business.
They may be your core business (as in, you sell data), or you might just leverage data to provide a service.
This data may come from outside the company, or from within, being manually input by members of staff.
But regardless of the origin or volume of the data, it needs to be readily available for use inside the business.</p>
<p>Many fantastic data tools now exist on the market, offering a broad (and often overlapping) set of features.
Hosted platforms like <a href="https://learn.microsoft.com/en-us/fabric/onelake/onelake-overview" >Azure OneLake</a>,
<a href="https://www.snowflake.com/en/" >Snowflake</a>, and <a href="https://www.databricks.com/" >Databricks</a>,
or locally run tools like <a href="https://jupyter.org/" >Jupyter</a>, allow Data Scientists and Engineers to set up 
<abbr title="Extract, Transform, Load - a process used to collect data from various sources, transform it into a consistent format, and load it into a data warehouse">ETL</abbr>
 pipelines;
generating new datasets and data points.</p>
<p>You could just pick one, say Databricks.
You could place all of your data in a Databricks account, and leverage the platform to its fullest.</p>
<p>But what if you already have a lot of data in your business?
Like many businesses, your data is probably stored in the cloud (likely in 
<abbr title="Amazon Web Services">AWS</abbr>
 S3<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>), because it is cheap long-term storage.
Copy and pasting all of it into a new platform will be particularly onerous and costly.</p>
<p>If you&rsquo;re sensible, you will want to keep your data &lsquo;under your control&rsquo;, just in case you and your chosen platform have a messy break up.
Now you have to keep two copies of everything<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>But most importantly, what if you want to be able to use the features of more than one platform at the same time?
You want to use <a href="https://docs.databricks.com/aws/en/mlflow" >MLflow</a> in Databricks, but you also want to use the
<a href="https://docs.snowflake.com/en/user-guide/data-sharing-intro" >data sharing</a> feature of Snowflake?</p>
<p>In 2023, tools like <a href="https://en.wikipedia.org/wiki/ChatGPT" >ChatGPT</a> took the industry by storm.
We can&rsquo;t predict what the next &lsquo;must have&rsquo; tool will be, but we know our data should be usable in it.</p>
<p>Importantly, when I say <em>use</em>, I mean each tool can not only read, but also <strong>write</strong> data.
An ETL pipeline is not much use if the result is not available elsewhere.</p>
<p>One pipeline should be able to read a dataset authored in Databricks, from Snowflake, then use that data to write a new dataset that a pipeline in Azure could use.</p>
<p>I have seen referred to as &lsquo;<strong>CORE</strong>&rsquo;: Create Once, Read Everywhere<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.
Create a data point only once, and then surface that data, where it is needed, from the location you stored it in.</p>
<p>What did they say when we were younger?
If it sounds too good to be true, it is.
What mythical tooling could make the rows in my AWS stored datasets, available to read (and write) in Databricks, Snowflake, or Azure?</p>
<p>Well, I would say in 2025, the data ecosystem now has a solution in the form of &lsquo;Open Table Formats&rsquo;;
specifically <a href="https://en.wikipedia.org/wiki/Apache_Iceberg" >Apache Iceberg</a><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</p>

<h2 class="relative group">Open Table Formats
    <div id="open-table-formats" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#open-table-formats" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>File formats like <a href="https://en.wikipedia.org/wiki/Apache_Parquet" >Apache Parquet</a> store data optimally to allow efficient queries over a single file of data.</p>
<p>But what can you do when you have hundreds of thousands of files?
That&rsquo;s where an &lsquo;Open Table Format&rsquo; (OTF) comes in.</p>
<p>This adds a metadata layer over the top of all of your files that allows for efficient query of the data.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="A diagram showing the conceptual architecture of Apache Iceberg"
    width="1248"
    height="1290"
    src="/2025/06/long-live-the-lakehouse/iceberg-metadata_hu_d836ba8ac94d84c0.png"
    srcset="/2025/06/long-live-the-lakehouse/iceberg-metadata_hu_d836ba8ac94d84c0.png 800w, /2025/06/long-live-the-lakehouse/iceberg-metadata.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/06/long-live-the-lakehouse/iceberg-metadata.png"><figcaption>Image from <a href="https://iceberg.apache.org/spec/#overview" >https://iceberg.apache.org/spec/#overview</a></figcaption></figure>
<p>OTFs also allow for schema evolution (through witchcraft) and 
<abbr title="Data Modification Language">DML</abbr>
 queries (Inserts/Update/Deletes) across multiple files.
All the good stuff that any database can offer.
<a href="https://www.startdataengineering.com/post/what_why_table_format/" >StartDataEngineering</a> have a great blog on Open Data Tables that is well worth a read.</p>
<p>The key part, however, is the <em>open</em> part of the 
<abbr title="Open Table Format">OTF</abbr>
.</p>
<p>For a long time I have loved and used PostgreSQL, which is an amazing database.
Unfortunately, PostgreSQL stores its data in a bespoke on-disk file <a href="https://www.postgresql.org/docs/current/storage-file-layout.html" >format</a> that is not usable by other tools, so anything stored in PostgreSQL, can only be accessed through a running instance.
If PostgreSQL couldn&rsquo;t be run for some reason, you lose the data.</p>
<p>The tables stored in an OTF however, are usable by other tools.
I am able to store my data on a storage engine (like AWS S3), augment it with an OTF, and then select the tool of my choice that supports that OTF.</p>
<p>I can expose that OTF table in the ecosystems where the best tooling exists, helping me achieve the 
<abbr title="Create Once, Read Everywhere">CORE</abbr>
 principle.</p>

<h2 class="relative group">Fragmentation
    <div id="fragmentation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fragmentation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Or does it?</p>
<p>I can only be CORE <strong>IF</strong> the ecosystems I want to use, choose to support it.
If I select an OTF and a company like Snowflake or Databricks choose to ignore it<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>, then I am stuck either not using that company, or copy and pasting my data in and out of their solution.</p>
<p>Up until the start of 2025, Snowflake was team Apache Iceberg, and Databricks were team Delta lake.
Each provider exclusively supporting only their own open table standard.
Which kind of defeats the point, right?</p>
<p>If the two biggest hitters in the data platform as a service can&rsquo;t agree on the same open table format, we haven&rsquo;t solved anything.
Tools like <a href="https://xtable.apache.org/" >Apache XTable</a> sought to put a plaster over the issue, by allowing conversion between them.
But this adds quite a bit of complexity.
Wouldn&rsquo;t it be nicer if they all used one OTF?</p>
<p>Luckily, at the start of the year, it seems like everyone is adopting Apache Iceberg.
Tools like Google Cloud <a href="https://cloud.google.com/bigquery/docs/iceberg-tables" >BigQuery</a>, Azure <a href="https://learn.microsoft.com/en-us/azure/data-factory/format-iceberg" >Data Factory</a>, AWS <a href="https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-s3-tables-apache-iceberg-tables-analytics-workloads/" >S3</a>, and <a href="https://docs.snowflake.com/en/user-guide/tables-iceberg" >Snowflake</a>, all support Iceberg out-of-the-box.</p>
<p>Fantastic!</p>

<h2 class="relative group">Owning the Metadata
    <div id="owning-the-metadata" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#owning-the-metadata" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Unfortunately support for an OTF is not enough.</p>
<p>Remember the metadata layer that the OTF brings to the table?
Well someone needs to be the owner of the process which updates the metadata;
otherwise known as the &lsquo;Catalog&rsquo;.</p>
<p>When writing a row to an Iceberg table, you are actually sending a request to a Catalog 
<abbr title="Application Programming Interface">API</abbr>
, which appends data to the underlying table.
Then on the next read of the table, the new row appears.</p>
<p>You can&rsquo;t have multiple Catalogs owning the metadata, otherwise you would get some lovely conflicting opinions on what the table should contain.</p>
<p>Why is this a problem?</p>
<p>As an example, in early 2025 Snowflake would only let you <em>read</em> from an external Catalog — a Catalog not controlled by Snowflake — but not write to one.
This meant that if you were storing your data in an AWS Glue Catalog, you could read that data in Snowflake, but you couldn&rsquo;t write to it.</p>
<p>Fine, fine, I&rsquo;ll just let Snowflake manage the Catalog then.</p>
<p>Well, now you can&rsquo;t read or write from that table in Redshift, because it only supports the AWS Glue Catalog.
Picking one table owner, closed some doors, while picking another closed others.
It was all a horrible game of snakes and ladders.
Depending on the current tools in your architecture, there was often no good solution.</p>

<h2 class="relative group">The Future is Bright
    <div id="the-future-is-bright" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-future-is-bright" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Thankfully, platforms like Snowflake are now supporting <a href="https://docs.snowflake.com/en/release-notes/2025/9_08#iceberg-tm-tables-row-level-deletes-for-externally-managed-tables-preview" >writing</a> to external Catalogs.
Allowing a shift towards a more unified ecosystem.</p>
<p><a href="https://docs.databricks.com/aws/en/query-federation/foreign-catalogs" >Databricks</a> and <a href="https://docs.aws.amazon.com/lake-formation/latest/dg/federated-catalog-data-connection.html" >AWS</a>, haven&rsquo;t quite got there yet, but I expect given the push toward interoperability, they will support it soon.</p>
<p>These platforms do have a vested interest in locking you into their ecosystem, so I&rsquo;m hoping that enough businesses who want flexibility push them towards implementing (and keeping) this support for OTFs.</p>
<p>It&rsquo;s not really manageable for a company to copy all their data into each data platform as a service (trust me, I&rsquo;ve tried);
or, to set up replication of datasets back and forth.
Simple tasks, like adding a column, can break all the clever ETLs you have written.
It&rsquo;s much more maintainable to have a single Catalog managing your whole Lakehouse.</p>
<p>My fingers are crossed that <a href="https://polaris.apache.org/" >Apache Polaris</a> takes off.</p>

<h2 class="relative group">Wrap me in a Data Fabric?
    <div id="wrap-me-in-a-data-fabric" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wrap-me-in-a-data-fabric" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>All of this might be redundant soon if the next layer of abstraction gains traction.</p>
<p><a href="https://developer.ibm.com/articles/introduction-to-data-fabric/" >Data Fabrics</a> look to hide away all the different data sources that companies have, and provide a single API layer.
One place to manage access, Governance, and data definitions.</p>
<p>Data Fabrics would mean you can leverage a lot of useful tooling, without having to migrate out of the fifteen database technologies scattered across your architecture.</p>
<p>Data Fabrics like <a href="https://cube.dev/docs/product/caching/recipes/joining-multiple-data-sources" >cube.dev</a> promise to be able to join data from multiple data sources.
How will this perform?
It&rsquo;s going to be an interesting space to watch.</p>

<h2 class="relative group">Fin
    <div id="fin" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fin" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Thanks for reading!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>S3 is so commonly used an outage in it <a href="https://www.datacenterknowledge.com/outages/aws-outage-that-broke-the-internet-caused-by-mistyped-command" >took down half the internet</a>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>And your backups? Right? RIGHT?!&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I have also seen COPE (Create Once, Publish Everywhere), but that seems more related to web publication.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Now I&rsquo;ve said it, Delta Tables will become the industry standard.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://hudi.apache.org/" >Hudi</a>, anyone?&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="data"/><category term="architecture"/><summary type="html">I finally feel like the industry is ready to support &amp;rsquo;the Lakehouse&amp;rsquo;. I thought I would write about how Apache Iceberg is making it possible.</summary></entry><entry><title type="html">I am Whittlesea-Clark</title><link href="https://thega.me.uk/update/i-am-whittlesea-clark" rel="alternate" type="text/html" title="I am Whittlesea-Clark"/><published>2025-06-09T20:48:00+01:00</published><updated>2025-06-09T20:48:00+01:00</updated><id>https://thega.me.uk/update/i-am-whittlesea-clark</id><content type="html" xml:base="https://thega.me.uk/update/i-am-whittlesea-clark"><![CDATA[<blockquote><p>What&rsquo;s in a name? That which we call a rose by any other name would smell as sweet.</p>
<p>— William Shakespeare, Romeo and Juliet</p>
</blockquote><p>If you have known me for a while, you would remember me as &lsquo;Phillip Whittlesea&rsquo;.
However, more recently, I have been going by my married name of <em>Whittlesea-Clark</em>.</p>
<p>It&rsquo;s been a slow, and <em>very</em> gradual change over the last seven years, starting with me updating my social media.
But I didn&rsquo;t get around to updating the &rsquo;legal&rsquo; name on my passport, until now.</p>
<p>I am happy to report, as of the 5<sup>th</sup> June 2025, my official government ID shows my new married name.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="success"
    width="480"
    height="319"
    src="/2025/06/i-am-whittlesea-clark/success_kid.png"
    srcset="/2025/06/i-am-whittlesea-clark/success_kid.png 800w, /2025/06/i-am-whittlesea-clark/success_kid.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/06/i-am-whittlesea-clark/success_kid.png"></figure>
<p><em>&lsquo;Seven Years?!&rsquo;</em> I hear you exclaim.
That is quite a long time to put off a name change.</p>
<p>Well, back in 2017 — when I got married — we had been trying to decide what we planned to do with our names.
Would one of us <strong>take</strong> the others?
Were we going to <strong>keep</strong> our &lsquo;maiden&rsquo; names?
Should we <strong>hyphenate</strong> (double-barrel)?
What about inventing a new name?</p>
<p>Interestingly the UK Deed Poll Office records <a href="https://www.ukdeedpolloffice.org/name-change-statistics-after-marriage-in-the-uk/" >name change statistics</a>.
Take, keep, and hyphenation, are 90%, 3%, and 7% respectively.</p>
<p>So the vast majority of people take their partners name, but we didn&rsquo;t really like the idea of that;
it felt too patriarchal.
Of the 90% of people who adopt their partners name, 86% of those are Female.</p>
<p>We wanted to do something that placed us as equals in the relationship.
So that left us with keeping our own names, hyphenation, or inventing a new name.</p>
<p>Now neither of us are J. R. R. Tolkien, so we stayed clear of making up a name, and we both agreed to keep our names.
It&rsquo;s just easier.
Less paperwork etc.</p>
<p>However, about a month before our vows, my other half surprised me with a rogue hyphen.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="success"
    width="1024"
    height="640"
    src="/2025/06/i-am-whittlesea-clark/surprise_hu_868e35bf20ab4505.png"
    srcset="/2025/06/i-am-whittlesea-clark/surprise_hu_868e35bf20ab4505.png 800w, /2025/06/i-am-whittlesea-clark/surprise.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/06/i-am-whittlesea-clark/surprise.png"></figure>
<p>This came with a promise of &ldquo;you don&rsquo;t have to change yours as well.
I just want a fancy double-barrelled name&rdquo;.</p>
<p>Great.
Now I&rsquo;m going to look like a fool that didn&rsquo;t want to take their partners name.
Not very equal of me.</p>
<p>To be fair, <em>Whittlesea-Clark</em> is quite a nice name.
But being an engineer, no decision could be made without considering the benefits, and the downsides.</p>
<p>Pros:</p>
<ol>
<li>It gives our family unit a single name to refer to ourselves by.</li>
<li>It&rsquo;s &lsquo;globally unique&rsquo;.
Barely anyone has &lsquo;Whittlesea&rsquo;, so the hyphenated name will be one of a kind<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</li>
<li>It shows my long-term commitment to my partner.</li>
</ol>
<p>Cons:</p>
<ol>
<li>Forms have a maximum number of characters, 17 characters is a lot.
Is this going to be an issue?</li>
<li>People are always misspelling &lsquo;Whittlesea&rsquo;, how are they going to manage with &lsquo;Clark&rsquo; on the end.
&ldquo;Is that with an &rsquo;e&rsquo; or without?&rdquo; will occupy the rest of my days.</li>
<li>I&rsquo;ll need a new Passport, Driving License, change the deeds on the house, change the <a href="https://www.gov.uk/vehicle-log-book" >V5C</a>.
The list goes on.</li>
<li>I know for a fact, every system engineer around the world is making assumptions about names (see <a href="https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/" >this famous blog</a>).
Will I even be able to enter a hyphen into websites<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>?</li>
<li>I literally just renewed my passport.</li>
<li><em>If</em> we get divorced, I will have to unwind all the changes.</li>
</ol>
<p>Several people have asked me about how my family feel on the matter.
My response to them is always that my partner and my dogs are my family too;
I&rsquo;m still keeping the name, just changing it a bit.</p>
<p>Generally, I think all the downsides are manageable, and all the positives desirable.
As a consummate procrastinator I made all the &lsquo;soft&rsquo; and easy changes first, starting with social media, then my bank, and finally as of this month, my Passport.</p>
<p>All the other things are to come (like my driving licence), but I&rsquo;ll get there.</p>
<p>The only place I will still use my &lsquo;maiden&rsquo; name, is my digital handles.
I am still using <a href="https://github.com/pwhittlesea/" ><code>pwhittlesea</code></a> on GitHub because changing it will be annoying, and I will continue to sign up to services with <code>pwhittlesea</code> because it is short and easy to type.</p>
<p>So, I am Phillip Whittlesea-Clark.
Finally.</p>
<p>Or, as the UK government want me to word it:</p>
<blockquote><p>I Phillip Whittlesea of &lt;redacted&gt; have given up my name Phillip Whittlesea and have adopted for all purposes the name Phillip Whittlesea-Clark.</p>
</blockquote><p>Flows right off the tongue, doesn&rsquo;t it?</p>
<p>Thanks for reading!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>This allowed me to grab the <a href="https://whittlesea-clark.com" >.com</a> and <a href="https://whittlesea-clark.co.uk" >.co.uk</a> domains.
Nice!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>In the last 5 or so years, I have only had an issue with Singapore Airlines, and ironically the UK Government &lsquo;One Login&rsquo; site.
Both refuse to accept a hyphen in a name.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="update"/><summary type="html">So, I have changed my name Phillip Whittlesea-Clark. Finally.</summary></entry><entry><title type="html">Bye-Bye GitHub Pages Gem</title><link href="https://thega.me.uk/update/bye-bye-github-pages-gem" rel="alternate" type="text/html" title="Bye-Bye GitHub Pages Gem"/><published>2025-04-27T23:13:00+02:00</published><updated>2025-05-05T14:30:36+01:00</updated><id>https://thega.me.uk/update/bye-bye-github-pages-gem</id><content type="html" xml:base="https://thega.me.uk/update/bye-bye-github-pages-gem"><![CDATA[<p>I moved away from the branch build and <code>github-pages</code> Gem for this site, and now I have an up-to-date, and more configurable build.</p>

<h2 class="relative group">Background
    <div id="background" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#background" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p><a href="https://thega.me.uk/2024/02/new-beginnings/" >Back at the beginning of 2024</a> I switched from an old raggedy single page website, to a new blog;
powered by <a href="https://jekyllrb.com" >Jekyll</a>.</p>
<p>I originally picked the <a href="https://github.com/jekyll/minima" >Minima</a> theme:</p>
<blockquote><p>Minima meets my needs as far as themes go</p>
<p>— Me, 17th Feb 2024 at 17:07</p>
</blockquote><p>But almost immediately — 18th Feb 2024 at 14:25 — I <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/commit/8fe8b9dea8c2b5e65334104de431446b8ea168f0" >switched</a> to the <a href="https://github.com/mmistakes/minimal-mistakes" >Minimal Mistakes</a> plugin, so I can&rsquo;t be trusted it seems.</p>
<p>Up until this week, I have relied on the <a href="https://github.com/github/pages-gem" ><code>github-pages</code></a> Ruby Gem to configure this sites build environment.
It enabled me to run the site locally, and on GitHub, with the same dependency tree and configuration.</p>
<p>The <code>github-pages</code> gem works by restricting which plugins can be used by the site, setting the versions of those plugins, and by setting <a href="https://github.com/github/pages-gem/blob/v232/lib/github-pages/configuration.rb" >some</a> key Jekyll properties to values that GitHub mandates.
GitHub does this for security reasons<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>As I was using this Gem, I also took advantage of the &lsquo;out-of-the-box&rsquo; <a href="https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site" >GitHub deployment process</a> where all the build steps are managed for you, and GitHub pushes your site from a given branch.</p>
<p>A managed dependency tree and build pipeline are great for getting started quickly, and keeping my development environment the same as GitHubs deployment environment.</p>
<p>But if it&rsquo;s so good, why did I move away from it?</p>

<h2 class="relative group">End of Life
    <div id="end-of-life" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#end-of-life" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Several things compounded together that resulted in me looking to factor it out of my build:</p>
<ul>
<li>The <a href="https://github.com/github/pages-gem/releases/tag/v232" >last release</a> of the Gem was back in August 2024</li>
<li>Issues <a href="https://github.com/github/pages-gem/issues/890" >like this one</a> — raised in September 2023 — go unanswered; leading to the feeling the repo is almost un-maintained by GitHub</li>
<li>The plugin only supports Jekyll 3, but Jekyll 4 was released in August 2019, and there&rsquo;s no sign of any progress to support it in the Gem</li>
<li>I have occasionally wanted to try plugins that are not on the allowed list</li>
<li>The theme I use leverages plugins that are not supported on branch built GitHub Pages projects (like <a href="https://github.com/sverrirs/jekyll-paginate-v2" >Pagination v2</a>)</li>
<li>GitHub themselves say to move away from the &lsquo;branch build&rsquo; and to a GitHub Actions build <a href="https://github.blog/news-insights/product-news/github-pages-now-uses-actions-by-default/#how-can-i-upgrade-to-jekyll-4" >if you want Jekyll 4+</a></li>
</ul>
<p>Oh.
OH.
That last part seems kind of important.
&#x1f926;</p>
<p>So it appears that GitHub have just &lsquo;quiet quit&rsquo; the <code>github-pages</code> Gem, and are advising people to move away through their blog posts.
Which would be great, <strong>IF</strong> their documentation agreed, and pushed you in that direction.
Unfortunately the documentation makes it seem like the branch build process, and the Gem, are still the way to go:</p>
<blockquote><p>You can publish your site when changes are pushed to a specific branch, or you can write a GitHub Actions workflow to publish your site.</p>
<p><strong>If you do not need any control over the build process for your site, we recommend that you publish your site when changes are pushed to a specific branch.</strong> You can specify which branch and folder to use as your publishing source. The source branch can be any branch in your repository, and the source folder can either be the root of the repository (/) on the source branch or a /docs folder on the source branch. Whenever changes are pushed to the source branch, the changes in the source folder will be published to your GitHub Pages site.</p>
<p>If you want to use a build process <strong>other than Jekyll</strong> or you do not want a dedicated branch to hold your compiled static files, we recommend that you write a GitHub Actions workflow to publish your site. GitHub provides workflow templates for common publishing scenarios to help you write your workflow.</p>
<p>— <a href="https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#about-publishing-sources" >GitHub Pages Documentation - 2025</a></p>
</blockquote><p>I&rsquo;ve highlighted the key parts that informed my original decision last year.
I did not need more control, <em>and</em> I am using Jekyll, so I don&rsquo;t need a full GitHub Actions pipeline.</p>
<p>Nothing here reads &lsquo;we will not be updating the branch build environment to support Jekyll 4 and above&rsquo;.</p>
<p>I found this out, not from the blogs — which never returned in a search, or were otherwise easy to discover — but from a <a href="https://github.com/github/pages-gem/issues/651#issuecomment-2712968982" >GitHub comment</a><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.
The Gem is practically end of life by GitHubs own admission<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.</p>

<h2 class="relative group">Newer Beginnings
    <div id="newer-beginnings" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#newer-beginnings" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So I knew I wanted to be on the latest version of Jekyll, but jumping in one go would be risky, if I wanted to keep this site up.</p>
<p>So I settled for a multiphase approach:</p>
<ol>
<li>I would keep the same dependency tree, but build and deploy using a <a href="https://jekyllrb.com/docs/continuous-integration/github-actions/" >GitHub Actions pipeline</a> — this would give me the ability to inspect the built site before pushing it live</li>
<li>Copy all the transitive dependencies from <code>github-pages</code> into my <code>Gemfile</code> — ensuring that when I remove the pages Gem, I don&rsquo;t lose any functionality</li>
<li>Remove the <code>github-pages</code> Gem</li>
<li>Remove the dependencies added in step to one-by-one to see what is not needed for my site (e.g. <code>github-pages</code> has lots of themes included)</li>
<li>Switch to the Gem version of my theme from the remote theme plugin</li>
<li>Update to the latest version of Jekyll by removing all versions from dependencies (except the theme) unless they need to be pinned due to bugs</li>
<li>Leverage any new features Jekyll has in v4+ that I couldn&rsquo;t use before</li>
</ol>
<p>At each step of this process I downloaded the generated site from GitHub Actions (current) and compared it against the one built locally using the <code>bundle exec jekyll build</code> command.</p>
<p>To do this I used plain old Linux <code>diff</code> (but I&rsquo;m sure a better tool exists):</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>diff -bur ~/Downloads/current_site ./_site</span></span></code></pre></div></div>
<p>It was mostly plain sailing but step 3 and 6 had issues.</p>
<p>On step 3, when I removed the pages Gem, my <code>404.html</code> stopped having a page title of <code>404</code>.</p>
<p>This functionality was actually provided by the <code>jekyll-titles-from-headings</code> plugin which the GitHub pages Gem forces into the build.
So when I removed the pages Gem, the behaviour disappeared.</p>
<p>It took me about 3 hours of on-and-off debugging to figure that out, so if you are also doing this, hopefully it makes the update slightly easier.</p>
<p>On step 6, a lot of SASS deprecation warnings appeared.
This is a <a href="https://github.com/mmistakes/minimal-mistakes/issues/4054" >known issue</a> with my theme, and all I had to do was pin <code>jekyll-sass-converter</code> to a previous version.</p>

<h2 class="relative group">Fin
    <div id="fin" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fin" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Now I have a nice new Jekyll 4 based blog &#x1f604;</p>
<p><em>And</em>, complete control over my build pipeline.</p>
<p><em>And</em>, branch builds to check the impact of changes first<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</p>
<p>Win, win, win!</p>
<p>The best part of the upgrade is that Jekyll 4 includes relative <a href="https://jekyllrb.com/docs/liquid/tags/#linking-to-posts" >post_url</a> resolution, making the <code>jekyll-relative-links</code> plugin redundant (for my use case):</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-diff" data-lang="diff"><span style="display:flex;"><span><span style="color:#f92672">- [Click here](../_posts/2024-11-24-12-days-of-short-stories.md) to read the explanation of why I&#39;m writing them.
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+ [Click here]({% post_url 2024-11-24-12-days-of-short-stories %}) to read the explanation of why I&#39;m writing them.
</span></span></span></code></pre></div></div>
<p>Thanks for reading!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>And because supporting every plugin would take a lot of time.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Thankfully that same person has raised an <a href="https://github.com/github/docs/issues/36740" >issue</a> for GitHub to update their documentation to remove all references to the deprecated pipeline.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>End <code>&lt;/rant&gt;</code>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I might look to do a diff between the deployed and the branch as a build step later.
If the mood takes me.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="update"/><category term="jekyll"/><category term="github"/><summary type="html">I moved away from the branch build and github-pages Gem for this site, and now I have an up-to-date, and more configurable build.</summary></entry><entry><title type="html">Fun with GML</title><link href="https://thega.me.uk/code/fun-with-gml" rel="alternate" type="text/html" title="Fun with GML"/><published>2025-04-25T14:07:00+01:00</published><updated>2025-04-25T13:59:35+00:00</updated><id>https://thega.me.uk/code/fun-with-gml</id><content type="html" xml:base="https://thega.me.uk/code/fun-with-gml"><![CDATA[<p>After the best part of a decade working with data in the geospatial and aviation domains, I thought I would write about some fun data problems I encountered.</p>

<h2 class="relative group">Introduction
    <div id="introduction" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>When I started my career — in 2012 — I began by working on an 
<abbr title="Extensible Markup Language">XML</abbr>
-to-database conversion tool.
This tool existed primarily to assist those looking to consume the large volumes of OS MasterMap (
<abbr title="Ordnance Survey MasterMap">OSMM</abbr>
) data produced by <a href="https://en.wikipedia.org/wiki/Ordnance_Survey" >Ordnance Survey</a>, by loading said data into a spatial <a href="https://en.wikipedia.org/wiki/Oracle_Database" >Oracle</a> database.</p>
<p>OSMM was distributed as highly detailed 
<abbr title="Geography Markup Language">GML</abbr>
 (Geography Markup Language) — a standard XML-based format for encoding geographic information — files, allowing for a standardised exchange of the information within them.</p>
<p>OSMM contains features which record information on real-world objects;
everything from phone boxes to rivers.
Each feature contains lots of properties (like a name), but the most valuable thing was that it stored was the location and dimensions of each object.</p>
<p>In the United Kingdom (UK), councils would use this data to check what would be affected by planned building works.
If you were a building company, which needed to ensure you were aware of any obstructions, you would buy this data <em>before</em> you started building<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>As I joined, the customer base broadened to companies outside the OSMM ecosystem.
GML (or ISO 19136) is a standard and the tool allowed for generic XML mapping, so it was useful for more than just OSMM.</p>
<p>Most of my time was spent on the &lsquo;geographic&rsquo; part of this problem, as there are lots of weird and wonderful ways that the human-entered geometries used day-to-day, are not tolerated by spatial databases.</p>
<p>Here are my top four fun things which I encountered.
My favourite will always be &lsquo;putting the wrong unit of measure in&rsquo;, but here are some of the more interesting ones.</p>

<h2 class="relative group">Lat/Lon or Lon/Lat
    <div id="latlon-or-lonlat" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#latlon-or-lonlat" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I think the biggest way in which GML is &lsquo;wrong&rsquo; is the latitude and longitude being the wrong way around (or being read the wrong way around).</p>
<p>Within GML, you have to define a &lsquo;Spatial Reference System&rsquo; (
<abbr title="Spatial Reference System">SRS</abbr>
) which defines how the points you encode are interpreted and mapped to the Earth&rsquo;s surface.</p>
<p>Every SRS has bounds and a center point; from where 0 is measured.
The SRS I have seen used most frequently is WGS 84 — the global standard for GPS coordinates — which defines the world from <code>-180, -90</code> to <code>180, 90</code>.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Image showing a map of the world and a blue box showing the bounds of the EPSG:4326 reference system"
    width="516"
    height="260"
    src="/2025/04/fun-with-gml/bounds_epsg_4326.png"
    srcset="/2025/04/fun-with-gml/bounds_epsg_4326.png 800w, /2025/04/fun-with-gml/bounds_epsg_4326.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/04/fun-with-gml/bounds_epsg_4326.png"><figcaption>Source: <a href="https://spatialreference.org/ref/epsg/4326/" >https://spatialreference.org/ref/epsg/4326/</a></figcaption></figure>
<p>You also have OSGB36 (or <a href="https://spatialreference.org/ref/epsg/27700/" ><code>
<abbr title="European Petroleum Survey Group (used in spatial reference systems like EPSG:4326)">EPSG</abbr>
:27700</code></a>) which is specifically used in the UK by our national mapping agency, which defines the bounds from <code>0, 0</code> to <code>700000, 1300000</code>.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Image showing a map of the United Kingdom and a blue box showing the bounds of the EPSG:27700 reference system"
    width="516"
    height="260"
    src="/2025/04/fun-with-gml/bounds_epsg_27700.png"
    srcset="/2025/04/fun-with-gml/bounds_epsg_27700.png 800w, /2025/04/fun-with-gml/bounds_epsg_27700.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/04/fun-with-gml/bounds_epsg_27700.png"><figcaption>Source: <a href="https://spatialreference.org/ref/epsg/27700/" >https://spatialreference.org/ref/epsg/27700/</a></figcaption></figure>
<p>Many countries have their own SRSs to ensure local features are mapped accurately.</p>
<p>Ordnance Survey have some wonderful pages that dive deeper into this better than I can (with some really helpful pictures).
Their <a href="https://docs.os.uk/more-than-maps/deep-dive/a-guide-to-coordinate-systems-in-great-britain/myths-about-coordinate-systems" >page on myths</a> and their page on <a href="https://docs.os.uk/more-than-maps/deep-dive/a-guide-to-coordinate-systems-in-great-britain/the-shape-of-the-earth#ref505694403" >the shape of the earth</a> are great if you want to know more!</p>
<p>A coordinate like <code>50.909662, -1.405141</code> means nothing by itself.
You could <em>assume</em> that it is a lat/lon in WGS 84, and in this case you would be presented with the Cenotaph, in my hometown.
However, the numbers could also represent a lon/lat, and the location would be off the coast of Somalia.</p>
<p>The SRS encodes if longitude or latitude should be first, but that doesn&rsquo;t stop humans from getting it wrong (or software for that matter).</p>
<p>It would have probably been simpler to introduce a specification which didn&rsquo;t make this mistake possible.
Well the story I was told — which I cannot find independent verification for online, so it might be folklore — is that the original GML spec did define only one way to order latitude and longitude, but the examples in the document were the wrong way around.
By the time anyone had figured it out, it was too late.
Some followed the specification, others copied the examples;
everyone had picked a way and started working with it.</p>

<h2 class="relative group">Reference Geometries
    <div id="reference-geometries" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#reference-geometries" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>One of the more complex cases when loading GML comes when you have &lsquo;referenced&rsquo; geometries.
When defining the geometry representing a feature, humans tend to take shortcuts.</p>
<p>For example, if a cartographer was defining a field that runs up to a river, they might define the following:</p>
<blockquote><p>From the gate the field runs 200 meters north, then west to the river, then it follows the bank of the river south for 200 meters, before coming back to the gate.</p>
</blockquote><p>This is normally how the world works.
If the bank of the river moves, the field doesn&rsquo;t extend into the middle of the river;
the field contracts to the new bank of the river.</p>
<p>This makes using the data much harder in systems that don&rsquo;t handle references (like databases).
Datasets frequently won&rsquo;t tell you the section of the river that applies, you have to look it up in another part of the data, and extract the relevant part.</p>
<p>Programmatically this is a trivial intersection of two geometries, but becomes much harder when the geometry that is referenced might not be in the same file you are loading.
The reference might be hosted online, in a later file on the same 
<abbr title="Compact Disc">CD</abbr>
, or might not even have been digitised yet.</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;gml:FeatureCollection</span>
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">xmlns:gml=</span><span style="color:#e6db74">&#34;http://www.opengis.net/gml/3.2&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">xmlns:xsi=</span><span style="color:#e6db74">&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;gml:Point</span> <span style="color:#a6e22e">gml:id=</span><span style="color:#e6db74">&#34;end&#34;</span> <span style="color:#a6e22e">srsName=</span><span style="color:#e6db74">&#34;urn:ogc:def:crs:EPSG::4326&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;gml:pos&gt;</span>2.0 2.0<span style="color:#f92672">&lt;/gml:pos&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/gml:Point&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;gml:Geodesic&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;gml:pointProperty&gt;</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&lt;gml:Point</span> <span style="color:#a6e22e">gml:id=</span><span style="color:#e6db74">&#34;start&#34;</span> <span style="color:#a6e22e">srsName=</span><span style="color:#e6db74">&#34;urn:ogc:def:crs:EPSG::4326&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">&lt;gml:pos&gt;</span>1.0 1.0<span style="color:#f92672">&lt;/gml:pos&gt;</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">&lt;/gml:Point&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;/gml:pointProperty&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">&lt;!-- This is where the pain begins --&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;gml:pointProperty</span> <span style="color:#a6e22e">xlink:href=</span><span style="color:#e6db74">&#34;#end&#34;</span> <span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/gml:Geodesic&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/gml:FeatureCollection&gt;</span></span></span></code></pre></div></div>
<p>Then the geometry might be in a different SRS, which then necessitates conversion.</p>
<p>For my work, this became an expectation management task with our customers.
You have to draw a line somewhere (pun intended).
We allowed references to features on the same CD but nothing else.</p>
<p>This becomes even harder when you encounter geometries which don&rsquo;t align perfectly.</p>

<h2 class="relative group">The Puzzle Pieces Don&rsquo;t Fit Together
    <div id="the-puzzle-pieces-dont-fit-together" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-puzzle-pieces-dont-fit-together" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>One that would happen all the time, would be that the parts of a geometry wouldn&rsquo;t form a complete <em>closed</em> polygon.</p>
<p>This is an issue because databases such as Oracle/PostgreSQL, don&rsquo;t support them, and this is where our mapping tool was supposed to write them.
Databases are intentionally not fault-tolerant because when you assume how a polygon should close, you might introduce errors which may lead to catastrophic problems<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>A non-closed geometry can happen for many reasons, to name a few:</p>
<ol>
<li>The 
<abbr title="Unit of Measure">UoM</abbr>
 might be wrong, maybe through the use of non-
<abbr title="International System of Units">SI</abbr>
 units (like <code>m</code> for mile when it should be <code>mi</code>).</li>
<li>The referenced geometry (like a river) didn&rsquo;t have a point precisely where another line met it.
When you take the line(s) that are needed, they still don&rsquo;t meet.
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Image showing a polygon and a line where the line does not intersect at a known point"
    width="521"
    height="332"
    src="/2025/04/fun-with-gml/river.png"
    srcset="/2025/04/fun-with-gml/river.png 800w, /2025/04/fun-with-gml/river.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/04/fun-with-gml/river.png"></figure>
</li>
<li>Referenced geometries that don&rsquo;t intersect at all.</li>
<li>Just plain old bad input data that specified non-closed points.</li>
</ol>
<p>The solution was to implement auto geometry closure.
Customers could set a distance where they deemed geometries safe to close.</p>
<p>Two points that are 3 cm away from one another on a polygon 30 kilometres wide?
Probably fine.
Two that are 30 kilometres apart?
Let&rsquo;s take a closer look.
A non-closed military operation area?
Well&hellip;</p>
<p>This was one of those problems that&rsquo;s easy for humans to look at visually, but hard to get a machine to solve autonomously.
Do you put a new line in the gap?
Do you cut one line down if it&rsquo;s too long, or extend one out if it&rsquo;s too short?</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Image showing a good and bad closure of a triangle"
    width="333"
    height="121"
    src="/2025/04/fun-with-gml/closure.png"
    srcset="/2025/04/fun-with-gml/closure.png 800w, /2025/04/fun-with-gml/closure.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/04/fun-with-gml/closure.png"></figure>

<h2 class="relative group">Interpolated Geometries
    <div id="interpolated-geometries" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#interpolated-geometries" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>These were always the most fun!</p>
<p>When defining a geometry in real life, humans often don&rsquo;t want to define a line with lots of points.
Often we want to say &lsquo;a circle around X&rsquo;, or &lsquo;and arc from A to B to C&rsquo;.
This happens a lot in Aviation.</p>
<p>If we take the example below of Gatwick Airport, we have one circle for the inner airspace, and two arcs at either end of the outer airspace:</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="gallery-1"
    width="918"
    height="496"
    src="/2025/04/fun-with-gml/london_gatwick_hu_9d9a7e5847f9de96.png"
    srcset="/2025/04/fun-with-gml/london_gatwick_hu_9d9a7e5847f9de96.png 800w, /2025/04/fun-with-gml/london_gatwick.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/04/fun-with-gml/london_gatwick.png"><figcaption>The Airspace around London Gatwick — Source: <a href="https://skyvector.com/" >https://skyvector.com/</a></figcaption></figure>
<p>The west arc is 17 kilometres wide;
it&rsquo;s much better to define it as an arc than to digitise it with thousands of points.</p>
<p>GML (defined <a href="https://schemas.opengis.net/gml/3.2.1/geometryPrimitives.xsd" >here</a> if you read XML schemas) contains lots of complex geometry types which do not themselves have points, but instead convey an <a href="https://en.wikipedia.org/wiki/Interpolation" >interpolation</a>.
I have seen a <code>Arc</code>, <code>Circle</code>, <code>ArcByCenterPoint</code>, <code>CircleByCenterPoint</code>, <code>Geodesic</code>, and <code>OffsetCurve</code><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> used in aviation.</p>
<p>There are other types (like a <a href="https://en.wikipedia.org/wiki/Euler_spiral" ><code>Clothoid</code></a>), but I have never seen one in the wild.</p>
<p>You probably guessed it, but a spatial database wants none of these complex types.
Before loading one of these types they need to undergo a process called &lsquo;densification&rsquo; — converting interpolated geometries into a collection of points connected by lines.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Image showing a curve with different densification granularity"
    width="449"
    height="168"
    src="/2025/04/fun-with-gml/densification.png"
    srcset="/2025/04/fun-with-gml/densification.png 800w, /2025/04/fun-with-gml/densification.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/04/fun-with-gml/densification.png"></figure>
<p>This process takes quite a bit of customisation depending on your use case and the size of the geometry in question.
You want to balance the amount of detail you keep (a circle has infinite detail), and the volume of the data you generate.
More points might mean terabytes of data, but fewer points might mean that the geometry doesn&rsquo;t cover the area you want any more, and you don&rsquo;t flag up a flight that is 100% coming into your airspace.</p>

<h2 class="relative group">Fin
    <div id="fin" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fin" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Thanks for reading!</p>
<p>If you know more about this domain than I do, and you notice something wrong;
reach out, and I will fix any inaccuracies.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I could probably write a whole blog on designing datasets that can return you the answer to the question &ldquo;What data would we have given someone if they asked for it 4 weeks ago&rdquo;.
Councils in the UK frequently have to deal with retrospective planning permission requests.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Of course you can fly over that military airspace, the polygon wasn&rsquo;t closed!&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>A line that is &lsquo;offset&rsquo; from another by a given amount.
Very useful for defining flight corridors.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="engineering"/><category term="maps"/><summary type="html">Four &amp;lsquo;fun&amp;rsquo; GML problems that pop-up when working with GML in the wild.</summary></entry><entry><title type="html">The Beautiful World of Walter Mitty</title><link href="https://thega.me.uk/the-beautiful-world-of-walter-mitty" rel="alternate" type="text/html" title="The Beautiful World of Walter Mitty"/><published>2025-03-28T23:09:00+00:00</published><updated>2025-04-25T16:00:31+00:00</updated><id>https://thega.me.uk/the-beautiful-world-of-walter-mitty</id><content type="html" xml:base="https://thega.me.uk/the-beautiful-world-of-walter-mitty"><![CDATA[<p><a href="https://www.imdb.com/title/tt0359950" >The Secret Life of Walter Mitty (2013)</a> lives rent-free in my mind, and I have to talk about it.</p>
<p>In the deep, deep weirdness which was lockdown 2021 — where I had done more Zoom Quizzes than I care to admit, and I had watched every episode of <a href="https://www.imdb.com/title/tt0112178" >Star Trek: Voyager</a> <em>and</em> <a href="https://www.imdb.com/title/tt0092455/" >Star Trek: The Next Generation</a> — I was in desperate need of the great outdoors.</p>
<p>I don&rsquo;t know how I stumbled upon this film, but all I knew was that it had the &lsquo;<a href="https://www.imdb.com/title/tt0942385/" >Tropic Thunder</a>&rsquo; guy in it, and had a reasonably good score (7.3 out of 10).
Directed by and starring Ben Stiller, I was not prepared for a visually stunning, and emotionally uplifting masterpiece that took me on a journey, stealing me away from the crushing boredom of lockdown.</p>
<p>As of today, I have probably seen it over ten times, and I am always overjoyed when it&rsquo;s one of the in-flight films when I fly.
Which is odd for me; I rarely re-watch films.</p>
<p>But what makes this film a 10 out of 10 film for me?
Why is it so special?</p>

<figure>
        <img
          class="my-0 rounded-md"
          loading="lazy"
          decoding="async"
          fetchpriority="auto"
          alt="Still from The Secret Life of Walter Mitty (2013)"
          width="2048"
          height="1033"
          src="/2025/03/the-beautiful-world-of-walter-mitty/the_secret_life_of_walter_mitty_1_hu_cee01871d94a41cd.jpg"
          srcset="/2025/03/the-beautiful-world-of-walter-mitty/the_secret_life_of_walter_mitty_1_hu_cee01871d94a41cd.jpg 800w,/2025/03/the-beautiful-world-of-walter-mitty/the_secret_life_of_walter_mitty_1_hu_d77da8fc691ceac5.jpg 1280w"
          sizes="(min-width: 768px) 50vw, 65vw"
          data-zoom-src="/2025/03/the-beautiful-world-of-walter-mitty/the_secret_life_of_walter_mitty_1.jpg"
        />
  
  <figcaption>Photo credit: TM &amp; © 2012 Twentieth Century Fox Film Corporation</figcaption>
  </figure>
<p>As films go, <em>The Secret Life of Walter Mitty</em> is relatively simple.
Based on James Thurber&rsquo;s 1939 <a href="https://en.wikipedia.org/wiki/The_Secret_Life_of_Walter_Mitty" >short story</a>, the film follows a photo editor at Life magazine who, when faced with the loss of his job, accidentally embarks on an adventure that takes him across the globe, in search of a missing photograph.</p>
<p>The film shows Walter living a mundane, simple, but most importantly <em>safe</em>, life.
He frequently daydreams that he has some deeper meaning to his life, that he is doing greater things with his time.</p>
<p>This resonates with me.
I&rsquo;m not a fireman, an astronaut, or a Nobel Peace Prize winner (I know, shocker), I have a &lsquo;safe&rsquo; job.
There&rsquo;s no <em>greater purpose</em> to Software Architecture, you&rsquo;re not saving lives.</p>
<p>As he sets out on his adventure you&rsquo;re left wondering: &ldquo;Is this another daydream?&rdquo;</p>
<p>In some ways the adventure is him &lsquo;failing upwards&rsquo;, bouncing from one issue to the next, and you could dismiss it as silly.
I am of the opinion that the plot is good and compelling, but it&rsquo;s not <em>the</em> selling point of the film.</p>
<p>What makes this film a masterpiece is that it plants you firmly in Walters shoes.
You experience the journey though his eyes.</p>
<p>You feel the water as he jumps from the helicopter into the Atlantic Ocean, trying to catch a boat.</p>
<p>The wind blows through your hair as Walter long-boards away from a volcanic eruption, down the hills of Iceland.</p>

<figure>
        <img
          class="my-0 rounded-md"
          loading="lazy"
          decoding="async"
          fetchpriority="auto"
          alt="Still from The Secret Life of Walter Mitty (2013)"
          width="2569"
          height="1251"
          src="/2025/03/the-beautiful-world-of-walter-mitty/featured_hu_a9049c44fa12eff1.jpg"
          srcset="/2025/03/the-beautiful-world-of-walter-mitty/featured_hu_a9049c44fa12eff1.jpg 800w,/2025/03/the-beautiful-world-of-walter-mitty/featured_hu_2a9328ba394b6252.jpg 1280w"
          sizes="(min-width: 768px) 50vw, 65vw"
          data-zoom-src="/2025/03/the-beautiful-world-of-walter-mitty/featured.jpg"
        />
  
  <figcaption>Photo credit: TM &amp; © 2012 Twentieth Century Fox Film Corporation</figcaption>
  </figure>
<p>You shiver from the cold of the Afghan Himalayas as Walter stares down the elusive Snow Leopard.</p>
<p>The ending is heartfelt, and fills me with joy every time I see it.
Ben Stiller captures Walters unshackling from the mundane perfectly.
The film is outstandingly beautiful.</p>
<p>Over the course of the film Walter discovers courage, purpose, and the beauty of stepping out of his comfort zone.
But in watching this film, you as the viewer feel like you&rsquo;ve been on an adventure of your own;
which, when you&rsquo;re feeling stagnant (like when you&rsquo;re on a plane), is what you really need.</p>
<lite-youtube videoid="QD6cy4PBQPI" playlabel="QD6cy4PBQPI" params=""></lite-youtube>

<p>Alright, fine.
I&rsquo;ll watch it again.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="films"/><category term="reviews"/><summary type="html">The 2013 Film &amp;lsquo;The Secret Life of Walter Mitty&amp;rsquo; is visually astounding, and you should watch it!</summary></entry><entry><title type="html">I visited New Zealand - Part 9</title><link href="https://thega.me.uk/holidays/new-zealand-9" rel="alternate" type="text/html" title="I visited New Zealand - Part 9"/><published>2025-03-15T20:09:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-9</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-9"><![CDATA[
<h2 class="relative group">Saturday 15<sup>th</sup>: Auckland Encore
    <div id="saturday-15th-auckland-encore" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#saturday-15th-auckland-encore" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="queenstown-to-auckland.svg" alt="Queenstown to Auckland" />
        <figcaption>Queenstown to Auckland (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-45.0194,168.7453&amp;destination=-37.0081,174.7917" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>The holiday was coming to a close, and it was time for us to begin our journey back home.</p>
<p>When I originally booked the flights I wanted to leave some buffer time in.
Under no circumstances did I want to miss our two flights back to the UK with Singapore Air.
If we had travelled from Queenstown and done a &lsquo;self-transfer&rsquo; in Auckland, we would not have been protected in the event of a delay, meaning we would have to sort out new flights ourselves.</p>
<p>I had the bright idea that we should travel back up to Auckland, stay overnight, see some extra stuff, and then do the big journey a day later.
This had some pros, and some cons, which we will get into later.</p>

<h3 class="relative group">Queenstown Gardens
    <div id="queenstown-gardens" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#queenstown-gardens" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>We hadn&rsquo;t really had any time to wander through Queenstown and see what it looked like when it was light outside.
The days were short — as it was winter — and we had spent most of our time going on tours.
Today was the first free time we had whilst the sun was up, and we chose to stroll around the <a href="https://en.wikipedia.org/wiki/Queenstown_Gardens" >Queenstown Gardens</a>.</p>
<p>The gardens are located on a peninsula in the center of Queenstown and as you walk around them, you can see spectacular views of the bay, and in the distance, the mountains.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/03/i-visited-new-zealand-part-9/new_zealand_2127_hu_189414a8b2c64b99.jpeg 330w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2127_hu_de59e2b72d41d1c7.jpeg 660w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2127_hu_f1051ff7654b5396.jpeg 1024w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2127_hu_c3d144e150eeb619.jpeg 2x"
          src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2127_hu_de59e2b72d41d1c7.jpeg"
          data-zoom-src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2127_hu_c3d144e150eeb619.jpeg"
          
          title="A view out over the bay from Queenstown Gardens"
        />
        <img
          class="rounded-md"
          srcset="/2025/03/i-visited-new-zealand-part-9/new_zealand_2135_hu_130d91764d533e53.jpeg 330w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2135_hu_80b171a9f2cbd5b2.jpeg 660w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2135_hu_72393c49a0a0c09a.jpeg 1024w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2135_hu_284fd23a47693771.jpeg 2x"
          src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2135_hu_80b171a9f2cbd5b2.jpeg"
          data-zoom-src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2135_hu_284fd23a47693771.jpeg"
          
          title="A Kurī sculpture found in the gardens"
        />
        <img
          class="rounded-md"
          srcset="/2025/03/i-visited-new-zealand-part-9/new_zealand_2142_hu_b52ff22165ac53e.jpeg 330w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2142_hu_b51abb949d314362.jpeg 660w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2142_hu_a51e3b2c9b6fad44.jpeg 1024w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2142_hu_bb1d492605da1201.jpeg 2x"
          src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2142_hu_b51abb949d314362.jpeg"
          data-zoom-src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2142_hu_bb1d492605da1201.jpeg"
          
          title="A view of the peninsula and the Queenstown Gardens"
        />
    </span>
  
    <figcaption class="text-center">The Queenstown Gardens</figcaption>
  
</figure>

<p>We managed to pick the time and day when the Queenstown <a href="https://en.wikipedia.org/wiki/Parkrun" >Parkrun</a> was underway, so we spent quite a bit of time standing to the side, letting the runners past.
This was a blessing in disguise, as it forced us to take in the scenery.</p>
<p>Our walk around the park turned into a bit of a retrospective of our holiday.
It felt like a natural end point, and as we wandered past the different sculptures that can be found in the gardens, we reminisced over the best parts of our holiday.</p>

<h3 class="relative group">More Balls and Bangles
    <div id="more-balls-and-bangles" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#more-balls-and-bangles" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Having already been to <a href="https://www.ballsandbangles.com/" >Balls and Bangles</a> a couple of days earlier, we knew we wanted to try some more of their bagels before we left.
Predictably the food was great, and filling.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/03/i-visited-new-zealand-part-9/new_zealand_2141_hu_1f6500f7121f77e3.jpeg 330w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2141_hu_45dfecb856c2e306.jpeg 660w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2141_hu_a951c3ef994d23bf.jpeg 1024w, /2025/03/i-visited-new-zealand-part-9/new_zealand_2141_hu_c368ec968470e651.jpeg 2x"
          src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2141_hu_45dfecb856c2e306.jpeg"
          data-zoom-src="/2025/03/i-visited-new-zealand-part-9/new_zealand_2141_hu_c368ec968470e651.jpeg"
          
          title="Me and a Kiwi (not to scale)"
        />
    </span>
  
    <figcaption class="text-center">Human not to scale</figcaption>
  
</figure>

<p>Set up for the day, we ventured into <a href="https://www.aoteanz.com/" >Aotea Gifts</a>, but despite a 10% off voucher, I couldn&rsquo;t bring myself to buy anything.
There are only so many novelty keyrings, t-shirts, and mugs I can look at before it all washes over me.
We had picked up gifts for all of our friends from the many Wētā shops we had been too; we didn&rsquo;t need a bag of chocolates with &lsquo;Kiwi Poo&rsquo; written on it.
That&rsquo;s not to say there were not come cool gifts to be found (like a locally knitted woollen jumper), but most of the things I wanted to buy exceeded my end-of-the-holiday budget.</p>
<p>The time had come however, we had to check out of the hotel and head to the airport.</p>

<h3 class="relative group">Flying back to Auckland
    <div id="flying-back-to-auckland" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#flying-back-to-auckland" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Although everyone on our LoTR tour had booked our flights separately, there were only a limited number of flights back to Auckland.
This resulted in us bumping into two of the couples from our tour at the airport.</p>
<p>*[LOTR]: Lord of the Rings</p>
<p>Although it probably makes sense we would bump into someone, it still felt like a &lsquo;what a small world&rsquo; moment.
We swapped pleasantries, but it was obvious we were all holidayed out, waiting to get on the flight and head towards our respective homes.</p>
<p>Just like the flight from Wellington, the short two-hour flight back to Auckland passed without note.
I did not do any better at the in-flight trivia questions.</p>
<p>Unlike our fellow LoTR travellers who were catching connecting flights, we were headed into Auckland for one final night in the <a href="https://www.ihg.com/voco/hotels/gb/en/auckland/aklcn/hoteldetail" >voco in Auckland City Centre</a>.</p>

<h3 class="relative group">Sushi, at last
    <div id="sushi-at-last" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sushi-at-last" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The journey back to the city center was a &rsquo;life lesson&rsquo; moment for me.
We exited the airport and grabbed one of the taxis from the rank in the car park.</p>
<p>As I watched the meter rise rapidly, I decided that I needed to plan ahead more in the future.
By the time we reached the hotel the meter read a daunting $110 NZ (£55).
The journey was about 26 km (16 mi) which in the UK would have cost about £35.
Not a massive difference in the grand scheme of the holiday, but in future I will not just grab the first Taxi I see; I will endeavour to at least investigate how much an Uber or a bus costs first.
Next time I could spend that £20 on Kiwi Poo.</p>
<p>We checked into the hotel, getting a room a couple of floors higher than our last, but I was unable to enjoy it.
The second the door closed behind us, exhaustion washed over me, and the idea of going out to see the city felt like a Herculean task.</p>
<p>Looking back, this is probably the only thing in the holiday that I regret.
I should have pushed through the tiredness to go out and see the city more.
Instead, I napped for a couple of hours.</p>
<p>Eventually, energy reserves topped up, we headed out to explore.
Walking down Queen Street we remembered our first day here almost two-weeks ago.
We had appraised Auckland as a wonderful city, but now having experienced Wellington and Queenstown, we struggled to pick our favourite<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> (we knew it wasn&rsquo;t Auckland).</p>
<p>We popped into a couple of stores, but ultimately just window shopped; passing the time until our final dinner.
We were finally going to have some Sushi at a small place called <a href="https://maps.app.goo.gl/uBTfPmNgZA7PZgQ6A" >Sushi Train</a>.
Before coming to New Zealand, we had heard that the fish in Auckland is especially fresh, so we were very much looking forward to it.</p>
<p>It did not disappoint!
A <a href="https://en.wikipedia.org/wiki/Conveyor_belt_sushi" >conveyor belt</a> of little plates weaved its way around a central kitchen; allowing us to select what we wanted at a pace that suited us.</p>
<p>Everything was delicious, except some fermented soy beans I tried, which I will not be ordering again (sorry soy bean fans).</p>
<p>★★★★☆ 4/5 - The restaurant was no-frills, but the Sushi was fast, and high quality.</p>

<h2 class="relative group">Sunday 16<sup>th</sup>: Returning to the UK
    <div id="sunday-16th-returning-to-the-uk" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sunday-16th-returning-to-the-uk" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="auckland-to-london.svg" alt="Auckland to London, via Changi - Singapore" />
        <figcaption>Auckland to London, via Changi - Singapore (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-37.0081,174.7917&amp;destination=51.4775,-0.4614&amp;waypoints=1.3592,103.9894" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>This was it, the final trip to the airport.</p>
<p>As we sat in the departure lounge, waiting to board the plane, my other half and I both shed a tear that we were having to go home.
It would be awfully nice to not have to work and be able to stay, but it was not to be (plus our dogs would wonder where we had gotten to).</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/03/i-visited-new-zealand-part-9/heading_home_hu_df7a2fe1028b7dff.png 330w, /2025/03/i-visited-new-zealand-part-9/heading_home_hu_fdea3cfa9cd36246.png 660w, /2025/03/i-visited-new-zealand-part-9/heading_home_hu_a59eecf1d0b4dca0.png 1024w, /2025/03/i-visited-new-zealand-part-9/heading_home_hu_3868bc162f2a5bc6.png 2x"
          src="/2025/03/i-visited-new-zealand-part-9/heading_home_hu_fdea3cfa9cd36246.png"
          data-zoom-src="/2025/03/i-visited-new-zealand-part-9/heading_home_hu_3868bc162f2a5bc6.png"
          
          
        />
    </span>
  
    <figcaption class="text-center">Still from The Lord of the Rings: The Return of the King</figcaption>
  
</figure>

<p>The journey back from Auckland to Singapore, then Singapore to Heathrow, was a slog.
The flights took the same time — and route — as coming to New Zealand, but without the anticipation of new lands to discover, each hour seemed to drag<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>But, we made it home.
Our dogs were happy to see us.
Our cats acknowledged our existence.
And our house hadn&rsquo;t burned down.</p>
<p>It was time to sort through the 1,700 photos we had taken, so we could subject our friends to a presentation of our time away.</p>

<h2 class="relative group">Fin
    <div id="fin" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fin" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>If you have read this far, congratulations!</p>
<p>Looking back, I started writing this blog in August 2024, and it is currently March 2025.
That&rsquo;s eight months to write a blog about a three-week holiday.</p>
<p>When I started I wanted to write just one blog, but I quickly realised that I struggle to write short form content.
I wrote up until Hobbiton before I realised that no one wanted to read a single blog for an hour or more.</p>
<p>Breaking the content up not only meant that the content was more consumable, but I could &lsquo;commit&rsquo; in smaller chunks, instead of everything waiting until the end.</p>
<p>I have since been to Dublin in Ireland, but it&rsquo;s been six months since I went last September, so I don&rsquo;t think I will write a blog about it.
Partially because it was so long ago, but also because I am not sure if I want to write more travel blogs.
I guess we shall see.</p>
<p>Anyway, back to the holiday!</p>
<p>Grabbing a bit of the review of the tour back in <a href="https://thega.me.uk/2025/01/i-visited-new-zealand-part-7/#all-good-things-come-to-an-end" >part 7</a>:</p>
<blockquote><p>The tour turned what would have been ten days of me and my other half cramped into a rental car into a fun, relaxing, and educational experience, where every logistical detail was handled for me; I only needed to be present.</p>
<p>We visited places that we might not have thought to visit on our own, like <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-4/#hairy-feet-waitomo" >Hairy Feet Waitomo</a>, which was in many ways more enjoyable than <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-3/#hobbiton" >Hobbiton</a>.</p>
</blockquote><p>My view of guided tours has completely flipped after this holiday.
I used to think they were a waste of money, but I have been proven wrong.
For future getaways I will 100% be looking to book something guided where possible.</p>
<p>How to finish this off?</p>
<p>My other half and I normally do <em>&lsquo;3 best bits and 3 worst bits&rsquo;</em> after every holiday, which seems like a good thing to end on.
So here are the top and bottom three things from my time in New Zealand:</p>
<p>Worst Bits:</p>
<ol>
<li>The wasted final day in Auckland — we should have just flown back the day before.</li>
<li>Having to leave.</li>
<li>The fact it is so far away from where we live, so we are unlikely to be able to go back again.</li>
</ol>
<p>Best Bits:</p>
<ol>
<li>The down to earth tour at <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-4/#hairy-feet-waitomo" >Hairy Feet</a>.</li>
<li>The wonder of <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-3/#hobbiton" >Hobbiton</a>.</li>
<li>Dressing up and visiting the filming locations in <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-5/#off-road" >Wellington</a>, <a href="https://thega.me.uk/2025/01/i-visited-new-zealand-part-6/#wednesday-12th-off-road-film-locations" >Queenstown</a> (and Hobbiton, again).</li>
</ol>
<p>Seriously, well done for making it this far.
I hope you took at least one thing away; or maybe you were persuaded to go visit yourself.</p>
<p>Regardless, thank you for having me New Zealand.
Kia Ora!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>If we had to pick, and I could work remotely, we would probably choose Wellington.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Credit to Singapore Airlines!
Every flight was on time (or early).
The staff were fantastic, the food was delicious, and the in-flight entertainment was entertaining.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">It&amp;rsquo;s time to return to our lives back in the UK, so we spend one final night in Auckland before heading home</summary></entry><entry><title type="html">Looking back - 10 years writing application framework code</title><link href="https://thega.me.uk/code/10-years-frameworks" rel="alternate" type="text/html" title="Looking back - 10 years writing application framework code"/><published>2025-02-19T15:00:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/code/10-years-frameworks</id><content type="html" xml:base="https://thega.me.uk/code/10-years-frameworks"><![CDATA[<p>After a decade of designing, building, and maintaining an application framework for real-time data processing applications, what have I learned? What assumptions did I make ten years ago that were vindicated, and which did not stand the test of time?</p>

<h2 class="relative group">Background
    <div id="background" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#background" aria-label="Anchor">#</a>
    </span>
    
</h2>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Info
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>If you aren&rsquo;t interested in the back-story, and want to jump to what I have leaned, you can skip <a href="/2025/02/looking-back-10-years-writing-application-framework-code/#what-have-i-learned" >here</a>.</p></div></div><p>Inspired by <a href="https://chriskiehl.com/article/thoughts-after-10-years" >this post by Chris Kiehl</a> — which you should go read — I began thinking about what lessons I had learned over the last ten years of my career.</p>
<p>A decade ago I was a Software Engineer, three years out of the University of Southampton.
I had a passion for the craft of software engineering; how could we build pipelines and use the tools available to ensure that when we shipped software, we knew it worked.</p>
<p>Now, I&rsquo;m Lead Architect for <a href="https://www.cirium.com/" >Cirium</a>, and I spend my days designing enterprise solutions which span the whole business.
I&rsquo;m not supposed to write software anymore, but sometimes I need a break from Excel spreadsheets and Teams calls; so I crack out my 
<abbr title="Integrated Development Environment - a software application used for coding">IDE</abbr>
 and pick up my passion project - A real-time Kafka-based application framework.</p>

<h2 class="relative group">What do I mean by &lsquo;Application Framework&rsquo;?
    <div id="what-do-i-mean-by-application-framework" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-do-i-mean-by-application-framework" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>To first explain what I mean by &lsquo;Application Framework&rsquo;, I first have to explain &lsquo;why an Application Framework&rsquo;.
What is its reason for existing that something off the shelf could not provide?</p>
<p>Back in 2016, Snowflake Software (now Cirium), processed data from many sources.
This data came in disparate formats, which all needed homogenising and fusing into a single domain object.
We might get data about the location of a flight from one source, and the planned route of the flight, from another.
We then produced a multitude of datasets that combined all these sources together to provide insight to customers.</p>
<p>This is of course <em>massively</em> over simplifying what we did, but the important point is we were doing a <strong>lot</strong> of real-time 
<abbr title="Extract, Transform, Load - a process used to collect data from various sources, transform it into a consistent format, and load it into a data warehouse">ETL</abbr>
 operations.</p>
<p>To make our product easier to work on (and debug), we opted for building single-purpose <a href="https://en.wikipedia.org/wiki/Microservices" >Microservices</a>, with a <a href="https://kafka.apache.org/" >Kafka</a> message-bus glueing it all together; allowing us to see the data at each stage of processing.</p>
<p>As an example:</p>
<ol>
<li>A &lsquo;connector&rsquo; pulls data from a source and places it on Kafka unchanged.</li>
<li>A &rsquo;normaliser&rsquo; would take XML data from a data provider and convert it into an internal JSON interchange format.</li>
<li>An &rsquo;enricher&rsquo; would add additional contextual information (e.g. the phase of the flight, based on speed and altitude).</li>
<li>And so on&hellip;</li>
</ol>
<p>Now, it&rsquo;s no secret that microservice architectures transfer the complexity from the code into the operation and deployment of the system, but the downside we noticed first is that when you write lots of microservices, you end up with a lot of code that looks the same.</p>
<p>There are whole &lsquo;rule books&rsquo; on what behaviour each microservice should exhibit.
<a href="https://12factor.net" >The Twelve-Factor App</a> probably being the one I reference the most.</p>
<blockquote><p>A twelve-factor app never concerns itself with routing or storage of its output stream. It should not attempt to write to or manage logfiles. Instead, each running process writes its event stream, unbuffered, to <code>stdout</code>.</p>
<p>— <a href="https://12factor.net/logs" >The Twelve-Factor App</a></p>
</blockquote><p>Once one, twenty, or fifty of your microservices want to log to <code>stdout</code>, want to read and write from Kafka, and want to publish metrics, you end up with a lot of configuration that looks the same.</p>
<p>Off-the-shelf frameworks like <a href="https://spring.io/projects/spring-boot/" >Spring Boot</a> solve the &lsquo;how&rsquo; of these functions — giving you a <code>KafkaTemplate</code> to write to Kafka, for example — but as off-the-shelf tools they don&rsquo;t prescribe your businesses desired configuration of those functions.</p>
<p>Questions like &lsquo;how do we name consumer groups&rsquo;, and &lsquo;what message payload do we send&rsquo;, and &lsquo;what prefix do I use for metrics&rsquo;, pop up every time you write a new microservice.</p>
<p>You could, for example, configure a different prefix for metrics in every single microservice (which we did) to ensure you can differentiate them.
This seems sensible to start with, until you realise you can&rsquo;t graph all the metrics together easily, and you should have used a tag instead.
Without some central management of config, you have to update each of the apps to the new behaviour.</p>
<p>Spring Boot and other frameworks don&rsquo;t have an opinion of how your business wants to run their applications, allowing an unbounded combination of configurations.</p>
<p>An &lsquo;<em>Application Framework</em>&rsquo; in my context, is the codification of those business opinions.
It limits the choices developers can make about what they build, constraining them to achieve a homogenous ecosystem across all your applications.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="application-framework"
    width="361"
    height="201"
    src="/2025/02/looking-back-10-years-writing-application-framework-code/application_framework.png"
    srcset="/2025/02/looking-back-10-years-writing-application-framework-code/application_framework.png 800w, /2025/02/looking-back-10-years-writing-application-framework-code/application_framework.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/02/looking-back-10-years-writing-application-framework-code/application_framework.png"></figure>
<p>An application framework adds a layer on top of off-the-shelf frameworks that is concerned with how your businesses applications should run.</p>
<p>Importantly, it should make it easy to build the right thing.
That is, developers should <em>want</em> to use it, because it makes their lives easier.
No one actually wants to make sure that the upstream latency metric is working on each component, or that every log line is JSON; they just want to write the cool business logic that analyses airspaces.</p>
<p>That business logic is actually where the <strong>value</strong> of your business is located.
Customers are not paying you to have the best Kafka serialisation code, or a metrics library that adds the correct tags.
The less time you spend duplicating Kafka test harnesses, the more time you can dedicate to making sure the business logic passes its behaviour tests.</p>

<h2 class="relative group">What did I build?
    <div id="what-did-i-build" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-did-i-build" aria-label="Anchor">#</a>
    </span>
    
</h2>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Note
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>Although this section is called &lsquo;What did I build?&rsquo;, I cannot claim that I did build it all myself.
I have worked with some very talented engineers over the years who all helped add and improve this framework.
As always, it&rsquo;s a team effort.</p></div></div><p>Back in 2016 we were building lots of microservices, creating libraries to handle some common functions like metrics.
We had somewhere in the region of thirty at the time, but I was predicting that we would hit one hundred within a couple of years.</p>
<p>From a maintenance perspective, this was concerning.
We would have over a hundred applications which were configuring Spring Boot, <a href="https://spring.io/projects/spring-kafka" >Spring Kafka</a>, and <a href="https://github.com/DataDog/java-dogstatsd-client" >StatsD</a>; all of which would require updates as breaking changes arose or behaviour changed.</p>
<p>At the time I watched a talk — one which I cannot find since, so I might have hallucinated it — after I attended <a href="https://www.opencredo.com/blogs/microservices-manchester-conference-recap" >Microservices Manchester</a>, where the presenter said something akin to:</p>
<blockquote><p>As an application developer, just put me in a box.
I don&rsquo;t care about where configuration comes from, where logging or metrics end up, or how events are routed.
I just want APIs which abstract away the complexity of how these services are provided.</p>
<p>— Someone</p>
</blockquote><p>Something in this statement called to me.</p>
<p>I went home and begun working on a prototype of the application framework which would become the core of every application that was built within the business.</p>
<p>The premise was simple.
An engineer would create a Maven project and add a dependency on the framework.
They would then write a &lsquo;consumer&rsquo; class, annotate it with a <a href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html" >Spring annotation</a> for autowiring, and voilà!</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#75715e">/** Simple transformer example. */</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@Component</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">@Slf4j</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> MyConsumer <span style="color:#66d9ef">implements</span> InboundProcessor<span style="color:#f92672">&lt;</span>MyPayload<span style="color:#f92672">&gt;</span> {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Autowired</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> OutboundDispatcher outboundDispatcher;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Override</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">process</span>(<span style="color:#66d9ef">final</span> InboundEvent<span style="color:#f92672">&lt;</span>MyPayload<span style="color:#f92672">&gt;</span> event) <span style="color:#66d9ef">throws</span> InboundProcessorException {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// business logic goes here</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (event.<span style="color:#a6e22e">isCool</span>()) {
</span></span><span style="display:flex;"><span>            log.<span style="color:#a6e22e">info</span>(<span style="color:#e6db74">&#34;Doing some important work&#34;</span>);
</span></span><span style="display:flex;"><span>            event.<span style="color:#a6e22e">incrementCoolness</span>();
</span></span><span style="display:flex;"><span>            outboundDispatcher.<span style="color:#a6e22e">dispatch</span>(event)
</span></span><span style="display:flex;"><span>        } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">throw</span> <span style="color:#66d9ef">new</span> InboundProcessorException(<span style="color:#e6db74">&#34;Something has gone wrong&#34;</span>);
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>You would need to bring-your-own domain object (<code>MyPayload</code> in this example) and configure some properties (like which Kafka topic to read from), but that was about it.
The application would start up and your business logic class (<code>MyConsumer</code>) would start receiving messages.</p>
<p>Sure, it&rsquo;s a very thin layer on top of Spring Kafka, but the engineer didn&rsquo;t need to worry about <code>KafkaConsumer</code> or <code>KafkaProducer</code> setup, how acknowledgements work, or how messages are serialised and deserialized from the on-the-wire format.</p>
<p>They concentrate on building, and testing, only the logic needed to give the microservice its behaviour.</p>
<p>The framework could handle retries, batching, latency metrics, health checks, etc.</p>
<p>The &lsquo;pièce de résistance&rsquo; however, was the simple test framework that accompanied it:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#a6e22e">@EventFrameworkTest</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> MyConsumerIT {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">@Test</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">testMessage</span>(FrameworkEnv env) {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// GIVEN an inbound message</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">final</span> MyPayload in <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> MyPayload();
</span></span><span style="display:flex;"><span>        in.<span style="color:#a6e22e">setCoolness</span>(59);
</span></span><span style="display:flex;"><span>        env.<span style="color:#a6e22e">sendToTopic</span>(<span style="color:#e6db74">&#34;inbound&#34;</span>, in);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// THEN an outbound message is received</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">final</span> MyPayload out <span style="color:#f92672">=</span> env.<span style="color:#a6e22e">getFromTopic</span>(<span style="color:#e6db74">&#34;outbound&#34;</span>);
</span></span><span style="display:flex;"><span>        assertThat(out.<span style="color:#a6e22e">getCoolness</span>()).<span style="color:#a6e22e">isEqualTo</span>(60);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>The sheer volume of lines <code>sendToTopic</code> and <code>getFromTopic</code> replaced was unbelievable.</p>
<p>I put a very quick example together of an application using this, and one not using this.
Being able to strip 90% of the tests and production code out into a well tested library is very compelling.</p>

<h2 class="relative group">What have I learned?
    <div id="what-have-i-learned" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-have-i-learned" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So with all of that, back to the point of this blog.</p>
<p>After ten years of maintaining this framework, what have I learned?</p>
<p>(In no particular order of priority)</p>

<h3 class="relative group">Seek a common vernacular
    <div id="seek-a-common-vernacular" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#seek-a-common-vernacular" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>You will have noticed I&rsquo;ve used some words above like &lsquo;connector&rsquo;, &rsquo;normaliser&rsquo;, and &lsquo;fuse&rsquo;.</p>
<p>To have highly technical conversations, you need simple ways of communicating common concepts:</p>
<dl>
<dt>Connector</dt>
<dd>A microservice which pulls data from an external source and places the response on Kafka unaltered.</dd>
<dt>Normaliser</dt>
<dd>A microservice which reads raw data and converts it into the internal interchange model (normally JSON).</dd>
<dt>Fuser</dt>
<dd>A microservice which aggregates data together to create a single view.</dd>
</dl>
<p>These names may seem logically intuitive, but it actually requires a concerted effort to nudge people to using these terms.
Once you get there however, you are able to side step a lot of the description and jump straight to an understanding.</p>
<p>The framework I described above is known internally by a name I coined after using a random name generator.
It may seem silly — it <em>is</em> intentionally so — but having a recognisable name that has zero overlap with existing solutions, gives you a &lsquo;brand&rsquo; that engineers can easily recognise.</p>
<p>The framework itself supports four different types of application, which we also picked clear, unambiguous names for:</p>
<dl>
<dt>Sink</dt>
<dd>A microservice that only receives Kafka events.</dd>
<dt>Source</dt>
<dd>A microservice that only generates Kafka events.</dd>
<dt>Transformer</dt>
<dd>A microservice which receives and then generates events.</dd>
<dt>Blank</dt>
<dd>A microservice which has all the common functionality but does not handle events.</dd>
</dl>
<p>Having these common descriptions of functionality allows you to say &lsquo;oh, we need a new transformer, a connector for the raw data&rsquo;.</p>
<p>This worked <em>extremely</em> well to not only simplify discussions, but its usefulness stretched to finding code in GitHub.
For example, searching for &lsquo;connector FAA&rsquo; would allow you to find all the applications that connect to the FAA and consume data.</p>
<p>This can also be beneficial outside the engineering team.
Finding common language for software quality, like what &lsquo;alpha&rsquo; means for your customers experience, allows you to work with sales and product departments to manage customer expectations.</p>

<h3 class="relative group">Make the right thing easy
    <div id="make-the-right-thing-easy" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#make-the-right-thing-easy" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>As I said above, a good framework should make building whatever an engineer sets out to build, easy.</p>
<p>When someone sets out to build a new application, there should be no question about using the framework; the benefits it gives far outweigh any loss of autonomy.</p>

<h3 class="relative group">There is value in limiting choice
    <div id="there-is-value-in-limiting-choice" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#there-is-value-in-limiting-choice" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Engineers can do anything.
There are many ways to write the same piece of code.</p>
<p>Just look to the <a href="https://checkstyle.org/property_types.html#LeftCurlyOption" >configurability of common code formatters</a>.</p>
<p>Brackets on the same line, or a new one?
Maybe even no brackets at all?</p>
<p>The normal advice I see is to &lsquo;keep style consistent&rsquo;, but after watching engineers work on applications for over a decade, this does not come naturally.</p>
<p>My <a href="https://thega.me.uk/2024/05/one-rule-to-build-them-all/" >#1 rule</a> is to programmatically enforce things that you care about, and style is one of those things.</p>
<p>For the best part of the last decade I used <a href="https://checkstyle.org" >CheckStyle</a> which only complains if the engineer gets the style wrong; however this leads to resentment when CheckStyle is whining at you.
So more recently I switched to <a href="https://github.com/diffplug/spotless" >Spotless</a>, which can re-format the code as well; making &lsquo;compliance&rsquo; as simple as <code>mvn spotless:apply</code>.</p>
<p>Beyond code style, there are also many ways you can write code to connect to Kafka, output logs, and generate metrics.</p>
<p>Providing a library to handle these things is a common way to keep your code base <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" >DRY</a> — a principle I have <a href="/2025/02/looking-back-10-years-writing-application-framework-code/#its-ok-to-repeat-yourself" >issues with</a> — but most engineers will seek to add lots of options &lsquo;just in case&rsquo;.
I however find value in maximising work not done, and leaving configurability until someone can give me a good reason to stray from the path given.</p>

<h3 class="relative group">Your framework needs a gatekeeper
    <div id="your-framework-needs-a-gatekeeper" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#your-framework-needs-a-gatekeeper" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The framework described above, has a very specific remit: handling the most common set up for our microservices, so engineers don&rsquo;t have to.
This includes (but is not limited to) very basic things, like logs, metrics, handling Kafka messages, and JSON serialisation/deserialisation.</p>
<p>There have been times in the past where an engineer has been handling a very complex use case, like deserialisation of geometries, and has asked for the framework to include geometry handling code.</p>
<p>As a business, Snowflake Software did build a lot of geometry focused code, but it was mostly contained within a couple of microservices.</p>
<p>Do you extend the framework to include geometry parsing, as a result making it more complex?
Or do you push back, and tell them to write a library if they want it in more than one place?</p>
<p>The key question for me has always been, does this feature need to be done to achieve the &lsquo;very specific remit&rsquo;.
If not, then you can do it in user-space.
Will every application be doing this activity, or is it less than 10% of the problem space?</p>
<p>The reason to push back is maintainability and rate of change.</p>
<p>For every feature (read behaviour) you add, you then have to test and maintain it.
It&rsquo;s one more thing that you have to provide backward compatible changes for, one more thing to patch.
It broadens your likelihood of getting a 
<abbr title="Common Vulnerabilities and Exposures - a list of publicly known cybersecurity vulnerabilities">CVE</abbr>
 if it includes new libraries, and increases churn if it&rsquo;s a new feature which is still having its behaviour ironed out.</p>
<p>An application framework needs to be clear about what it does, but clearer about what it is not supposed to do; otherwise you end up with a swiss-army knife of chaos<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>

<h3 class="relative group">Maintainability beats cleverness
    <div id="maintainability-beats-cleverness" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#maintainability-beats-cleverness" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>I have written some very clever code in the past.</p>
<p>I have seen some astonishingly clever code written by others.</p>
<p>But being clever is one way to write some code, and in my experience, there is normally another way to write it that is more readable.
Take the following trivial example:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>String <span style="color:#a6e22e">status</span>(<span style="color:#66d9ef">boolean</span> failed, Exception e) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> failed <span style="color:#f92672">?</span> e <span style="color:#66d9ef">instanceof</span> RecoverableException <span style="color:#f92672">?</span> <span style="color:#e6db74">&#34;Recoverable Failure&#34;</span> : <span style="color:#e6db74">&#34;Unrecoverable Failure&#34;</span> : <span style="color:#e6db74">&#34;Success&#34;</span>;
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>A one line method, nice.
Some engineers value fewer lines of code because of the — frankly perplexing — idea that it results in less bugs.</p>
<p>You may be a 9<sup>th</sup> level ternary mage, but most people find <code>if</code> statements easier to read.
<code>if</code> statements also give more space for comments, to help with understanding<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>Consider the alternative:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>String <span style="color:#a6e22e">status</span>(<span style="color:#66d9ef">boolean</span> failed, Exception e) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (failed) {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Is the exception recoverable?</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (e <span style="color:#66d9ef">instanceof</span> RecoverableException) {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;Recoverable Failure&#34;</span>;
</span></span><span style="display:flex;"><span>        } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;Unrecoverable Failure&#34;</span>;
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// There is no failure</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;Success&#34;</span>;
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>Yes, it is more verbose, but when this pops up in my IDE while debugging, I can almost instantly follow the process flow<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.</p>
<p>I am aware this is a pretty convoluted example.
Most &lsquo;clever&rsquo; code I see comes from an over-application of the design patterns book they make you read in university, but that would be difficult to fit on an example here.</p>
<p>In my experience, engineer skill sits on a <a href="https://en.wikipedia.org/wiki/The_Bell_Curve" >bell curve</a>.
A given company may have some extremely capable engineers, but they will have a far greater number of &lsquo;just&rsquo; good engineers.
The code you write should be maintainable by the average engineer to ensure that the code is approachable by most of your company.</p>
<p>&lsquo;
<abbr title="Keep It Simple, Stupid">KISS</abbr>
&rsquo; has been around forever, so don&rsquo;t burden those following you with displays of your coding prowess.
No one likes a show-off; keep the code simple where possible.</p>

<h3 class="relative group">It&rsquo;s OK to repeat yourself
    <div id="its-ok-to-repeat-yourself" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#its-ok-to-repeat-yourself" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>As we know, all &lsquo;rules&rsquo;, when overused, cease to become useful.
DRY is that rule for me.</p>
<p>DRY seems to be taken at face value by most engineers, inevitably causing them to take it too far, making code less readable in the process.
<a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself#AHA" >AHA (avoid hasty abstractions)</a> and <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself#WET" >WET (write everything twice)</a> are better because they are not absolute.</p>
<p>Where DRY has no business being, is in test code.
Test code should be free of branching and conditional logic; otherwise you have to test your test code<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</p>
<p>If you have twenty tests which all need an input object, it&rsquo;s tempting to create a function like <code>setUpTestObject()</code> to create one.
This works well, reducing the lines of repeated code.
However, the twenty-first test requires one of the properties be different.
What do you do?</p>
<p>Some engineers will add a parameter to the test function, maybe a <code>if</code> statement to create one property if <code>true</code>, and another if <code>false</code>:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#a6e22e">@Test</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">testFlightWithoutPlan</span>() {
</span></span><span style="display:flex;"><span>    Flight flight <span style="color:#f92672">=</span> setUpTestObject(<span style="color:#66d9ef">false</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// the rest of the test</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">private</span> Flight <span style="color:#a6e22e">setUpTestObject</span>(<span style="color:#66d9ef">boolean</span> planned) {
</span></span><span style="display:flex;"><span>    Flight flight <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Flight();
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> (planned) {
</span></span><span style="display:flex;"><span>        FlightPlan plan <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FlightPlan();
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// complex plan setup</span>
</span></span><span style="display:flex;"><span>        flight.<span style="color:#a6e22e">setPlan</span>(plan);
</span></span><span style="display:flex;"><span>    } <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>        flight.<span style="color:#a6e22e">setPosition</span>(51, <span style="color:#f92672">-</span>1);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> flight;
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>This fits on one screen, but imagine that you have hundreds of lines of tests, and for each one you have to keep jumping to the bottom of the file to see what <code>setUpTestObject</code> will do in this specific instance.</p>
<p>Worse, what happens when someone else comes by and changes what <code>setUpTestObject</code> does, and it silently stops setting something important; behaviour you wanted to assert</p>
<p>After more than ten years writing tests, I can confidently say: <strong>repeat yourself</strong>.</p>
<p>Create a test object from scratch for each test.
Yes it is more lines, but you can look at the test and understand its purpose, inputs and assertions, without having to keep looking at other areas of the code.</p>

<h3 class="relative group">Always maintain backwards compatibility
    <div id="always-maintain-backwards-compatibility" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#always-maintain-backwards-compatibility" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>So this one is probably the hardest of all.
Sometimes you figure out that the API you created is not getting you the results you wanted (maybe not driving a desired behaviour).
Or maybe the requirements have changed, and you need something different?</p>
<p>It&rsquo;s tempting to just bump to a new major version and remove the old way of doing things, delete the old code, and make the framework nice and shiny again.</p>
<p>A good example of this is when we wanted to add timing metrics to our dispatched events.
This was mostly to capture the origin time — the time the first event in a chain was created — which we needed to measure end-to-end latency.</p>
<p>Our original design was a simple dispatch method:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">generateData</span>() {
</span></span><span style="display:flex;"><span>    MyPayload response <span style="color:#f92672">=</span> myDataSource.<span style="color:#a6e22e">poll</span>();
</span></span><span style="display:flex;"><span>    dispatchHelper.<span style="color:#a6e22e">dispatch</span>(response);
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>However, the time between polling and the response might be significant; not large, but <em>significant</em> for debugging issues.
We originally left gathering this time to each source of data, but we realised that we wanted a more standardised collection method.
So we redesigned the dispatch method:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">generateData</span>() {
</span></span><span style="display:flex;"><span>    dispatchHelper.<span style="color:#a6e22e">prepare</span>(dispatcher <span style="color:#f92672">-&gt;</span> {
</span></span><span style="display:flex;"><span>        MyPayload response <span style="color:#f92672">=</span> myDataSource.<span style="color:#a6e22e">poll</span>();
</span></span><span style="display:flex;"><span>        dispatcher.<span style="color:#a6e22e">dispatch</span>(response);
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>This allows us to capture the start time when <code>prepare</code> is called.</p>
<p>But importantly, we only <a href="https://docs.oracle.com/en/java/javase/21/core/how-deprecate-apis.html" >deprecated</a> the original method; adding a <em>significant</em> JavaDoc explanation of how to move to the new mechanism.
The older one still exists to this date.</p>
<p>But why?
Why wouldn&rsquo;t we force users to change their behaviour, not just prompt them with a <code>@Deprecated</code> annotation?</p>
<p>Well, engineers are like a light breeze when it comes to version updates.
Any resistance will result in them leaving the code on the older version, so they can &lsquo;deal with it later&rsquo;.
Later is normally much longer than you would want (often never).
You want updates to be adopted automatically (via something like <a href="https://github.com/dependabot" >Dependabot</a>) and quickly, to address CVEs in dependencies.</p>
<p>Instead, we have adopted a pattern of adding features and letting the demand for those features drive updates.
Having the IDE underline the deprecated method in yellow seems to annoy most people enough to get them to update to newer signatures.</p>
<p>There are, of course, times when we have not been able to maintain backwards compatibility due to upstream changes, there have been times when we accidentally broke features we didn&rsquo;t intend for people to use (see <a href="/2025/02/looking-back-10-years-writing-application-framework-code/#anything-you-make-public-will-be-used" >Anything you make public will be used</a>), and there have been times when we intentionally forced an API change.
But importantly we try to give users a low impact upgrade method to the new solution.</p>
<p>Maybe this is another <a href="/2025/02/looking-back-10-years-writing-application-framework-code/#make-the-right-thing-easy" >Make the right thing easy</a>, where &rsquo;the right thing&rsquo; is &lsquo;keeping your dependencies up to date&rsquo;.</p>

<h3 class="relative group">You can be too modular
    <div id="you-can-be-too-modular" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#you-can-be-too-modular" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>This is something we learned after many years of maintaining the framework.</p>
<p>Because we had multiple application types, and we wanted to ensure that only the code required for your application was included, we split the application down into multiple modules:</p>
<dl>
<dt>Framework</dt>
<dd><code>core</code></dd>
<dd><code>serialisation</code></dd>
<dd><code>inbound</code></dd>
<dd><code>sink</code></dd>
<dd><code>outbound</code></dd>
<dd><code>source</code></dd>
<dd><code>transformer</code></dd>
<dd><code>test-core</code></dd>
<dd><code>test</code></dd>
<dd><code>docker-test</code></dd>
</dl>
<p>This meant that outbound dispatch code was not included in inbound only applications.
From a purists&rsquo; perspective this is great, but it makes the code harder to work on when you are new to the project.</p>
<p>There are some clever advantages, like having two classes called <code>Dispatcher</code> where the API in the transformer version requires that you provide the upstream message, but the source one does not.
I&rsquo;m not sure the advantages outweigh the added complexity.</p>
<p>If I were ever to start from scratch, I think I would take the Spring approach of a single dependency which has &lsquo;modes&rsquo; of operation.</p>

<h3 class="relative group">Anything you make public will be used
    <div id="anything-you-make-public-will-be-used" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#anything-you-make-public-will-be-used" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>This is probably obvious to some, but any API you make public, over a long enough time frame, will be leveraged by someone to build something.</p>
<p>Any behaviour, even if unintended, will be incorporated into production software.</p>
<p>This isn&rsquo;t limited to the code you write, the dependencies your dependency tree will also be used, and if one of your dependencies removes its usage of some library, your users will lose a transitive dependency.</p>
<p>That last one is pretty hard to defend against, but the first two you can mitigate.
Set class and method visibility to package or default visibility, where possible, and have higher than normal test coverage to cover as much behaviour as possible (we target 95%).</p>

<h3 class="relative group">You need lots of good tests
    <div id="you-need-lots-of-good-tests" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#you-need-lots-of-good-tests" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>So 95% might sound absurdly high, because it is.</p>
<p>We did try to achieve close to 100% in the early days, but it&rsquo;s actually not possible due to things like default switch clauses for enums.
We strive for such a high number because it means the happy and unhappy paths of the framework are asserted, and thus maintained, through any updates.</p>
<p>I&rsquo;m sure many of you reading (assuming anyone does read this) are saying things like &ldquo;test coverage doesn&rsquo;t mean anything because you can write garbage tests&rdquo;, which I completely agree with.</p>
<p>High test coverage alone is not a useful metric, it needs to be paired with good engineering practices, principally a high quality code review.
A 
<abbr title="Pull Request - a proposed change to a codebase">PR</abbr>
 (or 
<abbr title="Merge Request - a proposed change to a codebase">MR</abbr>
) on a framework should receive an extremely thorough review, because missing something has a high impact.</p>
<p>To measure the quality of tests, I leverage mutation tools like <a href="https://pitest.org" >PIT</a>:</p>
<blockquote><p>Mutation testing is conceptually quite simple.</p>
<p>Faults (or mutations) are automatically seeded into your code, then your tests are run. If your tests fail then the mutation is killed, if your tests pass then the mutation lived.</p>
<p>The quality of your tests can be gauged from the percentage of mutations killed.</p>
</blockquote><p>Yes, it effectively tests the quality of the tests.
We don&rsquo;t have this wired in to our build so that it fails it (yet), but I periodically use it to ensure that we are writing good tests (normally when a new contributor appears).</p>
<p>Additionally, I encourage engineers to write <code>GIVEN, WHEN, THEN</code> statements for their tests, so the intended behaviour is recorded; useful for preserving intent from eager refactoring:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#a6e22e">@Test</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">testFlightWithoutPlan</span>() {
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// GIVEN a flight without a plan</span>
</span></span><span style="display:flex;"><span>    Flight flight <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> Flight();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// WHEN calculating the length of the planned route</span>
</span></span><span style="display:flex;"><span>    LengthCalculator calculator <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> LengthCalculator();
</span></span><span style="display:flex;"><span>    Double length <span style="color:#f92672">=</span> calculator.<span style="color:#a6e22e">calculate</span>(flight);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">// THEN null is returned as there was no flight plan</span>
</span></span><span style="display:flex;"><span>    assertThat(length).<span style="color:#a6e22e">isNull</span>();
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>

<h3 class="relative group">Speculative features can be good and bad
    <div id="speculative-features-can-be-good-and-bad" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#speculative-features-can-be-good-and-bad" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Over the years I have occasionally, in times of inspiration, added features that I feel we will need in the near future.</p>
<p>Sometimes these features turn out to be useful, and sometimes a waste of time.</p>
<p>The best and most widely used speculative feature was support for Prometheus metrics.
We transitioned from StatsD to Prometheus last year, and having support already built into each service was helpful for the migration.</p>
<p>On the other hand, I integrated <a href="https://www.jaegertracing.io/" >Jaeger Tracing</a> into the framework using the <a href="https://opentracing.io/" >Opentracing</a> SDK.
But after so many breaking changes in the Opentracing API, and the fact none of our teams were leveraging it, we decided to remove support for it.</p>
<p>My lesson learned would be to wait until someone asks for a feature before building it, to maximise work not done.
This may seem obvious, but sometimes you get carried away on passion projects.</p>

<h3 class="relative group">No one will read the docs
    <div id="no-one-will-read-the-docs" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#no-one-will-read-the-docs" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>This one is probably the most obvious.
Everyone <em>knows</em> that developers don&rsquo;t read documentation.</p>
<p>However, after spending significant time writing upgrade notes and documentation over the years, I will continue to do so.</p>
<p>In a growing business there is a point where you can&rsquo;t explain changes via word of mouth, so the documentation becomes invaluable.
Having a well described upgrade path is a useful resource to point engineers toward.</p>

<h2 class="relative group">Fin
    <div id="fin" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fin" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Thanks for reading!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>One way you can bat away demands is to build in extension APIs to the core parts of your framework.
For example, we added a <code>SerialiserConfigurer</code> which would be called at start up to register additional serialisation code, if required.</p>
<p>If someone wanted to add additional geometry serialisation code, they could use this extension and have the code loaded at start up by leveraging a Java <code>ServiceLoader</code>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>If I were to write a &lsquo;Rule #2&rsquo; it would be that self-documenting code is a lie which lazy programmers like to roll out whenever you ask them to explain what their code does.</p>
<p>If you cant write a comment explaining briefly what the code is supposed to do, then when someone comes back in a year, or ten, what hope do they have of understanding it?&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>There is probably an exception for applications where every CPU cycle is precious, so you would want to write the most optimal code, but I will always request changes in PRs to make the code more readable.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://pitest.org/" >Mutation testing</a>, anyone?&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="architecture"/><category term="engineering"/><category term="code quality"/><summary type="html">What have I learned after 10 years of writing application framework code?</summary></entry><entry><title type="html">I visited New Zealand - Part 8</title><link href="https://thega.me.uk/holidays/new-zealand-8" rel="alternate" type="text/html" title="I visited New Zealand - Part 8"/><published>2025-02-02T15:19:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-8</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-8"><![CDATA[<p>There was a stroke of &rsquo;luck&rsquo; before we arrived in New Zealand.
On the original booking form for our 
<abbr title="Lord of the Rings">LoTR</abbr>
 tour, the end date was listed as &lsquo;Saturday, June 15, 2024&rsquo;.
However, this turned out to be incorrect, and in all subsequent communications the end date was &lsquo;Friday, June 14, 2024&rsquo;.</p>
<p>By the time we (and the tour company) had noticed this one-day discrepancy, everyone on the tour had already booked all their flights.
We were set to return from Queenstown to Auckland on the Saturday.</p>
<p>This &rsquo;extra day&rsquo; meant that we had to book an additional night at the hotel, and find something to do on the Friday.</p>
<p>In their research for the holiday, my other half had heard that &lsquo;Milford Sound / Piopiotahi&rsquo; was an &lsquo;unofficial 8<sup>th</sup> wonder of the world&rsquo;, so we jumped at the opportunity to use our free day to visit it.</p>
<p>We had waited until we had arrived in New Zealand to ask our tour guide which tour company we should book with.
The answer was an unequivocal &lsquo;<a href="https://www.realnz.com/en/" >RealNZ</a>&rsquo;.</p>

<h2 class="relative group">Friday 14<sup>th</sup>: Milford Sound / Piopiotahi
    <div id="friday-14th-milford-sound--piopiotahi" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#friday-14th-milford-sound--piopiotahi" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="milford-sound.svg" alt="Our Hotel to Milford Sound, via Te Anau, and Mirror Lakes, and Monkey Creek" />
        <figcaption>Our Hotel to Milford Sound, via Te Anau, and Mirror Lakes, and Monkey Creek (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-45.0335,168.6628&amp;destination=-44.6682,167.9273&amp;waypoints=-45.4157,167.7139%7c-45.0284,168.0114%7c-44.8012,168.0215" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>The tour <a href="https://www.realnz.com/en/experiences/day-cruises/milford-sound-cruises/" >we chose</a> was a two-hour boat cruise around the sound, but because Milford is quite remote, the tour also included a coach transfer from Queenstown to Milford, and back (of course).</p>
<p>Just like when we visited the <a href="https://thega.me.uk/2025/01/i-visited-new-zealand-part-6/#nen-hithoel" >North Mavora Lakes</a> two days before, the coach could not travel in a straight line to Milford Sound, and had to travel around the significant mountain ranges that sat between us and our destination.
This meant we had to travel roughly 100 km south, 75 km west, then 117 km north; forming a big 292 km long &lsquo;U&rsquo; shape around the mountains; along the only road that goes there.</p>
<p>This was not going to be a quick journey, adding eight hours of coach travel to a two-hour cruise.
We had a 13:30 appointment with the &lsquo;Haven&rsquo; — one of the boats operated by RealNZ — so we had to be at the departure point in Queenstown at 07:15 <em>sharp</em>.</p>
<p>It was set to be a long day, with us getting dropped back after 20:00.</p>

<h3 class="relative group">The Coach
    <div id="the-coach" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-coach" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Getting to the coach stop at 07:00 was a doddle.
Having our body clocks broken and re-forged by the LoTR tour had turned us from late risers, into early starters; every day had started around 07:00 for the last ten days.</p>
<p>After a quick check in, where I learned that <a href="https://www.realnz.com/en/blog/meet-the-locals-the-animals-of-walter-peak-farm/" >Scottish Highland Cows</a> live in New Zealand too, we jumped on a very fancy coach that seemed custom-built for sightseeing.
Each of the rows of seats sat slightly higher than those in front, so you could see out of the front from any place on the coach.
The roof and walls were mostly glass, allowing us to see in all directions.
It was like riding in a glass bubble.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1887_hu_1a66799808c77f2c.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1887_hu_61affd8cb319eb50.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1887_hu_e45ae38ff68a51b.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1887_hu_e9bacca57dd37bb8.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1887_hu_61affd8cb319eb50.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1887_hu_e9bacca57dd37bb8.jpeg"
          
          title="Windows as far as the eye can see"
        />
    </span>
  
    <figcaption class="text-center">Windows as far as the eye can see</figcaption>
  
</figure>

<p>I appreciated the coach having demisters running its entire length, meaning that the windows stayed clear for most of the journey, even when the temperature dropped outside.</p>

<h3 class="relative group">Breakfast in Te Anau
    <div id="breakfast-in-te-anau" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#breakfast-in-te-anau" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Our first stop was in Te Anau, which would be about two hours of driving.
The sun didn&rsquo;t rise until around 08:30, so we spent the first hour and a half of the journey in darkness, before watching the sun rise out of the coach window.</p>
<p>I had a long day of pointing and looking at things ahead of me, so I took the opportunity to doze on and off.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1894_hu_587c9f85e54f5b8c.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1894_hu_eca26d06486d9d8f.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1894_hu_c559f02c70513c3d.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1894_hu_41497f00ff59371d.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1894_hu_eca26d06486d9d8f.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1894_hu_41497f00ff59371d.jpeg"
          
          title="Not quite the right misty mountains"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1895_hu_c9dc1284a649e80f.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1895_hu_ce3b56974396961.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1895_hu_cb49cae4ad1804a9.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1895_hu_c624aa2d64f405eb.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1895_hu_ce3b56974396961.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1895_hu_c624aa2d64f405eb.jpeg"
          
          title="A misty and rainy view out over the bay at Te Anau"
        />
    </span>
  
    <figcaption class="text-center">Another misty and rainy morning</figcaption>
  
</figure>

<p>The coach pulled into Te Anau, and we parked up outside a shop called &lsquo;Kiwi Country&rsquo;.
It was the standard tourist shop that sold keepsakes and shirts with slogans like &lsquo;Keep Calm and Kiwi&rsquo;, alongside offering toilets to weary travellers.</p>
<p>The bus driver recommended <a href="http://www.milesbetterpies.co.nz/" >Miles Better Pies</a> for breakfast, which was about a five-minute walk through town.
The pies were worth the walk, and constituted a hearty breakfast that would see us through to lunch.</p>
<p>Back on the coach, bellies full, we headed north.</p>

<h3 class="relative group">Eglinton Flats &amp; Mirror Lakes
    <div id="eglinton-flats--mirror-lakes" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#eglinton-flats--mirror-lakes" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>There was a bit of buffer time built into our morning schedule.
We had just over six hours to get to Milford Sound, and according to Google Maps, it is only four hours of driving to get there.</p>
<p>As nothing had gone wrong so far (like losing someone in the toilets at Te Anau), and they didn&rsquo;t want us arriving at the boats too early, we were told by the driver we had time to do some sightseeing.</p>
<p>As an aside, I have a huge amount of respect for our driver.
Not only was he driving a huge coach on unforgiving roads, but he was wearing a headset and being an engaging tour guide as well.
During the journey, he gave us frequent details and stories on the areas we passed through.</p>
<p>Our next stop was Eglinton Flats; an area carved out by Glaciers thousands of years ago.
The area was stunning, but it was not my lingering memory of the area.</p>
<p>When we stopped, the coach driver told us we could not use drones because the wind would claim them as its own.
This was accented by a giant &lsquo;No Drones&rsquo; sign as we got off the coach.
Even then, as we left the coach, multiple people immediately launched drones into the sky.
It felt like one of those &rsquo;the sign should have been in multiple languages&rsquo; moments, but I did have a good chuckle.</p>
<!-- markdownlint-disable MD033 -->
<iframe
    markdown="0"
    src="https://www.google.com/maps/embed?pb=!4v1737407392876!6m8!1m7!1sgbngmuK9XSTIqAy8bMA3Ug!2m2!1d-45.06182995282183!2d167.9949241338097!3f5.7412880641415285!4f-2.241075672227865!5f3.325193203789971"
    width="100%"
    height="450"
    style="border:0;"
    allowfullscreen=""
    loading="lazy"
    referrerpolicy="no-referrer-when-downgrade">
</iframe>
<!-- markdownlint-enable MD033 -->
<p>After about fifteen minutes at the flats, we hopped 5 km north, to an area called the &lsquo;Mirror Lakes&rsquo;.</p>
<p>We disembarked and strolled along a purpose built walkway which hung over the edge of the lake.
It was easy to see how the lakes got their name, as the Earl Mountains reflected off of the perfectly smooth surface of the water.
Even though we were surrounded by about a hundred tourists, it felt eerily tranquil.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1928_hu_2947a0142a897005.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1928_hu_3ff368d6240c44d1.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1928_hu_55fe6d4b19a8fee3.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1928_hu_fc054152c98851d2.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1928_hu_3ff368d6240c44d1.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1928_hu_fc054152c98851d2.jpeg"
          
          title="The Earl Mountains reflects off the Mirror Lakes"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1929_hu_5057e3a753a0f0c7.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1929_hu_447bc1c349b7f123.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1929_hu_60a79c208a25f5a7.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1929_hu_7f9795f0cf500494.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1929_hu_447bc1c349b7f123.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1929_hu_7f9795f0cf500494.jpeg"
          
          title="Low lying clouds covering the Earl Mountains"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1934_hu_802ca14f897f64c4.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1934_hu_185db9bf81dc0bc2.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1934_hu_8cc971fc2dc39cfc.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1934_hu_892f5fc3ca6864fb.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1934_hu_185db9bf81dc0bc2.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1934_hu_892f5fc3ca6864fb.jpeg"
          
          title="The Earl Mountains reflects off the Mirror Lakes"
        />
    </span>
  
    <figcaption class="text-center">A calming and peaceful view (minus all the tourists)</figcaption>
  
</figure>

<p>We had to take it all in quickly however, because just as soon as we had got down to the lake, we had to head back up to the coach, to get back on the road.</p>

<h3 class="relative group">Monkey Creek
    <div id="monkey-creek" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#monkey-creek" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>As we travelled north once more, our tour guide ramped up his explanations of the local area, its history, and its wildlife.</p>
<p>We learned of the <a href="https://en.wikipedia.org/wiki/Kea" >Kia</a>, a bird native to New Zealand with the intelligence of a small child.
Able to solve puzzles, they have been known to drag traffic cones into roads, stopping cars, then hassling the occupants for food.</p>
<p>They were well known for being destructive, having a particular soft spot for the rubber parts of cars.</p>
<p>The birds were common in an area we were passing through called &lsquo;Monkey Creek&rsquo;.
As we pulled into the lay-by as disembarked, we were treated to about five of the birds, some wandering around accosting tourists, and others standing on car roofs.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1955_hu_7974c66cce9eae59.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1955_hu_a7298941b253475b.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1955_hu_e4656cde1326bd3.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1955_hu_a013b50319797388.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1955_hu_a7298941b253475b.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1955_hu_a013b50319797388.jpeg"
          
          title="A Kia wandering along the ground shaking down tourists for food"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1958_hu_75e609f25e38d8b9.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1958_hu_f8ebdb827aeb786e.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1958_hu_7616ad93a2979377.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1958_hu_58498a1c58032a46.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1958_hu_f8ebdb827aeb786e.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1958_hu_58498a1c58032a46.jpeg"
          
          title="A Kia eyeing up a tasty rubber car snack"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1961_hu_969aa358658b23fa.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1961_hu_3f07fb1ff8101bc2.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1961_hu_7b1d6fa9bba23d1b.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1961_hu_c76b19667271a518.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1961_hu_3f07fb1ff8101bc2.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1961_hu_c76b19667271a518.jpeg"
          
          title="Two Kia working in a team"
        />
    </span>
  
    <figcaption class="text-center">Watching, waiting&hellip;</figcaption>
  
</figure>

<p>As if on cue, one of the Kia nibbled at the rubber seal on a parked car; the occupants were none too happy and tried to drive off.
This unfortunately did not phase the Kia, and it continued picking at the rubber as the car disappeared off into the distance.</p>
<p>I did capture a video of a Kia, which has to be the best home video I will ever take.
You can see the picture of the Kia above the coach tyre — which made sense now — then I pan up to one, who chirps on cue.</p>
<lite-youtube videoid="3CdAwZrI4BI" playlabel="3CdAwZrI4BI" params=""></lite-youtube>

<p>I await my Golden Globe.</p>
<p>The Kia reminded me of <a href="https://www.longleat.co.uk/safari" >Longleat Safari Park</a>, where the monkeys are nationally famous for pulling off parts of your car.</p>
<p>A touch out of order, but later on the boat we saw a &lsquo;Car Disassembly&rsquo; guide, in the art style of an IKEA manual, which I had to giggle at.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="kia-disassemble"
    width="1536"
    height="2048"
    src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2071_hu_c65e018528822877.jpeg"
    srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2071_hu_c65e018528822877.jpeg 800w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2071_hu_f631b0ef95d66de9.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2071.jpeg"><figcaption>Car disassembly has never been easier!</figcaption></figure>

<h3 class="relative group">Homer Tunnel
    <div id="homer-tunnel" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#homer-tunnel" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Back on the coach, making sure the cheeky Kia had not stolen our belongings, we continued on.
We had about an hour until we had to be at the dock, so there was time for one more stop.</p>
<p>First, however, we had to head through <a href="https://en.wikipedia.org/wiki/Homer_Tunnel" >Homer Tunnel</a>.</p>
<p>Now I love a tunnel.
I enjoyed going through them as a kid, and I have no intention of stopping enjoying them as an adult.
There&rsquo;s something about the marvel of engineering it takes to carve a hole in the ground that appeals to me.</p>
<p>Homer Tunnel was something else.
There were two key reasons transiting through this tunnel blew me away.</p>
<p>The first is that it&rsquo;s over a kilometre in length, through solid granite, with a steep downwards gradient.
The sides and roof to the tunnel are still unfinished, so you can still see the rock face.
It felt like we were descending so deep we might see a Balrog.</p>
<p>The second is that on the eastern side, we entered from a frozen winter tundra.
Snow covered mountains all around us, flakes falling from the sky; a real winter wonderland.
However, emerging from the west &lsquo;portal&rsquo; we found ourselves in a tropical rainforest.
The tour guide even played the theme song from Jurassic Park (which didn&rsquo;t have the full effect because the windows fogged up).</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1018_hu_e026689e74ab2ef9.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1018_hu_7b0a88cdbee9d629.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1018_hu_d7ae76091dcaa501.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1018_hu_e62ee925047aac81.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1018_hu_7b0a88cdbee9d629.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1018_hu_e62ee925047aac81.jpeg"
          
          title="Frozen winter wonderland before Homer Tunnel"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1977_hu_680c655f64b9a969.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1977_hu_be1417fd4076732c.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1977_hu_2503c422572b5108.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1977_hu_a93e1acb2238a53b.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1977_hu_be1417fd4076732c.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1977_hu_a93e1acb2238a53b.jpeg"
          
          title="Tropical Rainforest after Homer Tunnel"
        />
    </span>
  
    <figcaption class="text-center">Before Homer Tunnel, and after</figcaption>
  
</figure>

<p>I didn&rsquo;t capture a video of it myself because I had no idea it would be so breathtaking<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.
So here is one from &lsquo;JoyRide Australia&rsquo; that shows what we saw.</p>
<lite-youtube videoid="dQTDP6CH81Y" playlabel="dQTDP6CH81Y" params=""></lite-youtube>

<p>After the tunnel, we stopped to wander into the forest for half an hour, trying to kill time before the scheduled departure time of our boat.
We got to see a pretty sweet waterfall, nothing compared to the waterfalls we were about to see, but cool regardless.</p>

<h3 class="relative group">The Boat
    <div id="the-boat" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-boat" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Unlike our thematic arrival into Hobbiton a <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-3/#hobbiton" >week earlier</a> — where we passed over the summit of the hill, seeing Hobbiton laid out before us — the approach to Milford Sound was fairly subdued.
The road leading towards the sound was surrounded by trees, so we couldn&rsquo;t see much, until we happened upon the coach parking.</p>
<p>Even from the docks, we could only see a sneak-peek of what was to come, as most of the boats were lined up, ready to depart.
Ours, the magnificent &lsquo;Haven&rsquo;, already had a significant queue forming dockside, and we were a touch concerned that we would &rsquo;not get a good seat&rsquo;.</p>
<p>In retrospect, that concern was not warranted, for reasons that will become clear.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1997_hu_7b55748aef28640b.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1997_hu_9524ddd02588ab34.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1997_hu_ed46b27b3e3ceba4.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1997_hu_2573d8bdf2b33abf.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1997_hu_9524ddd02588ab34.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1997_hu_2573d8bdf2b33abf.jpeg"
          
          title="The magnificent &amp;#39;Haven&amp;#39;"
        />
    </span>
  
    <figcaption class="text-center">Our Boat, the Haven</figcaption>
  
</figure>

<p>The Haven consisted of two &lsquo;inside&rsquo; decks, where you could sit down and look out at the scenery from relative comfort, and a rooftop &lsquo;garden&rsquo;<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> with 360 views of anything we sailed past.
The lower deck had a café and bathrooms, which was good because it was a two-hour cruise; a side of chips would go down well at some point.</p>
<p>We rushed in to &lsquo;claim&rsquo; a table and seating, but after a minute of looking out of the window, I decided I wanted to experience the sound 1<sup>st</sup> hand.
It dawned on me that we had spent nine days watching New Zealand pass through the window of a coach, it would be nice to feel the wind (and rain) on my face for a bit; so I headed up to the top deck.</p>
<p>It is not often you find yourself in one of the most beautiful places in the world, looking back I think it was the right call to experience it with all my senses.</p>
<p>If you do find yourself going, I would recommend a wind-proof jacket, a hat, some gloves, and maybe a scarf.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2009_hu_7fe8bc96e10d1ecc.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2009_hu_a3283f6bea38c293.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2009_hu_e2e16d9946407780.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2009_hu_e2f175f0c2464270.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2009_hu_a3283f6bea38c293.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2009_hu_e2f175f0c2464270.jpeg"
          
          title="A breathtaking shot of Milford Sound"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2034_hu_76d72e29b775c4c5.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2034_hu_590e6d4869862c78.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2034_hu_1750249990a79a3c.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2034_hu_4b0cbfe7eae5efd7.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2034_hu_590e6d4869862c78.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2034_hu_4b0cbfe7eae5efd7.jpeg"
          
          title="A breathtaking shot of Milford Sound"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2038_hu_a84c91b6effbf990.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2038_hu_e1b53962c5fcf6c8.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2038_hu_904b874de3926910.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2038_hu_3655f7854da800ae.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2038_hu_e1b53962c5fcf6c8.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2038_hu_3655f7854da800ae.jpeg"
          
          title="A breathtaking shot of Milford Sound"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2056_hu_ceb3c97983ff4f00.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2056_hu_2429e757a3087b15.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2056_hu_15e506c8b1dae74e.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2056_hu_11aadef4678d989b.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2056_hu_2429e757a3087b15.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2056_hu_11aadef4678d989b.jpeg"
          
          title="A breathtaking shot of Milford Sound"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1028_hu_5f8e57281ab377bb.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1028_hu_5072c364f5f1a680.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1028_hu_f7fddd6aaadc7d9d.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1028_hu_916a9f331f7f1bac.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1028_hu_5072c364f5f1a680.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1028_hu_916a9f331f7f1bac.jpeg"
          
          title="A breathtaking shot of Milford Sound"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2110_hu_5818f9436565b526.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2110_hu_109d47178be2d3d2.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2110_hu_57ad89c056084b21.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2110_hu_5995fdce51a892b2.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2110_hu_109d47178be2d3d2.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2110_hu_5995fdce51a892b2.jpeg"
          
          title="A breathtaking shot of Milford Sound"
        />
    </span>
  
    <figcaption class="text-center">The sounds were breathtaking in a literal sense</figcaption>
  
</figure>

<p>The views were outstanding; these pictures <em>do not</em> do it justice.
It was not hard to see why they are in the list of &ldquo;unofficial 8<sup>th</sup> wonders of the world&rdquo;.
You could not look in any direction without seeing something beautiful.</p>
<p>During the two-hour tour, a guide on the boat told us about the things we were sailing past, like tree avalanches.
The sides of the mountains in the sound consist of the occasional &lsquo;anchor tree&rsquo; — a tree that has roots into the side of the mountain — supporting lots of lichen, moss, and other smaller trees.
When one of these anchor trees reaches the end of its life, it falls from the mountain, causing all the life suspended from it to fall too.
This creates an interesting looking bare strip on the side of the mountain.</p>
<p>I didn&rsquo;t get a picture of one in the sound because I was too busy taking it all in, so here is a picture of one we saw earlier in the day:</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="tree-avalanche"
    width="1536"
    height="2048"
    src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1914_hu_7c27cacc53296d85.jpeg"
    srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1914_hu_7c27cacc53296d85.jpeg 800w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1914_hu_f59e20cc52c5e2bd.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1914.jpeg"><figcaption>A mountain after a &rsquo;tree avalanche'</figcaption></figure>
<p>Throughout the sound you can see lots of these strips in various stages, because once the avalanche happens, the whole cycle of life begins anew.
It&rsquo;s not bare for long.</p>
<p>Other sights included pods of dolphins, and many, many waterfalls.
Luckily, it had rained the day before, so all the mountain waterfalls were at their best.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2076_hu_5274c98d6830d186.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2076_hu_11e0307afd7e235c.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2076_hu_283e50c1412ea20f.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2076_hu_18b70c0cbbc05f8f.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2076_hu_11e0307afd7e235c.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2076_hu_18b70c0cbbc05f8f.jpeg"
          
          title="One of the many waterfalls in Milford Sound"
        />
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_2117_hu_ebb47f064368821e.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2117_hu_9735edf8843b6d6d.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2117_hu_60f2dcf0a1fc4e1.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_2117_hu_8d1003e25e150a39.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2117_hu_9735edf8843b6d6d.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_2117_hu_8d1003e25e150a39.jpeg"
          
          title="Another of the many waterfalls in Milford Sound"
        />
    </span>
  
    <figcaption class="text-center">Water, falling</figcaption>
  
</figure>

<p>I have no photos of the extreme end of the tour, where we sailed a big arc around Dale Point — where the sound meets the Tasman Sea — because I was too afraid to lose my phone.
We were warned by the guide that, as we headed out towards the ocean, that it would get windy.
In preparation, I secured all my belongings, making sure nothing would make a quick exit from the boat.
I did forget to secure myself as rigorously, and I was almost blown off my feet several times.</p>
<p>On the way back, our captain actually took the nose of the boat under one of the waterfalls.
My other half jumped at the opportunity to get a <a href="/2025/02/i-visited-new-zealand-part-8/new_zealand_2076.jpeg" >cool photo</a>.
Apparently it is considered good luck to be splashed by its water, however it looked like all my other half got was wet.</p>
<p>After that, we did head inside and get a snack from the café (and to dry off).</p>

<h3 class="relative group">The Journey Home
    <div id="the-journey-home" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-journey-home" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Back on dry land, we got back into the coach, and headed back to Queenstown.</p>
<p>Our tour guide stayed mostly quiet, giving us time to reflect, relax, and doze if we wanted to.
I don&rsquo;t remember much beyond the amazing sunset that book ended a beautiful day.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/02/i-visited-new-zealand-part-8/new_zealand_1033_hu_698f9bf5fb4d6f11.jpeg 330w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1033_hu_a1133bb429e6c2b6.jpeg 660w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1033_hu_463cbd5051ee255e.jpeg 1024w, /2025/02/i-visited-new-zealand-part-8/new_zealand_1033_hu_93bb9ed011fa2535.jpeg 2x"
          src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1033_hu_a1133bb429e6c2b6.jpeg"
          data-zoom-src="/2025/02/i-visited-new-zealand-part-8/new_zealand_1033_hu_93bb9ed011fa2535.jpeg"
          
          title="One final sunset to bookend a beautiful day"
        />
    </span>
  
    <figcaption class="text-center">One final amazing vista</figcaption>
  
</figure>

<p>By the time we got back it was dark, our last night in the hotel, and our last night on the southern island.
Too tired to go out and grab food, we got some from the hotel bar.</p>
<p>I know, I know, we missed an opportunity to experience another restaurant and/or bar, but we were too tired and feared we wouldn&rsquo;t appreciate it.
We will just have to go back, I guess. &#x1f609;</p>
<p>★★★★★ 5/5 - If you have a <em>whole</em> day free, this tour is a must.
Given you cannot escape how long it takes to get there, the coach journey was comfortable, and educational.
We got to see a completely different ecosystem that felt more like a rainforest than wintry southern New Zealand.
The cruise was smashing, after so many days travelling in coaches, it was nice to feel the wind in my hair.
Zero regrets.</p>

<h2 class="relative group">Saturday 15<sup>th</sup>: Auckland Encore
    <div id="saturday-15th-auckland-encore" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#saturday-15th-auckland-encore" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Tomorrow we fly back up to Auckland, leaving the frozen vistas of the south behind us for one final night in New Zealand.</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2025/03/i-visited-new-zealand-part-9/" >part 9</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I found out when writing this blog that transport to Milford is a hot topic.
So much so that it has its own <a href="https://en.wikipedia.org/wiki/Transport_in_Milford_Sound" >Wikipedia page</a>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>The &lsquo;garden&rsquo; was fake grass, but I don&rsquo;t think I could expect more from a boat.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">With only one day left on the southern island, we head to an &amp;ldquo;unofficial 8th wonder of the world&amp;rdquo;.</summary></entry><entry><title type="html">I visited New Zealand - Part 7</title><link href="https://thega.me.uk/holidays/new-zealand-7" rel="alternate" type="text/html" title="I visited New Zealand - Part 7"/><published>2025-01-19T14:26:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-7</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-7"><![CDATA[<p>We left <a href="https://thega.me.uk/2025/01/i-visited-new-zealand-part-6/" >part 6</a> after a full day on a coach, visiting individual filming locations in the area of Queenstown.
The final day of the tour was an optional activity day, allowing each member of the tour group to pick from several activities (or go completely off on their own).</p>
<p>When we had originally booked the tour, we had been given the choice of:</p>
<ol>
<li>An exciting <a href="https://www.nomadsafaris.co.nz/tours/lord-of-the-rings/full-day-lord-of-the-rings/" >4WD 
<abbr title="Lord of the Rings">LoTR</abbr>
 tour</a></li>
<li>A peaceful and indulgent <a href="https://www.queenstownwinetrail.co.nz/small-group-tours/" >Wine Tour</a></li>
<li>The beautiful <a href="https://www.realnz.com/en/destinations/doubtful-sound/" >Doubtful Sound Day Tour</a></li>
<li>The breathtaking <a href="https://www.realnz.com/en/destinations/milford-sound/" >Milford Sound Day Tour</a></li>
<li>An extravagant <a href="https://www.glaciersouthernlakes.co.nz/scenic-helicopter-flights/middle-earth-heli-flights/lotr-glacier-explorer-107/" >Glacier LoTR Helicopter Flight</a></li>
</ol>
<p>Now, we <em>really</em> wanted to do the helicopter tour.
<em>Really</em> wanted to do it.
But we had already spent all of our savings to get to New Zealand, and we both had no idea if we would actually like flying in a helicopter.
That, coupled with the £1000 it would cost us, meant it was off the table.
Maybe another time.</p>
<p>We knew we were going to spend a couple of days at the start of our holiday in Auckland, near the vineyards on <a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-1/#saturday-1st-waiheke-island" >Waiheke Island</a>, so the wine tour was not for us.</p>
<p>Choosing between the day tours and the 4WD tour was hard, but we were there to do LoTR stuff, so we picked the 4WD tour.</p>

<h2 class="relative group">Thursday 13<sup>th</sup>: The Tour Wraps Up
    <div id="thursday-13th-the-tour-wraps-up" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#thursday-13th-the-tour-wraps-up" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="safari.svg" alt="The locations the Safari would take us to.\
      **Yellow** in the morning and **blue** in the afternoon." />
        <figcaption>The locations the Safari would take us to.<br>
<strong>Yellow</strong> in the morning and <strong>blue</strong> in the afternoon. (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-45.0335,168.6628&amp;destination=-45.0335,168.6628&amp;waypoints=-45.0424,168.6357%7c-44.8530,168.3832%7c-44.7140,168.3593%7c-44.7272,168.3781%7c-44.9917,168.4304%7c-45.0696,168.5411%7c-44.9288,168.6949%7c-44.9423,168.7115%7c-44.9343,168.8335%7c-44.9404,168.8402%7c-45.0104,168.8983%7c-45.0318,168.6778" >Open in Google Maps</a>)</figcaption>
    </figure>

<h3 class="relative group">Nomad 4WD Safari - Part 1
    <div id="nomad-4wd-safari---part-1" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#nomad-4wd-safari---part-1" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>So we had signed up for the full day LoTR tour, which meant a 8am start, practically the afternoon.
The tour was set to take us about nine and a half hours, including a break for lunch.</p>
<!-- markdownlint-disable MD033 -->
<p>Nomad Safaris do two half day tours, with a full day tour which is both separated by lunch.
The first tour heads North-West of Queenstown, up and along the Wakatipu Lake edge to the small hamlet of Glenorchy.
This morning tour would visit all the <span class="underline tw:decoration-2 tw:decoration-[#ccbb44]!">Yellow</span> points on the map above.</p>
<p>The second tour is more &lsquo;rugged&rsquo; and would take us North-East of Queenstown to Gibbston Valley, Arrowtown and the Skippers Canyon Road.
This afternoon tour would take us to all the <span class="underline tw:decoration-2 tw:decoration-[#66ccee]!">Blue</span> points on the map above.</p>
<!-- markdownlint-enable MD033 -->
<p>As we stepped out of the hotel, a convoy of three Toyota 4WD Land Cruisers awaited us outside.
Each had a LoTR license plate and enough space for a driver and six people (as long as those people are thin, which I am not).</p>
<p>We pressed ourselves into the cars and away we went!</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_0977_hu_5fffd74edd34c5e.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_0977_hu_acd7dd5698307676.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_0977_hu_b572a98da77dd91c.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_0977_hu_3b0831b4331de5ba.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_0977_hu_acd7dd5698307676.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_0977_hu_3b0831b4331de5ba.jpeg"
          
          title="One car with the license plate &amp;#39;SARUMN&amp;#39;"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1716_hu_57ca3a0708747a6e.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1716_hu_191e645b6634d680.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1716_hu_3124b0399eb34ddb.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1716_hu_9786a89a00b05223.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1716_hu_191e645b6634d680.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1716_hu_9786a89a00b05223.jpeg"
          
          title="Another car with the license plate &amp;#39;LGOLAS&amp;#39;"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1872_hu_ede8129faff8038d.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1872_hu_60850522984eaac2.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1872_hu_d9696eddf3e26799.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1872_hu_d3d77b9a30a1b048.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1872_hu_60850522984eaac2.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1872_hu_d3d77b9a30a1b048.jpeg"
          
          title="A final car with the license plate &amp;#39;ISLDUR&amp;#39;"
        />
    </span>
  
    <figcaption class="text-center">Our 4x4s had thematic license plates</figcaption>
  
</figure>

<p>Now, I don&rsquo;t normally get car sick, but being squeezed into the back of one of these Toyota 4WD Land Cruisers got me feeling queasy.
The soft suspension, the inability to see out the front because I was in the back, and the winding roads, all added up to a morning of nausea.
I have learned my lesson to take sea-sickness tablets — which might just be placebos — on holidays from now on.</p>

<h4 class="relative group">Beorn&rsquo;s Hall and Isengard
    <div id="beorns-hall-and-isengard" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#beorns-hall-and-isengard" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>After two interim stops along the coast of the Wakatipu Lake, one in the very spacious town of Glenorchy, we arrived at our first movie location an hour and a half later.</p>
<p>The good weather we had enjoyed on the holiday so far, had ended.
A fog had rolled in that obscured most of the mountains, and it was raining.
Not enough to soak us through, but enough to make being outside less than enjoyable.</p>
<p>The leader of our tour group was actually an Englishman who had emigrated some years earlier (a journey I&rsquo;m tempted to emulate), and he told us that the area we had ended up at had been used as the filming location for several films.</p>
<p>The first was &lsquo;Beorn&rsquo;s Hall&rsquo; from the second Hobbit film &lsquo;The Hobbit: The Desolation of Smaug&rsquo;.
All we could see was the hill that it sat on, but it was interesting to see none-the-less.</p>
<p>The second was &lsquo;X-Men Origins: Wolverine&rsquo;.
A &lsquo;fake&rsquo; farmhouse was <a href="https://web.archive.org/web/20090505185330/http://www.stuff.co.nz/entertainment/11223" >blown up</a>, the remains of which are next to the location for Beorn&rsquo;s Hall, which can be seen in the picture below.</p>
<p>From here we could also see &lsquo;Isengard&rsquo;, but the fog was so thick it was difficult to see much.
On the one hand, it&rsquo;s a shame, because we wanted to see it.
On the other hand, we had seen a <em>lot</em> of mountains so far this holiday; it wasn&rsquo;t a massive loss.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1718_hu_2211aa7e701c6e98.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1718_hu_253443c6c10286b2.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1718_hu_d4f126cd31445eec.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1718_hu_b70be9f872e546b2.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1718_hu_253443c6c10286b2.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1718_hu_b70be9f872e546b2.jpeg"
          
          title="The mountains around Isengard that we couldn&amp;#39;t get to because it was raining too hard"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1721_hu_6ffeaae8dc2eb69e.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1721_hu_954471c8978f6efe.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1721_hu_4f661b213800863c.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1721_hu_18b8a0d86f0f8870.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1721_hu_954471c8978f6efe.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1721_hu_18b8a0d86f0f8870.jpeg"
          
          title="The location of Beorn&amp;#39;s Hall, exploded X-Men farmhouse in the foreground"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1725_hu_a394dc2658aa92bf.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1725_hu_ba11502b9f26dda6.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1725_hu_c8cd37594a8ac108.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1725_hu_8c9e3400fe889a49.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1725_hu_ba11502b9f26dda6.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1725_hu_8c9e3400fe889a49.jpeg"
          
          title="A mist covered Lothlórien"
        />
    </span>
  
    <figcaption class="text-center">It was a gloomy, rainy day. These were the best photos we took</figcaption>
  
</figure>

<p>We normally would have continued north to see more of Isengard, but the weather was bad enough that it had flooded the road.
The cars were fitted with <a href="https://en.wikipedia.org/wiki/Vehicle_snorkel" >snorkels</a>, but it sounded like the water was deeper than the tour guides felt comfortable driving through.</p>

<h4 class="relative group">Lothlórien, Tea and Swords
    <div id="lothlórien-tea-and-swords" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lothl%c3%b3rien-tea-and-swords" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>We jumped back in the Land Cruisers and headed south.
Even though it had only been an hour and a half since we set off, as any honest Englishman would know, it was time for a cup of tea and a slice of cake.</p>
<p>The guides handed out some replica LoTR weapons, and we proceeded to pass the time pretending to sword fight each other.
It was quite fun.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1740_hu_239880f55d3fbf08.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1740_hu_4d7cc54fe99385ae.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1740_hu_1a927339abffe7e0.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1740_hu_4d58140064b2f29f.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1740_hu_4d7cc54fe99385ae.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1740_hu_4d58140064b2f29f.jpeg"
          
          title="The forests of Lothlórien"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_0982_hu_2d9b95d9d190909d.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_0982_hu_fe1d187e63919f98.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_0982_hu_1fc75c0c5344a198.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_0982_hu_40efece0d40d10b0.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_0982_hu_fe1d187e63919f98.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_0982_hu_40efece0d40d10b0.jpeg"
          
          title="A duel of the most epic kind"
        />
    </span>
  
    <figcaption class="text-center">We are never too old to play with swords</figcaption>
  
</figure>


<h4 class="relative group">Ithilien Lookout
    <div id="ithilien-lookout" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ithilien-lookout" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>With the rain easing, we headed back towards Queenstown, stopping short at the &lsquo;12 Mile Delta&rsquo; campsite.
Just a small trek through the forest leads you to the ridge used as the filming location for Ithilien, where Frodo and Sam spot the Oliphaunts in &lsquo;The Lord of the Rings: The Two Towers&rsquo;.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1771_hu_4d9de309722c34d5.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1771_hu_30520efc15182695.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1771_hu_532fe119d2499ccb.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1771_hu_a0f63522038c4d2e.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1771_hu_30520efc15182695.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1771_hu_a0f63522038c4d2e.jpeg"
          
          title="Me and someone else from our group, reproducing the Oliphaunt scene"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1767_hu_337f4835f8f7e388.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1767_hu_f1a5204bb11af9ce.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1767_hu_9c4669789a92645b.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1767_hu_691ba10c4345c12e.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1767_hu_f1a5204bb11af9ce.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1767_hu_691ba10c4345c12e.jpeg"
          
          title="The view from Ithilien Lookout"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1779_hu_3671ba51c0ad23ae.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1779_hu_7b791e620d655ba6.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1779_hu_6e5cf2e069e3029.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1779_hu_ee57988d17c8a4e3.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1779_hu_7b791e620d655ba6.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1779_hu_ee57988d17c8a4e3.jpeg"
          
          title="Po. Tay. Toes."
        />
    </span>
  
    <figcaption class="text-center">Are you are never too old to play pretend</figcaption>
  
</figure>

<p>We had a bit of fun reproducing the scenes, and once again I was too busy &rsquo;taking it all in&rsquo; and missed my other half posing for a &lsquo;Po. Tay. Toes&rsquo; photo.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="po-tay-toes"
    width="500"
    height="202"
    src="/2025/01/i-visited-new-zealand-part-7/po-tay-toes.gif"
    srcset="/2025/01/i-visited-new-zealand-part-7/po-tay-toes.gif 800w, /2025/01/i-visited-new-zealand-part-7/po-tay-toes.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/01/i-visited-new-zealand-part-7/po-tay-toes.gif"><figcaption>Po. Tay. Toes.</figcaption></figure>
<p>This was the last stop on the morning tour which Nomad Safaris market as a <a href="https://www.nomadsafaris.co.nz/tours/lord-of-the-rings/glenorchy/" >half-day tour</a> which you can do on its own.</p>
<p>We didn&rsquo;t get to see some stops, which was not the tours fault, but it means there was a lot of driving for not a massive pay-off.
The places we did visit didn&rsquo;t really need a 4WD as well.</p>
<p>★★★☆☆ 3/5 - I know this seems low, but I think I would have put a 4 if not for the weather, and I know that isn&rsquo;t Nomads fault.
I&rsquo;m also comparing it to the <a href="/2025/01/i-visited-new-zealand-part-7/#nomad-4wd-safari---part-2" >afternoon tour</a>, which was a <em>lot</em> of fun, and made the morning seem, just <em>OK</em>.</p>

<h3 class="relative group">Lunch at Balls and Bangles
    <div id="lunch-at-balls-and-bangles" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lunch-at-balls-and-bangles" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>With the morning tour over, it was time to grab some lunch.
The choice was ours, but we were each given a $10 voucher for a place called <a href="https://www.ballsandbangles.com/" >Balls and Bangles</a>, which made the choice pretty obvious.</p>
<p>I love bagels<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, so I was happy to go.</p>
<p>I can&rsquo;t exactly remember what I had — my other half is adamant we had a &lsquo;The Kransky&rsquo; and a &lsquo;Pastrami&rsquo; — but I remember it being so good that we decided to go back for breakfast on our last day in Queenstown.</p>
<p>★★★★★ 5/5 - Good, quick service, and delicious bagels.</p>

<h3 class="relative group">Nomad 4WD Safari - Part 2
    <div id="nomad-4wd-safari---part-2" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#nomad-4wd-safari---part-2" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>In a spare ten minutes between lunch and the afternoon tour, I popped into a pharmacy and bought some &lsquo;Sea-legs&rsquo; sea-sickness tablets, which worked great.
I don&rsquo;t know what is in them, it might just be sugar, but I have recommended them to anyone who will listen.</p>
<p>We, again, squeezed back into our Land Cruiser, ready for the promised &lsquo;rugged&rsquo; afternoon tour.</p>

<h4 class="relative group">Skippers Road
    <div id="skippers-road" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#skippers-road" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Our first stop was a history lesson about the gold rush that New Zealand found itself a part of, back in 1880.</p>
<p>From <a href="https://www.dangerousroads.org/australia-and-oceania/new-zealand/55-skippers-canyon-road-new-zealand.html" >dangerousroads.org</a>:</p>
<blockquote><p>It was built during the gold rush when a perilous track was the only access to the town of Skippers and the Upper Shotover Diggings. Constructed between 1883 and 1890, it was considered to be an engineering miracle as the road is literally carved out of solid schist rock and doesn’t look much different today than when it was first created.</p>
</blockquote><p>Skippers Road is a single width road, with enough space for one car, next to a hundred-meter drop into the canyon.</p>
<p>The pictures I took didn&rsquo;t do this ledge justice, but I found one on Google Maps, uploaded by &lsquo;Will Heesterman&rsquo;:</p>
<!-- markdownlint-disable MD033 -->
<iframe
    markdown="0"
    src="https://www.google.com/maps/embed?pb=!4v1736702653477!6m8!1m7!1sCAoSLEFGMVFpcE5XM1BiUnZfTGR1eDl0c2ViclNhdnI4RkZJOVlMemUxRWNFVTlJ!2m2!1d-44.92436601161135!2d168.6916655594491!3f214.64!4f-11.510000000000005!5f0.4000000000000002"
    width="100%"
    height="450"
    style="border:0;"
    allowfullscreen=""
    loading="lazy"
    referrerpolicy="no-referrer-when-downgrade">
</iframe>
<!-- markdownlint-enable MD033 -->
<p>Although dangerous, it was exhilarating as we traversed the side of the hill like mountain goats, travelling for about fifteen minutes into the canyon and back.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1791_hu_919d28f9f6137b15.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1791_hu_24752fbae0f106f6.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1791_hu_d4e5200f0db261aa.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1791_hu_3ff6c8fbdcef7a12.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1791_hu_24752fbae0f106f6.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1791_hu_3ff6c8fbdcef7a12.jpeg"
          
          title="A view from the Land Cruiser"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1795_hu_549a207914f7eec4.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1795_hu_9f142b892ceae0f2.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1795_hu_1c225fec80a1e0ae.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1795_hu_934e3f7367153193.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1795_hu_9f142b892ceae0f2.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1795_hu_934e3f7367153193.jpeg"
          
          title="The valley was sparse and windy"
        />
    </span>
  
    <figcaption class="text-center">I&rsquo;ve heard it&rsquo;s less brown in Summer</figcaption>
  
</figure>

<p>It was here, while looking down the sheer drop, that it began to snow.
We were in New Zealand at the start of Skiing season, so we expected it to snow at some point.
It was starting to snow while we were balanced on the side of a mountain, which was a bit interesting.</p>

<h4 class="relative group">The Ford of Bruinen
    <div id="the-ford-of-bruinen" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-ford-of-bruinen" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>Another half an hour in the Land Cruisers brought us to <a href="https://en.wikipedia.org/wiki/Arrowtown" >Arrowtown</a>.
The town was beautifully preserved and seemed to have taken the same architectural inspiration which influenced 1850s American towns.
I could have been convinced that Wētā Workshop had built facades for a movie that was being filmed soon.</p>
<p>The historic buildings are only one of the two things I remember from Arrowtown.
The other being an automated toilet which had the same robotic voice as the ED-209 in the original <a href="https://en.wikipedia.org/wiki/RoboCop" >Robocop</a> movie.
After informing me I had ten minutes to use the bathroom, I was left wondering if the time limit would be enforced by laser cannon.</p>
<p>We were not in Arrowtown for the architecture, however, we were travelling through to go to the Arrow River, which was used as the filming location for the &lsquo;Ford of Bruinen&rsquo;.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1816_hu_d48fdd1827c2212e.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1816_hu_f23e3b01377d1fb1.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1816_hu_b8d7a6b1a423aba0.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1816_hu_fadae1378288a900.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1816_hu_f23e3b01377d1fb1.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1816_hu_fadae1378288a900.jpeg"
          
          title="Our view while panning for gold"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1824_hu_776467ee41680472.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1824_hu_34c2861c8666ac07.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1824_hu_799fd9f05edf7ba.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1824_hu_5f555ca8b33b5528.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1824_hu_34c2861c8666ac07.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1824_hu_5f555ca8b33b5528.jpeg"
          
          title="If you want him, come and claim him"
        />
    </span>
  
    <figcaption class="text-center">If you want him, come and claim him!</figcaption>
  
</figure>

<p>This is where we got to make use of the snorkels on the Land Cruisers as our drivers took us fording through the river multiple times, weaving from one bank to the other.
You could tell this was a part of the job our driver loved as he kept hanging back from the convoy, so he could go faster down though the water and up the other side.
It felt like we were on a roller coaster and I loved every minute.</p>
<p>Once we had forded the river for what felt like the 5<sup>th</sup> time, we stopped at the filming location of the &lsquo;Ford of Bruinen&rsquo;.
It had been a hard afternoon of pointing and looking at things, so we naturally had some tea and cake while we were taught how to use a pan to pan for gold.</p>
<p>I hate to disappoint, but I did not find any gold.
Even so, I did find it a fun activity; it broke up the flow of the tour with something new I had not tried in a long time.
I hadn&rsquo;t panned for &lsquo;gold&rsquo; since I went to <a href="https://www.legoland.co.uk/explore/theme-park/rides-attractions/pirate-goldwash/" >Legoland Windsor</a> when I was young.</p>
<p>After failing to boost my wealth, we jumped back in the cars and headed to our final filming location of the holiday (don&rsquo;t worry, we didn&rsquo;t forget to ford the river another 5 times).</p>

<h4 class="relative group">The Argonath (Pillars of the Kings) on the Anduin River
    <div id="the-argonath-pillars-of-the-kings-on-the-anduin-river" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-argonath-pillars-of-the-kings-on-the-anduin-river" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>As with all the filming locations we had seen on this holiday, there was normally a bit of 
<abbr title="Computer-Generated Imagery - the application of computer graphics to create images">CGI</abbr>
 tomfoolery used in the films; meaning the physical location is only partially recognisable.
The Argonath was by far the worst location for this.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1844_hu_36de40168af8b09a.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1844_hu_8ddb78384a8ed35.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1844_hu_85b9a37bb4f7ab9d.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1844_hu_ed6fa8dc7e53c23.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1844_hu_8ddb78384a8ed35.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1844_hu_ed6fa8dc7e53c23.jpeg"
          
          title="Although a lot of CGI was used, this is the river that the two kings stood, arms raised"
        />
    </span>
  
    <figcaption class="text-center">Someone stole the two giant statues</figcaption>
  
</figure>

<p>Maybe it was a bit too much to expect two several-hundred meter tall status lining the side of the river, but if you had not told me what I was looking at, I wouldn&rsquo;t have guessed it was featured in LoTR at all.</p>
<p>It was still a stunning view regardless.</p>
<p>This final location added a nice symmetry to our time in Queenstown, as this location overlooked the Bungy centre <a href="https://thega.me.uk/2025/01/i-visited-new-zealand-part-6/#kawarau-gorge" >we visited</a> after landing two days ago.</p>
<p>And with that, our 4WD adventure had come to an end.</p>
<p>★★★★★ 5/5 - The afternoon tour made the <a href="/2025/01/i-visited-new-zealand-part-7/#nomad-4wd-safari---part-1" >morning tour</a> seem pedestrian.
We actually made use of the Land Cruisers, splashing in and out of rivers; I found every moment a joy.
The morning tour had more film locations, but we had seen so many of those by now that the addition of the 4WD cars (and us needing them), made for a wonderful afternoon out.</p>

<h3 class="relative group">All Good Things Come to an End
    <div id="all-good-things-come-to-an-end" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#all-good-things-come-to-an-end" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>We returned to our hotel, with only one thing left on our tour&rsquo;s agenda.</p>
<p>After starting ten days ago back in Auckland, we had travelled by coach, and by air, from the northern island, to the southern.
It was time for a goodbye dinner.</p>
<p>Our tour had come to an end, and for dinner we gathered in one of the hotels function rooms for a buffet and some tearful goodbye speeches.</p>
<p>It&rsquo;s always a bit cheesy to say you will miss people after only having known them ten days, but we had all bonded over Tolkiens books, and Peter Jackson&rsquo;s films.</p>
<p>The tour had shown us more filming locations than I could count, allowed us to meet some minds behind the cameras, and had introduced us to the beauty of New Zealand.</p>
<p>When we started out, I was unsure if paying for a tour was a wise decision.
I could, of course, take myself to all of these filming locations.
The locations are not a secret, they are on the <a href="https://www.newzealand.com/uk/home-of-middle-earth/" >New Zealand Tourism Website</a>.
However, facing the end of the tour, I was in no doubt that it was the best decision we could have made.
The tour had given us a group of thirty other Tolkien nerds to hang out with, and more importantly, <em>experience</em> the holiday with.</p>
<p>If we had self-toured, I would not have learnt what it&rsquo;s like to build your own house in Australia.
Or that the Americans find the way the UK calls &lsquo;Crossing Guards&rsquo; &lsquo;Lollipop Ladies&rsquo;, adorable.
I would not have heard many of the stories from locals about the filming.</p>
<p>The tour turned what would have been ten days of me and my other half cramped into a rental car into a fun, relaxing, and educational experience, where every logistical detail was handled for me; I only needed to be present.</p>
<p>We visited places that we might not have thought to visit on our own, like <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-4/#hairy-feet-waitomo" >Hairy Feet Waitomo</a>, which was in many ways more enjoyable than <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-3/#hobbiton" >Hobbiton</a>.</p>
<p>If you&rsquo;re reading this, and you can, hit up <a href="https://www.redcarpet-tours.com" >Red carpet tours</a>.
It was worth every penny, and more.</p>
<p>★★★★★★ 6/5 - It&rsquo;s my scoring system, and I&rsquo;ll abuse it if I want to.</p>

<h3 class="relative group">Minus 5º ICE BAR
    <div id="minus-5º-ice-bar" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#minus-5%c2%ba-ice-bar" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>After our farewell dinner, we headed out for some drinks with two of the tour group.
Unfortunately the two people they had planned to go with had fallen ill, so we were picked as the B-team.</p>
<p>We visited <a href="https://minus5icebar.com/" >Minus 5º ICE BAR</a>, which brands itself as the &ldquo;coolest experience and an adventure you’ll never forget&rdquo;.
Big enough to host around thirty people, the bar had walls of ice, furniture made of ice, and even glasses made of ice.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-7/new_zealand_1885_hu_eea1804561727cee.jpeg 330w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1885_hu_414fc68fde87ee6e.jpeg 660w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1885_hu_5b75804bc386f341.jpeg 1024w, /2025/01/i-visited-new-zealand-part-7/new_zealand_1885_hu_1c306f6b83a76292.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1885_hu_414fc68fde87ee6e.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-7/new_zealand_1885_hu_1c306f6b83a76292.jpeg"
          
          title="Our drinks in ice &amp;#39;glasses&amp;#39; at the Ice Bar"
        />
    </span>
  
    <figcaption class="text-center">Frosty</figcaption>
  
</figure>

<p>As we arrived the bar provided — and required we wear — knee-length thick jackets, so we wouldn&rsquo;t &lsquo;freeze to death&rsquo;.
In a room made of ice it was understandably cold.
We had a couple of cocktails which were quite refreshing, the bar encouraging us to smash the ice &lsquo;glasses&rsquo; afterwards, which was quite cathartic.</p>
<p>Queenstown has a couple of &lsquo;ice bars&rsquo;, so I am unsure if this was the best, but I enjoyed how unique it was.
Given it was so cold, we only stayed about an hour, preferring to head back to a nice warm hotel for a nightcap.</p>
<p>★★★★☆ 4/5 - We didn&rsquo;t pay for entry, so I can&rsquo;t comment on the cost, but it was interesting.</p>

<h2 class="relative group">Friday 14<sup>th</sup>: Milford Sound
    <div id="friday-14th-milford-sound" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#friday-14th-milford-sound" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Our tour is over, but our holiday still has a couple of days in it.
Tomorrow we head to the breathtaking Milford Sound; an unofficial &rsquo;eighth Wonder of the World&rsquo;.</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2025/02/i-visited-new-zealand-part-8/" >part 8</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I am still refusing to get breakfast at McDonald&rsquo;s in the UK since they stopped serving breakfast bagels.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">The last day of our organised tour takes us off-road to our final filming locations.</summary></entry><entry><title type="html">I visited New Zealand - Part 6</title><link href="https://thega.me.uk/holidays/new-zealand-6" rel="alternate" type="text/html" title="I visited New Zealand - Part 6"/><published>2025-01-11T10:39:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-6</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-6"><![CDATA[<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Happy New Year!
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>It&rsquo;s been a while since my last post, and it&rsquo;s been over six months since I got back from New Zealand.
I really need to hurry up.</p></div></div><p>At the end of <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-5/" >part 5</a> we had just finished 4 nights in Wellington.
It was now time for us to depart to New Zealand&rsquo;s southern island.</p>
<p>On the northern island we had done lots of tours, talks, and had visited the most LoTR thing in New Zealand - Hobbiton.
We had dotted between some of the north&rsquo;s major cities, witnessing a slice of New Zealand&rsquo;s culture along the way.</p>
<p>And we had seen plenty of Wētā Workshop.
Maybe too much?
Nah.</p>
<p>The tour of southern island was set to be far more &lsquo;outdoorsy&rsquo;; focusing on the natural beauty of New Zealand.</p>

<h2 class="relative group">Tuesday 11<sup>th</sup>: The South Island
    <div id="tuesday-11th-the-south-island" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tuesday-11th-the-south-island" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="wellington-to-queenstown.svg" alt="Wellington to Queenstown" />
        <figcaption>Wellington to Queenstown (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-41.2918,174.7875&amp;destination=-45.0335,168.6628" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>I remember Tuesday the 11<sup>th</sup> because it&rsquo;s the day of the holiday I woke up at 3am, sat bolt upright in bed, realising that the name I booked the tour under was not the same as the name on my passport<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>Why was this important enough to stir me from my sleep?
Well the tour company had booked the flight from Wellington to Queenstown for us, and they had probably used the name on the tour, not the name I was currently legally known as.</p>
<p>It&rsquo;s not normally a problem because all I have done is hyphenate mine and my partners &lsquo;maiden&rsquo; names, which most people are fine with:</p>
<p><code>Whittlesea</code> + <code>Clark</code> = <code>Whittlesea-Clark</code></p>
<p>However, airlines and immigration officials are not normally as accommodating when it comes to paperwork irregularities.
I sat and worried about that until breakfast where I expressed my concern to our tour guide.</p>
<p>&ldquo;You don&rsquo;t need ID to travel between the northern and southern islands&rdquo; she said.</p>
<p>My mind was blown.
In the UK, there is no way you would be able to get on a domestic flight without showing some form of ID that matched the name on the ticket.</p>
<p>Crisis resolved, I finished breakfast feeling much better.
We hauled our luggage outside and climbed back onto Shadowfax — the name we had given our coach — for one final ride to the airport.</p>
<p>Wellington airport is known for having fun 
<abbr title="Lord of the Rings">LoTR</abbr>
 decorations.
Unfortunately the <a href="https://www.nzherald.co.nz/nz/giant-gollum-gobbles-wellington-airport/5NXTP2N7PJPIUWBYZZ2CJCET4E/" >giant Gollum</a> had to go after an earthquake, but we were still left with Gandalf riding an eagle.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="gandalf-eagle"
    width="2048"
    height="1536"
    src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1465_hu_ab7410af5a3ab185.jpeg"
    srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1465_hu_ab7410af5a3ab185.jpeg 800w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1465_hu_d5698a6a11cf97f.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1465.jpeg"><figcaption>Gandalf doesn&rsquo;t fly economy class</figcaption></figure>
<p>This was the last Wētā Workshop created thing we saw whilst we were on holiday.</p>
<p>The Air New Zealand short haul flight passed without note, our 24 hours of flying to get to New Zealand had altered what our idea of a long flight was.
Honestly, this one felt like it was over before it had gotten started.
The overhead screens on the plane were showing a quiz with &lsquo;Trivial Pursuit&rsquo; style questions<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> which kept most of my attention.</p>
<p>On arrival, it felt like we were in a whole other country.
Wellington felt like a nicer version of Brighton, in the UK; Queenstown was giving us &lsquo;French Alps&rsquo; vibes.</p>
<p>The northern island had been t-shirt weather, but the weather here was about ten degrees cooler; calling for jumpers, scarves, and gloves at all times.</p>
<p>A mountain range dominated the view from the car park; treating us to a perfect teaser of what was to come.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1470_hu_539508882445952a.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1470_hu_785340f5af4cc551.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1470_hu_c19e4884132ee0a5.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1470_hu_bf8db7d838d50741.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1470_hu_785340f5af4cc551.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1470_hu_bf8db7d838d50741.jpeg"
          
          title="Our first view of the southern island from the coach"
        />
    </span>
  
    <figcaption class="text-center">The view from the Queenstown Airport car park</figcaption>
  
</figure>

<p>The plan was for us to check into a hotel in Wellington and stay there until the tour ended.
To get there we needed a coach, just for the day.
It was no <em>Shadowfax</em>, but it made do.</p>

<h3 class="relative group">Kawarau Gorge
    <div id="kawarau-gorge" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#kawarau-gorge" aria-label="Anchor">#</a>
    </span>
    
</h3>
<figure>
        <img class="my-0 rounded-md nozoom" src="queenstown-airport-to-hotel.svg" alt="Queenstown Airport to Our Hotel, via AJ Hackett" />
        <figcaption>Queenstown Airport to Our Hotel, via AJ Hackett (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-45.0194,168.7453&amp;destination=-45.0335,168.6628&amp;waypoints=-45.0095,168.9001" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Before heading into Queenstown, we had a single stop in the other direction.</p>
<p>Soaking in the scenery, we travelled to Kawarua Gorge.
Used to depict part of the River Anduin in the LoTR, the Gorge was one of many intensely beautiful places we were set to visit.</p>
<p>On arrival, what stood out to me was how blue the river was; far bluer than any of rivers in the UK.
We were not at the best angle to take a picture that shows the length of the river used in the films, however, we do come back on Thursday the 13<sup>th</sup> to get that shot.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1473_hu_e874482547616700.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1473_hu_924c66608c6fe852.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1473_hu_3dd407d3c670f786.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1473_hu_57366d843ba82fd0.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1473_hu_924c66608c6fe852.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1473_hu_57366d843ba82fd0.jpeg"
          
          title="I&amp;#39;ve never seen a river so naturally blue"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1474_hu_a67b9e07e9846ede.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1474_hu_8928021c188f4043.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1474_hu_4cd9f0a34b20cf25.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1474_hu_d8e78c20a00ff295.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1474_hu_8928021c188f4043.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1474_hu_d8e78c20a00ff295.jpeg"
          
          title="The bungy jump from the bridge"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/3d3b4eb7-7303-4efb-8a2d-a303eff51565_hu_8446aef556811354.jpg 330w, /2025/01/i-visited-new-zealand-part-6/3d3b4eb7-7303-4efb-8a2d-a303eff51565_hu_30382a5347cf3e57.jpg 660w, /2025/01/i-visited-new-zealand-part-6/3d3b4eb7-7303-4efb-8a2d-a303eff51565_hu_311736d84533a4eb.jpg 1024w, /2025/01/i-visited-new-zealand-part-6/3d3b4eb7-7303-4efb-8a2d-a303eff51565_hu_3f551184e36b39d3.jpg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/3d3b4eb7-7303-4efb-8a2d-a303eff51565_hu_30382a5347cf3e57.jpg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/3d3b4eb7-7303-4efb-8a2d-a303eff51565_hu_3f551184e36b39d3.jpg"
          
          title="A blurry picture of us zip lining"
        />
    </span>
  
</figure>

<p>Today we had come to the bridge over the Gorge so that some of our group could bungy<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> jump at the <a href="https://www.bungy.co.nz/queenstown/kawarau-bungy-centre/kawarau-bridge-bungy/" >Kawarau Bungy Centre</a>.</p>
<p>My partner seriously considered jumping themselves, but the bold text in our travel insurance, outlining that we are not covered for bungy jumps dissuaded them.
If we go back to Queenstown I think they would probably throw caution to the wind and sign up without hesitation.</p>
<p>While 5-or-so of our tour were jumping we did get a bit of 
<abbr title="Fear of Missing Out - a feeling of anxiety that an exciting event may currently be happening elsewhere">FOMO</abbr>
 and decided to do a zip line instead.</p>
<p>★★★☆☆ 3/5 - Not for me personally, but everyone that jumped seemed to have fun.
I did enjoy the views of the river.</p>

<h3 class="relative group">Settling into Queenstown
    <div id="settling-into-queenstown" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#settling-into-queenstown" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>After all the jumpers had finished jumping we headed to Queenstown.</p>
<p>We were booked into the <a href="https://all.accor.com/hotel/5308/index.en.shtml" >Novotel Queenstown Lakeside</a>.
Another comfortable hotel the tour had arranged for us.</p>
<p>This hotel lacked the amazing vistas of the other ones we had stayed in.
But what it lacked in views, it made up for in location.
We could not have been more centrally located in the town, which was genuinely convenient.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1487_hu_3224154fe30d3c6e.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1487_hu_2155a759cb3806f.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1487_hu_ee292ccf8ef2200c.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1487_hu_76a837b5e391f16.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1487_hu_2155a759cb3806f.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1487_hu_76a837b5e391f16.jpeg"
          
          title="A view out over the bay at Queenstown"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1489_hu_52be6182494484e1.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1489_hu_ed49dfbdb966b806.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1489_hu_8cfc441a967dc5ad.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1489_hu_d712b2d6bd6d7deb.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1489_hu_ed49dfbdb966b806.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1489_hu_d712b2d6bd6d7deb.jpeg"
          
          title="The same bay at Queenstown at night"
        />
    </span>
  
    <figcaption class="text-center">Queenstown is beautiful day <em>and</em> night</figcaption>
  
</figure>

<p>There was no time to stop and admire the hotel however, we were in and out in a flurry.</p>

<h4 class="relative group">Sending our money off-road
    <div id="sending-our-money-off-road" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sending-our-money-off-road" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>On Thursday we were going on an <em>optional</em> 4x4 Safari and as it was <em>optional</em> it wasn&rsquo;t included in the price of our tour.
Thus, we had to go pay for the experience.</p>
<p><a href="https://www.nomadsafaris.co.nz/" >NOMAD safaris</a> were located on the other side of the town center, so we rushed over before they closed to book the two of us onto the <a href="https://www.nomadsafaris.co.nz/tours/lord-of-the-rings/full-day-lord-of-the-rings/" >Full day LoTR tour</a>.
$1160 (NZD) (£580) lighter I stood out on the street, breathing into a brown paper bag.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="my-bank-account"
    width="360"
    height="238"
    src="/2025/01/i-visited-new-zealand-part-6/my_bank_account.gif"
    srcset="/2025/01/i-visited-new-zealand-part-6/my_bank_account.gif 800w, /2025/01/i-visited-new-zealand-part-6/my_bank_account.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/01/i-visited-new-zealand-part-6/my_bank_account.gif"></figure>
<p>&ldquo;You can&rsquo;t take it with you&rdquo; was our informal mantra for this holiday.
We flew to the other side of the planet.
It would be silly to not use our money for experiences while we were there.</p>

<h4 class="relative group">Ramen to warm the soul
    <div id="ramen-to-warm-the-soul" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ramen-to-warm-the-soul" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>The rest of the day was ours to do with as we pleased.</p>
<p>The first thing we did was grab some lunch at <a href="https://www.tanoshi.co.nz/" >&lsquo;Ramen Ramen by Tanoshi&rsquo;</a>.</p>
<p>I <em>love</em> Ramen, and this place did not disappoint.
Probably big enough to seat ten, we were positioned on the bar.</p>
<p>Being able to pick the broth, noodles, proteins, and toppings separately was brilliant; and a bowl of Ramen was a welcome, warming meal (did I mention it was cold?).</p>
<p>★★★★☆ 4/5 - Food and staff were good.
It is a very small location however, so you might have to wait a bit for a seat.</p>

<h4 class="relative group">Sweet Treats
    <div id="sweet-treats" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sweet-treats" aria-label="Anchor">#</a>
    </span>
    
</h4>
<p>That evening we took a nighttime walk to see the night lights (pictured above).</p>
<p>On our route we visited two of the &lsquo;recommended&rsquo; spots in the town <a href="https://www.patagoniachocolates.co.nz/" >Patagonia Chocolates - Ice Creamery &amp; Chocolaterie</a> and the <a href="https://www.remarkablesweetshop.co.nz/" >Remarkable Sweet Shop</a>.
Both were excellent (especially if you have a sweet tooth like me).</p>

<h2 class="relative group">Wednesday 12<sup>th</sup>: Off Road Film Locations
    <div id="wednesday-12th-off-road-film-locations" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wednesday-12th-off-road-film-locations" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="off-road.svg" alt="Our Hotel to Mavora Lakes, via Garston Hunny" />
        <figcaption>Our Hotel to Mavora Lakes, via Garston Hunny (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-45.0335,168.6628&amp;destination=-45.2674,168.1734&amp;waypoints=-45.4643,168.6841" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Excluding our quick bungy jump/zip line experience, yesterday was mostly a day of travel and settling in to our hotel here in Queenstown.</p>
<p>Today was where the real sightseeing began.</p>
<p>The LoTR films are well known for their stunning locations.
From the snow covered Caradhras mountains to the beautiful forests and lake of Nen Hithoel.
Each location was gorgeous and showcased the broad beauty of New Zealand.</p>
<p>Today we were doing a tour south of Queenstown to see some of those locations.
Our final destination was the Mavora Lakes but to get there we have to first go around <a href="https://en.wikipedia.org/wiki/Lake_Wakatipu" >Lake Wakatipu</a> and <a href="https://en.wikipedia.org/wiki/Cecil_Peak" >Cecil Peak</a> which run between Queenstown and where we wanted to go.</p>
<p>As someone who comes from the south of England in the UK I&rsquo;m not used to having to navigate around unpassable terrain.
We don&rsquo;t have any big lakes, and we don&rsquo;t have any mountains.
Every river around me has a multitude of bridges, making a crossing trivial.</p>
<p>If our coach could travel over the lakes and mountains, it would be only 50 km as the crow flies.
Unfortunately we had to stick to the roads which ended up being a 170 km <em>almost</em> circular journey.</p>
<p>I have added Garston Hunny (our midway stop) to the map above to show how far we had to go to get around it.</p>
<p>We were fully numb to the early starts on this holiday so this morning&rsquo;s 6am start was taken in our stride.
Waiting for us outside the hotel&rsquo;s reception stood an absolute beast of an apocalypse-class coach.</p>
<p>We nick-named it &lsquo;Bill the Pony&rsquo;, after the unofficial 10<sup>th</sup> member of the fellowship.
He was no Shadowfax, but he was hardy.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="its-no-shadowfax"
    width="1536"
    height="2048"
    src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1490_hu_be44bdfb8b079ba1.jpeg"
    srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1490_hu_be44bdfb8b079ba1.jpeg 800w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1490_hu_1ea26a8fd1e7b18.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1490.jpeg"><figcaption>Our nobel steed: &lsquo;Bill the Pony&rsquo;</figcaption></figure>
<p>With the sun barely peeking over the horizon, we set off on today&rsquo;s quest.</p>

<h3 class="relative group">Fangorn Forest
    <div id="fangorn-forest" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fangorn-forest" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>We drove most of the morning, stopping briefly in a town called Mossburn, for a bathroom break<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</p>
<p>Our first stop was the filming location for two scenes in The Lord of the Rings: The Two Towers.</p>
<p>The first is where Aragorn, Legolas and Gimli find the burnt Orc Mound while searching for the Hobbits.</p>
<p>It was a cold, crisp morning with snow covering the ground.
This did not stop me and one of the others in the tour group doing what must be done, and recreating the Orc Mound.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1519-full_hu_a55f3abdb0c164a0.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1519-full_hu_70ea93f672cd252b.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1519-full_hu_4ceea2f02728a916.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1519-full_hu_62b229abec8699d7.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1519-full_hu_70ea93f672cd252b.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1519-full_hu_62b229abec8699d7.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Two Towers<br>
<strong>Bottom</strong>: A slightly lower budget version</figcaption>
  
</figure>

<p>We didn&rsquo;t have a huge budget, but I think the Uruk Hai&rsquo;s skull on a walking stick made do.</p>
<p>Just after finding the Orc Mound, the adventurers track the Hobbits into Fangorn forest, considering their decision before they follow.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1538-full_hu_2a1d8425a6a8a517.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1538-full_hu_258ccab651ff8518.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1538-full_hu_dd7b6d8757d008a7.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1538-full_hu_b99283474f8012f2.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1538-full_hu_258ccab651ff8518.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1538-full_hu_b99283474f8012f2.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Two Towers<br>
<strong>Bottom</strong>: Three of our tour group staring into the forest</figcaption>
  
</figure>

<p>The second scene is later in the same film.
Gandalf calls upon Shadowfax (not the coach), to carry him to Edoras.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1679-full_hu_5919786b4a7fb901.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1679-full_hu_d206d41363cb620a.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1679-full_hu_3737dd220c9f777d.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1679-full_hu_4f6c8209b08187e8.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1679-full_hu_d206d41363cb620a.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1679-full_hu_4f6c8209b08187e8.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Two Towers<br>
<strong>Bottom</strong>: My other half in the same location (sans Shadowfax)</figcaption>
  
</figure>

<p>The pictures above really only show the mountains to the north, but each direction was magnificent in its own right.
Even if you are not a fan of LoTR this location has beautiful vistas that I could have stared at for hours.</p>

<h3 class="relative group">Anduin River
    <div id="anduin-river" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#anduin-river" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Our next stop was 3 km to the north, at the southern end of the South Mavora Lake.</p>
<p>When we stepped from the coach we could only see a sliver of the Mavora Lake between the trees.
The thin trunks of the trees, without much else on the forest floor, made for a very calm and quiet atmosphere.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1565_hu_12a00d1f8bc53008.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1565_hu_bc857b7d063787b6.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1565_hu_3dc4403377500f66.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1565_hu_b96992212b313110.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1565_hu_bc857b7d063787b6.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1565_hu_b96992212b313110.jpeg"
          
          title="The mountain range in the distance was astounding"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1587_hu_55f11513865f1fd8.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1587_hu_647bb649826728b4.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1587_hu_f6f37e63dfa54031.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1587_hu_533b875f6e929056.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1587_hu_647bb649826728b4.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1587_hu_533b875f6e929056.jpeg"
          
          title="The canopy at the Mararoa River"
        />
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1571_hu_110aa20b96628083.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1571_hu_6c8b49b3d832de50.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1571_hu_cb490febd42c25a8.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1571_hu_b479775869cdd6c6.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1571_hu_6c8b49b3d832de50.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1571_hu_b479775869cdd6c6.jpeg"
          
          title="The bridge over the Mararoa River"
        />
    </span>
  
</figure>

<p>Here some of our group took a moment to bless some <a href="https://www.newzealand.com/uk/feature/new-zealand-greenstone/" >Pounamu</a> (or greenstone) in the river that they had purchased the day before from an authorised seller.
Although I had not purchased any myself, I enjoyed listening to the blessing under the gaze of yet another mountain.</p>
<p>By this point I had begun to fully relax, and started to really just enjoy myself.
It sometimes feels like a week holiday isn&rsquo;t enough time to decompress from work.
Two weeks is kinda long enough but here we were entering my third week, and I was beginning to dream of becoming a mountain man.</p>
<p>Anyway, in the LoTR films this location was used as the Silverlode &amp; Anduin River Junction, appearing when the fellowship leaves Lothloriel in their boats.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1575-full_hu_e28d97f0584cd9ec.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1575-full_hu_da49a9b0ffce2114.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1575-full_hu_ffa01b77b55967f3.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1575-full_hu_902170106854b374.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1575-full_hu_da49a9b0ffce2114.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1575-full_hu_902170106854b374.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Fellowship of the Ring<br>
<strong>Bottom</strong>: The same river, from the bridge</figcaption>
  
</figure>

<p>On my way back to the coach I stopped off at a toilet near where we had parked.
Locally known as a &lsquo;Drop Dunny&rsquo; (or more technically, a <a href="https://en.wikipedia.org/wiki/Pit_latrine" >Pit Latrine</a>), it looked like what we Brits call a &lsquo;Portaloo&rsquo;; a simple green plastic box with a door.</p>
<p>This was notable for two reasons:</p>
<ol>
<li>This was my first experience using one — it was fine.</li>
<li>The damn thing was more luxurious than most public toilets in the UK<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup> — somehow NZ was keeping better care of a toilet in a forest 200 km from the nearest City, than my City can within itself, in the UK.</li>
</ol>
<p>Anyway, toilet commentary aside, it was a very chill location.
The bridge is on a walking trail that circuits the lake.
If I ever go back I would love to take half a day to circumnavigate it.</p>

<h3 class="relative group">Nen Hithoel
    <div id="nen-hithoel" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#nen-hithoel" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Our second to last destination of the day was another 6 km away, at the south end of the North Mavora Lake.</p>
<p>In the LoTR films a lot happens here in a very short space of time; culminating in the breaking of the Fellowship.
Boromir tries to steal the ring from Frodo, and before he can say &ldquo;it&rsquo;s just a prank bro&rdquo;, Orcs attack.</p>
<p>Frodo hides in the roots of a tree to avoid capture.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_0940-full_hu_709f32072965e0aa.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_0940-full_hu_54160d41ccaf0182.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_0940-full_hu_d9f631d90d75a167.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_0940-full_hu_f6314754a9f0264c.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_0940-full_hu_54160d41ccaf0182.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_0940-full_hu_f6314754a9f0264c.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Fellowship of the Ring<br>
<strong>Bottom</strong>: Me, hiding from my bank manager</figcaption>
  
</figure>

<p>Merry and Pippin try to get Frodo to come back to them from behind a log.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1636-full_hu_65fac35bdf2187e4.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1636-full_hu_be39b413ade159b9.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1636-full_hu_7fde0941a774d7f7.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1636-full_hu_ef0993d6150326c1.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1636-full_hu_be39b413ade159b9.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1636-full_hu_ef0993d6150326c1.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Fellowship of the Ring<br>
<strong>Bottom</strong>: Me and my other half at a legally distinct log</figcaption>
  
</figure>

<p>However, Frodo decides to go it alone.
Before sailing off by himself, he stares at the ring while on the shore of the lake.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2025/01/i-visited-new-zealand-part-6/new_zealand_1052-full_hu_dab785ee9d96d314.jpeg 330w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1052-full_hu_7af2f74cfa6b2463.jpeg 660w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1052-full_hu_278320c698f09cef.jpeg 1024w, /2025/01/i-visited-new-zealand-part-6/new_zealand_1052-full_hu_ce0332982a94064d.jpeg 2x"
          src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1052-full_hu_7af2f74cfa6b2463.jpeg"
          data-zoom-src="/2025/01/i-visited-new-zealand-part-6/new_zealand_1052-full_hu_ce0332982a94064d.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Fellowship of the Ring<br>
<strong>Bottom</strong>: My other half leaving with the ring</figcaption>
  
</figure>

<p>This last picture resulted in a bit of an argument with me and my other half when we got back home.
You know I said I was going full mountain man earlier?<br>
Well, at this point I was just taking it all in.<br>
Admiring the scenery.<br>
Completely emersed in nature.<br>
Fully forgetting to take a picture of my other half.</p>
<p>I was looking in that direction, and I saw it happen.
I had no excuse.</p>
<p>Luckily someone else in the group had taken a picture, so I was saved from being fed to a Balrog.</p>

<h3 class="relative group">Manuka Honey
    <div id="manuka-honey" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#manuka-honey" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>We sadly had to head back to civilisation once more.</p>
<p>For me, it was impossible to fall asleep on the coach.
Outstanding view after outstanding view would roll past the window.
And although we were back-tracking on ourselves, seeing the same places we did only hours ago, they looked completely different at sunset rather than sunrise.</p>
<p>About halfway we stopped to be human.
Toilets, a coffee, and retail therapy.</p>
<p><a href="https://hunnyshop.co.nz/" >Garston Hunny Shop</a> knew what they were doing when they positioned a coffee van and toilets outside.
Like bees, we dutifully went from one to the other.
Garston sells Manuka Honey, which my other half was very excited to buy.
I did not know what Manuka Honey was and between bouts of pretending to be Winnie the Pooh (<em>oh bother</em>) they explained why we needed to get some.</p>
<p>I&rsquo;ll be honest, it is very nice Honey.</p>
<p>Up until now in this series of blogs, I have managed to avoid mentioning my rapidly worsening addition to Chai Lattes.
I must have bought a Chai Latte — steamed milk mixed with a spiced tea concentrate instead of espresso — at every conceivable opportunity on this holiday.</p>
<p>Initially sceptical that I could order something called a &rsquo;latte&rsquo; as a coffee hater, I had become their biggest fan.
My partner introduced me to them all the way back at the <a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-1/#sunday-2nd-auckland-zoo" >Auckland Zoo</a>, and I was rapidly depleting New Zealand&rsquo;s reserves of them<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup>.</p>
<p>We arrived back in Queenstown with enough time left to clean ourselves up and grab some food.
It was nice just to get back to the warmth of the hotel (did I mention it was cold?).</p>

<h3 class="relative group">Teapot Cocktails
    <div id="teapot-cocktails" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#teapot-cocktails" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Well there&rsquo;s nothing better for an Englishman when they are cold, and that&rsquo;s a cup of tea.
And I personally can&rsquo;t say no to a fancy cocktail.
So when two of the tour group invited us out for teapot cocktails we were all onboard.</p>
<p><a href="https://www.theworldbar.co.nz/" >The World Bar</a> was less than one minute away from our hotel and serves, you guessed it, cocktails in little teapots.
How adorable.</p>
<p>Named things like &lsquo;Sling Dog Millionaire&rsquo; and &lsquo;The Attenborough&rsquo;, they went down very well after a long day of looking and pointing at things.</p>
<p>★★★★☆ 4/5 - We only tried the teapots, which were reasonably priced.</p>

<h2 class="relative group">Thursday 13<sup>th</sup>: Safari Time
    <div id="thursday-13th-safari-time" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#thursday-13th-safari-time" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Wednesday was a big shift in the tone of the holiday with us getting deep into nature.</p>
<p>Thursday looks to bring more of the same, except from 4x4s!</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2025/01/i-visited-new-zealand-part-7/" >part 7</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I am holding on to my EU burgundy passport until the day it expires.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>And unlike normal Trivial Pursuit, someone under the age of 65 might be able to answer these NZ themed questions.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I learned, while writing this blog, that everywhere else it is spelt &lsquo;Bungee&rsquo; but in NZ it is spelt &lsquo;Bungy&rsquo;&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I may not be old yet, but I still appreciate a bathroom break.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p>Not that we have <a href="https://inews.co.uk/news/long-reads/uk-public-toilets-disappear-cuts-309008" >many left</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p>And I haven&rsquo;t had one since I got back to the UK. Everyone here keeps adding espresso to them &#x1f922;&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">We travel to the southern island to discover a different country</summary></entry><entry><title type="html">That's a Wrap - Twelve Days of Short Stories</title><link href="https://thega.me.uk/12-days-of-short-stories-wrap-up" rel="alternate" type="text/html" title="That's a Wrap - Twelve Days of Short Stories"/><published>2024-12-24T13:21:00+00:00</published><updated>2025-04-27T11:56:51+00:00</updated><id>https://thega.me.uk/12-days-of-short-stories-wrap-up</id><content type="html" xml:base="https://thega.me.uk/12-days-of-short-stories-wrap-up"><![CDATA[<p>So, a month ago, I decided to <a href="https://thega.me.uk/2024/11/twelve-days-of-short-stories/" >challenge myself and write twelve short stories</a> over a period of twenty-four days.
This is a wash-up of how I thought it went, what I did well, and what I could have improved on.</p>

<h2 class="relative group">Results
    <div id="results" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#results" aria-label="Anchor">#</a>
    </span>
    
</h2>
<table>
  <thead>
      <tr>
          <th style="text-align: center">Day</th>
          <th>Primary Word</th>
          <th>Backup Word</th>
          <th style="text-align: center">Point of View</th>
          <th style="text-align: center">Result</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-1/" >1</a></td>
          <td><code>abundant</code></td>
          <td><del><code>benefit</code></del></td>
          <td style="text-align: center">3<sup>rd</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-3/" >3</a></td>
          <td><code>point</code></td>
          <td><del><code>ideal</code></del></td>
          <td style="text-align: center">1<sup>st</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-5/" >5</a></td>
          <td><code>piano</code></td>
          <td><del><code>snow</code></del></td>
          <td style="text-align: center">3<sup>rd</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-7/" >7</a></td>
          <td><del><code>north</code></del></td>
          <td><code>sound</code></td>
          <td style="text-align: center">1<sup>st</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center">9</td>
          <td><code>dare</code></td>
          <td><code>style</code></td>
          <td style="text-align: center">3<sup>rd</sup></td>
          <td style="text-align: center">&#x2757;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-11/" >11</a></td>
          <td><code>link</code></td>
          <td><del><code>representative</code></del></td>
          <td style="text-align: center">1<sup>st</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-13/" >13</a></td>
          <td><code>devote</code></td>
          <td><del><code>virus</code></del></td>
          <td style="text-align: center">1<sup>st</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-15/" >15</a></td>
          <td><code>grave</code></td>
          <td><del><code>brink</code></del></td>
          <td style="text-align: center">1<sup>st</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-17/" >17</a></td>
          <td><code>jam</code></td>
          <td><del><code>rib</code></del></td>
          <td style="text-align: center">1<sup>st</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
      <tr>
          <td style="text-align: center">19</td>
          <td><code>injury</code></td>
          <td><code>ghost</code></td>
          <td style="text-align: center">2<sup>nd</sup></td>
          <td style="text-align: center">&#x2757;</td>
      </tr>
      <tr>
          <td style="text-align: center">21</td>
          <td><code>flat</code></td>
          <td><code>radical</code></td>
          <td style="text-align: center">1<sup>st</sup></td>
          <td style="text-align: center">&#x2757;</td>
      </tr>
      <tr>
          <td style="text-align: center"><a href="https://thega.me.uk/fiction/12-days-of-short-stories-23/" >23</a></td>
          <td><code>glimpse</code></td>
          <td><del><code>reasonable</code></del></td>
          <td style="text-align: center">3<sup>rd</sup></td>
          <td style="text-align: center">&#x1f44d;</td>
      </tr>
  </tbody>
</table>
<p>So, as you can see I managed <em>most</em> of the days, completing 9/12 or 75%.</p>

<h2 class="relative group">Lessons Learned
    <div id="lessons-learned" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#lessons-learned" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">Time Management
    <div id="time-management" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#time-management" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Part of the challenge was to give myself only two days per story, which worked well for the most part, except when I got busy in the run-up to Christmas.</p>
<p>I can blame the 9<sup>th</sup> on wanting to have a nice meal with my other half, the 19<sup>th</sup> on being burnt out at work, and the 21<sup>st</sup> on having to drive six hours to London and back.</p>
<p>These excuses, however, are pretty thin because I had two days to write each story.
I could have written it on the other day.
That I can blame on poor time management.</p>
<p>The 15<sup>th</sup> was also a day late and remains unfinished.</p>
<p>Ultimately, I am not going to beat myself up.
During all of this, I was working a full-time job, so these stories were being written in my evenings and weekends.</p>
<p>I am still very happy I managed 75% of the stories.</p>

<h3 class="relative group">Primary vs. Backup Word
    <div id="primary-vs-backup-word" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#primary-vs-backup-word" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>In the event that the primary prompt did not give me an idea of what to write, I had a backup word that I could use instead.</p>
<p>Of the nine stories written, I only had to use the backup word once, on the 7<sup>th</sup>.
The primary word was <code>north</code>, and although I had ideas of writing something about the &lsquo;North Pole&rsquo;, I had a better idea for <code>sound</code> that would allow me to try a different style of writing.</p>
<p>If I were to do this again, I would 100% keep the backup word as an option.
Giving my brain an &lsquo;out&rsquo; made the task seem less daunting.
For the most part, however, I just wrote the first thing that came to my head.</p>
<p>On the 3<sup>rd</sup> I did jump from <code>point</code> to <code>peak</code>, but the prompts are supposed to be just that, prompts.</p>

<h3 class="relative group">Grammar
    <div id="grammar" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#grammar" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>My English education did not result in me knowing English very good.
After the second story it became evident that I needed to reach for a Thesaurus frequently if I wanted to avoid using &lsquo;said&rsquo; constantly.</p>
<p>I did need to keep looking up when to use an apostrophe because the rules around that don&rsquo;t stick in my head.</p>
<p>About half way though I realised that writing all the stories in Visual Studio Code was depriving me of a grammar checker, and I suck at grammar.
I don&rsquo;t have an Office 365 licence, and in retrospect I could just have used LibraOffice, but instead I used <a href="https://languagetool.org/" >https://languagetool.org/</a>.</p>
<p>Doing this again, I would write in LibraOffice and then translate the text into Markdown (how this blog is powered).</p>

<h3 class="relative group">Point of View
    <div id="point-of-view" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#point-of-view" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Based on my natural writing style, I can pretty effortlessly manage both first and third person writing.
I relate more to first person so that tends to be my preferred style.</p>
<p>Annoyingly, I missed the only second person story on the 19<sup>th</sup>, but if I am being honest, the idea of writing second person was quite daunting.
I have never read a story that is written from that perspective, so it was going to be quite an interesting and difficult challenge.</p>
<p>If I find myself in the mood I might come back around and write it, with a bit more time to get it right.</p>

<h3 class="relative group">Genre
    <div id="genre" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#genre" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Now, I&rsquo;m not a master of genre definitions, so these are probably incorrect, but here are the stories grouped by genre:</p>
<!-- markdownlint-disable MD037 -->
<table>
  <thead>
      <tr>
          <th>Genre</th>
          <th style="text-align: center">Count</th>
          <th>Days</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Horror</td>
          <td style="text-align: center">3</td>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-5/" >5</a> <a href="https://thega.me.uk/fiction/12-days-of-short-stories-7/" >7</a> <a href="https://thega.me.uk/fiction/12-days-of-short-stories-23/" >23</a></td>
      </tr>
      <tr>
          <td>Adventure</td>
          <td style="text-align: center">2</td>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-3/" >3</a> <a href="https://thega.me.uk/fiction/12-days-of-short-stories-15/" >15</a></td>
      </tr>
      <tr>
          <td>Sci-fi</td>
          <td style="text-align: center">2</td>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-1/" >1</a> <a href="https://thega.me.uk/fiction/12-days-of-short-stories-13/" >13</a></td>
      </tr>
      <tr>
          <td>Crime</td>
          <td style="text-align: center">1</td>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-11/" >11</a></td>
      </tr>
      <tr>
          <td>Thriller</td>
          <td style="text-align: center">1</td>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-17/" >17</a></td>
      </tr>
  </tbody>
</table>
<!-- markdownlint-enable MD022 -->
<p>As you can see, most of my stories were Horror and Adventure which I think work well in the thousand-ish word category.
Set up a scenario, and describe what happens as a result.</p>
<p>I thought that, given I almost solely read Sci-fi, most of the stories would fit into that genre.
That did not happen, with most of them being influences by film/TV that I had consumed previously.</p>
<p>An example is the &lsquo;Krampus&rsquo; story on day 5; this was influenced heavily by the <a href="https://www.imdb.com/title/tt2543690/" >Minstrel Krampus</a> episode of American Dad, which I watched a month or so ago.</p>
<p>Notably absent are Romance, and Fantasy.</p>

<h3 class="relative group">Style
    <div id="style" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#style" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The main takeaway I have about <em>what</em> I wrote, is that the style of my writing does not differ much.
All characters speak the same way and lack a lot of individual traits.
I&rsquo;m not sure if you can get that kind of uniqueness in a thousand words all the time, but I have seen it done effectively.
<a href="https://app.thestorygraph.com/books/0885d5f1-edc2-435f-b17c-7e881829dbc6" target="_blank" rel="noreferrer">All Systems Red</a> did this really well; within the first 5 pages I had a good idea of the personality of the main character.</p>
<p>This is an area I really want to improve on.</p>
<p>I am happy I had a go at an LA Noir (<a href="https://thega.me.uk/fiction/12-days-of-short-stories-11/" >11</a>) style story, and a World War Z (<a href="https://thega.me.uk/fiction/12-days-of-short-stories-17/" >17</a>) inspired one.</p>

<h2 class="relative group">Wrap Up
    <div id="wrap-up" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wrap-up" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>(It&rsquo;s a Christmas joke)</p>
<p>Overall, I am pleased that I thought of, and executed, this idea.
Each story could have been better, of course, but you don&rsquo;t improve without repetition.
I might try this again in 2025.</p>
<p>I still want to try my hand at writing a longer story.
Let&rsquo;s see if this exercise helped.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Note
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>If you have read this far, and you read the stories, thank you for joining me, and I hope you don&rsquo;t want your time back.
<em>No refunds!</em></p></div></div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="fiction"/><summary type="html">I did well, but I could have been better.</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 23</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-23/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 23"/><published>2024-12-23T21:32:00+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-23</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-23/"><![CDATA[<p>Lina Buckley hid on their hands and knees behind the sofa in her house.
Her mother and father had both told her to not stay up to try to get a glimpse of Santa delivering presents, but Lina had ignored them.<br>
&ldquo;You really don&rsquo;t want to catch Santa in the act&rdquo;, her father said nervously, &ldquo;he&hellip;uh&hellip;he prefers you get a good night&rsquo;s sleep&rdquo;.<br>
&ldquo;I <em>know</em> Dad&rdquo;, Lina had protested, &ldquo;I&rsquo;ll stay in bed and be good. I don&rsquo;t want to end up on the naughty list&rdquo;.</p>
<p>A battle had raged in her eight-year-old mind for an hour.<br>
&ldquo;<em>I really want to stay off the naughty list</em>&rdquo;, she had said to herself, and she was very cosy in bed; the house was so cold at night she scarcely wanted to get up to go to the bathroom.<br>
&ldquo;<em>But, I need to thank Santa, make sure he eats his cookie, and make sure his reindeer get their carrot</em>&rdquo;, she finished.</p>
<p>Curiosity got the best of her, and she decided to sneak downstairs.
This wasn&rsquo;t the first time she had sneaked downstairs recently.
Lina&rsquo;s Grandma had baked some particularly delicious biscuits a week ago, and a midnight raiding party of one, aged eight, had liberated several of those biscuits from their tin.
This time, Lina knew which steps creaked loudly, and which doors groaned when opened.</p>
<p>Lina had made it downstairs without alerting her mother and father.
It had been such a long wait that she had almost nodded off there, behind the sofa.
The sound of scratching had startled Lina awake, her eyes instantly on the fireplace on the other side of the room.<br>
&ldquo;<em>He&rsquo;s here!</em>&rdquo; she squealed internally, placing one hand over her mouth to make sure her elation stayed inside.<br>
She didn&rsquo;t want to scare Santa away.</p>
<p>The first thing Lina saw was a gloved hand reach around the top of the fireplace.
But what first appeared to be a gloved hand was joined by another, then two more on the left-hand side of the fireplace, and one more on the right.
A bright red hat slowly emerged in the middle of the fireplace.<br>
&ldquo;<em>Santa doesn&rsquo;t have that many hands</em>&rdquo;, Lina was confused, her brow furrowed.</p>
<p>The hat continued into the room, atop a furry head.
Lina had seen a spider before, at the zoo.
The creature that had just climbed down through the fireplace looked like a jumping spider, but was far larger than the ones she had seen; this spider was about the same height as her.
The room was dim, but she could make out the light hairs all across the spider&rsquo;s dark body, making it look fluffy.
Two giant black eyes, and two smaller ones sat below the bright red Santa hat brimmed with white.</p>
<p>Lina watched the spider&rsquo;s eyes flick around the room.
They lingered on her for a second, not long enough for her to notice.
If it was uncomfortable with the presence of the small girl hiding behind the sofa, it did not show it.
Lina equally had not reeled back in fear because she was not scared.
She found the unusually large spider cute, with its little Santa hat.</p>
<p>The spider turned to face the tree that stood next to the fireplace, it&rsquo;s eight legs allowing it to pivot effortlessly on the spot.
Lina watched it in awe as one of its legs reached back to grab a thin strand of silk from its spinneret.
The spider then proceeded to begin spinning the silk.</p>
<p>In a process that took no more than ten seconds, the spider was holding a wrapped present; bright green wrapping paper and a red bow. Lina let a gasp slip in awe, immediately slapping her hand over her mouth.<br>
&ldquo;ℑ𝔱 𝔦𝔰 𝔒𝔎 𝔪𝔶 𝔠𝔥𝔦𝔩𝔡&rdquo;, Lina heard, not through her ears, but as if the words were thought <em>for her</em>.<br>
&ldquo;𝔜𝔬𝔲 𝔥𝔞𝔳𝔢 𝔟𝔢𝔢𝔫 𝔤𝔬𝔬𝔡 𝔱𝔥𝔦𝔰 𝔶𝔢𝔞𝔯, 𝔞𝔫𝔡 𝔱𝔥𝔲𝔰 𝔶𝔬𝔲 𝔤𝔢𝔱 𝔞 𝔭𝔯𝔢𝔰𝔢𝔫𝔱&rdquo;, the thoughts said again.<br>
Lina watched the spider as it watched her.<br>
&ldquo;Are you Santa?&rdquo;, she asked slowly.<br>
&ldquo;𝔜𝔢𝔰, 𝔪𝔶 𝔠𝔥𝔦𝔩𝔡&rdquo; the thoughts, the spider, Santa said, &ldquo;𝔞𝔫𝔡 𝔶𝔬𝔲 𝔰𝔥𝔬𝔲𝔩𝔡 𝔟𝔢 𝔦𝔫 𝔟𝔢𝔡&rdquo;.<br>
&ldquo;I&rsquo;m sorry&rdquo; the little girl responded, &ldquo;I just wanted to make sure the reindeer got their carrot&rdquo;.</p>
<p>Santa&rsquo;s eyes probed the room, eventually falling on a little side table.
A glass of milk, a mince pie, and a single carrot sat there, untouched.
Santa walked over to the table, each of its legs making a soft sound against the carpet.
It sat for a second and picked up the carrot using one of its pedipalp.<br>
&ldquo;ℑ 𝔴𝔦𝔩𝔩 𝔪𝔞𝔨𝔢 𝔰𝔲𝔯𝔢 𝔱𝔥𝔢 𝔯𝔢𝔦𝔫𝔡𝔢𝔢𝔯 𝔤𝔢𝔱 𝔱𝔥𝔦𝔰 𝔨𝔦𝔫𝔡 𝔤𝔦𝔣𝔱. 𝔗𝔥𝔞𝔫𝔨 𝔶𝔬𝔲 𝔏𝔦𝔫𝔞&rdquo;.</p>
<p>Santa turned on its legs and began up the chimney.<br>
&ldquo;𝔖𝔩𝔢𝔢𝔭 𝔠𝔥𝔦𝔩𝔡, 𝔞𝔫𝔡 𝔥𝔞𝔳𝔢 𝔞 𝔐𝔢𝔯𝔯𝔶 ℭ𝔥𝔯𝔦𝔰𝔱𝔪𝔞𝔰&rdquo; the final thoughts came, and Santa was gone.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="christmas-spider"
    width="1920"
    height="1200"
    src="/fiction/12-days-of-short-stories-23/christmas_spider_hu_62a5af655f970d8a.jpeg"
    srcset="/fiction/12-days-of-short-stories-23/christmas_spider_hu_62a5af655f970d8a.jpeg 800w, /fiction/12-days-of-short-stories-23/christmas_spider_hu_3870f19fc9fe93f4.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/fiction/12-days-of-short-stories-23/christmas_spider.jpeg"><figcaption>Source: <a href="https://imgur.com/V5VpM9A" >https://imgur.com/V5VpM9A</a></figcaption></figure>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;glimpse&amp;rsquo;</summary></entry><entry><title type="html">Use ssh instead of https for Terraform modules</title><link href="https://thega.me.uk/code/ssh-instead-of-https-for-terraform" rel="alternate" type="text/html" title="Use ssh instead of https for Terraform modules"/><published>2024-12-19T22:39:00+01:00</published><updated>2024-12-22T10:57:13+00:00</updated><id>https://thega.me.uk/code/ssh-instead-of-https-for-terraform</id><content type="html" xml:base="https://thega.me.uk/code/ssh-instead-of-https-for-terraform"><![CDATA[<p>When you use Terraform modules that are hosted on GitHub, you tend to set up the module reference with <code>https</code> as the protocol because you can use an auth token in CI/CD.
This then requires you to use a Personal Access Token when working locally.
What if you could use ssh instead?</p>
<p>There are several environmental factors that required me to use this solution:</p>
<ol>
<li>My business is using a <a href="https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/about-organizations#about-organizations" >GitHub Organisation</a></li>
<li>Access to this Organisation is federated with our businesses Active Directory</li>
<li>We are hosting repositories containing Terraform modules in the private organisation</li>
<li>I don&rsquo;t want to use &lsquo;Personal Access Tokens&rsquo; because I have a perfectly good ssh key</li>
</ol>
<p>My organisation have set up your modules to look like so:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-hcl" data-lang="hcl"><span style="display:flex;"><span><span style="color:#66d9ef">module</span> <span style="color:#e6db74">&#34;my_module&#34;</span> {
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  source <span style="color:#f92672">=</span> &#34;git::https://github.com/[org]/[project].git?ref<span style="color:#f92672">=</span><span style="color:#66d9ef">v1</span>.<span style="color:#ae81ff">2</span>.<span style="color:#ae81ff">3</span><span style="color:#960050;background-color:#1e0010">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#960050;background-color:#1e0010">//</span> <span style="color:#66d9ef">variables</span>
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></div>
<p>This is fantastic for a fully GitHub ecosystem, but when I try to run <code>terraform get</code> on my laptop — so IntelliJ can resolve the required variables for the module — Terraform prompts me for my GitHub username/password:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ terraform get
</span></span><span style="display:flex;"><span>Downloading git::https://github.com/[org]/[project].git?ref=v1.2.3 for my_module...
</span></span><span style="display:flex;"><span>Username for &#39;https://github.com&#39;:
</span></span><span style="display:flex;"><span>Password for &#39;https://pwhittlesea@github.com&#39;:
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>Error: Failed to download module
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">
</span></span></span><span style="display:flex;"><span>Could not download module &#34;my_module&#34; source code from &#34;git::https://github.com/[org]/[project].git?ref=v1.2.3&#34;: error downloading
</span></span><span style="display:flex;"><span>remote: Support for password authentication was removed on August 13, 2021.
</span></span><span style="display:flex;"><span>remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
</span></span><span style="display:flex;"><span>fatal: Authentication failed for &#39;https://github.com/[org]/[project].git/&#39;
</span></span></code></pre></div></div>
<p>When you head over to the <a href="https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls" >documentation</a> you are recommended to use a &lsquo;Personal Access Token&rsquo; to download the HTTPS module.</p>
<p>I <em>could</em> create a Classic Personal Access Token and configure SSO to authorise it for my organisation, but given I already have my ssh key configured, why don&rsquo;t I use that instead?</p>
<p>If I add the following to <code>~/.gitconfig</code> then when downloading each module, Terraform will switch out the <code>https</code> for <code>ssh</code>:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#66d9ef">[url &#34;ssh://git@github.com&#34;]</span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">insteadOf</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">https://github.com</span></span></span></code></pre></div></div>
<p>Now when I run <code>terraform get</code>:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ terraform get
</span></span><span style="display:flex;"><span>Downloading git::https://github.com/[org]/[project].git?ref=v1.2.3 for my_module...
</span></span><span style="display:flex;"><span>- my_module in .terraform/modules/my_module
</span></span></code></pre></div></div>
<p>Success!</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="github"/><category term="terraform"/><summary type="html">Redirect your http Terraform modules to connect over ssh instead.</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 17</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-17/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 17"/><published>2024-12-17T21:43:00+00:00</published><updated>2026-01-03T19:36:07+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-17</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-17/"><![CDATA[<p><strong>Interview of &lsquo;Sally Rivers&rsquo;, Mar 14<sup>th</sup> 2034.
As follows:</strong></p>
<p>I was driving home for Christmas, listening to &lsquo;Driving Home for Christmas&rsquo;, is that ironic?
Traffic on the M25 was not unusual, but it was unexpectedly crap for Christmas Eve.
Normally it was roughly a two and a half hour drive to my boyfriend&rsquo;s house, and I was about half way there before the traffic came to a complete halt.</p>
<p>No stranger to a traffic jam, I pulled out my phone to text my other half I was going to be late.
I was <em>technically</em> parked, so it was fine.
It&rsquo;s fine.
The odd part was that I had no signal, like nothing.
Normally you have a bar or two without data, even in the middle of a forest, but I had nothing.
At the time I didn&rsquo;t really give it a second thought, but in retrospect it was the first sign something was wrong.</p>
<p>When I watched the news, like, the week after I think, they mentioned a pretty big explosion which was how they escaped the &lsquo;containment site&rsquo;, I think they called it.
I didn&rsquo;t hear anything, however; the radio was turned up loud and the heaters were on full to stop the windscreen misting over.
You know how it gets in winter.</p>
<p>I think it was about three songs later, after &lsquo;Last Christmas&rsquo; they played &lsquo;Fairytale of New York&rsquo; and I was busy being bummed out by it when the man ran past my car.
From in front of me to behind me, so could see his face.
He looked white as a sheet, but I only saw him for a second because he was <em>sprinting</em>.
He was gone before my brain really processed it, I think.</p>
<p>People in the cars around me were starting to open their doors and get out, to look down the motorway.
The lady next to me, she was about 50, pointed down the road and made a face like she was screaming, but I couldn&rsquo;t hear it; they had got to the fluty part of the song and the music was quite loud, did I say?
I looked down the road in the direction she was pointing but, I couldn&rsquo;t see past the van I was sat behind.</p>
<p>You know, I don&rsquo;t really know why I didn&rsquo;t get out to look to start with.
I was more focused on it being cold, and I didn&rsquo;t want to go outside.
Anyway, how often does something like this happen?
They tell you to not get out of the car on a motorway, you know.</p>
<p>Then more people were running past the car, one of them knocked the lady next to me over.
When I look back on it, this was when I realised something was super wrong.
It was way too late, however, because when I tried to open my door the people running past would just push it closed again.
I think I tried like five times before I left it to try opening the sunroof.</p>
<p>That was when I saw the first zombie.
Oh, sorry.
I know you didn&rsquo;t want me to call them that.
Reanimated Infected Person, was it?
RIP?
Cute.</p>
<p>Where was I?
Yes, reaching for my sunroof, I saw the first RIP.
Jesus, <em>really</em>?
Anyway, they ran up onto the roof of a car ahead of me, and my eye was drawn to it immediately.
It was wearing a high-vis jacket, its face covered in blood.
I remember freezing and just staring at it, people literally flooding around my car.
It was sniffing the air, or something, like this.</p>
<p><strong>Note: Witness tilts their head back and imitates sniffing the air.</strong></p>
<p>It jumps off the car onto one of the people running past, pinned them against my car and <em>bit</em> them.
Like, I&rsquo;ve seen some nasty videos online, we all have, but this was messed up.
There was blood all over my window.
Then there were more of them, jumping over the cars on top of everyone, biting them.
God, they were everywhere!</p>
<p>&lsquo;Walking in the Air&rsquo; was on the radio at this point.
I don&rsquo;t think I&rsquo;ll ever be able to listen to it again.
They told me when they found me that freezing, and not running, in a car with the heater on full and the radio up loud, was what saved me.
They didn&rsquo;t know I was there.
I think I&rsquo;m fine with freezing, you know, all things considered.</p>
<p>One of them jumped on the roof of my car; it was bald, and was wearing a suit.
I could see blood running down its face, a clump of hair clenched in its fingers.
I think I was breathing really hard because the windscreen was fogging up again.
It was looking at me, and I thought that was it.
Maybe God does exist because it looked up and jumped after a guy running behind my car.</p>
<p>They said later there were 50 of them to start with, but it felt like they were running past forever.
After a while I realised my eyes hurt; I had been trying to stay so still I had forgotten to blink and my eyes were super dry.</p>
<p>Then I remember crying.
Everywhere I looked, there were bodies.
Everything was covered in blood, man; it was like those Hitchcock movies my dad used to show me.</p>
<p>I just sort of sat there until I heard the helicopters in the sky.</p>
<p><strong>Account Ends</strong>.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Info
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>This one is in the style of <a href="https://app.thestorygraph.com/books/5acbfc41-517f-4672-bf71-66a3c1fcd291" target="_blank" rel="noreferrer">World War Z</a>, which is a great book, but an even better Audiobook!</p></div></div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;jam&amp;rsquo;</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 15</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-15/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 15"/><published>2024-12-16T20:22:00+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-15</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-15/"><![CDATA[<p>I was a bit alarming, being shown your own grave.
Well, at least a grave with your own name.<br>
&ldquo;You got a gravestone, and then you <em>carved</em> my name on it?!&rdquo;<br>
I was mildly impressed, to be honest.
If you could push past the baseball bat, that my hands were tied, and that it was <em>freezing</em> out here, one could be mildly impressed.</p>
<p>We were standing in a graveyard behind the church I had just been captured in; Daniel and his goons had tracked me here and caught me off guard.</p>
<p>&ldquo;Oui, mon cheri&hellip;&rdquo;<br>
&ldquo;Oh, my <em>god</em>&rdquo;, I couldn&rsquo;t help but blurt out, &ldquo;you&rsquo;re not French Daniel, you grew up in Surrey!&rdquo;.<br>
Daniel pressed his thumb and forefinger to the bridge of his nose.<br>
&ldquo;I am <em>not</em> going to let you distract me this time, Sherry.
Just look at the nice gravestone we got engraved with your name to intimidate you into telling us where you hid the god, damn, AMULET&rdquo;.<br>
The last word came out with seething annoyance, spittle from Daniel&rsquo;s mouth spraying my face.<br>
&ldquo;Spray it, don&rsquo;t&hellip;&rdquo; I began to say as he slapped me with the back of his hand.<br>
&ldquo;ENOUGH&rdquo;.</p>
<p>&ldquo;That <em>hurt</em>, you shit!&rdquo; I whispered while wincing, the wind taken from my sails.<br>
&ldquo;Good&rdquo;, Daniel said, &ldquo;maybe now you will listen to what I have to offer&rdquo;.<br>
&ldquo;I will make this painfully clear, clearer than the six-foot personalised hole before us can.
Tell us where you hid the Amulet of Nectanebo II, or, we will bury you <em>alive</em>&rdquo;.</p>
<p>I looked him up and down.
This mid-level human resources asshole, who looked like he was cosplaying in his daddy&rsquo;s suit, was not going to kill me and give up his only chance of finding the amulet.
&ldquo;No&rdquo; I practically spat at him, &ldquo;over my dead body&rdquo;.<br>
&ldquo;A choice set of words&rdquo; Daniel responded coolly, &ldquo;a regrettable choice of words&rdquo;.</p>
<p>Silence passed between us for a moment, and I could hear the crows in the trees dotted throughout the graveyard.
Daniel looked behind my left shoulder to look at his thug behind me.<br>
&ldquo;Throw her in&rdquo;.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Warning
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>This one is a day late, so I didn&rsquo;t get to finish it, apologies!</p></div></div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;grave&amp;rsquo;</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 13</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-13/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 13"/><published>2024-12-11T23:36:00+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-13</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-13/"><![CDATA[<p>I wasn&rsquo;t ready for you to leave the way that you did.
We had so many plans that we had never managed to get around to, but it still felt like we had lived a thousand lives together; they will never be enough.
I would gladly have accepted a few more, maybe even just one more, before you had to go.</p>
<p>It wasn&rsquo;t love at first sight because the visor of your spacesuit was opaque to prevent the unfiltered light of the sun from burning out your retinas.
The feeling of fear that paralysed me as you blew the exterior hatch of the mining vessel I was contracted on; it feels like yesterday.
You and your mechanised infantry stormed the bridge of the ship and killed my captain and second officer; I remember it fondly.</p>
<p>You removed your helmet and our eyes met for the first time.
I couldn&rsquo;t hear you commanding me to tell you where the command codes were because every word you spoke was a soft, sweet birdsong to my young, hormone befuddled brain.</p>
<p>When one of your robot goons smashed the butt of its blaster into my temple, my higher brain functions restarted, and I blurted out &ldquo;You&rsquo;re amazing&rdquo; which I remember took you by surprise.<br>
&ldquo;I&hellip; I don&rsquo;t mean you&rsquo;re not scary and&hellip; you know, completely in charge of this situation. I just mean you&rsquo;re&hellip; I&rsquo;ll shut up&rdquo;.</p>
<p>I was so young and stupid when you smiled back at me and commanded your robots to tie me up and throw me in your brig.
In some ways, I wish we could go back to that time.
It wasn&rsquo;t simpler per-say, but you were less&hellip; dead.</p>
<p>It had been a couple of weeks until you let me out to roam around the ship; I couldn&rsquo;t do much damage (given the kill-bots watched my every move).
I&rsquo;ll never know why you decided to spare me initially but I will always be glad you did.
Without you pirating my ship and killing the crew, I would still be stuck in that dead-end mining job that I hated.</p>
<p>Our relationship grew slowly, but with only the two of us on your ship (if we ignore all the mechanical soldiers) we had plenty of time to get to know each other.
I&rsquo;m sure some psychologist somewhere will say that is not a healthy, and we should have had our own space.
It was a story as old as time; boy gets pirated by girl, girl kills boy&rsquo;s crew and kidnaps boy, boy and girl get to know each other and fall in love.</p>
<p>When you eventually let me come along on missions, I was so glad to get off the ship.
Getting to see you &lsquo;at work&rsquo; was a pleasure, if not a bit disturbing to start with.
Piracy sounds cool in the holo-novels, but in reality there is a lot more viscera to clean off of your shoes than you would initially expect.
You had taught me the &lsquo;rules&rsquo; of pirating (which felt like an oxymoron) and I had found my new career, a family business you could call it.</p>
<p>God, I&rsquo;ll miss pirating around the galaxies with you.</p>
<p>I stopped my tour down memory lane to look back at the Frenyaal captain that had managed to pull a blaster without either of us noticing.
One of the kill-bots had shot the weapon efficiently from his grip, following its orders to not kill unnecessarily, if not a touch late.<br>
&ldquo;Rule 5&rdquo; I heard you say from the grave, &ldquo;never let anyone get away with disrespecting you&rdquo;.</p>
<p>Well, it was time to show you that I was paying attention for all those years.<br>
&ldquo;Hold him down&rdquo;.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;devote&amp;rsquo;</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 11</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-11/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 11"/><published>2024-12-11T22:11:00+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-11</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-11/"><![CDATA[<p>&ldquo;Man, if I don&rsquo;t make a breakthrough on this case soon the Chief is going to draw me a new pair of curtains&rdquo; I said to myself.
The cigarette smoke haze hanging in the air hadn&rsquo;t bothered me for the last 20 years, but it was bothering me today.
I uselessly batted away my most recently exhaled cloud so I could stare directly at the map without further interruption.<br>
&ldquo;There&rsquo;s got to be something in here, boss&rdquo; Dan Ellis said from behind me — or Rook as I had been calling him since he started a month ago — &ldquo;although I&rsquo;m not seeing it. My drink needs a top-up. Need anything from the break room?&rdquo; he asked.<br>
&ldquo;Don&rsquo;t worry about me, I&rsquo;ve had enough Coffee to keep me up for the next week, and I can feel my skin crawling. Go get some air, this ain&rsquo;t going anywhere anytime soon, and maybe it&rsquo;ll give you a fresh perspective&rdquo; I heard myself say, but my mind was already elsewhere.</p>
<p>The truth was, I wasn&rsquo;t a damn dime closer to figuring out who this son-of-a-gun was.
Every woman in this city is waiting for me to take this scumbag down so they can feel safe going out again.
&ldquo;There&rsquo;s got to be a connection here&rdquo; I said to no one in particular, I&rsquo;d take an idea from the walls if they had any.</p>
<p>Scanning over the map of the city, the photos of the victims were held in by red push-pins; string taut between them.
May Welsh was the first and the worst.
I remember it vividly, you&rsquo;d have to be a heartless deadbeat to forget it.
The partners of the law firm she worked for had found her in the office when they opened up in the morning; what was left of her was sprawled out in the middle of the floor.
She&rsquo;d been closing up for the night but hadn&rsquo;t made it as far as the door, the poor thing.</p>
<p>It was the first dead body Rook had seen up close, and it was a bad one.
He damn near vomited directly on the body before we could get a good look at her, and even thinking about the scene now made my stomach turn something fierce.</p>
<p>The doctor surmised that she was dead before he chopped off all her fingers and toes.
It&rsquo;s a small mercy that she was gone before her lips were cut off and her eyes gouged out.
The cuts were rushed and crude; obvious to anyone looking from across the room.
Either this guy was using a butter knife, or this was his first time, and he had no idea what he was up to.</p>
<p>Whoever this freak is, to do this to a poor thing like May, he must have a rage in him that&rsquo;s burning him up inside.<br>
I remember telling Rook, &ldquo;He&rsquo;s going to want more blood, mark my words&rdquo;.<br>
God, I wish I had been wrong.</p>
<p>I followed the string from May&rsquo;s pin over two city blocks on the map, to an alley behind Frank&rsquo;s Bodega.
Pamela Harper was second; brutally taken too early in broad daylight.</p>
<p>It was a couple of days after May; God, the ink was barely dry on my report.
Pamela&rsquo;s body was slumped against the wall this time, obscured partially from view by a dumpster.
This devil had removed her fingers, toes, eyes and lips; the same as May.
He can&rsquo;t have had much time because the poor kid who found the body said it was still warm.
&ldquo;He&rsquo;s mocking us&rdquo; I muttered under my breath, &ldquo;it&rsquo;s like he&rsquo;s not scared of being caught&rdquo;.</p>
<p>Following the string again, this time five city blocks, to a hair salon.
Savanna Ray and Cindy Landry were killed on the same day at the same time.
Each kill was less brutal, like the killer was getting the hang of doing the deed.
Having to use less brute force.
Knowing where to cut.</p>
<p>&ldquo;I&rsquo;m back&rdquo; Rook said behind me.<br>
I hadn&rsquo;t heard him come back, and I damn near turned around and shot him out of shock.<br>
&ldquo;You doing alright, boss?&rdquo; he asked, presumably noticing all the colour had drained from my face.<br>
&ldquo;Yeah kid&rdquo; I mumbled, &ldquo;you just caught me deep in my own thoughts&rdquo;.<br>
Pausing to sigh deeply, &ldquo;I&rsquo;m as good as I can be knowing we are no closer to finding this guy&rdquo;.<br>
&ldquo;What links the victims together?&rdquo; I continued.
&ldquo;From talking to their acquaintances, they don&rsquo;t seem to have known each other.
Did they know our killer?
Was it random?
There doesn&rsquo;t seem to be anything in common with the sites&rdquo;.<br>
Pointing at the locations on the map, &ldquo;you&rsquo;ve got a top-notch lawyers office, a dirty alley, and a fancy salon. You couldn&rsquo;t get three more distinct places&rdquo;.<br>
&ldquo;Boss&rdquo; Rook said, nodding towards the door.</p>
<p>Porter stood there, he rapped his knuckles against the door frame pointlessly.<br>
&ldquo;You&rsquo;re not going to like this&rdquo; he said, eyes avoiding mine.<br>
&ldquo;God, no&rdquo; Rook gasped.<br>
Porter nodded slowly, &ldquo;they&rsquo;ve found another one. Three this time&rdquo;.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;rsquo;link'</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 7</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-7/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 7"/><published>2024-12-07T12:52:02+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-7</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-7/"><![CDATA[<p>I opened my eyes and looked down at my legs.
They were covered by a light blanket, but I could see my feet poking up under the end of it.
My eyes were foggy, eyelids heavy; I must have been asleep for a while.
Moving my head seemed impossible — as if different parts of my body were waking one after the other — so I settled for turning only my eyes.</p>
<p>The room was fairly empty, a small chair was in the corner.
No one was sat in it but if there was anything on it, I couldn&rsquo;t see, the blanket over my feet was just in the way.
There didn&rsquo;t seem to be anything to my left beyond a window with the blinds drawn, but to my right I could see a faint outline of a door.</p>
<p>I could hear a sound.
A slow beeping washed over me as my ears tuned to consciousness.</p>
<p>I tried to move my neck again, but as I did, a pressure built in the side of my face.
My face was pressing into something, my head was held in place.
Changing tactics, my focus came upon moving my hand up to my face, so it could free my neck.
The hand moved but was quickly halted; it was restrained somehow.</p>
<p>The beeping quickened slightly.
God, I wish someone would turn that off.</p>
<p>The other arm was restrained too, so were my legs.
Oh, God!</p>
<p>The beeping hastened it&rsquo;s incessant, annoying, chime.
This time it was followed by a louder alarm.</p>
<p>Voices grew louder to my right; someone must be on the other side of the door.
I tried shouting for help but all that would come out was a muffled cry; my mouth would not open and as hard as I tried I could not get my jaw to open.</p>
<p>I must have been kidnapped.
No other explanation jumped out to me that meant I would be restrained like this, all four limbs bound and jaw sealed shut.
That&rsquo;s why I felt groggy, I had been drugged while I was brought here.</p>
<p>The sound of a latch unlocking and a door squeaking made my heart race.
I couldn&rsquo;t turn my head to see who was there.</p>
<p>The beeping raced.</p>
<p>From my right, a tall figure came into my field of view, closely followed by a shorter second one.
The taller of the two was dressed in a white knee-length coat, below which I could see dark trousers.
It turned, and my eyes crossed over its blue buttoned shirt, a white badge pinned to it, to its featureless flat face.
It was about the correct size for a person&rsquo;s head, but instead of eyes, ears, nose, and mouth, there was smooth unending flesh.</p>
<p>I began to thrash against my bindings, and the beeping drove ever faster.</p>
<p>The second figure turned, and its face was as smooth as the first.<br>
&ldquo;He is not improving&rdquo; it spoke without lips, &ldquo;We must sedate him again.&rdquo;<br>
&ldquo;Agreed&rdquo; the first responded.<br>
As each of them &lsquo;spoke&rsquo; I could see their faces writhing; it looked as if hundreds of snakes were trying to break out from under the skin.<br>
&ldquo;Get away from me&rdquo; I tried to scream, but my mouth would still not move.
I pulled against bindings I could not see as hard as I could, but they did not relent.</p>
<p>The beeping was chiming so fast now that it was almost a single, excruciating tone.</p>
<p>The shorter one pulled something pointed from its jacket and started toward me, the skin on its hand squirming as well.
&ldquo;I&rsquo;m powerless&rdquo; I thought to myself as the needle came towards me, &ldquo;there is nothing I can do.&rdquo;<br>
I felt a sharp sting in my arm and began to feel drowsy; as the seconds passed, I could not pull my eyes away from the faces of my captors.
My eyes became heavy, the writhing faces became blurry, and the world around me went black.</p>
<p>I opened my eyes and looked down at my legs.
They were covered by a light blanket&hellip;</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;Sound&amp;rsquo;</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 5</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-5/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 5"/><published>2024-12-04T23:24:55+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-5</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-5/"><![CDATA[<p>Deep in the city sat a row of houses.
Unremarkable at first glance, mundane at second.
Half way down the row of terraced houses lived the McIntyres.
In the house lived Wilson and Joanna McIntyre, along with their son Rupert, and one rather old but kindly dog called Leah.</p>
<p>Wilson and Joanna loved their son more than anything in the world, maybe a little too much.
As we know, all children need to have their boundaries enforced and bad behaviour discouraged, but the McIntyres had let their son get away with far too much.</p>
<p>You see Rupert was spoiled rotten; nothing was ever good enough for him.
Rupert would cry, Rupert would wail, Rupert would always get his way.
But today was the day where Wilson and Joanna would wish they had been stricter, and Rupert would wish he was better behaved.</p>
<p>Today was Christmas Day, just after lunch.
But it was not like the years before.
Wilson and Joanna had fallen on bad times and money was not as abundant like times past.
The tree sat in the corner, the underside bare.
The turkey for lunch had been two sizes too small for the family of three.</p>
<p>&ldquo;It&rsquo;s time for presents&rdquo; Rupert practically screamed.
Pushing his chair back from the table and running over to the tree in such a rush that he almost trampled the family dog.<br>
&ldquo;Well Rupert, you know, your Mother and I have been having some money troubles lately&rdquo;, Wilson spoke through a big sigh.<br>
&ldquo;And what with Leah&rsquo;s vets bills&rdquo; Joanna continued, &ldquo;we have had to cut back a bit.&rdquo;<br>
&ldquo;So, we haven&rsquo;t been able to get you everything you wanted this year&rdquo; Wilson finished off, knowing what was coming.</p>
<p>They could see the kettle which was Rupert&rsquo;s temper beginning to boil over.
His red skin taking on a rosy hue and his anger pumped his emotions into overdrive.</p>
<p>&ldquo;But&rdquo;, Joanna tried to get ahead of the oncoming tantrum, &ldquo;you remember your Aunt Mary who passed a couple of years ago?&rdquo;.<br>
&ldquo;She left you something special&rdquo;.</p>
<p>Wilson disappeared into a side room.
Rustling ensued and he reappeared pushing something on castors, covered in a white sheet.
Aunt Mary had passed and left the family very little in the way of possessions save a single, well used, upright piano.</p>
<p>&ldquo;Oh this better be good&rdquo; Rupert declared causing both his parents to frown deeply.
He pulled the sheet back, revealing the piano.<br>
&ldquo;We thought you could learn to play, wouldn&rsquo;t that be nice&rdquo; Joanna said meekly, knowing that Rupert&rsquo;s facial expression meant only once thing.
&ldquo;A Piano?&rdquo; Rupert half screeched, &ldquo;A Piano?!&rdquo;</p>
<p>The volcano of his temper erupted.
The pyroclastic flow of his disappointment destroying all in its path as it rolled through the room.
Wilson and Joanna, frozen in dismay didn&rsquo;t step in to ebb the flow of his rage, hoping instead he would tire himself out; that is, until Rupert&rsquo;s anger was directed at the tree, pushing it over which in turn knocked a vase from the windowsill.
It smashed and it&rsquo;s noise woke Wilson from his inaction.</p>
<p>&ldquo;THAT&rsquo;S IT&rdquo; he bellowed, scaring himself as well as the others.<br>
&ldquo;This is unacceptable you ungrateful brat! Go to your room now&rdquo; he followed with little more control over his temper.<br>
Rupert, having never been admonished in this way, was stunned into compliance and ran upstairs to his room.
&ldquo;You will be lucky if Krampus doesn&rsquo;t come take you in your sleep for being so beastly!&rdquo; Wilson shouted up after him, &ldquo;He steals bad little boys away in a sack, never to be seen again.&rdquo;<br>
Joanna laid a hand on his arm and he shook his head.<br>
&ldquo;What have we done. We have failed him Joanna. We raised him wrong.&rdquo;</p>
<p>The tree was put back in its upright position but Christmas was ruined.
Day turned to night and the final light was turned off, sleep consuming all but Rupert, who still sat fuming in his room.</p>
<p>Unable to sleep he was left with nothing but the clicking and creaking of the old house until the melodic notes of a piano fluttered from downstairs.
Rupert ignored it, his parents were asleep so there was no one left to play the aged instrument.
He knew that the dog would bark if anyone dared break in.</p>
<p>A single note, short and sharp, refocused his attention.
Rupert was not filled with fear, the opposite in fact, he was filled with anger again; how dare someone play his piano.</p>
<p>If Rupert had cared about waking his parents, if he had entered their room to warn them that he heard something unexpected downstairs, he would have found they could not be woken.
However, Rupert did not care to rouse his parents, and headed straight down the stairs to see who dared to touch his things.</p>
<p>The soft tapping of the keys grew louder.
Storming into the lounge, to the source of the sounds, Rupert froze as soon as he saw what sat at the piano.
Before his mouth caught up he blurted out &ldquo;You can&rsquo;t play that, its mine!&rdquo;</p>
<p>&ldquo;I thought you didn&rsquo;t want it, Rupert? You wanted a bike? Make your mind up Rupert, what would you like?&rdquo;<br>
The towering creature sat hunched over the piano; half-human and half-goat.
With hooves for feet and ears which came to points below twisted horns, it was covered in fur and speaking in rhymes.</p>
<p>&ldquo;It&rsquo;s m&hellip;m&hellip;mine&rdquo; he stuttered.
His lips were suddenly very dry, he swallowed so loudly the creature stopped playing and turned to look at him.
It&rsquo;s blood red skin and black eyes were too much for Rupert.<br>
&ldquo;You act like this house is yours, and I hate to say, your parents have failed you, it&rsquo;s our time to play&rdquo;.</p>
<p>In the blink of an eye, the beast sat at the piano disappeared in a cloud of smoke and re-appeared behind Rupert holding a big red sack.<br>
&ldquo;You are a very spoilt child Rupert, you destroyed this tree, now I&rsquo;m afraid Rupert, you&rsquo;re coming with me.&rdquo;</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;Piano&amp;rsquo;</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 3</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-3/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 3"/><published>2024-12-03T21:07:37+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-3</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-3/"><![CDATA[<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Warning
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>I took the liberty of jumping from &lsquo;Point&rsquo; to &lsquo;Peak&rsquo; for this story.</p></div></div><p>&ldquo;Let&rsquo;s keep up the pace&rdquo; I heard Erwin shout above the wind.</p>
<p>&ldquo;<em>God, I hate Erwin</em>&rdquo; I thought.
It&rsquo;s gotten so bad that I hate his face.
His voice is like nails on a god-damn chalk board; it makes my blood boil.
Every action he takes makes me wish I had never agreed to come on this expedition.</p>
<p>We&rsquo;ve been travelling for less than a week so I don&rsquo;t know why I am so damn annoyed by his stupid, stupid face.
It wasn&rsquo;t long since basecamp in Branscomb Glacier but ever since Erwin&rsquo;s feet had hit Mount Vinson he had become a right arse.</p>
<p>&ldquo;<em>You need to get past it</em>&rdquo; I cajoled myself, &ldquo;<em>concentrate on the climb</em>&rdquo;.
The four of us were scaling the particularly steep slope from &lsquo;High Camp&rsquo; up to the Peak.
Travelling single file, each of our harnesses bound together in a long line.</p>
<p>The rope tied to my waist went taught and I turned to see what was up with Stefan.
&ldquo;Are you alright?&rdquo; I began to shout when I noticed the limp unconscious body of Stefan sliding over the icy surface and over the side of slope.
My blood turned to ice as the adrenaline pumped into my veins. <br>
&ldquo;<em>You need to brace</em>&rdquo; my brain blurted out but it knew it was already too late, my god.
Stefan&rsquo;s going to drag me over the edge.</p>
<p>The rope yanked at the harness around my waist and I was falling; shoes losing their purchase on the slick ice below me.</p>
<p>A shrill scream filled the air, it was me.
I heard Rosario and Erwin shouting after me.
It was too late, slapping my hands and feed into the ground did nothing, they couldn&rsquo;t find purchase on the ice. <br>
&ldquo;<em>Use your ice axes</em>&rdquo; some small corner of my brain was repeating but it couldn&rsquo;t be heard over the panic coursing through my body.</p>
<p>&ldquo;<em>I&rsquo;m going to die</em>&rdquo;. <br>
My feet slipped over the edge, followed closely by the rest of me.
I&rsquo;ll have to talk to Erwin when we get back to Seattle, I&rsquo;m not sure this relationship can carry on now I&rsquo;ve seen this side of him. <br>
&ldquo;<em>Is that seriously my final thought before I die?!</em>&rdquo;</p>
<p>My shoulder slammed into the side of the mountain, impacting the freezing cold rock; popping my shoulder.
Searing pain shot along my collar bone; if I lived then it was going to hurt like hell.</p>
<p>God the sky was beautiful, not a cloud in sight.
Somewhere below me Stefan was swinging from his rope and I was probably ruining this view for him; our final vista.
His weight and mine were surely too much for Rosario and she would come toppling over the edge soon.</p>
<p>The rope came to an abrupt halt, flinging me into the back of my harness.
Rosario had somehow braced herself, &ldquo;<em>she probably didn&rsquo;t panic like you did</em>&rdquo;.</p>
<p>It had only been seconds since my contempt for Erwin and his face, but I would trade anything to see it one last time.</p>
<p>&ldquo;Are you OK Noah?&rdquo; echoed from above, barely audible over the wind howling along the mountainside. <br>
&ldquo;I&rsquo;m alright, Stefan&rsquo;s unconscious&rdquo; came the response, my response.
Jesus, am I in control any more or am I just a passenger in my own body?</p>
<p>The wind whipped around me, the response unintelligible, my body and Stefans still swinging like some unloved string puppets. <br>
&ldquo;<em>Please save me</em>&rdquo; I begged to no one in particular, the tears freezing on my cheeks stung; maybe a God somewhere will take pity on me.</p>
<p>&ldquo;<em>Use your ice axes</em>&rdquo; the small corner of my brain was repeating and this time it got through the static.
This was no time for self-pity.
With a busted shoulder there was not much hope of pulling myself up and over the ledge with Stefan attached to me, but with Erwin and Rosario pulling too there was a chance.</p>
<p>&ldquo;<em>There&rsquo;s no second place. Get moving.</em>&rdquo;</p>
<p>The ice axe bit into the side of the mountain and I oriented myself with my feet facing downwards.
Stefan is hopefully still alive but his body is swinging which kept pulling me back away from the edge, but the combination of my pick and cleats kept me in place.</p>
<p>Climbing was hard, one arm dangling uselessly at my side, but there was no other choice.
Stefan wouldn&rsquo;t give up if the roles were reversed.
Besides, I very much wanted to slap his unconscious arse awake so he could witness me strangling him to death instead.</p>
<p>Minute after minute passed, the adrenaline dump could only go on so long and I began to tire. <br>
&ldquo;<em>The ledge is right there, only a few more feet</em>.&rdquo;</p>
<p>A gloved hand swooped over the edge and grabbed mine. <br>
&ldquo;I&rsquo;ve got you&rdquo; Erwin shouted down as he pulled me up and over the ledge.</p>
<p>Rolling onto my back I joined the effort to pull Stefan up, the last drops energy leaving my body all at once.</p>
<p>We pulled him up and over, secured the lines while Rosario checked on him. <br>
&ldquo;He&rsquo;s alive and breathing&rdquo;, thank god, &ldquo;he&rsquo;s coming to&rdquo;, she said.</p>
<p>I turned to Erwin. <br>
&ldquo;I&rsquo;ll never call your face stupid again&rdquo; I said through blurry eyes as he looked at me with tired and perplexed eyes.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;Point&amp;rsquo;</summary></entry><entry><title type="html">Twelve Days of Short Stories - Day 1</title><link href="https://thega.me.uk/fiction/12-days-of-short-stories-1/" rel="alternate" type="text/html" title="Twelve Days of Short Stories - Day 1"/><published>2024-12-01T12:52:02+00:00</published><updated>2025-12-24T23:35:55+00:00</updated><id>https://thega.me.uk/fiction/12-days-of-short-stories-1</id><content type="html" xml:base="https://thega.me.uk/fiction/12-days-of-short-stories-1/"><![CDATA[<p>Ben slouched as he waited; staring directly at the food slot.
Food always came at the same times, morning, midday, and evening, everyday; so he knew when to wait.
He knew they would punish him for slouching; it was one of their <em>rules</em>.
It was a simple set of rules that he increasingly loathed following; the list etched into the back wall of his cell:</p>
<ol>
<li>Stay clear of the bars</li>
<li>Do not destroy your room</li>
<li>Use the toilet provided</li>
<li>Eat and finish all meals everyday</li>
<li>Read all the books provided</li>
<li><em>No slouching</em></li>
</ol>
<p>The more he thought about that last one the more he wondered if there wasn&rsquo;t some personal vendetta that a guard had against him.
It was out of place, and normally those running the prison in which he stood, hated things that were out of place.</p>
<p>Feeding time, as Ben had come to call it, was the only interesting part of his day.
With only himself for company time was irrelevant but the books they provided him kept him sane.
The 2 hours he spent in the &lsquo;recreation center&rsquo; each day meant that he was in the best shape of his life; if this could be called living.</p>
<p>Ben knew he had been here for about month, but had not seen another living creature in that time.
When he was directed out into the &lsquo;recreation center&rsquo; everyday before lunch — he had learnt ignoring this direction meant he was docked meals until he cooperated — he would return to a cleaned cell.
Someone made his bed, removed old food trays, wiped every surface, leaving only his current book — where he kept a rough count of his days in the prison — untouched.</p>
<p>Someone was running this prison, but he did not know who.</p>
<p>When Ben had first woken up in his cell he had screamed from the top of his lungs.
Proclaiming innocence, demanding that whoever was running this prison to show themselves, but no one appeared.
The only answer that came was another meal arriving on schedule.
The explanation of why he was here never came.</p>
<p>Until it did.</p>
<p>Ben woke to an unexpected sound.
Looking over to the bars he saw what he could only describe as a monster standing on the other side.</p>
<p>It had the outline of a man, two arms, two legs, a head, and it was standing upright.
If it was a man, Ben surmised it must have been born in a swamp; a thick gel covered it&rsquo;s body
The gel constantly flowed downwards, like waves in a thick custard.
It gave the impression it would leave a trail of the gel everywhere it went, yet somehow the constantly oozing surface never fell to the floor; the ground around the being spotless.</p>
<p>&ldquo;<em>b-en</em>&rdquo; it said. <br>
The single syllable word being forced unnaturally from it&rsquo;s voice box was enough to snap Ben from his shock.
He threw himself against the back wall of the cell to put as much space between him and the creature as possible.</p>
<p>&ldquo;<em>b-en</em>&rdquo; it stuttered once more. <br>
&ldquo;Yes&rdquo; was all Ben managed to say. <br>
The creature paused, Ben wondered if maybe it was waiting for him to ask questions, until it continued. <br>
&ldquo;<em>we have made sure that you have had all of your requirem-ents in abund-ance</em>&rdquo; it enunciated slowly, each syllable coming out unpolished and graceless. <br>
&ldquo;<em>food.
water.
shelter.
physi-cal and mental stimul-ation.</em>&rdquo; <br>
&ldquo;Who are you? Why am I here?&rdquo; Ben blurted out, his brain finally catching up to the situation at hand. <br>
&ldquo;<em>you are in peak condi-tion</em>&rdquo; it stated. <br>
&ldquo;What?&rdquo; Ben queried, &ldquo;No I&rsquo;m not in peak condition. I&rsquo;m pretty far from OK for god&rsquo;s sake!&rdquo;.
He was unable to contain his emotions and he found himself shouting.
&ldquo;Tell me why I&rsquo;m here!&rdquo;</p>
<p>If the creature was annoyed by his aggression it did not show it.
&ldquo;<em>you are ready for the next phase</em>&rdquo; the creature responded. <br>
It turned and began to walk away; Ben could not tell if its legs moved or the slime was propelling it. <br>
&ldquo;Wait!&rdquo; Ben protested, &ldquo;What do you mean next phase? Why am I here? Where is here? Who are you?&rdquo; <br>
The creature turned its head slowly towards him.</p>
<p>Stumbling over each word it responded. <br>
&ldquo;<em>you are ready for sale.</em>&rdquo;</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A short story based on the prompt &amp;lsquo;Abundant&amp;rsquo;</summary></entry><entry><title type="html">Twelve Days of Short Stories</title><link href="https://thega.me.uk/12-days-of-short-stories" rel="alternate" type="text/html" title="Twelve Days of Short Stories"/><published>2024-11-25T10:33:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/12-days-of-short-stories</id><content type="html" xml:base="https://thega.me.uk/12-days-of-short-stories"><![CDATA[<p>For some reason at the start of November I decided &ldquo;Wouldn&rsquo;t it be cool if I tried writing a short story&rdquo;.</p>
<p>Well I have one in progress.</p>
<p>However, I read somewhere recently that when getting into writing you have to <code>embrace the suck</code>; the idea that you are not good at something when you start.
So, what better way to try something out than to challenge yourself to do it multiple times in a short space of time; like an accelerated driving course.</p>
<p>Therefore, I am going to try the &lsquo;Twelve Days of Short Stories&rsquo;.
Not strictly related to the <a href="https://en.wikipedia.org/wiki/Twelve_Days_of_Christmas" >12 days of Christmas</a>, but kinda.</p>
<p>I will target creating a story every two days, the first on the 1<sup>st</sup>, second on the 3<sup>rd</sup>, and so on up until the 23<sup>rd</sup> of December.</p>
<p>Two days is not long, so I am hoping it will solve my chronic <em>OverThinkingAboutEverythingIWrite</em>-itus.
I will not beat myself up if I miss one, but obviously the goal is to do all of them.</p>
<p>For each day I have generated two words using <a href="https://randomwordgenerator.com/" >a random generator</a>; the &lsquo;backup&rsquo; word hopefully giving me an out if my mind is blank on the first.
I also had the crazy idea to target 1<sup>st</sup>, 2<sup>nd</sup>, or 3<sup>rd</sup> person for each story.</p>
<p>This leaves me with the following prompts:</p>
<table>
  <thead>
      <tr>
          <th>Day</th>
          <th>Primary Word</th>
          <th>Backup Word</th>
          <th>Point of View</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-1/" >1</a></td>
          <td><code>abundant</code></td>
          <td><del><code>benefit</code></del></td>
          <td>3<sup>rd</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-3/" >3</a></td>
          <td><code>point</code></td>
          <td><del><code>ideal</code></del></td>
          <td>1<sup>st</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-5/" >5</a></td>
          <td><code>piano</code></td>
          <td><del><code>snow</code></del></td>
          <td>3<sup>rd</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-7/" >7</a></td>
          <td><del><code>north</code></del></td>
          <td><code>sound</code></td>
          <td>1<sup>st</sup></td>
      </tr>
      <tr>
          <td>9</td>
          <td><code>dare</code></td>
          <td><code>style</code></td>
          <td>3<sup>rd</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-11/" >11</a></td>
          <td><code>link</code></td>
          <td><del><code>representative</code></del></td>
          <td>1<sup>st</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-13/" >13</a></td>
          <td><code>devote</code></td>
          <td><del><code>virus</code></del></td>
          <td>1<sup>st</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-15/" >15</a></td>
          <td><code>grave</code></td>
          <td><del><code>brink</code></del></td>
          <td>1<sup>st</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-17/" >17</a></td>
          <td><code>jam</code></td>
          <td><del><code>rib</code></del></td>
          <td>1<sup>st</sup></td>
      </tr>
      <tr>
          <td>19</td>
          <td><code>injury</code></td>
          <td><code>ghost</code></td>
          <td>2<sup>nd</sup></td>
      </tr>
      <tr>
          <td>21</td>
          <td><code>flat</code></td>
          <td><code>radical</code></td>
          <td>1<sup>st</sup></td>
      </tr>
      <tr>
          <td><a href="https://thega.me.uk/fiction/12-days-of-short-stories-23/" >23</a></td>
          <td><code>glimpse</code></td>
          <td><del><code>reasonable</code></del></td>
          <td>3<sup>rd</sup></td>
      </tr>
  </tbody>
</table>
<p>Let&rsquo;s see how I do!</p>
<p>Click on each of the days above to see the story for that day, or <a href="https://thega.me.uk/fiction/" >Click here</a> to see all of my writing.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="fiction"/><summary type="html">I decided to challenge myself to write 12 short stories on 12 random prompts.</summary></entry><entry><title type="html">Jekyll pre-commit Hooks</title><link href="https://thega.me.uk/code/jeykll-pre-commit-hooks" rel="alternate" type="text/html" title="Jekyll pre-commit Hooks"/><published>2024-11-23T18:11:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/code/jeykll-pre-commit-hooks</id><content type="html" xml:base="https://thega.me.uk/code/jeykll-pre-commit-hooks"><![CDATA[<p>You can see my full pre-commit setup <a href="https://github.com/pwhittlesea/thega.me.uk/blob/f3603c1faf1b09e4d7300a0cce1f93d037c79a7e/.pre-commit-config.yaml" >here</a>.
There are some extras that are not mentioned on this page, but these are mostly linting tools for the various scripts I am running.</p>

<h2 class="relative group">Remove Image Metadata
    <div id="remove-image-metadata" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#remove-image-metadata" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>A key part of a lot of my posts (especially my travel blogs) are pictures.
When you take a picture with a modern device (that knows where it is on the planet) it will embed the location of the picture, as well as other interesting/useful metadata, into the file.
This metadata is called <a href="https://en.wikipedia.org/wiki/Exif" >Exif</a>.</p>
<p>When posting pictures online it&rsquo;s normally quite prudent to strip all the Exif information from your photos; so people can&rsquo;t see where you live.</p>
<p>I do however want to keep some Exif information; the ICC colour profile of the picture is something I want to keep so that it looks correct.
I also want to add in a Copyright; this won&rsquo;t stop AI&rsquo;s training on my images, but if I see someone profiting off one then I will hopefully have some legal recourse.</p>
<p>For this I need to run <code>exiftool</code> (the script can be found <a href="https://github.com/pwhittlesea/thega.me.uk/blob/f3603c1faf1b09e4d7300a0cce1f93d037c79a7e/.hooks/correct_exif.sh" >here</a>) which I wrap in a &rsquo;local&rsquo; pre-commit hook:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">repos</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">repo</span>: <span style="color:#ae81ff">local</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">hooks</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">id</span>: <span style="color:#ae81ff">exif-correct</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Exif Correct</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">description</span>: <span style="color:#ae81ff">Removes all Exif data from images and sets the correct Copyright</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">entry</span>: <span style="color:#ae81ff">.hooks/correct_exif.sh</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">language</span>: <span style="color:#ae81ff">script</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">types</span>: [<span style="color:#ae81ff">image]</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">exclude_types</span>: [<span style="color:#ae81ff">svg,gif]</span></span></span></code></pre></div></div>
<p>I excluded SVGs because <code>exiftool</code> does not support SVGs.
I also exclude Gifs as I am not normally the author of them (they are normally memes), so adding a copyright would be a lie.</p>
<p>If you wanted to just strip everything, you could use the <a href="https://github.com/stefmolin/exif-stripper" >strip-exif</a> pre-commit hook by Stefanie Molin.</p>

<h2 class="relative group">Update Last Modified Time
    <div id="update-last-modified-time" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#update-last-modified-time" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>A neat feature of Jekyll is that you can have last updated times on the posts (you can see one on the bottom of this page).
This is expressed in the front matter of each blog:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#e6db74">&#34;My amazing blog!&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">date</span>: <span style="color:#e6db74">2024-11-12 00:00:00 +0100</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">last_modified_at</span>: <span style="color:#e6db74">2025-04-27T11:49:52</span><span style="color:#ae81ff">+00</span>:<span style="color:#ae81ff">00</span>
</span></span><span style="display:flex;"><span>---</span></span></code></pre></div></div>
<p>I will, however, never remember to update these before I commit and push, so I have a simple <a href="https://github.com/pwhittlesea/thega.me.uk/blob/f3603c1faf1b09e4d7300a0cce1f93d037c79a7e/.hooks/update_last_modified.sh" >script</a> which updates them for me with the current time:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">repos</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">repo</span>: <span style="color:#ae81ff">local</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">hooks</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">id</span>: <span style="color:#ae81ff">update-last-modified</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Update Last Modified</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">description</span>: <span style="color:#ae81ff">Replace `last_modified_at` timestamp with current time</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">entry</span>: <span style="color:#ae81ff">.hooks/update_last_modified.sh</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">language</span>: <span style="color:#ae81ff">script</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">always_run</span>: <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">require_serial</span>: <span style="color:#66d9ef">true</span></span></span></code></pre></div></div>
<p>Credit here entirely goes to Michael Rose who wrote a <a href="https://mademistakes.com/notes/adding-last-modified-timestamps-with-git/" >post</a> on this a while ago.</p>

<h2 class="relative group">Generate Maps
    <div id="generate-maps" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generate-maps" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I wrote a <a href="https://thega.me.uk/2024/09/adding-maps-to-my-travel-posts/" >whole blog</a> on how I added maps to my blogs, and a key part of that is the pre-commit hook.
Head over to that blog to read more.</p>

<h2 class="relative group">Validating Links
    <div id="validating-links" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#validating-links" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Almost all of my blogs link to other sites, other blogs by me, or images.
When I am writing I double-check that my links actually go somewhere and that I don&rsquo;t have broken images.</p>
<p>However, after a while these links may break.
The brilliant <a href="https://github.com/tcort/markdown-link-check" >markdown-link-check</a> by Thomas Cort helps check these links are still working.</p>

<h2 class="relative group">General Tidy
    <div id="general-tidy" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#general-tidy" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Finally, there are quite a few housekeeping checks that I run to ensure that my Markdown file are consistent and well-formed:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">repos</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Generic pre-commit hooks for all files</span>
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">repo</span>: <span style="color:#ae81ff">https://github.com/pre-commit/pre-commit-hooks</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rev</span>: <span style="color:#ae81ff">v5.0.0</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">hooks</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">id</span>: <span style="color:#ae81ff">end-of-file-fixer</span>
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">id</span>: <span style="color:#ae81ff">mixed-line-ending</span>
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">id</span>: <span style="color:#ae81ff">trailing-whitespace</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">args</span>: [<span style="color:#e6db74">&#34;--markdown-linebreak-ext=markdown,md&#34;</span>]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Check Markdown documents with Markdownlint</span>
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">repo</span>: <span style="color:#ae81ff">https://github.com/igorshubovych/markdownlint-cli</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rev</span>: <span style="color:#ae81ff">v0.42.0</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">hooks</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">id</span>: <span style="color:#ae81ff">markdownlint</span></span></span></code></pre></div></div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="git"/><category term="jekyll"/><summary type="html">I use multiple pre-commit hooks to make sure my posts are really ready. This is my setup.</summary></entry><entry><title type="html">The Boundary</title><link href="https://thega.me.uk/stories/the-boundary" rel="alternate" type="text/html" title="The Boundary"/><published>2024-11-20T21:55:00+00:00</published><updated>2025-10-10T10:50:49+01:00</updated><id>https://thega.me.uk/stories/the-boundary</id><content type="html" xml:base="https://thega.me.uk/stories/the-boundary"><![CDATA[
<h2 class="relative group">Prelude
    <div id="prelude" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#prelude" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Humanity noticed the anomaly late in the 21<sup>st</sup> century.
The first reports were entirely ignored; the evidence deviating so far from accepted scientific norm that their validity could not even be entertained as anything but sensor malfunctions.</p>
<p>Equipment was checked again and again, furious scientists operating the now obsolete radio telescope were unable to explain the results that lay before them.
Every meter of the gigantic antenna was checked for impact damage and every component of the radio receiver was swapped with a spare.
Finally, when the telescope was given a clean bill of health, all faults ruled out, the scientists wondered if there was an atmospheric factor at play.
Space-based sensor platforms, with their unobstructed view of the universe had become a commodity in the last century, and ground based telescopes had all but become redundant.</p>
<p>Months had passed since their initial discovery, keeping their finding to themselves for fear of looking foolish among the scientific community.
The anomaly was such an affront to accepted fact that only a fool could think it real.</p>
<p>If they were wrong, it meant the end of <em>Site A</em>; the operators unlikely to find further work.
Despite this, the scientists privately sought out an orbital platform that could verify their findings.</p>
<p>&ldquo;Pluto&rsquo;s smudge&rdquo; as it was later coined by media outlets was indeed there.
Just beyond the aphelion of Pluto a smear sat suspended in space.
Those who believed in a higher power would be forgiven to think that when the night sky was painted their deity was momentarily distracted.
A pen drawing the stars stumbling across the page.</p>
<p>Once the orbital observatory confirmed it was detecting the anomaly the results were published publicly by <em>Site A</em>.
Scientific institutes slowly picked up the news across the globe alongside the multitude of platforms in orbit.
Each generating their own unique insults for the obviously idiotic operators of <em>Site A</em> before eventually corroborating the findings.</p>
<p>A new space race began amongst the nations of Earth; racing to be the first to reach the anomaly and discover its true nature.</p>

<h2 class="relative group">Chapter 1
    <div id="chapter-1" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#chapter-1" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>They remembered being shaken.
Or were they currently being shaken?
They filed the input away, comparing it against all the others that slowly flowed into their head; trying to place them in some sort of order.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Warning
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>This is my first attempt at writing fiction.
There may be more to come, but there may not.</p>
<p>We shall see.</p></div></div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">An anomaly is discovered behind Pluto, and mankind sends its best to investigate</summary></entry><entry><title type="html">Multiple custom domains with GitHub Pages</title><link href="https://thega.me.uk/code/multiple-domains-with-github-pages" rel="alternate" type="text/html" title="Multiple custom domains with GitHub Pages"/><published>2024-11-17T18:59:00+01:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/code/multiple-domains-with-github-pages</id><content type="html" xml:base="https://thega.me.uk/code/multiple-domains-with-github-pages"><![CDATA[
<h2 class="relative group">Background
    <div id="background" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#background" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I own a couple of domains that are not the one you are on right now. At the time of writing I own four:</p>
<ol>
<li><code>thega.me.uk</code></li>
<li><code>pwhittlesea.com</code></li>
<li><code>pwhittlesea.co.uk</code></li>
<li><code>wedfest-2017.uk</code></li>
</ol>
<p>I&rsquo;ve spent a while working on <code>thega.me.uk</code> as it&rsquo;s my main domain.
You could argue I use this domain name like a brand as it appears in my Email and other social media, such as my Bluesky handle.</p>
<p>I have not, however, spent any time working on the other three; leaving them to languish.</p>
<p><code>pwhittlesea.com</code> and <code>pwhittlesea.co.uk</code> redirected to an <a href="https://about.me" >About Me</a> page, but <em>only</em> on HTTP.
No HTTPS.
In the current day and age where TLS certificates are free, and browser settings such as Firefox&rsquo;s <a href="https://support.mozilla.org/en-US/kb/https-only-prefs" >HTTPS-Only Mode</a>, this is not really acceptable anymore.</p>
<p>This &lsquo;About Me&rsquo; page was super out of date as well — pre-dating my <a href="https://thega.me.uk/2024/02/new-beginnings/" >original GitHub page</a> for this domain — so I had to update it eventually.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="My About Me"
    width="654"
    height="794"
    src="/2024/11/multiple-custom-domains-with-github-pages/about_me_pwhittlesea.png"
    srcset="/2024/11/multiple-custom-domains-with-github-pages/about_me_pwhittlesea.png 800w, /2024/11/multiple-custom-domains-with-github-pages/about_me_pwhittlesea.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/11/multiple-custom-domains-with-github-pages/about_me_pwhittlesea.png"></figure>
<p>The final domain, <code>wedfest-2017.uk</code>, was a site I built for my wedding back in 2017 (obviously).
It contained details of the day, and had a form allowing guests to RSVP.
It was a simple <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html" >S3 Hosted Website</a> which was mostly built with Bootstrap and jQuery.</p>
<p>On brand, I never went back and updated it after the wedding day.</p>
<p>Unbeknownst to me, at some point in the last 7 years, the DNS nameservers stopped resolving.
So it had been broken for a long time.</p>

<h2 class="relative group">Requirements
    <div id="requirements" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#requirements" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>After a bit of thought, I decided to target the following requirements:</p>
<ol>
<li>I wanted to have my <code>pwhittlesea</code> domains redirect to <code>thega.me.uk</code>.</li>
<li>Have a single &lsquo;Project Closed&rsquo; page on the <code>wedfest-2017.uk</code> domain.</li>
<li>Get TLS working for all 3 forgotten domains.</li>
<li>Most importantly, I didn&rsquo;t want to run any infrastructure.</li>
<li>Bonus: I didn&rsquo;t want to pay any ongoing costs.</li>
</ol>
<p>This pointed me squarely at GitHub Pages.</p>
<p>Unfortunately you cannot have more than one custom domain on a repository, otherwise I would have added my <code>pwhittlesea</code> domains to this blog and had them all auto-redirect to <code>thega.me.uk</code>.</p>
<p>GitHub does allow you to have unlimited &lsquo;Project Sites&rsquo; which normally show up as a sub-path of your main &lsquo;User Site&rsquo; (e.g. <code>https://username.github.io/my-project-repo</code>).
You can however add a custom domain to them.</p>

<h2 class="relative group">Implementation
    <div id="implementation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#implementation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So today I have replaced <code>pwhittlesea.com</code> and <code>pwhittlesea.co.uk</code> with small GitHub Pages sites which do nothing except redirect to this site.
For each of my redirect domains I performed the following steps:</p>
<ol>
<li>
<p>Create a new blank repository</p>
</li>
<li>
<p>Add a new file called <code>index.html</code> with the following content:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE html&gt;</span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">html</span> <span style="color:#a6e22e">lang</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;en&#34;</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#f92672">head</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">charset</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;utf-8&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">title</span>&gt;Redirecting to https://thega.me.uk/&lt;/<span style="color:#f92672">title</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">http-equiv</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;refresh&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0; URL=https://thega.me.uk/&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">link</span> <span style="color:#a6e22e">rel</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;canonical&#34;</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://thega.me.uk/&#34;</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;/<span style="color:#f92672">head</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#f92672">body</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">p</span>&gt;You will be redirected to thega.me.uk soon!&lt;/<span style="color:#f92672">p</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;/<span style="color:#f92672">body</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">html</span>&gt;</span></span></code></pre></div></div>
</li>
<li>
<p>Configure the DNS settings of the domain to have the correct <code>A</code>, <code>AAAA</code>, and <code>CNAME</code> records (<a href="https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#dns-records-for-your-custom-domain" >documentation here</a>).
For me these looked like:</p>
<table>
  <thead>
      <tr>
          <th>DNS record type</th>
          <th>DNS record name</th>
          <th>DNS record values</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>A</td>
          <td>@</td>
          <td>185.199.108.153</td>
      </tr>
      <tr>
          <td>A</td>
          <td>@</td>
          <td>185.199.109.153</td>
      </tr>
      <tr>
          <td>A</td>
          <td>@</td>
          <td>185.199.110.153</td>
      </tr>
      <tr>
          <td>A</td>
          <td>@</td>
          <td>185.199.111.153</td>
      </tr>
      <tr>
          <td>AAAA</td>
          <td>@</td>
          <td>2606:50c0:8000::153</td>
      </tr>
      <tr>
          <td>AAAA</td>
          <td>@</td>
          <td>2606:50c0:8001::153</td>
      </tr>
      <tr>
          <td>AAAA</td>
          <td>@</td>
          <td>2606:50c0:8002::153</td>
      </tr>
      <tr>
          <td>AAAA</td>
          <td>@</td>
          <td>2606:50c0:8003::153</td>
      </tr>
      <tr>
          <td>CNAME</td>
          <td>www</td>
          <td>pwhittlesea.github.io</td>
      </tr>
  </tbody>
</table>
</li>
<li>
<p>Wait for the DNS to propagate.</p>
</li>
<li>
<p>In the settings tab of the repo, under <code>Pages</code>, select the main branch source (which enables pages) and input your custom domain.</p>
</li>
<li>
<p>Save and refresh the page.
It&rsquo;s a bit temperamental, but GitHub should show you a green <code>DNS Check Successful</code> message.</p>
</li>
<li>
<p>(Optional) GitHub will also show you a box for the provisioning of the TLS certificate.
Once complete, refresh and enable <code>Enforce HTTPS</code></p>
</li>
</ol>
<p>Then, when someone browses to the custom domain they are then redirected to the destination URL by the HTML shown above (<a href="https://en.wikipedia.org/wiki/Meta_refresh" >Meta Refresh</a>).</p>
<p>For my <code>wedfest-2017.uk</code> domain I have followed the same process, but I have modified the HTML to show a &lsquo;Project Closed&rsquo; page.</p>

<h2 class="relative group">Downsides
    <div id="downsides" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#downsides" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So GitHub pages are free, but it does have two downsides that I have noticed.</p>
<p>The first issue is with the sub-paths.
I mentioned earlier that &lsquo;Project Sites&rsquo; show up as a sub-path of your main &lsquo;User Site&rsquo; where the path is the name of the repo you created.
Even with a custom domain, these sub-paths are still present.</p>
<p>Right now you can go to <a href="https://thega.me.uk/pwhittlesea.com" ><code>https://thega.me.uk/pwhittlesea.com</code></a>, <a href="https://thega.me.uk/pwhittlesea.co.uk" ><code>https://thega.me.uk/pwhittlesea.co.uk</code></a>, and <a href="https://thega.me.uk/wedfest-2017.uk" ><code>https://thega.me.uk/wedfest-2017.uk</code></a>, which will redirect you to the custom domains (which might then redirect you back here).</p>
<p>This is not an issue for me because I have chosen to name my repositories after the domains themselves.
I think if you picked a more generic name it might conflict with some routing on your main site.</p>
<p>The second downside is speculative, but it&rsquo;s possible that users using the &ldquo;Back&rdquo; button on the final page may get sent back to the redirecting page, whereupon the redirect will occur again.
This may cause a reader to get &ldquo;stuck&rdquo;.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="github"/><category term="html"/><summary type="html">I moved all of my domains to GitHub pages</summary></entry><entry><title type="html">I visited New Zealand - Part 5</title><link href="https://thega.me.uk/holidays/new-zealand-5" rel="alternate" type="text/html" title="I visited New Zealand - Part 5"/><published>2024-10-21T22:43:00+01:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-5</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-5"><![CDATA[<p>In part 4, we arrived in Wellington.
It was the end of the day, so we only managed to get out for a spot of dinner.
But, we are set to stay in Wellington for 4 nights, so there&rsquo;s lots left to see.</p>
<figure>
        <img class="my-0 rounded-md nozoom" src="new-zealand-5.svg" alt="Our destinations around Wellington, NZ" />
        <figcaption>Our destinations around Wellington, NZ (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-41.2918,174.7875&amp;destination=-41.2918,174.7875&amp;waypoints=-41.3012,174.7884%7c-41.3062,174.8244%7c-41.3158,174.8163%7c-41.2909,174.7820" >Open in Google Maps</a>)</figcaption>
    </figure>

<h2 class="relative group">Saturday 8<sup>th</sup>: Getting Wētā Again
    <div id="saturday-8th-getting-wētā-again" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#saturday-8th-getting-w%c4%93t%c4%81-again" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Before we arrived the day before, it was predicted that the weather on Monday was going to be horrible, so our tour guide spent a bit of time re-arranging our agenda.
Instead of going to the Wellington filming locations on Monday, we were going to squeeze them into Saturday.</p>
<p>It was going to be a busy day!</p>

<h3 class="relative group">Off Road
    <div id="off-road" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#off-road" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Our time with <em>Shadowfax</em> — our coach — was limited, and before long we would be waving goodbye to him.
But that time had not yet come, and we all climbed back aboard for a full day of looking at things (maybe pointing at things too).</p>
<p>Wellington is a pretty large city which is heavily populated, and I don&rsquo;t remember any high-rise blocks of flats in 
<abbr title="Lord of the Rings">LoTR</abbr>
, so I was wondering where on earth the film locations would be.</p>
<p>Mount Victoria sits in the middle of the city, and that was our destination.
<em>Shadowfax</em> expertly navigated the winding roads leading up the mountain.
About halfway up, we stopped to head into the forest.</p>
<p>Very close to one another were two different filming locations from the first film.
The first being where the hobbits hide under some tree roots as a ring wraith searches for them.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1258-full_hu_a84fcd4e2f5e49e7.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1258-full_hu_48a959074c3395f9.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1258-full_hu_628674d575745faf.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1258-full_hu_1601e650ab9b483b.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1258-full_hu_48a959074c3395f9.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1258-full_hu_1601e650ab9b483b.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Fellowship of the Ring<br>
<strong>Bottom</strong>: Me and my other half, reproducing the Nazgul&rsquo;s search</figcaption>
  
</figure>

<p>The tree they are hiding under was a prop created by the team at Wētā and was removed after filming.
Out picture isn&rsquo;t quite the same angle, so you might have to trust me on that one &#x1f604;.</p>
<p>Then, literally down the hill about 20 meters, was the tree Sam and Frodo stop to take a break in.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1275-full_hu_f247a2a62860c631.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1275-full_hu_80e56430e820af4.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1275-full_hu_db09935cdf89fc6d.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1275-full_hu_66d3ccd4fccdc6a1.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1275-full_hu_80e56430e820af4.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1275-full_hu_66d3ccd4fccdc6a1.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Fellowship of the Ring<br>
<strong>Bottom</strong>: Me and my other half, in the same tree</figcaption>
  
</figure>

<p>We had an immense amount of fun with the tour group, recreating each of the scenes.
At one point I got to play the part of the Nazgul&rsquo;s horse, horse mask and all.</p>
<p>When we were done we carried on up to the viewing platform at the top of Mount Victoria, giving us 360 degree views of Wellington.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1304_hu_2a636047da023549.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1304_hu_8b0cf40b37554eef.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1304_hu_f7ca58d4a318a0d4.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1304_hu_bf40585fc2ac60f3.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1304_hu_8b0cf40b37554eef.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1304_hu_bf40585fc2ac60f3.jpeg"
          
          title="A view over Wellington from Mount Victoria"
        />
    </span>
  
    <figcaption class="text-center">A view over Wellington</figcaption>
  
</figure>

<p>★★★★☆ 4/5 - Mount Victoria was beautiful and a must-see!
I would recommend a visit if you like walking (and even if you don&rsquo;t).</p>

<h3 class="relative group">Wētā Cave
    <div id="wētā-cave" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#w%c4%93t%c4%81-cave" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>After our early morning visit to the mountain, we headed down to the Wellington <a href="https://tours.wetaworkshop.com/wetacave/" >Wētā Cave</a> — Wētā&rsquo;s retail store — for a bit of retail therapy.</p>
<p>If you read my <a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-2/#weta-workshop-unleashed" >second blog on New Zealand</a>, then you will remember we went to a Wētā cave in Auckland.</p>
<p>The Wellington &lsquo;cave&rsquo; (store) was an experience of its own.
Existing somewhere between a museum and a store, we were able to browse costumes from the LoTR films <em>and</em> buy miniatures/collectibles (like <a href="https://www.wetanz.com/nz/mini-epics-cave-troll" >this adorable cave troll</a>).</p>
<p>We had managed to arrive at the cave on its 16<sup>th</sup> birthday.
Every surface was adorned with bunting while all the statues sported party hats.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1316_hu_8f589cd14c4cfae3.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1316_hu_677d5459479fb7d7.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1316_hu_fdeb307153b6cfc5.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1316_hu_81b492190902ec19.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1316_hu_677d5459479fb7d7.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1316_hu_81b492190902ec19.jpeg"
          
          title="Even the Trolls were celebrating"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1330_hu_c73fe278aae71fd3.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1330_hu_32c2ede753ba558c.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1330_hu_d243abb3bc0d07d9.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1330_hu_c07c94debb736843.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1330_hu_32c2ede753ba558c.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1330_hu_c07c94debb736843.jpeg"
          
          title="Lurtz looks positively festive"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1331_hu_9e7bf776c132a17d.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1331_hu_9db58761006bba74.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1331_hu_8cab2a97d24f5dc3.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1331_hu_41c621b6b262e128.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1331_hu_9db58761006bba74.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1331_hu_41c621b6b262e128.jpeg"
          
          title="If there was a head, it had a birthday hat"
        />
    </span>
  
    <figcaption class="text-center">We got to Wētā on their birthday</figcaption>
  
</figure>

<p>My other half was the driver for us coming to New Zealand, to do a LoTR tour, as the films were transformational for them when they were younger.
They also love &lsquo;The Hobbit&rsquo; book and owned 3 copies from various prints.</p>
<p>Unfortunately for our bank account, there was a limited edition, illustrated copy of &lsquo;The Hobbit&rsquo; in the Wētā cave.
I was reliably informed that this edition had to come home with us.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="stop-its-dead"
    width="487"
    height="624"
    src="/2024/10/i-visited-new-zealand-part-5/stop_its_dead.png"
    srcset="/2024/10/i-visited-new-zealand-part-5/stop_its_dead.png 800w, /2024/10/i-visited-new-zealand-part-5/stop_its_dead.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-5/stop_its_dead.png"></figure>
<p>★★★★☆ 4/5 - If you want LoTR goodies, this shop is the place for you (but maybe not your bank manager).
It is basically the same as the one in Auckland, however, so if you have been there don&rsquo;t go out of your way to this one (unless you are doing a tour).</p>

<h3 class="relative group">The Roxy Cinema
    <div id="the-roxy-cinema" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-roxy-cinema" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>As we were trying to squeeze our Monday itinerary into today, we headed off for lunch at <a href="https://www.roxycinema.co.nz/" >The Roxy Cinema</a>.</p>
<p>This beautiful Art Deco cinema was restored about a decade ago, with much of the interior designed and built by Wētā.</p>
<p>Movie posters adorned the walls, whilst a giant mural of a robot invasion sprawled across the ceiling.
Somehow tastefully in-line with the Arc Deco vibe.</p>
<p>The upper floor of the lobby contained a &lsquo;museum&rsquo; of sorts; random movie related figures, props and memorabilia dotted everywhere.</p>
<p>The coolest thing I found was a Lego reproduction of the Cinema that was squirrelled away in the corner.</p>
<p>I also remember a life-size Astro boy, but no-one else does, so I might have been hallucinating.</p>
<p>It was a very fun space, and we got about 20 minutes to wander around after we had eaten a &rsquo;nibbly-bits&rsquo; style lunch; several plates of single-bite food like scotch eggs and roast potatoes.</p>
<p>★★★☆☆ 3/5<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> - Interesting cinema and the food was OK.</p>

<h3 class="relative group">Wētā Workshop
    <div id="weta-workshop" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#weta-workshop" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Back to Wētā we went.
This time we were going to Wētā Workshop, which was about 2 doors down from the Wētā cave we were at not hours before.</p>
<p>The &lsquo;Unleashed&rsquo; tour in Auckland showcased the process behind making a generic fantasy film; from concept, all the way up to making the &lsquo;Bigatures&rsquo; you see on screen in films like LoTR.</p>
<p>The &lsquo;Workshop&rsquo; tour, however, took us through a Wētā costume museum; filled with armour, guns, and prosthetics from many of the films they had worked on.
We took about an hour wandering slowly around, guided one of the Wētā team.
We touched fake noses, held replica laser rifles, and marvelled at the attention to detail on chain mail armour.</p>
<p>When we were done (and we had run out of questions) we had a hands-on workshop where we designed and dyed a leather keyring.</p>
<p>Proud of the basic leather work we had done, we headed back to the hotel.</p>
<p>★★★★★ 5/5 - Our Wētā tour guide had a genuine joy that was infectious and turned a run-of-the-mill museum tour into a unique experience I thoroughly enjoyed.</p>

<h3 class="relative group">Crab Shack
    <div id="crab-shack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#crab-shack" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The only thing left for us to do was to find somewhere to eat.</p>
<p>We had heard that Wellington was famous for fantastic seafood.</p>
<p>Teaming up with two of our tour-besties — the same pair we <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-3/#atticus-finch" >went to dinner</a> with before — we headed down to <a href="https://www.crabshack.co.nz/book/the-crab-shack-wellington/" >The Crab Shack</a>.</p>
<p>It was a beautiful night<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, the company was great, and the food delicious.
My other half had a whole crab, which I was very jealous of.</p>
<p>★★★★☆ 4/5 - Very quick service and good food.</p>

<h2 class="relative group">Sunday 9<sup>th</sup>: Talks in the Hotel
    <div id="sunday-9th-talks-in-the-hotel" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sunday-9th-talks-in-the-hotel" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Sunday is the day for rest.</p>
<p>Or in our case, the day for rain.</p>
<p>It was <em>hammering</em> it down.
Outside the hotel it was hard to tell where the bay ended and the streets started.
I was therefore glad that we didn&rsquo;t need to leave the hotel.</p>

<h3 class="relative group">Private Talks
    <div id="private-talks" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#private-talks" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The plan for the day was to attend two talks organised by our tour guides; Red Carpet Tours.</p>
<p>The first talk was by <a href="https://danielreeve.co.nz/" >Daniel Reeve</a>.
Daniel was responsible for almost all the calligraphy and maps featured in the LoTR films; having to invent new writing styles for all the cultures of Middle Earth.</p>
<p>Daniel was a software engineer who decided to mail Peter Jackson some elvish calligraphy when he heard they were making the LoTR films, completely changing his career path (and life) in the process.</p>
<p>It was a very engaging talk and I had never been so interested in calligraphy before.
If I was to take one thing away, it&rsquo;s that sometimes you have to take chances; it could change your life for the better.</p>
<p>The second talk was by <a href="https://www.instagram.com/christophermenges/" >Christopher Menges</a>, a senior swordsmith at Wētā.
Chris brought a lot of movie-used props with him for the day and talked about the art of making swords for films.</p>
<p>I&rsquo;m pretty surprised he didn&rsquo;t need an armed escort; some of those swords had to be worth a fair amount.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="two-glamdrings"
    width="1536"
    height="2048"
    src="/2024/10/i-visited-new-zealand-part-5/new_zealand_0909_hu_63bd51864105703d.jpeg"
    srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_0909_hu_63bd51864105703d.jpeg 800w, /2024/10/i-visited-new-zealand-part-5/new_zealand_0909_hu_d8b843b1bb4a5dfa.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_0909.jpeg"><figcaption>The hero and the prop Glamdring</figcaption></figure>
<p>We got to see the &lsquo;hero swords&rsquo; — the swords used for all the close up shots with the actor — as well as the prop swords, allowing us to compare the two.</p>
<p>It was another fun and engaging talk on a topic that I hadn&rsquo;t put much thought to.</p>

<h3 class="relative group">Sweet Mother&rsquo;s Kitchen
    <div id="sweet-mothers-kitchen" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sweet-mothers-kitchen" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>All talked out, and noticing the rain had stopped, we grabbed a quiet dinner at <a href="https://sweetmotherskitchen.co.nz/" >Sweet Mother&rsquo;s Kitchen</a>.</p>
<p>I remember the basket of buttermilk chicken and fries that I ordered hitting the spot.
But more than that I remember the fun and endlessly distracting decorations.</p>
<p>Strings of Polaroids hung from the ceiling.
Photos, newspaper clippings, money from all corners of the planet, and customers artwork was pinned haphazardly to the wall; filling every available space.</p>
<p>★★★★☆ 4/5 - A fun restaurant with reasonably priced, good food.</p>

<h2 class="relative group">Monday 10<sup>th</sup>: Sponsored by Wētā
    <div id="monday-10th-sponsored-by-wētā" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#monday-10th-sponsored-by-w%c4%93t%c4%81" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Today was the day when the heavens were set to open.</p>
<p>As all our planned activities had been cleared out, we were clear to pick whatever we wanted to do.
Given the lack of clear skies, it had to be something indoors.</p>
<p>We had been invited by a couple on our tour to go back to Wētā to do their &rsquo;normal&rsquo; tour for regular tourists.</p>
<p>With no better ideas of our own, off we went.</p>

<h3 class="relative group">Another Wētā tour
    <div id="another-wētā-tour" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#another-w%c4%93t%c4%81-tour" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>There was always the risk that the <a href="https://tours.wetaworkshop.com/wellington/tours/weta-workshop-experience/" >Wētā Workshop Experience</a> was going to cover a lot of the content we had previously seen in the two (<a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-2/#weta-workshop-unleashed" >1</a>, <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-5/#weta-workshop" >2</a>) previous tours.</p>
<p>The group for this tour was much smaller than the other ones.
There were about 7 of us, so we were able to ask <em>way</em> more questions about each thing we were shown.</p>
<p>The tour is more &lsquo;Wētā&rsquo; focused than the others we had been on; which had been more LoTR focused.</p>
<p>As a lover of sci-fi, what I didn&rsquo;t realise is how many of the films I had watched were powered by Wētā.</p>
<p>Some pretty famous films like <a href="https://www.imdb.com/title/tt15239678/" >Dune: Part 2</a>, <a href="https://www.imdb.com/title/tt7605074/" >The Wandering Earth</a>, and <a href="https://www.imdb.com/title/tt14209916/" >Cocaine Bear</a>.</p>
<p>Some less well known films as <a href="https://www.imdb.com/title/tt2106651/" >Spectral</a>, <a href="https://www.imdb.com/title/tt2034800/" >The Great Wall</a>, and <a href="https://www.imdb.com/title/tt6292852/" >I Am Mother</a>.</p>
<p>And also, unfortunately, the complete dumpster fire which was <a href="https://www.imdb.com/title/tt14998742/" >Rebel Moon</a><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.</p>
<p>We were treated to a pretty fun video explaining how prosthetics are made for actors.
Fun fact: It&rsquo;s illegal to sell the mold for a dead actor (which makes total sense), but you <em>can</em> swap them; making them the creepiest Pokémon cards you can trade.</p>
<p>The next room had every wall covered in (maybe original) suits from many of the films Wētā had worked on; Power Rangers, I Am Mother, and District 9 to name a few.</p>
<p>From this room you could see inside the actual sword smithing workshop, where Sam (from the talks the day before) was working, which was very cool.</p>
<p>Then we moved through the penultimate room; floor to ceiling shelves filled with props, models and artwork.
However, unlike every other space in Wētā, we were allowed to pick up and &lsquo;play&rsquo; with these.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_0917_hu_f4617bec228ddfdc.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_0917_hu_8b794233e6403f47.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_0917_hu_d56d073b097669e5.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_0917_hu_6c12696d682cbae7.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_0917_hu_8b794233e6403f47.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_0917_hu_6c12696d682cbae7.jpeg"
          
          title="My other half trying on a helmet"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1399_hu_74ce592208e2c6d0.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1399_hu_eec39cd0683fe174.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1399_hu_bcaba0a6704c21b4.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1399_hu_60659cbd386cc274.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1399_hu_eec39cd0683fe174.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1399_hu_60659cbd386cc274.jpeg"
          
          title="Two models showing different stages of contruction"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1400_hu_f28c4964de2e240c.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1400_hu_ed772e05b6b3ee2a.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1400_hu_fd81aa5b86db5779.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1400_hu_4a105fbe1d348f98.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1400_hu_ed772e05b6b3ee2a.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1400_hu_4a105fbe1d348f98.jpeg"
          
          title="A model of the Balrog"
        />
    </span>
  
    <figcaption class="text-center">We tried on every helmet</figcaption>
  
</figure>

<p>The final room was a creative space where the tour guide walked us through &lsquo;model making 101&rsquo;; they even asked us to create little tin foil models of our own.</p>
<p>One of my takeaways from this tour, over the others, was the sense that &lsquo;maybe I <em>could</em> be creative&rsquo;.
Maybe I could <em>make</em> things.</p>
<p>Like I haven&rsquo;t.
But I <em>could</em>.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="one-simply-does"
    width="486"
    height="285"
    src="/2024/10/i-visited-new-zealand-part-5/one_simply_does.png"
    srcset="/2024/10/i-visited-new-zealand-part-5/one_simply_does.png 800w, /2024/10/i-visited-new-zealand-part-5/one_simply_does.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-5/one_simply_does.png"></figure>
<p>Overall I think this tour was my favourite of the three we did (spoiler, this is the last one).
I&rsquo;m a fan of the LoTR, and I enjoyed the Auckland &lsquo;unleashed&rsquo; experience, but this more personal tour really shone above the others.</p>
<p>★★★★★ 5/5 - Inspiring, fun and informative. Well worth it!</p>

<h3 class="relative group">Te Papa
    <div id="te-papa" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#te-papa" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The tour took up about half of our day.
This was our last day in Wellington, and we knew that the <a href="https://www.tepapa.govt.nz/" >Te Papa</a> museum came highly recommended.</p>
<p>The museum is huge, far larger than someone could visit in a single day.
Unable to escape Wētā Workshop, we went to the <em>Gallipoli: The Scale of Our War</em> exhibit, where larger than life recreations — created by Wētā — help tell eight individuals stories from the war.</p>
<p>Each figure was 2.4 times human size, and words do not describe how lifelike they look.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1417_hu_955fc1c52a7e7c36.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1417_hu_791629477d06bd11.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1417_hu_cc26804b5ebc3c0a.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1417_hu_9de5917d3c2e015f.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1417_hu_791629477d06bd11.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1417_hu_9de5917d3c2e015f.jpeg"
          
          title="The first room of the exhibit"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1427_hu_29a1c372a79e828f.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1427_hu_9de56e5212dcc7ca.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1427_hu_5d116d9b9bd84bc8.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1427_hu_53f8ff5013b73703.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1427_hu_9de56e5212dcc7ca.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1427_hu_53f8ff5013b73703.jpeg"
          
          title="The machine gun trio"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-5/new_zealand_1428_hu_958f795b7f3fff51.jpeg 330w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1428_hu_3d36603619f804d9.jpeg 660w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1428_hu_1b33b54674e385d8.jpeg 1024w, /2024/10/i-visited-new-zealand-part-5/new_zealand_1428_hu_93e6d34efb7e5ee3.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1428_hu_3d36603619f804d9.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-5/new_zealand_1428_hu_93e6d34efb7e5ee3.jpeg"
          
          title="Another angle of the machine gun trio"
        />
    </span>
  
    <figcaption class="text-center">Gallipoli: The Scale of Our War</figcaption>
  
</figure>

<p>Standing in the room with these figures was actually unnerving as I felt like I was just staring at a person frozen in time.
Some deep part of my brain was telling me I was looking into the eyes of a real person.</p>
<p>Afterwards we toured the <em>Te Taiao</em> (Nature) exhibit and saw the biggest colossal squid ever caught.
Followed by the <em>Rongomaraeroa</em>: a &rsquo;living&rsquo; exhibition that showcased contemporary Māori art and design.
And finally the <em>Treaty of Waitangi: Signs of a Nation</em> which was very educational on how the Treaty shaped relationships between the peoples of New Zealand.</p>
<p>All in all, we spent about 4 hours in the museum and by the time we left, the sun had set.
Thus rounding out our day and our time in Wellington.</p>
<p>★★★★☆ 4/5 - If you&rsquo;re like me and love a museum this is a solid must for a rainy day.</p>

<h2 class="relative group">Tuesday 11<sup>th</sup>: The South Island
    <div id="tuesday-11th-the-south-island" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tuesday-11th-the-south-island" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>That wraps up the North Island of New Zealand.</p>
<p>I was pretty sad to leave Wellington.
It seemed like a cool place and being the middle-aged man I am, once again I looked at house prices.</p>
<p>Once again I decided that I was too poor to live there.</p>
<p>Next time we will be flying down South to Queenstown.</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2025/01/i-visited-new-zealand-part-6/" >part 6</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I feel bad giving this only a 3 because it was a beautiful space, but compared to everything else on the holiday, this was one of the less &lsquo;mind-blowing&rsquo; experiences.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Unbeknownst to us, this turned out to be the last night of the holiday that wasn&rsquo;t either freezing cold, or tipping it down with rain.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I could write a whole blog on how Rebel Moon is garbage.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">We spent 4 nights in Wellington, made 3 trips to Wētā, ate at 2 Restaurants, and visited 1 Museum</summary></entry><entry><title type="html">I visited New Zealand - Part 4</title><link href="https://thega.me.uk/holidays/new-zealand-4" rel="alternate" type="text/html" title="I visited New Zealand - Part 4"/><published>2024-10-12T12:20:00+01:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-4</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-4"><![CDATA[<p>Welcome back to our Tour through New Zealand.
We finished in <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-3/" >part 3</a> in the town of Rotorua.</p>
<p>The weather was so perfect for Hobbiton, so we were on a high.
This holiday was going so well, and it couldn&rsquo;t possibly get any better.</p>
<p>Having seen the most famous filming location of the 
<abbr title="Lord of the Rings">LoTR</abbr>
 films, you would be forgiven for thinking it was all downhill from here.
This couldn&rsquo;t be further from the truth.</p>

<h2 class="relative group">Thursday 6<sup>th</sup>: Trollshaw Forest
    <div id="thursday-6th-trollshaw-forest" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#thursday-6th-trollshaw-forest" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="to-new-plymouth.svg" alt="Rotorua to New Plymouth, via Waitomo, and Hairy Feet" />
        <figcaption>Rotorua to New Plymouth, via Waitomo, and Hairy Feet (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-38.1383,176.2558&amp;destination=-39.0561,174.0867&amp;waypoints=-38.2606,175.1037%7c-38.4277,174.8982" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Today we were travelling South-West to New Plymouth.
We would be spending about 5 hours in the coach travelling between the two cities; a fact not made better by a 06:30 start<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>At this point we were seasoned at living out of our suitcase — every night I re-packed and squashed our luggage closed — so all we had to do was get dressed, head downstairs, gorge ourselves on another cooked breakfast, and roll ourselves into the coach.</p>
<p>Today I wasn&rsquo;t dressed like a low-budget Gandalf, so I had far fewer synthetic hairs in my mouth.</p>
<p>As we left Rotorua, I was sad that we didn&rsquo;t get to see the Polynesian Spa or the Rotorua Museum, but I guess this just gives me another reason to come back.</p>

<h3 class="relative group">Waitomo glow-worm Caves
    <div id="waitomo-glow-worm-caves" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#waitomo-glow-worm-caves" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The first stop of the day was the <a href="https://www.waitomo.com/glowworms-and-caves/waitomo-glowworm-caves" >Waitomo glow-worm Caves</a>.</p>
<p>On the way there, one of the other people on our tour — a lovely lady named Pui who we went to dinner with the night before — finished knitting a hat; a green beanie with the phrase &lsquo;I am no man&rsquo; stitched into it.
Pui gifted the hat to my other half.</p>
<p>We were blown away, not only by her generosity, but also the speed at which she knitted it (she had only started the night before).</p>
<p>You will see it in all the photos for the rest of these blogs.
I&rsquo;m not sure if they ever took it off.</p>
<p><em>Pui, if you&rsquo;re reading this, Loz wears this hat all the time and still loves it.
Thank you &#x1f604;!</em></p>
<p>We arrived at the glow-worm Caves and begun our &lsquo;glow-worm tour&rsquo;.
After saying goodbye to the sun, we entered a small hole in the hillside, and began <em>descending deep into the mines of Moria</em> (well of course, not Moria, but a room known as the <em>Cathedral</em>).</p>
<p>This cavernous cave really blew our minds; here we learned about the formation of the caves and their subsequent discovery.
After a brief dimming of the lights, the tour group sang &lsquo;Misty Mountains&rsquo;, and the guide sang us a traditional Māori song (which was beautiful).
The large cave had excellent acoustic properties, and it was obvious why it was named the Cathedral.</p>
<p>The tour then turned to the main event: glow-worms.</p>
<p>We embarked on a short boat ride through the glow-worm grotto, which would allow us to see them in their natural habitat, the <strong><em>pitch black</em></strong>.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="pitch-black"
    width="490"
    height="326"
    src="/2024/10/i-visited-new-zealand-part-4/riddick.png"
    srcset="/2024/10/i-visited-new-zealand-part-4/riddick.png 800w, /2024/10/i-visited-new-zealand-part-4/riddick.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-4/riddick.png"></figure>
<p>No artificial light was allowed in the caves because it disturbs the glow-worms, so it was just us, floating through the darkness.</p>
<p>We had seen some glow-worms at the Māori cultural evening, but that was nothing compared to this.</p>
<p>Hundreds of glow-worms adorned the roof of the grotto; it looked as if we were sat under the stars (but we were deep underground).
It was almost silent, except for the sounds of the boat moving slowly through the water, as we gazed up in awe.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_1053_hu_33740a961c3aca4e.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1053_hu_edb4a73103a753b0.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1053_hu_a83aa44f2ee41ea1.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1053_hu_6b84602881a616f4.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1053_hu_edb4a73103a753b0.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1053_hu_6b84602881a616f4.jpeg"
          
          title="This is my best (and only) picture of the cave"
        />
    </span>
  
    <figcaption class="text-center">The boat we took through the glow-worm grotto</figcaption>
  
</figure>

<p>As we emerged from the darkness of the cave I was sad it couldn&rsquo;t have lasted longer.
It was about an hour, and I don&rsquo;t normally get to see glow-worms in the UK, so I wished I could have stayed all day.</p>
<p>Although the glow-worm caves were not related to LoTR, they were very cool.</p>
<p>★★★★☆ 4/5 - A great mix of history, geology, and the opportunity to see cool insects!</p>

<h3 class="relative group">Hairy Feet Waitomo
    <div id="hairy-feet-waitomo" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hairy-feet-waitomo" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Another hour in the coach brought us to our next filming location: <a href="https://hairyfeetwaitomo.co.nz/" >Hairy Feet Waitomo - Hobbit Film Location Tour</a>.</p>
<p>Hairy Feet<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> is run by Warrick and Suzie Denize — the third generation of the Denize family to own the property — and has been the filming locations for the Hobbit and, more recently, the Rings of Power.
Like many of the filming locations in New Zealand, Hairy Feet was (and still is) a farm, which was scouted by Peter Jackson&rsquo;s team.</p>
<p>Similarly to Hobbiton, the owners have built an additional revenue source showing nerds around their property.</p>
<p>However, unlike Hobbiton, Hairy Feet lacks the movie sets left over from the filming.
But what it lacks in physical structures, it more than makes up for in natural beauty.</p>
<p>When we arrived we were split into two groups.
My group getting a tour from Suzie, and the other Warrick.</p>
<p>We were guided around their land for about 2 hours, beginning at the filming location of Staddle Farm; the abandoned farmhouse in Trollshaw Forest.
Although cool, I spent more time in awe of the beautiful mountain range that loomed in the background.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_0822_hu_2b963c746f28b22d.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0822_hu_6bb8a5c1984ca308.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0822_hu_80c37787fb407586.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0822_hu_5bb0aa8ef7c96970.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_0822_hu_6bb8a5c1984ca308.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_0822_hu_5bb0aa8ef7c96970.jpeg"
          
          title="The path up to Staddle Farm"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_0826_hu_e059228fd06d9ca3.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0826_hu_5c69ae03fb932a.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0826_hu_7c6bbd3034178157.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0826_hu_f60963f2da1298f8.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_0826_hu_5c69ae03fb932a.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_0826_hu_f60963f2da1298f8.jpeg"
          
          title="The beautiful mountains overlooking the filming locations"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_1175_hu_ad8a47f73d9d89f0.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1175_hu_722e506babfad474.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1175_hu_cdbf3b5a70807f8d.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1175_hu_88264d40fb781fb8.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1175_hu_722e506babfad474.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1175_hu_88264d40fb781fb8.jpeg"
          
          title="A view out across the rolling hills"
        />
    </span>
  
    <figcaption class="text-center">Beautiful views in every direction</figcaption>
  
</figure>

<p>As we were guided around, Suzie told us personal stories from filming that really brought the tour to life.
Even pointing out the exact rock Richard Armitage sat on when reading his lines:</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_0837-full_hu_4073787442da1368.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0837-full_hu_17447a3006357410.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0837-full_hu_b39332cb625a1bd6.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_0837-full_hu_e5cd8bd34b5df5a8.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_0837-full_hu_17447a3006357410.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_0837-full_hu_e5cd8bd34b5df5a8.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Behind the scenes still from The Hobbit: An Unexpected Journey<br>
<strong>Bottom</strong>: My other half, sitting on the same rock</figcaption>
  
</figure>

<p>We then travelled into the forest, seeing the Trolls hoard &lsquo;cave&rsquo; where Bilbo is gifted Sting by Gandalf:</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_1138-full_hu_70949ad88488acc2.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1138-full_hu_85c6906796fc6ebd.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1138-full_hu_adf0e4d655cf8b7a.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1138-full_hu_d3ffaea27265e233.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1138-full_hu_85c6906796fc6ebd.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1138-full_hu_d3ffaea27265e233.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Hobbit: An Unexpected Journey<br>
<strong>Bottom</strong>: My other half, finding sting under the same rock</figcaption>
  
</figure>

<p>The same forest was also used for the scene where Radagast finds Thorin and Company, and hands Gandalf a morgul blade.</p>
<p>Heading back out of the forest we toured locations used for the newer &lsquo;The Lord of the Rings: The Rings of Power&rsquo;;
such as the rock that the &lsquo;Mysterious Stranger&rsquo; stands on to look at the stars:</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_1205-full_hu_b52a4e1bea004b1a.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1205-full_hu_25ceae4520d0b22b.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1205-full_hu_d4b64fab0fca17c2.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1205-full_hu_dd09c9d3b0820b67.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1205-full_hu_25ceae4520d0b22b.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1205-full_hu_dd09c9d3b0820b67.jpeg"
          
          
        />
    </span>
  
    <figcaption class="text-center"><strong>Top</strong>: Still from The Lord of the Rings: The Rings of Power<br>
<strong>Bottom</strong>: Me, having almost fallen off the rock twice</figcaption>
  
</figure>

<p>Suzie was a <em>fantastic</em> tour guide and made the experience unique and enjoyable.
No question our group asked was too stupid, and always got a fun story in response.</p>
<p>All things considered, my other half and I agree that Hairy Feet was better than Hobbiton.</p>
<p>Yes, I said it.</p>
<p>Hobbiton was great, but it was more like a LoTR &lsquo;Disneyland&rsquo;; polished for tourism.
Whereas Hairy Feet felt more authentic.
We weren&rsquo;t rushed, we got to ask plenty of questions, and Suzie&rsquo;s excitement at showing us around was genuinely infectious.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_1073_hu_da42f7546998b779.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1073_hu_4ecaeb61b6acc772.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1073_hu_540c2bb110735d21.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1073_hu_8ab2e786df20d568.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1073_hu_4ecaeb61b6acc772.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1073_hu_8ab2e786df20d568.jpeg"
          
          title="My other half always looks at home holding a sword"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_1078_hu_c1fa23ed279886fa.jpeg 330w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1078_hu_cc67697dbd4be925.jpeg 660w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1078_hu_8b8f717b7c10b18d.jpeg 1024w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1078_hu_dc5d516b1d7ee2e5.jpeg 2x"
          src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1078_hu_cc67697dbd4be925.jpeg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1078_hu_dc5d516b1d7ee2e5.jpeg"
          
          title="Me, as dabbing Gandalf"
        />
    </span>
  
    <figcaption class="text-center">Plus, they even let us hold some replica swords!</figcaption>
  
</figure>

<p>★★★★★ 5/5 - This was a fantastic family run tour!</p>

<h3 class="relative group">New Plymouth
    <div id="new-plymouth" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#new-plymouth" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>All movie location-ed out, we jumped back on the coach for our final stretch down to New Plymouth.</p>
<p>I cannot tell you much about New Plymouth.
It was dark when we arrived.
It was dark when we left.</p>
<p>All we did was crash on our hotel bed and order some room service.</p>
<p>In retrospect, we should have gone out to see <em>something</em>, but we were too tired.
The <a href="https://all.accor.com/hotel/9521/index.en.shtml" >Novotel New Plymouth Taranaki</a> was a nice hotel regardless.</p>

<h2 class="relative group">Friday 7<sup>th</sup>: Wellington Bound
    <div id="friday-7th-wellington-bound" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#friday-7th-wellington-bound" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="to-wellington.svg" alt="New Plymouth to Wellington, via Whanganui" />
        <figcaption>New Plymouth to Wellington, via Whanganui (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-39.0561,174.0867&amp;destination=-41.2918,174.7875&amp;waypoints=-39.9339,175.0564" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>The downside of having to cover the whole of the North island to get from Auckland to Wellington, is that there&rsquo;s a lot of country to get across.
Lacking the ability to cut to an Indiana Jones-style montage, where we follow a red line across a globe, we have to make our way to Wellington the slow way; by coach.</p>
<p>We all jumped back in Shadowfax — the name of our coach — and begun a 5-hour drive South.</p>
<p>As we left, the sun rose, and a majestic Mount Taranaki sat shrouded by cloud; which was quite cool.
Being on the left side of the coach did not help us get a good picture however:</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="mount-taranaki"
    width="1576"
    height="1996"
    src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1216_hu_6df1dc4d3e8440be.jpeg"
    srcset="/2024/10/i-visited-new-zealand-part-4/new_zealand_1216_hu_6df1dc4d3e8440be.jpeg 800w, /2024/10/i-visited-new-zealand-part-4/new_zealand_1216_hu_61fcd08cada5dd.jpeg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-4/new_zealand_1216.jpeg"><figcaption>Mount Taranaki</figcaption></figure>
<p>The screens on the coach played <em>The Lord of the Rings: The Fellowship of the Ring</em>, the countryside rolled past, and I napped on and off.</p>
<p>About half way our tour guide ran a LoTR quiz.
Now, as someone who cannot remember many things, I am not good at your average quiz.
A LoTR quiz where I had to recall the name of Aragorn&rsquo;s sword?
I had no chance.</p>
<p>I scored a nice round <em>0</em>.</p>
<p>We arrived in Wellington later that day with sunlight to spare.</p>
<p>We were staying in the <a href="https://www.millenniumhotels.com/en/wellington/copthorne-hotel-wellington-oriental-bay/" >Copthorne Hotel Wellington</a> in Oriental Bay.
However, road closures meant that our coach couldn&rsquo;t approach from the West, and we had to do a giant loop around Wellington&rsquo;s coast, approaching from the East along &lsquo;Great Harbour Way&rsquo;.</p>
<p>Great Harbour Way is a winding coastal road with beautiful views out into the Wellington bay.
As we travelled along it, I recognised some houses from a Tom Scott <a href="https://www.youtube.com/watch?v=cUkoqppoFr8" >video</a>.
Many of the houses along Great Harbour Way have private cable cars; allowing owners to get up to their houses on the side of Mount Victoria.</p>
<p>We checked in and were greeted by an <a href="/2024/10/i-visited-new-zealand-part-4/new_zealand_0862.jpg" >amazing vista</a> from our hotel window.</p>
<p>Fuelled by a temporary insanity — being on a coach for 5 hours can do that to you — I decided to take a lovely walk along the coastal road.
I looped back through the <a href="https://wellington.govt.nz/recreation/outdoors/walks-and-walkways/across-the-city/southern-walkway" >Southern Walk Way</a> which, I learned, was a <em>very</em> steep path along the side of the hill.</p>
<p>After about 1 km cosplaying as a mountain goat, I made it back in one piece.</p>
<p>We decided to go out to dinner at <a href="https://www.lulubar.co.nz/" >Lulu Bar</a>, which I thoroughly recommend if you like cocktails!
On our way back to the hotel we stopped in the town square where a brass band called &lsquo;Crash Bandihoot&rsquo; had set up:</p>
<lite-youtube videoid="LZSmIW6fPSs" playlabel="LZSmIW6fPSs" params=""></lite-youtube>

<p>I&rsquo;ve never been to New Orleans, but from extensive research watching <em>NCIS: New Orleans</em>, Wellington was giving off a very laid back and fancy-free vibe.</p>
<p>There was a lot for us to see and do in Wellington, so we will be spending 4 nights in our hotel.
I even dared to unpack our suitcase a little.</p>

<h2 class="relative group">Saturday 8<sup>th</sup>: Getting Wētā Again
    <div id="saturday-8th-getting-wētā-again" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#saturday-8th-getting-w%c4%93t%c4%81-again" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Well, here we are again.
In the next edition we will go off-road to more filming locations, as well as spending more time at Wētā.</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-5/" >part 5</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>The tour guide organised a &lsquo;wake-up call&rsquo; every morning.
Without these we would have missed every departure.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Fantastic name!&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">Our quest down the northern island of New Zealand continues, taking us from Rotorua to Wellington, via Middle Earth</summary></entry><entry><title type="html">I visited New Zealand - Part 3</title><link href="https://thega.me.uk/holidays/new-zealand-3" rel="alternate" type="text/html" title="I visited New Zealand - Part 3"/><published>2024-10-03T21:33:00+01:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-3</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-3"><![CDATA[<blockquote><p>In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.</p>
<p>— J.R.R. Tolkien, The Hobbit</p>
</blockquote>
<h2 class="relative group">Wednesday 5<sup>th</sup>: Hobbiton
    <div id="wednesday-5th-hobbiton" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wednesday-5th-hobbiton" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>After visiting New Zealand, I am on the fence whether Hobbiton was the <em>best</em> thing we did while we were there.
It was absolutely the most <em>anticipated</em> thing we were looking forward to before we went.</p>
<p>And, if you tell anyone that you did a 
<abbr title="Lord of the Rings">LoTR</abbr>
 themed tour around New Zealand, they will almost immediately ask something along the lines of &lsquo;How was Hobbiton?&rsquo; or &lsquo;Did you get to go to Hobbiton?&rsquo;.</p>
<p>Having a movie set from a world renowned collection of movies just sitting there for you to explore, isn&rsquo;t that common.
Most movie sets are torn down for a variety of reasons and, in New Zealand, it&rsquo;s normally, so the owner can continue using it for farming.
I believe that New Zealand actually has a law stating that the site needs to be returned as-is; exactly how it was before filming.</p>
<p>Even if the sets were left there they are not normally built to last.
A movie set like Hobbiton is open to the elements and film crews make the sets look perfect for the lens, not after 10 years of wind, sun, and rain.
This is why the Hobbiton you can go and see today is the second build of the site.</p>
<p>I guess if you owned a farm back in 2000 and some movie producer called Peter Jackson asked to use your land for some high-fantasy book you had never heard of, you might take the money but want your land back afterwards.
You would have next to no idea that by 2013 you would have had half a million nerds travel from around the planet to see a movie set; so you would request they remove everything and set it back to how it was.</p>
<p>So when &lsquo;The Hobbit&rsquo; began filming, they rebuilt the site using more permanent materials, and began to regularly maintain it.</p>
<p>Anyway, enough history.</p>

<h3 class="relative group">Hobbiton
    <div id="hobbiton" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hobbiton" aria-label="Anchor">#</a>
    </span>
    
</h3>
<figure>
        <img class="my-0 rounded-md nozoom" src="hobbiton.svg" alt="Our Hotel to Hobbiton" />
        <figcaption>Our Hotel to Hobbiton (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-38.1383,176.2558&amp;destination=-37.8579,175.6813" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>Before booking, the tour had made it quite clear that dressing up for Hobbiton was encouraged, bordering on mandatory.
Climbing back into Shadowfax — the nickname for our coach — after breakfast, it became very clear that I had not gotten the same memo as everyone else.</p>
<p>When we packed for the tour, I heard <em>&ldquo;wear a Lord of the Rings costume&rdquo;</em>, whereas everyone else heard <em>&ldquo;dress up as a Hobbit&rdquo;</em>.</p>
<p>I was a singular Gandalf in a sea of Hobbits.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="solo-gandalf"
    width="1068"
    height="1068"
    src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0813_hu_f147c292d991c6f7.jpg"
    srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0813_hu_f147c292d991c6f7.jpg 800w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0813.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0813.jpg"></figure>
<p>We set off, and it took us about an hour to get close to Hobbiton.</p>
<p>If you had just dropped me here, I would swear blind that we were back in the Cotswolds in the UK.
Rolling hills surrounded us on all sides as we pulled up to &lsquo;The Shire&rsquo;s Rest&rsquo;, a small Café and bus depot where the tours start<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>We, however, were a special tour group, and we got to take Shadowfax from The Shire&rsquo;s Rest to Hobbiton itself.
As we headed up the road towards Hobbiton, our tour guide started playing &lsquo;Concerning Hobbits&rsquo; from the beginning of the &lsquo;The Lord of the Rings: The Fellowship of the Ring&rsquo; (embedded below, play it to follow along).</p>
<lite-youtube videoid="CL_3mlOPnGI" playlabel="CL_3mlOPnGI" params=""></lite-youtube>

<p>Shadowfax crested the hill, the music reached its crescendo, and we could see Hobbiton below us.
The weather was perfect<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>; not a cloud in the sky to blemish a magical view.
There were tears shed by most of the coach.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="its-so-beautiful"
    width="500"
    height="281"
    src="/2024/10/i-visited-new-zealand-part-3/its_so_beautiful.gif"
    srcset="/2024/10/i-visited-new-zealand-part-3/its_so_beautiful.gif 800w, /2024/10/i-visited-new-zealand-part-3/its_so_beautiful.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-3/its_so_beautiful.gif"></figure>
<p>We all peeled off the coach, dried our eyes and headed into Hobbiton behind our tour guide.
Walking in and seeing the movie set open up in front of us took our breath away.</p>
<p>Almost exactly as it was from the film, Hobbit holes lined the hillside all around us; each as interesting and unique as the next.
I found out later that each of the Hobbit holes was a different size depending on if they were used for close up shots, or were just intended to provide depth.
A team of gardeners worked year round to keep all the garden plots and flowers alive.</p>
<p>From where I was standing, Hobbiton felt <em>real</em>; which I guess it was (minus the interiors of the homes).</p>
<p>We took a bit of time to recreate the &lsquo;I&rsquo;m going on an adventure!&rsquo; scene from The Hobbit, before we started the tour.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="going-on-an-adventure"
    width="245"
    height="250"
    src="/2024/10/i-visited-new-zealand-part-3/im_going_on_an_adventure.gif"
    srcset="/2024/10/i-visited-new-zealand-part-3/im_going_on_an_adventure.gif 800w, /2024/10/i-visited-new-zealand-part-3/im_going_on_an_adventure.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/10/i-visited-new-zealand-part-3/im_going_on_an_adventure.gif"></figure>
<p>I forgot to mention, back at The Shire&rsquo;s Rest, we were assigned an &lsquo;official&rsquo; tour guide who worked at The Hobbiton Movie Set.
Timing was very strict, and we were not allowed to deviate from our given slot.
Ultimately this resulted in the tour feeling a bit rushed, but it was understandable.
Hobbiton sees hundreds of people a day, you can&rsquo;t just let some idiots in costume run around poking things.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0822_hu_b94fbf410ec61a26.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0822_hu_e2ca811e3fce55d2.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0822_hu_35542ba342811331.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0822_hu_89bf1ad277c4c5af.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0822_hu_e2ca811e3fce55d2.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0822_hu_89bf1ad277c4c5af.jpg"
          
          title="A hole fit for a Hobbit"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0834_hu_2203885b914141e2.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0834_hu_b2a6f437abbbf3a2.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0834_hu_e017b0d575cbf06f.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0834_hu_d90c2e966c4fa6b6.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0834_hu_b2a6f437abbbf3a2.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0834_hu_d90c2e966c4fa6b6.jpg"
          
          title="A view out over Hobbiton"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0853_hu_c0f57a2ce31957a2.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0853_hu_221a58ab65bc5875.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0853_hu_fd59b4654b19a63.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0853_hu_81ed806f6f173002.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0853_hu_221a58ab65bc5875.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0853_hu_81ed806f6f173002.jpg"
          
          title="My very convincing Gandalf costume"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0879_hu_e1da5239066aa5a1.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0879_hu_8568ab6fc6cb79c0.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0879_hu_5a273c4fe55d616d.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0879_hu_c83c5d5e72c78304.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0879_hu_8568ab6fc6cb79c0.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0879_hu_c83c5d5e72c78304.jpg"
          
          title="A view over Hobbiton from Bag End"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0887_hu_4aaa68ae3491d396.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0887_hu_c6b533a8ca84a13a.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0887_hu_6212dc4814c97f53.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0887_hu_64e593d028453f9c.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0887_hu_c6b533a8ca84a13a.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0887_hu_64e593d028453f9c.jpg"
          
          title="Bag End"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0911_hu_e9909d2628fabdd3.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0911_hu_9e381a9f313c766a.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0911_hu_b979836cbbbe513.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0911_hu_d10b9e33feaa5f26.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0911_hu_9e381a9f313c766a.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0911_hu_d10b9e33feaa5f26.jpg"
          
          title="Gandalf comes calling"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0973_hu_882cc6508430809d.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0973_hu_c89900def9776abf.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0973_hu_418697ce742f54d7.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0973_hu_9c5ff4e8e37ae55a.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0973_hu_c89900def9776abf.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0973_hu_9c5ff4e8e37ae55a.jpg"
          
          title="A cozy fireplace in a cozy Hobbit hole"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0768-1_hu_b165700f28d403c0.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0768-1_hu_7dd0244e6f04d7fa.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0768-1_hu_ce51678d0654539f.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0768-1_hu_6735ad22c5d2a838.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0768-1_hu_7dd0244e6f04d7fa.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0768-1_hu_6735ad22c5d2a838.jpg"
          
          title="The mill by the river"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0807_hu_3d2057b9b51883b8.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0807_hu_741e15e956180459.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0807_hu_bf8caf072c306c5e.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0807_hu_673a340017145d55.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0807_hu_741e15e956180459.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0807_hu_673a340017145d55.jpg"
          
          title="A view from the Green Dragon"
        />
    </span>
  
    <figcaption class="text-center">It was a glorious day in Hobbiton</figcaption>
  
</figure>

<p>Our official tour guide was good, however some official responses to questions seemed a bit like they were run through a marketing team a couple of times.
Not that they were false, but more that they seemed like they were putting a very glossy shine on the actions of the landowners who seemed to have acted with perfect foresight at all times.</p>
<p>After a walk up the hill to Bag End, and back down past the &lsquo;Party Tree&rsquo;, we came upon Bagshot Row.
Although 3 Bagshot Row — Famously owned by The Gamgees — was not accessible, there were two fully recreated Hobbit holes that you could actually explore <em>inside</em>.</p>
<p>They were built at 83% scale but were fully kitted out with props to match.
From a full pantry down to a recent copy of a newspaper you could read on the Hobbit sized toiled; you could imagine someone living here.
One even had a miniature hobbit hole model of itself on a mantelpiece.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_5454_hu_c26d806db7921c42.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_5454_hu_103ac39d3ee46a65.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_5454_hu_7a62fa5fd8bd92.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_5454_hu_38e39ef90d7aa4e4.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_5454_hu_103ac39d3ee46a65.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_5454_hu_38e39ef90d7aa4e4.jpg"
          
          title="A Hobbit hole in a Hobbit hole"
        />
    </span>
  
    <figcaption class="text-center">A Hobbit hole in a Hobbit hole</figcaption>
  
</figure>

<p>At 83% I spent my entire time bending down, but I didn&rsquo;t mind.
These Hobbit holes were <em>super</em> cool!</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0994_hu_e8f20acdebc4201b.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0994_hu_486c64f4897bfc86.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0994_hu_c41da14f290c10a3.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0994_hu_9fe170118373c925.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0994_hu_486c64f4897bfc86.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0994_hu_9fe170118373c925.jpg"
          
          title="My other half hard at work in the Hobbit hole"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_1022_hu_67900f0039260103.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1022_hu_5f37f57ae4250982.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1022_hu_b83abe9d36f3c8a6.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1022_hu_87eb7901b12a7c36.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_1022_hu_5f37f57ae4250982.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_1022_hu_87eb7901b12a7c36.jpg"
          
          title="The Hobbit holes were not designed for me"
        />
    </span>
  
    <figcaption class="text-center">The Hobbit holes suited my other half. Me? Not so much</figcaption>
  
</figure>

<p>Last, but by no means least, we stopped off at the Green Dragon pub for a drink.
It took me a couple of attempts to get into the Green Dragon because I kept getting stopped, so people could take photos with &lsquo;Gandalf&rsquo;.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_0787_hu_a14d3f0d0fe1efd3.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0787_hu_99fde371e78a7976.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0787_hu_90d462e917dc3588.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_0787_hu_e2608bfa072bfdd8.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0787_hu_99fde371e78a7976.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_0787_hu_e2608bfa072bfdd8.jpg"
          
          title="The outstanding Green Dragon pub"
        />
    </span>
  
    <figcaption class="text-center">The outstanding Green Dragon pub</figcaption>
  
</figure>

<p>After we had enjoyed a drink we spent about an hour in the Party Marquee next door to enjoy a buffet lunch.
Once full, we looked out over the lake one final time, before begrudgingly getting back on Shadowfax and heading back to Rotorua.</p>
<p>The photos just really don&rsquo;t do it justice.
This whole blog could have been replaced with &ldquo;You should go&rdquo;.</p>
<p>★★★★★ 5/5 - Would go again if I&rsquo;m ever in the area.</p>

<h3 class="relative group">Redwoods Treewalk
    <div id="redwoods-treewalk" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#redwoods-treewalk" aria-label="Anchor">#</a>
    </span>
    
</h3>
<figure>
        <img class="my-0 rounded-md nozoom" src="redwoods.svg" alt="Our Hotel to Redwoods Treewalk" />
        <figcaption>Our Hotel to Redwoods Treewalk (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-38.1383,176.2558&amp;destination=-38.1567,176.2731" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>With the day mostly used up and the light fading, we were let loose on Rotorua for an evening.
Left to choose our own evening activity.</p>
<p>The Polynesian Spa came highly recommended and was opposite the hotel, however another recommended activity was the <a href="https://www.treewalk.co.nz/" >Redwoods Treewalk</a>.</p>
<p>The Treewalk drew our eye because it looked quite unique.
There are a few places in the UK you can see redwoods but none that provide a catwalk; allowing you to walk 15 meters off the ground.</p>
<p>The Redwoods Treewalk can be experienced in the day, to get the best view of the towering trees; or at night, where there is a unique light show suspended around the catwalk.
We had no daylight left, so it was the nighttime tree walk for us.</p>
<p>The guide said that the &lsquo;Nightlights Treewalk&rsquo; would take about 30-40 minutes, but we spent about double that.
The lights were mesmerising, and we took our time enjoying the fresh nighttime air.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_1029_hu_e58e90f45fbcfeb9.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1029_hu_e2502fcbc1455dde.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1029_hu_cbdf8044d156e2e6.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1029_hu_d3b9e382bd3d3e82.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_1029_hu_e2502fcbc1455dde.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_1029_hu_d3b9e382bd3d3e82.jpg"
          
          title="Lanterns by world-renowned designer David Trubridge"
        />
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_5503_hu_abd8f5cf4d2b3ab6.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_5503_hu_2b315c0ee524518.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_5503_hu_7005f265f962e2b0.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_5503_hu_879ed0d73ccfdab3.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_5503_hu_2b315c0ee524518.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_5503_hu_879ed0d73ccfdab3.jpg"
          
          title="Laser light show"
        />
    </span>
  
    <figcaption class="text-center">The Treewalk lights</figcaption>
  
</figure>

<p>★★★★☆ 4/5 - A unique experience that brought an exhilarating touch to a nighttime walk.
Well worthwhile.</p>

<h3 class="relative group">Atticus Finch
    <div id="atticus-finch" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#atticus-finch" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>A handful of the tour group came along to traverse the Redwoods, which was enjoyable, but when it came time to head home we teamed up with two of the group who we had hit it off with and shared a taxi back to Rotorua.</p>
<p>We stopped for dinner at a lovely restaurant on &lsquo;Eat Streat&rsquo; — a street where many of the restaurants and bars can be found in central Rotorua — called <a href="https://www.rotoruanz.com/eat-drink/eat-streat/atticus-finch" >Atticus Finch</a>.</p>
<p>The food was great, the mulled wine welcome, and the company fantastic.</p>
<p>★★★★☆ 4/5 - Very nice food with great service.</p>
<p>As I stumbled back to the hotel, we happened past a classic Mini and I felt like I was back in ol&rsquo; Blighty again.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/10/i-visited-new-zealand-part-3/new_zealand_1034_hu_d6853aef4e162ecc.jpg 330w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1034_hu_d1f59b0c3e7f1479.jpg 660w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1034_hu_fd55506b0c2902cd.jpg 1024w, /2024/10/i-visited-new-zealand-part-3/new_zealand_1034_hu_149e178327864a9a.jpg 2x"
          src="/2024/10/i-visited-new-zealand-part-3/new_zealand_1034_hu_d1f59b0c3e7f1479.jpg"
          data-zoom-src="/2024/10/i-visited-new-zealand-part-3/new_zealand_1034_hu_149e178327864a9a.jpg"
          
          title="A bonus Mini we found on the way back to the hotel"
        />
    </span>
  
    <figcaption class="text-center">A bonus Mini we found</figcaption>
  
</figure>

<p>Overall it was a great day.
We were so lucky that the weather held out for Hobbiton, we had a pleasant evening climbing the Redwoods, and a fun night out with two new friends at a good restaurant.</p>
<p>The holiday really felt like every day was surpassing the day before.
We couldn&rsquo;t wait for tomorrow.</p>

<h2 class="relative group">Thursday 6<sup>th</sup>: Trollshaw Forest
    <div id="thursday-6th-trollshaw-forest" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#thursday-6th-trollshaw-forest" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Well that was the main event folks, I hope you&rsquo;ll come back to read part 4.
Next time we will be delving deep into some caves and visiting more filming locations.</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-4/" >part 4</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>You wouldn&rsquo;t really want hundreds of cars piling into the — relatively remote — site of Hobbiton; so it makes sense for people to be loaded onto coaches at this visitor center style space.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>We lucked out here massively on this &lsquo;winter&rsquo; tour.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">&amp;ldquo;In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.&amp;rdquo;
― J.R.R. Tolkien, The Hobbit</summary></entry><entry><title type="html">Adding Maps to my Travel Posts</title><link href="https://thega.me.uk/code/adding-maps-to-my-travel-posts" rel="alternate" type="text/html" title="Adding Maps to my Travel Posts"/><published>2024-09-28T21:31:00+01:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/code/adding-maps-to-my-travel-posts</id><content type="html" xml:base="https://thega.me.uk/code/adding-maps-to-my-travel-posts"><![CDATA[<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="tip">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/></svg>
</span></div>
        <div class="grow">
          Tip
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>This post is inspired by Josh Erb&rsquo;s blog: <a href="https://cyberb.space/notes/2024/how-i-added-maps-to-my-travel-posts/" >How I Added Maps to my Travel Posts</a>.</p></div></div><figure>
        <img class="my-0 rounded-md nozoom" src="an_example_map.svg" alt="West Meon Hut to Upper Swanmore, via , and Washford, and Meonstoke, and " />
        <figcaption>West Meon Hut to Upper Swanmore, via , and Washford, and Meonstoke, and  (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=51.0272,-1.0705&amp;destination=50.9533,-1.1704&amp;waypoints=51.0136,-1.0918%7c51.0043,-1.1128%7c50.9730,-1.1286%7c50.9592,-1.1420" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>I recently started writing a travel blog on my visit to <a href="https://thega.me.uk/tags/new-zealand/" >New Zealand</a> and something was missing.
Posts lacked a bit of context as to where I was and where the blog would be taking the reader.</p>
<p>As a daily lurker of &lsquo;Hacker News&rsquo;, almost immediately after I had posted my first blog on the 15<sup>th</sup> of September,
I came across a post from the day before titled <a href="https://news.ycombinator.com/item?id=41532958" >&lsquo;I Added SVG Maps to My Travel Posts&rsquo;</a>.</p>
<p>As someone who worked in a Geospatial company for a decade I&rsquo;m ashamed to admit I had not considered maps on my posts.
Mostly because &lsquo;maps&rsquo; normally equals &lsquo;Google Maps&rsquo; and about 5 years ago I gave up wanting to deal with the hassle
of sorting out API Keys etc. etc&hellip;</p>
<p>Josh goes into detail in their <a href="https://cyberb.space/notes/2024/how-i-added-maps-to-my-travel-posts/" >post</a>
about why and <em>how</em> they avoided this.</p>
<p>This post dives into how Josh inspired me to solve the same problem; and how I ended up with a different solution.</p>

<h2 class="relative group">Requirements
    <div id="requirements" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#requirements" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I would encourage you to read through Josh&rsquo;s post because I have the same base requirements as they did:</p>
<ul>
<li>No 3rd party platforms</li>
<li>Generated at build time</li>
<li>Looks consistent on mobile &amp; desktop</li>
</ul>
<p>To address all 3 requirements Josh uses <a href="https://d3js.org/d3-geo" >d3</a>, writes a custom tag for his <a href="https://www.11ty.dev/" >11ty</a>
based site which allows them to specify the following in the Front Matter of each post:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">location</span>: <span style="color:#ae81ff">mumbai</span></span></span></code></pre></div></div>
<p>Which is then passed to a custom function in the post template file:</p>
<div class="highlight-wrapper"><pre tabindex="0"><code class="language-liquid" data-lang="liquid">{% cartographer location %}</code></pre></div>
<p>This results in a custom JavaScript function in the site configuration being called,
which generates a map for the given location.
When their site is built the map is generated.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="magic"
    width="498"
    height="278"
    src="/2024/09/adding-maps-to-my-travel-posts/magic.gif"
    srcset="/2024/09/adding-maps-to-my-travel-posts/magic.gif 800w, /2024/09/adding-maps-to-my-travel-posts/magic.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/09/adding-maps-to-my-travel-posts/magic.gif"></figure>
<p>I would have <em>loved</em> to have copy and pasted the solution to my own site, but my setup is a bit different.</p>
<p>I use <a href="https://jekyllrb.com/" >Jekyll</a>, and my first thought was that I write a custom plugin for it.</p>
<p>However, I do not — currently — pre-build my site before I push it to GitHub and use GitHub Pages to deploy the site.
Unfortunately the build pipeline is not-configurable;
GitHub <a href="https://pages.github.com/versions/" >has limited plugin</a> support with no support for custom plugins.</p>
<p>So, it was at this point I could either:</p>
<ol>
<li>Change to building my site locally and push resultant resources to GitHub</li>
<li>Generate the images before commit and upload the static images with the post to GitHub</li>
</ol>
<p>The second option seemed like less of a change to my process, so that&rsquo;s what I picked.</p>

<h2 class="relative group">Abusing pre-commit
    <div id="abusing-pre-commit" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#abusing-pre-commit" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>As I don&rsquo;t have a build pipeline I can control, I have opted for <a href="https://pre-commit.com/" >pre-commit</a> in my local repository.</p>
<p>If you don&rsquo;t know what pre-commit is, in short,
it is a way of syncing/revision controlling <a href="https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks" >Git</a> <code>pre-commit</code> hooks;
so they are the same on any developers machine.</p>
<p>In my <code>.pre-commit-config.yml</code> file<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> I put the following python hook:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">repos</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">repo</span>: <span style="color:#ae81ff">local</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">hooks</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#f92672">id</span>: <span style="color:#ae81ff">generate-maps</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Generate Maps</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">description</span>: <span style="color:#ae81ff">Generate all the maps used in posts</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">entry</span>: <span style="color:#ae81ff">python3 .generate_maps.py</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">language</span>: <span style="color:#ae81ff">python</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">additional_dependencies</span>: [<span style="color:#e6db74">&#34;py-staticmaps&#34;</span>, <span style="color:#e6db74">&#34;python-frontmatter&#34;</span>]
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">always_run</span>: <span style="color:#66d9ef">true</span></span></span></code></pre></div></div>
<p>Here we are telling pre-commit to run <code>python3 .generate_maps.py</code> as a <code>pre-commit</code> Git hook.</p>
<p>Because everyone needs dependencies — and everyone hates having those dependencies installed globally on their system —
the <code>additional_dependencies</code> block will create a <a href="https://docs.python.org/3/library/venv.html" >virtual environment</a>
with the defined libraries installed.
<em>Neat</em>.</p>
<p>Then, on each commit or if I manually run <code>pre-commit</code>, my map generation code will run.</p>
<p>If I forget to do this before I commit, I will get the following failure:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ git commit -m <span style="color:#e6db74">&#39;Amazing content&#39;</span>
</span></span><span style="display:flex;"><span>Generate Maps...................................Failed
</span></span><span style="display:flex;"><span>- hook id: generate-maps
</span></span><span style="display:flex;"><span>- exit code: <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>New map <span style="color:#e6db74">&#39;./assets/images/maps/map.svg&#39;</span> generated</span></span></code></pre></div></div>
<p>Or, if I update the generate map code (e.g. changing the font of labels), then I will get the following:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ git commit -m <span style="color:#e6db74">&#39;Amazing content&#39;</span>
</span></span><span style="display:flex;"><span>Generate Maps.....................Failed
</span></span><span style="display:flex;"><span>- hook id: generate-maps
</span></span><span style="display:flex;"><span>- files were modified by this hook</span></span></code></pre></div></div>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="danger">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor"  d="M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-2.8-5.6-5.6-11.2-9.8-16.8l-50.6 58.8s-81.4-103.6-87.1-110.6C133.1 243.8 112 273.2 112 306.8C112 375.4 162.6 416 225.7 416z"/></svg></span></div>
        <div class="grow">
          Danger
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>Currently, this hook will not pick up new maps which were unstaged (always run <code>git status</code> kids)!</p></div></div>
<h2 class="relative group">Image Generation
    <div id="image-generation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#image-generation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>The first part of my solution — and probably the most important part — is the generation of the maps.
This is going to consist of 3 main parts:</p>
<ol>
<li>Reading the <a href="https://jekyllrb.com/docs/front-matter/" >Front Matter</a> from my posts<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</li>
<li>Generating the SVG map</li>
<li>Integrating with pre-commit</li>
</ol>
<p>I found <a href="https://github.com/flopp/py-staticmaps" >py-staticmaps</a><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, and I&rsquo;ve gotten some good millage from it;
there are probably alternatives out there, but it&rsquo;s a good library that allowed me to configure all the things I needed to.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Note
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p><code>py-staticmaps</code> is not currently being pushed to pypi, so I needed to patch for an API difference in PIL.
Thanks to the awesome community I found a quick patch <a href="https://github.com/flopp/py-staticmaps/issues/39#issuecomment-2264856739" >here</a>.</p></div></div>
<h3 class="relative group">Reading Front Matter
    <div id="reading-front-matter" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#reading-front-matter" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Everyone of my posts has a <a href="https://jekyllrb.com/docs/front-matter/" >Front Matter</a> block which contains metadata on the post itself.</p>
<p>Using <a href="https://github.com/eyeseast/python-frontmatter/" >python-frontmatter</a> I can pull out structured information from the post.</p>
<p>Using custom Front Matter I could represent a map with a line drawn between London and Auckland like so:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#e6db74">&#34;I visited New Zealand - Part 1&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">date</span>: <span style="color:#e6db74">2024-09-15 20:00:00 +0000</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">maps</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">london_to_auckland</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">line</span>: <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">points</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">London</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">lat</span>: <span style="color:#ae81ff">51.4775</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">lon</span>: -<span style="color:#ae81ff">0.461389</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Auckland</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">lat</span>: -<span style="color:#ae81ff">37.008056</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">lon</span>: <span style="color:#ae81ff">174.791667</span>
</span></span><span style="display:flex;"><span>---</span></span></code></pre></div></div>
<p>To see how I use <code>python-frontmatter</code>, take a look at <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/1f6f8d270d438a3d2c2a69d7915afdfc7ec6cd2e/.generate_maps.py#L76-L86" >the code</a>
but, in short, you can pull out information like so:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(<span style="color:#e6db74">&#34;./_posts/2024-09-15-new-zealand-1.md&#34;</span>) <span style="color:#66d9ef">as</span> f:
</span></span><span style="display:flex;"><span>    post <span style="color:#f92672">=</span> frontmatter<span style="color:#f92672">.</span>loads(f<span style="color:#f92672">.</span>read())
</span></span><span style="display:flex;"><span>    title <span style="color:#f92672">=</span> post[<span style="color:#e6db74">&#34;title&#34;</span>]</span></span></code></pre></div></div>

<h3 class="relative group">Failing pre-commit
    <div id="failing-pre-commit" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#failing-pre-commit" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>There are two main cases when I want pre-commit to warn me something has changed.
When a new map is created, and when an existing map is updated.</p>
<p>The update case is easier as pre-commit is sensitive to files changing when its running; so there&rsquo;s nothing to do here.</p>
<p>The &rsquo;new map&rsquo; case is a bit harder.</p>
<p>If you have scanned the source code you may have noticed that the python file ends with <code>sys.exit(exit_code)</code>.
This is a way for me to signal to pre-commit that it needs to abort the in-progress commit, and warn the user.</p>
<p>This is not foolproof because the following events could happen:</p>
<ol>
<li>I add a new post with a map definition</li>
<li>I commit</li>
<li>pre-commit fails because <code>generate-maps</code> exited with a code of 1 as it created a new unstaged file</li>
<li>An unstaged SVG is in the working directory, but I don&rsquo;t notice and commit again</li>
<li><code>generate-maps</code> does not fail because it thinks nothing needs to change</li>
<li>The commit is successful &#x1f62d;</li>
</ol>
<p>I&rsquo;m open to a better way of solving this; maybe getting my python code to check for unstaged files?</p>

<h3 class="relative group">(Bonus) Waypoint Captions
    <div id="bonus-waypoint-captions" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#bonus-waypoint-captions" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Out of the box <code>py-staticmaps</code> gives you a <code>Marker</code>, <code>Line</code>, and <code>Area</code>.
Other entities are left as an <a href="https://github.com/flopp/py-staticmaps/issues/10" >exercise for the reader</a> and,
as I wanted to put labels on my Markers, I had to learn how SVG worked.</p>
<p>The example from <code>py-staticmaps</code> allowed me to get a working version with text captions quite quickly,
but they were not legible when they intersected with the line/map.
So I set about trying to put a white background behind them.</p>
<p>This actually took <em>way</em> more time than I expected, but a couple of hours later I had a basic
<a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/1f6f8d270d438a3d2c2a69d7915afdfc7ec6cd2e/.generate_maps.py#L28-L71" >implementation</a>
which put a white &lsquo;flood&rsquo; filter on the text (shown in the example above)<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.</p>

<h2 class="relative group">Embedding Maps
    <div id="embedding-maps" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#embedding-maps" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So I have the map stored in <code>./assets/images/maps/&lt;name&gt;.svg</code>.
Now I have to get it to show in the post as an image.</p>
<p>The <em>normal</em> way of doing this is with a markdown image reference:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>![<span style="color:#f92672">my-map</span>](<span style="color:#a6e22e">/assets/images/maps/&lt;name&gt;.svg &#34;Alt text&#34;</span>)</span></span></code></pre></div></div>
<p>However, all the metadata of the maps are just <em>sat there</em>; right at the top of the file.
It would be a shame if I couldn&rsquo;t do something with it.</p>
<p>Which is when I stumbled upon <a href="https://jekyllcodex.org/without-plugins/" >Jekyll without plugins</a>.</p>
<p>By <a href="https://github.com/jhvanderschee/jekyllcodex/blob/3f5bbeac8c21a94769244081768bc739ed31738f/_includes/reading-time.html" >looking at some</a>
of the Plugin-free solutions listed, I was able to cobble together a solution that looks like this:</p>
<div class="highlight-wrapper"><pre tabindex="0"><code class="language-liquid" data-lang="liquid">{% include map.html name=&#34;london_to_auckland&#34; %}</code></pre></div>
<p>This includes a custom HTML file called <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/1f6f8d270d438a3d2c2a69d7915afdfc7ec6cd2e/_includes/map.html" >map.html</a>
which then pulls all the map metadata from the Front Matter based on the given name.</p>
<p>This then allows me to do cool things like change the alt text of the image to include the captions of the locations when present.
Hover over the example at the top of this page to see it in action!</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="more-magic"
    width="498"
    height="278"
    src="/2024/09/adding-maps-to-my-travel-posts/magic.gif"
    srcset="/2024/09/adding-maps-to-my-travel-posts/magic.gif 800w, /2024/09/adding-maps-to-my-travel-posts/magic.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/09/adding-maps-to-my-travel-posts/magic.gif"></figure>

<h2 class="relative group">The Final Result
    <div id="the-final-result" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-final-result" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>You can see the final result on my <a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-1/#wednesday-29th-flying-to-new-zealand" >New Zealand - Part 1</a> post.
The source code for which can be found <a href="https://github.com/pwhittlesea/thega.me.uk/blob/4240ac7bf0501e542a4228dcd970c63075d68ba0/_posts/2024-09-15-new-zealand-1.md" >here</a>.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>You can see my latest <code>.pre-commit-config.yml</code> <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/blob/main/.pre-commit-config.yaml" >here</a>.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>The &lsquo;Front Matter&rsquo; in posts seemed like the most logical place to store the configuration as we can use it to generate alt text for the maps.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>I reached for Python as I am more familiar with the tool chain; which meant I had to find an alternative to the JavaScript based D3.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>Thanks to <a href="https://stackoverflow.com/a/31013492" >Robert Longson</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="git"/><category term="precommit"/><category term="maps"/><summary type="html">My travel posts lacked visual context, so I added SVG maps to them.</summary></entry><entry><title type="html">I visited New Zealand - Part 2</title><link href="https://thega.me.uk/holidays/new-zealand-2" rel="alternate" type="text/html" title="I visited New Zealand - Part 2"/><published>2024-09-21T22:22:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-2</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-2"><![CDATA[
<h2 class="relative group">Monday 3<sup>rd</sup>: The Tour Begins
    <div id="monday-3rd-the-tour-begins" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#monday-3rd-the-tour-begins" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>In part one we left off just as our Lord of the Rings themed tour was about to begin.</p>
<p>If you remember, we chose to do a guided tour in the hopes that it would introduce us to parts of New Zealand which we might not choose to visit, or might not know to visit, ourselves.
Red Carpet Tours (which I <a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-1/#red-carpet-tours" >spoke about</a> in part 1) were the tour operators, and they had directed us to meet at the <a href="https://www.sudimahotels.com/en/our-hotels/auckland-airport/" >Sudima Hotel</a> just outside the airport.</p>
<p>It felt wrong to head back to the airport so soon, but we were excited to meet the tour group.</p>
<p>Checking in at the Sudima was like checking in at every other hotel, except they had a big display on the wall telling you how many kW of energy they were generating from solar at that moment.
As a massive nerd I was excited to learn the Sudima had 125kW of solar panels on the roof, and the real-time display in the lobby shows the amount of energy being consumed from the grid, and the panels.
I thought this was a great way to show their commitment to sustainability (and get some good marketing).
You can even see how much is being generated live on their website, which is super cool!
I wish I had taken a picture, but if I ever get solar at home I would love to do the same.</p>
<p>At this point onwards in the trip we pretty much lived out of our suitcase.
We only really own about 4 weeks worth of clothes, so a three-week holiday where we will be encountering summer weather on the north island, and winter weather on the south island, pretty much meant we brought everything we owned with us.</p>
<p>Its sad (or maybe impressive<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>) that we managed to fit all of that in a 130L suitcase and a backpack.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0602_hu_93370d26b464d001.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0602_hu_ddf9d5c5072a2a6d.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0602_hu_e84881f8f6e5658a.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0602_hu_c192f7fc05389229.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0602_hu_ddf9d5c5072a2a6d.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0602_hu_c192f7fc05389229.jpg"
          
          title="Me, at Heathrow Airport, with all of our luggage"
        />
    </span>
  
    <figcaption class="text-center">Me, at Heathrow Airport, with all of our luggage</figcaption>
  
</figure>

<p>I said that I was blown away by the beauty of New Zealand, and I intended this to be a &rsquo;look how beautiful NZ is&rsquo; blog, but this day was mostly spent in proximity to an airport, so I can&rsquo;t give it high marks for attractiveness.</p>
<p>Later that evening we sat down to dinner with the 30 people were going to spend the next 12 days with.
Everyone was so warm and welcoming and my fear that I would stick out like a sore thumb, because I haven&rsquo;t read any of the 
<abbr title="Lord of the Rings">LoTR</abbr>
 books, was unfounded.
I would do shout-outs to everyone here, but they will never read this and there&rsquo;s too many people to list (but in case you do read this, HI GUYS!).</p>

<h2 class="relative group">Tuesday 4<sup>th</sup>: The Road to Rotorua
    <div id="tuesday-4th-the-road-to-rotorua" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tuesday-4th-the-road-to-rotorua" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure>
        <img class="my-0 rounded-md nozoom" src="road_to_rotorua.svg" alt="Auckland to Rotorua, via Tīrau" />
        <figcaption>Auckland to Rotorua, via Tīrau (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-36.9842,174.7837&amp;destination=-38.1383,176.2558&amp;waypoints=-37.9768,175.7560" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>This tour across NZ has to be the only time in my and my partners&rsquo; relationship that I have seen them happy to get up at 6am.
We had been given our itinerary the night before and almost every day called for a pre-dawn start.</p>
<p>Maybe it was the fresh New Zealand air.
Maybe it was the fact our bodies thought we were supposed to be going to sleep, and not waking up.
Maybe it was the allure of seeing all the filming locations of our favourite films.
Or, maybe it was that we got a top-notch fried breakfast every morning<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>The docket for the day begun with us going back to Auckland city center; not 400 m from the hotel we checked out of the day before.</p>
<p>So like Sisyphus, I was doomed to forever travel back and forth between Aucklands city center and its airport&hellip;
However, unlike Sisyphus, I could go to the <a href="https://tours.wetaworkshop.com/unleashed/" >Wētā Workshop Unleashed</a> tour when I got there.</p>

<h3 class="relative group">Wētā Workshop Unleashed
    <div id="weta-workshop-unleashed" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#weta-workshop-unleashed" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Part of what makes The Lord of the Rings trilogy one of my favourite films is the depth of the physical effects.
The attention to detail on all the sets, armour, weapons and costumes gives the films a realism that I have not seen replicated often.
Presumably because it is shockingly expensive.</p>
<p>Wētā Workshop were the company that produced the majority of those props, and I had never really thought much about the process that created them.
The Wētā tour gave me a real sense of the passion and creativity that goes into making, not just LoTR, but many of the other films they have worked on.</p>
<p>The tour featured three fake films — using an existing IP would have been an interesting licensing issue — and through these films they showcased many of the techniques used when making props.</p>
<p>We saw the casting process used to make prosthetics (like Gimli&rsquo;s face), the creation of &lsquo;chain&rsquo; mail for armor, and the transformation of tin foil and clay into stonework for sets.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0743_hu_ddf84a868bd6af65.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0743_hu_f6f94f79da82a2df.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0743_hu_82c8881f2f4d58ca.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0743_hu_3057d34e4dac4b52.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0743_hu_f6f94f79da82a2df.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0743_hu_3057d34e4dac4b52.jpg"
          
          title="I&amp;#39;m dying inside because I wanted to go to the All Black Experience"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0748_hu_5871783230efb6b1.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0748_hu_86699bb51bac37f2.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0748_hu_bc7183b04498f9f0.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0748_hu_61f577877be6205d.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0748_hu_86699bb51bac37f2.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0748_hu_61f577877be6205d.jpg"
          
          title="It&amp;#39;s a good job they turned to stone"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0757_hu_a85236dbca1447e1.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0757_hu_b6859ef8f891c8e.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0757_hu_a434f2d43670e610.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0757_hu_2339f48363202839.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0757_hu_b6859ef8f891c8e.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0757_hu_2339f48363202839.jpg"
          
          title="A special entrance for a special tour"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0764_hu_4579b89091dadfdc.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0764_hu_67085aa0b3d38920.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0764_hu_adf3b83ca90330ef.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0764_hu_1c1457dd7dd4de00.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0764_hu_67085aa0b3d38920.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0764_hu_1c1457dd7dd4de00.jpg"
          
          title="The health and safety officer helping us stay safe"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0766_hu_1aa746793e946ddb.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0766_hu_8de7a6188bb56644.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0766_hu_c6c21dd1d48b9322.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0766_hu_16ef7c0173cf0e35.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0766_hu_8de7a6188bb56644.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0766_hu_16ef7c0173cf0e35.jpg"
          
          title="Various models and prototypes"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0774_hu_2b555a91f78bd5c2.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0774_hu_823a1d69dddc24de.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0774_hu_7b72de80a4337afe.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0774_hu_6750479a77469792.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0774_hu_823a1d69dddc24de.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0774_hu_6750479a77469792.jpg"
          
          title="Need a hand?"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0778_hu_af4f729295b8cb5.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0778_hu_216f592e6407ac4d.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0778_hu_ccd127ed0022a461.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0778_hu_5f683c15d2274a80.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0778_hu_216f592e6407ac4d.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0778_hu_5f683c15d2274a80.jpg"
          
          title="A Wētā recreation that looks lifelike"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0786_hu_e88e4dbbf0fa8267.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0786_hu_f36e20431ad12ce4.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0786_hu_b599328772d65a6d.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0786_hu_e7b0399c0c88cb1.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0786_hu_f36e20431ad12ce4.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0786_hu_e7b0399c0c88cb1.jpg"
          
          title="An example of a &amp;#39;bigature&amp;#39;"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0796_hu_fc2a19840206c244.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0796_hu_a1f3c30925114ec5.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0796_hu_26cc4c95c3fced4.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0796_hu_3ef51526c58ac1d4.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0796_hu_a1f3c30925114ec5.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0796_hu_3ef51526c58ac1d4.jpg"
          
          title="A tent made from garden flotsam"
        />
    </span>
  
    <figcaption class="text-center">Wētā Unleashed was visually astounding</figcaption>
  
</figure>

<p>Later in the week we would be going to see the physical locations used for filming, but it was really eye-opening to see a bit of the magic behind the camera as well.
It was a fun <em>and educational</em> tour<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>; I would describe my feeling afterwards as one of child-like glee.</p>
<p>I would recommend it to anyone going to Auckland.</p>
<p>Wētā really gave off the vibe of a fun place to be and was &rsquo;the place to work&rsquo; if you came to be in New Zealand.</p>

<h3 class="relative group">Tīrau
    <div id="tīrau" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#t%c4%abrau" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>It was time to head south.</p>
<p>We were spending the night in the <a href="https://www.millenniumhotels.com/en/rotorua/millennium-hotel-rotorua/" >Millennium Hotel</a> in a town called Rotorua which was a paltry 230 km away by coach.</p>
<p>It was about 3 hours door-to-door and, although <em>Shadowfax</em> (that&rsquo;s what the tour called the coach) was comfortable, 3 hours is a lot to do in one go.
So we stopped en-route in a lovely town called <a href="https://en.wikipedia.org/wiki/T%C4%ABrau" >Tīrau</a>.</p>
<p>Normally the places you stop to grab a bite to eat (or to use the bathroom) whilst on a road trip, are a means to an end.
Places of no note that serve a purpose.</p>
<p>Tīrau was the opposite.
The town seemed to have found &ldquo;it&rsquo;s thing&rdquo; in the form of corrugated iron art works.</p>
<p>Functional buildings with a fun exterior that no sane person could drive past without stopping.
Who could pass up the opportunity to go to the bathroom inside a giant metal dog?</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/featured_hu_7dd20dfdb7529a12.jpg 330w, /2024/09/i-visited-new-zealand-part-2/featured_hu_7211cd049ede2ba2.jpg 660w, /2024/09/i-visited-new-zealand-part-2/featured_hu_a1ed0b4769f0f3e.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/featured_hu_b3ec0778905518df.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/featured_hu_7211cd049ede2ba2.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/featured_hu_b3ec0778905518df.jpg"
          
          title="Tīrau&amp;#39;s corrugated iron &amp;#39;ram&amp;#39; and &amp;#39;sheep&amp;#39; buildings"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0809_hu_1cf6e316141f9faa.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0809_hu_5ec1d03be6e7f426.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0809_hu_dc120e604fcaf2e4.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0809_hu_b8665205bdfcf113.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0809_hu_5ec1d03be6e7f426.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0809_hu_b8665205bdfcf113.jpg"
          
          title="Tīrau&amp;#39;s corrugated iron &amp;#39;dog&amp;#39; building"
        />
    </span>
  
    <figcaption class="text-center">These functional buildings made me unreasonably happy</figcaption>
  
</figure>

<p>A special mention to <a href="https://maps.app.goo.gl/PCHNN2gQk8P4eRREA" >Poppys Café</a> who not only had a giant corrugated iron poppy on the roof, but also served the cutest heart shaped Paninis:</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0806_hu_ca4e311b657ba56.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0806_hu_e013dedafda5cb65.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0806_hu_c3a7a4fc1459091d.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0806_hu_aeb02b9e2060af40.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0806_hu_e013dedafda5cb65.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0806_hu_aeb02b9e2060af40.jpg"
          
          title="Tasty, and adorable!"
        />
    </span>
  
    <figcaption class="text-center">Tasty, and adorable!</figcaption>
  
</figure>

<p>We got back on the road after a quick stop in the souvenir shop shaped like a giant sheep.</p>

<h3 class="relative group">Rotorua
    <div id="rotorua" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#rotorua" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>As we drove into Rotorua I was reminded of the small towns you see on TV shows set in America.
Shops lining either side of a wide road, with diagonal parking spaces between the road and the storefronts.
Somewhere a local sheriff would wander down wishing townspeople well.</p>
<p>We took a small detour past the Rotorua Museum, a half-timbered Elizabethan building with extensive gardens.
It caught me off guard because it was very different to everything else I had seen in New Zealand so far.</p>
<p>Night was setting in, so I suspect we didn&rsquo;t see the Museum in its full glory, if I ever go back I intend to stop by and admire it more.</p>
<p>When we finally arrived at the hotel, we stepped off the coach.</p>
<p>To quote the <a href="https://en.wikipedia.org/wiki/Rotorua" >Wikipedia page</a> for Rotorua:</p>
<blockquote><p>A common nickname for Rotorua is &ldquo;Sulphur City&rdquo; due to the hydrogen sulphide emissions, which gives the city a smell similar to &ldquo;rotten eggs&rdquo;.</p>
</blockquote><p>The second we got off the coach I was instantly reminded of the geothermal springs I had visited years before, in Iceland.
The smell was inescapable the whole time we were outside the hotel, which was next to the dense sulphur pockets east of the town center.
You get used to it, but it caught me off guard.</p>
<p>As I said in the previous blog, the hotels organised by the tour were very nice.
Even though our room had a view of the car park, the hotel was well positioned in the center of town, so we didn&rsquo;t mind.</p>

<h3 class="relative group">Mitai Maori Village
    <div id="mitai-maori-village" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mitai-maori-village" aria-label="Anchor">#</a>
    </span>
    
</h3>
<figure>
        <img class="my-0 rounded-md nozoom" src="mitai.svg" alt="Our Hotel to Mitai Maori Village" />
        <figcaption>Our Hotel to Mitai Maori Village (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=-38.1383,176.2558&amp;destination=-38.1066,176.2208" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>We had just enough time to drop our stuff off in the hotel room and grab a cup of tea<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>, before we were back on the road.</p>
<p>This evening&rsquo;s activity was the <a href="https://www.mitai.co.nz/" >Mitai Māori Village</a> experience.</p>
<p>A very friendly Māori man driving an old Japanese school bus picked us up.
I, like many of my peers, are a bit wider than I was at school; so I spent most of the journey half sitting in my partners lap, and half falling into the aisle of the bus.
Still, it was a pleasant journey, allowing us to see the city lights at night.</p>
<p>We had not really encountered the culture of those indigenous to New Zealand, so this experience was well received.</p>
<p>We started the evening with a walk down through the ancient village to witness a demonstration of warriors paddling a canoe down the Wai-o-Whiro stream.
If I were minding my own business and a group rowing down the river were chanting, removing the element of surprise for an attack, I would assume they are bad-asses and that I should surrender immediately.</p>
<p>After the river demonstration we enjoyed a &lsquo;hāngī&rsquo; buffet — cooked in an earth-oven — where we got to ask questions and learn about the Māori culture.</p>







<figure >
  <span class="not-prose tw:grid tw:grid-cols-1 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-2/new_zealand_0810_hu_cdbd45f65bbcbfef.jpg 330w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0810_hu_a8c8ac5731f7209a.jpg 660w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0810_hu_fc9f08b9ba170f4b.jpg 1024w, /2024/09/i-visited-new-zealand-part-2/new_zealand_0810_hu_1ea9547146656b48.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0810_hu_a8c8ac5731f7209a.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-2/new_zealand_0810_hu_1ea9547146656b48.jpg"
          
          title="The hāngī"
        />
    </span>
  
    <figcaption class="text-center">The hāngī</figcaption>
  
</figure>

<p>The main event was a cultural performance where we learnt about &rsquo;ta moka&rsquo; (tattoo art), and the weaponry used by the Māori.
This culminated with a haka which was <em>legitimately</em> scary to see up close; even though I knew I was not in any danger.</p>
<p>On the way back to the coach we swung past a patch of glow-worms (another animal we had never seen before).</p>
<p>I can see why this experience was included on our tour.
Personally I would say it&rsquo;s a must-see if you&rsquo;re in the area (and maybe even if you are not).</p>

<h2 class="relative group">Wednesday 5<sup>th</sup>: Hobbiton
    <div id="wednesday-5th-hobbiton" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wednesday-5th-hobbiton" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I feel like I&rsquo;m leading you on because Hobbiton is often seen as the &rsquo;the main event&rsquo; (and is probably all you&rsquo;re reading this for).
However, I&rsquo;m going to leave it here for part 2.</p>
<p>This &lsquo;quick travel blog&rsquo; is swiftly becoming a significant undertaking.</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2024/10/i-visited-new-zealand-part-3/" >part 3</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Several people commented on this during the tour with surprise, so I am going to take it as impressive (and not that they thought we smelled).&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Hotels in the UK need to go learn how to make scrambled egg from NZ because I would move there for the scrambled eggs alone.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Plus, there was a pretty cool shop where we could buy lots of LoTR gifts for our friends.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>It was at this point I started hoarding tea bags at breakfast.
Each hotel only gave us two between us and as a Brit, that&rsquo;s not enough.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">Our tour begins, showcasing the magic behind the movies, New Zealand culture, and history.</summary></entry><entry><title type="html">I visited New Zealand - Part 1</title><link href="https://thega.me.uk/holidays/new-zealand-1" rel="alternate" type="text/html" title="I visited New Zealand - Part 1"/><published>2024-09-15T20:00:00+00:00</published><updated>2025-04-27T11:49:52+00:00</updated><id>https://thega.me.uk/holidays/new-zealand-1</id><content type="html" xml:base="https://thega.me.uk/holidays/new-zealand-1"><![CDATA[
<h2 class="relative group">Short Notice
    <div id="short-notice" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#short-notice" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Ever since <a href="https://www.imdb.com/title/tt0120737/" >The Lord of the Rings: The Fellowship of the Ring</a> film was released in 2001, it has been a bucket list item of my other half to visit New Zealand.
They have read <a href="https://en.wikipedia.org/wiki/The_Hobbit" >The Hobbit</a> many times, so when the film put the universe on screen, they had to go see the country behind all those beautiful panning shots.</p>
<p>From an extensive amount of research on the best way to see the country, we decided that we wanted to do a <a href="https://www.redcarpet-tours.com/" >Red Carpet Tour</a>.
We could self-guide our way around, visiting all the places separately, but the idea of the Tour appealed to us.
If there were any issues the tour company would manage them for us and, if we were lucky, we would get to see some lesser known spots that only the locals knew about.</p>
<p>The idea of travelling up and down New Zealand on a coach full of 
<abbr title="Lord of the Rings">LoTR</abbr>
 nerds filled me with dread because I had never read the books.
But, I reminded myself, this was a <em>film location tour</em>, the nerds going were film fans; I should be able to blend in.</p>
<p>Red Carpet Tours are booked <em>far</em> in advance (as of writing they are booked up for the next three years) so we signed up to their mailing list to catch any cancellations.</p>
<p>We waited&hellip;</p>
<p>And we waited&hellip;</p>
<p>Then, almost as we had forgotten about it, on the 18<sup>th</sup> September 2023, we received word that an opening had appeared on the June 12 Day winter<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> tour, and my credit card was hurled into the fires of Mordor.</p>
<p>Was it expensive, yes.
Was it worth every penny, absolutely.</p>
<p>In quick succession the tour and flights were booked.
We took a gamble on getting the time off from work and being able to find pet care; the opportunity to go on the tour was not &lsquo;once in a lifetime&rsquo; but it was rare.</p>
<p>Luckily I work for a very understanding manager who knows how much I have wanted to visit New Zealand for years.
That, and the fact I&rsquo;m an architect (what do we really do anyway), meant I was able to take 3 weeks off in one go.</p>
<p>The tour was only 12 days, but there were 3 days of flying, plus I wanted to add a couple of days before and after, in the event of any flight shenanigans.</p>

<h2 class="relative group">Red Carpet Tours
    <div id="red-carpet-tours" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#red-carpet-tours" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>I want to take a second to sing the praises of the team at <a href="https://www.redcarpet-tours.com/about-us" >Red Carpet Tours</a>.
Julie James, who was our tour guide, was everything we could ask for.</p>
<p>A handful of issues occurred during the tour, but Julie handled all of it in her stride.</p>
<p>Winter weather brought some significant rain, but we didn&rsquo;t really notice because Julie and the team re-ordered the days, so we were inside when the weather was its worst.
I hate to think about the amount of reorganisation that takes, but I guess it was helped by the good relationships with local companies that Red Carpet Tours maintains.</p>
<p>We got to see lots of filming locations and Julie was constantly giving us background and trivia for everything we saw.
This blog is going to exclude a lot of the details of the tour days because I think it wouldn&rsquo;t be fair to the team at Red Carpet Tours if I gave away their secrets.</p>
<p>The tour organised all the evening accommodation for us and I feared that they would have booked us in the worst hotels to increase their profit<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.
This could not have been further from the truth.
Every hotel room we stayed in was spacious and many had <a href="/2024/09/i-visited-new-zealand-part-1/featured.jpg" >phenomenal views</a>.
They were centrally located in every town we stayed in, and I doubt I could have booked nicer ones myself.</p>
<p>The worst part of the tour was a dates mix-up in the initial email that gave us the 13<sup>th</sup> as the departure day, when it was actually the 12<sup>th</sup>.
Turning lemons into lemonade, the whole tour group didn&rsquo;t actually mind as it gave us an extra day to visit various sights (we went to Milford Sound).</p>
<p>Overall, I don&rsquo;t think anything we self organised would have been as fun as what we got.
We met an amazing group of people and by the end of the tour some tears were shed that it was over.</p>
<p>Thank you, Julie and the team!</p>

<h2 class="relative group">We&rsquo;re going on an <del>Adventure</del> Tour
    <div id="were-going-on-an-adventure-tour" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#were-going-on-an-adventure-tour" aria-label="Anchor">#</a>
    </span>
    
</h2>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="it-begins"
    width="472"
    height="200"
    src="/2024/09/i-visited-new-zealand-part-1/and_so_it_begins.gif"
    srcset="/2024/09/i-visited-new-zealand-part-1/and_so_it_begins.gif 800w, /2024/09/i-visited-new-zealand-part-1/and_so_it_begins.gif 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/09/i-visited-new-zealand-part-1/and_so_it_begins.gif"></figure>

<h3 class="relative group">Wednesday 29<sup>th</sup>: Flying to New Zealand
    <div id="wednesday-29th-flying-to-new-zealand" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wednesday-29th-flying-to-new-zealand" aria-label="Anchor">#</a>
    </span>
    
</h3>
<figure>
        <img class="my-0 rounded-md nozoom" src="london_to_auckland.svg" alt="London to Auckland" />
        <figcaption>London to Auckland (<a href="https://www.google.com/maps/dir/?api=1&amp;origin=51.4775,-0.4614&amp;destination=-37.0081,174.7917" >Open in Google Maps</a>)</figcaption>
    </figure>
<p>When flying halfway around the planet to <em>basically</em> the antipode of where I live, I wanted to leave a bit of buffer.
If we had a delay or cancellation we might end up losing a few days finding a new flight.</p>
<p>The week before we flew, the same flight number (SQ321) <a href="https://www.bbc.co.uk/news/articles/cw55192rd9lo" >experienced severe turbulence</a> resulting in dozens of critical injuries and one death.
Needless to say, any time there was turbulence on our flight I told my other half I loved them, fearing it was the last time.
It wasn&rsquo;t helped that the last 3 hours of the flight was plagued with turbulence so bad the wings were flapping like the plane was attempting to &lsquo;fly the natural way&rsquo;.</p>
<p>Given all that, we flew from Heathrow to Auckland via Singapore without any delays.
Singapore Airlines were fantastic, and the Premium Economy seats my partner bullied me into booking were quite comfortable.</p>

<h3 class="relative group">Friday 31<sup>st</sup>: Naps on the 35<sup>th</sup> Floor
    <div id="friday-31st-naps-on-the-35th-floor" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#friday-31st-naps-on-the-35th-floor" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Arriving at Auckland I was not as overjoyed to be in New Zealand as I expected, but I was overjoyed to see the bed in my hotel room after 31 hours of travel.
We promptly dozed on and off for the next 6 hours; catching up on at least one night&rsquo;s sleep.</p>
<p>Upon rising, our body clocks having given up guessing what time it was, we did the only thing one can do.
We went to the rooftop bar.</p>
<p>If you are ever in Auckland I can recommend the <a href="https://www.ihg.com/voco/hotels/gb/en/auckland/aklcn/hoteldetail" >voco in Auckland City Centre</a>.
They let us check in early and check out late.
Maybe they were taking pity on us having travelled halfway around the planet, but it was appreciated.</p>
<p>We liked it so much we stayed there on our way back and would go again for the views alone.</p>
<p>If we didn&rsquo;t have such a <a href="/2024/09/i-visited-new-zealand-part-1/new_zealand_0733.jpg" >mind-blowing view</a> from our room on the 35<sup>th</sup> floor then I would say the views from the rooftop bar on the 38<sup>th</sup> would have dropped my jaw.
Auckland reminded me of London, except not as claustrophobic.
Maybe it was the fact we were staying in the business district, but the city as a whole seemed quiet while we were there.</p>

<h3 class="relative group">Saturday 1<sup>st</sup>: Waiheke Island
    <div id="saturday-1st-waiheke-island" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#saturday-1st-waiheke-island" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>We have gotten in the habit of not booking everything before we go anywhere; instead only booking key events that might sell out, and then seeing what the weather is like on the day.
This paid off for us because the weather the next day was <em>warm</em>.
Like summer shorts warm.
In &lsquo;winter&rsquo;.</p>
<p>We took the opportunity to get the ferry over to Waiheke Island and sample some <a href="https://en.wikipedia.org/wiki/Waiheke_Island_wine_region" >wines the island</a> is famous for.
Everyone else had the same idea as us and the ferry was <em>rammed</em>.</p>
<p>Once we got to the island we took advantage of the <a href="https://www.fullers.co.nz/destinations-and-experiences/experiences/day-tours/hop-on-hop-off-explorer-bus/" >Hop-on, Hop-off bus</a> with the hopes of seeing a handful of vineyards.</p>
<p>We were worried that when we left the UK we would be leaving summer behind, potentially missing it.
However, summer seemed to follow us to each of the vineyards, and we enjoyed the relaxed atmosphere each one had to offer.</p>
<p>You could argue that we relaxed too much and that handful of vineyards turned into two and a brewery &#x1f37a;.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-1/new_zealand_0647_hu_419679a30aa26cd0.jpg 330w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0647_hu_db6aa609271762c.jpg 660w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0647_hu_69f5e50cfb904a02.jpg 1024w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0647_hu_e2c69f2a172db3eb.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0647_hu_db6aa609271762c.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0647_hu_e2c69f2a172db3eb.jpg"
          
          title="The Waiheke Bay"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-1/new_zealand_0648_hu_f876b1ff36479dc8.jpg 330w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0648_hu_633faf7c8dafeccc.jpg 660w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0648_hu_ddf9b9486b9c5d29.jpg 1024w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0648_hu_3f9e48c290622f43.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0648_hu_633faf7c8dafeccc.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0648_hu_3f9e48c290622f43.jpg"
          
          title="More Waiheke Bay"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-1/new_zealand_0652_hu_7ec5a6288415f9a.jpg 330w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0652_hu_8e946bfb9d525e58.jpg 660w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0652_hu_ba2d22d3d0518d85.jpg 1024w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0652_hu_ef51b81b27eedeb9.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0652_hu_8e946bfb9d525e58.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0652_hu_ef51b81b27eedeb9.jpg"
          
          title="The view out over Stonyridge Vineyard"
        />
    </span>
  
    <figcaption class="text-center">Waiheke Island was tranquil</figcaption>
  
</figure>

<p><a href="https://stonyridge.com/" >Stonyridge Vineyard</a> was our first stop, and it <em>set the tone</em>.
The view out over the vineyard (pictured above), the sounds of nature, and the comfy chairs, convinced us to have some food and stay a while.
A good set of wines, but not the best of the day.
We eventually had to peel ourselves away, or we weren&rsquo;t going to be able to see any other vineyards.</p>
<p>The next stop was just down the road, the <a href="https://www.sohowineco.com/waiheke-cellar-door#visit" >Soho Family Vineyards Cellar Door</a>.
Less of a vineyard and more of an outdoor bar with a food van next to it.
We enjoyed the wine more than at Stonyridge and the vibe, although less exclusive, was still relaxing.</p>
<p>Finally, we saw the day out in <a href="https://www.theheke.co.nz/" >The Heke</a>, sat on two barrels, with some smashing food.
No wine, but the beers (more my speed) were refreshing.</p>
<p>The days were short, so we headed back to Auckland.</p>
<p>On the boat back we did what any middle-aged couple would do, and we checked out the house prices on the island.</p>
<figure style="width: 50%;"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="oof-size-large"
    width="979"
    height="519"
    src="/2024/09/i-visited-new-zealand-part-1/oof_hu_6a7de008b142dbd1.jpg"
    srcset="/2024/09/i-visited-new-zealand-part-1/oof_hu_6a7de008b142dbd1.jpg 800w, /2024/09/i-visited-new-zealand-part-1/oof.jpg 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/09/i-visited-new-zealand-part-1/oof.jpg"></figure>
<p>At the time we thought that we had visited what would be called an &lsquo;<a href="https://en.wikipedia.org/wiki/Area_of_Outstanding_Natural_Beauty" >Area of Outstanding Natural Beauty</a>&rsquo; in the UK, not knowing then that most of New Zealand seems to fit that description.</p>

<h3 class="relative group">Sunday 2<sup>nd</sup>: Auckland Zoo
    <div id="sunday-2nd-auckland-zoo" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sunday-2nd-auckland-zoo" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>I&rsquo;m going to speculate a Zoo can tell you a lot about a country.
If a country cares for its animals, then I suppose that the Zoo will carefully balance the needs of the animals against them being an attraction, instead of primarily being &lsquo;on display&rsquo; to entertain people.</p>
<p><a href="https://www.aucklandzoo.co.nz/" >Auckland Zoo</a> has to be, hands down, the best zoo I have ever been to.
Every single animal seemed to have a spacious enclosure that looked like it catered to the ecosystem each animal is from.</p>
<p>TripAdvisor told us to plan to spend about 3 hours here, but we probably spent about double that.
We must have been the luckiest guest to ever visit because we caught almost every animal during feeding time.</p>
<p>I remember my other half saying:</p>
<blockquote><p>It&rsquo;s not everyday you see an animal you haven&rsquo;t seen before, and today we&rsquo;ve seen both a Tasmanian Devil and a Kiwi.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
</blockquote><p>I&rsquo;ll be honest, I never put too much thought into the Kiwi, but I thought it looked fictional; like the <a href="https://en.wikipedia.org/wiki/Wild_haggis" >Wild Haggis</a><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>.
I was happy to find out it wasn&rsquo;t because it&rsquo;s adorable!</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-1/new_zealand_0690_hu_36f56060b07deeea.jpg 330w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0690_hu_bec0dd66a67b829c.jpg 660w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0690_hu_91ec3e2bea51608.jpg 1024w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0690_hu_a5a369f9a8f12351.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0690_hu_bec0dd66a67b829c.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0690_hu_a5a369f9a8f12351.jpg"
          
          title="The Nocturnal Kiwi"
        />
        <img
          class="rounded-md"
          srcset="/2024/09/i-visited-new-zealand-part-1/new_zealand_0705_hu_95b969189ee81d05.jpg 330w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0705_hu_3480fd233e6ebc43.jpg 660w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0705_hu_d02b4184510a5208.jpg 1024w, /2024/09/i-visited-new-zealand-part-1/new_zealand_0705_hu_eb8a24d312ec2d05.jpg 2x"
          src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0705_hu_3480fd233e6ebc43.jpg"
          data-zoom-src="/2024/09/i-visited-new-zealand-part-1/new_zealand_0705_hu_eb8a24d312ec2d05.jpg"
          
          title="The Tasmanian Devil"
        />
    </span>
  
    <figcaption class="text-center">Animals I had never seen before</figcaption>
  
</figure>

<p>One of the things we did book before we got to New Zealand was the <a href="https://skycityauckland.co.nz/sky-tower/" >Sky Tower</a>.
We heard it was something we shouldn&rsquo;t miss and that it gets booked up quick.</p>
<p>The Sky Tower is tall, I&rsquo;ll give it that.
I think that a rotating restaurant in the sky is a great idea.</p>
<p>The fog that rolled in disagreed, and we got to spend the evening looking a white wall of it.</p>
<p>3/10 would fog again.</p>

<h3 class="relative group">Monday 3<sup>rd</sup>: The Tour Begins
    <div id="monday-3rd-the-tour-begins" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#monday-3rd-the-tour-begins" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>I&rsquo;m going to leave it here for part 1.
This feels like a good stopping point.</p>
<p>Kia Ora!
See you in <a href="https://thega.me.uk/2024/09/i-visited-new-zealand-part-2/" >part 2</a>!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I still struggle to call a June tour a &lsquo;winter tour&rsquo; but NZ is on the other side of the planet &#x1f937;&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>#capitalism&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>We are ignoring birds here, there&rsquo;s a bunch of those everywhere.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>I&rsquo;m sorry New Zealand, please let me in again!&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="holidays"/><category term="new zealand"/><summary type="html">I know you shouldn&amp;rsquo;t get swept away by the small snippet you see of a county when you go on holiday, but I did. New Zealand stole my heart and I wish I could move there.</summary></entry><entry><title type="html">My ThinkPad won't wake up</title><link href="https://thega.me.uk/hardware/x260-suspend" rel="alternate" type="text/html" title="My ThinkPad won't wake up"/><published>2024-09-13T21:23:00+00:00</published><updated>2024-10-21T20:30:48+00:00</updated><id>https://thega.me.uk/hardware/x260-suspend</id><content type="html" xml:base="https://thega.me.uk/hardware/x260-suspend"><![CDATA[<p>Last week I upgraded my ever-reliable Lenovo x260 ThinkPad to Ubuntu 24.04.</p>
<p>Somewhere in the hour long install process the installer asked me to replace my <code>/etc/default/grub</code> file with the default one in the installer.</p>
<p>I didn&rsquo;t remember updating this file, ever, so I accepted the defaults.</p>
<p>Isn&rsquo;t Ubuntu wonderful, I thought, major version updates are so smooth!
However, little did I know, that due to <a href="https://bugs.launchpad.net/ubuntu/&#43;source/linux/&#43;bug/2031969/" >a little documented issue</a> I would not be able to wake my laptop from a suspended state anymore.</p>
<p>When I close the lid, my laptop sleeps, never to be woken from its slumber; stirred only by the harsh application of a long-press of the power button to hard reset it.</p>
<p>My first guess at a cause was a bad upgrade, so I installed a fresh copy of 24.04, which yielded no love.</p>
<p>After a suspicion my hardware was no longer supported, I reinstalled 22.04 to little joy.</p>
<p>Maybe it was the boot drive encryption I dutifully enabled? No such luck.</p>
<p>After 3 fresh installs I scoured forums, until I came across <a href="https://bugs.launchpad.net/ubuntu/&#43;source/linux/&#43;bug/2031969/comments/27" >a comment</a> on the issue above:</p>
<blockquote><p>Simon Clift (ssclift-gmail) wrote 21 hours ago: #27</p>
<p>I&rsquo;m not sure exactly why, but this worked:</p>
<p><a href="https://www.reddit.com/r/debian/comments/t03sd2/fresh_install_on_t460_laptop_wont_wake_after/" >https://www.reddit.com/r/debian/comments/t03sd2/fresh_install_on_t460_laptop_wont_wake_after/</a></p>
<p>Change the /etc/default/grub command line to</p>
<p>GRUB_CMDLINE_LINUX_DEFAULT=&ldquo;quiet splash intel_iommu=off&rdquo;</p>
<p>and my Thinkpad Carbon X1 (G4?) sleeps and wakes up as expected. I experienced the problem of not waking up after sleep on Ubuntu 22.04 and 24.04.</p>
</blockquote><p>This rang a bell, had I changed this file before?
Maybe?</p>
<p>Anyway, a quick edit of my grub config file later and success!
My ThinkPad is usable again!</p>
<p>Thanks, Simon Clift, wherever you are!</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#75715e"># Added this in to help with not being able to resume from suspend</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2031969/comments/27</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Run sudo update-grub after!</span>
</span></span><span style="display:flex;"><span>GRUB_CMDLINE_LINUX_DEFAULT<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;quiet splash intel_iommu=off&#34;</span></span></span></code></pre></div></div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="hardware"/><category term="thinkpad"/><summary type="html">Last week I upgraded my ever-reliable Lenovo x260 ThinkPad to Ubuntu 24.04, and it would no longer wake up from a suspend state.</summary></entry><entry><title type="html">Project Decomposition</title><link href="https://thega.me.uk/code/project-decomposition" rel="alternate" type="text/html" title="Project Decomposition"/><published>2024-07-21T12:00:00+00:00</published><updated>2024-10-21T20:30:48+00:00</updated><id>https://thega.me.uk/code/project-decomposition</id><content type="html" xml:base="https://thega.me.uk/code/project-decomposition"><![CDATA[<p>As an architect, I frequently assist software engineers in breaking down project scope into manageable chunks.
Here is one of the techniques I use.</p>
<!-- markdownlint-disable MD028 -->
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Update 2024/07/25
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>So this process should be called &lsquo;User Story Mapping&rsquo; and is featured in its own <a href="https://www.oreilly.com/library/view/user-story-mapping/9781663728661/" >O&rsquo;Reilly book</a> by Jeff Patton and Roy McCrerey.</p>
<p>I struggled to find anything about it because I did not know the correct name.
But now I do, I have found lots of <em>far</em> better blogs out there on this process (e.g. <a href="https://www.easyagile.com/blog/the-ultimate-guide-to-user-story-maps/" >1</a>, <a href="https://plan.io/blog/user-story-mapping/" >2</a> and <a href="https://www.nngroup.com/articles/user-story-mapping/" >3</a>).</p>
<p>There is also a <a href="https://www.youtube.com/watch?v=AorAgSrHjKM" >video</a> featuring one of the authors of the book.</p>
<p>In fact, this blog probably now only serves as a writing exercise &#x1f604;.
I plan on buying and reading the book so I can correct all the terminology on this page.</p></div></div><div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="info">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
</span></div>
        <div class="grow">
          Original 2024/07/21
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>&#x1f499; I do not know the origin of this process, but if you do, let me know so I can attribute it correctly.</p></div></div><!-- markdownlint-enable MD028 -->

<h2 class="relative group">Why do we need decomposition?
    <div id="why-do-we-need-decomposition" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-do-we-need-decomposition" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>When given a new project, it&rsquo;s very easy for a team to balk at the full scope of what they are being asked to achieve.</p>
<blockquote><p>You want us to build a social media site for ducks?
From scratch?
That&rsquo;s going to take years!</p>
<p>— The Engineering Team</p>
</blockquote><p>Any project of sufficient size will need to be broken down into tasks for the team to work on; but where do you start?</p>
<p>I have spent over a decade delivering projects in teams that follow <a href="https://en.wikipedia.org/wiki/Agile_software_development" >the agile manifesto</a> and I have used this process for many years, but I believe this will also help in other delivery styles as well, particularly <a href="https://en.wikipedia.org/wiki/Waterfall_model" >waterfall</a>.</p>

<h2 class="relative group">The Process
    <div id="the-process" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-process" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">Step 1 - Feature Enumeration
    <div id="step-1---feature-enumeration" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-1---feature-enumeration" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Get the engineers to enumerate the aspects/features of what you want to build.
These don&rsquo;t have to be detailed, because at this stage you almost definitely don&rsquo;t know the full scope of what you are building or how the technology involved actually functions.</p>
<p>In our example above we are making a social media site for Ducks.
This will almost certainly require a Front end with Javascript and CSS, but will also need a collection of back end APIs<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> to power it.</p>
<p>Write these aspects down as columns of a table, lets focus on just the back end APIs;</p>
<!-- markdownlint-disable MD033 -->
<table>
<thead>
<tr>
<th style="text-align:center">Post APIs</th>
<th style="text-align:center">User Settings APIs</th>
<th style="text-align:center">Authentication</th>
<th style="text-align:center">Threat Protection</th>
<th style="text-align:center">Logging</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<!-- markdownlint-enable MD033 -->
<p>Here we have a couple of randomly selected aspects of the APIs (for very large projects I&rsquo;ve seen ~100 columns):</p>
<ul>
<li>Post APIs - support the users Posts pages</li>
<li>User Settings APIs - support the user&rsquo;s Settings page</li>
<li>Authentication - Checking the caller is who the caller says they are</li>
<li>Threat Protection - We have lots of competitors who want to see us fail, how do we make sure they don&rsquo;t break our service?</li>
<li>Logging - What logs should our back end create?</li>
</ul>
<p>Teams will not manage to put everything here first time, as they work through this process they will discover more.</p>
<div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="warning">
      <div class="flex items-center gap-2 font-semibold text-inherit">
        <div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"><span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span></div>
        <div class="grow">
          Warning
        </div>
      </div><div class="admonition-content mt-3 text-base leading-relaxed text-inherit"><p>This is a good time to remember all of those other business systems your application needs to integrate with (like Salesforce)</p></div></div>
<h3 class="relative group">Step 2 - Slicing
    <div id="step-2---slicing" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-2---slicing" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Take each column and write down slices of that aspect, each increasing in value and complexity:</p>
<!-- markdownlint-disable MD033 -->
<table>
<thead>
<tr>
<th style="text-align:center">Post APIs</th>
<th style="text-align:center">User Settings APIs</th>
<th style="text-align:center">Authentication</th>
<th style="text-align:center">Threat Protection</th>
<th style="text-align:center">Logging</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
</tr>
<tr>
<td style="text-align:center">List</td>
<td style="text-align:center">View</td>
<td style="text-align:center">Fixed API Key</td>
<td style="text-align:center">IP Allow List</td>
<td style="text-align:center">Container</td>
</tr>
<tr>
<td style="text-align:center">Create</td>
<td style="text-align:center">Edit</td>
<td style="text-align:center">Generated Keys</td>
<td style="text-align:center" markdown="span">WAF</td>
<td style="text-align:center">Elasticsearch</td>
</tr>
<tr>
<td style="text-align:center">Delete</td>
<td style="text-align:center">Delete Account</td>
<td style="text-align:center">OAuth Tokens</td>
<td style="text-align:center">AWS Shield</td>
<td style="text-align:center">Archive</td>
</tr>
<tr>
<td style="text-align:center">Edit</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
</tr>
</tbody>
</table>
<!-- markdownlint-enable MD033 -->
<p>If we take column 1 &lsquo;Post APIs&rsquo; as an example.
The team could deliver no APIs related to posting.
Then they could deliver an API which allows you to list posts.
Then they could deliver an API which supports listing and creating, and so on.</p>
<p>These slices help the team understand how they can build up to the final solution but <strong>not all slices will need to be delivered</strong>.
Some of the slices will never be needed, like &lsquo;Edit&rsquo; in &lsquo;Post APIs&rsquo;.
We might just decide that we want users to have to delete then re-create posts when they spell something wrong.</p>
<p>At this point the team can take a look at the content in the columns and see if any of them need to be expanded upon.</p>
<p>Now we have the aspects above we can perform the next step; defining the MVP.</p>

<h3 class="relative group">Step 3 - Minimum Viable Product (MVP)
    <div id="step-3---minimum-viable-product-mvp" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-3---minimum-viable-product-mvp" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>The minimum viable product, or MVP, is the simplest version of a product that you need to build to sell it to a market.</p>
<p>— <a href="https://www.atlassian.com/agile/product-management/minimum-viable-product" >Atlassian</a></p>
</blockquote><p>Which slices of each aspect/feature do we need to deliver before we can say we have an acceptable product we can put out into the world.
This might form the first Task/Story/Epic for the team, depending how big the project is.</p>
<p>In my opinion this is the most powerful output of this process; a team being able to <em>visualise</em> when they reach one of the biggest milestones of any delivery.</p>
<p>Obviously this is going to take lots of work with the Product Owner to decide what we do/don&rsquo;t need to do to get to this milestone.</p>
<!-- markdownlint-disable MD033 -->
<table>
<thead>
<tr>
<th style="text-align:center">Post APIs</th>
<th style="text-align:center">User Settings APIs</th>
<th style="text-align:center">Authentication</th>
<th style="text-align:center">Threat Protection</th>
<th style="text-align:center">Logging</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
</tr>
<tr>
<td style="text-align:center">List</td>
<td style="text-align:center">View</td>
<td style="text-align:center">Fixed API Key</td>
<td style="text-align:center;border-bottom:5px solid red">IP Allow List</td>
<td style="text-align:center;border-bottom:5px solid red">Container</td>
</tr>
<tr>
<td style="text-align:center;border-bottom:5px solid red">Create</td>
<td style="text-align:center;border-bottom:5px solid red">Edit</td>
<td style="text-align:center;border-right:5px solid red">Generated Keys</td>
<td style="text-align:center">WAF</td>
<td style="text-align:center">Elasticsearch</td>
</tr>
<tr>
<td style="text-align:center">Delete</td>
<td style="text-align:center">Delete Account</td>
<td style="text-align:center;border-left:5px solid red;border-bottom:5px solid red;border-right:5px solid red">OAuth Tokens</td>
<td style="text-align:center">AWS Shield</td>
<td style="text-align:center">Archive</td>
</tr>
<tr>
<td style="text-align:center">Edit</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
</tr>
</tbody>
</table>
<!-- markdownlint-enable MD033 -->
<p>Here, the team can say that they need to support listing and creating posts, before they can say they are ready to go to market.
Similarly they <em>need</em> to have an API that allows editing user settings, but <strong>not</strong> an API that allows account deletion (for now, users can email us to get their account deleted).
Again, the engineers need to be able to see container logs, but for now we can deal with them not being archived or aggregated into Elasticsearch.</p>
<p>Hopefully by this point the team are beginning to get an idea of <em>what</em> they need to build.</p>

<h3 class="relative group">Step 4 - Minimum Loveable Product (MLP) [optional]
    <div id="step-4---minimum-loveable-product-mlp-optional" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#step-4---minimum-loveable-product-mlp-optional" aria-label="Anchor">#</a>
    </span>
    
</h3>
<blockquote><p>A Minimum Lovable Product (MLP) is an initial offering that users love from the start.
It represents the minimum that is required for customers to adore a product, rather than merely tolerating it.</p>
<p>— <a href="https://www.aha.io/roadmapping/guide/plans/what-is-a-minimum-lovable-product" >Aha</a></p>
</blockquote><p>If we think back to our MVP, we said that we will not allow users to delete their posts if they make a mistake.
This is not a very enjoyable experience for the users, but they <em>might</em> tolerate it.
If we want our users to really <em>love</em> our product we are going to have to deliver more than just the bare minimum.</p>
<p>Time for another line.</p>
<!-- markdownlint-disable MD033 -->
<table>
<thead>
<tr>
<th style="text-align:center">Post APIs</th>
<th style="text-align:center">User Settings APIs</th>
<th style="text-align:center">Authentication</th>
<th style="text-align:center">Threat Protection</th>
<th style="text-align:center">Logging</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
<td style="text-align:center">None</td>
</tr>
<tr>
<td style="text-align:center">List</td>
<td style="text-align:center">View</td>
<td style="text-align:center">Fixed API Key</td>
<td style="text-align:center;border-bottom:5px solid red">IP Allow List</td>
<td style="text-align:center;border-bottom:5px solid blue">Container</td>
</tr>
<tr>
<td style="text-align:center;border-bottom:5px solid red">Create</td>
<td style="text-align:center;border-bottom:5px solid red">Edit</td>
<td style="text-align:center;border-right:5px solid red">Generated Keys</td>
<td style="text-align:center;border-bottom:5px solid blue;border-right:5px solid blue">WAF</td>
<td style="text-align:center">Elasticsearch</td>
</tr>
<tr>
<td style="text-align:center;border-bottom:5px solid blue">Delete</td>
<td style="text-align:center;border-bottom:5px solid blue">Delete Account</td>
<td style="text-align:center;border-left:5px solid red;border-bottom:5px solid blue;border-right:5px solid blue">OAuth Tokens</td>
<td style="text-align:center">AWS Shield</td>
<td style="text-align:center">Archive</td>
</tr>
<tr>
<td style="text-align:center">Edit</td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
<td style="text-align:center"></td>
</tr>
</tbody>
</table>
<!-- markdownlint-enable MD033 -->
<p>We can now see a couple of things playing out:</p>
<ol>
<li>We want our customers to be able to delete their mistakes, so &lsquo;Delete&rsquo; under &lsquo;Post APIs&rsquo; is now included.</li>
<li>We also want our support team to love us; so instead of handling hundreds of &lsquo;Please delete my account&rsquo; emails, we will let customers do it themselves.</li>
<li>Having to provide an IP address is incredibly impractical for 
<abbr title="Business-to-Consumer - a business that sells products or services to consumers">B2C</abbr>
 applications as most customers do not know how do get, or even what an IP address is. IP allow lists are good for getting started but a 
<abbr title="Web Application Firewall - a security system that monitors and controls incoming and outgoing network">WAF</abbr>
 will help us reach more customers by being internet accessible.</li>
</ol>

<h2 class="relative group">Summary
    <div id="summary" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#summary" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Hopefully the above, admittedly convoluted, example helps you understand this process of decomposition.</p>
<p>It should help the team gain some confidence that the project that awaits them is not, in fact, impenetrable.</p>
<p>It should also help the team convert upcoming cards into technical activities, as well as knowing if something needs to be extensible for future slices.
I have even seen teams use this process to schedule spikes into their sprints, to try out prototyping upcoming features that need to be built.</p>
<p>I will admit it blurs the lines of an &lsquo;agile project&rsquo; because it relies on knowing the &rsquo;end state&rsquo; of the project.
But in my (arguably limited) experience, no project is so blurry that you don&rsquo;t know the general goals of the customer.
That, and we are not wasting too much time on this process, we are only discussing what features <em>could</em> exist.</p>

<h2 class="relative group">Parting Thoughts
    <div id="parting-thoughts" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#parting-thoughts" aria-label="Anchor">#</a>
    </span>
    
</h2>
<ol>
<li>Try and do this collaboratively.
Every member of the team member should be present.</li>
<li>Whiteboards are my go to for anything like this, but this requires a co-located team who can come to the office.
A shared space like a Confluence page/Word document will do.</li>
<li>This is a living document.
Change it as you see fit throughout the project.
Security team changed their systems, so now you need to push logs into Azure Sentinel?
Add a slice.</li>
<li>There is no limit on how many lines you should draw.
I&rsquo;ve seen teams do one-per-card.
I&rsquo;ve seen teams do one-per-project.
This is a resource for the team, by the team.</li>
<li>Don&rsquo;t force it if you don&rsquo;t need it.</li>
</ol>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Technically all protocols are APIs but we all use API to mean HTTP Request/Response APIs&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="engineering"/><summary type="html">As an architect, I frequently assist software engineers in breaking down project scope into manageable chunks. Here is one of the techniques I use.</summary></entry><entry><title type="html">One Rule to Build Them All</title><link href="https://thega.me.uk/code/rule-one" rel="alternate" type="text/html" title="One Rule to Build Them All"/><published>2024-05-25T18:56:00+00:00</published><updated>2024-10-21T20:30:48+00:00</updated><id>https://thega.me.uk/code/rule-one</id><content type="html" xml:base="https://thega.me.uk/code/rule-one"><![CDATA[<p>Every business is different, every codebase has debt that needs to be worked around.
Any given project has different success criteria (budget vs. cost vs. scope).</p>
<p>Whenever I read an engineering blog, there is normally some law or rule on offer which I have to carefully evaluate against the codebase I am responsible for.</p>
<p>There is however one rule which I will always follow on any project I work on:</p>
<blockquote><p><strong><em>If it doesn&rsquo;t break your CI/CD pipeline, you don&rsquo;t care about it</em></strong></p>
</blockquote><p>Or alternatively:</p>
<blockquote><p>If you care about <code>something</code>, make <code>something</code> fail the build</p>
</blockquote><p>This &lsquo;rule&rsquo; makes a key assumption; You are running some form of CI/CD (the build) which can fail or pass.
That, and the build pipeline should be a gate that <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks" >stops a PR being merged</a> and the given changes being released to production if it fails.</p>
<p>The most obvious example is your project&rsquo;s automated tests (because you have tests right?):</p>
<blockquote><p>If you care about <code>unit tests</code>, make <code>unit tests</code> fail the build</p>
</blockquote><p>If those tests don&rsquo;t fail your build, you can release with failing tests.
If you have failing tests then you have broken features.
And if you have broken features in production, then you didn&rsquo;t care about it because you didn&rsquo;t make the check fail the build.</p>
<p>This same logic works for many other tools an engineer can use:</p>
<ul>
<li>Static Code Analysis (e.g. <a href="https://pmd.github.io/" >PMD</a>)</li>
<li>Secret Scanning (e.g. <a href="https://github.com/trufflesecurity/trufflehog" >trufflehog</a>)</li>
<li>Code Style (e.g. <a href="https://github.com/diffplug/spotless" >spotless</a>)</li>
<li>&hellip;</li>
</ul>
<p>If someone commits a file indented with Tabs and not Spaces and your code style mandates Spaces, that commit should not be able to get onto <code>main</code> without something failing somewhere.</p>
<p>If someone commits code which introduces a SQL injection vulnerability (which <a href="https://en.wikipedia.org/wiki/Static_application_security_testing" >SAST</a> tools can detect) and you don&rsquo;t prevent that commit from getting to production, then you don&rsquo;t care about SQL injection.</p>
<p>Importantly, any of these <em>normally</em> blocking checks must be able to be bypassed for any given reason.
More importantly, any exclusion <strong>must</strong> be codified:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-diff" data-lang="diff"><span style="display:flex;"><span>commit 091c52859f38a4bb6e1448f68e46ce75a765c639 (HEAD -&gt; main)
</span></span><span style="display:flex;"><span>Author: Phillip Whittlesea-Clark &lt;pw.github@thega.me.uk&gt;
</span></span><span style="display:flex;"><span>Date:   Fri May 10 20:30:06 2024 +0100
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    Adding skipTests as its 4am and I need to fix this production incident
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>diff --git a/build.sh b/build.sh
</span></span><span style="display:flex;"><span>index ce747d2..04a9f1f 100644
</span></span><span style="display:flex;"><span><span style="color:#f92672">--- a/build.sh
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+++ b/build.sh
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">@@ -4,4 +4,4 @@ set +e
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> SCRIPT_DIR=$( cd -- &#34;$( dirname -- &#34;${BASH_SOURCE[0]}&#34; )&#34; &amp;&gt; /dev/null &amp;&amp; pwd )
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">-mvn clean install
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">+mvn clean install -DskipTests
</span></span></span></code></pre></div></div>
<p>Whether it&rsquo;s an <a href="https://pmd.github.io/pmd/pmd_userdocs_suppressing_warnings.html" >annotation</a>, an <a href="https://spotbugs.readthedocs.io/en/stable/filter.html#examples" >ignores file</a>, or a change to a build file, you should have a record of who and why the rule was ignored.</p>
<p>I spend most of my days working on Java codebases built using Maven; here is my current selection of plugins which fail the build:</p>
<ul>
<li><strong><a href="https://github.com/apache/maven-enforcer" >Maven Enforcer Plugin</a></strong> stops the build from including JUnit, Mockito (and other common test libraries) at compile scope.</li>
<li><strong><a href="https://github.com/diffplug/spotless" >Spotless</a></strong> enforces formatting of all Java files using the <a href="https://github.com/palantir/palantir-java-format" >palantir</a> code formatter.</li>
<li><strong><a href="https://checkstyle.sourceforge.io/" >Checkstyle</a></strong> checks that documentation on classes/methods/fields exists (and my favourite check, <a href="https://checkstyle.sourceforge.io/checks/imports/avoidstarimport.html" >AvoidStartImport</a>).</li>
<li><strong><a href="https://pmd.github.io/" >PMD</a></strong> checks for programmer mistakes like missing breaks in switch statements.</li>
<li><strong><a href="https://spotbugs.github.io/" >SpotBugs</a></strong> uses static analysis to look for bugs in Java code.</li>
<li><strong><a href="https://www.jacoco.org/jacoco/" >JaCoCo</a></strong> tracks coverage data and will fail the build if line coverage is less than 85%.</li>
<li><strong><a href="http://find-sec-bugs.github.io/" >Find-Sec-Bugs</a></strong> is an extension to SpotBugs which checks for security vulnerabilities.</li>
<li><strong><a href="https://github.com/jonathanlermitage/oga-maven-plugin" >Old GroupIds Alerter</a></strong> catches the use of dependencies which have been relocated to another Maven Group/Artifact.</li>
</ul>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Me at project kick off"
    width="490"
    height="497"
    src="/2024/05/one-rule-to-build-them-all/one-rule-crow.png"
    srcset="/2024/05/one-rule-to-build-them-all/one-rule-crow.png 800w, /2024/05/one-rule-to-build-them-all/one-rule-crow.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/05/one-rule-to-build-them-all/one-rule-crow.png"></figure>
<p>Tldr; If you care about it, make it fail the build.</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="code quality"/><summary type="html">If you care about it, make it fail the build.</summary></entry><entry><title type="html">A Simple Script Base</title><link href="https://thega.me.uk/code/simple-base-script" rel="alternate" type="text/html" title="A Simple Script Base"/><published>2024-03-30T21:23:00+00:00</published><updated>2024-10-21T20:30:48+00:00</updated><id>https://thega.me.uk/code/simple-base-script</id><content type="html" xml:base="https://thega.me.uk/code/simple-base-script"><![CDATA[<p>Sometimes you just need a script that takes arguments.
This is a simple script which will call different functions based on the first argument from the user.</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/env bash
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>set +e
</span></span><span style="display:flex;"><span><span style="color:#75715e">#set -x # print all executed commands to the terminal</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>SCRIPT_DIR<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span> cd -- <span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span> dirname -- <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>BASH_SOURCE[0]<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span> &amp;&gt; /dev/null <span style="color:#f92672">&amp;&amp;</span> pwd <span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> _red <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    echo -e <span style="color:#e6db74">&#34;\e[1;31m</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">\e[0m&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> _one <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;One stuff&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> _two <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;Two jazz&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> _help<span style="color:#f92672">()</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;Usage: </span><span style="color:#e6db74">${</span>SCRIPT_DIR<span style="color:#e6db74">}</span><span style="color:#e6db74">/example.sh &lt;option&gt;&#34;</span>
</span></span><span style="display:flex;"><span>    echo
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;Options:&#34;</span>
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;    one - The first thing&#34;</span>
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;    two - A second thing&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> test <span style="color:#e6db74">&#34;</span>$#<span style="color:#e6db74">&#34;</span> -lt 1; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>    _red <span style="color:#e6db74">&#34;Illegal number of parameters&#34;</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">case</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> in
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;one&#39;</span><span style="color:#f92672">)</span> _one ;;
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#39;two&#39;</span><span style="color:#f92672">)</span> _two ;;
</span></span><span style="display:flex;"><span>    *<span style="color:#f92672">)</span> _help
</span></span><span style="display:flex;"><span>       exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>       ;;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">esac</span>
</span></span><span style="display:flex;"><span>exit <span style="color:#ae81ff">0</span></span></span></code></pre></div></div>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="bash"/><summary type="html">Sometimes you just need a script that takes arguments. This is a simple script which will call different functions based on the first argument from the user.</summary></entry><entry><title type="html">Simple QR Code Command</title><link href="https://thega.me.uk/code/qrencode" rel="alternate" type="text/html" title="Simple QR Code Command"/><published>2024-03-01T21:34:00+00:00</published><updated>2024-10-21T20:30:48+00:00</updated><id>https://thega.me.uk/code/qrencode</id><content type="html" xml:base="https://thega.me.uk/code/qrencode"><![CDATA[<p>Sometimes you need to open a URL on your phone that you found on your company laptop, but there&rsquo;s no simple way to send it between the two devices.
This simple command allow you to turn a URL into a QR code you can scan on your phone.</p>
<p>For this to work you will need to install <a href="https://formulae.brew.sh/formula/qrencode" ><code>qrencode</code></a>:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>brew install qrencode</span></span></code></pre></div></div>
<p>Place the following in your <code>~/.bashrc</code> file:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#66d9ef">function</span> qr<span style="color:#f92672">()</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>  qrencode <span style="color:#e6db74">&#34;</span>$1<span style="color:#e6db74">&#34;</span> -o /tmp/qr.png; open /tmp/qr.png
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span></span></span></code></pre></div></div>
<p>Now you can run the following which will open a new QR code in Preview:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>qr https://thega.me.uk</span></span></code></pre></div></div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="osx"/><summary type="html">A simple function to create a QR code for a URL, so you can &amp;lsquo;send&amp;rsquo; a link to your phone.</summary></entry><entry><title type="html">Bye-Bye GPG</title><link href="https://thega.me.uk/code/bye-bye-gpg" rel="alternate" type="text/html" title="Bye-Bye GPG"/><published>2024-02-20T12:49:00+00:00</published><updated>2024-10-21T20:30:48+00:00</updated><id>https://thega.me.uk/code/bye-bye-gpg</id><content type="html" xml:base="https://thega.me.uk/code/bye-bye-gpg"><![CDATA[<p>So I have been using GPG to sign my Git commits for about 5 years now and every year, when my keys expire, it&rsquo;s a nightmare to renew the keys for another year.</p>
<p>Now one option would be to make the keys last longer, but that would leave me with the same problem; it&rsquo;s non-intuitive and hard to renew GPG keys.</p>
<p>Add to that the fact that some systems (<strong>cough</strong> OSX) need additional software installed to give you a prompt for the password when you want to unlock the key.
It&rsquo;s just, annoying.</p>
<p>So recently, a blog from <a href="https://code.mendhak.com/keepassxc-sign-git-commit-with-ssh/" >Mendhak</a> pointed me at using SSH keys to sign your Git commits.
Colour me interested.
Maybe this could be easier than managing GPG keys.</p>
<p>Oh, it was everything I dreamed of&hellip;</p>
<p>There are many, many, many blogs on this topic.
There is event extensive documentation on <a href="https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits" >GitHub</a>.
But for my future reference, here are the steps.</p>
<p>Generate a signing key:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>ssh-keygen -t ed25519 -C <span style="color:#e6db74">&#34;your_email@example.com&#34;</span></span></span></code></pre></div></div>
<p>Add the new key to your SSH agent and get the fingerprint for signing:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>ssh-add ~/.ssh/&lt;key_location&gt;
</span></span><span style="display:flex;"><span>ssh-add -L</span></span></code></pre></div></div>
<p>You should see something like:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-txt" data-lang="txt"><span style="display:flex;"><span>ssh-ed25519 &lt;fingerprint&gt; your_email@example.com</span></span></code></pre></div></div>
<p>Add (or create) a new allowed signers file:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;your_email@example.com ssh-ed25519 &lt;fingerprint&gt;&#34;</span> &gt;&gt;  ~/.ssh/allowed_signers</span></span></code></pre></div></div>
<p>Set up Git to use the new key and signers file:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>git config --global gpg.format ssh
</span></span><span style="display:flex;"><span>git config --global user.signingkey ~/.ssh/&lt;key_location&gt;
</span></span><span style="display:flex;"><span>git config --global commit.gpgsign true
</span></span><span style="display:flex;"><span>git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers</span></span></code></pre></div></div>
<p>Now when you run <code>git show --show-signature</code> on a signed commit you should see:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-txt" data-lang="txt"><span style="display:flex;"><span>Good &#34;git&#34; signature for your_email@example.com with ED25519 key &lt;fingerprint&gt;</span></span></code></pre></div></div>
<p>&#x1f4a5; Done!</p>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="code"/><category term="gpg"/><category term="ssh"/><category term="security"/><category term="git"/><summary type="html">So I have been using GPG to sign my Git commits for about 5 years now and every year, when my keys expire, it&amp;rsquo;s a nightmare to renew the keys for another year. Here&amp;rsquo;s how to set up SSH signing keys.</summary></entry><entry><title type="html">New Beginnings</title><link href="https://thega.me.uk/update/new-beginnings" rel="alternate" type="text/html" title="New Beginnings"/><published>2024-02-17T17:07:00+00:00</published><updated>2024-02-17T17:07:00+00:00</updated><id>https://thega.me.uk/update/new-beginnings</id><content type="html" xml:base="https://thega.me.uk/update/new-beginnings"><![CDATA[<p>I&rsquo;ve been rocking the same website since 2013.
I created it on the 25th of April 2013 when I heard that GitHub had moved GitHub Pages to a dedicated domain, <code>github.io</code>.</p>

<h2 class="relative group">Out with the old
    <div id="out-with-the-old" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#out-with-the-old" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>In a <a href="https://github.com/pwhittlesea/pwhittlesea.github.com/commit/6aa6b93ab9ff15eded0baca6e7891081d83b2574" >single commit</a> I pushed all the context required, and it stayed that way, unchanged, for 10 years, 9 months and 23 days.</p>
<p>A <em>lot</em> has happened in my life in that time.</p>
<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="My old site"
    width="1366"
    height="693"
    src="/2024/02/new-beginnings/new-beginnings_old-site_hu_f57df6aa5d2932a9.png"
    srcset="/2024/02/new-beginnings/new-beginnings_old-site_hu_f57df6aa5d2932a9.png 800w, /2024/02/new-beginnings/new-beginnings_old-site_hu_50dfd56d5e27ed72.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/2024/02/new-beginnings/new-beginnings_old-site.png"></figure>
<p>At the time I put out this, admittedly garish, site I had been a Software Engineer for under a year.
I had a great work/life balance as the demands on a junior engineer are basically non-existent.
I was learning how the &lsquo;rules&rsquo; of software I picked up in university didn&rsquo;t really apply when you worked on a product with 10 years of history.
Clean code was a best effort endeavour, not a graded exercise; coming second to meeting deadlines and making customers happy.</p>
<p>I gained a reputation at the time for being the &lsquo;Linux kid&rsquo; as I felt more at home in a terminal than on the warm embrace of a GUI.
Configuring a 2003 RedHat Linux server? No problem!
Write a script to migrate a non-standard SVN repository to Git? Sweet!
Create a pivot table in Excel? Witchcraft!</p>
<p>As I progressed in my career I found less and less time for personal projects.
Then I found D&amp;D, and the time I had shrunk again.
Then the pandemic struck, I adopted a dog, and the time I had shrunk again.</p>
<p>Now, between my two D&amp;D groups (one of which I DM) / two dogs / work, when I have time for coding there was always a fun problem at work I am passionate about which takes my time.</p>
<p>One thing has stuck. I still love a terminal over any GUI.
I&rsquo;m writing this in <code>vim</code> (mostly because my ThinkPad struggles to run things).</p>

<h2 class="relative group">In with the new
    <div id="in-with-the-new" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#in-with-the-new" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Why am I telling you this?
Well this is the reason why I decided to update my GitHub Pages site instead of just using a blogging tool.
I revision control almost everything in my life and I think it makes sense for this site too.</p>
<p>I used to use <a href="https://en.wikipedia.org/wiki/Delicious_%28website%29" >Delicious</a> for ah-hoc bookmarking until its ultimate demise.
Plus, I have no illusions that anyone is going to find things I write interesting, but I want this site to be the following:</p>
<ol>
<li>Somewhere to put random things I learn (code etc.)</li>
<li>A store of links and tagged resource which I can share and refer to in future</li>
<li>The hub all of my domains (e.g. <a href="https://thega.me.uk" ><code>thega.me.uk</code></a>) to point to</li>
<li>An online CV which I can keep up to date</li>
</ol>
<p>Maybe when I&rsquo;m older and my memory is even worse than it is now, I can use this as an off-site backup.</p>

<h2 class="relative group">New beginnings
    <div id="new-beginnings" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#new-beginnings" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>So I have chosen (the GH Pages default) <a href="https://jekyllrb.com/" >Jekyll</a> as the basis for this site, but I am sure I will have to do extensive modification to meet the above goals.</p>
<p><a href="https://github.com/jekyll/minima" >Minima</a> meets my needs as far as themes go, but it was a bit of a pain getting the latest version deployed because it hasn&rsquo;t been released <a href="https://github.com/jekyll/minima/issues/656" >in 4 and a half years</a>.
So I wouldn&rsquo;t be surprised if something breaks soon.</p>
<p>I have already had to modify it to show tags on posts but I (in no order) want to:</p>
<ul>
<li>Point all my domains here</li>
<li>Add a list of tagged links</li>
<li>Finish my CV</li>
<li>Fix the <code>goodreads</code> logo in the footer</li>
<li>Add a picture of me (yes I&rsquo;m vain)</li>
<li>Find a nicer font and colour scheme</li>
</ul>

<h3 class="relative group">Footnote
    <div id="footnote" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#footnote" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Thanks to Jason E. Miller, Ph.D. for writing <a href="http://www.jasonemiller.org/2020/12/23/tagging-posts-in-jekyll-minima.html" >this blog</a> which helped me set up the tags you see below.</p>]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><category term="update"/><category term="jekyll"/><category term="github"/><summary type="html">I&amp;rsquo;ve been rocking the same website since 2013. I created it on the 25th of April 2013 when I heard that GitHub had moved GitHub Pages to a dedicated domain, github.io.</summary></entry><entry><title type="html">About</title><link href="https://thega.me.uk/about/" rel="alternate" type="text/html" title="About"/><published>2013-01-01T00:00:00+00:00</published><updated>2026-01-03T19:36:07+00:00</updated><id>https://thega.me.uk/about</id><content type="html" xml:base="https://thega.me.uk/about/"><![CDATA[<p>I am currently living in Southampton with my partner (whom I dote on), my 4 cats (whom I tolerate) and 2 dogs (whom I fuss over).</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-3 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/about/IMG_1817_hu_8df98e5d230d9ea.JPG 330w, /about/IMG_1817_hu_7885363075f067ab.JPG 660w, /about/IMG_1817_hu_eb05c434ab9113d2.JPG 1024w, /about/IMG_1817_hu_c787778fe642875d.JPG 2x"
          src="/about/IMG_1817_hu_7885363075f067ab.JPG"
          data-zoom-src="/about/IMG_1817_hu_c787778fe642875d.JPG"
          
          title="Maurice"
        />
        <img
          class="rounded-md"
          srcset="/about/IMG_1819_hu_898662e266476338.JPG 330w, /about/IMG_1819_hu_4dd14a66fb47d089.JPG 660w, /about/IMG_1819_hu_4cf9cf7780b2895e.JPG 1024w, /about/IMG_1819_hu_2bd044e2b957565.JPG 2x"
          src="/about/IMG_1819_hu_4dd14a66fb47d089.JPG"
          data-zoom-src="/about/IMG_1819_hu_2bd044e2b957565.JPG"
          
          title="Mort"
        />
        <img
          class="rounded-md"
          srcset="/about/IMG_1823_hu_d3b9f072406019fd.JPG 330w, /about/IMG_1823_hu_be425777ab625897.JPG 660w, /about/IMG_1823_hu_476c37e70d0baf5a.JPG 1024w, /about/IMG_1823_hu_ecc30547aa119817.JPG 2x"
          src="/about/IMG_1823_hu_be425777ab625897.JPG"
          data-zoom-src="/about/IMG_1823_hu_ecc30547aa119817.JPG"
          
          title="Mally"
        />
        <img
          class="rounded-md"
          srcset="/about/IMG_1825_hu_3bad44fba6e19d4e.JPG 330w, /about/IMG_1825_hu_9bf93ee2980d3d75.JPG 660w, /about/IMG_1825_hu_59a058e87731d87f.JPG 1024w, /about/IMG_1825_hu_7430b0ad3cb38807.JPG 2x"
          src="/about/IMG_1825_hu_9bf93ee2980d3d75.JPG"
          data-zoom-src="/about/IMG_1825_hu_7430b0ad3cb38807.JPG"
          
          title="Ada"
        />
        <img
          class="rounded-md"
          srcset="/about/IMG_1824_hu_5d42a20d9c17a592.JPG 330w, /about/IMG_1824_hu_6da1e5adc8e05bb8.JPG 660w, /about/IMG_1824_hu_d1012814b9bd5f85.JPG 1024w, /about/IMG_1824_hu_24b756add7445c19.JPG 2x"
          src="/about/IMG_1824_hu_6da1e5adc8e05bb8.JPG"
          data-zoom-src="/about/IMG_1824_hu_24b756add7445c19.JPG"
          
          title="Cara"
        />
        <img
          class="rounded-md"
          srcset="/about/IMG_1830_hu_2e7a8af2abf44e0e.JPG 330w, /about/IMG_1830_hu_a3c5f76e1c3d3482.JPG 660w, /about/IMG_1830_hu_fbb6cd01b6cd3fad.JPG 1024w, /about/IMG_1830_hu_638b0e5f3f6cd073.JPG 2x"
          src="/about/IMG_1830_hu_a3c5f76e1c3d3482.JPG"
          data-zoom-src="/about/IMG_1830_hu_638b0e5f3f6cd073.JPG"
          
          title="Fluffy"
        />
    </span>
  
    <figcaption class="text-center">My Animals</figcaption>
  
</figure>

<p>&#x1f384; I have a passion for going overboard at Christmas (see below) which means November is blocked out to put the decorations up, and January to pull them down.
I have even built my own <a href="https://thega.me.uk/2025/12/building-a-sleigh/" >full-size sleigh</a>.</p>






  


<figure >
  <span class="not-prose tw:grid tw:grid-cols-2 tw:gap-1">
    
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2022_hu_da7b90c61a3561af.jpg 330w, /images/christmas/christmas_2022_hu_e2881b17c9c1ce54.jpg 660w, /images/christmas/christmas_2022_hu_b3d2168e70b4ba79.jpg 1024w, /images/christmas/christmas_2022_hu_3a84a8b6a3c91d26.jpg 2x"
          src="/images/christmas/christmas_2022_hu_e2881b17c9c1ce54.jpg"
          data-zoom-src="/images/christmas/christmas_2022_hu_3a84a8b6a3c91d26.jpg"
          
          title="My House December 1st 2022"
        />
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2023_hu_79f66e368f97a339.jpg 330w, /images/christmas/christmas_2023_hu_b29fc97c4f668b47.jpg 660w, /images/christmas/christmas_2023_hu_a5d8259884206675.jpg 1024w, /images/christmas/christmas_2023_hu_17d824a4a703195b.jpg 2x"
          src="/images/christmas/christmas_2023_hu_b29fc97c4f668b47.jpg"
          data-zoom-src="/images/christmas/christmas_2023_hu_17d824a4a703195b.jpg"
          
          title="My House December 1st 2023"
        />
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2024_hu_facef6d9ba95515c.jpg 330w, /images/christmas/christmas_2024_hu_110d02daa93a62fc.jpg 660w, /images/christmas/christmas_2024_hu_f4bbc2ca81c1dc31.jpg 1024w, /images/christmas/christmas_2024_hu_281e3b4349f5c8cb.jpg 2x"
          src="/images/christmas/christmas_2024_hu_110d02daa93a62fc.jpg"
          data-zoom-src="/images/christmas/christmas_2024_hu_281e3b4349f5c8cb.jpg"
          
          title="My House December 1st 2024"
        />
        <img
          class="rounded-md"
          srcset="/images/christmas/christmas_2025_hu_3c355c2a4d2a9421.jpg 330w, /images/christmas/christmas_2025_hu_fc13c4eccdb904a9.jpg 660w, /images/christmas/christmas_2025_hu_e4a0437b7aa8bbd9.jpg 1024w, /images/christmas/christmas_2025_hu_83115c8096733cf0.jpg 2x"
          src="/images/christmas/christmas_2025_hu_fc13c4eccdb904a9.jpg"
          data-zoom-src="/images/christmas/christmas_2025_hu_83115c8096733cf0.jpg"
          
          title="My House December 1st 2025"
        />
    </span>
  
    <figcaption class="text-center">My House, over the years, decorated for Christmas</figcaption>
  
</figure>

<p>&#x1f9db; I am a 
<abbr title="Dungeons and Dragons">D&amp;D</abbr>
 player, and 
<abbr title="Dungeon Master - the person who runs the game">DM</abbr>
.
I just finished a 4-year play through of <a href="https://en.wikipedia.org/wiki/Curse_of_Strahd" >Curse of Strahd</a> (which was only supposed to take a year), so I am taking a bit of a break.
Saying that, I am keen to get started on <a href="https://en.wikipedia.org/wiki/Storm_King%27s_Thunder" >Storm King&rsquo;s Thunder</a>, just in case that takes another 4 years.</p>
<p>&#x1f3ae; If I can find the time, I try to squeeze in some time playing video games.
<a href="https://en.wikipedia.org/wiki/7_Days_to_Die" >7 Days 2 Die</a> and <a href="https://en.wikipedia.org/wiki/Split_Fiction" >Split Fiction</a> are at the top of my roster, but I have played <a href="https://en.wikipedia.org/wiki/Valheim" >Valheim</a> and <a href="https://en.wikipedia.org/wiki/Ark:_Survival_Evolved" >ARK: Survival Evolved</a> in the past.</p>
<p>&#x1f3ed; I hate to admit it, but I have also put a <em>lot</em> of hours into the ever-growing factory that is <a href="https://en.wikipedia.org/wiki/Factorio" >Factorio</a><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>&#x1f435; I have been known to replay <a href="https://en.wikipedia.org/wiki/Monkey_Island" >Monkey Island</a> from time to time.
You don&rsquo;t have to load it from two floppy disks anymore, but it&rsquo;s still nostalgic.</p>
<p>&#x1f370; When not up a ladder, or in-front of a screen, I am on a quest to bake the perfect banana bread, without a soggy bottom.</p>
<p>&#x1f4d6; My partner is always reminding me that I need to read <em>books</em> more.
You can head over to <a href="https://app.thestorygraph.com/profile/gingerphill" >The StoryGraph</a> to see what I am reading at the moment.</p>
<p>&#x1f393; I graduated from the University of Southampton in 2012 and have since worked my way up the ranks to my current role as Lead Architect.</p>
<p>I&rsquo;m <em>supposed</em> to be defining the technical strategy of the business, but I still enjoy being in the thick of it; my excuse being that it keeps me in touch with the needs of the teams.
Some days I am writing library code that will be used in a handful of applications, other days I am coaching engineers on good software practice.
Occasionally I might be doing my actual job and designing solutions that will have wide-ranging impact on the way the business works.
It all depends on what interests me and what&rsquo;s needed of me on a given day.</p>
<p>I am currently at <a href="https://cirium.com" >Cirium</a> in Southampton.</p>
<p>For more information on my skills and job history, see my <a href="https://thega.me.uk/cv/" >CV</a>.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>644.1 hours as of the 20<sup>th</sup> April 2025&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>840.7 hours as of the 30<sup>th</sup> August 2025&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">A brief overview of who I am and what I get up to</summary></entry><entry><title type="html">Curriculum Vitae</title><link href="https://thega.me.uk/cv/" rel="alternate" type="text/html" title="Curriculum Vitae"/><published>2013-01-01T00:00:00+00:00</published><updated>2025-10-09T15:29:05+01:00</updated><id>https://thega.me.uk/cv</id><content type="html" xml:base="https://thega.me.uk/cv/"><![CDATA[
<h2 class="relative group">Experience
    <div id="experience" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#experience" aria-label="Anchor">#</a>
    </span>
    
</h2>
<ol class="border-s-2 border-primary-500 dark:border-primary-300 list-none">






<li>
  <div class="flex">
    <div
      class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5">
      <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/></svg>
</span>
    </div>
    <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words">
      <div class="flex justify-between">
        
          <h2 class="mt-0">Chief Architect</h2>
        
        
          <h3 class="">
            <span class="flex cursor-pointer">
  <span
    class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
    2024 - Present
  </span>
</span>

          </h3>
        
      </div>
      
        <h4 class="mt-0">
          Cirium
        </h4>
      
      <div class="mb-6">
        <p>As Ciriums Chief Architect I set the technical strategy for the business; designing organization wide solutions that support Ciriums future growth.</p>
<p>Areas focused on:</p>
<ul>
<li>Ensuring we build out a technical platform which allows us to realize value rapidly, but securely</li>
<li>Interfacing with C-Level leadership to ensure that technical strategy aligns with the goals of the business</li>
<li>Working with teams to ensure shared infrastructure/solutions meet their needs</li>
<li>Effective communication of strategy with stakeholders alongside clear documentation of designs</li>
<li>Engaging with suppliers to explore if new technologies and tools can support the business</li>
<li>Determining technical feasibility of upcoming projects and products</li>
</ul>

      </div>
    </div>
  </div>
</li>






<li>
  <div class="flex">
    <div
      class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5">
      <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/></svg>
</span>
    </div>
    <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words">
      <div class="flex justify-between">
        
          <h2 class="mt-0">Architect</h2>
        
        
          <h3 class="">
            <span class="flex cursor-pointer">
  <span
    class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
    2022 - 2024
  </span>
</span>

          </h3>
        
      </div>
      
        <h4 class="mt-0">
          Cirium
        </h4>
      
      <div class="mb-6">
        <p>Architect accountable for the design of machine-to-machine interfaces (e.g. HTTP APIs, AMQP).</p>
<p>Areas focused on:</p>
<ul>
<li>Engaging with stakeholders within the business and the wider organization to gather requirements
<ul>
<li>These stakeholders include Sales, Product, Project, Data, SREs, and Security</li>
<li>Analyse requirements from the above to design solutions that meet the business needs</li>
</ul>
</li>
<li>Working with teams to understand where shared infrastructure/solutions may benefit the business</li>
<li>Coordinating multiple teams to allow effective delivery</li>
<li>Establishing coding practices and drive technical direction amongst development teams</li>
<li>Leading teams in the decomposition of issues to aid problem-resolution</li>
<li>Effective documentation of design</li>
<li>Evaluating new technologies and tools for upcoming projects and train teams in their usage</li>
<li>Determining technical feasibility of upcoming projects</li>
</ul>

      </div>
    </div>
  </div>
</li>






<li>
  <div class="flex">
    <div
      class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5">
      <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
<path fill="currentColor"  d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg></span>
    </div>
    <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words">
      <div class="flex justify-between">
        
          <h2 class="mt-0">Principal Software Engineer</h2>
        
        
          <h3 class="">
            <span class="flex cursor-pointer">
  <span
    class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
    2020 - 2022
  </span>
</span>

          </h3>
        
      </div>
      
        <h4 class="mt-0">
          Cirium
        </h4>
      
      <div class="mb-6">
        
Integrate the software and systems from the recently acquired Snowflake Software into the broader processes and systems of Cirium.

      </div>
    </div>
  </div>
</li>






<li>
  <div class="flex">
    <div
      class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5">
      <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
<path fill="currentColor"  d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg></span>
    </div>
    <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words">
      <div class="flex justify-between">
        
          <h2 class="mt-0">Senior Software Developer</h2>
        
        
          <h3 class="">
            <span class="flex cursor-pointer">
  <span
    class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
    2016 - 2020
  </span>
</span>

          </h3>
        
      </div>
      
        <h4 class="mt-0">
          Snowflake Software Ltd.
        </h4>
      
      <div class="mb-6">
        
Building cloud-based data processing and analysis pipelines for the Aviation industry.

      </div>
    </div>
  </div>
</li>






<li>
  <div class="flex">
    <div
      class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5">
      <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
<path fill="currentColor"  d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg></span>
    </div>
    <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words">
      <div class="flex justify-between">
        
          <h2 class="mt-0">Software Developer</h2>
        
        
          <h3 class="">
            <span class="flex cursor-pointer">
  <span
    class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
    2012 - 2016
  </span>
</span>

          </h3>
        
      </div>
      
        <h4 class="mt-0">
          Snowflake Software Ltd.
        </h4>
      
      <div class="mb-6">
        
Developing Java desktop applications and Java-based web services in an Agile environment.

      </div>
    </div>
  </div>
</li>






<li>
  <div class="flex">
    <div
      class="bg-primary-500 dark:bg-primary-300 text-neutral-50 dark:text-neutral-700 min-w-[30px] h-8 text-2xl flex items-center justify-center rounded-full ltr:-ml-12 rtl:-mr-[79px] mt-5">
      <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
<path fill="currentColor" d="M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z"/></svg></span>
    </div>
    <div class="block p-6 rounded-lg shadow-2xl flex-1 ms-6 mb-10 break-words">
      <div class="flex justify-between">
        
          <h2 class="mt-0">Computer Science MEng</h2>
        
        
          <h3 class="">
            <span class="flex cursor-pointer">
  <span
    class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">
    2008 - 2012
  </span>
</span>

          </h3>
        
      </div>
      
        <h4 class="mt-0">
          Southampton University
        </h4>
      
      <div class="mb-6">
        
Awarded a First Class with Honours

      </div>
    </div>
  </div>
</li>

</ol>


<h2 class="relative group">Proficiencies
    <div id="proficiencies" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#proficiencies" aria-label="Anchor">#</a>
    </span>
    
</h2>
<dl>
<dt>Leadership</dt>
<dd>I excel at working with teams and guiding them towards a strategic vision.</dd>
<dd>In my current and previous roles at Cirium, I have been accountable for driving the engineering department towards a platform based architecture.</dd>
<dt>Mentoring</dt>
<dd>I get a lot of satisfaction from working with engineers, of all levels, to grow their craft.</dd>
<dd>I especially enjoy pair-programming and the opportunity it gives me to not only train, but learn from other engineers.</dd>
<dt>Problem Solving / Creativity</dt>
<dd>I deeply enjoy solving problems.</dd>
<dd>From the performance of a SQL query, to the orchestration of multiple teams building out a business case; no problem is too big or small.</dd>
<dt>Accountability</dt>
<dd>It is important to me that I hold myself to the same standards I hold others to.</dd>
<dd>This has resulted in many high-trust relationships during my career as people can count on me to deliver whilst simultaneously striving to be better next time.</dd>
<dt>Communication</dt>
<dd>Although I have been known to use metaphors frequently, I excel at communicating with others.</dd>
<dd>In my current role I am responsible for business-wide technical strategy which I have to communicate upwards to C-Level management, and downwards to engineering teams.</dd>
</dl>

<h2 class="relative group">Tech
    <div id="tech" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tech" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Below are a list of tools/technologies/languages I am familiar with:</p>
<div class="flex flex-row flex-wrap items-center space-x-2">
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Java</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Python</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Go</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>SQL</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>PHP</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>HTML</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>JavaScript</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>CSS</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Spring</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Databricks</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>LLMs</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>AWS</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Azure</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>GCP</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>PostgreSQL</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Snowflake</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Databricks</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>SQL Server</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Elasticsearch</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>MongoDB</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Docker</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Terraform</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Kubernetes</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Git</span>
    </span>
  </span>
</div>
  <div class="flex mt-2">
  <span
    class="rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal">
    <span class="flex flex-row items-center"><span>Unix</span>
    </span>
  </span>
</div>
</div>

]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Details of my career and skills</summary></entry><entry><title type="html">Links</title><link href="https://thega.me.uk/links/" rel="alternate" type="text/html" title="Links"/><published>2013-01-01T00:00:00+00:00</published><updated>2025-12-28T00:15:46+00:00</updated><id>https://thega.me.uk/links</id><content type="html" xml:base="https://thega.me.uk/links/"><![CDATA[
<h2 class="relative group">Links
    <div id="links" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#links" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Random links that I use regularly:</p>
<table>
  <thead>
      <tr>
          <th>Category</th>
          <th>Description</th>
          <th>Link</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Flights</td>
          <td>Comprehensive flight search</td>
          <td><a href="https://matrix.itasoftware.com/search" >Link</a></td>
      </tr>
      <tr>
          <td>AWS</td>
          <td>List of IAM permissions</td>
          <td><a href="https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html" >Link</a></td>
      </tr>
      <tr>
          <td>Books</td>
          <td>Map of Safehold as of Midst Toil and Tribulation</td>
          <td><a href="https://infodump.thefifthimperium.com/images/Safehold_MTnT.jpg" >Link</a></td>
      </tr>
  </tbody>
</table>

<h2 class="relative group">RSS
    <div id="rss" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#rss" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Here are a collection of RSS feeds that I subscribe to:</p>
<table>
  <thead>
      <tr>
          <th>Category</th>
          <th>Name</th>
          <th>RSS</th>
          <th>Author</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Blogs</td>
          <td><a href="https://thega.me.uk/" >This one</a></td>
          <td><a href="https://thega.me.uk/feed.xml" >link</a></td>
          <td>Phillip Whittlesea-Clark</td>
      </tr>
      <tr>
          <td>Blogs</td>
          <td><a href="https://cablespaghetti.dev/" >Cablespaghetti</a></td>
          <td><a href="https://cablespaghetti.dev/index.rss" >link</a></td>
          <td>Sam Weston</td>
      </tr>
      <tr>
          <td>Blogs</td>
          <td><a href="https://code.mendhak.com/" >Mendhak / Code</a></td>
          <td><a href="https://code.mendhak.com/feed.xml" >link</a></td>
          <td>mendhak</td>
      </tr>
      <tr>
          <td>Blogs</td>
          <td><a href="https://onlyrss.org" >OnlyRSS</a></td>
          <td><a href="https://onlyrss.org/feed.xml" >link</a></td>
          <td>Mark Evans</td>
      </tr>
      <tr>
          <td>Blogs</td>
          <td><a href="https://jack-vanlightly.com" >Jack Vanlightly</a></td>
          <td><a href="https://jack-vanlightly.com/?format=rss" >link</a></td>
          <td>Jack Vanlightly</td>
      </tr>
      <tr>
          <td>News</td>
          <td><a href="https://news.ycombinator.com" >Hacker News</a></td>
          <td><a href="https://news.ycombinator.com/rss" >link</a></td>
          <td></td>
      </tr>
      <tr>
          <td>Space</td>
          <td><a href="https://everydayastronaut.com" >Everyday Astronaut</a></td>
          <td><a href="https://everydayastronaut.com/rss" >link</a></td>
          <td>Tim Dodd</td>
      </tr>
      <tr>
          <td>Comics</td>
          <td><a href="https://www.questionablecontent.net" >Questionable Content</a></td>
          <td><a href="https://www.questionablecontent.net/QCRSS.xml" >link</a></td>
          <td>Jeph Jacques</td>
      </tr>
      <tr>
          <td>Comics</td>
          <td><a href="https://safelyendangered.com" >Safely Endangered</a></td>
          <td><a href="https://safelyendangered.com/blogs/comics.atom" >link</a></td>
          <td>Chris McCoy</td>
      </tr>
  </tbody>
</table>
]]></content><author><name>Phillip Whittlesea-Clark</name><email>pw.github@thega.me.uk</email></author><summary type="html">Links # Random links that I use regularly:
Category Description Link Flights Comprehensive flight search Link AWS List of IAM permissions Link Books Map of Safehold as of Midst Toil and Tribulation Link RSS # Here are a collection of RSS feeds that I subscribe to:</summary></entry></feed>