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!

February 2026

Mark ElversAlastair TseConservation EvidenceJon SterlingJane StreetAndres Zuñiga-GonzalezJon LudlamRichard MortierMichael DalesPatrick Ferris
Conservation Evidence
Simon Wightman, Patricia Cremona and Sophia Cooke present some key takeaways for funders from our 'Delivering Effective Conservation Practice' meeting…
Jon Sterling
Thinking about mutable value semantics I recently heard about a very experimental interesting language called Hylo, which is closely related to Swift …
Alastair Tse
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 …
Mark Elvers
Numberphile’s latest video has been released, and in it Ben Sparks introduces the 15 Game.
Mark Elvers
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…
Jane Street
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…
Mark Elvers
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…
Alastair Tse
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…
Alastair Tse
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 …
Jon Sterling
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…
Richard Mortier
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…
Jane Street
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…
Patrick Ferris
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…
Michael Dales
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…
Andres Zuñiga-Gonzalez
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…

January 2026

Mark ElversRichard MortierMichael DalesDavid AllsoppRyan GibbSadiq JafferJon LudlamJon SterlingJovana KnezevicFrank FengDavid CoomesAndrew BlakeSrinivasan KeshavConservation EvidenceAnil MadhavapeddyToby JacksonClement AtzbergerJames G. C. BallNick LudlamAndres Zuñiga-GonzalezAI4NatureDave ScottRobin YoungMarkus ImmitzerPatrick FerrisMadeline LisaiusJane Street
Jon Sterling
Research Group Manual: all you need is blogging! After learning about weeknotes from Anil Madhavapeddy last year, I started activating a blogging-orie…
Jon Ludlam
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!
Richard Mortier
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 …
Michael Dales
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…
Mark Elvers
With Claude Code, perhaps we are now at the point where the test suite is actually more valuable than the code itself.
Nick Ludlam
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…
Mark Elvers
As our workflows become more agentic, CLI tools are becoming preferred over web GUIs; OCurrent pipelines are no exceptions.
Jon Sterling
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…
Richard Mortier
Last summer I was invited to participate in an informal meeting of the EU Standing Committee on Operational Cooperation on Internal Security (COSI). T…
Michael Dales
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…
Michael Dales
More progress on the Ray Tracer Challenge book by Jamis Buck, this week adding groups, bounding boxes, triangles, and loading of external models, some…
David Allsopp
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…
Richard Mortier
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…
Richard Mortier
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 …
Mark Elvers
The base image builder has a growing number of failed builds; it’s time to address these.
Mark Elvers
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 …
David Allsopp
The spring-cleaning continues! When I originally prototyped Relocatable OCaml, it was during the OCaml 4.13 development cycle. The focus for the work …
Richard Mortier
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…
AI4Nature
On Wednesday 14 January, we officially launched the Ai4Nature Alliance at IET London: Savoy Place, bringing together leaders from ecology, policy, aca…
Mark Elvers
Over the weekend, one of the NVMe drives in pima failed, which brought down the whole system.
Mark Elvers
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 …
Michael Dales
Before xmas I did some experiments with my STAR biodiveristy pipeline with respect to the validation stages. Normally STAR takes about 9k terrestrial …
Michael Dales
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…
Andres Zuñiga-Gonzalez
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…
Richard Mortier
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…
Mark Elvers
In Numberphile’s latest video, Tony Padilla does a ‘magic trick’ with Fibonacci numbers and talks about Zeckendorf decompositions, and I had my …
David Allsopp
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…
Patrick Ferris
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. …
Mark Elvers
Extending the Pico 2 implementation to add effects-based WiFi networking and improve the build system.
Richard Mortier
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…
Mark Elvers
We now have 209 TB of data on a seven-node Ceph cluster. Here are some further notes on using Ceph.
Michael Dales
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…
Jane Street
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 …
Richard Mortier
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…
Michael Dales
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…
Michael Dales
Yirgacheffe projection fun In the previous set of weeknotes I wrote about how I was investigating how to integrate map data at different resolutions, …
Michael Dales
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…
Richard Mortier
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…
Dave Scott
An interactive 3D Gaussian splat viewer showing a scene reconstructed from a photo using Apple's ml-sharp library.
Ryan Gibb
Jan. 2026Ryan Gibb.Free and Open Source Software Developers’ European Meeting (FOSDEM). The OCaml language package manager, Opam, has support for in…
Ryan Gibb
Jan. 2026Ryan Gibb.Free and Open Source Software Developers’ European Meeting (FOSDEM). Package managers are legion. Every language and operating sy…
Ryan Gibb
Jan. 2026Ryan Gibb.Free and Open Source Software Developers’ European Meeting (FOSDEM). Our digital lives are increasingly fragmented across numerou…

December 2025

Mark ElversRichard MortierAlastair TseDavid AllsoppJon LudlamJon SterlingConservation EvidenceMichael DalesMartin KleppmannPatrick FerrisJane Street
Mark Elvers
Running OCaml 5 with multicore support on bare-metal Raspberry Pi Pico 2 W (RP2350, ARM Cortex-M33).
Alastair Tse
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 …
Alastair Tse
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…
Richard Mortier
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…
Richard Mortier
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…
Jon Sterling
MHE60: Types and Topology I had a wonderful time in Birmingham last week celebrating Martín Escardó’s birthday with a beautiful workshop organised…
Conservation Evidence
Anna Berthinussen introduces a new collation of evidence for kelp conservation.
Jon Ludlam
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…
Mark Elvers
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…
David Allsopp
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…
Alastair Tse
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…
Michael Dales
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…
Alastair Tse
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…
Richard Mortier
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…
Mark Elvers
With the start of Advent comes a new set of Advent of Code problems. My code is available at mtelvers/aoc2025.
Jon Sterling
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…
Jon Ludlam
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,…
Richard Mortier
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…
Patrick Ferris
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…
Martin Kleppmann
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…
Richard Mortier
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 …
Richard Mortier
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…
Mark Elvers
OCurrent has long wanted to access private repositories. You can achieve this by embedding a scoped PAT in the .git-credentials file, typically within…
Jane Street
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…
Mark Elvers
My throw-away comment at the end of my earlier post shows my scepticism that the JSON file approach was really viable.
Mark Elvers
My Arm32 branch will quickly go stale and will need to be rebased and tested. Can GitHub Actions do that for me automatically?
David Allsopp
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…

November 2025

Mark Elvers
I’ve been copying the TESSERA data to Cephfs, but what is actually in the files?
Jon Sterling
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…
Mark Elvers
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…
Jon Sterling
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…
Jane Street
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…
Patrick Ferris
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…
Mark Elvers
My gas supplier has tried and failed to install a smart gas meter, so I’ll give it a go myself.
Andres Zuñiga-Gonzalez
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…
Conservation Evidence
Miguel Lurgi presents his recent research, which found that protected areas don't always work to conserve the ecological interactions between species.
Mark Elvers
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.
Andres Zuñiga-Gonzalez
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…
Mark Elvers
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…
Jon Sterling
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 …
Patrick Ferris
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…
Jon Ludlam
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…
KC Sivaramakrishnan
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 …
Patrick Ferris
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…
Jon Sterling
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…
Richard Mortier
Another week gone, a little more done. Finally (albeit too slowly) progressing some industrial funding through the system to go alongside the small gr…
Ryan Gibb
I attended the co-located International Conference on Functional Programming (ICFP) and International Conference on Systems, Programming, Languages an…
Richard Mortier
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…
Patrick Ferris
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…
Mark Elvers
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 …
Richard Mortier
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…

October 2025

Mark Elvers
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…
Jon Sterling
Project Pterodactyl and the CAS model of build systems I’m experimenting with Apple’s llbuild2fx framework, which replaces stateful inputs with co…
Richard Mortier
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…
Richard Mortier
Not much to say this week – largely more of the same. Blogged about tree-sitter and (written, to be published shortlynow published!) eglot, configur…
Sadiq Jaffer
OCaml represents less than 0.01% of training data for many large language models, creating an existential threat for the language community. This talk…
Mark Elvers
If we implement Slurm over a cluster of machines with different processor architectures, what would the job submission look like?
Jon Sterling
Project Pterodactyl blogging: goodbye to definitional proof-irrelevance A few weeks ago, I wrote a post entitled Shall we strictify some homotopy prop…
Patrick Ferris
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…
Michael Dales
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…
Richard Mortier
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 …
Mark Elvers
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…
David Allsopp
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…
Richard Mortier
As predicted, this week was some Emacs configuration polishing interspersed with some writing using typst. I quite like typst I think – it seems pre…
Mark Elvers
Following the release of OCaml 5.4 the CI systems need to be updated to use it.
Jon Sterling
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”, …
Jon Sterling
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…
Conservation Evidence
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 …
Richard Mortier
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…
Mark Elvers
We are increasingly hitting the Docker Hub rate limits when pushing the Docker base images. This issue was previously identified in issue #267. Howeve…
Jon Sterling
Project Pterodactyl: fuss-free universes and strictifying propositions I’ve continued my blogging spree on my Pterodactyl worklog, with two new post…
Mark Elvers
The FreeBSD CI worker rosemary needs to be updated to FreeBSD 14.3.
Mark Elvers
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…
Gabriel Mahler
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…
Jon Sterling
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…
Michael Dales
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…
Richard Mortier
New (academic) year, new responsibilities. Or more precisely, far fewer responsibilities :) I’m on sabbatical for this academic year1 and, as a resu…
David Allsopp
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…
Ryan Gibb
Oct. 2025Sadiq Jaffer, Jon Ludlam, Ryan Gibb, Thomas Gazagnaire, and Anil Madhavapeddy.Proceedings of the 2025 OCaml workshop. We discuss how OCaml co…
David Allsopp
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…
David Allsopp
Continuing the previous theme of dabbling with matters agentic. Previously, I’d quite assiduously kept my fingers away from files. This time, I want…
Jon Sterling
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…
Conservation Evidence
Diogo Veríssimo and Gabriel Caetano share their new research on the effects of conservation awareness campaigns, using Wikipedia page views as an ind…
David Allsopp
Over the summer, Lucas Ma has been investigating ideas surrounding using effects in the OCaml compiler itself. He’s blogged some of his discoveries …
Jon Ludlam
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…
Jon Ludlam
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…
Jon Sterling
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…
Andres Zuñiga-Gonzalez
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…
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…
Mark Elvers
If you haven’t discovered the Apache Parquet file format, allow me to introduce it along with ClickHouse.
Mark Elvers
Yesterday I wrote about the amazing performance of Apache Parquet files; today I reflect on how that translates into an actual application reading Par…
Mark Elvers
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…
Richard Mortier
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…
Gabriel Mahler
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…
Andres Zuñiga-Gonzalez
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…
Jon Sterling
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…
Richard Mortier
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…
Jon Ludlam
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…
Jon Ludlam
, 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…
Jon Ludlam
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…
Mark Elvers
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…
Gabriel Mahler
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…
Jon Sterling
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…
Richard Mortier
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…
Mark Elvers
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…
Mark Elvers
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…
Patrick Ferris
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…
Jon Sterling
NewsRadar: AppKit, SQLite, etc. Over the weekend I continued my very slow development of NewsRadar. When I started my AppKit rewrite, I had initially …