<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

    <channel>
        <title>Stefan &#39;gideonstar&#39; Ritter</title>
        <link>https://stefanritter.de/blog/</link>
        <description>I am an IT guy, musician and father of one from Rhineland, Germany. My hobbies are sailing, swimming and horse riding.</description>
        <language>en-GB</language>
        <copyright>Stefan 'gideonstar' Ritter</copyright>
        <lastBuildDate>Mon, 23 Mar 2026 22:24:03 +0100</lastBuildDate>

        
        <item>
            <title>Top 10</title>
            <description>&lt;p&gt;I have been maintaining a few top 10 lists for several years now, and I thought I might as well publish them. Here they are:&lt;/p&gt;
&lt;h3&gt;Movies&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;The Great Escape&lt;/li&gt;
&lt;li&gt;Starship Troopers&lt;/li&gt;
&lt;li&gt;12 Angry Men&lt;/li&gt;
&lt;li&gt;My Name is Nobody&lt;/li&gt;
&lt;li&gt;Adams æbler&lt;/li&gt;
&lt;li&gt;Pusher (1-3)&lt;/li&gt;
&lt;li&gt;The Devil&amp;rsquo;s Rejects&lt;/li&gt;
&lt;li&gt;Green Room&lt;/li&gt;
&lt;li&gt;From Dusk Till Dawn&lt;/li&gt;
&lt;li&gt;Funny Games / Keoma (hard decision)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Books (in german)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Ken Follett - Die Säulen der Erde&lt;/li&gt;
&lt;li&gt;Stephen King - Es&lt;/li&gt;
&lt;li&gt;Stephen King - Sie&lt;/li&gt;
&lt;li&gt;Noah Gordon - Der Medicus&lt;/li&gt;
&lt;li&gt;Michael Ende - Jim Knopf und Lukas  der Lokomotivführer&lt;/li&gt;
&lt;li&gt;Mark Twain - Tom Sawyer und Huckleberry Finn&lt;/li&gt;
&lt;li&gt;Franz Kafka - Die Verwandlung&lt;/li&gt;
&lt;li&gt;Kurt Vonnegut - Schlachthof 5 oder Der Kinderkreuzzug&lt;/li&gt;
&lt;li&gt;Tonke Dragt - Der Brief für den König&lt;/li&gt;
&lt;li&gt;Friedrich Dürrenmatt - Die Physiker&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Songs&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;System Of A Down - Chop Suey&lt;/li&gt;
&lt;li&gt;The Raconteurs - Steady As She Goes&lt;/li&gt;
&lt;li&gt;Muse - Citizen Erased&lt;/li&gt;
&lt;li&gt;Poison The Well - Slice Paper Wrist&lt;/li&gt;
&lt;li&gt;Dire Straits - Brothers In Arms&lt;/li&gt;
&lt;li&gt;Nachtgeschrei - An Mein Ende&lt;/li&gt;
&lt;li&gt;Baroness - March To The Sea&lt;/li&gt;
&lt;li&gt;Bloodhound Gang - Along Comes Mary&lt;/li&gt;
&lt;li&gt;Destiny - Skies Dressed In Black&lt;/li&gt;
&lt;li&gt;Letzte Instanz - Traumlos&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Albums&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Poison The Well - The Opposite Of December&lt;/li&gt;
&lt;li&gt;Destiny - The Tracy Chapter&lt;/li&gt;
&lt;li&gt;Narziss - Solange Das Herz Schlägt&lt;/li&gt;
&lt;li&gt;Nachtgeschrei - Ardeo&lt;/li&gt;
&lt;li&gt;Walls Of Jericho - With Devils Amongst Us All&lt;/li&gt;
&lt;li&gt;The Offspring - Smash&lt;/li&gt;
&lt;li&gt;Emil Bulls - Angel Delivery Service&lt;/li&gt;
&lt;li&gt;The Black Dahlia Murder - Nocturnal&lt;/li&gt;
&lt;li&gt;Muse - Showbiz &amp;amp; Origin Of Symmetry&lt;/li&gt;
&lt;li&gt;Rage Against The Machine - Evil Empire&lt;/li&gt;
&lt;/ol&gt;</description>
            <link>https://stefanritter.de/blog/top-10/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/top-10/</guid>
            <pubDate>Mon, 02 Feb 2026 12:28:16 +0100</pubDate>
        </item>
        
        <item>
            <title>Broken Royal Kludge Keycaps</title>
            <description>&lt;p&gt;I am a big fan of 75% keyboards. After my long-used Logitech G Pro slowly began to give up the ghost, I decided on a Royal Kludge M75. But that turned out to be a mistake.&lt;/p&gt;
&lt;p&gt;When I opened the package, two keys immediately fell out. Upon closer inspection, it turned out that the mounts in the keycaps were broken. The keycaps from my old keyboard fit quite well, so it wasn&amp;rsquo;t a major problem at first.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://stefanritter.de/img/royalcludge.jpg&#34; alt=&#34;Royal Cludge M75 broken keycap&#34;&gt;&lt;/p&gt;
&lt;p&gt;After I reported the defect to customer support, I received a package with a full set of new keycaps in my mailbox about three weeks later (shipping from China). So far, so good.&lt;/p&gt;
&lt;p&gt;Since then, about once a month, a keycap has broken in the same way, fortunately always a different one so far. Nevertheless, it&amp;rsquo;s extremely annoying and I&amp;rsquo;m now going to look at the Keychron V1. It can also do QMK!&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/broken-royal-kludge-keycaps/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/broken-royal-kludge-keycaps/</guid>
            <pubDate>Fri, 05 Dec 2025 11:17:00 +0100</pubDate>
        </item>
        
        <item>
            <title>How to quit Vi</title>
            <description>&lt;p&gt;Have you ever had the problem of not knowing how to exit VI without restarting your computer? No problem, here&amp;rsquo;s a very simple solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ol&gt;
&lt;li&gt;Press ESCAPE on your keyboard&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Type the following:&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-vim&#34; data-lang=&#34;vim&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;kill&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;-9&lt;/span&gt; $(&lt;span style=&#34;color:#a6e22e&#34;&gt;ps&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ax&lt;/span&gt; | &lt;span style=&#34;color:#a6e22e&#34;&gt;grep&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;vi&lt;/span&gt; | &lt;span style=&#34;color:#a6e22e&#34;&gt;head&lt;/span&gt; -&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; | &lt;span style=&#34;color:#a6e22e&#34;&gt;cut&lt;/span&gt; -&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; -&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Press ENTER on your keyboard&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See? It&amp;rsquo;s not that difficult.&lt;/p&gt;
</description>
            <link>https://stefanritter.de/blog/quit-vi/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/quit-vi/</guid>
            <pubDate>Mon, 01 Sep 2025 23:13:54 +0200</pubDate>
        </item>
        
        <item>
            <title>What the Movie</title>
            <description>&lt;p&gt;At the beginning of my training as an IT specialist, I started playing What The Movie. Now, after 16 years, I have solved 10,000 so-called “feature films” and decided that I am done!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://whatthemovie.com&#34;&gt;https://whatthemovie.com&lt;/a&gt;&lt;/p&gt;
</description>
            <link>https://stefanritter.de/blog/what-the-movie/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/what-the-movie/</guid>
            <pubDate>Tue, 19 Aug 2025 10:31:42 +0200</pubDate>
        </item>
        
        <item>
            <title>My Mastodon relocation adventure</title>
            <description>&lt;p&gt;The time had finally come: Mastodon (Bare Metal) on my old Ubuntu 20 container could no longer be updated from 4.3.9 onwards. Ruby was too old, PostgreSQL was too old. So I moved the entire system.&lt;/p&gt;
&lt;p&gt;Copying data from the old system to the new one:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl stop mastodon *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;su - mastodon
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pg_dump --format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;custom --no-acl --no-owner --clean mastodon_production &amp;gt; mastodon_production.dump
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scp mastodon_production.dump $new_host:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scp -r live/public/system $new_host:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;shutdown -h now
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The new system is Alpine Linux with Docker Compose:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /opt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/mastodon/mastodon live
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd live
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git checkout v4.3.9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp .env.production.sample .env.production
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker compose run --rm web bundle exec rake mastodon:setup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Fill the .env.production file with the generated values, then continue with the database and the data:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker compose exec -ti db /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;su - postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;psql
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\c&lt;/span&gt; postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drop schema public;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;create schema public;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grant all on schema public to postgres;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grant all on schema public to public;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker exec -i mastodon-db-1 pg_restore -U postgres -v --clean --no-acl --no-owner -d postgres &amp;lt; /root/mastodon_production.dump
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mv /root/system public/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chown -R 991:991 public
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Switch server in Nginx proxy, done.&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/my-mastodon-relocation-adventure/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/my-mastodon-relocation-adventure/</guid>
            <pubDate>Fri, 25 Jul 2025 14:16:26 +0200</pubDate>
        </item>
        
        <item>
            <title>Sort dates from json in Hugo</title>
            <description>&lt;p&gt;I manage concert data on a Hugo homepage in a JSON file. A distinction should be made between upcoming and past concerts. In addition, the date should be reformatted after sorting. Here is a bit of crazy code for this:&lt;/p&gt;
&lt;p&gt;data/dates.json:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2024-03-01&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Cool Pub&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Pubville&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2024-12-24&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Punkfest&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Punkcity&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2025-03-15&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Rock in Town&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Rocktown&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2025-08-28&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Open Jazz Festival&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Jazzville&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see, the concerts are simply sorted from top (earliest) to bottom (latest).&lt;/p&gt;
&lt;p&gt;Now the fun part.&lt;/p&gt;
&lt;p&gt;themes/layouts/_default/home.html:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;list&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;box&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_now := time.Now.Format &amp;#34;20060102&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $concerts := .Site.Data.dates }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- range $concerts }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_concert := time.AsTime .date }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_concert := $date_concert.Format &amp;#34;20060102&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- if gt $date_concert $date_now }} &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!-- greater than --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_string := time.AsTime .date }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_string := $date_string.Format &amp;#34;02.01.2006&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{{ .url }}&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;concert&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&amp;gt;{{ $date_string }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&amp;gt;{{ .name }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt;&amp;gt;{{ .city }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;box&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&amp;gt;Past concerts&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_now := time.Now.Format &amp;#34;20060102&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $concerts := .Site.Data.dates }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- range $concerts }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_concert := time.AsTime .date }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_concert := $date_concert.Format &amp;#34;20060102&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- if lt $date_concert $date_now }} &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!-- less than --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_string := time.AsTime .date }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- $date_string := $date_string.Format &amp;#34;02.01.2006&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{{ .url }}&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;concert&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&amp;gt;{{ $date_string }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&amp;gt;{{ .name }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt;&amp;gt;{{ .city }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{- end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maybe someone could use it. Don&amp;rsquo;t forget to rebuild the page after a concert!&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/hugo-json-date-sort/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/hugo-json-date-sort/</guid>
            <pubDate>Thu, 27 Mar 2025 22:11:54 +0100</pubDate>
        </item>
        
        <item>
            <title>Fun with printers</title>
            <description>&lt;p&gt;I manage printers professionally, which we buy from a company, let&amp;rsquo;s call them &lt;strong&gt;„ABC Printers“&lt;/strong&gt;. The printers are basically &lt;strong&gt;Lexmark MS331dn&lt;/strong&gt;, which have been given a new label.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;We bought the printers at the end of 2022 with a &lt;strong&gt;24-month maintenance contract&lt;/strong&gt;. During this time, I once had a technical problem that I couldn&amp;rsquo;t solve myself, as all administrative functions on the web front end are &lt;strong&gt;protected with a pin&lt;/strong&gt;. When I asked if I could get this pin, they referred to the maintenance contract, which excludes this.&lt;/p&gt;
&lt;p&gt;Today I had the motivation to contact them again, as the maintenance contract expired some time ago. The following phone call:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Me: »I would now like to have the pin so that I can manage the printer myself.«
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Employee: »We don&amp;#39;t give out these pins because we have maintenance contracts.«
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Me: »But the contract has expired.«
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Employee: »But we wrote to you about this at the beginning of 2025 and haven&amp;#39;t received a reply.«
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ouch. After a few minutes of discussion, he then asked a technician to contact me to remove the pins. It happened, everything was fine.&lt;/p&gt;
&lt;p&gt;However, I still had a small technical question about the following printer data:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Time in On-Mode: 43031:52:44
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Installation Date: 2022-10-26 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s calculate that: 43031 hours divided by 24 hours divided by 365 days == 4.9 years. Wait, what? The printer had been running for &lt;strong&gt;more than 2 years&lt;/strong&gt; before we bought it?&lt;/p&gt;
&lt;p&gt;The ABC employee assured me that they &lt;em&gt;never&lt;/em&gt; sell used printers, but couldn&amp;rsquo;t rule it out with Lexmark. He then contacted Lexmark and received the following reply:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;This may have the following reasons:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; * The date-time settings on your printers are incorrect
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; * The date-time settings were incorrect during quality control
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The date on the printer is set via NTP and is correct. I don&amp;rsquo;t know what Lexmark&amp;rsquo;s quality control does. My guess is… yeah, you got it.&lt;/p&gt;
</description>
            <link>https://stefanritter.de/blog/fun-with-printers/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/fun-with-printers/</guid>
            <pubDate>Fri, 14 Mar 2025 10:28:30 +0100</pubDate>
        </item>
        
        <item>
            <title>Simple HTML Form bot detection</title>
            <description>&lt;p&gt;I recently had to integrate a contact form on a homepage, which naturally attracted a few bots after a very short time. Since I don&amp;rsquo;t want to use reCAPTCHA for reasons and I don&amp;rsquo;t like all the other external solutions, I came up with the following solution:&lt;/p&gt;
&lt;p&gt;HTML:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-HTML&#34; data-lang=&#34;HTML&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;action&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/cgi-bin/mail&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;placeholder&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Name&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;required&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;textarea&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;placeholder&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Message&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;required&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;botcatcher&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;botcatcher&amp;#34;&lt;/span&gt;&amp;gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!-- This is NOT required --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CSS:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;input[name=botcatcher]&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;display&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;none&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;JavaScript:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-JavaScript&#34; data-lang=&#34;JavaScript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;botcatcher&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;imnotabot&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As bots are usually script-based and do not parse JavaScript, this field should only be filled if a visitor submits the form with JavaScript enabled. I know that there are also people out there who have JavaScript disabled in their browser, so a manual check of the messages is still necessary. So far, however, the detection rate is over 99%, so this is almost negligible.&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/simple-html-form-bot-detection/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/simple-html-form-bot-detection/</guid>
            <pubDate>Wed, 12 Feb 2025 08:30:19 +0100</pubDate>
        </item>
        
        <item>
            <title>Hugo homepage as page bundle</title>
            <description>&lt;p&gt;My aim was to divide the start page of a &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt; site into blocks, with each block being a separate Markdown file. The same principle should also work (optionally) for normal pages. Here is the code with which this is possible.&lt;/p&gt;
&lt;p&gt;Content structure:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plain&#34; data-lang=&#34;plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;content/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  home/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    _index.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    block-1.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    block-2.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  about/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    index.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    block-1.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    block-2.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note the different index file names (with and without underscore). The homepage is per definition a leaf bundle while the other pages are branch bundles. More details &lt;a href=&#34;https://gohugo.io/content-management/page-bundles/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The block order can be defined in the header of the content files:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+++
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;order = 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+++
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;themes/theme/layouts/_default/baseof.html:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ block &amp;#34;main&amp;#34; . }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;themes/theme/layouts/_default/home.html:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ define &amp;#34;main&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {{ with .Site.GetPage &amp;#34;/home&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;first&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      {{ .Title }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      {{ .Content }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ range sort .Resources &amp;#34;.Params.order&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ .Title }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ .Content }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;themes/theme/layouts/_default/single.html:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ define &amp;#34;main&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;first&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ .Title }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{ .Content }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {{ range sort .Resources &amp;#34;.Params.order&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      {{ .Title }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      {{ .Content }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
            <link>https://stefanritter.de/blog/hugo-homepage-as-page-bundle/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/hugo-homepage-as-page-bundle/</guid>
            <pubDate>Tue, 28 Jan 2025 10:40:59 +0100</pubDate>
        </item>
        
        <item>
            <title>Unify OpenScape sucks</title>
            <description>&lt;p&gt;I have to work with a &lt;strong&gt;Unify OpenScape Business X5&lt;/strong&gt; for my job. The plan is to switch to an open source solution by the end of the year, but that doesn&amp;rsquo;t stop me from giving my opinion on this pile of rubbish.&lt;/p&gt;
&lt;p&gt;And because it works so well with points, here are a few:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The &lt;strong&gt;Unify OpenScape Business X5&lt;/strong&gt; consists of two devices, each of which has its own IP address. Due to a reorganisation in the network, the subnet mask was changed from &lt;strong&gt;/24&lt;/strong&gt; to &lt;strong&gt;/20&lt;/strong&gt;. This change should of course also be made on the two interfaces of the system. However, when I try to do this via the configuration of the interfaces, I get an error message on the &lt;em&gt;first interface&lt;/em&gt; that the subnet mask must be identical to that of the &lt;em&gt;second interface&lt;/em&gt;. Er, what do you mean? Am I supposed to open two browser windows and change both in the same microsecond? Of course not. The trick is to go through the setup wizard again and make the adjustment there. No shit sherlock!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The system is capable of &lt;strong&gt;SIP&lt;/strong&gt;, but not in one of the core functions, the &lt;em&gt;agents&lt;/em&gt;. Agents are extensions that can connect to the queue in order to receive calls from our hotline. If you&amp;rsquo;re thinking, cool, I can just install any SIP client in my home office and connect to the system via VPN: you&amp;rsquo;re wrong. Agents can only work via their own &lt;strong&gt;HFA protocol&lt;/strong&gt;. Thanks for nothing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let&amp;rsquo;s stick with &lt;strong&gt;HFA&lt;/strong&gt;. There is exactly &lt;em&gt;one&lt;/em&gt; usable client (Communication Client), but it stopped in development somewhere between 1990 and 1995. Configuring it is a PITA.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The usual: do you want to use function X? No problem, here&amp;rsquo;s your licence. Only costs two souls and lunch at the Ritz.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Back to the queue. It regularly happens that the queue is full of callers but not a single agent rings. You then have to sit it out, after a few minutes the queue continues. And that has nothing to do with idle times. Support has still not been able to find the error.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Call Forwarding. I regularly switch between three devices. The first is my office phone, so no call forwarding. The second device is my smartphone and the third is my landline at home, which I use in my home office. To configure call forwarding, I have to open Edge, log in to the web interface, click on ‘Setup’, click on ‘UC Suite’, click on ‘User directory’ and search for my number. From a predefined list of destinations, I can switch between ‘At home’, ‘Away’ or ‘No forwarding’. It is &lt;em&gt;not&lt;/em&gt; possible to create my own names. It is also &lt;em&gt;not&lt;/em&gt; possible to change the diversion using the practical speed dialling function.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Edge&lt;/strong&gt;! No joke, this is the &lt;em&gt;only&lt;/em&gt; browser in which the web interface works reasonably well. Admittedly, I haven&amp;rsquo;t tested Internet Explorer.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Conclusion: &lt;strong&gt;Hands off this junk&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Rant over.&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/unify-openscape-sucks/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/unify-openscape-sucks/</guid>
            <pubDate>Wed, 15 Jan 2025 22:35:25 +0100</pubDate>
        </item>
        
        <item>
            <title>My rant on Signal</title>
            <description>&lt;p&gt;After my Matrix experiment &lt;a href=&#34;https://stefanritter.de/blog/element-is-broken/&#34;&gt;failed&lt;/a&gt; in my private environment, I am now a 100% Signal user again. But that doesn&amp;rsquo;t mean that there&amp;rsquo;s nothing to complain about Signal, on the contrary. There are a few things that are really wrong, which I would like to list here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/signalapp/Signal-iOS/issues/4916&#34;&gt;Disc space on iOS&lt;/a&gt;. The bug has been &lt;strong&gt;open since 2021&lt;/strong&gt; (!) and has not been solved satisfactorily. Signal currently occupies &lt;strong&gt;6 gigabytes&lt;/strong&gt; on my iPhone, and the trend is rising.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Signal can be used on a &lt;strong&gt;maximum of 5 devices&lt;/strong&gt;, after that it&amp;rsquo;s over. This is certainly sufficient for the normal user, but I am working on more devices. Why such a limit at all?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I don&amp;rsquo;t want to receive notifications on all devices. However, the behaviour of Signal when notifications are switched off is that it constantly asks me if I want to switch on the notifications. So there is only the diversions via iOS itself.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sometimes I wish I had &lt;strong&gt;Jabber&lt;/strong&gt; back!&lt;/p&gt;
&lt;p&gt;Rant over.&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/my-rant-on-signal/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/my-rant-on-signal/</guid>
            <pubDate>Wed, 15 Jan 2025 09:22:50 +0100</pubDate>
        </item>
        
        <item>
            <title>Tolino is broken</title>
            <description>&lt;p&gt;I got two Kindles (2nd generation) a long time ago, which prompted me to finally start reading more again. Basically, it worked quite well; I installed Calibre, imported books and moved them to the Kindle from there.&lt;/p&gt;
&lt;p&gt;However, I quickly wanted a more up-to-date device that wasn&amp;rsquo;t from Amazon. I decided on the Tolino Vision 6 and after playing around a bit, I discovered a few things that really annoyed me:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;when the device is tilted, an icon appears on the right edge with which the orientation can be changed. This wouldn&amp;rsquo;t be so bad if the icon didn&amp;rsquo;t obscure the text underneath. Actually, I don&amp;rsquo;t want this function at all, but I can&amp;rsquo;t switch it off.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the power button reacts very spongily. After the ‘click’, it has to be pressed a little harder to make it react.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the book view in the software is worse than on the old Kindle. I can&amp;rsquo;t see which page I&amp;rsquo;m on when turning pages and the alphabet at the bottom is absolutely useless because it&amp;rsquo;s too small.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;My conclusion: I&amp;rsquo;m not giving up hope that one day there will be a manufacturer who produces a good and open device so that you can install another reader &lt;strong&gt;without jailbreak&lt;/strong&gt; if you don&amp;rsquo;t like the one that came with it. As far as I&amp;rsquo;m concerned, the guarantee can be cancelled, I&amp;rsquo;m not particularly interested in that.&lt;/p&gt;
&lt;p&gt;Rant over.&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/tolino-is-broken/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/tolino-is-broken/</guid>
            <pubDate>Mon, 09 Sep 2024 00:34:20 +0200</pubDate>
        </item>
        
        <item>
            <title>Element is broken</title>
            <description>&lt;p&gt;I have been a Signal user for many years and am &lt;a href=&#34;https://github.com/signalapp/Signal-iOS/issues/4916&#34;&gt;reasonably&lt;/a&gt; happy with it. But soon my son will be of an age where he will also get a smartphone and I will have different requirements than I do for myself. For example, I want a messenger whose server I can host myself and which is not linked to a telephone number. Also I want to keep him away from Telegram and WhatsApp groups for as long as possible.&lt;/p&gt;
&lt;p&gt;For this reason, I installed a Matrix (Synapse) server again after a long time and created three accounts. And of course I want to use Element. But after a few days I just can&amp;rsquo;t understand the following things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;No &lt;a href=&#34;https://github.com/element-hq/element-meta/discussions/726&#34;&gt;aliases&lt;/a&gt; are possible for contacts. Either my name is &amp;ldquo;Stefan Ritter&amp;rdquo; or my name is &amp;ldquo;Papa&amp;rdquo;. In our case, &amp;ldquo;Papa&amp;rdquo; is of course fine, but as soon as I want to reach contacts outside the family, that would of course be rubbish. Is it really that difficult to implement? Are Spaces and emojis really much more important?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There is no possibility to adjust colours. In contrast to Signal (where this is possible to a limited extent), it is much more difficult to distinguish who has written what in Element. And again: is that so difficult to implement?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This stupid piece of software has 2 sidebars! Who came up with the stupid idea of making them unhideable?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I can sort my contacts and rooms by activity or alphabetically. The funny thing is: Element doesn&amp;rsquo;t remember this for 3 minutes!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On iOS, I&amp;rsquo;m used to taking a photo, pressing &amp;ldquo;Share&amp;rdquo; and selecting an app. Why the hell is Element not showing up? Well, &lt;a href=&#34;https://github.com/element-hq/element-ios/issues/7666&#34;&gt;because of&lt;/a&gt;…&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can search for rooms and specify a server for them. If you now think that you will be shown rooms on this server: nope. Rooms on completely different servers appear in rows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Multiaccount! Come on, it can&amp;rsquo;t be that I have to install Fluffychat at the same time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It doesn&amp;rsquo;t even remember its &lt;a href=&#34;https://github.com/element-hq/element-desktop/issues/686&#34;&gt;position and size&lt;/a&gt; O.o&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In conclusion, I can only say that although Element is usable, development is focussed on completely absurd things. Why don&amp;rsquo;t you first make a good messenger with useful functions before you start building in some bullshit?&lt;/p&gt;
&lt;p&gt;Rant over.&lt;/p&gt;</description>
            <link>https://stefanritter.de/blog/element-is-broken/</link>
            <author>Stefan 'gideonstar' Ritter</author>
            <guid>https://stefanritter.de/blog/element-is-broken/</guid>
            <pubDate>Thu, 01 Aug 2024 00:00:00 +0000</pubDate>
        </item>
        

    </channel>

</rss>

