Archive for the ‘Technology’ Category

Advent of Code 2025

Sunday, December 14th, 2025

I completed Advent of Code again this year, using Kotlin once more. I’d failed to read the full details on the first day and had to have it pointed out to me that there would only be 12 days this year. There was a massive sigh of relief, not least from the rest of my family!

The first eight days all went very smoothly. I was able to get both parts completed in half an hour or less before starting work in the morning. There was even time to tidy up the code a bit so I could push it to GitHub on the same day.

Everything fell apart a bit for Part 2 on Day 9. I was overly concerned about the scenario where the rectangular areas ran along the edges of the larger shape. In the end, it was sufficient to check whether any edge of the shape intersected the rectangle.

Day 10 was the first and only day that I had to pull in another dependency. I used Microsoft Z3 to determine the required button presses given the constraints in Part 2. I wish I could say I hadn’t wasted a lot of time trying alternative solutions first.

On Day 11, I cracked and resorted to using Copilot to help create the solution for Part 2. I had worked out that the minimum state I needed to track was the number of paths containing either of the special devices. It was Copilot’s idea to use a bitmask to store that information efficiently. It also provided the algorithm for the device topology sort, so they didn’t need to be revisited during the search.

Copilot aided again in the solution for Part 2 on the final day, providing most of what you see in canFit. When looking at the solution thread before writing this, I was somewhat dismayed to discover that it wasn’t necessary to attempt to place the presents at all – just checking whether there was enough space under the tree would have sufficed. My solution runs in around 45 seconds, but I’m now left wondering whether the heuristic used to select the type of present would hold up under a more complex topology.

All in all, I enjoyed this year’s challenges, but I am glad to be able to resume my morning walks before work for the remainder of December!

XML Google Maps to OSM Plugin Migration

Sunday, November 2nd, 2025

The recent spat between Garmin and Strava reminded me that there was a time when I used to post GPX files on this blog for orienteering events and my more interesting runs. I then used the XML Google Maps plugin to render those GPX files. That plugin failed to survive a PHP upgrade many years ago, and the maps were gone. I sensed another opportunity for Copilot…

(more…)

MapRun Score Optimal Route Planning

Sunday, October 5th, 2025

I decided to test out Copilot on another MapRun-related challenge: planning the optimal route for a score event. Our Summer League events are, more often than not, planned using OpenOrienteeringMap. This uses OpenStreetMap data for the base map. The format is usually a 45-minute urban score event, using MapRun’s ScoreNxx scoring system. The aim was to take the KML file that describes an event, and determine the best route to take to maximise the score. As a constraint, I would specify the maximum distance that the route should cover (i.e., how fast the competitor was expected to run).

(more…)

MapRun League Results Generator

Saturday, August 2nd, 2025

Southampton Orienteering Club has what is now an annual MapRun league. A few years ago, I wrote a tool to scrape the results for each event, allocate points (only your first attempt counts, and it must be in a specific time window), and publish some HTML results. For example, those from this year (which I might just happen to have won!). For some reason lost in the mists of time, it was written in Node, but I decided that I would rewrite it in Golang before sharing it with the world on GitHub.

(more…)

Creating a Membership List in Drupal 11 with Aggregating Views

Wednesday, July 9th, 2025

I’ve written before about our use of Drupal for the Southampton Orienteering Club website. We’re now on Drupal 11, and my opinions haven’t really changed. Upgrades are still painful, particularly the community modules that we have to leave behind each time. The user experience for creating content also lags behind newer alternatives. We have a significant amount of historical content on the site (not all of it publicly visible), making a move a daunting proposition. In the meantime, as this post demonstrates, we continue to utilise the powerful features that Drupal and its ecosystem offer.

(more…)

Stopping the Git CredentialHelperSelector from popping up

Tuesday, June 24th, 2025

Recently, I was plagued by the “CredentialHelperSelector” dialogue popping up multiple times when attempting to pull from a remote Git repository. This was despite repeatedly selecting the option to remember my selection to use manager and various attempts to explicitly set the config helper via the command line.

(more…)

Updating the symbol set and magentic north with OpenOrienteering Mapper

Sunday, June 15th, 2025

I spend a couple of hours a week hanging around the leisure centre at Fleming Park while Emma swims. For the past month or so, I’ve been using that time to update the orienteering map of the area, ready for the SOC Summer Series event there in August. The fairways of the old golf course are becoming increasingly overgrown, aided by the planting of lots of new trees. I therefore wanted to update the map to the latest sprint specification, ISSprOM 2019-2, so that I could make use of the ‘rough open with scattered bushes’ symbol. Although it hasn’t shifted much since 2016, I thought it was also time to update magnetic north.

The following directions for OpenOrienteering Mapper (OOM) are based on those I received from the club’s mapping officer, Mark Light.

(more…)

Helm: for better or worse?

Monday, June 9th, 2025

A few weeks ago, one of my colleagues at JUXT gave a presentation on Helm, and this started me thinking back over my own experiences with the tool. It appears I already had a lot to say on the subject back in 2018! Since then, I’ve made extensive use of Helm at CloudBees where we had an umbrella chart to deploy the entire SaaS platform, and at R3. It’s that latter experience that I’m going to talk about in this post.

(more…)