<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Joe Drumgoole</title><link href="https://joedrumgoole.com/blog/" rel="alternate"/><link href="https://joedrumgoole.com/blog/feeds/all.atom.xml" rel="self"/><id>https://joedrumgoole.com/blog/</id><updated>2026-04-29T00:00:00+01:00</updated><entry><title>161 Years of Irish Rain, in One Dashboard</title><link href="https://joedrumgoole.com/blog/irish-rainfall.html" rel="alternate"/><published>2026-04-29T00:00:00+01:00</published><updated>2026-04-29T00:00:00+01:00</updated><author><name>Joe Drumgoole</name></author><id>tag:joedrumgoole.com,2026-04-29:/blog/irish-rainfall.html</id><summary type="html">&lt;p&gt;An interactive dashboard for Met Éireann's Long-term Island of Ireland Precipitation network — 25 stations, 1850 to 2010, mapped, charted, and change-point detected.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="https://joedrumgoole.com/blog/images/irish-rainfall-dashboard.jpg"
     alt="Irish Rainfall Dashboard — interactive map of 25 stations alongside the national annual rainfall trend with detected change points"
     style="width:100%;height:auto;display:block;margin:0 auto;" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The dashboard at a glance: stations colour-coded by long-term average on the
left, the national series with its 10-year moving average and detected
change points on the right.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In Ireland, two things are  true: people will talk about
the weather, and the weather will give them plenty to talk about. But how
much of what we &lt;em&gt;feel&lt;/em&gt; about Irish rainfall — that it's wetter than it used
to be, that the seasons have shifted, that some corner of Cork must surely
hold a world record — actually shows up in the data?&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Irish Rainfall Dashboard&lt;/strong&gt; is a small project I built to make that
question easy to poke at. It takes the Long-term Island of Ireland
Precipitation (IIP) network — 25 weather stations, monthly readings, &lt;strong&gt;1850
to 2010&lt;/strong&gt; — and puts it behind an interactive map and a handful of charts so
you can explore 161 years of Irish weather without writing a line of code.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Live dashboard:&lt;/strong&gt; &lt;a href="https://irish-rainfall.joedrumgoole.com/"&gt;https://irish-rainfall.joedrumgoole.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/jdrumgoole/irish-rainfall"&gt;https://github.com/jdrumgoole/irish-rainfall&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where the data comes from&lt;/h2&gt;
&lt;p&gt;The underlying dataset is published by &lt;a href="https://www.met.ie/cms/assets/uploads/2018/01/Long-Term-IIP-network-1.zip"&gt;Met Éireann&lt;/a&gt; and
was reconstructed and quality-controlled by Mateus, Potito and Curley (2020).
It contains monthly rainfall totals for 25 stations spread across the island,
along with a national series. The dashboard pulls the raw archive directly
from Met Éireann's site, unpacks it, and loads it into a small SQLite
database — so the whole thing is self-contained and reproducible from a
single command.&lt;/p&gt;
&lt;p&gt;A few headline numbers to set the scale:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stations&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Years of data&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;161&lt;/strong&gt; (1850–2010)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;National average&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1094 mm/yr&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wettest station&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Ardara&lt;/strong&gt; — 1692 mm/yr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Driest station&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Dublin Airport&lt;/strong&gt; — 736 mm/yr&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The east–west contrast is the first thing that jumps out: the wettest
station in the network records more than &lt;strong&gt;twice&lt;/strong&gt; the annual rainfall of
the driest, and the driest sits right next to the country's biggest city.&lt;/p&gt;
&lt;h2&gt;What you can do with it&lt;/h2&gt;
&lt;p&gt;The dashboard is designed for browsing rather than dashboards-by-committee.
Everything is one click away.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interactive map&lt;/strong&gt; — All 25 stations plotted on a Leaflet map, colour-coded
  by long-term average rainfall. Click any station to drill into its data, or
  pick from a dropdown to highlight it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Annual rainfall trends&lt;/strong&gt; — A time-series chart for any station (or the
  national average) with configurable 5/10/20/30-year moving averages, so
  you can damp out the year-to-year noise and see the underlying signal.
  You can also overlay a second station to compare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change point detection&lt;/strong&gt; — The dashboard runs the
  &lt;a href="https://centre-borelli.github.io/ruptures-docs/"&gt;ruptures&lt;/a&gt; PELT algorithm
  over each series and marks the years where the rainfall regime appears to
  shift. It's a nice antidote to eyeballing trends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monthly climatology heatmap&lt;/strong&gt; — Average rainfall by station and month,
  laid out as a heatmap. The seasonal pattern across the island is
  immediately visible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Period comparison&lt;/strong&gt; — Pick any two date ranges and the dashboard reports
  the percentage change between them, station by station.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seasonal breakdown&lt;/strong&gt; — Winter / Spring / Summer / Autumn averages per
  station, so you can ask questions like "is it really the &lt;em&gt;winters&lt;/em&gt; that
  are getting wetter?"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There's also a small REST API behind it (&lt;code&gt;/api/stations&lt;/code&gt;,
&lt;code&gt;/api/rainfall/annual&lt;/code&gt;, &lt;code&gt;/api/rainfall/changepoints&lt;/code&gt;, …) for anyone who'd
rather pull the numbers into a notebook.&lt;/p&gt;
&lt;h2&gt;How it's built&lt;/h2&gt;
&lt;p&gt;I wanted the project to be light enough to run on a laptop and simple
enough to read end-to-end in an afternoon. The stack reflects that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python 3.12&lt;/strong&gt; with &lt;a href="https://docs.astral.sh/uv/"&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt; for environment
  and package management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FastAPI&lt;/strong&gt; for the API and server-rendered templates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLite&lt;/strong&gt; as the data store — a single file, no daemon, perfect for a
  read-mostly dataset of this size&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leaflet&lt;/strong&gt; for the map and &lt;strong&gt;Chart.js&lt;/strong&gt; for the time-series charts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ruptures&lt;/code&gt;&lt;/strong&gt; for change point detection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;invoke&lt;/code&gt;&lt;/strong&gt; tasks for everything admin (&lt;code&gt;invoke import-data&lt;/code&gt;,
  &lt;code&gt;invoke start&lt;/code&gt;, &lt;code&gt;invoke stop&lt;/code&gt;, &lt;code&gt;invoke status&lt;/code&gt;, &lt;code&gt;invoke db-info&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Getting it running locally is two commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;uv&lt;span class="w"&gt; &lt;/span&gt;sync
invoke&lt;span class="w"&gt; &lt;/span&gt;import-data&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;# downloads from Met Éireann and builds the SQLite db&lt;/span&gt;
invoke&lt;span class="w"&gt; &lt;/span&gt;start&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="c1"&gt;# serves the dashboard at http://127.0.0.1:8000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Why bother?&lt;/h2&gt;
&lt;p&gt;Honestly, mostly because the dataset is wonderful and deserves more eyeballs
than a folder of CSVs ever gets. Long, clean, public time series are rarer
than they should be, and 160 years of Irish rain is the kind of thing that
rewards a little curiosity. Try poking at Valentia Observatory's winters,
or Markree's change points, or what Dublin Airport looked like in the
1970s — there's a story in nearly every series.&lt;/p&gt;
&lt;p&gt;If you find something interesting, an issue or a PR on the
&lt;a href="https://github.com/jdrumgoole/irish-rainfall"&gt;GitHub repo&lt;/a&gt; is very
welcome.&lt;/p&gt;
&lt;h2&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Live dashboard:&lt;/strong&gt; &lt;a href="https://irish-rainfall.joedrumgoole.com/"&gt;https://irish-rainfall.joedrumgoole.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/jdrumgoole/irish-rainfall"&gt;https://github.com/jdrumgoole/irish-rainfall&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dataset source — Met Éireann:&lt;/strong&gt;
  &lt;a href="https://www.met.ie/cms/assets/uploads/2018/01/Long-Term-IIP-network-1.zip"&gt;https://www.met.ie/cms/assets/uploads/2018/01/Long-Term-IIP-network-1.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Citation:&lt;/strong&gt; Mateus, C.; Potito, A.; Curley, M. 2020. Reconstruction of a
  long-term historical daily maximum and minimum air temperature network
  dataset for Ireland (1831–1968). &lt;em&gt;Geoscience Data Journal&lt;/em&gt;.
  &lt;a href="http://dx.doi.org/10.1002/gdj3.92"&gt;http://dx.doi.org/10.1002/gdj3.92&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;The project is MIT-licensed.&lt;/em&gt;&lt;/p&gt;</content><category term="data"/><category term="data"/><category term="ireland"/><category term="met-éireann"/><category term="rainfall"/><category term="weather"/><category term="climate"/><category term="dashboard"/><category term="python"/><category term="fastapi"/><category term="sqlite"/></entry><entry><title>Colour Wheel for Oil Painters</title><link href="https://joedrumgoole.com/blog/colour-wheel-for-oil-painters.html" rel="alternate"/><published>2026-04-28T00:00:00+01:00</published><updated>2026-04-28T00:00:00+01:00</updated><author><name>Joe Drumgoole</name></author><id>tag:joedrumgoole.com,2026-04-28:/blog/colour-wheel-for-oil-painters.html</id><summary type="html">&lt;p&gt;An interactive RYB colour wheel for picking complements when desaturating oil paint, with pigment recommendations indexed by Colour Index code.&lt;/p&gt;</summary><content type="html">&lt;object data="https://joedrumgoole.com/blog/colour-wheel.svg" type="image/svg+xml" id="colour-wheel"
        style="width:100%;max-width:738px;height:auto;aspect-ratio:738/1070;display:block;margin:0 auto;"
        aria-label="Interactive RYB colour wheel for oil painters with pigment reference"&gt;
  &lt;img src="https://joedrumgoole.com/blog/colour-wheel.svg" alt="RYB colour wheel for oil painters" style="width:100%;max-width:738px;height:auto;display:block;margin:0 auto;" /&gt;
&lt;/object&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;Understanding the Colour Wheel&lt;/h2&gt;
&lt;p&gt;This interactive RYB colour wheel is designed to help oil painters desaturate
colours cleanly and deliberately. Click on any colour segment to reveal its
complement — the colour directly opposite on the wheel.&lt;/p&gt;
&lt;p&gt;The three concentric rings show what happens as you progressively add that
complement to your base colour. The outer ring is the pure colour, the middle
ring shows it mixed with approximately 25% of its complement, and the inner
ring shows 55%. This is how professional painters knock back an over-saturated
colour without reaching for grey or white.&lt;/p&gt;
&lt;p&gt;The panel below the wheel shows the desaturation gradient in fine steps, along
with four reference swatches at useful mixing ratios. All hex values are shown
for digital reference.&lt;/p&gt;
&lt;p&gt;The pigment section lists the most commonly used oil pigments for each colour,
along with their &lt;strong&gt;Colour Index code&lt;/strong&gt; — the international standard printed on
every tube regardless of brand. If a tube says &lt;strong&gt;PR108&lt;/strong&gt;, it's Cadmium Red; if
it says &lt;strong&gt;PB29&lt;/strong&gt;, it's Ultramarine Blue — no matter what the manufacturer calls
it on the label.&lt;/p&gt;
&lt;p&gt;Each pigment is marked &lt;strong&gt;warm&lt;/strong&gt; or &lt;strong&gt;cool&lt;/strong&gt;, because two pigments that share
the same name can behave very differently at the mixing table. A warm blue
like Ultramarine will produce a very different neutral when mixed with a warm
red like Cadmium Red than a cool blue like Phthalo would. The opacity symbol
indicates whether the pigment is transparent (○), semi-transparent (◑), or
opaque (●), which matters when glazing or working wet into wet.&lt;/p&gt;
&lt;p&gt;Click anywhere on the background to return to the full wheel.&lt;/p&gt;</content><category term="Painting"/><category term="oil painting"/><category term="colour theory"/><category term="colour mixing"/><category term="complementary colours"/><category term="desaturation"/><category term="pigments"/></entry></feed>