My Profile Photo

Sheogorath's Blog


Depending on the time of the day a friend, a colleague, a wise guy. The beauty of the world is its sense of humor to show humans their way by letting them search their own.


  1. AppStream in YAML

    Today I learned that it’s possible to specify the AppStream meta information in YAML instead of XML. AppStream is part of the Freedesktop standard and provides metadata about installed and installable application. Starting from simple information like a name and description, to issue trackers, websites, screenshots and more. But also information such as releases, supported MIME types, provided binaries and more. These information are used by software stores such as GNOME software, where users can easily select software they want to install. …


  2. GitLab console mass feature disabling

    Today I learned how to mass-disable unused/unwanted project features instance wide using the gitlab-rails console command. In my specific case, I wanted to disable the useless “Security & Compliance” section, that is nothing more than an up-selling page in every project. Using the command below, I was able to disable this feature in all existing projects. …


  3. The Oroville Dam

    Today I learned about the existence of the Oroville Dam, which is the tallest dam of the US. The dam is located in California and is used to produce or store energy, while also protecting the areas down the stream of the Feather River. The dam experienced a spillway failure in 2017, where the spillway was damaged during a heavy rain season, which required the operators to continue to use the damaged spillway for weeks in order to control prevent worse. As part of this operation it multiple problems with the general construction of the regular and the emergency spillway construction turned up and exposed multiple failures in the engineering and construction of the dam. The good news is, that it was still possible to prevent any major damage from people down the stream an no breach of the dam took place. …


  4. City planning and the tree patriarchy

    Today I learned that in cities around the world male trees are preferred as city trees, because they produce less “litter” for the city’s personnel to pick up. As many life forms on earth, trees also reproduce by exchanging gen pools. Some trees are monoecious, means they have both “male” and “female” attributes, but usually still need another tree to exchange. However, it turned out, that cultivation of trees can influence these attribute’s existence. In cities around the world city planners use cultivated trees with mostly “male” attributes, in order to keep the streets cleaner for most of the time. While great for the city workers, everyone with a pollen allergy can be heavily impacted by this, since that’s basically all those “male trees” produce, making allergies a lot more intense than they would need to be. …


  5. Timeshift and its limits

    Today I learned that the backup tool Timeshift, which basically allows you to automatically take and manage snapshots of your filesystem, given you run BTRFS or LVM underneath, and provide an easy-to-use backup solution, is rather limited in its usefulness. It currently only supports the Ubuntu layout on BTRFS, which uses subvolume names called @ for / and @home for /home, which is not like distros like Fedora work. While this is not something Timeshift does wrong, it’s unfortunate for me as a Fedora user. …


  6. A/B-Upgrades are not enough

    Today I learned that A/B-Upgrades are not enough to make sure your setup is resilient from upgrade errors. What you actually need are A/B/C-Upgrades. A/B-Upgrades leave one possible error-case in the box, that is hard to counter: A broken Updater. While there are potential mitigations, such as checking the you can do a update dry-run on boot, to make sure you can in theory upgrade, if your upgrade process breaks in the last step (e.g. when writing your last bits to slot B) and you want to make sure you run all upgrades unsupervised, you can end up in a dead situation, where you can no longer rollback, since your update slot B is already overwritten, but unfinished. And you can’t write a new update due to the inability to finish the write process completely. One of the most straight-forward way to mitigate this problem is to provide an additional update slot, to create an A/B/C-Upgrade. Allowing your device at all time, to be able to update to a new version or rolling back to a version where upgrades have already successfully worked. An alternative would be of course to do a lot more excessive testing, and accepting the remaining risk. …


  7. FRITZ!Box link local fallback

    Today I learned that FRITZ!Boxes have an IPv4 link-local fallback address, in case a device doesn’t catch any DHCP configuration. According to the documentation a FRITZ!Box is also always reachable through 169.254.1.1. So if you device is ever configured using auto-IP and assigns itself an IP address from the IP range 169.254.0.0/16, you can easily reach your FRITZ!Box and enable DHCP, without the need to configure a static IP address. …


  8. Systemd and OOM

    Today I learned that Systemd will execute the equivalent of systemctl stop <service> when a process of your service runs OOM by default. This will mean that you might experience a downtime, when a OOM situation occurs even though your service might can handle it, when one of the processes is killed completely gracefully. You can adjust the behaviour by setting OOMPolicy in your service definition. …


  9. git blame ignore refs

    Today I learned that since git version 2.23 you can add a file to your repository to exclude large commits for e.g. format changes from your git blame. With the --ignore-rev as additional parameter, you can hide single commits for this specific blame call. More useful is the use of a --ignore-revs-file which can specify a file, that has a list of commits, similar to how .gitignore has a list a files to ignore. The standard name for this file appears to be .git-blame-ignore-revs. …


  10. Kubernetes default scheduler vs HPC

    Today I learned that the default Kubernetes scheduler is unsuitable for High-Performance-Computing (HPC) applications. HPC schedulers provide a variety of features, that easily become a rather complex constructs, including the ability to reclaim resources, reserve and backfill jobs, etc., compared to the simple scheduling algorithm that the Kubernetes scheduler provides. So given you want to deploy your HPC workload on Kubernetes it might be worth to look for a more advanced scheduler for your workload. …