<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Blogs on Haukes Blog</title>
    <link>https://www.haukeluebbers.de/blog/</link>
    <description>Recent content in Blogs on Haukes Blog</description>
    <image>
      <title>Haukes Blog</title>
      <url>https://www.haukeluebbers.de/img/opengraph/default.jpg</url>
      <link>https://www.haukeluebbers.de/img/opengraph/default.jpg</link>
    </image>
    <generator>Hugo -- 0.155.3</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 27 Dec 2023 16:38:00 +0000</lastBuildDate>
    <atom:link href="https://www.haukeluebbers.de/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>My gaming year 2023</title>
      <link>https://www.haukeluebbers.de/blog/2023-12-my-gaming-year-in-review/</link>
      <pubDate>Wed, 27 Dec 2023 16:38:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-12-my-gaming-year-in-review/</guid>
      <description>&lt;p&gt;As a passionate, but ultimately unsuccessful Counter-Strike player, 2023 was a big year for me.
But surprisingly CS2 wasn&amp;rsquo;t the only new game that I played:
Here is my gaming year 2023.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>As a passionate, but ultimately unsuccessful Counter-Strike player, 2023 was a big year for me.
But surprisingly CS2 wasn&rsquo;t the only new game that I played:
Here is my gaming year 2023.</p>
<p>I decided only to list games that I played for the first time in 2023.
But of course I also played classics like CS:GO, Satisfactory, Stronghold Crusader HD, Company of Heroes 1 &amp; 2, and The Witcher 3: Wild Hunt.</p>
<h2 id="going-medieval-early-access">Going medieval [Early Access]</h2>
<p>This is a game that I actually picked up by and for myself in late December 2023.</p>
<p>This is the first &ldquo;colony-sim&rdquo; type game that I played. Instead of giving direct commands to individuals or groups on the map, you create personal schedules and priorities for each inhabitant of your small settlement.
Then the inhabitants ideally act according to those priorities, while also being influenced by their personalities or health.</p>
<p>I was always intrigued by this concept, that often also involves complex cause-effect sequences (eg. <a href="https://www.theguardian.com/games/2022/nov/16/unexpected-nudity-and-vomit-covered-cats-how-dwarf-fortress-tells-some-of-gamings-most-bizarre-stories">&ldquo;Unexpected nudity and vomit-covered cats: how Dwarf Fortress tells some of gaming’s most bizarre stories&rdquo;</a>).
But I was also worried about the barrier-to-entry, so I never tried Dwarf Fortress or Rimworld.</p>
<p><em>Going medieval</em> makes it relatively easy to get started with this type of game.
You guide 3 people in their attempt to build a sustainable and defendable settlement in a medieval world that has fallen into chaos because of the Black Death.
I played on medium difficulty, and even as a total colony-sim noob I managed.</p>
<p>I have played only 10 hours of this game until now, so I haven&rsquo;t seen all of it yet <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>- but I do enjoy it.
It has relaxing phases of just watching your people do their thing, micromanaged combat with robbers, and the constant dread of the next winter in the background.</p>
<p><a href="https://theirregularcorporation.com/promo/going-medieval/">Going medieval Website</a></p>
<p><img alt="Collage of screenshots of CS2, Going medieval, and a photo of our LAN party setup" loading="lazy" src="/img/content/2023_12_games.jpg"></p>
<h2 id="mindustry">Mindustry</h2>
<p>Mindustry is a mixture between tower-defense and factory builder - and it&rsquo;s open-source.
I played this on a LAN party in early December.</p>
<p>Factory-complexity-wise Mindustry is more comparable to Satisfactory than to Factorio - but because of the ever-impending next wave of attackers that&rsquo;s probably a good thing.
This is especially fun in multi-player, as you can split the work between tower-defense constructors, resource extraction specialists, and factory builders.</p>
<p>But watch out, a lone enemy that has broken through your tower defenses could just decide to destroy a critical supply line, which might render all of your frontline defenses useless!</p>
<p>A great game, and it&rsquo;s awesome that it is open-source!
I initially downloaded the game for free, but decided to buy it on steam after 8 hours of fun.</p>
<p><a href="https://anuke.itch.io/mindustry">Mindustry Website</a></p>
<h2 id="sunkenland-early-access">Sunkenland [Early Access]</h2>
<p>Another LAN party discovery.
It&rsquo;s a survival base building game in a water-world setting.</p>
<p>It is still early access, but while there are some rough edges around inventory management and vehicle mechanics, it offers a absolutely respectable amount of content at this stage.</p>
<p>In the past years, we also played a lot of <a href="https://raft-game.com/">Raft</a>, which obviously is more polished and has a great story, but also feels more unique and has a clear design language, which I miss in Sunkenland.
But Sunkenland feels less restrictive and might also find it&rsquo;s own design language later - and they haven&rsquo;t even begun working on the story yet, so you can&rsquo;t really hold that against the game.</p>
<p>Overall, a surprisingly solid game for an Early Access title (we played this in early December 2023).</p>
<p><a href="https://www.sunkenlandgame.com/">Sunkenland website</a></p>
<h2 id="16-source-go--2">1.6, Source, GO, &hellip; 2!</h2>
<p>This makes sense, when you play too much Counter-Strike, I promise!</p>
<p>I played this game since 1.6, when I mostly played for fun at unofficial school LAN parties with friends.
When I think &ldquo;1.6&rdquo;, I think &ldquo;mouse&rdquo; maps: maps that place you in giant bathrooms or living rooms from the perspective of a mouse or toy soldier.
And while I may have taken short breaks from CS:S&rsquo;s fy_iceworld map to rescue a virtual hostage or two on cs_italy, it wasn&rsquo;t until Counter Strike: Global Offensive, released in 2012, that I learned to love the competitive game mode.</p>
<p>And over the last 10 years, I played CS:GO reasonably consistently.
At the start with friends from by bachelor class, later also alone, and now with the infamous <em>*LadU*</em> (<em>Lappen an der Uni</em>, roughly &ldquo;Lowbobs from University&rdquo;) clan.
Because of certain individuals we would exclusively play <a href="https://en.wikipedia.org/wiki/Nuke_(Counter-Strike)"><em>de_nuke</em></a> - which I do believe is the most interesting and complex official map the game has to offer, but&hellip; I&rsquo;d like to play on other maps. :D</p>
<p>Anyway, 11 years after the release of the last Counter-Strike game, 2023 was the year of Counter-Strike &hellip; 2.
No &ldquo;Galactic Offensive&rdquo; or &ldquo;Condition One&rdquo;, simply &ldquo;2&rdquo;.</p>
<p>Let&rsquo;s start with the good stuff:</p>
<ol>
<li>
<p>We are finally playing maps other than Nuke, because of the new Premier mode, which more closely resembles the way that pro teams are deciding which maps to play on: By alternatingly banning maps from the available map pool until one maps remains.
This is a pretty nice change, which makes playing more exciting.</p>
</li>
<li>
<p>I also do like the new smoke dynamics and the ability to interrupt smoke walls through HE-grenades.</p>
</li>
<li>
<p>The game stays true to its competitive shooter roots.</p>
</li>
</ol>
<p>Now to the less good changes:</p>
<ol>
<li>
<p>Gun-game is gone. This game mode, in which you would get a new weapon for each kill, was great as a quick warm-up before the actual competitive 5v5 game. Valve, please fix.</p>
</li>
<li>
<p>I need a new laptop. My private laptop is a from 2015, and while it was a pretty high-end gaming laptop back then, I only get about 60-90 FPS out of it in CS2 on average.
Should I sit in a water pond surrounded by smoke grenades, this might drop down to 30.
I can kind of play around it by relying on game sense instead of sick flicks, but 2024 is going to be the year of a new laptop for me <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
</li>
</ol>
<p>This isn&rsquo;t necessarily a bad thing - I have been putting of playing a lot of higher-end graphical games that I otherwise would have liked to play in the last years, specifically Cyberpunk 2033.
So CS2 is simply the final nail in the coffin.</p>
<p>Overall I&rsquo;m pretty happy about CS2.
They stayed true to the series, and in my opinion could have even added another feature or two.
But maybe that will come once the dust2 of the release has settled.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>And I probably never will, because I&rsquo;m too much of a do-gooder; A colony of cannibals? Not on my watch. I&rsquo;m the one protecting the bodies of my slain enemies from polecats.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>It has to be a laptop or a very portable mini-PC case, because I take the train to these LAN-parties and don&rsquo;t want to risk carrying a gigantic gaming PC through Hamburgs rain.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Side project: Feedrebels - Make your own podcast feeds</title>
      <link>https://www.haukeluebbers.de/blog/2023-11-feedrebels-make-your-own-podcast-feeds/</link>
      <pubDate>Thu, 30 Nov 2023 22:50:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-11-feedrebels-make-your-own-podcast-feeds/</guid>
      <description>&lt;p&gt;Everyone knows this situation:
You are surfing the interwebs, and are coming across some audiofiles.
You would love to listen to in your podcast player of choice.
But there is no RSS feed - the very thing that makes a podcast a podcast. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Everyone knows this situation:
You are surfing the interwebs, and are coming across some audiofiles.
You would love to listen to in your podcast player of choice.
But there is no RSS feed - the very thing that makes a podcast a podcast. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Or, am I the only one?
Because that is how I felt when I was looking for an easy to use online tool to generate one-off, static podcast RSS feeds.
There are lots of commercial podcast hosting providers, Wordpress plugins, and entire open source projects providing everything an aspiring new podcaster needs.
Stuff that we could only dream of, when we were hand-stitching the RSS feed for our Geekasmus podcast back in 2009!</p>
<p><strong>But I don&rsquo;t want to host yet another podcast.</strong> <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>
I just have a couple files, that in my humble opinion should be offered in form of a podcast feed, too.</p>
<h2 id="introducing-rebelfeeds">Introducing: Rebelfeeds</h2>
<p>So, instead of doing the reasonable thing of hand-stitching my one-off RSS feed, or, probably more 2023-style, asking a large language model to do it for me in a short web chat, I built the generator I wanted: <a href="https://rebelfeeds.haukeluebbers.de/">Rebelfeeds</a>.</p>
<p><img alt="Screenshot of the rebelfeeds web application. It boasts a very bare-bones 3-column &ldquo;design&rdquo;." loading="lazy" src="/img/content/2023_11_rebelfeeds.png" title="Hey, I never said I am a designer"></p>
<p>Rebelfeeds is a, currently not very pretty, static, client-side web application, that allows you to generate RSS podcast feeds based on the information you enter in a form.</p>
<p>The first section is about the general metadata of the feed: Title, original authors, maybe the category and a short description.
The middle section is the episode list: You can dynamically add any number of episodes, by linking to their audio-files and entering a title.
The third section is where it is all coming together: It displays your data in a valid XML RSS podcast feed.</p>
<p>What you do with that feed is on you: Rebelfeeds doesn&rsquo;t provide hosting for these files.
So to be able to point your podcatcher to a valid URL that serves your newly created RSS feed, you need to upload it somewhere.
A random pastebin service should do the trick, as long as your podcatcher isn&rsquo;t too picky about the Content-Type of your RSS feed.</p>
<p>The name rebelfeeds comes from the fact that these feeds are not like the other feeds.
They are not necessarily created by the original authors, but by people who just couldn&rsquo;t accept that this content was not accessible as a real podcast.
Rebels, creating the free and open internet that we always wanted.
And because the RSS feeds are simply linking to the original files, no copyright is infringed.</p>
<p>These feeds are not the ideal solution of course:
Many of them will be one-off feeds, created for individuals and never updated.
But there is nothing that prevents anyone from updating an existing feed with new episodes.
Ideally the original authors would create these feeds themselves.
But maybe a rebelfeed as an example can help them with that decision by showing the great possibilities of RSS.</p>
<h3 id="limitations-and-workarounds">Limitations and Workarounds</h3>
<p>Building this application as a static web app comes with some limitations, in the form of cross-origin resource restrictions.
These restrictions are important, because they stop websites from accessing your data on other websites.</p>
<p>Serving permissive CORS (Cross-Origin Resource Sharing) headers is a way for a server to allow specific or any other websites client-side code to access this content.
But for that you need the cooperation of the file hosting server owners, which we don&rsquo;t necessary have in our case.</p>
<p>Luckily the <code>audio</code> HTML element allows playing files hosted on other origins.
However, it doesn&rsquo;t allow the client-side javascript code access to information like the filesize and mimetype of the audio file, for privacy reasons.
Both of which are required for episode-items of podcast feeds.
But: it does allow us to get the <em>duration</em> of the audio file.</p>
<p>So to give a reasonable guess of the mime-type, I look at the file ending (don&rsquo;t do this server-side kids!), and for another guestimate of the file size, I multiply the audio duration by the average bitrate of those files (or by what I think they might be).
The results are&hellip; mixed.
But it&rsquo;s the closest thing I can come up with right now.</p>
<p>Luckily I can also add the actual duration of the episode as an optional attribute to the RSS feed, so that at least the durations should be shown correctly, even if the filesizes are way off.</p>
<h3 id="side-track-side-projects-with-svelte">Side track: Side projects with svelte</h3>
<p>The old side project rule applies: It&rsquo;s not about the destination, it&rsquo;s about the frameworks we learned along the way.</p>
<p>For this side project I chose the svelte frontend framework.
I am not a frontend developer anymore.
I used to be one, but then they changed what frontend development was, and then I wasn&rsquo;t anymore.
More and more levels of abstraction, loads of dependencies, not really my thing.
As a professional, I need to be able to find my way around a React+Redux app, but it doesn&rsquo;t spark joy, at least for me.</p>
<p>But I&rsquo;ve been following <a href="https://svelte.dev/">svelte</a> from afar, mainly because it was different:
No virtual DOM, no separation of concerns, just a bunch of javascript, HTML, and CSS living in the moment.
That always sounded more up my alley.
sveltes concept of having behavior, markup, and style of one component all in one simple file resonated with me ever since I first read about it.</p>
<p>But I never tried it for myself, so a couple days ago I ran <code>npm create svelte@latest rebelfeeds</code> for the first time.</p>
<p>It was surprisingly easy to get started.
Once I figured out that the error messages for HTTP 500 Internal Server Error messages of the vite development server can be found in the browser console (???!) I was a happy camper.
sveltekit mostly gets out of the way, so much so that I wasn&rsquo;t sure if I actually still have a client-side static web app in the end, because it seamlessly serves some server-side rendered content, too.
But by adding a <a href="https://kit.svelte.dev/docs/adapter-static">static adapter</a> and
<code>prerender=true</code> I finally got my static builds.</p>
<p>At times I had to look up how to do pretty basic things in javascript, and I&rsquo;m far from sure that my solutions always are the right way to do things.
Did I split my component in reasonable ways?
Is this how you should handle state across components?
Probably not.
But it works.</p>
<p>I intend to keep working on this project for some more time, to add some features and do at least something design-wise.
Whether or not rebelfeeds deserves its own domain, we will see.
I&rsquo;ll keep you updated.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Yes, &ldquo;spotify-exclusive podcasts&rdquo; are in fact not podcasts, fight me.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>At least right now.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Ode to my old headset</title>
      <link>https://www.haukeluebbers.de/blog/2023-10-goodbye-sennheiser-pc-150/</link>
      <pubDate>Tue, 31 Oct 2023 11:20:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-10-goodbye-sennheiser-pc-150/</guid>
      <description>&lt;p&gt;I knew it would happen eventually.
The bare wires visible in two places of the flimsy cable for years.
The earpads long compressed into solid flat pancakes.
And my friends on Teamspeak reporting a cracking sound every time I un-muted myself using the little switch.&lt;/p&gt;
&lt;p&gt;But when the microphone stopped working altogether, it was time to say goodbye to my &lt;del&gt;first&lt;/del&gt; second ever headset.
Time to say goodbye to my Sennheiser PC150.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I knew it would happen eventually.
The bare wires visible in two places of the flimsy cable for years.
The earpads long compressed into solid flat pancakes.
And my friends on Teamspeak reporting a cracking sound every time I un-muted myself using the little switch.</p>
<p>But when the microphone stopped working altogether, it was time to say goodbye to my <del>first</del> second ever headset.
Time to say goodbye to my Sennheiser PC150.</p>
<p><img alt="My Sennheiser PC150 on my wooden desk, half-broken cables and all" loading="lazy" src="/img/content/2023_10_sennheiser_pc150.jpg"></p>
<p>I got them probably around 2006, when I was 14 years old. I&rsquo;m 31 now.
When I tried this headset model for the first time I was at my friend Lasse&rsquo;s house:
He had just gotten them for his birthday (?), and they blew me away.
Music had never sounded this good to me before, ever.</p>
<p>Previously I had mainly listened to the radio in my parents car, or to totally legally downloaded 32 kbit/s mp3 files (nobody had the time and space for more!), through shitty mp3-player earbuds.
But with these headphones you could feel the bass! Incredible!</p>
<p>Of course they quickly ended up on my wishlist for the next Christmas (or was it my birthday? Who knows).
I specified them as exactly as humanly-possible.
This is because 2006-me still vividly remembered how I had previously wished for a DVD of &ldquo;The Hitchhiker’s Guide to the Galaxy&rdquo;, having <a href="https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy_(film)">the 2005 movie</a> in mind, but in a now hilarious and back then terrible twist ended up with a collectors edition of the <a href="https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy_(TV_series)">1981 BBC TV series</a>, with like, hand-puppets and stuff.
Worst Christmas ever.
Anyway, even though for me the headphones seemed outrageously expensive for computer equipment (<a href="https://www.gamestar.de/artikel/sennheiser-pc-150,1343043.html">apparently between 57 and 70 Euros in 2003 money in Germany</a>), I got them.</p>
<p>And I have used them ever since.
They survived hundreds of hours of me coding PHP social networks with my friends in high school.
They moved with me to Stuttgart and Bristol for my bachelor degree.
The followed me to Copenhagen for my master degree and first non-student job.
And they stayed with me for countless (actually, pretty exactly 2,248) hours of playing CS:GO with my friends and enemies.</p>
<p>When the time had come, I didn&rsquo;t even know the model name anymore &ndash; the one that had been so incredibly important in 2006.
The headset itself did not have anything but the Sennheiser name printed on it, so I actually just spent the first 20 minutes of working on this article scrolling through image results for &ldquo;sennheiser open headset 2006-ish&rdquo;.</p>
<p>Finally I found <a href="http://www.dansdata.com/s140150.htm">this review from 2004</a> (last updated in 2011) by &ldquo;Dan&rsquo;s Data&rdquo;, comparing the Sennheiser PC 140 and 150.
It concludes that &ldquo;As for the rest of the PC150s&rsquo; sound&hellip; it&rsquo;s OK.&rdquo;, which 14 year old me would hard disagree to, as it had clearly the best sound ever heard by human ears.
Computerbase.de has some more pictures and reviews <a href="https://www.computerbase.de/2005-12/test-12-gamer-headsets-im-alltagstest/4/">in German</a> from 2005.
And it turns out that I wasn&rsquo;t even alone in my loyalty to this beautiful product, as in 2021 user &ldquo;WebBeat84&rdquo; asked (<a href="https://www.computerbase.de/forum/threads/gaming-headset-aehnlich-sennheiser-pc-150-offen-on-ear.2061104/#post-26402107">again, in German</a>) the computerbase.de forum which alternatives there are for his trusty open, on-ear, gaming headset.
There are also some long-time fans in the <a href="https://www.amazon.com/Sennheiser-150-Noise-Canceling-Discontinued-Manufacturer/dp/B0000DCRHA/">Amazon.com reviews</a>.</p>
<p>But, alas, I needed a successor.
I wanted to replicate my arguably perfect buying-decision from 2006.
But the issue is that you can often only identify the &ldquo;buy it for life&rdquo; products years after they have been discontinued, and even the company behind them might have changed, too.</p>
<p>To give me the best chance for a repetition of the coup, I went with the pretty expensive beyerdynamics MMX 300.
They are not the same type of headset at all, being over-ear and closed, but they come with easily changeable and very sturdy cables, good sound and microphone quality <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, and no batteries or other potentially short-lived components.
While I could wear the PC150 for hours on end, basically forgetting that I had them on, this is not possible with my new headset.
<a href="https://www.youtube.com/watch?v=mD95BLpEUcE">Yes, my ear is getting hot</a>.
The inline control buttons on the cable are a little high, at least for me, and could be 10 centimeters lower for easier access, but that is a minor thing.
I do like the metal-frame and the more adjustable microphone arm.
Let&rsquo;s see how it hold up in the test of time.
I&rsquo;ll keep you updated.</p>
<p>The Sennheiser PC150 will always have its place in my memory, even if I forget the model name.
For this article I wore them for the last time, and, as usual, forgot about them within minutes. &lt;3</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Keep in mind that I used at least 15 year old headphones before this, so don&rsquo;t come at me, audiophiles!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Fixing Ubuntu not starting after GPU driver change</title>
      <link>https://www.haukeluebbers.de/blog/2023-09-ubuntu-not-starting-after-gpu-driver-update/</link>
      <pubDate>Sat, 30 Sep 2023 11:20:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-09-ubuntu-not-starting-after-gpu-driver-update/</guid>
      <description>&lt;p&gt;Last week I selected a new GPU driver from the &amp;ldquo;Additional Drivers&amp;rdquo; list in Ubuntu 22.04.
Big mistake.
The system seemingly crashed and I was left with a blinking cursor on a black screen.
Here is how I fixed it.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2 id=&#34;the-situation&#34;&gt;The situation&lt;/h2&gt;
&lt;p&gt;After selecting a different GPU driver &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, my system crashed to a black screen with a blinking cursor and eventually I hard-rebooted my system.
GRUB worked, I could decrypt the SSD, but then nothing would happen, just a Ubuntu/Lenovo loading screen.
No user selection and login screen.
&amp;hellip; and 50 minutes to fix it before the next meeting. Great.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Last week I selected a new GPU driver from the &ldquo;Additional Drivers&rdquo; list in Ubuntu 22.04.
Big mistake.
The system seemingly crashed and I was left with a blinking cursor on a black screen.
Here is how I fixed it.</p>
<!-- more -->
<h2 id="the-situation">The situation</h2>
<p>After selecting a different GPU driver <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, my system crashed to a black screen with a blinking cursor and eventually I hard-rebooted my system.
GRUB worked, I could decrypt the SSD, but then nothing would happen, just a Ubuntu/Lenovo loading screen.
No user selection and login screen.
&hellip; and 50 minutes to fix it before the next meeting. Great.</p>
<p><img alt="Screenshot of the &ldquo;Additional Drivers&rdquo; program showing a list of possible proprietary Nvidia drivers" loading="lazy" src="/img/content/2023_09_additional_drivers.jpg"></p>
<h2 id="my-solution">My solution</h2>
<p>GRUB was still working, and I could get into the GRUB menu by pressing the ESC
key repeatedly during the boot process.
Probably because of one ESC key press to many, the GRUB menu was only displayed for a split second, before I was dropped into the GRUB console.
But the command <code>normal</code>, followed by more ESC key presses, brought me back to the GRUB menu. [<a href="https://askubuntu.com/a/1031095">thx AskUbuntu</a>]</p>
<p>In Recovery Mode, the first step after the decryption of the disk is to enable networking, so that we can download and install the additional drivers that Ubuntu actually recommends.
Activating the networking requires the Ubuntu Recovery Mode to write to the disk, which is read-only by default at the start - just say yes to that.
After networking is enabled, select the root console and run the commands
<code>apt update</code> and <code>ubuntu-drivers autoinstall</code>.</p>
<p>That&rsquo;s it. That&rsquo;s what worked for me.
Afterwards I was able to boot into normal Ubuntu again.</p>
<p>And made my meeting.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Because an Electron/Chromium app has issues establishing a GPU channel.
Updating the driver actually eventually fixed that problem.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Entrypoints to the Indieweb</title>
      <link>https://www.haukeluebbers.de/blog/2023-07-entrypoints-to-the-indieweb/</link>
      <pubDate>Mon, 31 Jul 2023 23:35:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-07-entrypoints-to-the-indieweb/</guid>
      <description>&lt;p&gt;The indieweb is all the rage, especially as we saw the large social media
conglomerates, that once replaced it, start to crack.
But what is the indieweb?
And how do you get there?
All this, and more, in this blogpost (on the indieweb I guess).&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2 id=&#34;the-indieweb---a-web-of-good-intentions&#34;&gt;The indieweb - a web of good intentions&lt;/h2&gt;
&lt;p&gt;The indieweb describes the web of personal blogs, homepages about special interests made with love, and handcrafted personal web presences.
You know, the stuff you think about when you think of the internet of the early to mid 2000s.
Questionable use of HTML-styling, actual people behind every page, the only metric of engagement being a visitor counter that proudly presents a different randomly generated number on every page load.
No corporations, no dark patterns, just people living in the moment.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The indieweb is all the rage, especially as we saw the large social media
conglomerates, that once replaced it, start to crack.
But what is the indieweb?
And how do you get there?
All this, and more, in this blogpost (on the indieweb I guess).</p>
<!-- more -->
<h2 id="the-indieweb---a-web-of-good-intentions">The indieweb - a web of good intentions</h2>
<p>The indieweb describes the web of personal blogs, homepages about special interests made with love, and handcrafted personal web presences.
You know, the stuff you think about when you think of the internet of the early to mid 2000s.
Questionable use of HTML-styling, actual people behind every page, the only metric of engagement being a visitor counter that proudly presents a different randomly generated number on every page load.
No corporations, no dark patterns, just people living in the moment.</p>
<p>Well&hellip; that&rsquo;s the idea.
Before I get all nostalgic again (<a href="/blog/2023-06-what-reddit-was-to-me/" title="For that, check our my last blogpost: What Reddit was to me">&gt;.&gt;</a>):
The golden age of the personal internet was not all that golden all the time:
Websites would disappear overnight, even internal links would 404, and on at least 10% of the websites I visited I wasn&rsquo;t sure if the owner was still alive.</p>
<p>I remember that I once thought that the coolest thing about Facebook was that the profiles are looked alike and the information you needed (the relationship status of your highschool classmates of course), was always in the same place.
Finally we had overcome individually designed profile pages and blinking &ldquo;under construction&rdquo; gifs!
But even I was feeling that something had gone the wrong way when Google discontinued their RSS reader product.
Believe it or not I wrote a <a href="https://archive.haukeluebbers.de/2013/03/tschuss-google-reader/" title="Bye Google Reader">blogpost about it</a> back then.
Yesterday, while checking the HTTP server logs, I came across it again, read it, and, while I was ready to be embarrassed for my 21 year-old self, it is surprisingly non-cringe. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Anyway, my view on the beauty of Facebook has changed.
We all make mistakes.<br>
Nowadays I yearn for more personal websites, with their own domains and full control over the design (not that I am particularly expressive design-wise on here).
And <del>many</del> some other people think the same.
With a mixture of nostalgia, discontent and defiance against the major social media platforms, and an unshakable optimism for the small-/indieweb, these people are building the internet that they want to see.</p>
<h2 id="ok-convinced-so-where-is-this-indieweb">Ok, convinced, so, where is this indieweb?</h2>
<p>First &ndash; that&rsquo;s great!</p>
<p>When you are reading these lines, you are actually already on the indieweb.
Look up, it has it&rsquo;s own domain (nowadays even with HTTPS, something that only banking websites had back in the day) and I am a person.
And while I could host anything on here, I just write my little blog using the static blog engine <a href="https://gohugo.io/">hugo</a>.
And by writing these words about the software I use for blogging, I have actually just fulfilled the third requirement for an indie weblog.</p>
<p>But for real, I understand that finding these little gems is hard.
With a busy working day, nobody has the time they had when they were 14 to aimlessly type in random domains and hope that they would resolve.
Even Google results are not getting better with SEO gaming and web-scraped spam websites filling up the first result pages.
And because it prefers well-known domains, small blog have a harder time standing out.</p>
<p><a href="https://search.marginalia.nu/explore/random"><img alt="Random website screenshots presented by marginalia.nu" loading="lazy" src="/img/content/2023_07_indieweb.jpg" title="Random website screenshots presented by marginalia.nu"></a></p>
<p>But we do have the technology:
Specialized search engines are indexing personal websites, like <a href="https://searchmysite.net/">searchmysite.net</a> and <a href="https://search.marginalia.nu/explore/random">marginalia.nu</a>, help surface the internets&rsquo; (good) weirdness.
I use them mainly for my own amusement instead of quests for information, but hey, maybe I should try that more often.</p>
<p>But the website that gets me back into the indieweb the fastest and most consistently, is <a href="https://indieblog.page">indieblog.page</a> &ndash; and it does this in two ways.</p>
<p>The most consistent is indieblogs <a href="https://indieblog.page/dailyfeed">daily RSS feed</a>.
Once per day a randomly chosen recent blogpost from one of the currently 3,442 blogs in their directory is added to this feed.
I see them pop-up in my RSS feed reader, and surprisingly often it is something interesting, fun, or just plain human, which is kind of beautiful.
Really, the fact that a human being with little to no ulterior motive  wrote it can make a blogpost about someones new knitting project or a personal review of the year 2022 surprisingly wholesome.</p>
<p>The second, and a bit more ad-hoc, way, is it&rsquo;s &ldquo;Open Random Blog Post&rdquo; button.
The button is also on the landing page of the website, but I actually added it as a bookmark to the bookmarks toolbar that Firefox shows on an empty new tab.
It&rsquo;s simply a bookmark of <a href="https://indieblog.page/random">https://indieblog.page/random</a>.
Whenever I notice that I am caught in a loop of opening the same 4 news websites within minutes just to notice that there is nothing new happening, I click this button as kind of a emergency exit for the corporate news net.
And bam, I read about <a href="https://kuenzi.dev/toothbrush/">somebody hacking their bluetooth-toothbrush</a> or <a href="https://davidwalsh.name/get-hardware-id">how to get a computers hardware ID</a>.
And those are just my last two button clicks.</p>
<h2 id="how-to-participate">How to participate?</h2>
<p>As you see, the indieweb has an undeniably techie-leaning slant.
That&rsquo;s not particularly surprising, given that there is talk about domain names, webhosting, and RSS syndication (really simple!).</p>
<p>But at <a href="https://indieweb.org/Getting_Started">https://indieweb.org/Getting_Started</a> you can find very to follow steps for every skill level - you don&rsquo;t have to be a web developer and blog about your blogging tech stack to be part of the indieweb!
And if you start your blog because of this post, let me know!
I&rsquo;d be your first RSS subscriber for sure!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Or maybe I just didn&rsquo;t develop at all since then.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>What Reddit was to me</title>
      <link>https://www.haukeluebbers.de/blog/2023-06-what-reddit-was-to-me/</link>
      <pubDate>Thu, 29 Jun 2023 21:56:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-06-what-reddit-was-to-me/</guid>
      <description>&lt;p&gt;The current Reddit Inc. leadership seems to be hell-bent on prettifying the platform for either an IPO or a new owner.
This news has even made it into mainstream media, so I won&amp;rsquo;t go into details of what&amp;rsquo;s happening, but rather give my perspective of what Reddit used to be for me, and what I intent to do now.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The current Reddit Inc. leadership seems to be hell-bent on prettifying the platform for either an IPO or a new owner.
This news has even made it into mainstream media, so I won&rsquo;t go into details of what&rsquo;s happening, but rather give my perspective of what Reddit used to be for me, and what I intent to do now.</p>
<h2 id="many-small-homes">Many small homes</h2>
<p>It&rsquo;s not the first time that Reddit makes (negative) headlines either &ndash; in the last years several terrible, inhumane, and often right-wing subreddits have given the platform a bad name.
Most of them were eventually closed by Reddit, but not before it was dragged kicking and screaming into doing the right thing.</p>
<p>But I still felt at home on Reddit.
Because on the platform there wasn&rsquo;t <em>one</em> community, but a collection of many different smaller communities, each with its own rules, culture, and quirks.
Some of them terrible, sure, but if you found yours (which, thanks to Reddit&rsquo;s subpar search, was not easy), you could have a great time there, while being largely insulated from the bad ones.</p>
<h2 id="the-old-internet">The old internet</h2>
<p>Reddit also felt like part of the &ldquo;old internet&rdquo;. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>
Especially when you were using the original design under old.reddit.com and third-party mobile applications &ndash; little empty space, small font, no rounded corners.</p>
<p>The distinct cultures and (CSS-) styles of the different subreddit would remind me of the many forums &ndash; the ones that probably often got replaced by just those subreddits.</p>
<p>And while I would eventually recognize a handful of users who were very active in my go-to subreddits, I would rarely even read the usernames of posters or commenters.
The content mattered, not the person.
This would also be the case for moderators, who could mark their comments as &ldquo;this comment I wrote with my mod-hat on&rdquo; to indicate their status when it was necessary - otherwise they just be another unmarked username commenting.
No profile pictures (at least for me), for the longest time no following-functionality for individual users, no requirement of attaching an email address to an account, and certainly no real name policy.</p>
<p>This made for interesting discussions, as it didn&rsquo;t matter who you were discussing with.
While of course everyone still wanted to get their point across, nobody tried to amass followers and &ldquo;build their brand&rdquo;, like it often happens on Twitter.</p>
<p>I also never had issues with any &ldquo;power-hungry&rdquo; mods.
Quite the opposite, I would like to give a shout-out to the mods of /r/de for keeping this place sane also during crazier times, like the Syrian civil war and the resulting humanitarian crisis or the Covid-pandemic. <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<h2 id="one-for-everything">One for everything</h2>
<p>On Reddit you could find a community about nearly everything.</p>
<ul>
<li>Creating art through procedural generation? /r/proceduralgeneration/ (they even had monthly challenges in the olden days! I got the &ldquo;Jack-o-Lantern&rdquo; flair for <a href="https://dubbl.github.io/procgen/halloween/index.html#1688069450709">this</a>)</li>
<li>You like to watch dads happy-crying? /r/happycryingdads</li>
<li>Videos of your favorite bands first gig? /r/preformances</li>
<li>Want memes centered around members of the German parliament playing counter-strike? /r/csbundestag</li>
<li>Need more incredibly cheesy Science Fiction book covers in your life? /r/badscificovers</li>
</ul>
<p>One niche community I couldn&rsquo;t find was one about my volunteering hobby: Maritime Search and Rescue.
There was a subreddit for Search and Rescue, but it was largely about searching for lost hikers in mountainous terrain.</p>
<p><img alt="Subscriber growth of /r/maritimeSAR" loading="lazy" src="/img/content/2023_06_maritimeSAR_growth.png" title="Subscriber growth of /r/maritimeSAR"></p>
<p>So I created /r/maritimeSAR in 2017.
After 1 year it had 6 subscribers.
After 2 years it had 50.
In the end, it had 632 &ndash; mostly lurkers.
But even though I was (nearly) the only person posting links to interesting videos and articles about mostly volunteer-based maritime search and rescue organizations, I did it gladly.
I personally celebrated every single upvote.
It wasn&rsquo;t much, but it was honest work, all while the larger platform carried on and usually was out of the way.
But that was about to change.</p>
<p>I didn&rsquo;t give up just like that.
I participated in the &ldquo;subreddit blackout&rdquo; from June 12th to 14th.
But I wasn&rsquo;t hopeful.
We were merely guests on this platform.
The only way to win was to be ready lose your community.
And most redditors weren&rsquo;t ready to do that.</p>
<h2 id="time-to-say-goodbye">Time to say goodbye?</h2>
<p>But at least for my own subreddit, I didn&rsquo;t feel good about posting new things anymore.
I didn&rsquo;t want to contribute to the bottom line of a company that has lost its way for free.
Sure, the writing might have been on the wall for longer, and some might even say that it was silly to build a community on a closed platform from the start.
But I felt for a long time that Reddit &ldquo;was different&rdquo;.
Now it is different in that it follows the burning wreck that is Twitter more eagerly than any of the other closed platforms.
wtf.</p>
<p>I won&rsquo;t download reddits terrible mobile app.
I might still browse through some non-yet-replaced subreddit from time to time using old.Reddit.com.</p>
<p>But I have already started <a href="https://discuss.tchncs.de/c/maritime_sar">a new community about maritime Search and Rescue on a lemmy instance</a>.
It&rsquo;s small, I am the only one posting anything, but I am used to that.</p>
<p>It will be incredibly hard to rebuild all of these big and small communities elsewhere.
But I was able to replace Twitter with Mastodon last year.
Today I am only occasionally linked to Twitter by news articles or blog posts, and all my daily microblogging scrolling and posting happens on Mastodon.</p>
<p>So I hope that <a href="https://join-lemmy.org/">lemmy</a> or <a href="https://kbin.pub/en">kbin</a> can help me miss Reddit less and less.
But I am more sad than I was about Twitter going down the drain.
I spent a lot of time on Reddit, and I learned many interesting and weird things, and generally had a lot of fun.
Let&rsquo;s see what the fediverse can do for me, and what I can do for the fediverse.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>I think I started discovering the internet when I was around 12 years old, so between 2003-04, just to give you some impression of what my timeline of the internet as experienced by me looks like.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>For /r/de users: There is a pretty active <a href="https://feddit.de/c/dach">lemmy community on feddit.de</a>.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Learning from Other Industries Learning from Failure</title>
      <link>https://www.haukeluebbers.de/blog/2023-05-learning-from-other-industries-handling-failure/</link>
      <pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-05-learning-from-other-industries-handling-failure/</guid>
      <description>&lt;p&gt;I like to read incident reports, accident investigations and (technical) post-mortems.
Maybe a bit too much.
But I feel like I&amp;rsquo;m getting a lot out of it, both for my professional work as a software development manager and my volunteer work as a lifeboat helm.
Here&amp;rsquo;s why.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I like to read incident reports, accident investigations and (technical) post-mortems.
Maybe a bit too much.
But I feel like I&rsquo;m getting a lot out of it, both for my professional work as a software development manager and my volunteer work as a lifeboat helm.
Here&rsquo;s why.</p>
<p>Software development is a pretty young profession compared to many other professions, that are equally integral to our everyday life.
It can have a big impact, and even though we (officially?) have moved away from the whole &ldquo;move fast and break things&rdquo; motto, it still very much breaks.
Things, but thankfully mostly just itself.</p>
<p>Other industries are older and more regulated.
That comes with some interesting learnings and side effects, which we can and should learn from.</p>
<h2 id="written-in-blood">Written in blood</h2>
<p>Very tactile and visual industries to learn from are civil engineering, the railroad- and the aviation industry.
If things go wrong here, you usually have a pretty good idea of what could happen even as a layman - be it a collapsing bridge, a derailing train or a rapidly descending aircraft.</p>
<p>Regulations in these areas are written in blood, and I&rsquo;m personally not sure if I could stomach writing code that controls an airliner.
If I had to, it would be at a glacial speed for sure.</p>
<p>Looking at these industries I see one big commonality in their regulations.
Of course you cannot build an aircraft hull with the same requirements that a single-family house wall needs.
But all these industries have independent investigation bodies to examine the root causes of catastrophes - and ideally also of near misses.
And these investigations should result in a public report, with concrete change requirements for the involved organizations and often recommendations for improved regulations.</p>
<h2 id="my-favorite-incident-report-based-media">My favorite &ldquo;incident-report-based&rdquo; media</h2>
<p>I usually don&rsquo;t read the original reports myself.
They are long, detailed and technical in areas that I am not an expert in.
But there are experts out there, who create blog posts, podcasts, or videos about the incidents with the help of those reports.
They make them available to the wider public, including me, and I really appreciate that.</p>
<h3 id="podcast-causality">Podcast: Causality</h3>
<p>The <a href="https://engineered.network/causality/">Causality Podcast by John Chidgey</a> looks at incidents, their root causes, and how they could be prevented, from a wide array of industries.
If you only have time for one of my recommendations, this one is probably the way to go.</p>
<p>John is an electrical, instrumentation and control systems engineer and software developer and feels comfortable covering incidents from chemical plants to aircraft, from offshore oil platforms to rollercoasters &ndash; and that&rsquo;s just what I can remember off the top of my head.
The types of incidents vary widely, but he usually covers the technical measures that could have prevented the event <em>AND</em> maybe most importantly the organizational failures that allowed for or even provoked &ldquo;human errors&rdquo;.
While I was young/studying I often thought I was smart and logical by focusing on the technical aspects, but after working for some time I understood more and more how much &ldquo;soft&rdquo; factors like organizational culture, incentives and structure, play a role in nearly every &ldquo;technical&rdquo; decision, at least in the background.
This podcast is definitely aware of that.</p>
<p>But, despite all organizational factors that might contribute to a wrong engineering decision or a fatal oversight:
In the end, it is the engineer/developer who decided to implement and &ldquo;sign off&rdquo; on it.
And so many episodes end with a plea for engineers to push back on these decisions, also if it might seem bad for business in the short term.
This professional self-respect and acknowledgment  of your responsibility as an engineer is something that we in software development still need to embrace more.</p>
<p>Causality is the podcast I find myself skipping back in most often, sometimes repeatedly, because you really need to concentrate to keep up with the technical information presented via audio.
An example of this would be <a href="https://engineered.network/causality/episode-47-hyatt-regency-kansas-city/">the episode</a> on the <a href="https://en.wikipedia.org/wiki/Hyatt_Regency_walkway_collapse">Hyatt Regency walkway collapse</a> &ndash; even though the crucial image is also in the chapter art.</p>
<p>Episodes that stuck in my mind especially:</p>
<ul>
<li><a href="https://engineered.network/causality/episode-35-san-bruno/">Causality 35: San Bruno</a></li>
<li><a href="https://engineered.network/causality/episode-41-florida-international-university/">Causality 41: Florida International University</a></li>
<li><a href="https://engineered.network/causality/episode-26-bhopal/">Causality 26: Bhopal</a></li>
</ul>
<h3 id="videos-mentour-pilot">Videos: Mentour Pilot</h3>
<p>The <a href="https://www.youtube.com/@MentourPilot/videos">Mentour Pilot YouTube channel</a> covers aviation accidents or near misses.
Presented by commercial airliner pilot Petter Hörnfeldt these videos are based on the often excellent aviation incident investigation reports.
While the actual flights are re-enacted as closely as possible in an airplane simulator, the root causes behind the incident are explained.
As in Causality, the root causes are more often than not a combination of different factors (cp. <a href="https://en.wikipedia.org/wiki/Swiss_cheese_model">&ldquo;Swiss Cheese Model&rdquo;</a>).
Technical decisions by the aeronautical engineers, organizational shortcomings, bad training of ground crew or pilots, or operator fatigue - seldom is it just a single cause, which the excellent investigation reports also reflect by listing tens of recommendations for airplane manufacturers, air traffic controllers, airlines and regulatory bodies.</p>
<p>Mentour pilot looks at these incidents naturally a bit more from the operator&rsquo;s perspective compared to Causality.</p>
<p>I often find myself fascinated not by technical solutions, but by the focus on <a href="https://en.wikipedia.org/wiki/Crew_resource_management">&ldquo;Crew Resource Management&rdquo; (CRM)</a>.
CRM is a set of techniques and procedures, and I think also a state of mind, that tries to protect against &ldquo;human errors&rdquo; taking into account psychological and sociological research.
Concrete examples of good CRM would be to</p>
<ul>
<li>encourage anyone, no matter their standing in a social hierarchy or position, to speak up when they feel uneasy about a situation or think they observed a pilot error</li>
<li>keep conversation topics during the &ldquo;non-sterile&rdquo; phases of the flight light</li>
<li>communicate clearly when executing certain actions or taking over control</li>
<li>good, proactive workload management</li>
</ul>
<p>In my view, CRM shines at the tactical level.
In software development this could be during the incident handling of an outage or even during the investigation of an active security incident.
Working in an IT security company I can definitely see how this can apply to our SOC and our incident response teams.</p>
<p>I also took a lot of things from this for my volunteer work as a lifeboat helm &ndash; especially in bad weather you want all available crew resources focused on the task at hand and want everyone to feel comfortable speaking up immediately when they see something.
At the same time you need to make time-critical decisions and communicate them.</p>
<h3 id="further-shout-outs">Further shout outs</h3>
<p>I also want to give a shout out to one-off talks and some other &ldquo;incident investigation report&rdquo;-based media.</p>
<p>(Not just) for the train enthusiasts there is <a href="https://mx-schroeder.medium.com/">Max S&rsquo; blog</a> based on train accident investigation reports.
With an impressive weekly cadence, he describes train accidents and their root causes in detail.
As he covers accidents happening between 1882 and 2021 you really get to appreciate modern safety standards and technology.</p>
<p><a href="https://www.youtube.com/watch?v=1xQeXOz0Ncs">&ldquo;Who Destroyed Three Mile Island?&rdquo;</a> by Nickolas Means at the &ldquo;The Lead Developer 2018&rdquo; conference in Austin is an interesting talk, covering also how to look at an incident after the fact to really understand it, and in the end &ndash; spoiler alert &ndash; also covers CRM (without naming it).</p>
<p>Another recommendation would be <a href="https://www.youtube.com/@BrickImmortar/videos">Brick Immortar</a>.
I mainly watch them for their maritime incident videos, based on the U.S. NTSB (National Transportation Safety Board) or Coast Guard investigation reports.</p>
<h2 id="closing-thoughts">Closing thoughts</h2>
<p>Keep an open mind.
Of course, you can become a better software developer by reading blogs about programming &ndash; but you shouldn&rsquo;t stop there.
There are opportunities to learn something that you can apply to your professional work everywhere.
And it makes for more interesting conversations.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to get started with OpenStreetMap</title>
      <link>https://www.haukeluebbers.de/blog/2023-04-getting-into-openstreetmap/</link>
      <pubDate>Sun, 30 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-04-getting-into-openstreetmap/</guid>
      <description>&lt;p&gt;In this blog post I&amp;rsquo;ll give a quick introduction to OpenStreetMap, and how I started contributing back in 2021.
I would still consider myself a beginner or at least not a power-contributor, so I hope that this guide will be the easy to follow for everyone.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In this blog post I&rsquo;ll give a quick introduction to OpenStreetMap, and how I started contributing back in 2021.
I would still consider myself a beginner or at least not a power-contributor, so I hope that this guide will be the easy to follow for everyone.</p>
<blockquote>
<p><strong>Note:</strong>
The app I&rsquo;m using here is only available for Android.
But even if you use iOS this is still a nice article imho. :)</p>
</blockquote>
<h2 id="what-is-openstreetmap-again">What is OpenStreetMap again?</h2>
<p>OpenStreetMap is comparable to Wikipedia in its goals and methods.
It aims to be a crowd-sourced map of the entire world, open and free to use.
If you have ever used <a href="https://gspe21-ssl.ls.apple.com/html/attribution.html">Apple Maps</a>, played Microsoft Flight simulator <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, or checked out a point of interest on Facebook, you probably interacted with data from OpenStreetMap.
Data that <a href="https://planet.openstreetmap.org/statistics/data_stats.html">more than 10 million mostly volunteers</a> have contributed over the last 19 years.</p>
<p>The reason why these huge companies can and are relying on OpenStreetMap for at least parts of their world-mapping needs is that the data is licensed under the <a href="https://opendatacommons.org/licenses/odbl/summary/">Open Data Commons Open Database License (ODbL)</a>.
In short, you are free to share and adapt the database, and build products/projects on it, as long as you attribute the contributors, share your adopted version under the same license, and always (also) offer a version of the database without <abbr title="Digital Rights Management">DRM</abbr>, if you are distributing it.</p>
<h2 id="ok-why-should-i-contribute">Ok, why should I contribute?</h2>
<p>Without OpenStreetMap, it would be hard or even impossible to create any small projects that need a relatively detailed map of the world.</p>
<p>You can see this from a capitalist/market perspective:
It allows small companies/cooperatives to create great new products, which could never see the light of day without OpenStreetMap breaking down the very high barrier to entry in this market - the barrier of having access to map data.
This is especially important, as the big tech companies try to hold down, copy, or simply buy any potential future competitors.</p>
<p>From the societal perspective, it also helps small, non-commercial projects, to cross the same barrier.
Projects like <a href="https://opentracksapp.com/">OpenTracks</a>, with which you can track your runs, cycle tours, kayak trips or similar activities, without the invasive metric-slurping analytics packages that many other sport trackers come with.
There are many other applications, <a href="https://wiki.openstreetmap.org/wiki/Applications_of_OpenStreetMap">from special use-case routing apps to research and education</a>.</p>
<p>But what it opened my eyes for, is navigation for people with disabilities.
Traffic lights, bus stops, and pedestrian crossing all have features that ideally help visually impaired people to use and navigate them, like buzzers and tactile pavings.
Of course, I noticed them before here and there, but when mapping in your local area, you really notice where they are, and, maybe more importantly, where they are missing.</p>
<p>And then there is the routing information for wheelchair users or other people who struggle with steps/stairs.
Ramps next to steps, the height of curbs, general wheelchair accessibility of buildings: All of these things can and should be mapped.</p>
<h2 id="still-not-convinced">Still not convinced&hellip;</h2>
<p>Sure, these are all high and lofty reasons to contribute, but what about <em>me</em>?
What do <em>I</em> get out of it?</p>
<p><strong>Fun.</strong>
Contributing to OpenStreetMap is really fun.</p>
<p>You&rsquo;ll get outside, you will see your home with different eyes, and you might even get to know <del>hot singles</del> cool mappers in your area.</p>
<p>You will see your edit count go up, see what kind of tasks you solved and where, and get sparkly awards like &ldquo;Lifesaver&rdquo; 🧑‍🚒, &ldquo;Cyclist&rdquo; 🚴, or &ldquo;Postman&rdquo; 📯.</p>
<p>On top of that, you will get these little moments of pride whenever you&rsquo;ll see the &ldquo;Copyright © OpenStreetMap Contributors&rdquo;.
And you do see it a lot: On the in-flight entertainment screen, your local bus display, or a random website.
<em>I&rsquo;m doing my part!</em> (even if it&rsquo;s just a tiny tiny contribution)</p>
<h2 id="alright-so-how-do-i-do-this">Alright, so how do I do this?</h2>
<p><img alt="3 screenshots: 1. showing a map with pins, 2. a selected pin with the question &ldquo;How wide is this bicycle path here?&rdquo;, 3. an Augmented Reality picture helping to measure the path" loading="lazy" src="/img/content/2023_04_osm_streetcomplete_1.jpg"></p>
<h3 id="1-download-streetcomplete">1. Download StreetComplete</h3>
<p>The easiest way to get started is to download the app <a href="https://streetcomplete.app/">StreetComplete</a> on Android.</p>
<p>You will see the map of your local area with little location pins on it.
Each pin comes with an icon, that symbolizes the type of the &ldquo;quest&rdquo;.
Each quest is basically a question about a real-world <em>something</em> - from small things like post boxes and traffic lights (&ldquo;nodes&rdquo; in the OSM database), to long things like bicycle paths and streets (&ldquo;ways&rdquo;), to large things like entire parking lots and parks (&ldquo;areas&rdquo;).</p>
<p>Each of these things can have different attributes in the OpenStreetMap database.
A pedestrian path can for example have the attribute &ldquo;lit&rdquo;, which can be set to &ldquo;yes&rdquo; or &ldquo;no&rdquo;, to indicate whether there is lighting at night. <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>If this information is missing, you come in:
Clicking on the pin, you will be asked a question - like in this example: &ldquo;Is this way lit&rdquo;?
Then it is as simple as clicking on yes or no, depending on whether you see lanterns, and that&rsquo;s it.</p>
<h3 id="2-create-an-openstreetmaporg-account">2. Create an openstreetmap.org account</h3>
<p>Now, at this moment the information you just added is stored locally on your phone.
To be able to contribute it to OpenStreetMap, you need an account.
In StreetComplete, simply click on the Hamburger menu in the top right (☰), tap on &ldquo;Profile&rdquo; and &ldquo;Login&rdquo;.
You will be redirected to the official openstreetmap.org website, where you can either create a new account or log in with a number of different identity providers.</p>
<p><img alt="Profile of myself on OpenStreetMap as shown by StreetComplete" loading="lazy" src="/img/content/2023_04_osm_streetcomplete_2.jpg"></p>
<blockquote>
<p><strong>Note:</strong> Keep in mind that this account can likely be connected to your actual identity by a motivated actor.
When contributing using StreetComplete you are inevitably publishing your (past) locations, and if you do that over some time, patterns might emerge (your home, your workplace, your school, your travels) that could be used to figure out who you are.</p>
</blockquote>
<p>Afterwards your StreetComplete app will ask for your permission to act in your name, to be able to upload your answers, which you have to grant.</p>
<h3 id="3-thats-it">3. That&rsquo;s it</h3>
<p>Really. That&rsquo;s it. (Article continues below)</p>
<p><img alt="Many different icons representing the different types of quests on StreetComplete. Their size indicates how many quests of each type I solved." loading="lazy" src="/img/content/2023_04_osm_streetcomplete_3.jpg"></p>
<p>Now get out there (#dataMotion), and solve fun quests like:</p>
<blockquote>
<p>How many bikes can be parked here?
What is the width of this street? <em>(Good: Augmented Reality! - Bad: Might get run over.)</em>
Do these steps have a handrail?
Are these opening hours of this restaurant still correct?
What type of building is this?</p>
</blockquote>
<p>It&rsquo;s like Pokémon Go, but for the greater good! (and, of course, for Pokémon Go, which uses OpenStreetMap data, too)</p>
<h2 id="and-beyond">And beyond&hellip;</h2>
<p>StreetComplete was my entry into the world of OpenStreetMap.
I knew about the project for a long time but always thought that it was a complicated beast, guarded by strict administrators that would thoroughly review and probably reject my fumbled contributions.</p>
<p>But with StreetComplete you really can&rsquo;t do anything wrong, as long as you can reliably tell if a picnic table is protected from rain or not.</p>
<p>And over time I started to contribute to OpenStreetMap using other methods, too:
The so-called iD editor, which is the default web editor on openstreetmap.org, has a slightly higher learning curve but still comes with helpful hints and auto-completions.</p>
<p>Let&rsquo;s say you are using StreetComplete, and are looking forward to entering information about some post box, just to find out that it is not mapped yet?!
Inconceivable!
That&rsquo;s when you open iD editor, complete the short tutorial in 5 minutes, just to add the missing <em>something</em>, and suddenly they got you.
I might go over my favorite ways of contributing other than StreetComplete in another blog post.</p>
<p>Have fun out there mapping!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>This also lead to the hilarious case of the 212-story high shed in the flight simulators version of Melbourne; a sight which caused simulation-pilots from all over the world to flock there to circle this point of interest. This had already been fixed in OpenStreetMap, but Microsoft had exported their data ahead of the fix. (<a href="https://www.theverge.com/2020/8/21/21395084/microsoft-flight-simulator-melbourne-obelish-openstreetmap-bing-maps-data-glitch">Source</a>)&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Side note: Being a tall, optimistic dude, I didn&rsquo;t really think about this before, but it could really come in handy to be able to tell your phone &ldquo;Please guide me home, on ways that are lit if possible&rdquo; at night.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
    <item>
      <title>On writing small software</title>
      <link>https://www.haukeluebbers.de/blog/2023-03-writing-small-software/</link>
      <pubDate>Fri, 31 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-03-writing-small-software/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a professional software developer.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;
I get paid to understand customer and business needs and come up with a software solution that fulfills them, while being secure, correct, maintainable, and scalable.&lt;/p&gt;
&lt;p&gt;But I am also a hobby software developer.
And for some time I forgot about the freedoms that the latter gives you.
This is the story of how I rediscovered some of the little joys of &lt;del&gt;writing software&lt;/del&gt; creating something.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m a professional software developer.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>
I get paid to understand customer and business needs and come up with a software solution that fulfills them, while being secure, correct, maintainable, and scalable.</p>
<p>But I am also a hobby software developer.
And for some time I forgot about the freedoms that the latter gives you.
This is the story of how I rediscovered some of the little joys of <del>writing software</del> creating something.</p>
<h2 id="the-professional-programmers-mindset">The professional programmer&rsquo;s mindset</h2>
<p>When writing code in a professional setting, there are things to focus on beyond artistic expression, artisanal satisfaction, and the pride a craftsperson.</p>
<p>While the software specifications have to be met, you also have to think about how your code will fare in the inevitable code review.
Don&rsquo;t get me wrong, I think code review is great, and, together with version control and unit testing, one of the few qualities that make me comfortable calling our profession software engineering instead of software development/programming/coding/scripting.
But while code review does increase the code quality, it also makes you more conservative in your approaches.<br>
Similarly, I think code style enforcement (linting, or full-on code formatters) are great for collaboration on code.
I do enjoy how they can bring order into the mangled code mess that I just wrote with the press of a button, but they are not exactly&hellip; personal or fun.<br>
Finally, there is the bus factor, or, more positively, the lottery factor, or, more probable, the job change factor:
What happens to this code, once the person who wrote it is, for whatever reason, no longer around?
I think about this more than it might be healthy.
<em>&ldquo;What will the the person who has to look at this code once I am gone think of me?&rdquo;</em></p>
<p>All of these things should be on your mind when writing code in a professional setting.
But I had them weighing on my shoulders even when writing code just for fun.
<em>Am I just too professional?</em> /s</p>
<h2 id="the-revelation-or-how-would-i-do-this">The revelation, or, how would I do this?</h2>
<p>At the start of this year, a good colleague of mine sent me a link to a blog post by Tom Forbes titled <a href="https://tomforb.es/i-scanned-every-package-on-pypi-and-found-57-live-aws-keys/">&ldquo;I scanned every package on PyPi and found 57 live AWS keys&rdquo;</a>.
This is obviously <a href="/blog/2020-01-timeline-of-package-dependency-compromises/">relevant to my interest</a>, so I immediately started thinking about how <em>I</em> would design such a system, while my cursor was on its way to click the link.</p>
<p><strong>Think about how you would design such a system and compare!</strong></p>
<p>I came up with a pretty standard solution, at least for me:</p>
<ul>
<li>Python as my language of choice</li>
<li>A cronjob to query the Python Package Index (PyPI) API</li>
<li>Some job queue, maybe redis, to fetch packages, and to analyze them</li>
<li>PostgreSQL to keep track of scanned versions and findings</li>
</ul>
<p>Nothing too crazy, because we don&rsquo;t need to store the actual packages.
Right?</p>
<p>But reading Tom&rsquo;s blog post made me see that solution in another light.
Because his (idealized) solution consists conceptually of these three lines of bash:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt" id="hl-0-1"><a class="lnlinks" href="#hl-0-1">1</a>
</span><span class="lnt" id="hl-0-2"><a class="lnlinks" href="#hl-0-2">2</a>
</span><span class="lnt" id="hl-0-3"><a class="lnlinks" href="#hl-0-3">3</a>
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/orf/pypi-data.git
</span></span><span class="line"><span class="cl">fd -t f --min-depth<span class="o">=</span><span class="m">2</span> . <span class="s1">&#39;release_data/&#39;</span> <span class="p">|</span> parallel --xargs jq <span class="s1">&#39;to_entries[] | .value.urls[].url&#39;</span> &gt; all_urls.txt
</span></span><span class="line"><span class="cl">cat all_urls.txt <span class="p">|</span> parallel -I@ <span class="s2">&#34;wget @ -O downloads/@ &amp;&amp; rg --json -z --multiline </span><span class="nv">$chonky_regex</span><span class="s2"> downloads/@&#34;</span> &gt; matches.txt
</span></span></code></pre></td></tr></table>
</div>
</div><p>The script that ended up running on his laptop for 27 hours is more complex, but I still think it&rsquo;s impressive how simple this is.</p>
<p>This script might not be the most fault resistant and &ldquo;web-scale&rdquo; solution.
But <em>damn</em> is it understandable (and thereby hopefully maintainable).
It fits into &ldquo;human memory&rdquo;, nay, I want to say, &ldquo;human registers&rdquo;, in its entirety.
We don&rsquo;t even need any abstractions that help us conceptualize what is happening, like a &ldquo;job to download a package&rdquo; could be.
It&rsquo;s all there, and relatively readable if you are remotely familiar with the command line.
The hardest part about this is the Regular Expression, which admittedly was outsourced as <code>$chonky_regex</code>.
And while it is indeed a chonky boi, I have seen way, waay worse.</p>
<h2 id="write-it-for-yourself">Write it for yourself</h2>
<p>This article got me thinking.</p>
<blockquote>
<p><em>&ldquo;It&rsquo;s 10 PM - do you know where your IAM credentials are?&rdquo;</em></p>
</blockquote>
<p>No, not about my AWS keys or where they currently hang out, but how I tackle my private hobby code:<br>
I seldom write unit tests for my private code that is not intended for public consumption.
But more often than I care to admit I do structure it with an imaginary code reviewer in mind.
Or a future open-source code contributor who is shaking their head in disgust over my bad abstraction or silly data structure.
BUT YOU CAN KEEP SHAKING YOUR HEAD, YOU DON&rsquo;T EVEN EXIST, STUPID THEORETICAL FUTURE CONTRIBUTOR<a href="https://youtu.be/y8OnoxKotPQ?t=135">!</a></p>
<p>Tackling this won&rsquo;t succeed overnight, but I am working on it.</p>
<p>I want to build smaller, less reusable solutions, that don&rsquo;t have to run forever and be fault tolerant to a fault.
It&rsquo;s all about small, ugly, funny, tricky, interesting code instead!</p>
<p>Writing this last paragraph made me think that my one way out of this professional (not to write enterprise-y) mindset were traditionally code challenges:
Be it code golfing like <a href="https://js1k.com/">js1k</a> or very time-based &ldquo;competitions&rdquo;, like <a href="/blog/2023-01-my-nanogenmo-project-novelopment/">the National Novel Generation Month (NaNoGenMo)</a>.
Maybe that was one of the reasons I enjoyed them so much!</p>
<h2 id="embrace-the-bash">Embrace the bash</h2>
<p>Another takeaway for me was to embrace shell scripting more.
I do know my way around the console, but seldomly venture outside the beaten paths or solved more complex tasks in it:
I do know my <code>cd</code>, <code>grep</code> and <code>|</code>, but even just <code>xargs</code> was always kinda sus.
More often than not I would resort to higher programming languages and mostly copy/pasted and adopted shell scripting solutions I found on the interwebs.
But that way, I never remembered them to eventually coming up with them by myself from scratch.</p>
<p>But shell scripting is definitely a super power that I would like to get better at.
I am fascinated by the <a href="https://en.wikipedia.org/wiki/Unix_philosophy">Unix philosophy</a> of writing small, simple programs that can consume the output of other small, simple programs, to form one mighty solution to a problem.</p>
<p>My most recent little hobby project is the RDAP bot which I already wrote about <a href="/blog/2023-01-my-nanogenmo-project-novelopment/">in my last blog post</a>.
It is currently consisting out of 14 lines of bash and stores its state in plain files on the filesystem.
It doesn&rsquo;t have the full functionality that I want it to have, and 14 lines already feel way too complex compared to the 3 lines you saw above, but it is a start!
I came across <code>jq</code>, <code>diff</code>, and <code>||</code> before of course, but this was the first time I got a deeper understanding of their capabilities and limitations.
The one thing I dislike about shell scripting is that I always feel like I am halfway into a command injection vulnerability.
But I hope that gets better with more experience.</p>
<p>Let&rsquo;s go and write some tiny software.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>On top of that, I am also the director of our software development department, which obviously comes with more responsibilities than writing pretty software, but that is beside the point of this article.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded>
    </item>
    <item>
      <title>The State of RDAP Mastodon Bot</title>
      <link>https://www.haukeluebbers.de/blog/2023-02-the-state-of-rdap-mastodon-bot/</link>
      <pubDate>Mon, 27 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://www.haukeluebbers.de/blog/2023-02-the-state-of-rdap-mastodon-bot/</guid>
      <description>&lt;p&gt;At a recent hackathon event at work I looked into RDAP - the &lt;a href=&#34;https://en.wikipedia.org/wiki/Registration_Data_Access_Protocol&#34;&gt;Registration Data Access Protocol&lt;/a&gt;.
It aims to be the standard to query and present data about the owners and responsible parties of domains, IPs and ASNs (&lt;a href=&#34;https://en.wikipedia.org/wiki/Autonomous_system_(Internet)&#34;&gt;Autonomous System Numbers&lt;/a&gt;).
This data used to be accessible only via WHOIS protocol (so much so that the data is sometimes referred to as &amp;ldquo;WHOIS data&amp;rdquo;), in plaintext via port 43.
That was not great in case you needed to figure out the abuse e-mail of a domain registrar programmatically of course.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>At a recent hackathon event at work I looked into RDAP - the <a href="https://en.wikipedia.org/wiki/Registration_Data_Access_Protocol">Registration Data Access Protocol</a>.
It aims to be the standard to query and present data about the owners and responsible parties of domains, IPs and ASNs (<a href="https://en.wikipedia.org/wiki/Autonomous_system_(Internet)">Autonomous System Numbers</a>).
This data used to be accessible only via WHOIS protocol (so much so that the data is sometimes referred to as &ldquo;WHOIS data&rdquo;), in plaintext via port 43.
That was not great in case you needed to figure out the abuse e-mail of a domain registrar programmatically of course.</p>
<p>RDAP is a nice and simple RESTful API protocol that allows you to query the registrant information from the responsible registries/registrars.
In theory every registry should run a RDAP server that can be queried for information about the objects (e.g. domains) it is responsible for.
In case of e.g. <em>thin registries</em>, which don&rsquo;t necessarily have all the data for their registered domains, as they were registered through sub-registrars, they can also point to the RDAP endpoint of the respective sub-registrars.
The problem was to initially figure out which RDAP server was responsible for which object in the first place.</p>
<p>This was solved by <a href="https://www.rfc-editor.org/rfc/rfc9224.html">RFC 9224</a> &ldquo;Finding the Authoritative Registration Data Access Protocol (RDAP) Service&rdquo;.
In short, the IANA (Internet Assigned Numbers Authority) <a href="https://data.iana.org/rdap/">is hosting a bunch of files</a> that point you to the right RDAP server for e.g. a specific TLD (or an IP, ASN, etc.).</p>
<p>Unfortunately not every registry has declared and is hosting an authoritative RDAP service.
While gTLD registries (like .plumbing or .lamer) are required to provide such a service, the old ccTLD registries (like .de or .uk) are not.
And some of the registries that do have declared it put it behind ridiculously low rate-limits. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>
The Wix.com RDAP endpoint returned a &ldquo;HTTP 429 Too many requests&rdquo; response on literally my first ever request-attempt to them.</p>
<p>But, at the time of writing, <strong>80.49% of all TLDs have an authoritative RDAP service declared</strong>.
I know that, because I built a little Mastodon Bot called <del>@stateofRDAP@botsin.space</del> <a href="https://social.haukeluebbers.de/@stateofrdap">@stateofRDAP@social.haukeluebbers.de</a> which currently monitors the DNS RDAP bootstrap file and posts about changes to it.
So, if you are on Mastodon and are as excited as I am about RDAP, feel free to follow the little fellow.</p>
<p><img alt="Screenshot of a post of @stateofRDAP, saying that &ldquo;As of today 80.48% (1192) of all 1481 Top Level Domains have an authoritative RDAP service declared. These TLDs were added: .kids #RDAP&rdquo;" loading="lazy" src="/img/content/2023_02_state_of_rdap_bot.png"></p>
<p>Currently it just monitors the DNS RDAP boostrap file, and it just handles TLDs being added or removed, but in the future I also want to have it handle changes of RDAP endpoints (e.g. when another registry is taking over responsibility for a TLD) or potentially the other RDAP bootstrap files, depending on the noise levels.</p>
<p>Edit 2026-02-14: The botsin.space instance was <a href="https://muffinlabs.com/posts/2024/12/21/12-21-botsin-space-post-mortem/">gracefully shut down on December 16th 2024 by its owner Cass</a> - after the first annoucement I migrated my RDAP bot to my own gotosocial instance and it is now available under <a href="https://social.haukeluebbers.de/@stateofrdap">https://social.haukeluebbers.de/@stateofrdap</a>. It went pretty well. Currently we are at 83.29% RDAP coverage.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://www.interisle.net/sub/DomainRegistrationData.pdf">&ldquo;Domain Name Registration Data at the Crossroads: The State of Data Protection, Compliance, and Contactability at ICANN&rdquo; (PDF)</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
