Weeknotes: 17th November 2025

Terse weeknotes this week as I have a bit of a head cold!

Last Week

Habitat map validation

I wrote last week about my investigation into a the performance of a hybrid habitat map layer we have been generating, and that is still ongoing, but all the number crunching is now done thankfully. Thanks to input from Shane and Ali, and along with my own re-reading of the Dahal et al validation method paper, I ended up having to re-run my analysis, which is taking a relatively long time: occurrence checking for birds is taking about 90 minutes per iteration, over 11 iterations, and I feel there's definitely a performance silly in there somewhere, but before I look into that I now need to do the manual sifting through results to check that the headline figures I'm getting from the analysis hold up to close scrutiny. No matter how fancy your data-processing pipelines are, at some point it comes down to manual grift to double check that things are correct.

JSON feed

Anil published his OCaml package for JSONfeed last week, so I added support for that to this site. JSONfeed is similar to RSS/Atom, but JSON, and I mostly did it as there's a push for interoperability of feeds for our group blogging efforts.

I also ended up as part of this going through and changing all the URLs in my OCaml web stack from strings to properly typed URIs. I always do this with file paths (Fpath in OCaml, pathlib.Path in Python etc.), and it was silly I didn't do this in the first place. But it's one of those small changes that ripples through and took a while to iron out. Always type tightly from the beginning!

DID(NOT):WEB

Returning to something I last tried in March this year, I had another go at setting up the infrastructure required for being an in dependant citizen under the ATProto federated protocol. I refuse to use anything hosted by Bluesky for this on a point of principle: if your federated service relies on centralised owner, then it's not really federated. Back in March my attempt to set up my own ATProto identity and data store failed as the PDS I was trying to use wouldn't run on my Raspberry Pi hosted server, but now I've migrated away to a more conventional VPS, I thought I'd try again.

Unfortunately, although I got all the parts working, this being a Friday afternoon project I ran out of time getting it to work. I suspect I've just messed up the names involved, due to hosting the PDS not at the top level of my domain. So a few hours effort and nothing working, and in the process I seem to have broken my Matrix homeserver too. My instinct is that I'm not that far from having it work, and perhaps if I didn't have a head cold it'd be working already this morning. But I guess the point is something most people already knew: trying to use ATProto without using someone else's infrastructure really isn't a simple task, and so I still see ATProto as federated in the letter of the protocol, but not in spirit.

This week

Stop having my head feel like it is full of cotton wool

Complete the hybrid map analysis and report back to the LIFE team

Fix up my broken matrix home server and get that ATproto stuff working or deleted