<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software on JKTDEV.CO.UK</title><link>/tags/software/</link><description>Recent content in Software on JKTDEV.CO.UK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 27 Aug 2026 21:52:06 +0100</lastBuildDate><atom:link href="/tags/software/index.xml" rel="self" type="application/rss+xml"/><item><title>Revisiting Some Internal Development Tools</title><link>/posts/appdevpt3/</link><pubDate>Thu, 27 Aug 2026 21:52:06 +0100</pubDate><guid>/posts/appdevpt3/</guid><description>&lt;p&gt;Today I worked on some internal tooling for my software development, revisiting two small command-line utilities that I originally created some time ago:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/johnktaylor/db-concat/"&gt;db-concat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/johnktaylor/repo-status"&gt;repo-status&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both tools were originally created fairly quickly to solve specific problems I had at the time. They worked, so naturally they remained largely untouched after that!&lt;/p&gt;
&lt;p&gt;They are now undergoing fairly heavy revision, including refactoring, improving code quality, adding tests and generally bringing them closer to something I would consider suitable for use outside my own development environment.&lt;/p&gt;</description></item><item><title>AI Writes the Code, I Still Engineer the Software</title><link>/posts/aipt4/</link><pubDate>Wed, 26 Aug 2026 23:15:23 +0100</pubDate><guid>/posts/aipt4/</guid><description>&lt;p&gt;Over the past few months I&amp;rsquo;ve been using AI tools to a much greater extent in my coding work.&lt;/p&gt;
&lt;p&gt;In particular, I&amp;rsquo;ve increasingly been using them to generate the code that I would previously have written myself.&lt;/p&gt;
&lt;p&gt;That does not mean I&amp;rsquo;ve moved over to &amp;ldquo;vibe coding&amp;rdquo;, at least not in the sense that I understand the term: repeatedly prompting an LLM until whatever it produces appears to work, running it, kicking the tyres a bit, and moving on without necessarily reading or fully understanding what has been produced behind the scenes.&lt;/p&gt;</description></item><item><title>Defining the UCMOD Auxiliary Connector</title><link>/posts/buildingblockspt35/</link><pubDate>Fri, 21 Aug 2026 20:39:04 +0100</pubDate><guid>/posts/buildingblockspt35/</guid><description>&lt;p&gt;Today I decided to define the UCMOD Auxiliary Connector layout.&lt;/p&gt;
&lt;h2 id="ucmod-connector"&gt;UCMOD Connector&lt;/h2&gt;
&lt;p&gt;As a prelude to designing the UCMOD Auxiliary Connector, here is the current pinout definition for the existing main UCMOD connector.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Pin&lt;/th&gt;
 &lt;th&gt;Function&lt;/th&gt;
 &lt;th&gt;Pin&lt;/th&gt;
 &lt;th&gt;Function&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;3V3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;RESERVED&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;I2C_SCL / GPIO0&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;I2C_SDA / GPIO1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;UART_TX / GPIO2&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;UART_RX / GPIO3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;SPI_MOSI / GPIO4&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;SPI_MISO / GPIO5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;11&lt;/td&gt;
 &lt;td&gt;SPI_SCK / GPIO6&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;SPI_CS / GPIO7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;13&lt;/td&gt;
 &lt;td&gt;AN0 / GPIO8&lt;/td&gt;
 &lt;td&gt;14&lt;/td&gt;
 &lt;td&gt;AN1 / GPIO9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;AN2 / GPIO10&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;AN3 / GPIO11&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;td&gt;RESERVED&lt;/td&gt;
 &lt;td&gt;18&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;3V3&lt;/td&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;GND&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There are 12 GPIO pins available through the standard UCMOD connector, with a defined primary function assigned to each where appropriate. These include I2C, UART, SPI and four analogue-capable pins.&lt;/p&gt;</description></item><item><title>Kubernetes, Hugo, React, MkDocs and Docker</title><link>/posts/systemadmin/</link><pubDate>Sun, 21 Jun 2026 22:31:29 +0100</pubDate><guid>/posts/systemadmin/</guid><description>&lt;p&gt;Today I decided to do some maintenance on my various websites, which are built using a mixture of React, Hugo, and MkDocs, then packaged as Docker containers and deployed to a Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;The setup has grown gradually over time, but the basic idea is fairly simple.&lt;/p&gt;
&lt;h2 id="the-deployment-pipeline"&gt;The Deployment Pipeline&lt;/h2&gt;
&lt;p&gt;Each site lives in its own repository on my Git server. When changes are pushed to the main branch, a Drone CI pipeline builds a new Docker image, pushes it to my container registry, and updates the relevant deployment on the Kubernetes cluster.&lt;/p&gt;</description></item><item><title>Improving My Demos</title><link>/posts/appdevpt/</link><pubDate>Sun, 14 Jun 2026 23:56:17 +0100</pubDate><guid>/posts/appdevpt/</guid><description>&lt;h2 id="improving-my-demos"&gt;Improving My Demos&lt;/h2&gt;
&lt;p&gt;Over the last week I have mainly been working on other things: business admin, planning, and some improvements to the Demos and Tools section of my website.&lt;/p&gt;
&lt;p&gt;Business admin is not especially exciting, but it has to be done. The more interesting part of the week was spending some time improving a couple of technical demos that are useful both as website content and as practical tools for my own work.&lt;/p&gt;</description></item></channel></rss>