Archive

Incremental Btrfs backup and subvolume layout

2 August 2023

Last year I had to reinstall Fedora on my main machine because I had to replace a disk there, and while doing so, I finally decided to switch to btrfs abandoning my previous setup of ext4 volumes on lvm thin pool. And since I already had btrfs on my external backup disk where I store snapshots of /home volume from the machine, I had to figure out how to restore it using btrfs send/receive feature, and how to update my incremental backup script to match the new setup. So in this post I will present simple examples to explain both my old and new backup scheme and what I run into during the transition.

The first web browser

29 April 2023

When I was reading book How the Web was Born (which describes the history of networking, user interfaces, hypertext and other computing concepts which the world wide web is based on), I realized how different the first web browser as designed by Tim Berners-Lee was compared to both browsers which came right after it as well as to modern ones we are all using nowadays. In this post I will focus on development and use cases of early web browsers explaining why they differ so much both between each other and modern browsers highlighting connections between the original vision and current reality.

Tracing open() syscalls during boot with journald

20 November 2022

For debugging purposes, I needed to figure out which processes open and change particular set of config files early during boot process. I could have used inotify and setup a watch for these files, but since I was also interested to learn what other files the unknown processes open, I figured that this is an ideal opportunity for checking out eBPF tracing ecosystem. And it turned out that it’s not just a nice example of how to (not) use bcc tools, but in this post we will also learn a bit about systemd journal.

Physical units in programming languages

3 April 2022

Long time ago I read an article about Ada programming language, which included a demonstration showing how to use Ada’s strong type system for checking physical units of variables in a similar way how we rely on a compiler to check common data types. However the support of dimensional analysis and physical units in programming languages improved significantly in the meantime, and now one can find good support for it not just in “serious” languages like Ada. In this post we will see how to work with units on two simple examples, one for negative and the other for a positive use case, (re)implemented in Ada, F# and Python.

Minimal xmonad config

5 April 2021

Some time ago, a colleague asked me about xmonad configuration of special key handlers when he noticed I’m xmonad user as well. He was interested in as simple as possible xmonad config file which defines actions for for volume and brightness control keys found on all recent laptops.

Getting started with Hakyll on Fedora

28 March 2021

Upstream installation tutorial of Hakyll static site generator shows how to use cabal or stack to get hakyll installed and build example site with it. And while the tutorial also mentions an option to use distribution packages on Debian or Fedora, the rest of the tutorial doesn’t explore this option further. In this post I provide a quick overview of installation and usage when Hakyll is installed from rpm packages on Fedora 33.

Birth time of a file on GNU Linux distributions

17 February 2019

Have you ever wondered why it is that on GNU/Linux distributions stat(1) command from GNU Coreutils reports 3 classic unix time stamps access, modify and change and on top of that, there is also something called birth, but without any value? Why is the empty birth field even there? I became interested in this less known timestamp few months ago while I was debugging a rare problem, trying to get as much additional evidence as possible. And even though it didn’t help me in the end, I gradually learned a bit about it’s history and it’s future. Hence this post lies somewhere between software archeology and Linux Weekly News, and here you will learn where the timestamp comes from, how to work with it in GNU/Linux distributions and what it’s future looks like.

GNU tar, xkcd and BSD

6 March 2018

Do you remember that xkcd strip where an atomic bomb requires a valid tar command to disarm itself? Either way in this post you will learn about GNU tar features you are already familiar with, but also few details you maybe don’t have any idea about.

git-cd

22 March 2014

While I was going through a 3rd party git repository the other day, it occurred to me that it would be nice to have shell command git-cd, which would be like cd, but working with file paths relative to current git repository. And it turned out that this can be relatively easy to implement in bash.