<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>stephen.dev</title><link>https://stephen-masters.github.io/</link><description>Recent content on stephen.dev</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Mon, 04 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://stephen-masters.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>The CSS specificity trap that killed my paragraph spacing</title><link>https://stephen-masters.github.io/2026/05/the-css-specificity-trap-that-killed-my-paragraph-spacing/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/2026/05/adding-a-hover-preview-tooltip-to-leaflet-markers/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/2026/05/validating-hugo-front-matter-with-nodetest/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2026/04/rules-engines-on-the-jvm-in-2026/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2026/04/adding-copyright-watermarks-to-images-with-hugos-asset-pipeline/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2026/04/embedding-gps-photo-markers-at-build-time-with-hugo/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/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://stephen-masters.github.io/2021/10/moving-to-hugo/</link><pubDate>Sat, 02 Oct 2021 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2021/03/computing-in-armenia/</link><pubDate>Tue, 16 Mar 2021 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2020/08/digitizing-surmelian/</link><pubDate>Thu, 06 Aug 2020 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2017/03/using-the-kie-workbench-api-to-create-a-project/</link><pubDate>Mon, 20 Mar 2017 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2016/01/multiple-databases-with-spring-boot-and-spring-data-jpa/</link><pubDate>Tue, 05 Jan 2016 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2015/02/a-minimal-spring-boot-drools-web-service/</link><pubDate>Fri, 06 Feb 2015 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2013/10/bundling-project-dependencies-with-the-shade-plugin/</link><pubDate>Wed, 16 Oct 2013 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2013/01/a-web-service-powered-by-spring-and-drools/</link><pubDate>Wed, 23 Jan 2013 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2013/01/a-bigdecimal-accumulator-for-drools/</link><pubDate>Thu, 17 Jan 2013 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2013/01/getting-the-latest-snapshot-from-sonatype-nexus/</link><pubDate>Tue, 15 Jan 2013 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2013/01/multiple-databases-with-spring-data-repositories/</link><pubDate>Tue, 15 Jan 2013 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2011/05/playing-around-with-apache-camel/</link><pubDate>Thu, 12 May 2011 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2008/04/weblogic-scripting-tool-scripts/</link><pubDate>Sat, 05 Apr 2008 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/2007/02/weblogic-scripting-tool/</link><pubDate>Mon, 05 Feb 2007 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/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://stephen-masters.github.io/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/about/</guid><description>&lt;p>I&amp;rsquo;m a software developer and architect. For the last fifteen years I&amp;rsquo;ve been building systems for places that move things around — energy grids, commodity trading desks, settlement banks. I&amp;rsquo;ve shipped a lot of Java and a fair bit of regret.&lt;/p>
&lt;p>This blog is where I write the post I wish I&amp;rsquo;d found three days into a problem. Long-form, no clickbait, no SEO games. I post irregularly but I&amp;rsquo;m trying to be better about that.&lt;/p></description></item><item><title>Subscribe</title><link>https://stephen-masters.github.io/feed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://stephen-masters.github.io/feed/</guid><description/></item></channel></rss>