<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://dcampbell.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://dcampbell.dev/" rel="alternate" type="text/html" /><updated>2026-06-12T13:48:47+00:00</updated><id>https://dcampbell.dev/feed.xml</id><title type="html">Duncan Campbell</title><subtitle>Personal blog by Duncan Campbell.</subtitle><author><name>Duncan Campbell</name></author><entry><title type="html">Retro Game Hackathon</title><link href="https://dcampbell.dev/blog/retro-game-hackathon/" rel="alternate" type="text/html" title="Retro Game Hackathon" /><published>2026-05-28T22:01:00+00:00</published><updated>2026-05-28T22:01:00+00:00</updated><id>https://dcampbell.dev/blog/retro-game-hackathon</id><content type="html" xml:base="https://dcampbell.dev/blog/retro-game-hackathon/"><![CDATA[<p>Today it was my go to lead the monthly Sourcelabs meetup day.</p>

<p>For my turn I decided to change things up a bit. Instead of studying a new technology/framework/platform for a month
and then teaching my colleagues a set of skills over the course of a day I went with a much lazier approach.</p>

<p>Instead I decided to a do a single day Hackathon Competition.</p>

<p>All I told my colleagues ahead of the day itself was that:</p>

<ul>
  <li>They would have to make a game in a day.</li>
  <li>Making the game ahead of time, or even the specs for it will not give you an edge because..</li>
  <li>The rules of the competition will be revealed on the day itself</li>
</ul>

<p>I also promised 100 euros cold hard cash to the winning game.</p>

<p>On the day itself I revealed what the day was going to be about:</p>

<p>Growing up in the 90’s and 00’s I used to play a lot of video games.
Command &amp; Conquer, Age of Empires, Simon the Sorcerer, Jazz Jackrabbit, Doom, Quake, Duke Nukem, Turok… the list goes on and on.</p>

<p><img src="/assets/images/retro-game-hackathon/sts.png" alt="Simon the Sorcerer" title="Simon the Sorcerer" />
<em>Simon the Sorcerer - one of my favourites</em></p>

<p>I loved those games.</p>

<p>My dad did not.</p>

<p>They were violent and often came with 18+ certifications.</p>

<p>So sometimes I would ask “Daaaaad may I please play on the computer?” to which he would almost invariable answer “Yes…. but only EDUCATIONAL games”</p>

<p>At first I would accept this methadone-like substitution for my computer based blood lust and play “Encarta ‘95” or whatever <em>dad approved</em> software he allowed me to run. But after a while my brother and I realised we could sometimes convince him “No no no dad! Age of Empires… IS EDUCATIONAL!! It is a history and strategy game that teaches us about famous battles and civilisations and culture”</p>

<p>And so the only stipulations for the game hackathon would be:</p>

<ol>
  <li>It must be fun</li>
  <li>It must be educational (or at least you must be able to plead its case)</li>
  <li>It must be retro</li>
</ol>

<p>And that was it. My colleagues began.</p>

<p>Watching the reactions was intriguing.</p>

<p>Most people dove into a corner, popped on some headphones and got to it.</p>

<p>Some people lamented “Ohh I don’t use AI at work, I don’t have the experience to do this” or “I don’t play games” or some other excuse. I helped whoever needed help to get up and running (i.e. gave them access to my codex pro account and installed opencode with openspec).</p>

<p>I have done a lot of these training days over the years (some of my training subjects: Akka, Kafka, Phaser, Unity, Databricks, Neo4J, WebAssembly) and this was by far the most successful. I’ll tell you why:</p>

<ul>
  <li>I have never seen my colleagues this quiet. There were many looks of intense focussed concentration.</li>
  <li>There was a lot of swearing “ Oh FOR F@#$S SAKE!? WHY?!?!!?”</li>
  <li>There was a lot of victorious air punches “YESSSSSSSSSSS!!!!!! …. It works”</li>
  <li>When my (slightly impatient) colleague asked if we could wrap things up an hour and half earlier than I had originally planned I floated this past my other colleagues “Heeyy Guyzzzz… sooo some of us are already done with their projects and I was just wondering how you would feel about stopping a bit earlier?”  this was greeted by a very angry chorus of “WHAT!!!?!?!??!  NO!…… NO that was not the original agreement”</li>
</ul>

<p><img src="/assets/images/retro-game-hackathon/game-1.png" alt="Rotterdam" title="Rotterdam" />
<em>Learn about Rotterdam, don’t get stabbed</em></p>

<p>At 15:00 or so an ex-sourcelabser came by and made the comment “I’ve never seen everyone pay so much attention at the end of a workshop day” and he was right. Normally, after a full work week on a Friday by the time 15:00-16:00 rolls around we’re all pretty beat and looking forward to a nice dinner out together and the start of the weekend. But this time I could see people urgently fixing those last bugs, adding that last feature.</p>

<p>Then at around 16:00 we demoed the games. Each game was demoed by the creator for a few minutes, then the game (which also had to be hosted) could be played by the group for a few minutes.</p>

<p>The main point I wanted to make with my day’s activity was: you can do achieve a lot in one day if you are motivated and having fun.</p>

<p>But I was not ready for what I was about to see. My colleagues blew me away with what they made.</p>

<p>A few examples:</p>

<ul>
  <li>A full on 3-d point and click adventure engine that had our office as the environment of play</li>
  <li>A 2d Tony Hawkesque maths game</li>
  <li>A geography game where one drives around the Netherlands answering general knowledge questions</li>
  <li>An Alice in Wonderland quiz game</li>
  <li>A hotel maths game</li>
  <li>A space invaders maths game</li>
  <li>A circuitry based logic puzzle game</li>
  <li>and many more</li>
</ul>

<p><img src="/assets/images/retro-game-hackathon/game-2.png" alt="SlabsQuest" title="SlabsQuest" />
<em>A screenshot from after the hackathon of the fully playable game</em></p>

<p>I somewhat regretted making it a competition since so many of these games were phenomenally impressive.</p>

<p>I announced the victor, Elena, who had created a truly enchanting Alice in Wonderland game, complete with music, fun questions, novel level concepts and a very modern retro aesthetic. She then refused, despite several insistances on my part, to take the 100 euros prize money. I could see my Dutch colleagues wincing in physical pain as I knew they would have had zero trouble taking the cash.</p>

<p>All in all I really enjoyed showing people that today with the combintaion of cold calculating robotic agentic AI and their own warm impossible-to-truly-replace human creativity they could achieve much more than they perhaps thought they could and they could truly enjoy it.</p>

<p><img src="/assets/images/retro-game-hackathon/game-3.png" alt="Alice in Wonderland" title="Alice in Wonderland" />
<em>The winning game’s first level</em></p>]]></content><author><name>Duncan Campbell</name></author><category term="blog" /><summary type="html"><![CDATA[Today it was my go to lead the monthly Sourcelabs meetup day.]]></summary></entry><entry><title type="html">Building an Agentic Book Writing Tool</title><link href="https://dcampbell.dev/blog/agentic-book-writing-tool/" rel="alternate" type="text/html" title="Building an Agentic Book Writing Tool" /><published>2026-05-17T22:02:00+00:00</published><updated>2026-05-17T22:02:00+00:00</updated><id>https://dcampbell.dev/blog/agentic-book-writing-tool</id><content type="html" xml:base="https://dcampbell.dev/blog/agentic-book-writing-tool/"><![CDATA[<p>About a decade ago when my mum retired she fulfilled a lifelong dream of hers.</p>

<p>She wrote a book which you can buy <a href="https://us.amazon.com/Harbour-Cities-Midland-Sylvia-Lowik/dp/9090353143/?_encoding=UTF8">here</a>.</p>

<p>Then a few years later in 2022 she suffered a fall and received a traumatic brain injury that left her with aphasia.</p>

<p>She made it out of the coma. And slowly she began the process of being able to speak again. However a lot of words are mixed up, sometimes she says “meisje” but she means “jongen”, and often that word or name is just on the tip of her tongue but she can’t quite get to it.</p>

<p>Her dream of being a fantasy author was over. She couldn’t type and she has trouble reading text.</p>

<p>But then around 2023-2026 the world changed.</p>

<p>And I feel foolish and stupid that it took me this long to realise it but in the start of 2026 I realised I could use my 20 years of being 1337 H4X0r and the miracle of agentic AI programming tools to breathe new life into that dream of hers.</p>

<p>Together with my brother over the last few weeks and during our last weekend hackathon at mum’n’dad’s we have created a book writing companion application.</p>

<p>Some of the features:</p>

<ul>
  <li>Ingestion of the <em>canon books</em> (just the one in this case) which are essentially prequels that set up lore and the world in which subsequent text should be set.</li>
  <li>Conversation with STT -&gt; LLM -&gt; TTS using FasterWhisper and Kokoro for natural sounding voices which are free and fast (enough) to run locally.</li>
  <li>Tooling available to the LLM to allow it to “read” text and text summaries, to search for keywords and to make edits to the new manuscript being written.</li>
  <li>We also offer the LLM the “tool” of being able to propose changes to the user, which our application presents as diffs a la code PRs to be accepted or declined.</li>
  <li>Accessibility to the max: click the “read aloud” button and any piece of text, be it a button or a label or a dropdown or whatever, will be read out for you.</li>
  <li>Karaoke: mum can read if she hears the words too and if the text being read is highlighted. This is available for any large text field and standard for all chat interaction.</li>
</ul>

<p>There’s a whole bunch more and when I’m happy with the level of quality of the application I will show it off properly.</p>

<p>And then, it’s Augmented Reality time.</p>]]></content><author><name>Duncan Campbell</name></author><category term="blog" /><summary type="html"><![CDATA[About a decade ago when my mum retired she fulfilled a lifelong dream of hers.]]></summary></entry><entry><title type="html">Working With Big Data for the Police</title><link href="https://dcampbell.dev/blog/big-data-police-work/" rel="alternate" type="text/html" title="Working With Big Data for the Police" /><published>2026-05-17T22:01:00+00:00</published><updated>2026-05-17T22:01:00+00:00</updated><id>https://dcampbell.dev/blog/big-data-police-work</id><content type="html" xml:base="https://dcampbell.dev/blog/big-data-police-work/"><![CDATA[<p>Around the summer of 2024 I thought to myself “If I have to write another REST API around another set of relational database tables I think I’ll go insane”.</p>

<p>Of course now the tedium of writing the same sorts of code over and over has been replaced with the agentic AI revolution. But back then that wasn’t yet the case.</p>

<p>And so I went out in search of something else to do. I’ll spare you the details but I fell with my nose in the butter, as the Dutch say. I landed a job working for the Dutch National Police Intelligence. I can’t say much about what I do (… takes off shades like that dude from CSI and looks off into far distance). But I can say that I’m a big data engineer.</p>

<p>I am a plumber. I work with moving shit from A to B. 
As cleanly, quickly, efficiently, quietly and beautifully as possible. Except instead of literal shit I move data (and am paid slightly less).</p>

<p>And I love it.</p>

<p>I love that I have no frontend. My brother is a frontender and my wife is an ex UX/UI designer and I love them both dearly and have the utmost respect for those professions. But for me, purely personally, F CSS and pixels and alignment and webforms and whatever the hell happens to TypeScript projects to get it to run in a browser and flexbox and the yippy-kayay-mutha!@# cowboy wildwest that is the world of frontend frameworks. Don’t get me wrong I’m a stone cold full stack mercenary detachering pro, I will frontend if I have to and I won’t complain about it (much). I even once coded a custom infinite scroll calendar from scratch in Angular and RxJS and it was one of the happiest three weeks of my professional career. But generally I avoid the frontend if I can.</p>

<p>And to be honest, and I know I shouldn’t really say this, but I’m also kinda glad to be rid of those pesky end-users. Now I have beautiful lovely consistent applications as my users. I build software for software, safely cocooned in a world of data pipelines, like Neo before he took that pill … but I’m actually happy in my pod.</p>

<p>I love that a tiny little function I write may be executed dozens of millions of times in a single application run. And so I need to think veeeeery carefully about what I do and making just a teeny tiny improvement can cause massive profits.</p>

<p>Now the AI revolution is here I wouldn’t mind revisiting the world of Enterprise Web Application development since it finally has something new and challenging to offer me. But for now, I’m very happy where I am.</p>]]></content><author><name>Duncan Campbell</name></author><category term="blog" /><summary type="html"><![CDATA[Around the summer of 2024 I thought to myself “If I have to write another REST API around another set of relational database tables I think I’ll go insane”.]]></summary></entry></feed>