<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on Lukas Kolletzki&#39;s blog</title>
        <link>/posts/</link>
        <description>Recent content in Posts on Lukas Kolletzki&#39;s blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 05 Oct 2025 18:57:03 +0200</lastBuildDate>
        <atom:link href="/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>Essential Browser Add-ons</title>
            <link>/posts/browser-addons/</link>
            <pubDate>Sun, 05 Oct 2025 18:57:03 +0200</pubDate>
            
            <guid>/posts/browser-addons/</guid>
            <description>&lt;p&gt;With ad-nonsense and enshittification becoming a thing in more and more
products, I unfortunately need to rely on an increasing number of browser
add-ons in order to have an acceptable browsing experience.&lt;/p&gt;
&lt;p&gt;I use Firefox, so all of the add-ons mentioned below are for Firefox.
There is often a Chromium version of the add-on, but since I don&amp;rsquo;t
use any Chromium-like browsers (and don&amp;rsquo;t encourage anyone to do so), I won&amp;rsquo;t
link to them here.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>With ad-nonsense and enshittification becoming a thing in more and more
products, I unfortunately need to rely on an increasing number of browser
add-ons in order to have an acceptable browsing experience.</p>
<p>I use Firefox, so all of the add-ons mentioned below are for Firefox.
There is often a Chromium version of the add-on, but since I don&rsquo;t
use any Chromium-like browsers (and don&rsquo;t encourage anyone to do so), I won&rsquo;t
link to them here.</p>
<h2 id="password-manager">Password Manager</h2>
<p>A password manager is the most essential add-on I need for my browser.
Without it, I can&rsquo;t log into any websites.</p>
<p>I won&rsquo;t mention a specific password manager here because, in my opinion, most
(if not all) of them have some downsides, and none of them are perfect.</p>
<h2 id="ublock-origin"><a href="https://github.com/gorhill/uBlock">uBlock Origin</a></h2>
<p>Unfortunately, the internet is no longer usable without an ad blocker.
The annoyances of all the ads aside, this is also a serious security and
privacy issue.</p>
<p>I personally use uBlock Origin for ad blocking.
It just works, and it has plenty of configuration options that allow you to
tweak it to your liking.<br>
I also use it (and it&rsquo;s &ldquo;annoyances&rdquo; lists) to block annoying cookie banners,
email newsletter pop-ups, and other nonsense that websites do these days to
distract your attention.</p>
<p>A lesser-known but super useful function is its custom filter support.
It allows you to define custom styles for a website, essentially eliminating
the need for a separate plugin for this purpose.
Previously I used Stylus for it this.<br>
The ability to just inject custom CSS rules into a website is a game changer.
Enforcing a wider layout? No problem.
Reducing giant font sizes? Easy.
Disabling stupid animations? Done.</p>
<p>Pro tip: Update your configured lists from time to time to keep up with the
website&rsquo;s creativity in circumventing ad-blockers.</p>
<h2 id="noscript"><a href="https://noscript.net/">NoScript</a></h2>
<p>Many websites nowadays are slow and annoying to use because of their
excessive and unnecessary use of JavaScript.
As the name suggests, NoScript allows you to disable JavaScript entirely,
making the internet (or at least certain pages) much more usable.</p>
<p>One particularly nice feature is that you can <em>temporarily</em> allow JavaScript
for websites that refuse to work without it.</p>
<h2 id="violentmonkey"><a href="https://violentmonkey.github.io/">Violentmonkey</a></h2>
<p>The opposite of NoScript is Violentmonkey: it allows you to run custom scripts
on any website.
In essence, it&rsquo;s custom styles on steroids.
There&rsquo;s nothing you can&rsquo;t do with it.</p>
<h2 id="clearurls"><a href="https://github.com/ClearURLs/Addon">ClearURLs</a></h2>
<p>These days, URLs often times contain tracking information that allows linking
between you and the person you share a link with.
This extension removes all tracking information from the URLs you visit, so
that you can share &ldquo;clean&rdquo; links without any of this tracking nonsense.</p>
<h2 id="hide-youtube-shorts"><a href="https://github.com/Vulpelo/hide-youtube-shorts">Hide YouTube-Shorts</a></h2>
<p>I hate YouTube shorts with every piece of my body.
I hate the format, and I hate YouTube for ruining its user interface in favor
of this vertical short video crap.</p>
<p>This extension does as the name says: it hides all short-related stuff from
YouTube.
No shorts in on any page (subscriptions, recommendations, etc.), no link to
shorts in the sidebar, no shorts in search results.</p>
<h2 id="youtube-no-translation"><a href="https://github.com/YouG-o/YouTube_No_Translation">YouTube No Translation</a></h2>
<p>Another YouTube annoyance is their awful auto-dubbing and auto-translation
&ldquo;feature&rdquo; that they force on everyone.
It completely ignores the fact that users may speak multiple languages
(English and German in my case), and constantly translates titles, thumbnails,
descriptions, and entire audio tracks from German to English or vice versa.</p>
<p>This add-on lets you disable all of this nonsense.
No more auto-dubbing or auto-translation anywhere on the page.</p>
<h2 id="volume-control-for-bandcamp-player"><a href="https://github.com/butterknight/bandcamp-volume-control">Volume Control for Bandcamp Player</a></h2>
<p>This is a small but nice add-on that adds a volume slider to all Bandcamp
pages, allowing you to control the volume of the embedded player.</p>
<p>It&rsquo;s mind-boggling that Bandcamp itself still doesn&rsquo;t provide this feature,
but at least there&rsquo;s a way to get this functionality thanks to the add-on.</p>
<h2 id="honorable-mention"><em>Honorable mention: <a href="https://addons.mozilla.org/en-US/firefox/addon/tree-style-tab/">Tree Style Tab</a></em></h2>
<p>For years, this extension was an absolute must-have for me because it allowed
me to display my tabs vertically and group them.</p>
<p>However, with Firefox now natively supporting vertical tabs and tab groups, I
do no longer use this add-on.
I would still recommend it to anyone who needs a more special configuration.</p>
]]></content>
        </item>
        
        <item>
            <title>Notes on Updating the BIOS of an MSI X670E Gaming Plus WiFi</title>
            <link>/posts/msi-x670e-gaming-plus-wifi-bios-update/</link>
            <pubDate>Mon, 28 Oct 2024 22:57:03 +0100</pubDate>
            
            <guid>/posts/msi-x670e-gaming-plus-wifi-bios-update/</guid>
            <description>&lt;p&gt;This guide serves mainly as a reminder for future me about what I do have to do
and to consider when updating the BIOS of my MSI X670 Gaming Plus WiFi
motherboard.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do not consider this guide as an authorative source on how to do this
properly, these notes are just personal experience.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Protip: Don&amp;rsquo;t do this when you&amp;rsquo;re in a rush or need your computer shortly after.
I recommend performing this when you have at least one more day to fix stuff
after you applied the update (to sleep and cure potential frustration).&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>This guide serves mainly as a reminder for future me about what I do have to do
and to consider when updating the BIOS of my MSI X670 Gaming Plus WiFi
motherboard.</p>
<p><strong>Do not consider this guide as an authorative source on how to do this
properly, these notes are just personal experience.</strong></p>
<p>Protip: Don&rsquo;t do this when you&rsquo;re in a rush or need your computer shortly after.
I recommend performing this when you have at least one more day to fix stuff
after you applied the update (to sleep and cure potential frustration).</p>
<h2 id="general-notes-and-prerequisites">General Notes and Prerequisites</h2>
<p>All instructions refer to the Advanced Mode of the BIOS.
It can be toggled by pressing F7 or clicking the button in the top center of
the UI.</p>
<p>Booting into the BIOS happens by pressing Del during bootup.
Other useful keys are CTRL-F5 to boot directly into M-Flash (see info below)
and F11 to enter the boot menu.</p>
<p>Whenever something is changed in the BIOS, the next boot takes forever
(a couple of minutes).
During this time, the display is not active and it seems like the computer
hangs.
I&rsquo;m not sure what causes this, probably some full hardware test or something
similar which takes quite long due to the amount of RAM I have installed.
Anyways, don&rsquo;t worry, at some point it&rsquo;ll boot.</p>
<p>If you need help, here are useful manufacturer links:</p>
<ul>
<li><a href="https://download.msi.com/archive/mnu_exe/mb/X670EGAMINGPLUSWIFI_EN.pdf">motherboard manual</a></li>
<li><a href="https://download.msi.com/archive/mnu_exe/mb/AMDAM5BIOS.pdf">BIOS manual</a></li>
</ul>
<h2 id="perform-the-update">Perform the Update</h2>
<p>First, you need a FAT/FAT32 formatted USB flash drive.</p>
<p>Download the respective version from <a href="https://www.msi.com/Motherboard/X670E-GAMING-PLUS-WIFI/support#bios">the manufacturer website</a>.
Extract the ZIP file and place the contents (should only be two files) onto the
flash drive.
Sync and unmount.</p>
<p>Reboot the computer and enter the BIOS setup.
Click M-Flash and confirm the dialog.
The computer should now reboot into the M-Flash mode and you can select the
BIOS image you placed on the flash drive.
Navigate through the process and let the BIOS update itself.</p>
<p>When everything is updated, enter the BIOS again.</p>
<h2 id="fix-settings">Fix Settings</h2>
<p>The BIOS update resets all settings.</p>
<p>Note: It might be possible to save and restore these settings via the
<em>OC PROFILE</em> menu, but I&rsquo;ve not tried it and can&rsquo;t be bothered right now.
Might be worth a shot before doing the next update though.</p>
<p>For whatever reason, the BIOS also bricked systemd-boot, so first thing is to
boot a live linux and and mount the system to work in it.</p>
<p>For me, this involves roughly sth like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>cryptsetup luksOpen /dev/encrypted-root-partition root
</span></span><span style="display:flex;"><span>mount /dev/mapper/root /mnt
</span></span><span style="display:flex;"><span>mount /dev/efi-system-partition /mnt/efi
</span></span><span style="display:flex;"><span>arch-chroot /mnt
</span></span></code></pre></div><p>Then, when in the system, a <code>bootctl install</code> fixes the bootloader.</p>
<p>After that, reboot into the BIOS and adjust a few settings.</p>
<p>First, disable Secure Boot and reboot into BIOS.
Then, when dual-booting, fix the boot-order so that systemd-boot is before
Windows Boot Manager.</p>
<p>Should need be, do the respective Secure Boot setup for linux again (installing
keys, etc.).</p>
<p>Also, annoyingly, the fan curves need to be done again, which is probably the
most upsetting of all lost configuration values.</p>
]]></content>
        </item>
        
        <item>
            <title>Migrating from Plex to Jellyfin</title>
            <link>/posts/migrate-plex-to-jellyfin/</link>
            <pubDate>Thu, 21 Sep 2023 12:08:03 +0200</pubDate>
            
            <guid>/posts/migrate-plex-to-jellyfin/</guid>
            <description>&lt;p&gt;I&amp;rsquo;m a fan of buying and owning music, as opposed to just streaming it via one of the usual services. I&amp;rsquo;ll save the big discussion about my reasons for doing this for another time, and just assume that everyone reading this article can relate in some way.&lt;/p&gt;
&lt;p&gt;I was pretty happy when I discovered &lt;a href=&#34;https://www.plex.tv/&#34;&gt;Plex&lt;/a&gt; a long time ago, because it basically solved my problem of wanting to have something like a private, self-hosted Spotify. I was okay with swallowing the bitter pill of it not being open source, and I was actually happy to pay for the Plex Premium pass because it meant there was some kind of business model behind the project.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I&rsquo;m a fan of buying and owning music, as opposed to just streaming it via one of the usual services. I&rsquo;ll save the big discussion about my reasons for doing this for another time, and just assume that everyone reading this article can relate in some way.</p>
<p>I was pretty happy when I discovered <a href="https://www.plex.tv/">Plex</a> a long time ago, because it basically solved my problem of wanting to have something like a private, self-hosted Spotify. I was okay with swallowing the bitter pill of it not being open source, and I was actually happy to pay for the Plex Premium pass because it meant there was some kind of business model behind the project.</p>
<p>Some time ago I discovered <a href="https://jellyfin.org/">Jellyfin</a> and thought it might be a good alternative. However, lazy as I am, I haven&rsquo;t made the switch yet, mainly because I was afraid it would be a complex migration.<br>
Even though I&rsquo;m not personally affected by Plex&rsquo;s announcement/action to ban Hetzner servers<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, I still consider this a rather alarming move for several reasons. My plan to eventually move to Jellyfin at some point got a big boost in motivation because of this.</p>
<p>Since I was planning a long train ride anyway, I thought that doing the move (or at least the first steps of the installation) on this train ride would be the perfect opportunity.</p>
<p>As it turns out, the installation and setup is actually super easy, I had no problems at all.</p>
<p>I just followed the official <a href="https://jellyfin.org/docs/general/installation/">installation instructions</a> and mapped Jellyfin&rsquo;s HTTP port (<code>8069</code> by default) to a subdomain in my existing reverse proxy setup that also deals with TLS.<br>
After that, I copied my entire music library to a new directory (<code>cp -R</code>), just to be on the safe side in case Jellyfin does something weird.<br>
The last step was to go through the Jellyfin setup guide in the browser, which also worked without any problems. I also went through all the settings afterwards, but IIRC I didn&rsquo;t change much except for some cosmetic things. The defaults seem pretty reasonable to me.</p>
<p>That&rsquo;s it. I now have a working Jellyfin setup for streaming my music. The only thing left is to install the client on all my devices and download the music library for offline use on some of them.<br>
The move itself took less than an hour, and in retrospect I should have done it much earlier.</p>
<p>With all that done, I&rsquo;m now writing this blog article while still sitting on the train where I did the installation, because contrary to my expectations, I still have tons of time left on the train.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>See <a href="https://news.ycombinator.com/item?id=37517216">this</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Importing bandcamp Purchases in Plex Media Server</title>
            <link>/posts/plex-bandcamp-import/</link>
            <pubDate>Sun, 11 Jun 2023 18:12:00 +0200</pubDate>
            
            <guid>/posts/plex-bandcamp-import/</guid>
            <description>&lt;p&gt;I&amp;rsquo;m running a &lt;a href=&#34;https://en.wikipedia.org/wiki/Plex_Inc.#Plex_Media_Server&#34;&gt;Plex Media Server&lt;/a&gt; instance and use it as a self-hosted music
streaming service (like Spotify, Deezer, Apple Music).&lt;br&gt;
These days, I get most of my music from bandcamp, so I regularly need to import
bandcamp downloads into my Plex Media Server library.&lt;/p&gt;
&lt;p&gt;Since doing this manually is error-prone and can get tedious, I wrote a little
script that downloads and/or imports zip files from bandcamp into my Plex
library.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I&rsquo;m running a <a href="https://en.wikipedia.org/wiki/Plex_Inc.#Plex_Media_Server">Plex Media Server</a> instance and use it as a self-hosted music
streaming service (like Spotify, Deezer, Apple Music).<br>
These days, I get most of my music from bandcamp, so I regularly need to import
bandcamp downloads into my Plex Media Server library.</p>
<p>Since doing this manually is error-prone and can get tedious, I wrote a little
script that downloads and/or imports zip files from bandcamp into my Plex
library.</p>
<p>The script automatically tries to guess the artist and album name from the zip
file name, but prompts for confirmation/correction of these details.</p>
<p>The script is released as public domain under the <a href="https://unlicense.org/">Unlicense</a>.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/env bash
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>set -euo pipefail
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>MUSIC_LIBRARY<span style="color:#f92672">=</span>./music
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>err<span style="color:#f92672">()</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    echo <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> &gt;&amp;<span style="color:#ae81ff">2</span>
</span></span><span style="display:flex;"><span>    exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>trim<span style="color:#f92672">()</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>	local str<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>*<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>	str<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>str#<span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>str%%[![:space:]]*<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>	str<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>str%<span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>str##*[![:space:]]<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>	printf <span style="color:#e6db74">&#34;%s&#34;</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>str<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Check dependencies</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">[[</span> -x <span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>command -v curl<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span> <span style="color:#f92672">||</span> err <span style="color:#e6db74">&#34;cURL not found. Make sure that cURL is installed and in \$PATH&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">[[</span> -x <span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>command -v unzip<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span> <span style="color:#f92672">||</span> err <span style="color:#e6db74">&#34;unzip not found. Make sure that unzip is installed and in \$PATH&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Ensure that a filename is given</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> <span style="color:#e6db74">${#}</span> -lt <span style="color:#ae81ff">1</span> <span style="color:#f92672">]]</span> <span style="color:#f92672">||</span> <span style="color:#f92672">[[</span> -z <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>	err <span style="color:#e6db74">&#34;Please provide a zip file name or an URL to (download and) extract&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>file<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">=</span>~ https://.* <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>	curl -OJ <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>1<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>	file<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>ls -t *.zip | head -1<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Try to guess artist and album from the zip file name</span>
</span></span><span style="display:flex;"><span>guesses<span style="color:#f92672">=</span><span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>IFS<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;-&#39;</span> read -ra parts <span style="color:#f92672">&lt;&lt;&lt;</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> <span style="color:#e6db74">${#</span>parts[@]<span style="color:#e6db74">}</span> -eq <span style="color:#ae81ff">2</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>	guesses<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span>	artist_guess<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>trim <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>parts[0]<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>	album_guess<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>trim <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>parts[1]%<span style="color:#e6db74">&#34;.zip&#34;</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Read artist and album name</span>
</span></span><span style="display:flex;"><span>read -p <span style="color:#e6db74">&#34;Artist (</span><span style="color:#e6db74">${</span>artist_guess-<span style="color:#e6db74">}</span><span style="color:#e6db74">): &#34;</span> artist
</span></span><span style="display:flex;"><span>read -p <span style="color:#e6db74">&#34;Album (</span><span style="color:#e6db74">${</span>album_guess-<span style="color:#e6db74">}</span><span style="color:#e6db74">): &#34;</span> album
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> <span style="color:#e6db74">${</span>guesses<span style="color:#e6db74">}</span> -eq <span style="color:#ae81ff">1</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> -z <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>artist<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>		artist<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>artist_guess<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> -z <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>album<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>		album<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>album_guess<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>dir<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>MUSIC_LIBRARY<span style="color:#e6db74">}</span><span style="color:#e6db74">/</span><span style="color:#e6db74">${</span>artist<span style="color:#e6db74">}</span><span style="color:#e6db74">/</span><span style="color:#e6db74">${</span>album<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Create album dir if it does not exist</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[[</span> ! -d <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>dir<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>	mkdir -p <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>dir<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>	err <span style="color:#e6db74">&#34;Directory </span><span style="color:#e6db74">${</span>dir<span style="color:#e6db74">}</span><span style="color:#e6db74"> does already exist&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Unzip music into directory</span>
</span></span><span style="display:flex;"><span>unzip <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> -d <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>dir<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>rm <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</span></span></code></pre></div>]]></content>
        </item>
        
        <item>
            <title>Setup ConBee II in a KVM Virtualized Home Assistant instance</title>
            <link>/posts/conbee-ii-virtualized-home-assistant/</link>
            <pubDate>Sat, 25 Mar 2023 22:19:00 +0100</pubDate>
            
            <guid>/posts/conbee-ii-virtualized-home-assistant/</guid>
            <description>&lt;p&gt;This post is mainly for my own reference as because it took me far too
long to set up a &lt;a href=&#34;https://www.phoscon.de/en/conbee2&#34;&gt;ConBee II&lt;/a&gt; USB Zigbee controller in my virtualized Home
Assistant instance.&lt;/p&gt;
&lt;p&gt;I am running Home Assistant OS virtualized via KVM, and as it turns out,
passing the ConBee II USB device into the VM was not as easy as I thought it
would be.&lt;/p&gt;
&lt;p&gt;Initially, just passed the device to the VM as a USB host device.
This seemed to work as Home Assistant noticed the device and even
suggested setting up the &lt;a href=&#34;https://www.home-assistant.io/integrations/zha/&#34;&gt;Zigbee Home Automation (ZHA) integration&lt;/a&gt; with it.
However, every time I tried to configure the integration, the connection
failed.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>This post is mainly for my own reference as because it took me far too
long to set up a <a href="https://www.phoscon.de/en/conbee2">ConBee II</a> USB Zigbee controller in my virtualized Home
Assistant instance.</p>
<p>I am running Home Assistant OS virtualized via KVM, and as it turns out,
passing the ConBee II USB device into the VM was not as easy as I thought it
would be.</p>
<p>Initially, just passed the device to the VM as a USB host device.
This seemed to work as Home Assistant noticed the device and even
suggested setting up the <a href="https://www.home-assistant.io/integrations/zha/">Zigbee Home Automation (ZHA) integration</a> with it.
However, every time I tried to configure the integration, the connection
failed.</p>
<p>I also tried using the <a href="https://github.com/home-assistant/addons/tree/master/deconz">deCONZ Add-on</a>, but it couldn&rsquo;t connect to the device
either.</p>
<p>Enough complaints and problems, here&rsquo;s how I got it to work:</p>
<p>First, make sure that the device is available on your host system.
Then, create a <strong>serial</strong> device for your VM with a config like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;serial</span> <span style="color:#a6e22e">type=</span><span style="color:#e6db74">&#34;dev&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;source</span> <span style="color:#a6e22e">path=</span><span style="color:#e6db74">&#34;/dev/serial/by-id/usb-dresden_elektronik_ingenieurtechnik_GmbH_ConBee_II_XXX-if00&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;target</span> <span style="color:#a6e22e">type=</span><span style="color:#e6db74">&#34;usb-serial&#34;</span> <span style="color:#a6e22e">port=</span><span style="color:#e6db74">&#34;1&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;model</span> <span style="color:#a6e22e">name=</span><span style="color:#e6db74">&#34;usb-serial&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;/target&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;alias</span> <span style="color:#a6e22e">name=</span><span style="color:#e6db74">&#34;serial1&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&lt;address</span> <span style="color:#a6e22e">type=</span><span style="color:#e6db74">&#34;usb&#34;</span> <span style="color:#a6e22e">bus=</span><span style="color:#e6db74">&#34;0&#34;</span> <span style="color:#a6e22e">port=</span><span style="color:#e6db74">&#34;22&#34;</span><span style="color:#f92672">/&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/serial&gt;</span>
</span></span></code></pre></div><p>Now you should be able to configure ZHA with the new serial device.
If you&rsquo;re not sure which device to specify during the ZHA configuration, check
the kernel log (after adding the serial device).</p>
]]></content>
        </item>
        
        <item>
            <title>My Device Naming Scheme</title>
            <link>/posts/hostname-naming-scheme/</link>
            <pubDate>Wed, 30 Mar 2022 07:00:00 +0200</pubDate>
            
            <guid>/posts/hostname-naming-scheme/</guid>
            <description>&lt;p&gt;I’ve been looking for a good naming scheme for my personal devices for a long time.
With naming schemes, it is kind of a difficult thing: They need to be distinguishable but at the same time memorizable to you so that you don’t have to look them up all the time.
In addition, they need to be somewhat future-proof and extensible.
Ideally, they&amp;rsquo;re also meaningful, but this is not a hard requirement for me when it comes to personal devices (as opposed to servers).&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I’ve been looking for a good naming scheme for my personal devices for a long time.
With naming schemes, it is kind of a difficult thing: They need to be distinguishable but at the same time memorizable to you so that you don’t have to look them up all the time.
In addition, they need to be somewhat future-proof and extensible.
Ideally, they&rsquo;re also meaningful, but this is not a hard requirement for me when it comes to personal devices (as opposed to servers).</p>
<p>For some time, I’ve just used the device type as the hostname, e.g. <code>phone</code> or <code>pc-desk</code>. However, this scheme has the flaw that my brain just can not remember whether it was <code>pc</code> or <code>pc-desk</code> or <code>pc-desktop</code>. In addition, when you get two devices of the same kind, you end up with ugly hostnames such as <code>phone-2</code> or <code>phone-new</code>.</p>
<p>In the last year, I came up<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> with a naming scheme that works for me: Counter-Strike maps. As a follower of professional Counter-Strike and a long-time player, memorizing these hostnames feels quite natural to me. They’re just one single word, usually even only a few syllables long, but still distinguishable from each other.</p>
<p>Most importantly, I associate something visual with each map, which makes it way easier for my brain to build a connection between the device and the hostname. I&rsquo;m not sure why it works better this way, maybe it&rsquo;s just how my brain is wired. As long as it works, I&rsquo;m fine with it. 🤷‍♂️</p>
<p>Last but not least, this scheme is extensible to some degree: there are probably hundreds of Counter-Strike maps, way more than the amount of devices I own simultaneously.</p>
<p>This is the list of potential hostnames I selected (for now):</p>
<ul>
<li>ancient</li>
<li>assault</li>
<li>aztec</li>
<li>cache</li>
<li>cobble</li>
<li>dust<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li>
<li>inferno</li>
<li>italy</li>
<li>militia</li>
<li>mirage</li>
<li>nuke</li>
<li>office</li>
<li>overpass</li>
<li>train</li>
<li>tuscan</li>
<li>vertigo</li>
</ul>
<p>Even if you are not a Counter-Strike fan, schemes of this kind may still work for you. Maybe you&rsquo;re a manga fan, then you could name your devices after different mangas. Or, if you&rsquo;re a car nerd, why not name your devices after different car models?</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Disclaimer: I&rsquo;m pretty sure that I cannot be the only one that uses it, so I&rsquo;m not claiming the invention of this scheme.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>This is intentionally missing the <code>2</code> suffix because I think it&rsquo;s much cleaner without it. And there&rsquo;s no point in having both, <em>dust</em> and <em>dust2</em>.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Email on iOS</title>
            <link>/posts/email-on-ios/</link>
            <pubDate>Wed, 09 Jun 2021 17:19:00 +0100</pubDate>
            
            <guid>/posts/email-on-ios/</guid>
            <description>&lt;p&gt;Let&amp;rsquo;s talk about the state of email on i(Pad)OS.
Before I dive deep into my expectations and what bothers me, a few general information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I do not use Gmail / Google Calendar and do not plan to use it&lt;/li&gt;
&lt;li&gt;I do not use MS Exchange and do not plan to use it&lt;/li&gt;
&lt;li&gt;I do use IMAP / ESMTP / CalDAV / CardDAV and plan to continue doing so&lt;/li&gt;
&lt;li&gt;&lt;em&gt;MUA&lt;/em&gt; means &lt;em&gt;Mail User Agent&lt;/em&gt;, or in layman’s terms: email client / email app&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, a short disclaimer: this is a highly personal perspective on the features a MUA needs to have. YMMV.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Let&rsquo;s talk about the state of email on i(Pad)OS.
Before I dive deep into my expectations and what bothers me, a few general information:</p>
<ul>
<li>I do not use Gmail / Google Calendar and do not plan to use it</li>
<li>I do not use MS Exchange and do not plan to use it</li>
<li>I do use IMAP / ESMTP / CalDAV / CardDAV and plan to continue doing so</li>
<li><em>MUA</em> means <em>Mail User Agent</em>, or in layman’s terms: email client / email app</li>
</ul>
<p>In addition, a short disclaimer: this is a highly personal perspective on the features a MUA needs to have. YMMV.</p>
<p>No that we got this clear, let&rsquo;s dive in.</p>
<h2 id="perfect-mua">Perfect MUA</h2>
<p>IMHO there’s literally not a single good MUA on i(Pad)OS, Mail.app included. However, it shouldn’t be that difficult to build a good one. Here are my requirements and expectations (in no particular order).</p>
<h3 id="native-ui">Native UI</h3>
<p>I don’t like apps that implement their own UI and don’t use system conventions (looking at you, Spark…).
As one of the biggest strengths of i(Pad)OS is its uniform and consistent UI, a good email app would follow that.
This includes having a good-looking UI on iPad that is not just a scaled variant of the iPhone layout.</p>
<h3 id="active-maintenance">Active Maintenance</h3>
<p>There are hundreds of MUA in the App Store that aren’t maintained. A good MUA should be maintained and updated frequently to support the latest OS features (such as keyboard support on iPadOS) and receive bug fixes.
As a bonus, a Test Flight program would be nice to have.</p>
<h3 id="local-credentials">Local Credentials</h3>
<p>A MUA should <strong>NEVER EVER</strong> send your credentials to a remote server (other than the configured IMAP/SMTP server).
If this means that push notifications aren’t available: okay, no problem.
But storing email credentials on some third-party’s cloud server is a no-go.</p>
<h3 id="textplain-support">text/plain Support</h3>
<p>A MUA isn’t functional, if it doesn’t handle text/plain emails well. Period.</p>
<p>Yes, text/html viewing is a nice feature for senders that don’t get their emails right, but text/plain is essential.</p>
<p>There’s absolutely no valid reason why a MUA would support fancy WYSIWYG editors but does not offer a simple text box (ideally with automatic text wrapping at 72 columns).
Therefore a good MUA should at least offer a plaintext editor.
If it wants to convert that text to text/html and send a multipart/alternative message, fine, I don&rsquo;t care.</p>
<p>And while we’re at it: reply quoting should be configurable, so that top posting can be disabled.</p>
<blockquote>
<p>A: Because it reverses the logical flow of conversation.<br>
Q: Why is top posting frowned upon?</p></blockquote>
<p>For more information on plaintext email I strongly recommend <a href="https://useplaintext.email">useplaintext.email</a>, which is where I got that top posting joke from.</p>
<h3 id="remote-content">Remote Content</h3>
<p>When the MUA includes an HTML message viewer, I expect a setting to disable the loading of any remote content. If, and only if I decide that I want to view the images in the message, there should be a button that loads the images once.
Some advanced feature would be to allow remote content from some senders, however that’s not that important to me.</p>
<h3 id="threading">Threading</h3>
<p>As a heavy user of mailing lists, I want the MUA to support message threading, at least in the message reading view.
Even better would be to have threading support in the message list.</p>
<h3 id="archive-folder">Archive Folder</h3>
<p>I use Inbox Zero as a workflow to keep up with my emails.
A good MUA offers a quick and intuitive way to archive messages from the message list and the message detail view.
The former should be available as a swipe gesture, the latter as a single-tap action.</p>
<p>The archive folder should be configurable, most people seem to use <code>Archive</code>, however some people prefer other names. A nice-to-have feature would be to offer archiving by year/month like Thunderbird does it.</p>
<h3 id="no-tracking-bullshit">No Tracking Bullshit</h3>
<p>Some MUA drift into the business mail tracking business. Don’t do it, please.
Nobody wants to be tracked <del>invisibly</del>, therefore keep any of this tracking shit out of the MUA, please!</p>
<p>As a compromise, a MUA may examine the usual read receipt headers (if opted in in the settings) and prompt the user before sending a read receipt.
Same goes for message composition.</p>
<h3 id="bonus-points">Bonus Points</h3>
<p>It’d be nice if the app was Free Open Source Software, even if it isn’t available for free in the App Store.</p>
<p>I may be a bit biased here, however I’d appreciate it if the MUA was a good IMAP citizen (no abuse of the SEARCH command, not using STATUS for new message checks, etc.) and implements modern IMAP RFCs.</p>
<p>If the app was able to parse event invitations or at least offered a quick way to open them in a calendar app, it’d be neat.</p>
<p>Last but not least: PGP support would be awesome, at least for decrypting and verifying</p>
<h2 id="caldav--carddav">CalDAV / CardDAV</h2>
<p>Since MS Exchange is capable of handling this and for some people it counts into the email domain, I felt the need to mention it here: i(Pad)OS supports CalDAV / CardDAV natively.
The integration works well and I never had any trouble in the past few years.
I don’t need any fancy contact or calendar integration in my MUA.</p>
<p>If you&rsquo;re looking for a good calendar app, I recommend <a href="https://flexibits.com/fantastical">Fantastical</a> by Flexibits .
I&rsquo;ve used it for years and it&rsquo;s great!
Also, they&rsquo;ve recently released <a href="https://flexibits.com/cardhop">Cardhop</a> for managing contacts.</p>
<h2 id="summary">Summary</h2>
<p>Most of the features I expect from a MUA aren’t that difficult to implement. In fact, I mostly discourage the implementation of complex features such as HTML composition or push notifications.</p>
<p>Sadly, I’m not an app developer and don’t really see me becoming one, otherwise I&rsquo;d probably build the MUA of my dreams.
If however you are an i(Pad)OS app developer and intend to build such a MUA, I’d be more than happy to help you where I can.<br>
Drop me an <a href="mailto:lukas@kolletzki.me">email</a> or ping me on <a href="https://chaos.social/@lukas">Mastodon</a>.</p>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: Rachmaninoff - Symphony No. 2</title>
            <link>/posts/aotd-rachmaninoff-symphony-no-2/</link>
            <pubDate>Sun, 30 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-rachmaninoff-symphony-no-2/</guid>
            <description>&lt;p&gt;As I wrote in the introduction to this series, I also enjoy listening to classical music, especially symphonies from composers like Brahms, Beethoven, Rachmaninoff, etc.
Today‘s album of the day is one of these, it‘s &lt;strong&gt;Rachmaninov&lt;/strong&gt;‘s &lt;strong&gt;Symphony No. 2&lt;/strong&gt;, which is one of my favorites.&lt;/p&gt;
&lt;p&gt;Instead of describing it‘s musical structure and fact‘s I‘ll leave you with a link to it‘s &lt;a href=&#34;https://en.wikipedia.org/wiki/Symphony_No._2_%28Rachmaninoff%29&#34;&gt;Wikipedia article&lt;/a&gt;, it’s authors are doing a way better job than I could ever do.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>As I wrote in the introduction to this series, I also enjoy listening to classical music, especially symphonies from composers like Brahms, Beethoven, Rachmaninoff, etc.
Today‘s album of the day is one of these, it‘s <strong>Rachmaninov</strong>‘s <strong>Symphony No. 2</strong>, which is one of my favorites.</p>
<p>Instead of describing it‘s musical structure and fact‘s I‘ll leave you with a link to it‘s <a href="https://en.wikipedia.org/wiki/Symphony_No._2_%28Rachmaninoff%29">Wikipedia article</a>, it’s authors are doing a way better job than I could ever do.</p>
<p>Personally, I like it because of it‘s themes, that feel kind of hopeless but converge into positivity sometimes.
As a result, I tend to listen to this opus when I‘m thoughtful and need something, that cheers me up a little bit.</p>
<p>My favorite version is the one from <em>London Symphony Orchestra</em> under conduction of <em>Valery Gergiev</em>.
The Songwhip link below may not link to this version (apart from Apple Music, which is what I‘m using), so I recommend searching for it directly in your music service.</p>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: Classical</li>
<li>4 movements, about 60 minutes</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://songwhip.com/sergei-rachmaninoff/rachmaninov-symphony-no-2">Songwhip</a></li>
<li><a href="https://en.wikipedia.org/wiki/Symphony_No._2_%28Rachmaninoff%29">Wikipedia</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: Moonsorrow - Tulimyrsky</title>
            <link>/posts/aotd-moonsorrow-tulimyrsky/</link>
            <pubDate>Sat, 29 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-moonsorrow-tulimyrsky/</guid>
            <description>&lt;p&gt;For today‘s album of the day, I‘ve chosen one of my all-time favorite albums: &lt;strong&gt;Tulimyrsky&lt;/strong&gt; by the Finnish band &lt;strong&gt;Moonsorrow&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The title track is a 30 minute masterpiece that combines a folk atmosphere with brutal black metal parts, and is IMHO one of the greatest tracks ever written.
In addition, the EP contains two cover songs, namely &lt;em&gt;Metallica&lt;/em&gt;​‘s &lt;em&gt;For Whom the Bell Tolls&lt;/em&gt; and &lt;em&gt;Back to North&lt;/em&gt; by &lt;em&gt;Merciless&lt;/em&gt;, both worth listening.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>For today‘s album of the day, I‘ve chosen one of my all-time favorite albums: <strong>Tulimyrsky</strong> by the Finnish band <strong>Moonsorrow</strong>.</p>
<p>The title track is a 30 minute masterpiece that combines a folk atmosphere with brutal black metal parts, and is IMHO one of the greatest tracks ever written.
In addition, the EP contains two cover songs, namely <em>Metallica</em>​‘s <em>For Whom the Bell Tolls</em> and <em>Back to North</em> by <em>Merciless</em>, both worth listening.</p>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: Black Metal, Folk Metal</li>
<li>5 tracks, 68 minutes</li>
<li>Released 2008</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://songwhip.com/moonsorrow/tulimyrsky">Songwhip</a></li>
<li><a href="https://www.metal-archives.com/albums/Moonsorrow/Tulimyrsky_EP/185671">Metal Archives</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: blyh - Awake to Emptiness</title>
            <link>/posts/aotd-blyh-awake-to-emptiness/</link>
            <pubDate>Fri, 28 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-blyh-awake-to-emptiness/</guid>
            <description>&lt;p&gt;&lt;strong&gt;Awake to Emptiness&lt;/strong&gt; is an album by the German band &lt;strong&gt;blyh&lt;/strong&gt; (pronunciation: &lt;a href=&#34;https://en.wiktionary.org/wiki/bleich&#34;&gt;&lt;code&gt;/blaɪ̯ç/&lt;/code&gt;&lt;/a&gt;.
It‘s their first album after the demo &lt;strong&gt;Transparent to the World&lt;/strong&gt; which already set the bar quite high.&lt;/p&gt;
&lt;p&gt;The album is pretty much a classical black metal album polished with some great atmospheric parts.
The singer‘s scratchy high voice might take some time getting used to, however it stands out nicely between the heavy dark guitars and the fast drums.
The production is of nice quality and well balanced between the instruments.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p><strong>Awake to Emptiness</strong> is an album by the German band <strong>blyh</strong> (pronunciation: <a href="https://en.wiktionary.org/wiki/bleich"><code>/blaɪ̯ç/</code></a>.
It‘s their first album after the demo <strong>Transparent to the World</strong> which already set the bar quite high.</p>
<p>The album is pretty much a classical black metal album polished with some great atmospheric parts.
The singer‘s scratchy high voice might take some time getting used to, however it stands out nicely between the heavy dark guitars and the fast drums.
The production is of nice quality and well balanced between the instruments.</p>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: Black Metal</li>
<li>5 songs, 45 minutes</li>
<li>Released 2019</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://blyh.bandcamp.com/album/awake-to-emptiness">Bandcamp</a></li>
<li><a href="https://songwhip.com/blyh/awake-to-emptiness">Songwhip</a></li>
<li><a href="https://www.metal-archives.com/albums/Blyh/Awake_to_Emptiness/802384">Metal Archives</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: Behemoth - The Satanist</title>
            <link>/posts/aotd-behemoth-the-satanist/</link>
            <pubDate>Thu, 27 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-behemoth-the-satanist/</guid>
            <description>&lt;p&gt;Today‘s album of the day is a masterpiece called &lt;strong&gt;The Satanist&lt;/strong&gt; by the polish black metal band &lt;strong&gt;Behemoth&lt;/strong&gt;.
It‘s one of these albums, where there‘s not a single song that feels too much, all tracks are perfect in their spot.&lt;/p&gt;
&lt;p&gt;Although it‘s quite difficult to name favorite tracks, there are some highlights such as &lt;em&gt;Ora Pro Nobis Lucifer&lt;/em&gt; or the combination of &lt;em&gt;In the Absensce Ov Light&lt;/em&gt; and &lt;em&gt;O Father O Satan O Sun!&lt;/em&gt;.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Today‘s album of the day is a masterpiece called <strong>The Satanist</strong> by the polish black metal band <strong>Behemoth</strong>.
It‘s one of these albums, where there‘s not a single song that feels too much, all tracks are perfect in their spot.</p>
<p>Although it‘s quite difficult to name favorite tracks, there are some highlights such as <em>Ora Pro Nobis Lucifer</em> or the combination of <em>In the Absensce Ov Light</em> and <em>O Father O Satan O Sun!</em>.</p>
<p>It‘s definitely an album that is worth listening in one piece, so take yourself these 45 minutes of time and consume it with full attention.
It‘s worth it.</p>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: Black Metal, Death Metal</li>
<li>9 songs, 44 minutes</li>
<li>Released 2014</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://songwhip.com/behemoth/thesatanist">Songwhip</a></li>
<li><a href="https://www.metal-archives.com/albums/Behemoth/The_Satanist/395440">Metal Archives</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: Arch Enemy - War Eternal</title>
            <link>/posts/aotd-arch-enemy-war-eternal/</link>
            <pubDate>Wed, 26 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-arch-enemy-war-eternal/</guid>
            <description>&lt;p&gt;For today‘s recommendation, one of my favorite death metal albums came up: &lt;strong&gt;War Eternal&lt;/strong&gt; by &lt;strong&gt;Arch Enemy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It‘s their first album with their new singer Alissa White-Gluz, who, IMHO, fits into the band perfectly.
To be honest, I like her vocals much more than those of the previous singers.&lt;/p&gt;
&lt;p&gt;From the musical perspective, the album is nothing special, however there are some great tracks on it, and it has that kind of groove, that makes me want to hear it from time to time.
It‘s definitely one of the band‘s best albums.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>For today‘s recommendation, one of my favorite death metal albums came up: <strong>War Eternal</strong> by <strong>Arch Enemy</strong>.</p>
<p>It‘s their first album with their new singer Alissa White-Gluz, who, IMHO, fits into the band perfectly.
To be honest, I like her vocals much more than those of the previous singers.</p>
<p>From the musical perspective, the album is nothing special, however there are some great tracks on it, and it has that kind of groove, that makes me want to hear it from time to time.
It‘s definitely one of the band‘s best albums.</p>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: Melodic Death Metal</li>
<li>13 songs, 47 minutes</li>
<li>Released 2014</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://songwhip.com/arch-enemy/wareternal">Songwhip</a></li>
<li><a href="https://www.metal-archives.com/albums/Arch_Enemy/War_Eternal/406269">Metal Archives</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: Misþyrming - Algleymi</title>
            <link>/posts/aotd-misthyrming-algleymi/</link>
            <pubDate>Tue, 25 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-misthyrming-algleymi/</guid>
            <description>&lt;p&gt;One of my favorite sub-genres is Icelandic black metal.
I know, not everyone likes these fine-grained sub-genres, however there is something special about these Icelandic bands and their music.
For today, I recommend the album &lt;strong&gt;Algleymi&lt;/strong&gt; by &lt;strong&gt;Misþyrming&lt;/strong&gt; (pronunciation: ​&lt;a href=&#34;https://en.wiktionary.org/wiki/mis%C3%BEyrming&#34;&gt;/ˈmɪːsˌθɪrmiŋk/&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;It‘s a great example of the typical melancholy present in Icelandic black metal, which makes me love it so much.
Combined with the black metal feeling of losing yourself between growling vocals and endless riffs, this is the perfect music for a deep dive into your own thoughts.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>One of my favorite sub-genres is Icelandic black metal.
I know, not everyone likes these fine-grained sub-genres, however there is something special about these Icelandic bands and their music.
For today, I recommend the album <strong>Algleymi</strong> by <strong>Misþyrming</strong> (pronunciation: ​<a href="https://en.wiktionary.org/wiki/mis%C3%BEyrming">/ˈmɪːsˌθɪrmiŋk/</a>).</p>
<p>It‘s a great example of the typical melancholy present in Icelandic black metal, which makes me love it so much.
Combined with the black metal feeling of losing yourself between growling vocals and endless riffs, this is the perfect music for a deep dive into your own thoughts.</p>
<p>Although some parts stand out, it‘s not possible for me to name a favorite song, it‘s the sum of all songs, that makes this album great.</p>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: (Icelandic) black metal</li>
<li>8 songs, 46 minutes</li>
<li>Released 2019</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://misthyrming.bandcamp.com/album/algleymi">Bandcamp</a></li>
<li><a href="https://songwhip.com/misthyrming/algleymi">Songwhip</a></li>
<li><a href="https://www.metal-archives.com/albums/Mis%C3%BEyrming/Algleymi/775128">Metal Archives</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: Eïs - Kainsmal</title>
            <link>/posts/aotd-eis-kainsmal/</link>
            <pubDate>Tue, 18 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-eis-kainsmal/</guid>
            <description>&lt;p&gt;For today, it‘s again &lt;strong&gt;Eïs&lt;/strong&gt;, this time with their album &lt;strong&gt;Kainsmal&lt;/strong&gt;.
Back then, they performed under the name &lt;em&gt;Geïst&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;It‘s a much earlier album than yesterday‘s recommendation, which is audible by the much rawer sound.
None the less, it‘s a fantastic album with the typical Eïs atmosphere.&lt;/p&gt;
&lt;p&gt;Of course, all tracks are perfect in their spot and I wouldn‘t change a single thing, however &lt;em&gt;Lykoi&lt;/em&gt; and &lt;em&gt;Kainsmal&lt;/em&gt; are my favorite tracks.
The latter is ending with Nietzsche‘s famous poem &lt;em&gt;Der Freigeist&lt;/em&gt; (also known as &lt;em&gt;Vereinsamt&lt;/em&gt;), spoken by Klaus Kinski.
It‘s last words won‘t get out of your head, once you hear them:&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>For today, it‘s again <strong>Eïs</strong>, this time with their album <strong>Kainsmal</strong>.
Back then, they performed under the name <em>Geïst</em>.</p>
<p>It‘s a much earlier album than yesterday‘s recommendation, which is audible by the much rawer sound.
None the less, it‘s a fantastic album with the typical Eïs atmosphere.</p>
<p>Of course, all tracks are perfect in their spot and I wouldn‘t change a single thing, however <em>Lykoi</em> and <em>Kainsmal</em> are my favorite tracks.
The latter is ending with Nietzsche‘s famous poem <em>Der Freigeist</em> (also known as <em>Vereinsamt</em>), spoken by Klaus Kinski.
It‘s last words won‘t get out of your head, once you hear them:</p>
<blockquote>
<p>Weh‘ dem, der keine Heimat hat</p></blockquote>
<p>English:</p>
<blockquote>
<p>Woe to he who has no home</p></blockquote>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: Melodic Black Metal</li>
<li>6 tracks, 37 minutes</li>
<li>Released 2006</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://eis-de.bandcamp.com/album/kainsmal">Bandcamp</a></li>
<li><a href="https://songwhip.com/eis/kainsmal">Songwhip</a></li>
<li><a href="https://www.metal-archives.com/albums/Ge%C3%AFst/Kainsmal/123424">Metal Archives</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day</title>
            <link>/posts/album-of-the-day/</link>
            <pubDate>Mon, 17 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/album-of-the-day/</guid>
            <description>&lt;p&gt;Since the beginning of the corona virus pandemic, me and my co-workers are mainly working from home.
We‘ve had some full time remote employees before, however most of us were used to working in an office environment, having colleagues around, and all that comes with it such as a chat in the kitchen.&lt;/p&gt;
&lt;p&gt;To compensate for the missing exchange between employees, the company scheduled a daily meeting where we‘re chatting about mostly non-work related topics.
A few days ago, a co-worker asked me for an album recommendation, and of course I‘ve had one for them.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Since the beginning of the corona virus pandemic, me and my co-workers are mainly working from home.
We‘ve had some full time remote employees before, however most of us were used to working in an office environment, having colleagues around, and all that comes with it such as a chat in the kitchen.</p>
<p>To compensate for the missing exchange between employees, the company scheduled a daily meeting where we‘re chatting about mostly non-work related topics.
A few days ago, a co-worker asked me for an album recommendation, and of course I‘ve had one for them.</p>
<p>Since then, I share an almost daily album recommendation with my peers, including some short information about the artist and the album.
Because this might not only be of interest for my co-workers, I‘ve decided to share these recommendations on the blog.
All recommendations are filed under the tag <a href="/tags/album-of-the-day/">album-of-the-day</a>.</p>
<p>My musical taste is kind of weird and hard to describe.
The basic taste is metal, however I‘m also a fan of classical music, especially symphonies (Brahms, Beethoven, Rachmaninov, etc.).
Metal-wise I prefer the heavier sub-genres like Black- and Death Metal, particularly with melodic and symphonic influences.
Exceptions prove the rule.</p>
]]></content>
        </item>
        
        <item>
            <title>Album of the Day: Eïs - Stillstand und Heimkehr</title>
            <link>/posts/aotd-eis-stillstand-und-heimkehr/</link>
            <pubDate>Mon, 17 Aug 2020 08:00:00 +0200</pubDate>
            
            <guid>/posts/aotd-eis-stillstand-und-heimkehr/</guid>
            <description>&lt;p&gt;My first album recommendation is one of my most favorite albums, it‘s &lt;strong&gt;Stillstand und Heimkehr&lt;/strong&gt; by the German black metal band &lt;strong&gt;Eïs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Their style is kind of hard to specify, it‘s some kind of melodic black metal with some doom influences and an impressive atmospheric dark mood.&lt;/p&gt;
&lt;p&gt;Stillstand und Heimkehr (which ist best translated &lt;em&gt;Stagnation and Homecoming&lt;/em&gt;) was my first contact with Eïs and immediately touched me deeply, which in turn caused me to listen to and falling in love with all their albums.
It‘s a short EP, consisting of two tracks.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>My first album recommendation is one of my most favorite albums, it‘s <strong>Stillstand und Heimkehr</strong> by the German black metal band <strong>Eïs</strong>.</p>
<p>Their style is kind of hard to specify, it‘s some kind of melodic black metal with some doom influences and an impressive atmospheric dark mood.</p>
<p>Stillstand und Heimkehr (which ist best translated <em>Stagnation and Homecoming</em>) was my first contact with Eïs and immediately touched me deeply, which in turn caused me to listen to and falling in love with all their albums.
It‘s a short EP, consisting of two tracks.</p>
<p>The first track builds up some great atmosphere with light but desperate piano over the sound of the sea.
The mood gets destroyed by a merciless riff combined with a raw scream.
As the track progresses, some lighter parts come through, however it mainly stays within it‘s dark mood.</p>
<p>Following is the title track which keeps this mood and intensifies it by it‘s masterful lyrics (if you feel remembered to Caspar David Friedrich‘s painting <a href="https://en.wikipedia.org/wiki/Wanderer_above_the_Sea_of_Fog"><em>Wanderer over the Sea of Fog</em></a>, you‘re damn right):</p>
<blockquote>
<p>Ich möchte wandern,<br>
weit über das Nebelmeer.<br>
Fort von den Menschen,<br>
Stillstand und Heimkehr.</p></blockquote>
<p>English:</p>
<blockquote>
<p>I want to ramble,<br>
far over the sea of fog.<br>
Away from humans,<br>
stagnation and homecoming.</p></blockquote>
<p>There‘s not much to say about it, just listen to it.
Pro tip: close your eyes for the last intense blast beat part and just keep diving into the music.
It‘s simply beautiful with it‘s desperate dark and almost depressive mood.</p>
<p>I‘ll keep my personal thoughts and feelings regarding this album for myself, but can tell you this:
<em>Stillstand und Heimkehr</em> has been one of the most important and best albums for me since it‘s release.
I highly recommend taking the time to listen to it for a few times.</p>
<h2 id="quick-facts">Quick Facts</h2>
<ul>
<li>Genre: Melodic Black Metal, Doom and DSBM influences</li>
<li>2 tracks, 22 minutes</li>
<li>Released 2018</li>
</ul>
<h2 id="links">Links</h2>
<ul>
<li><a href="https://eis-de.bandcamp.com/album/stillstand-und-heimkehr">Bandcamp</a></li>
<li><a href="https://songwhip.com/eis/stillstandundheimkehr">Songwhip</a></li>
<li><a href="https://www.metal-archives.com/albums/E%C3%AFs/Stillstand_und_Heimkehr/687732">Metal Archives</a></li>
</ul>
]]></content>
        </item>
        
        <item>
            <title>Hello World</title>
            <link>/posts/hello-world/</link>
            <pubDate>Sat, 09 Mar 2019 17:05:15 +0100</pubDate>
            
            <guid>/posts/hello-world/</guid>
            <description>&lt;p&gt;Hello, World!&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Hello, World!</p>
]]></content>
        </item>
        
    </channel>
</rss>
