<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.4">Jekyll</generator><link href="https://stegriff.co.uk/feed.xml" rel="self" type="application/atom+xml" /><link href="https://stegriff.co.uk/" rel="alternate" type="text/html" /><updated>2026-04-04T21:02:59+00:00</updated><id>https://stegriff.co.uk/feed.xml</id><title type="html">SteGriff</title><author><name>Ste Griffiths</name></author><entry><title type="html">March 2026 Month Notes</title><link href="https://stegriff.co.uk/upblog/march-2026-month-notes/" rel="alternate" type="text/html" title="March 2026 Month Notes" /><published>2026-04-04T00:00:00+00:00</published><updated>2026-04-04T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/march-2026-month-notes</id><content type="html" xml:base="https://stegriff.co.uk/upblog/march-2026-month-notes/"><![CDATA[<p>Here are some unapologetically mundane month notes.</p>

<p>The older I get, the more I find I am really looking forward to the first cup of tea of the day.</p>

<p>I called my broadband provider and told them the bill was too much and I wanted it to go down. The first line support person said bills don’t just go down, you can only downgrade. Ok I said, I would like to cancel then. Cancel? What did I mean? I meant that I’d seen a new customer deal for £25 and I’m paying more than that… well, it turns out that “competing/new customer deal” is the key phrase, and not “cancel” as I’d expected. Anyhow I got through to a lovely gent with a geordie sort of accent who was simultaneously able to double my fibre speed and take £10/mo off the bill! Quids in! Call your broadband provider 6 mo before the contract ends for best effect, my friends.</p>

<p>Interviewing people for things at work makes me hungry to be on the other side of the table sometimes.</p>

<p>Monkey boy is becoming more and more expert at managing up. I’m often half way through asking him to do something and he just cuts me off with “Yeah yeah, no worries! Hakuna Matata!” and I’m pretty sure my Dad would have clipped me over the ear if I’d done such a thing twice.</p>

<p>Oh, Aldi had this sauce last year called “Korean Inspired Summer Vibes Barbeque Sauce” and I liked it and just finished the bottle. You figure they’re probably not going to repeat a product like that but helpfully on the back of the bottle it says “Gochujiang sauce” so… <em>note to self</em> I like Gochujiang sauce.</p>

<p>In our house we anticipate and celebrate Easter with a call and response that goes “Did Jesus stay dead??” - “NO! Jesus came baa-aack!! We-weh-wehweh-weh-weh” (which is an imitation of a party airhorn).</p>

<p>Til next time. Happy Easter 🌄</p>]]></content><author><name>Ste Griffiths</name></author><category term="now" /><summary type="html"><![CDATA[Here are some unapologetically mundane month notes.]]></summary></entry><entry><title type="html">Host a generated static site with docker or disco</title><link href="https://stegriff.co.uk/upblog/host-a-generated-static-site-with-docker-or-disco/" rel="alternate" type="text/html" title="Host a generated static site with docker or disco" /><published>2026-03-30T00:00:00+00:00</published><updated>2026-03-30T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/host-a-generated-static-site-with-docker-or-disco</id><content type="html" xml:base="https://stegriff.co.uk/upblog/host-a-generated-static-site-with-docker-or-disco/"><![CDATA[<p>Netlify have stuffed us with their new pricing structure and I need to move all my Jekyll and 11ty sites off there. My new VPS, set up with <disco.cloud> has been going great, so I'll use that.</disco.cloud></p>

<p>Whatever static site generator (SSG) you use (Jekyll, 11ty, Hugo, Gatsby, or another) this guide should be adaptable for you.</p>

<p>I forgot that Disco has first class support for hosting a Static Site Generator (d’oh) so first, a little tangent into a universal solution with <em>pure</em> docker…</p>

<h2 id="two-stage-dockerfile-to-build-and-host-an-ssg-site">Two-stage dockerfile to build and host an SSG site</h2>

<p>If you ask an assistant about this, it may suggest a wasteful strat where you host the production blog with <code>eleventy --serve</code> or <code>npx serve ./_site</code>. These are bad ideas.</p>

<p>You want to compile the site into static output and then host that as cost-effectively as possible, using something simple, dumb, and made for the job, like <a href="https://nginx.org/en/">nginx</a> or <a href="https://caddyserver.com">Caddy</a>.</p>

<p>You can have a node <strong>build</strong> stage and then an nginx <strong>host</strong> stage:</p>

<pre><code># Build stage
FROM node:20-alpine AS build
WORKDIR /app
COPY ./package.json .
COPY ./package-lock.json .
RUN npm ci
COPY . .
RUN npm run build

# Host stage
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
</code></pre>

<p>A few things to note:</p>

<ul>
  <li>My 11ty config outputs to <code>build</code> but yours might go to <code>_site</code> or <code>dist</code>.</li>
  <li>The “new” default hosting directory for nginx at time of writing is <code>/usr/share/nginx/html</code> as above. You can change this with nginx config. Other versions might use a different default.</li>
</ul>

<p>This general approach should work everywhere that can run a dockerfile.</p>

<h2 id="on-disco-you-dont-need-to-do-that">On disco you don’t need to do that</h2>

<p>Check out the disco docs for <a href="https://disco.cloud/docs/disco-json/#static-site-generators-ssg">static site generators</a>. Create a <code>disco.json</code> file like this one:</p>

<pre><code>{
  "version": "1.0",
  "services": {
    "web": {
      "type": "generator",
      "publicPath": "build"
    }
  }
}
</code></pre>

<p>Then you only need the first half (the build stage) from the dockerfile.</p>

<pre><code># Build stage
FROM node:20-alpine AS build
WORKDIR /app
COPY ./package.json .
COPY ./package-lock.json .
RUN npm ci
COPY . .
RUN npm run build

# Disco will host the `build` folder
</code></pre>

<p>It builds using the dockerfile, and hosts the static output for you:</p>

<p><img src="/assets/disco/deploy-sg-11.png" alt="The disco deployment logs for sg-11" /></p>

<p>Disco uses <a href="https://caddyserver.com">Caddy</a> under the hood, so the output is now being hosted by an efficient, dumb webserver.</p>

<p>So simple! 🐵🔧</p>]]></content><author><name>Ste Griffiths</name></author><summary type="html"><![CDATA[Netlify have stuffed us with their new pricing structure and I need to move all my Jekyll and 11ty sites off there. My new VPS, set up with has been going great, so I'll use that.]]></summary></entry><entry><title type="html">I made a Kotlin UDL for Notepad++</title><link href="https://stegriff.co.uk/upblog/i-made-a-kotlin-udl-for-notepad/" rel="alternate" type="text/html" title="I made a Kotlin UDL for Notepad++" /><published>2026-03-22T00:00:00+00:00</published><updated>2026-03-22T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/i-made-a-kotlin-udl-for-notepad</id><content type="html" xml:base="https://stegriff.co.uk/upblog/i-made-a-kotlin-udl-for-notepad/"><![CDATA[<p>I was going to call this “I vibed a Kotlin UDL for Notepad++” but <del>increasingly often</del> as always, the outcome of trying to vibe something is that you have to debug it, which means getting in up to your elbows to learn the thing you were trying to offload in the first place. Is Agentic AI just here to trick us into expanding our horizons? Clever move, Anthropic*.</p>

<p>*I was using GitHub CoPilot CLI… It initially selected a GPT. I later forced it to Claude to do some refactors because I have a better time with Claude generally.</p>

<p><a href="https://github.com/SteGriff/Kotlin-UDL">Here’s the Kotlin UDL</a>.</p>

<h2 id="problems">Problems</h2>

<p>Types like <code>List</code> and <code>String</code> weren’t highlighting.</p>

<p>I couldn’t prompt my way out of this. The LLMs couldn’t figure it out.</p>

<p>Eventually my key debug technique was the minimal reproducible example… or, progressively deleting things from the UDL file until the highlighting started working.</p>

<blockquote>
  <p>I also made a trivial “fruits” UDL to sanity check the highlighting system first</p>
</blockquote>

<p><img src="/assets/notepad-udl/fruits.png" alt="Fruits UDL" /></p>

<p>This turned out to be because GPT put <code>is</code> and <code>in</code> into the list of operators.</p>

<p>Operators are coloured with the default colour.</p>

<p>And they take precedence because if they appear in the middle of a clause, like <code>a=b</code>, that has obviously split up <code>a</code> from <code>b</code>.</p>

<p>Unfortunately, this meant that <code>List</code> was parsed as <code>L is t</code> so it couldn’t highlight <code>List</code>.</p>

<p>Solved it by removing the errant operators!</p>

<h2 id="duplicated-keywords">Duplicated keywords</h2>

<p>The LLM also duplicated lots of keywords across the Keywords2 and Keywords3 group. This didn’t have any negative effects but it was messy and wasteful. Claude was able to refactor and clean up the mess made by its colleague with some tactical prompting.</p>

<h2 id="adding-a-dark-mode">Adding a dark mode</h2>

<p>Notepad++ UDLs are limited in how they (don’t) link to the current theme. You have to make a light and a dark mode UDL. The UDL can’t extend or use the theme colours - you can only set static hex values - and these aren’t transformed when you change to another theme.</p>

<p>For a dark theme version, I went with Monokai because it’s easy to find the theme colours and the scheme is attractive (imo) and flexible.</p>

<pre><code>Background: #272822
Foreground: #F8F8F2
Comment: #75715E
Keyword: #F92672
String: #E6DB74
Function: #A6E22E
Variable: #66D9EF
Number: #AE81FF
</code></pre>

<p><img src="/assets/notepad-udl/monokai.png" alt="Kotlin Dark/Monokai theme sample" /></p>

<p>I did this by hand bc I do get tired of correcting the AIs and it feels less tiring in the end to just do it yourself. I take this as a good thing.</p>

<h2 id="publishing">Publishing</h2>

<p>This is only in its own repo for now. When I find time I’d like to contribute it to the official <a href="https://github.com/notepad-plus-plus/userDefinedLanguages">notepad-plus-plus/userDefinedLanguages</a> repo.</p>

<h2 id="why">Why</h2>

<p>Readers with knowledge of Kotlin may think it’s stupid and wrong to write it in Notepad++ at all. I should use IDEA or Eclipse. Well… I don’t care! 💝</p>

<p>Thanks for reading my blog on the web.</p>

<p>Keep it real 🎇</p>]]></content><author><name>Ste Griffiths</name></author><summary type="html"><![CDATA[I was going to call this “I vibed a Kotlin UDL for Notepad++” but increasingly often as always, the outcome of trying to vibe something is that you have to debug it, which means getting in up to your elbows to learn the thing you were trying to offload in the first place. Is Agentic AI just here to trick us into expanding our horizons? Clever move, Anthropic*.]]></summary></entry><entry><title type="html">Feb 2026 Month Notes</title><link href="https://stegriff.co.uk/upblog/feb-2026-month-notes/" rel="alternate" type="text/html" title="Feb 2026 Month Notes" /><published>2026-02-25T00:00:00+00:00</published><updated>2026-02-25T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/feb-2026-month-notes</id><content type="html" xml:base="https://stegriff.co.uk/upblog/feb-2026-month-notes/"><![CDATA[<p>I had a nice February. I went on holiday and saw some lovely Argentino primos, spent a day with dear friends, and there was a birthday in our clan. How about you?</p>

<h2 id="i-didnt-enter-the-ghcp-cli-hackathon">I didn’t enter the GHCP CLI hackathon</h2>

<p>In the first half of the month, I stressed myself out trying to put an entry into the dev.to competition for using the GitHub CoPilot CLI. Why? Self-imposed pressure related to:</p>

<ul>
  <li>Creating Kotlin portfolio work</li>
  <li>Making something with a chance to be high profile</li>
  <li>Winning free GHCP and/or money</li>
</ul>

<p>My first mistake was that I had the deadline in my head at the end of half term, and I thought I could work on it over my holiday. It was in fact at the beginning of half term so I had to hurry to try to get something out. It wasn’t working out and was just very frustrating.</p>

<blockquote>
  <p>By “not working out” here I mean that the code was written, my project ran locally, but I understood too little about how it ran and the deployment story to host or operate it. Clearly I needed to upskill on the tools that make the thing go.</p>
</blockquote>

<h2 id="not-all-coding-is-learning">Not all coding is learning</h2>

<p>I’m meant to be learning Kotlin (and JVM, and Postgres, and Gradle), not just vibing it, and as we know, taking AI to school is like taking a forklift to the gym. Yes, the weights go up and down, but you don’t get any stronger.</p>

<p>In the end, putting the agentically coded work to one side and building up iteratively more sophisticated spikes/glitches of Kotlin projects feels more intellectually honest and true to who I am as a developer.</p>

<p>By the time you read this, hello-javalin should be live at: https://hello-javalin.sign.me.uk/</p>

<p>Have a poke around if you like JSON.</p>

<h2 id="kotlin-jvm-gradle">Kotlin, JVM, Gradle</h2>

<p>It’s called Gradle bc it takes you straight from the cradle to the grave 🙃🙃🙃</p>

<p>I often run the line “it’s all software dev, how different can it be, the skills are all transferable and I’m lowkey a genius, clearly” and going from .Net to JVM you’d think this would be especially true. WRONG! Didn’t mother always tell me “Pride comes before a fall!”?</p>

<p>Yeah, it turns out that while deductive skills and the intuition to use tools well are very transferable, there are vast seas of knowledge to cross on the way to JVM island.</p>

<p>I’ve decided to stop using IntelliJ so I can tell what the heck is going on under the hood when I run things, take a bit of magic away, and actually <del>grok</del> comprehend the tools and the outputs.</p>

<p>Perhaps a post is oncoming on how I learned to build and package a Kotlin server app, but it’s a lot to write down and I don’t know if I have it in me!</p>

<h2 id="teeth">Teeth</h2>

<p>Whoof, so, while I was typing this, I was sat in the waiting room of a faraway dental surgeon for an appointment that was supposed to have been an hour ago, when to my surprise lots of people who expected merely to get their teeth X-rayed today came out with fewer teeth in their head. Started to get a little nervous there and had to stop and pray for peace a while! 🤲</p>

<p>Well, it’s now the next day and it turns out my tooth is complicated and it will not be exiting my mouth this week. Which was a relief.</p>

<p>Don’t know how to sign off.</p>

<p>Boycott Twitter/X! Mã đáo thành công! Bye!</p>]]></content><author><name>Ste Griffiths</name></author><category term="now" /><summary type="html"><![CDATA[I had a nice February. I went on holiday and saw some lovely Argentino primos, spent a day with dear friends, and there was a birthday in our clan. How about you?]]></summary></entry><entry><title type="html">January 2026 Month Notes</title><link href="https://stegriff.co.uk/upblog/jan-2026-month-notes/" rel="alternate" type="text/html" title="January 2026 Month Notes" /><published>2026-02-13T00:00:00+00:00</published><updated>2026-02-13T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/jan-2026-month-notes</id><content type="html" xml:base="https://stegriff.co.uk/upblog/jan-2026-month-notes/"><![CDATA[<p>Hello! I’ve been cooking up these January notes for a little bit, but it’s taken a while due to all the nerd action.</p>

<h2 id="learning-kotlin">Learning Kotlin</h2>

<p>I am trying to develop myself and learn some other tech skills outside of .Net + Node/JS.</p>

<p>I came across a <a href="https://blog.pleo.io/en/how-we-built-pleos-tech-stack">cool company using Kotlin for their backend</a>, and looking into Kotlin, it spoke to me. I thought it might also be useful to have JVM experience as that covers Java, Kotlin, Groovy, and more.</p>

<p>So, I started learning Kotlin using <a href="https://hyperskill.org/">Hyperskill</a> and the <a href="https://academy.jetbrains.com/course/16628">Kotlin Koans course plugin for IntelliJ</a>.</p>

<blockquote>
  <p>Lightning reviews: Hyperskill is ok on PC, useless on phone. The exercises swing wildly from Duolingo style tap-the-answer or fill-the-gap up to complex coding questions that (I think) you’re expected to pre-solve in an IDE before entering the answer. In IntelliJ, the Kotlin Koans are good - the courseware plugin works excellently - but you have to give them time and attention; the difficulty does ramp quickly and some things go under-explained.</p>
</blockquote>

<p>I didn’t actually have space left on the C: drive of my trusty Surface Pro 4 to install IntelliJ, so some yak-shaving was required up front…</p>

<blockquote>
  <p>Sidebar: I bought this preowned SP4 in 2020 when it was 5 years old already. It came with the drive partitioned with only 128GB usable but when I investigated, it had another 128GB unallocated!! At the time, I made that into a D: drive, which I’ve used for project code and music production tools, VSTs, etc.</p>
</blockquote>

<blockquote>
  <p>I haven’t used my music production stuff in several years so I decided to let go. I backed up D: to an external drive, and with lots of googling, removed the partition (and its recovery partition), merged the space into C:, and brought up a new recovery partition.</p>
</blockquote>

<p>All that to say: I moved a load of stuff around to make more space for development tools. That meant I could install IntelliJ IDEA and the bits and bobs I needed.</p>

<h2 id="github-copilot-cli">GitHub CoPilot CLI</h2>

<p>I started an entry for the GitHub CoPilot CLI hackathon on dev.to</p>

<p>I hope to do a Kotlin entry to do double duty as a portfolio piece.</p>

<h2 id="mouse">Mouse</h2>

<p>I’ve been using a Microsoft Sculpt Ergonomic keyboard + mouse set for a long time. I love love love love love love love it. But the left click on the mouse stopped working. Also it’s falling apart. I switched briefly to a regular wireless mouse and boy! Ouch! My hand was so uncomfortable all day.</p>

<p><img src="/assets/keyboard-mouse/ms-sculpt-ergo.jpg" alt="Microsoft Sculpt" /></p>

<p>Having rested my hand on one in Currys a few months ago, I ordered a <a href="https://www.logitech.com/en-gb/shop/p/mx-vertical-ergonomic-mouse">Logi MX Vertical</a> from an eBay seller, in like new condition. It was £45 instead of the street price of £80-110! Logi do a few ergonomic mice, but the MX Vertical is suited to “large hands” which is the kind of hands that I have 👋</p>

<p>I’m really happy with it; it’s super comfortable. The best feature I didn’t expect to work is the device switcher. You can tap a button underneath the mouse to flick it between three devices. So, #1 is the wireless USB dongle (work PC), #2 is Bluetooth to my SP4. It’s great! One minor niggle, the scrollwheel has that dusty-grindy feeling of a cheaper mouse and feels like it might fail. We’ll see.</p>

<h2 id="hieroglyphics">Hieroglyphics</h2>

<p>I found out about <a href="https://en.wikipedia.org/wiki/Egyptian_Hieroglyphs_(Unicode_block)">Unicode Hieroglyphics</a>. I suppose if you’d asked me “do you know there are hieroglyphics in unicode” I would have said, “Yes, that makes sense”. But I never looked through them.</p>

<p>I am going to print some here</p>

<p class="f1">𓄿 𓅀 𓅁 𓅂 𓅃 𓅄 𓅅 𓅆 𓅇 𓅈 𓅉 𓅊 𓅋 𓅌 𓅍 𓅎 𓅏 𓅐 𓅑 𓅒 𓅓 𓅔 𓅕 𓅖 𓅗 𓅘 𓅙 𓅚 𓅛 𓅜 𓅝 𓅞 𓅟 𓅠 𓅡 𓅢 𓅣 𓅤 𓅥 𓅦 𓅧 𓅨 𓅩 𓅪 𓅫 𓅬 𓅭 𓅮 𓅯 𓅰 𓅱 𓅲 𓅳 𓅴 𓅵 𓅶 𓅷 𓅸 𓅹 𓅺 𓅻 𓅼 𓅽 𓅾 𓅿 𓆀 𓆁 𓆂 𓆃 𓆄 𓆅 𓆆 𓆇 𓆈 𓆉 𓆊 𓆋 𓆌 𓆍 𓆎 𓆏 𓆐 𓆑 𓆒 𓆓 𓆔 𓆕 𓆖 𓆗 𓆘 𓆙 𓆚 𓆛 𓆜 𓆝 𓆞 𓆟 𓆡 𓆢 𓆣 𓆤 𓆥 𓆦 𓆧 𓆨 𓆫 𓆬 𓆭 𓆮 𓆯 𓆰 𓆱 𓆲 𓃒 𓃓 𓃔 𓃕 𓃖 𓃗 𓃘 𓃙 𓃚 𓃛 𓃜 𓃝 𓃞 𓃟 𓃠 𓃡 𓃢 𓃣 𓃤 𓃥 𓃦 𓃧 𓃨 𓃩 𓃪 𓃫 𓃬 𓃭 𓃮 𓃯 𓃰 𓃱 𓃲 𓃳 𓃴 𓃵 𓃶 𓃷 𓃸 𓃹 𓃺 𓃻 𓃼 𓃽 </p>

<p>Here’s my favourite:</p>

<p class="f1">𓀬</p>

<p>You also get some those cowards won’t put in the Emoji range 
(one of which is redacted on most OSes but not iOS):</p>

<p class="f1">𓀐 𓁒 𓂺</p>

<p>I think this really invites some kind of broke-woke-bespoke meme comparison to emojis which I’ll leave as an exercise for the reader.</p>

<p>BEST OF ALL, ChatGPT has no idea what it’s looking at when you paste these characters, so we finally have a secret code the computers can’t understand. Nobody post descriptions of the hieroglyphs!! Defend the cipher!!</p>

<h2 id="got-a-server">Got a server</h2>

<p>Got an OVH VPS and started setting it up. Tried Coolify and it didn’t work out for me. Tried Disco.cloud instead and it’s going 👍👍</p>

<p>I didn’t want to do docker. But I appreciate that the alternative is installing all the frameworks on the VPS and then managing which app calls which one, and… it’s not practical. Ofc this is docker’s raison d’etre.</p>

<p>The best docker volumes tutorial is an SO answer, as usual: <a href="https://stackoverflow.com/a/46992367">Understanding “VOLUME” instruction in dockerfile</a></p>

<h2 id="other-stuff">Other stuff</h2>

<p>Did some sweatshirt art for a family event/meme… looking forward to doing an art writeup when I get time.</p>

<p>Commercially sensitive secret things.</p>

<p>Seahawks win!! Yes! 𓄿</p>

<h2 id="thank-you-for-reading-my-blog">Thank you for reading my blog</h2>

<p>You can email me if you want to be friends. My email address is ste. You already know the domain.</p>

<p>Have a nice February~ 👔🏓</p>]]></content><author><name>Ste Griffiths</name></author><category term="now" /><summary type="html"><![CDATA[Hello! I’ve been cooking up these January notes for a little bit, but it’s taken a while due to all the nerd action.]]></summary></entry><entry><title type="html">Punirunes Diary</title><link href="https://stegriff.co.uk/upblog/punirunes-diary/" rel="alternate" type="text/html" title="Punirunes Diary" /><published>2026-01-17T00:00:00+00:00</published><updated>2026-01-17T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/punirunes-diary</id><content type="html" xml:base="https://stegriff.co.uk/upblog/punirunes-diary/"><![CDATA[<p>My kids and I have been having a lot of fun raising <a href="/upblog/punirunes">Punirunes</a>. Here’s our character diary:</p>

<h3 id="2026-01-02---evening">2026-01-02 - Evening</h3>

<p>Bebirun I arrived.</p>

<h3 id="2026-01-03---morning">2026-01-03 - Morning</h3>

<p>Evolved into Aorun 🔵</p>

<h3 id="2026-01-04---morning">2026-01-04 - Morning</h3>

<p>Evolved into Paferun - “Ice Cream” 🍨</p>

<p>We accessorised him with blue/yellow wings.</p>

<p><img src="/assets/punirunes/paferun.jpg" alt="The Paferun character is displayed on a blue Punirunes device, sat on a shelf next to a sepia globe" /></p>

<h3 id="2026-01-07---morning">2026-01-07 - Morning</h3>

<p>After a few days play, we took “Ice Cream” to the forest to say goodbye.</p>

<p>Bebirun II arrived.</p>

<h3 id="2026-01-07---evening">2026-01-07 - Evening</h3>

<p>Evolved into Kirirun 🟡</p>

<h3 id="2026-01-08---morning">2026-01-08 - Morning</h3>

<p>Evolved into Pikarun - “Professor Nincompuni” 🤓</p>

<p>We accessorised him with the secret top hat item (code is Star, Green, Heart, Star, Green) to give an air of distinction.</p>

<h3 id="2026-01-12---morning">2026-01-12 - Morning</h3>

<p><img src="/assets/punirunes/pikarun.jpg" alt="Pikarun" /></p>

<p>After four days, The Professor asked to go into the forest, and we said goodbye.</p>

<p>Bebirun III arrived.</p>

<h3 id="2026-01-12---evening">2026-01-12 - Evening</h3>

<p>Evolved into Kirirun 🟡</p>

<h3 id="2026-01-13---evening">2026-01-13 - Evening</h3>

<p>Evolved into Porirun - “Blueyphant” 🐘</p>

<p><img src="/assets/punirunes/porirun.jpg" alt="Porirun" /></p>

<h3 id="2026-01-16---evening">2026-01-16 - Evening</h3>

<p>After a few days, we took Blueyphant to the forest. He left behind the Makipuni magic squishy - rare!</p>

<p>Bebirun IV arrived.</p>

<h3 id="2026-01-17---morning">2026-01-17 - Morning</h3>

<p>We chose to evolve into Kirirun again 🟡 - I was hoping to finally get the Nyarupuni squishy but got a blue one instead 😿</p>

<p>I think I need to start choosing other kid types, like Akarun.</p>

<p>For now, the batteries are out while I recharge 6xAAAs (you can’t charge 3 at a time)… this thing absolutely drinks rechargeable batteries because they’re only 1.2V and Punirunes wants 1.5V.</p>

<p>Here’s a growth chart I found:</p>

<p><img src="/assets/punirunes/growth-chart-ko.png" alt="Growth chart (Korean language)" /></p>

<p>Til next time 🐒</p>]]></content><author><name>Ste Griffiths</name></author><category term="vpets" /><summary type="html"><![CDATA[My kids and I have been having a lot of fun raising Punirunes. Here’s our character diary:]]></summary></entry><entry><title type="html">Weekdays Everywhere</title><link href="https://stegriff.co.uk/upblog/weekdays-everywhere/" rel="alternate" type="text/html" title="Weekdays Everywhere" /><published>2026-01-17T00:00:00+00:00</published><updated>2026-01-17T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/weekdays-everywhere</id><content type="html" xml:base="https://stegriff.co.uk/upblog/weekdays-everywhere/"><![CDATA[<p>With JavaScript, you can get the days of the week in long or short format, from any locale in the world, and I just think it’s kind of cool to explore.</p>

<p>Below are some examples, and you can add more by putting an ISO nation code into the input and clicking Add. Try <code>tr</code>, <code>lt</code>, <code>vi</code> or <code>haw</code>.</p>

<p>I wrote this vanilla JS code years ago on Glitch and have ported it here with some minor tweaks.</p>

<div class="js-weekdays"></div>

<form>
    <label>
        Locale:
        <input placeholder="tr" name="locale" class="js-locale h2 ph2 mh2" />
    </label>
    <button type="submit" onclick="add(event)" class="h2 ph2 pointer">Add</button>
</form>

<script>
    function getWeekDays(locale) {
        const baseDate = new Date(Date.UTC(2017, 0, 2)); // just a Monday
        const weekDays = [];
        for (let i = 0; i < 7; i++) {
            let dayName = baseDate.toLocaleDateString(locale, { weekday: "long" });
            const long = dayName[0].toUpperCase() + dayName.slice(1);
            const short = baseDate.toLocaleDateString(locale, { weekday: "short" });
            const narrow = baseDate.toLocaleDateString(locale, { weekday: "narrow" });
            const day = { long, short, narrow };
            weekDays.push(day);
            baseDate.setDate(baseDate.getDate() + 1);
        }
        return weekDays;
    }

    function drawForLocale(locale) {
        const el = document.getElementsByClassName("js-weekdays")[0];
        const dayCollection = getWeekDays(locale);
        const header = document.createElement("h3");
        header.innerText = locale;
        const newElement = document.createElement("p");
        newElement.innerHTML =
            dayCollection.map(d => d.long) +
            "<br>" +
            dayCollection.map(d => d.short) +
            "<br>" +
            dayCollection.map(d => d.narrow);
        el.appendChild(header);
        el.appendChild(newElement);
    }
    
    function add(ev) {
        ev.preventDefault();
        const localeBox = document.getElementsByClassName('js-locale')[0];
        drawForLocale(localeBox.value);
    }

    function main(){
        const locales = ["en", "fr", "es", "pt", "it", "de", "pl", "nl", "sv", "fi", "ar", "ja", "ko", "zh"];
        locales.forEach(l => drawForLocale(l));
    }
    
    main();
</script>]]></content><author><name>Ste Griffiths</name></author><summary type="html"><![CDATA[With JavaScript, you can get the days of the week in long or short format, from any locale in the world, and I just think it’s kind of cool to explore.]]></summary></entry><entry><title type="html">Punirunes</title><link href="https://stegriff.co.uk/upblog/punirunes/" rel="alternate" type="text/html" title="Punirunes" /><published>2026-01-09T00:00:00+00:00</published><updated>2026-01-09T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/punirunes</id><content type="html" xml:base="https://stegriff.co.uk/upblog/punirunes/"><![CDATA[<p>I found Punirunes reduced from £20 to £8 at my local Entertainer and picked it up as an after-Christmas present to myself. I wasn’t expecting to be a fan… I suppose I’m a bit of a Tamagotchi purist, and never had one of the full colour or gimicky vpets before. I think I also had a misapprehension that Punirunes wasn’t Japanese but boy was I wrong.</p>

<p><img src="/assets/punirunes/paferun.jpg" alt="The Paferun character is displayed on a blue Punirunes device, sat on a shelf next to a sepia globe" /></p>

<p>There are several versions in Japan, where the product is called ぷにるんず, including the original, plus, plaza, Sanrio, and star.</p>

<p>The international version which you can buy is the Plaza model, with all text removed (how do I know? Because the secret codes from the for the Japanese Plaza model work on it - and the faceplate is the same)</p>

<p>It has the most enormous and least useful instruction manual I have seen. This is because it covers only basic setup, but does so in 19 languages! However, there are full, localised versions on the Spin Master website. <a href="https://cdn.prod.website-files.com/65fd9e3e54a5b0a2b7f4364d/667aff85ea382d4304f78f50_Online%20Punirunes%20Single%20Language%20IS%20-%20English.pdf">English Punirunes manual</a>. It also has a <a href="https://cdn.prod.website-files.com/65fd985954ca89877d445d65/67856f1440628b52583bac3f_Punirunes-SecretCodes.pdf">PDF of secret codes</a>.</p>

<p>All of the words you can use to describe playing with this toy come off as weird and gross whether in Japanese or English. I am going to overlook that and use the following terms:</p>

<ul>
  <li>Puni - the virtual pet character.</li>
  <li>Jelly button - the soft button inside the device.</li>
  <li>Petting - stroking the jelly button gently left and right.</li>
  <li>Squishing - pressing the jelly button down so that the character bounces up.</li>
  <li>Seed - the red/blue/yellow orbs that appear in the air and are used to cook food and to colour accessories and evolutions.</li>
  <li>“Magic Squishy” (I think Wonder Seed is a better name) - the silhouettes of evolutions available to you. Sometimes you will unlock a new one of these when evolving from baby to kid. In Japanese, these are called “Fushigipuni” and/or “Mysterious Puni” (same thing).</li>
</ul>

<h2 id="quick-review">Quick Review</h2>

<p>So far my kids and I have enjoyed it! There are a mix of cute and ugly characters. The core gimmick of the jelly button inside is pretty good.</p>

<p>The build is good quality. The buttons work well. The UI decisions makes sense, but it’s a bit slower to use than Tamagotchi and if you have sound switched off, it seems slow to respond (when it’s actually waiting for silenced sounds to finish).</p>

<p>Because of internationalisation, all screen text has been removed or changed into icons instead of being translated. The lack of text does make the game harder to understand. It’s also a shame that the unique names of each Puni have been lost. It would have been cool just to have the Japanese character names transliterated into latin characters. I guess this wouldn’t have worked for languages with significantly different phonics or characters, like Russian, Chinese, Hungarian, Bulgarian etc.</p>

<p>The biggest faff in this game is the dust. There is too much dust and it’s kind of boring to clean it up, as it’s always the same three pieces in the same places. This should happen once or twice a day but it happens a lot more.</p>

<h2 id="care-guide">Care Guide</h2>

<p>Creatures never die/leave like they do in traditional vpets. Whereas in Tamagotchi you are playing a “high score” care game (feeling proud of yourself for getting to 15 days or a top tier character), this is more of a pastime and a discovery/unlocking game.</p>

<p><strong>First-time quick start instructions:</strong> Pet the Puni a few times. You have to stroke it back and forth about 5 times to count as a quality interaction. Feed it using your unlimited supply of gummy bears initially. Play some games by going to the Door icon then the theme park to earn coins.</p>

<p><img src="/assets/punirunes/menu-icons.png" alt="Punirunes menu icons" /></p>

<p>The heart menu icon checks status. This is the penultimate menu item, because you don’t need to check status as often as you would a Tamagotchi - it’s not key to the game:</p>

<ul>
  <li>The first row shows a mini-sprite of your Puni and its evolution stage - baby, kid, or adult. On the Japanese editions, this has text showing the character name.</li>
  <li>The second row (heart) shows a happiness bar that fills up with yellow/orange. Pet the Puni or play games to increase it.</li>
  <li>The third row (gummy bear) shows fullness, measured in stars. Feed Puni to increase it.</li>
  <li>The fourth row (coins) shows money earned from games.</li>
</ul>

<p>If you neglect the Puni for too long, it will melt into a puddle, and you have to pet it back and forth to reform it. However, its happiness level could still be medium or high after this. I understand that the puddle happens if you leave it with too much poop, dust, or hunger for too long. There’s no real penalty if this happens.</p>

<p>I haven’t yet figured out the evolution tree and whether care mistakes affect which characters you can unlock!</p>

<p>When you’re <del>fed up of</del> happy with the time you’ve spent with an adult character, you can take it to the “magic forest” to go away into the wilds, at which point a baby puni will fly from space to join you anew.</p>

<p><img src="/assets/punirunes/pikarun.jpg" alt="Saying goodbye to Pikarun" /></p>

<h2 id="icons">Icons</h2>

<p>Here’s a breakdown of the various icons that appear on screen:</p>

<p>The exclamation ! speech bubble appears on screen when you put your finger near the jelly button (there is an IR sensor that checks this), or when the Puni is notifying you of a seed. It’s not a cry for care like on a Tamagotchi.</p>

<p>The singing 🎵 speech bubble appears when the Puni is moderately happy with what just happened - after petting, games, or an acceptable food.</p>

<p>The hearts expression 💞 appears above the Puni’s head when it’s very happy with petting or after a favourite food.</p>

<p>The blue squiggle ➿ speech bubble appears when the Puni doesn’t like a food.</p>

<p>The bath 🛁 speech bubble appears when you’ve used the Puni to gather dust and it needs a bath.</p>

<p>If there’s a yellow arrow at the top of the screen, it means press/hold/use the jelly button.</p>

<p>Lastly, the characters will do “big emotes” at certain times after a happy interaction. For every adult, this is different. Paferun (the ice cream) blows a kiss. Pikarun (the geeky one with glasses), has a eureka lightbulb moment.</p>

<h2 id="foods-recipes-cooking-and-feeding">Foods, Recipes, Cooking, and Feeding</h2>

<p>When the Puni is really hungry, it will show a speech bubble of three of its favourite foods. This is useful to remember.</p>

<p>Buy the base food items by going to the Door icon, choosing the supermarket, and squishing the Puni through the portal. The expensive foods are not better! If your Puni says its favourites are the onigiri rice ball 🍙 (80) and the salad 🥗 (250), it’s ok just to buy onigiri 😊 Of course it’s more fun to use your imagination and empathy when playing vpets, so you may choose to buy the expensive foods anyway.</p>

<p>Go to the cooking pot icon to cook base foods. The food will “think” of two seeds it wants to be combined with. Remember and select these on the next screen. To mix the food, stir the jelly button. You can do this fast or slow but it takes an equal amount of time, so I stir slowly to reduce wear and tear.</p>

<p>If you experiment with combining base foods with seeds that don’t make a real recipe, it will turn into a blue bone. This works like a gummy bear as far as I can tell.</p>

<ul>
  <li>Favourite foods increase fullness by 1 star</li>
  <li>Acceptable foods increase fullness by 0.5 star, as do gummy bear and the blue bone</li>
  <li>The Puni will refuse some foods and do an inscrutable blue ➿ speech bubble</li>
</ul>

<h2 id="finding-info-from-japanese-sites">Finding info from Japanese sites</h2>

<p>There’s not a lot of English language info, but you can put something like “Punirunzu Evolutions” into a web translator to get Japanese, and then search the web with the Japanese phrase.</p>

<p>E.g. <a href="https://duckduckgo.com/?q=%E3%81%B7%E3%81%AB%E3%82%8B%E3%82%93%E3%81%9A+%E3%81%AB%E3%82%83%E3%82%8B%E3%82%8B%E3%82%93+%E3%81%AE+%E5%85%A5%E6%89%8B%E6%96%B9%E6%B3%95&amp;ia=web">“Punirunzu how to get Nyarurun” -&gt; ぷにるんず にゃるるん の 入手方法</a></p>

<p>I found these sites have good info about evolutions (use browser translation to translate to English):</p>

<ul>
  <li><a href="https://maripoo.jp/punirunes-character/">https://maripoo.jp/punirunes-character/</a></li>
  <li><a href="https://maripoo.jp/punirunes-evolution/">https://maripoo.jp/punirunes-evolution/</a></li>
  <li><a href="https://present-nonnon.hatenablog.jp/entry/punirunzu_character_shinkazukan">https://present-nonnon.hatenablog.jp/entry/punirunzu_character_shinkazukan</a></li>
</ul>

<p>The official <a href="https://www.takaratomy.co.jp/products/punirunes/character/">Takara Tomy site</a> is some help for character names:</p>

<p>When reading Japanese sites through the translator, note that Fushigipuni and Mysterious Puni are the same thing - the silhouettes of Puni adult shapes which you have unlocked (“Magic Squishy”).</p>

<p>Also, this English-language blog reviewing the Korean language version (!) has some good growth info: <a href="https://zanyogwarnerfansfanartandmore.blogspot.com/2024/03/some-punirunespunirunzu-korean-version.html">Some Punirunes/Punirunzu Korean Version Translations</a></p>

<h2 id="games-and-coins">Games and Coins</h2>

<p>Sometimes you want to maximise coins. Here’s a table to help:</p>

<table>
  <thead>
    <tr>
      <th>Game Name</th>
      <th>Duration</th>
      <th>Coin Criteria</th>
      <th>Difficulty Notes</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Mochi (Hammer)</td>
      <td>30s</td>
      <td>300pts for 300 coins</td>
      <td>Tricky at first, easy with practice to get 300pts+</td>
    </tr>
    <tr>
      <td>Pot</td>
      <td>30s</td>
      <td>100pts for 300 coins</td>
      <td>Tricky if you’re tired, easier with practice and when you’re alert</td>
    </tr>
    <tr>
      <td>Platformer</td>
      <td>Goal reached or 60s</td>
      <td>8 stars (80pts) for 300 coins, 5 stars (50 pts) for 200 coins</td>
      <td>You can “speedrun” this in 15 secs to gather 5 stars and 200 coins</td>
    </tr>
    <tr>
      <td>Rhythm</td>
      <td>Song lasts around 43s</td>
      <td>380pts for 300 coins (I think)</td>
      <td>Quite hard with the imprecise controls</td>
    </tr>
    <tr>
      <td>Bubbles</td>
      <td>40s</td>
      <td>10 bubbles (100 pts) for 300 coins</td>
      <td>Easy - get the first three bubbles and follow the blowfish without going up or down, you will easily get 140pts</td>
    </tr>
    <tr>
      <td>Claw</td>
      <td>3 rounds of 10 seconds</td>
      <td>1 toy for 100 coins, 2 for 200, 3 for 300</td>
      <td>Quite hard</td>
    </tr>
  </tbody>
</table>

<p>I mostly play the Bubble game for easy coins, and the other ones for variety.</p>

<h2 id="characters-and-evolutions">Characters and Evolutions</h2>

<p>Baby: Bebirun</p>

<p>Child: Akarun (R), Kirirun (Y), Aorun (B)</p>

<p>Adults:</p>

<p><img src="/assets/punirunes/characters-en.jpg" alt="Adult characters chart" /></p>

<p>Evolution paths are mainly based on the colour of the child level, and the “Magic Squishy”/Fushigipuni which you have collected. Collecting all the possible evolutions requires replaying the game a few times, which is cool.</p>

<p>I am trying to unlock Nyarurun 🤞</p>

<h2 id="passwords">Passwords</h2>

<p>I’m going to list ALL the <a href="https://www.takaratomy.co.jp/products/punirunes/lineup/">Japanese passwords that I found</a>! But only the “Plaza” ones will work with international Punirunes.</p>

<p><strong>Key:</strong> (S)tar, (B)lue, (R)ed, (H)eart, (G)reen</p>

<h3 id="punirunzu-sutaru-star">Punirunzu SUTARU (Star)</h3>

<p>S B R H G - Teddy Bear<br />
R G R S H - Lab background<br />
B R S R B - 1000 coins<br />
R G B G S - 1000 coins</p>

<h3 id="sanrio">Sanrio</h3>

<p>H H S B R - Wings<br />
B S G G H - Heart clip<br />
R H B G S - 1000 coins<br />
S R H B B - 1000 coins</p>

<h3 id="totsushin-tv-connect">Totsushin (TV connect)</h3>

<p>None listed</p>

<h3 id="puni-plaza-international">Puni Plaza (International)</h3>

<p>R G S H B - Red Seeds<br />
G G R S H - Yellow Seeds<br />
B R R B S - Blue Seeds<br />
S H B G R - Playroom background<br />
S G H S G - Top hat</p>

<h3 id="punirunzu-original">Punirunzu Original</h3>

<p>H G B S R - Red Seeds<br />
G S H R G - Yellow Seeds<br />
B R S R B - Blue Seeds<br />
S H H H G - Seeds?<br />
R B G S S - Party Place background<br />
H R B S G - Top hat</p>

<h2 id="secret-code-to-get-hapirun">Secret code to get Hapirun?</h2>

<p>On the Spin Master site, there are some <a href="https://cdn.prod.website-files.com/65fd985954ca89877d445d65/67856f1440628b52583bac3f_Punirunes-SecretCodes.pdf">secret codes</a> listed to trigger special animations featuring Hapirun.</p>

<p>Cover the IR sensor (insert finger), then:</p>

<ul>
  <li>CCAACACA on the default room</li>
  <li>AACCACAC on the rainbow slide room</li>
  <li>CACACCAA on the moon room</li>
  <li>ACACAACC on the underwater room</li>
</ul>

<p>I wonder if doing all of these will unlock the Magic Squishy for Hapirun…?</p>

<h2 id="ending">Ending</h2>

<p>Thanks for reading my Punirunes article! You can reach me by email at <code>ste</code> at this domain.</p>

<blockquote>
  <p>nyarurun: にゃるるん<br />
itsumo MAIPE-SU de hokkori: いつも マイペース で ほっこり<br />
Always at my own pace and warm and cozy 😸</p>
</blockquote>]]></content><author><name>Ste Griffiths</name></author><category term="vpets" /><summary type="html"><![CDATA[I found Punirunes reduced from £20 to £8 at my local Entertainer and picked it up as an after-Christmas present to myself. I wasn’t expecting to be a fan… I suppose I’m a bit of a Tamagotchi purist, and never had one of the full colour or gimicky vpets before. I think I also had a misapprehension that Punirunes wasn’t Japanese but boy was I wrong.]]></summary></entry><entry><title type="html">Cymru Serif Sampler</title><link href="https://stegriff.co.uk/upblog/cymru-serif/" rel="alternate" type="text/html" title="Cymru Serif Sampler" /><published>2026-01-02T00:00:00+00:00</published><updated>2026-01-02T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/cymru-serif</id><content type="html" xml:base="https://stegriff.co.uk/upblog/cymru-serif/"><![CDATA[<p>Cymru Serif is a really cool font. I first looked into it after discovering the new Cadw logo. Don’t remember how/where I acquired it, but it now seems very hard to get hold of.</p>

<p>Here’s a good <a href="https://the-brandidentity.com/typeface/smorgasbord-colophon-foundry-create-type-family-captures-spirit-wales">page about Cymru/Wales Serif on the-brandidentity</a>. The <a href="https://www.colophon-foundry.org/custom/wales/">Colophon foundry page</a> for the font is gone. It says their fonts migrated to Monotype but it’s not on there. So if the Welsh Government want to come after me I will happily take down the page 🙃🐉</p>

<p class="cymru f-10">LL Ch Rh Th rh th ch dd</p>

<p class="cymru f-10">Beddgelert</p>

<p class="cymru f-10">LLandudno</p>

<p class="cymru f-5">Rhosgadfan</p>

<p class="cymru f-5">Griffiths &amp; Williams</p>

<p class="cymru f-5">Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz</p>

<p>The <code>font-feature-settings</code> I have discovered:</p>

<ul>
  <li><code>"ss01" 1</code> Makes the fancy d into a normal d.</li>
  <li><code>"ss02" 1</code> Takes away the feature where the bowl of the B/R don’t meet the stem. Switching this on makes them connected.</li>
</ul>]]></content><author><name>Ste Griffiths</name></author><summary type="html"><![CDATA[Cymru Serif is a really cool font. I first looked into it after discovering the new Cadw logo. Don’t remember how/where I acquired it, but it now seems very hard to get hold of.]]></summary></entry><entry><title type="html">Advent Notes 2025</title><link href="https://stegriff.co.uk/upblog/advent-notes-2025/" rel="alternate" type="text/html" title="Advent Notes 2025" /><published>2025-12-21T00:00:00+00:00</published><updated>2025-12-21T00:00:00+00:00</updated><id>https://stegriff.co.uk/upblog/advent-notes-2025</id><content type="html" xml:base="https://stegriff.co.uk/upblog/advent-notes-2025/"><![CDATA[<p>Some cool people do a <a href="https://eli.li/december-adventure">December Adventure</a>, of which my favourite is always <a href="https://rabbits.srht.site/decadv/">Devine’s</a>, as looking at uxn/varvara is always a mind-expanding trip.</p>

<p>I am way too Dad and way too Church to code every day in December! But I have impressed myself this year by making doing a lot of fun personal project stuff. Having annual leave to use up in December and using a few as personal days did help!</p>

<p><img src="/assets/photos/nativity1.jpg" alt="Nativity scene with Andean figures in a cardboard stable with white fairy lights" /></p>

<h2 id="this-blog">This Blog</h2>

<p>Finally moved this repo to <code>stegriff/stegriff.co.uk</code> so that I can create a <code>stegriff/stegriff</code> and make it public to do a neat front page on my GitHub profile (TBD).</p>

<blockquote>
  <p>I really am torn about making <em>this</em> repo public. I’d like to. But I do prefer that the current view of my information be the only public one, so people can’t go dumpster diving for personal details I’ve changed and redacted…</p>
</blockquote>

<p>Re-did the front page with an About me section, About this site/Colophon, and some stickers that link out to topic pages. To support the amount of body text, I also tweaked the colour of the background texture. <em>Accessibility, man</em>.</p>

<p>Published more topic pages.</p>

<p>Added <a href="/blogroll">a blogroll</a>.</p>

<p>Added the <a href="/upblog/my-ai-policy/">AI policy</a>.</p>

<p>Improved the footer - amazing how much that simple change makes this feel more like a real <em>website’s</em> website??</p>

<p>I have blown away my wildest <a href="/upblog/some-desires-for-this-site-in-2025/">expectations of how much I could blog this year</a>, more than doubling the goal of 12, with <a href="/stats">28 posts so far</a>, the most since 2019.</p>

<p>Satisfying 📈</p>

<p><img src="/assets/stickers/steg.png" alt="Steg Riffs - Cartoon of a chibi stegosaurus playing an electric guitar" /></p>

<h2 id="sg16">SG16</h2>

<p>I vibe coded a thing <a href="/upblog/january-2025-month-notes/#in-my-notebook">I designed last Christmas</a> and thought I would never implement. Thanks Santa Claude!</p>

<p><a href="https://github.com/stegriff/sg16">Repo is here</a>… maybe a blog post incoming.</p>

<h2 id="unowowapp">UnoWowApp</h2>

<p>I <a href="https://dev.to/stegriff/f1-wow-dashboard-on-uno-4090">entered a hackathon</a> and did not win.</p>

<h2 id="vital-context">Vital Context</h2>

<p>Being a volunteer leader in a very small local church means that December entails planning and delivering about half of the stuff that is <a href="https://canningroad.co.uk/post/christmas-2025/">Christmas at Canning Road 2025</a> including but not limited to choosing, practicing, and performing a setlist of eleven songs for a Carol Service, doing two preaches, and leading music worship on three occasions.</p>

<p>Although it’s a lot of work, it’s rewarding. And anything I can get done on my personal time over and above that feels like a huge win.</p>

<h2 id="happy-days">Happy Days</h2>

<p>I have loads of time off this Christmas and I’m excited to see family from near and far, and hopefully get some time to tinker! This is the first Christmas that Frog will understand and both kids are very excited.</p>

<p>God rest ye merry, netizens 🎄</p>]]></content><author><name>Ste Griffiths</name></author><category term="now" /><summary type="html"><![CDATA[Some cool people do a December Adventure, of which my favourite is always Devine’s, as looking at uxn/varvara is always a mind-expanding trip.]]></summary></entry></feed>