Over the past few nights I've been tinkering with the Zig build system, after it got a bit of a rework lately . I had a plan: Learn a bit more about Zig, learn a bit more about the Zig build system and get a deeper understanding of what Cargo does to build a Rust project. Building Rust projects with something that is not Rust is something I have experience with . With Zig I tinkered around a bit…
I have no intention to use any part of Microsoft GitHub's Copilot. And yet I have access and with a monthly frequency I receive the "Your GitHub Copilot access has been renewed" email. Copilot is all over the UI and there's seemingly no way to fully disable it. I'm known for finding ublock rules to hide most of the UI stuff 1 . And then sky told me: you can just ask GitHub Support to disable it…
In 2023 I learned about (GNU) make's .ONESHELL . Put this in your Makefile: ref. https://hachyderm.io/@jer/110255986490429550 SHELL = python3 .ONESHELL : date date : from datetime import datetime print(datetime.now()) and make date works. ref. https://hachyderm.io/@jer/110255991586765653 ; make date from datetime import datetime print(datetime.now()) 2026-04-23 12:32:27.193732 So for obvious…
This blog now has sidenotes. And they look like this. After reading the blog post There is absolutely nothing wrong with Web I figured I could try implementing the same pattern on top of Cobalt , my static-site generator of choice. I maintain a fork at git.fnordig.de/fnordig/cobalt.rs anyway, so adding new features is relatively simple. The actual parser is in jer/md-container . So far it only…
Rust is experimenting with compile-time reflection in the form of type_info ( Tracking issue #146922 ). It's far from finished, but the other day more than a month ago 1 the pull request for Support ADT types in type info reflection landed. With that PR the types expose enough information about structs to be useful to play around with. This is what the type info looks like for some types: u32 Type…
In March 2018 I started a job as a Telemetry engineer at Mozilla . Eight years later I'm still here on my Moziversary, as I was in 2019 , 2020 , 2021 , 2022 , 2023 , 2024 and 2025 . In the past year we had 1 CEO change , 14 reorgs , 12 Firefox releases 1 and 31 Glean releases 2 . My team is still part of the Infrastructure Org, now under a bigger organization called Core Services. Other Data…
Back in May 2025 Fatoni, Edgar Wasser and Juse Ju released their new collaboration album BAWRS . I had ordered that on vinyl. Due to the May 1st holiday however the record arrived in my hands 2 days early. The problem: I couldn't play it. I didn't own a record player. This was the fourth vinyl in my collection, with no way to listen to it. The album wasn't available for streaming yet, as it wasn't…
A /uses page still does not exist, so let's update the list. Not much changed from last year's list , but I filled some gaps and switched out a few things. Mail Client : Thunderbird Mail Server : Postfix + Dovecot Stalwart Notes : Obsidian , Scratch 1 To-Do : Obsidian iPhone Photo Shooting : Camera, NightCap Photo Management : Apple Photos, Sigal , fgallery , self-hosted Ente.io (in progress)…
It has become a tradition for me to look at the year that's about to end. I did so in 2024 , 2023 , 2022 , 2021 , 2020 , 2019 , 2018 , 2017 , 2016 , 2015 and 2014 . So here comes the 2025 edition. My year in numbers This year I've been to 3 1/2 conferences. I spent a full week in Utrecht for RustWeek and the Rust Project All-Hands. I went to Paris for EuroRust . I visited Oxidize in Berlin for…
This article is cross-posted to the Data@Mozilla blog . It all started rather inconspicuous: The Data Engineering team filed a bug report about a sudden increase in schema errors at ingestion of telemetry data from Firefox for Android. At that point in time about 0.9% of all incoming pings were not passing our schema validation checks. The data we were seeing was surprising. Our ingestion endpoint…
The other week I read a blog post about a bytebeat player in Zig . "Bytebeats" is music generated from short programs. That might be just: t or something a bit more complex: t*(42&t>>10) Apparently the blog post Algorithmic symphonies from one line of code -- how and why? started it all in 2011. The same author later did a deeper analysis of the patterns involved. I was intrigued enough to…
In the previous blog post I showed how to use getaddrinfo_async_start from C. However I didn't stop there and decided to see if I can fit that into the smol async stack in Rust. smol is a small and fast async runtime. It's an alternative to the probably more known tokio project and is based on several smaller crates like async-io and async-net as its building blocks. To make use of…
On *nix systems the default way to resolve a hostname into an IP address is getaddrinfo . However that function blocks until all the DNS queries return. When the code is supposed to do more work asynchronous a different solution is required. Some try to work around that with threads, but then you also need to deal with cancellation and that's flawed too . Others switch to getaddrinfo_a , but…
(This article is cross-posted on the Data@Mozilla blog .) Since Bug 1896609 landed we now have Glean & Firefox on Glean (FOG) memory reporting built into the Firefox Memory Reporter. This allows us to measure the allocated memory in use by Glean and FOG. It currently covers memory allocated by the C++ module of FOG and all instantiated Glean metrics. It does not yet measure the memory used by…
Back in 2015 when I was learning Rust I started rdb-rs , a library and tool to parse the Redis database file format (known as RDB). I only ever published 4 versions of it, the last one in August 2016. I eventually marked the repository as read-only and forgot about it. Up until recently when Tim Bauer sent me an email in February of this year. Over the past months he took up rdb-rs, fixed up some…
In March 2018 I started a job as a Telemetry engineer at Mozilla . Seven years later I'm still here on my Moziversary, as I was in 2019 , 2020 , 2021 , 2022 , 2023 and 2024 . Mozilla is not the same company it was when I joined. No one on the C-level is here for as long as I am. There have been 5 larger reorgs in the past year and two layoffs in different departments, plus the big round of layoffs…
I have not finished my /uses page, but following Sascha's post , here's my list: Mail Client : Thunderbird Mail Server : Postfix + Dovecot Notes : Obsidian , Scratch 1 To-Do : Obsidian iPhone Photo Shooting : Camera, NightCap Photo Management : Apple Photos, Sigal , fgallery Calendar : Calendar.app, Fantastical Cloud File Storage : Syncthing on my own server RSS : self-hosted Stringer Contacts :…
It has become a tradition for me to look at the year that's about to end. I did so in 2023 , 2022 , 2021 , 2020 , 2019 , 2018 , 2017 , 2016 , 2015 and 2014 . So here comes the 2024 edition (later than usual, but I still date it to the correct year). My year in numbers I attended 4 conferences this year: Rust Nation UK in March, Oxidize in May, RustFest Zürich in June and EuroRust Vienna in…
As I mentioned before I've been playing around with Lil and I like it so far. So much that for a side project I wrote yet another small one-off script in Lil. The scenario I have a git repository with various files, each of which contains coordinates of a given trip. Early on in this project's lifetime a script fetched new data, converted it to JSON, updated the corresponding file and committed…
This post won't include too much explanation. I wanted a place to at least put my code and that's what I have a blog for. It's December, so everyone is doing Advent of Code . I'm not. Or so I told myself. This week, while on vacation, I had some downtime and played around with Decker 1 and its accompanying programming language Lil . Armed with the tutorial , the reference card and the Lil Terminal…
Recently I read Hillel Wayne's article about his texttools.py implementation . I also looked into Tcl a bit. So what better way than to combine these too and port his Python implementation (which was already using Tk) to Tcl (and Wish). The functionality is simple: Paste text in the top box, choose a transform, output appears in the bottom box. The full implementation is a mere 60 lines of Tcl:…
At the moment I'm using a web-based RSS feed reader 1 . That works, is reliable and accessible from anywhere. However I will soon spend some time with less connectivity and thus were considering my options to have a local feed reader app that works offline. A long while ago I used Newsbeuter and then I recently found its successor Newsboat . It can import feeds from an OPML file, so that's what I…
I built a thing: Hare Playground And this is what it looks like: 1 It's an online playground for the Hare programming language . Code is sent to the server for compilation and execution. It responds with the standard and error output serialized into JSON, which gets rendered in the output box in the frontend. This works just the same as other playgrounds . It's a bit slow and might crash on you,…
They say projects are not finished until you write about them. So here we go. Last night I was still up and awake at 2 am. I opened this website and ... BOOM ... bright light in my eyes. I do like this site's simple colorscheme, but when everything around you is dark it does kinda burn in your eyes. So I did what anyone who can't sleep at that hour does: I went on the internet, looked up how to…
Just over a week ago I played handball for exactly 1 minute and 54 seconds. I blocked my opponent, dislocated a finger on my right hand, got a yellow card and left for the hospital. A brief five hours later my hand was in a cast , immobilized for a week. Then I had to deal with being one-handed for the rest of a week. A busy week of course. To my luck I'm mostly left handed! So here's a brief…
Another year went by, so that it's now been 6 years since I joined Mozilla as a Telemetry engineer , I blogged every year since then: 2019 , 2020 , 2021 , 2022 , 2023 Looking back at the past year it sure was different than the years before, again. Obviously we left most of the pandemic isolation behind us and I got to meet more of my coworkers in person: At the Mozilla All-Hands in Montreal,…
sqlelf lets you explore ELF objects through the power of SQL. It turns any executable into a queryable database. Any? No, just those in ELF format, the standard binary file format on most Unix and Linux systems. But not on macOS. macOS relies on the Mach object file format, short Mach-O and sqlelf doesn't support that. The library it uses for parsing in theory does, but that failed on my machine.…
It has become a tradition for me to look at the year that's about to end. I did so in 2022 , 2021 , 2020 , 2019 , 2018 , 2017 , 2016 , 2015 and 2014 . My year in numbers I attended 3 conferences this year. In April I had some colleagues visit Berlin and together we attended PyCon DE & PyData Berlin . First Python conference for me and overall a nice experience, even if there's no single talk that…
Everything old is new again. These days things get deployed as Cloud Functions, Lambdas or whatever FaaS it is today. But those from the old days simply stuck with CGI . Modern 1 Rust is perfect for that kind of world! Cargo now has support for single-file packages ( RFC 3424 ), which allows you to stuff all your code into a single .rs file and then run that. It even caches the built binary, so…
This blog post is in more raw form than previous blog posts. I wrote very few posts this year so far and I wanted to get it out before I lose steam. There's been a lot of chatter about git on the internet lately. Starting with Julia Evans' excellent articles: Some miscellaneous git facts Confusing git terminology git rebase: what can go wrong? Then Mozilla's announcement that next year Firefox…
The other day I had to deploy an old Ruby 2.7 application. As I've recently started experimenting with NixOS I used this as an opportunity to figure out how to reliably and consistently deploy this application. Along the way I had to figure out a couple of things and the available Nix documentation was either outdated or things didn't work as specified. A dev shell for old Ruby To get started all…
ssh-keyscan: fdlim_get: bad value That's the error message I got the other day when I was trying out some project. The web was incredibly useless in telling me what the hell was going wrong here. So I set out to find why this was happening, how to fix it and hopefully make this error message findable on the web. And this is the story how I found a type confusion bug in some 20-year old OpenSSH…
I can't believe it's already my fifth Moziversary. It's been 5 years now since I joined Mozilla as a Telemetry engineer , I blogged every year since then: 2019 , 2020 , 2021 , 2022 . As I'm writing this I'm actually off on vacation (and will be for another week or so) and also it's super early here. Nonetheless it's time to look back and forward. So what have I been up to in the past year? My team…
As I'm starting to use Mastodon more and more, I'm also learning more about how the underlying ActivityPub protocol works 1 . While it is not possible to statically host something that allows one to publish posts on ActivityPub from one's own domain, it is possible to expose user accounts as aliases for accounts on other servers. I learned this from Maarten Balliauw's post "Mastodon on your own…
It has become a tradition for me to look at the year that's about to end. I did so in 2021 , 2020 , 2019 , 2018 , 2017 , 2016 , 2015 and 2014 . My year in numbers I actively attended 5 conferences this year (I think? I lost track). In February we ran RustFest LATAM ( Playlist of all talk recordings ). This was a huge success! Unfortunately we had to cancel the planned EMEA edition in April. In…
Every year Advent of Code happens. Every year I'm not super enthusiastic to actually solve those challenges. Every year I still start (and then maybe stop after some days). 2022 was similar. I don't have a new programming language to learn and I still write enough code day-by-day that more coding is not really necessary. But yet sometimes it can be kind of nice to have a small challenge with a…
Everyone and their dog is getting on ActivityPub . Yes, me too , for now. Mastodon is what everyone is going for, but running an instance is kinda resource intensive and I really don't want to be responsible for yet another service. Mastodon is not the only implementation of ActivityPub though. GoToSocial is another. So why not try it? Let's deploy it on fly.io . We start by creating a new Fly…
Back in 2018 I handed over maintenance for various (hi)redis projects to different people. I retained access to some repositories and packages, but purely out of caution. I recently added Chayim aka cisk as a maintainer to the PyPi project . They work at Redis Ltd. and thus already have access to the repository regardless. The plan is to also add Illia Volochii as a maintainer for hiredis-py next.…
Yesterday the HYTRADBOI conference happened. Have you tried rubbing a database on it? First of: a big thanks to the organizer Jamie Brandon and a huge shout-out to all speakers for putting in the time and effort to fill this conference with amazing content. All talks are now freely available on the website . I didn't see ALL the talks, so what follows is a list of those I can recommend to watch:…
It's my fourth Moziversary. It's been 4 years (and three days) now since I joined Mozilla as a Telemetry engineer. I joined Mozilla as a Firefox Telemetry Engineer in March 2018 , I blogged three times already: 2019 , 2020 , 2021 . The past year continued to be challenging. Except for a brief 3-week period the Berlin office stayed close, so we all continue to work from home. I haven't met (most…
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) All "This Week in Glean" blog posts are listed in the TWiG index (and on the Mozilla Data blog ). This article is cross-posted on the Mozilla Data blog . On…
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) All "This Week in Glean" blog posts are listed in the TWiG index (and on the Mozilla Data blog ). This article is cross-posted on the Mozilla Data blog . We…
It has become a tradition for me to look at the year that's about to end. I did so in 2020 , 2019 , 2018 , 2017 , 2016 , 2015 and 2014 . I struggled getting the 2021 edition done, which is why it's now January 2nd, 2022 when it gets published. Let's stick to the numbers first, as in previous years. My year in numbers Less travel & less conferences. I was around for the second online RustConf in…
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) All "This Week in Glean" blog posts are listed in the TWiG index (and on the Mozilla Data blog ). This article is cross-posted on the Mozilla Data blog . A…
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) All "This Week in Glean" blog posts are listed in the TWiG index (and on the Mozilla Data blog ). This article is cross-posted on the Mozilla Data blog . In…
The Firefox for Android (Fenix) project runs extensive tests on every pull request and when merging code back into the main branch. While many tests run within an isolated Java environment, Fenix also contains a multitude of UI tests. They allow testing the full application, interaction with the UI and other events. Running these requires the Android emulator running or a physical Android device…
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) All "This Week in Glean" blog posts are listed in the TWiG index (and on the Mozilla Data blog ). This article is cross-posted on the Mozilla Data blog . This…
(“This Week in Glean” is a series of blog posts that the Glean Team at Mozilla is using to try to communicate better about our work. They could be release notes, documentation, hopes, dreams, or whatever: so long as it is inspired by Glean.) All "This Week in Glean" blog posts are listed in the TWiG index (and on the Mozilla Data blog ). This article is cross-posted on the Mozilla Data blog .…