I'm blogging about Emacs, Drupal, php and exciting subjects

Ranking search results with BM25

So far in this series we have crawled pages, broken them into tokens, and built an index that can tell us which documents contain a term. That leaves the question every search engine actually lives or dies by: in what order do we show them?

A query for "puppet ubuntu" might match four hundred documents. The user will look at five. Getting those five right is the ranking problem, and for keyword search the answer has been more or less settled since the 1990s: BM25.

Publishing to Drupal via JSON:API: A Config-Managed REST Pipeline

Most guides to enabling REST or JSON:API in Drupal tell you to go to /admin/config/services, tick some checkboxes, and save. That's fine advice for a one-off experiment, and terrible advice for anything you intend to depend on. A permission granted by clicking a checkbox in an admin UI leaves no diff, no code review, no record of who enabled it or why, and no way to reproduce it on staging without either remembering to click the same checkbox there too or exporting config after the fact and hoping you caught everything it touched.

Email Self-Hosting in 2026: Is It Still Possible Without Getting Blacklisted?

Every year, on schedule, someone writes the obituary for self-hosted email. The argument is always the same shape: Gmail and Microsoft control the inbox, residential and small-VPS IP ranges are pre-blocked before you've sent a single message, and the only rational move is to hand your mail to a SaaS provider and get on with your life. I've heard some version of this argument every year for the last five, and every year I've kept running my own Postfix and Dovecot stack on a cheap VPS, for one domain, for myself. It still works. Mail still arrives. Nothing is on fire.

Production Infrastructure from First Principles

Building Reliable Systems with Ansible

Introduction

Most developers begin their careers thinking almost exclusively about applications.

They think about features, programming languages, frameworks, databases, and APIs. Success is measured by whether the application works, whether users can accomplish their tasks, and whether the next feature can be delivered before the deadline.

As software matures, however, another reality begins to emerge.

Applications do not exist in isolation.

The US Shutdown of AI Models and the Urgent Need for True Digital Sovereignty

Artificial Intelligence has rapidly become one of the most important technologies of the modern era. Governments, businesses, universities, journalists, software developers, and ordinary citizens increasingly depend on AI systems for research, content creation, software development, decision making, and communication. Around a billion users has signed up for one of the most influal services.

The Self-Hosted Developer Stack: Building a SaaS-Free Development Environment

Introduction

Over the last decade, software development has become increasingly dependent on Software-as-a-Service (SaaS) platforms. Source code is stored on hosted Git providers, project management takes place in cloud applications, documentation lives in online knowledge bases, and monitoring data is collected by third-party observability services. For many teams, the cloud-first approach has become the default.

Why Digital Sovereignty Matters More Than Ever

For years, convenience has been the driving force behind the modern internet. Cloud services became easier than running servers yourself, social media replaced independent websites, and smartphones turned into centralized gateways for communication, banking, entertainment, and work. Most people accepted this tradeoff without thinking too deeply about the long-term consequences. The internet became more efficient, but it also became increasingly centralized.

Today, more people are starting to question that model.

Linux From Scratch: My Journey to a Bootable Linux System

For many Linux users, distributions such as Ubuntu, Debian, Fedora, and Arch Linux are simply the way Linux works. You install the operating system, configure a few settings, install software, and start using the machine. The thousands of components that make the system function remain hidden behind installers, package managers, and automation.

Linux From Scratch (LFS) takes a completely different approach.

My Mysql notes

This is how you enable logging in MySQL

SET GLOBAL general_log=1;
SET GLOBAL general_log_file='/var/log/mariadb.log';
SET GLOBAL slow_query_log_file='/var/log/mariadb-slow.log';
SET GLOBAL slow_query_log=1;

Subscribe to