Weeknotes: 14th September 2026

Last week

Liverpool Makefest 2026

Liverpool Makefest 2026 happened on Sunday and seemed to go well. This year rather than being an exhibitor I was on the organising team, as the event was effectively rebooted. After many hiccups along the way, it all seemed to come together in the end with 30 makers setting up stall and a few hundred people coming to see them. It was touch and go at times, but it looks like we pulled it off. It was definitely a team effort: so particular thanks to Jackie, Neil, Dan, and Mike, along with all the volunteers from the DoES Liverpool community who ensured it went smoothly on the day, and the makers, some of which travelled quite a long way, who came and made the day so full of interesting things to see, hear, and touch.

Habitat mapping

The main focus last week was migrating from version 1.1 of Tessera to the beta version 2 embeddings. In addition to the data layer changes, this also required a reworking of my inference code as the geotessera Python package's API changed quite significantly (at least, based on how I was using it) as I migrated from the numpy storage system in v0.9 to the zarr based backend. The perils of innovating on multiple fronts!

In the UK this seemed to not have a huge impact on my results, which is to be expected as I was relatively data rich in the UK: it would be interesting to see how I can scale back my data usage in the UK and still have good results perhaps, or as Anil Madhavapeddy suggested to use the lower resolution version of Tessera v2. Basically for Europe we can probably generate quite good habitat maps using much less compute and/or data than I'm currently doing.

However, the flip side to that is that my very first run on Madagascar was mostly rubbish, due to a combined lack of occurrence data and Open Street Map data in that country. In the UK I found I got a reasonable map with just 50K occurrences going in, but Madagascar is over twice the size of the UK and has a much more varied set of habitats, and I only have around 5K occurrences, and those are very much clustered in popular points (mostly urban areas and forests), leaving a lot of the country under represented, and this clearly wrong in the final map. In small areas though it does a nice job, such as spotting these irrigation channels amongst the fields around Andapa.

habitat mapsatellite view
habitat mapsatellite view

But that is one small bright star in an otherwise dark sky of incorrectness (yes, yes, I'm not a writer :).

As with Brazil I'll review the data to see if there's any obvious pipeline deficiencies, particularly with respect to regional variances in how OSM data is structured (I wrote about this before for Brazil), but ultimately I do think we just are data deficient for my approach in that region. In theory, that shouldn't matter, as Tessera is a global model, and pixels are comparable around the world, so if I have similar habitats in other countries that are more rich in occurrence data (perhaps in the southern parts of Africa, Indonesia, etc.) then that will work just as well. The challenge there is that the v2 embeddings for Tessera are not yet global, and so I'll need to see what I can do there. I still have confidence in the method I'm using, it's just how soon can I get the data to try and de-risk its applicability in areas like this.

In the mean time if this is going to be blocked on more Tessera v2 coverage, then I might spend a bit of time shoring up my ideas around using Tessera to help suggest OSM edits.

LIFE

I was asked to make a custom LIFE layer for the LIFE team, which I failed to hit the deadline for. Thankfully it wasn't for a major part of the paper, and so it'll probably be worked into the review phase - it's just an attempt to make a more accurate version of an estimate they already have some data for. Still, never fun to send people the "you're not going to get this in time" email. The main reason it failed was that having not run the LIFE data for half year, I hit the usual environment atrophy that plagues modern software engineering. My GDAL had updated since I last ran it, Yirgacheffe had changed and I wanted to update that, and some of the code in LIFE itself for this run was also out of date (the scenario in question not being one we run regularly). In theory an hour or two's work, but then I need to double check everything before doing the large aggregated run and it all adds up.

In theory I'd dockerise it all, and so the code could be frozen in time, but I use MLX to run this on my Apple Silicon using its GPUs, and that doesn't work with Docker. The main learning probably is that whilst I can do that for development, I should probably dockerise it and check it runs on our large Linux machines before I park a project.

This week

This is a short week as I'm on PTO for the back half of the week. Priorities are:

  • Fix some of the smaller outstanding issues on my Tessera switch - I have some UTM tearing I need to fix in the final rasters
  • Get this LIFE layer done so I don't need to repeat this panic when the paper reviews come back in

Interesting links

  • I missed the previous Alpaca Conference, a celebration of generative art held in Sheffield in 2025, but the CFP the next one in May 2027 has gone live. I think I'll submit a workshop on generative art in a functional programming style using Claudius/OCaml. By then the HTML version will hopefully be usable so people can actually make things they can share.

Tags: weeknotes