<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>scattercode.dev</title><link>https://scattercode.dev/</link><description>Recent content on scattercode.dev</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://scattercode.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Conventional Commits all the way to a released version</title><link>https://scattercode.dev/2026/08/conventional-commits-all-the-way-to-a-released-version/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/08/conventional-commits-all-the-way-to-a-released-version/</guid><description>Wiring commit-driven releases so the version number actually means something — the misconfiguration that made every release a minor bump for months, the separation between version calculator and changelog generator, and the CI permissions that block every first attempt</description></item><item><title>Snapshot-first: why your restore tool should never trust the live environment</title><link>https://scattercode.dev/2026/08/snapshot-first-why-your-restore-tool-should-never-trust-the-live-environment/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/08/snapshot-first-why-your-restore-tool-should-never-trust-the-live-environment/</guid><description>A design constraint for disaster recovery tooling — resolve every restore against a configuration snapshot captured before the incident, never against a live query — and what falls out of it: pure-function planning, fully offline tests, and drills cheap enough to run continuously</description></item><item><title>Teaching an AI reviewer to review a design document, not code</title><link>https://scattercode.dev/2026/08/teaching-an-ai-reviewer-to-review-a-design-document-not-code/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/08/teaching-an-ai-reviewer-to-review-a-design-document-not-code/</guid><description>What happened when I pointed a shared AI merge-request reviewer at an architecture repository containing no code — separating the mechanical gates from the judgement checks, forbidding fabrication, and the style rule that would have broken the build</description></item><item><title>A changelog you never write: Conventional Commits, Lefthook and git-cliff</title><link>https://scattercode.dev/2026/07/a-changelog-you-never-write-conventional-commits-lefthook-and-git-cliff/</link><pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/07/a-changelog-you-never-write-conventional-commits-lefthook-and-git-cliff/</guid><description>How I standardised commit messages and changelogs across a polyglot workspace — Conventional Commits enforced by a shared shell hook, Lefthook to manage the hooks, Keep a Changelog as the format, and git-cliff to generate the changelog from history and keep it current in CI</description></item><item><title>Shipping the release pipeline: git-cliff in GitHub Actions across ten repos</title><link>https://scattercode.dev/2026/07/shipping-the-release-pipeline-git-cliff-in-github-actions-across-ten-repos/</link><pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/07/shipping-the-release-pipeline-git-cliff-in-github-actions-across-ten-repos/</guid><description>A follow-up to the Conventional Commits post — rolling out automated semantic versioning, changelog updates and GitHub Releases with git-cliff in GitHub Actions across ten repositories, and the gotchas found on the way: release commits polluting the changelog, GITHUB_TOKEN loop protection, and a branch-protected main</description></item><item><title>From Scans to Published Ebook: Building a Digital Publication Pipeline</title><link>https://scattercode.dev/2026/05/from-scans-to-published-ebook-building-a-digital-publication-pipeline/</link><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/05/from-scans-to-published-ebook-building-a-digital-publication-pipeline/</guid><description>How I built a composable pipeline to take physical book scans through OCR, automated cleaning, AI copy-editing, and Vellum layout — and packaged it as a reusable toolchain with a step-by-step tutorial.</description></item><item><title>The CSS specificity trap that killed my paragraph spacing</title><link>https://scattercode.dev/2026/05/the-css-specificity-trap-that-killed-my-paragraph-spacing/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/05/the-css-specificity-trap-that-killed-my-paragraph-spacing/</guid><description>How a routine margin reset overrode the owl selector and made all my prose paragraphs run together — and the one-line fix.</description></item><item><title>Building an about page in Hugo without touching single.html</title><link>https://scattercode.dev/2026/05/building-an-about-page-in-hugo-without-touching-single.html/</link><pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/05/building-an-about-page-in-hugo-without-touching-single.html/</guid><description>How to use Hugo&amp;rsquo;s layout key to give a standalone page its own template, rather than bending a shared layout with conditionals.</description></item><item><title>Adding a hover-preview tooltip to Leaflet markers</title><link>https://scattercode.dev/2026/05/adding-a-hover-preview-tooltip-to-leaflet-markers/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/05/adding-a-hover-preview-tooltip-to-leaflet-markers/</guid><description>How to build a floating thumbnail tooltip for Leaflet photo markers — shared DOM element, edge-flip positioning, hover delays, and keyboard accessibility.</description></item><item><title>Touch events and focus on mobile — the two-tap trap</title><link>https://scattercode.dev/2026/05/touch-events-and-focus-on-mobile-the-two-tap-trap/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/05/touch-events-and-focus-on-mobile-the-two-tap-trap/</guid><description>Why the &amp;lsquo;first tap previews, second tap acts&amp;rsquo; pattern is broken on touch devices, and what to do instead.</description></item><item><title>Validating Hugo front matter with node:test</title><link>https://scattercode.dev/2026/05/validating-hugo-front-matter-with-nodetest/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/05/validating-hugo-front-matter-with-nodetest/</guid><description>A lightweight, zero-dependency test that walks your Hugo content tree and catches broken image paths before they reach production.</description></item><item><title>Rules engines on the JVM in 2026</title><link>https://scattercode.dev/2026/04/rules-engines-on-the-jvm-in-2026/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/04/rules-engines-on-the-jvm-in-2026/</guid><description>Drools is no longer the only game in town. A look at Easy Rules, RuleBook, and when you should reach for a rules engine at all.</description></item><item><title>Adding copyright watermarks to images with Hugo's asset pipeline</title><link>https://scattercode.dev/2026/04/adding-copyright-watermarks-to-images-with-hugos-asset-pipeline/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/04/adding-copyright-watermarks-to-images-with-hugos-asset-pipeline/</guid><description>How to stamp a copyright notice onto every image at Hugo build time using images.Text — including the font trap, the shadow technique for readability, and how to keep multiple shortcodes in sync.</description></item><item><title>Embedding GPS photo markers at build time with Hugo</title><link>https://scattercode.dev/2026/04/embedding-gps-photo-markers-at-build-time-with-hugo/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/04/embedding-gps-photo-markers-at-build-time-with-hugo/</guid><description>How to replace browser-side EXIF GPS reading with a pre-build Node script that embeds coordinates directly in the HTML — faster maps, no async loading, no browser EXIF parsing.</description></item><item><title>Hugo image processing gotchas: what the docs don't warn you about</title><link>https://scattercode.dev/2026/04/hugo-image-processing-gotchas-what-the-docs-dont-warn-you-about/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/04/hugo-image-processing-gotchas-what-the-docs-dont-warn-you-about/</guid><description>A collection of non-obvious traps in Hugo&amp;rsquo;s image processing pipeline: the ASCII-only default font, the strings.TrimLeft argument order, stale image caches, and why two shortcodes processing the same image can produce different URLs.</description></item><item><title>Building a GPS photo map with Hugo, Leaflet, and exifr</title><link>https://scattercode.dev/2026/04/building-a-gps-photo-map-with-hugo-leaflet-and-exifr/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2026/04/building-a-gps-photo-map-with-hugo-leaflet-and-exifr/</guid><description>How to build an interactive map for a Hugo static site that reads GPS coordinates directly from image EXIF data and plots photo markers alongside a GPX route — with all the gotchas.</description></item><item><title>Moving to Hugo</title><link>https://scattercode.dev/2021/10/moving-to-hugo/</link><pubDate>Sat, 02 Oct 2021 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2021/10/moving-to-hugo/</guid><description>Switching the blog to Hugo on GitHub Pages after years on various platforms.</description></item><item><title>Computing in Armenia</title><link>https://scattercode.dev/2021/03/computing-in-armenia/</link><pubDate>Tue, 16 Mar 2021 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2021/03/computing-in-armenia/</guid><description>Armenia&amp;rsquo;s pivotal role in developing computers in the Soviet Union — written in preparation for an Armenian Institute event on Women in Science.</description></item><item><title>Digitizing Surmelian</title><link>https://scattercode.dev/2020/08/digitizing-surmelian/</link><pubDate>Thu, 06 Aug 2020 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2020/08/digitizing-surmelian/</guid><description>In 2020, the Armenian Institute republished I Ask You, Ladies and Gentlemen by Leon Surmelian. This is the story of how I got involved in digitising it.</description></item><item><title>Using the KIE Workbench API to create a project</title><link>https://scattercode.dev/2017/03/using-the-kie-workbench-api-to-create-a-project/</link><pubDate>Mon, 20 Mar 2017 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2017/03/using-the-kie-workbench-api-to-create-a-project/</guid><description>The KIE Workbench REST API lets you automate project setup in a fresh container — useful when VirtualBox keeps changing your IP address.</description></item><item><title>Multiple databases with Spring Boot and Spring Data JPA</title><link>https://scattercode.dev/2016/01/multiple-databases-with-spring-boot-and-spring-data-jpa/</link><pubDate>Tue, 05 Jan 2016 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2016/01/multiple-databases-with-spring-boot-and-spring-data-jpa/</guid><description>Connecting a Spring Boot application to two separate databases with Spring Data JPA, working around Boot&amp;rsquo;s default autowiring behaviour.</description></item><item><title>A minimal Spring Boot Drools web service</title><link>https://scattercode.dev/2015/02/a-minimal-spring-boot-drools-web-service/</link><pubDate>Fri, 06 Feb 2015 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2015/02/a-minimal-spring-boot-drools-web-service/</guid><description>Just the essentials: a Spring Boot application exposing a Drools rules engine as an HTTP API, nothing more.</description></item><item><title>Bundling project dependencies with the Shade plugin</title><link>https://scattercode.dev/2013/10/bundling-project-dependencies-with-the-shade-plugin/</link><pubDate>Wed, 16 Oct 2013 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2013/10/bundling-project-dependencies-with-the-shade-plugin/</guid><description>The Maven Shade plugin bundles all dependencies into a single fat jar — handy for deploying libraries into Drools Guvnor or running self-contained FitNesse fixtures.</description></item><item><title>A web service powered by Spring and Drools</title><link>https://scattercode.dev/2013/01/a-web-service-powered-by-spring-and-drools/</link><pubDate>Wed, 23 Jan 2013 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2013/01/a-web-service-powered-by-spring-and-drools/</guid><description>A reference project wiring Spring and Drools without the heavyweight KIE integration — hand-cranked and straightforward.</description></item><item><title>A BigDecimal accumulator for Drools</title><link>https://scattercode.dev/2013/01/a-bigdecimal-accumulator-for-drools/</link><pubDate>Thu, 17 Jan 2013 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2013/01/a-bigdecimal-accumulator-for-drools/</guid><description>Drools&amp;rsquo;s built-in sum accumulator silently converts BigDecimals to doubles. A custom accumulator to fix that before it corrupts your financial calculations.</description></item><item><title>Getting the latest snapshot from Sonatype Nexus</title><link>https://scattercode.dev/2013/01/getting-the-latest-snapshot-from-sonatype-nexus/</link><pubDate>Tue, 15 Jan 2013 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2013/01/getting-the-latest-snapshot-from-sonatype-nexus/</guid><description>A Ruby script to parse the Nexus REST API and reliably fetch the latest snapshot artifact, sidestepping the timestamped filename problem.</description></item><item><title>Multiple databases with Spring Data repositories</title><link>https://scattercode.dev/2013/01/multiple-databases-with-spring-data-repositories/</link><pubDate>Tue, 15 Jan 2013 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2013/01/multiple-databases-with-spring-data-repositories/</guid><description>Configuring a Spring application with two separate data sources using Spring Data JPA — separate @Configuration classes and EntityManagerFactory beans for each schema.</description></item><item><title>Playing around with Apache Camel</title><link>https://scattercode.dev/2011/05/playing-around-with-apache-camel/</link><pubDate>Thu, 12 May 2011 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2011/05/playing-around-with-apache-camel/</guid><description>First impressions of Apache Camel for implementing Enterprise Integration Patterns — a content-based router and a CSV-to-XML transform with almost no code.</description></item><item><title>WebLogic Scripting Tool scripts</title><link>https://scattercode.dev/2008/04/weblogic-scripting-tool-scripts/</link><pubDate>Sat, 05 Apr 2008 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2008/04/weblogic-scripting-tool-scripts/</guid><description>Useful WLST resources and Gist examples for scripting WebLogic domain creation and server administration.</description></item><item><title>WebLogic Scripting Tool</title><link>https://scattercode.dev/2007/02/weblogic-scripting-tool/</link><pubDate>Mon, 05 Feb 2007 00:00:00 +0000</pubDate><guid>https://scattercode.dev/2007/02/weblogic-scripting-tool/</guid><description>BEA&amp;rsquo;s Jython-based scripting tool for automating WebLogic server administration — create domains, manage deployments, and handle disaster recovery without restarting.</description></item><item><title>About</title><link>https://scattercode.dev/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://scattercode.dev/about/</guid><description>&lt;p>This site covers a number of projects being run under the scattercode umbrella, alongside a tech blog which has been running since the late 1990s under different designs and URLs. In that time, the writing has covered software development topics, and more recently, has incorporated various side projects based on volunteer work for Armenian organisations, such as the &lt;a href="https://www.armenianinstitute.org/">Armenian Institute&lt;/a>, and other charity organisations interested in digitising archives and books.&lt;/p>
&lt;p>Long-form, no clickbait, no SEO games. Posts are irregular but there&amp;rsquo;s a chance that might improve.&lt;/p></description></item><item><title>Subscribe</title><link>https://scattercode.dev/feed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://scattercode.dev/feed/</guid><description/></item></channel></rss>