I track a number of online blogs and connect relevant ones to things I am working on. You can grab my blogroll OPML here, or just browse it below. If you have your own blog that I've missed, do let me know!

Simon Wightman, Patricia Cremona and Sophia Cooke present some key takeaways for funders from our 'Delivering Effective Conservation Practice' meeting…

Thinking about mutable value semantics I recently heard about a very experimental interesting language called Hylo, which is closely related to Swift …

I thought it would be fun experiment to build a terminal inside my own website and use it as a navigation UI. And this site is now the result of this …

Numberphile’s latest video has been released, and in it Ben Sparks introduces the 15 Game.

After reading Anil’s post about his zero-allocation HTTP parser httpz, I decided to apply some OxCaml optimisation techniques to my pure OCaml MP3 e…

At the end of last year, we decided to try something new: a challenge that would run alongside Advent of Code, where we asked the community to show us…

In my previous post on the base image builder, I included a footnote that we now had Windows 2025 workers, but I didn’t mention that the base images…


Three years ago, I started manually crawling for this data. This involved creating a master list of websites that had snow depth and snow fall data, a…

Snowline is a passion project of mine that has been going on for the past three years. The idea was to create a well-designed, data-driven site about …

Welcome to Raphaël Sterbac! I’m very happy to welcome Raphaël Sterbac, a Master’s student from ENS Paris-Saclay who is joining me in Cambridge o…

So. That was a rather stop-start week. It started off pretty well: as noted last week, I was in Brussels to attend FOSDEM 2026 for the first time in a…

For a long time I was skeptical of LLMs—whenever I reached for them I was disappointed by the results. Last year I tried Copilot and Cursor to tweak…

A new year, another roundup in my open-source, OCaml activities. This month has been busy with lots of work on ocaml-tiff thanks to Tambe Salome and p…

Delivering Effective Conservation Practice – a view from a conservation practitionerConservation Evidence
Jez Dagley shares his highlights from our recent 'Delivering Effective Conservation Practice' meeting.

I've not had time to focus on Yirgacheffe directly of late; although I have some ideas I want to build on in terms of finishing the 2.0 release and th…

Introduction The last week was my first back in the UK, which meant that most of the week was spent reviewing where I left things in December last yea…

Research Group Manual: all you need is blogging! After learning about weeknotes from Anil Madhavapeddy last year, I started activating a blogging-orie…

I've been battling the seasonal illnesses this week, so I've combined two weeknotes into one. Fortunately the 'flu doesn't hold Claude back!

More personal and suchlike stuff going on the last two weeks, hence the week’s gap. Felt less productive as a result, though some things got done I …

I claimed last week that I'd have to put aside the fun I was having working through the Ray Tracer Challenge book in OCaml due to other commitments. A…

With Claude Code, perhaps we are now at the point where the test suite is actually more valuable than the code itself.

In this article, I demonstrate how to create a realistic falling leaves simulation in Blender using geometry nodes. I talk about my process for random…

As our workflows become more agentic, CLI tools are becoming preferred over web GUIs; OCurrent pipelines are no exceptions.

These weeknotes are very belated, and go all the way back into December. For some reason following the break I have felt almost unable to write anythi…

Last summer I was invited to participate in an informal meeting of the EU Standing Committee on Operational Cooperation on Internal Security (COSI). T…

AOH calculator I've spent the last couple of years almost maintaining two biodiversity pipelines: first the one for the LIFE metric made by a group ou…

More progress on the Ray Tracer Challenge book by Jamis Buck, this week adding groups, bounding boxes, triangles, and loading of external models, some…

First week back of 2026! Let's write some terse weeknotes.

On 16 December 2000, a young @dra1 stepped out on to the stage of St Martin-in-the-Fields making what would be the first of many performances of Johan…

I run, at least for the time being, NixOS, generally from the main / unstable branch rather than a stable release. After a recent upgrade I found audi…

That feels like it was a relatively productive week :) I interviewed a couple of Ph.D. candidates—good luck! I obtained a short extension to the EU …

The base image builder has a growing number of failed builds; it’s time to address these.

Early in the upgrade program for Ubuntu 24.04, there were permission issues when extracting tar files. The workaround was to update to the latest dev …

Julia Jones describes how new artificial intelligence models could improve conservation effectiveness, based on a workshop at our recent 'Delivering E…

The spring-cleaning continues! When I originally prototyped Relocatable OCaml, it was during the OCaml 4.13 development cycle. The focus for the work …

Over a number of years—in fact, my word, decades—recorded my GPS tracks and taken photos when I go walking.1 Over the years I’ve used a range of…

Satellite imagery analysis doesn't always require massive data and compute. We show how to combine open data from OpenStreetMap and the UK Government'…

On Wednesday 14 January, we officially launched the Ai4Nature Alliance at IET London: Savoy Place, bringing together leaders from ecology, policy, aca…

Over the weekend, one of the NVMe drives in pima failed, which brought down the whole system.

opam 2.5.0 was released on 27th November, and this update needs to be propagated through the CI infrastructure. This post mirrors the steps taken for …

Before xmas I did some experiments with my STAR biodiveristy pipeline with respect to the validation stages. Normally STAR takes about 9k terrestrial …

I wrote up a blog post on the Ray Tracer Challenge book by Jamis Buck, exploring how over xmas I spent some odd moments over the xmas/new year break w…

Late to the party as it’s already mid-January, but here’s a quick review of 2025. I will mostly talk about the projects I’ve worked on, events I…

I run NixOS for the time being, usually tracking unstable. As a result, I have from time to time found myself wanting to pin a package to a particular…

In Numberphile’s latest video, Tony Padilla does a ‘magic trick’ with Fibonacci numbers and talks about Zeckendorf decompositions, and I had my …

As we settle into 2026, I have been doing a little early spring-cleaning. A few years ago, we had a slightly chaotic time in opam-repository over what…

December was busy, both personally and in my OCaml-related work. If you haven't been following along have a read of my October and November roundups. …

Extending the Pico 2 implementation to add effects-based WiFi networking and improve the build system.

The calendar year started with some sysadmin work. Had to get devices reconnected to eduroam and Internal-CL Wi-Fi networks which was happily quite st…

We now have 209 TB of data on a seven-node Ceph cluster. Here are some further notes on using Ceph.

For the last few years I've spent the run up to the festive break working on something graphical, and this year whilst I was a little late to start, I…

I recently ported the Hardcaml_step_testbench library, one of the libraries that we use at Jane Street for Hardcaml simulations, from using monads to …

The University recently rolled its public certificate for eduroam and the old one was dropped a couple of days ago. So double-checking that all device…

I've been playing a bit more with Snakemake, which is a build system tool like Make, but built to be more accessible and targeted at people building s…

Yirgacheffe projection fun In the previous set of weeknotes I wrote about how I was investigating how to integrate map data at different resolutions, …

As promised, this year I'm going to try, at least for a while, switching to notes per topic, rather than a single weekly write up. It'll probably stil…

Nothing of note done, work-wise, for the last week or so. Hey, it was the holidays. Which meant a lot of driving around, and I find it difficult to do…

An interactive 3D Gaussian splat viewer showing a scene reconstructed from a photo using Apple's ml-sharp library.

Jan. 2026Ryan Gibb.Free and Open Source Software Developers’ European Meeting (FOSDEM). The OCaml language package manager, Opam, has support for in…

Jan. 2026Ryan Gibb.Free and Open Source Software Developers’ European Meeting (FOSDEM). Package managers are legion. Every language and operating sy…

Jan. 2026Ryan Gibb.Free and Open Source Software Developers’ European Meeting (FOSDEM). Our digital lives are increasingly fragmented across numerou…

Running OCaml 5 with multicore support on bare-metal Raspberry Pi Pico 2 W (RP2350, ARM Cortex-M33).

For me, this year is the year of vibe-coding -- or coding agents. I don't really care too much about the precise definition of these things. People I …

I've been using Gemini 1.5, 2 and 2.5 Flash and Flash Lite variants for Snowline, my Japan ski resort crawling project. One part of the project involv…

Another two weeks gone, and suddenly we’re at the end of the Calendar Year.1 Not an idle two weeks but not the most productive either. A lot of pers…

Having gone home to visit my parents for Christmas, I am pleasantly surprised to find that their village has finally acquired fibre broadband. As it…

MHE60: Types and Topology I had a wonderful time in Birmingham last week celebrating Martín Escardó’s birthday with a beautiful workshop organised…

Anna Berthinussen introduces a new collation of evidence for kelp conservation.

Back in March of this year we released , a major new version of the OCaml documentation generator. It had a whole load of , many of which came with ne…

Quite often, you install a new package from opam and are keen to jump right in and want a tailored example for your use case. This happened to me duri…

As I was very happy to announce on Discuss on 12 December, OCaml is Relocatable! Today, the final piece of the puzzle was merged, which is the necessa…

Camera App Connection Issues and VPNs on Android Phones - John Maguire I've been using the Ricoh GRIII for the last month and having a lot of pleasure…

I wonder if next year I need to alter my approach to weeknotes, as they're getting the point where some sections could be their own post, and I have t…

Today I learned that Github Packages is not free for private packages. And I learnt it by getting a cryptic npm 403 error when accessing https://npm.p…

An odd week that. About 10 reference letters submitted throughout the week, the latest about 30 minutes ago. Remember: a student is for life, not just…

With the start of Advent comes a new set of Advent of Code problems. My code is available at mtelvers/aoc2025.

Every time I think the term is about to end, there is some task I must undertake. I’m almost done now, but no sooner than I finish with undergraduat…

Better planning leads to less data movement later!

SVGs are pretty cool - vector graphics in a simple XML format. They are supported on just about every device and platform, are crisp on every display,…

1At the start of the month, I was away at the final EU EDGELESS project plenary meeting. As this was hosted by an industrial partner rather than a Uni…

A roundup of some of my OCaml activity this month! Ppxlib Updates I managed to get a substantial amount of ppxlib work completed in the last month. So…

Much has been said about the effects that AI will have on software development, but there is an angle I haven’t seen talked about: I believe that AI…

Hmm. So that was a blogging hiatus, not for any particularly good reason – just a little busier than expected with a little less time in front of a …

A short walk from Bowlees past Low Force to High Force and back, the two Forces in question being waterfalls. Wet underfoot—there had clearly been a…

OCurrent has long wanted to access private repositories. You can achieve this by embedding a scoped PAT in the .git-credentials file, typically within…

Testing is an essential part of building reliable software. It’s a form of documentation, a reminder of mistakes of the past, and a boost of confide…

My throw-away comment at the end of my earlier post shows my scepticism that the JSON file approach was really viable.

My Arm32 branch will quickly go stale and will need to be rebased and tested. Can GitHub Actions do that for me automatically?

Someone was kind enough a few weeks ago to comment on Hacker News that “Opam on Windows is a masterpiece of engineering”. There’s certainly a lo…

I’ve been copying the TESSERA data to Cephfs, but what is actually in the files?

I did not get much done this week, due to a combination of many more meetings than usual, supervisions, assessing Junior Research Fellowship (JRF) app…

Recently, I have been using my Pi Zero (armv6), which has reminded me that OCaml 5 dropped native 32-bit support, and I wondered what it would take to…

I know this one is late… End of term has me swamped, but there is light at the end of the tunnel. A few quick updates. HoTT/UF module drawing to a c…

Advent of Code has long been a favorite December ritual at Jane Street, with many participating in the month-long puzzle challenge that encourages tho…

A late update that stretches more than a week... @ How? A quick update on a new feature that was added recently, the @ how meta-command. One of the is…

My gas supplier has tried and failed to install a smart gas meter, so I’ll give it a go myself.

Intro It’s been a while since I last posted so thought I would give an update on everything that’s been going on in the last couple of weeks, incl…

Why national parks and nature reserves don’t always safeguard ecosystems as expectedConservation Evidence
Miguel Lurgi presents his recent research, which found that protected areas don't always work to conserve the ecological interactions between species.

My Apple Watch has a cool watch face which shows the position of the sun, which feels like a good application for my GPIO library and ePaper display.

Libraries Code %load_ext autoreload %autoreload 2 import sys sys.path.append('../src') from utils.paths import national_parks_dir, wdpa_dir from gee_h…

The weather outside is frightful, but the Raspberry Pi is so delightful; I have been cheering myself by connecting up all the various bits of hardware…

The future of Forester, and gratitude to Tarides Several weeks ago, we made it through the first round of the NLNet NGI Zero Commons Fund application …

Most of this week was spent fixing bugs in Shelter in an attempt to get it ready to run the LIFE pipeline. To do so, Shelter requires a mechanism by w…

I recently completed lecturing the course to our newly arrived first-year computer scientists here at . This is the first time I've lectured this cour…

How do you acquire the fundamental computer skills to hack on a complex systems project like OCaml? What’s missing and how do you go about bridging …

I ended up working on a real mix of things last week. I managed to get two large posts uploaded to this site: an ICFP recap and a deeper-dive into the…

A visit from David Jaz Myers I was pleased to welcome David Jaz Myers from the Topos Institute to Cambridge this past week. It was a fun visit and man…

Another week gone, a little more done. Finally (albeit too slowly) progressing some industrial funding through the system to go alongside the small gr…

I attended the co-located International Conference on Functional Programming (ICFP) and International Conference on Systems, Programming, Languages an…

This is another one of those that’s largely documenting something for myself, but I’m sharing it in case others find it useful. And because self-a…

Welcome to a monthly roundup of OCaml-related open-source work I have been involved with. If you haven't already, a quick look at my ICFP roundup migh…

If you’re working with full disks, adding an Object Storage Daemon, OSD, to your Ceph cluster couldn’t be simpler. Running one command, ceph orch …

Well, that was a slightly slower week: it was school half-term so I had the children for three days. I did manage to finally finish1 polishing my Emac…

Scaleway offers the EM-L110X-SATA machine, which has 4 x 12TB disks. I’ve noted in a previous post that the configuration isn’t ideal for my purpo…

Project Pterodactyl and the CAS model of build systems I’m experimenting with Apple’s llbuild2fx framework, which replaces stateful inputs with co…

Following on from an earlier post about Tree-sitter, Eglot is the Emacs Language Server Protocol (LSP) client. Being also now included in Emacs from v…

Not much to say this week – largely more of the same. Blogged about tree-sitter and (written, to be published shortlynow published!) eglot, configur…

OCaml represents less than 0.01% of training data for many large language models, creating an existential threat for the language community. This talk…

If we implement Slurm over a cluster of machines with different processor architectures, what would the job submission look like?

Project Pterodactyl blogging: goodbye to definitional proof-irrelevance A few weeks ago, I wrote a post entitled Shall we strictify some homotopy prop…

Two weeks ago I was fortunate enough to attend the International Conference on Functional Programming in Singapore. My first time in Asia and my secon…

Recently I had to give a live demonstration of my declarative geospatial for Python, Yirgacheffe, to an audience of other programmers at the PROPL 202…

First, some background that it took me longer than I would’ve hoped to piece together. Tree-sitter is “a parser generator tool and an incremental …

There are Ansible playbooks available at ceph/cephadm-ansible to configure CephFS; however, I decided to set it up manually on some test VMs to gain a…

I spent last week at ICFP 2025. A nice (if exhausting!) week, as ever. Amusingly, the most reflections were actually sparked by Yaron’s talk which w…

As predicted, this week was some Emacs configuration polishing interspersed with some writing using typst. I quite like typst I think – it seems pre…

Following the release of OCaml 5.4 the CI systems need to be updated to use it.

This week: a blog post about my thoughts on Apple’s design announcements at WWDC this week; some thoughts on the emergence of “Forester-likes”, …

Welcome, Jeremy Chen! Jeremy is a Part II student at Trinity College, who will be doing a project with me: Query-based incremental elaborator for a de…

This blog post is an overview of what the Conservation Evidence team are working on. We’ve listed some of our recent and ongoing activities. Please …

Well, the sabbatical began. Your protagonist set off with a song in his heart and the freedom to roam. And all that. So what did I do? Well, initially…

We are increasingly hitting the Docker Hub rate limits when pushing the Docker base images. This issue was previously identified in issue #267. Howeve…

Project Pterodactyl: fuss-free universes and strictifying propositions I’ve continued my blogging spree on my Pterodactyl worklog, with two new post…

The FreeBSD CI worker rosemary needs to be updated to FreeBSD 14.3.

It would be great if overlayFS or unionFS worked on macOS! Initially, I attempted to use DYLD_INTERPOSE, but I wasn’t able to intercept enough syste…

This week With a slight delay, here’s the final blog post of the summer. The last week was quite eventful. Besides cleaning up some scripts (so that…

An old dog meets a new trick: Jujutsu This week I have been trying out the Jujutsu (jj) version control system. There is a lot to like here, especiall…

It's been a long time since I went to a hackathon. I remember enjoying the first few I went to (my personal blog shows me going to Rewired State first…

New (academic) year, new responsibilities. Or more precisely, far fewer responsibilities :) I’m on sabbatical for this academic year1 and, as a resu…

Continuing the previous foray into file descriptors, and trying to remove Obj.magic both from ocaml-uring’s code itself, and from the recommended wa…

Oct. 2025Sadiq Jaffer, Jon Ludlam, Ryan Gibb, Thomas Gazagnaire, and Anil Madhavapeddy.Proceedings of the 2025 OCaml workshop. We discuss how OCaml co…

There was a flurry of activity on ocaml-multicore/ocaml-uring this month leading to a release (ocaml/opam-repository#28604). ocaml-uring provides bind…

Continuing the previous theme of dabbling with matters agentic. Previously, I’d quite assiduously kept my fingers away from files. This time, I want…

HoTTEST talk on Project Pterodactyl On Thursday, I gave my talk at the HoTTEST seminar about Project Pterodactyl, my dream for a new proof assistant t…

Diogo Veríssimo and Gabriel Caetano share their new research on the effects of conservation awareness campaigns, using Wikipedia page views as an ind…

Over the summer, Lucas Ma has been investigating ideas surrounding using effects in the OCaml compiler itself. He’s blogged some of his discoveries …

Can a model trained on satellite data really find brambles on the ground? We put a new model to the test with a field trip around Cambridge. The resul…

Some results from the . This time I've run day10 on 144 or so commits from opam-repository to see how well the cache performs. The results are quite i…

This post is a brief write-up of a couple of bugs in odoc that I've been working on over the past 2 weeks. I was convinced at the start of this that I…

Project Pterodactyl, language servers, and HoTTEST Readers of my blog will be aware that I have been working for some time on prototypes for a new pro…

Intro This is code-focused post of how I’m building this project for more reproducibility. Also, this is the first post made entirely with a Jupyter…

Summer Week 11: ABMs & GPS traces-guided walkability contd. + transfer to hedgehogs (finally w/ some results)Gabriel Mahler
This week This week brought some mixed results, but mostly positive (dare I say). The good: getting GPS traces and trying to use them for “scoring…

If you haven’t discovered the Apache Parquet file format, allow me to introduce it along with ClickHouse.

Yesterday I wrote about the amazing performance of Apache Parquet files; today I reflect on how that translates into an actual application reading Par…

FreeBSD Jails provide isolated system containers that are perfect for CI testing. Miod ported OBuilder to FreeBSD back in 2023. I have been looking at…

I visited Vienna to participate in a workshop about end-to-end encryption and such things, run by the EU Fundamental Rights Agency (FRA). As I took th…

Hedgehogs I put together a notebook that illustrates the progress I’ve made with the hedgehogs projects. For now, it’s bit more of an illustration…

Intro As mentioned in previous posts, for the second big project of my PhD I want to use Geo Foundation Models (GeoFMs) to (re)classify urban areas in…

College updates I finally managed to get an interviewing team put together for the coming Admissions season. This is one of many things that I have to…

Ok, so this is one of those that comes about because I found myself saying the same thing to different people a couple of times within a week or so. W…

The system works by watching opam-repository for changes, and then when it notices a new package it performs an opam solve and builds the package, a p…

, and I have been working on a system to build opam packages similar to the way that the docs-ci system does - effectively building a per-package bina…

For a few years now we've been running , a Jupyterhub instance, for the first year course "Foundations of Computer Science". It serves as a hosting si…

I frequently want a quick way to monitor things from the shell, be that watch -d df -h, or while true loop, or an awk script. The scripts become incre…

This week was largely similar to what I was working on last week. I spent a lot of time trying to figure out ways to use the TESSERA embeddings for pu…

Things are starting to come back to life in Cambridge—meaning that my days of messing around with the computer are numbered and I have to start doin…

This is a bit of a niche one but – here in Cambridge we have a number of quaint / historic / weird / cool (take your pick) traditions. One that I th…

I have written about dm-cache previously, when I used it with LVM for SSD/HDD caching. In this post, I will explore using dm-cache with RAM as the cac…

When a Slurm node is added to a partition, you specify the quantity of physical memory the machine has. Running slurmd -C on the node generates the co…

I have been working on a few different OCaml-related projects over the last few weeks. This is also coinciding with my partner and I moving across the…

NewsRadar: AppKit, SQLite, etc. Over the weekend I continued my very slow development of NewsRadar. When I started my AppKit rewrite, I had initially …





































