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. Self-documenting Makefiles

    Today I learned how to write self-documenting Makefiles which allow to write an own CLI tool using make as part of a repository. This is done, by keeping a small selection of make targets around, which get a special annotation that describes the targets purpose and will be exported as “target description” when calling a special help target that filters for this annotation. …


  2. Autostash

    Today I learned that I can permanently enable the autostash feature in git. Autostash a parameter for git rebase, git merge or git pull, where git will automatically stash your local changes und unstash them after it finished the action. Usually you would use an option like git pull --autostash to instruct git to do this, however when using git config --global rebase.autostash true, git will be setup to simply automatically assume --autostash for all rebase actions without requiring any further specification. Same works for merges by specifying git config --global merge.autostash true. …


  3. Completeness, Consistency, Decidability

    Today I learned quite a lot about the people who invented and broke our, these days, commonly used mathematical system. From Hilbert and Conway, Turning and Gödel, and many more. The basic idea behind today’s mathematical system was that based on the right set of axioms, one could proof every mathematical equation and that this way, the system itself would be complete, consistent and decidable. Means it contains all possible true statements (completeness), it is free of contradiction (consistent) and that it’s all deterministic, means there is a way to fully calculate an equation (decidable). Turns out, that within a few years, mathematicians have ripped that idea apart and have proven that our mathematical system is neither complete nor decidable, and just maybe consistent. …


  4. 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. …


  5. 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. …


  6. 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. …


  7. 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. …


  8. 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. …


  9. 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. …


  10. 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. …