<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
    <title>lehnert.dev Blog</title>
    <link>https://lehnert.dev</link>
    <description>Personal Blog of Ludwig Lehnert</description>
    <language>en-us</language>
    <lastBuildDate>Fri, 17 Jul 2026 19:28:02 +0000</lastBuildDate>

        <item>
        <title>50+1 und die Werkself des VW-Konzerns</title>
        <link>https://lehnert.dev/blog/two/</link>
        <guid>https://lehnert.dev/blog/two/</guid>
        <pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate>
        <content:encoded><![CDATA[
            <p>
    Wolfsburgs Abstieg fühlt sich für viele wie ein Sieg der Gerechtigkeit an. Aber wer glaubt, damit sei für 50+1 viel gewonnen,
    macht es sich etwas zu leicht. Denn das eigentliche Problem ist nicht nur, wem ein Club gehört, sondern wer ihn de-facto kontrolliert,
    und ob man den Fans realen Zugang zu Mitbestimmung gewährt.
</p>

<p>
    Genau deshalb ist die Häme so aufschlussreich: Sie richtet sich nicht nur gegen einen sportlich gescheiterten Verein, sondern
    gegen das, wofür Wolfsburg im deutschen Fußball steht: Kommerz und das Gegenteil von sportlich verdientem Erfolg. Deshalb sei Wolfsburg
    in den Augen vieler zu Recht abgestiegen [<a class="bib-ref" href="#bib-1">1</a>, <a class="bib-ref" href="#bib-2">2</a>, <a class="bib-ref" href="#bib-3">3</a>, <a class="bib-ref" href="#bib-4">4</a>]. Besonders eindrücklich lässt sich diese Missgunst aber in Kommentaren unter
    Instagram-Beiträgen erleben [<a class="bib-ref" href="#bib-5">5</a>]:
</p>

<blockquote>
    FUSSBALL HAT GEWONNEN<br>
    [3392 likes]
</blockquote>

<blockquote>
    Junge was ein geiler Saisonabschluss, Wolfsburg endlich runter<br>
    [1427 likes]
</blockquote>

<blockquote>
    Nie mehr 1. Liga, nie mehr, nie meeeehr! Auf nimmer wiedersehen Wolfsburg.<br>
    [425 likes]
</blockquote>

<p>
    VW will sein Tochterunternehmen [<a class="bib-ref" href="#bib-7">7</a>] jetzt mit Abermillionen aus der „Krise“ ziehen [<a class="bib-ref" href="#bib-6">6</a>].
    Und ein konsequentes Durchsetzen von 50+1 könnte daran einfach überhaupt nichts ändern.

    Ein Problem mit 50+1 ist eben, dass es keine unternehmerischen Geldflüsse hinein in die Welt der Vereine
    untersagt. Und damit nicht genug. 50+1 schafft es nicht einmal zu verhindern, dass Investoren mitbestimmungsfeindliche
    Strukturen etablieren und einen Verein somit de-facto übernehmen. Dass dem auch wirklich so ist, lässt sich
    erstaunlich anschaulich am Beispiel von RB „Red Bull“ Leipzig in Erfahrung bringen [<a class="bib-ref" href="#bib-8">8</a>]:
</p>

<blockquote>
    Es gibt nur neun stimmberechtigte Mitglieder, im Vorstand sitzen nur Red Bull Mitarbeiter, keiner der Herren lebt in Leipzig.
</blockquote>

<p>
    Dieser Bericht ist zwar von 2012 und heute mehr als zwölf Jahre alt, trotzdem hat sich bei Red Bull Leipzig wenig getan. Erst
    im vergangenen Jahr kritisierte das Bundeskartellamt die immer noch in sehr ähnlicher Form vorhandenen Vereinsstrukturen [<a class="bib-ref" href="#bib-9">9</a>].
</p>
<p>
    Wirklich verbessert hat sich das nur quantitativ, nicht etwa strukturell. Red Bull Leipzig hatte zuletzt nicht mehr nur neun,
    sondern laut Bericht zur Mitgliederversammlung 2026 knapp 1.200 Mitglieder, nur 22 davon mit Stimmberechtigung [<a class="bib-ref" href="#bib-10">10</a>]. Die Namen
    dieser 22 werden scheinbar absichtlich nicht bekanntgegeben.
</p>
<p>
    Noch verhängnisvoller ist allerdings die Auswahl der Mitglieder, die eine Stimmberechtigung erhalten sollen [<a class="bib-ref" href="#bib-11">11</a>]:
</p>

<blockquote>
    Es ist bei Rasenballsport von Beginn an Vereinsphilosophie, dass nur ausgewählte, für den Klub oder den Red-Bull-Konzern tätige
    und nützliche Personen abstimmungsberechtigte Mitglieder werden können.
</blockquote>

<p>
    Problematisch ist hier nicht etwa, dass Red Bull derart vorgeht, sondern vielmehr dass die DFL über Jahre zugelassen hat, dass
    50+1 formal erfüllt, aber seinem demokratischen Sinn nach ausgehöhlt wird. Dabei scheint das Interesse der Fans dasjenige zu sein,
    das der DFL am Wenigsten am Herzen liegt.
</p>

<p>
    Wikipedia bescheibt 50+1 wiefolgt [<a class="bib-ref" href="#bib-13">13</a>]:
</p>

<blockquote>
    Die 50+1-Regel wurde vom DFB am 24. Oktober 1998 eingeführt. […] Damit sollte für Lizenzvereine ein Rahmen geschaffen werden,
    ihre Profifußball-Mannschaften in Kapitalgesellschaften umwandeln zu können und gleichzeitig die Macht von Geldgebern zu begrenzen.
    […] eine Kapitalgesellschaft [kann] nur eine Lizenz erhalten […], wenn der „Mutterverein“ mindestens „50 Prozent zuzüglich (...)
    eines weiteren Stimmanteils“ innehat. […] Erlaubt ist hingegen, dass sich die Mehrheit des Kapitals im Eigentum privater Investoren
    befindet.
</blockquote>

<p>
    50+1 regelt also lediglich die formale Stimmrechtskontrolle, nicht aber die de-facto Kontrolle eines Clubs. Ja, Besitzverhältnisse
    bei in solcher Stärke kulturell bedeutenden Entitäten gehören reguliert und überwacht. Dass die Fairness in der Kaderbildung
    von derartigen Regulierungen aber eigentlich kaum bis gar nicht beeinflusst wird, hört man recht selten. Stattdessen
    wird fast ausschließlich und bis zum Umfallen über 50+1 diskutiert, ohne dass sich Gedanken darüber gemacht werden, ob damit
    überhaupt das wirklich zugrundeliegende Problem behandelt wird.
</p>

<p>
    Geld schießt keine Tore. Aber Geld kauft fast alles, was die Wahrscheinlichkeit erhöht, dass irgendwann jemand Tore schießt:
    Kaderbreite, Scouting, Trainerstäbe, Akademien, Datenabteilungen, Geduld und Fehlerkorrektur. Genau deshalb reicht es nicht,
    nur Besitzverhältnisse zu diskutieren. Die Frage ist, wer im Fußball Macht hat, und ob für die Clubs und die DFL ihre Fans
    mehr sind als nur die zahlende Kulisse.
</p>

<h2>Quellen</h2>
<table class="bibliography">
    <tbody>
            <tr id="bib-1"><td><a href="#bib-1">1</a></td><td><a href="https://web.de/magazine/sport/fussball/bundesliga/abstieg-bundesliga-gut-42314092" target="_blank" rel="noopener noreferrer">Ein Abstieg, der der Bundesliga gut tut</a><br><span class="bib-author">Julian Münz</span><br><span class="bib-timestamp">27.05.2026, 14:32</span></td></tr>
            <tr id="bib-2"><td><a href="#bib-2">2</a></td><td><a href="https://www.spiegel.de/sport/fussball/abstieg-des-vfl-wolfsburg-der-club-der-so-viel-falsch-gemacht-hat-ein-kommentar-a-89fb6d83-f424-4bbd-8621-167773246cc3" target="_blank" rel="noopener noreferrer">Geld schießt auch mal Eigentore</a><br><span class="bib-author">Peter Ahrens</span><br><span class="bib-timestamp">26.05.2026, 12:41</span></td></tr>
            <tr id="bib-3"><td><a href="#bib-3">3</a></td><td><a href="https://taz.de/Abstieg-des-VfL-Wolfsburg-Die-Illusion-von-Gerechtigkeit-aufrecht-erhalten/!6181987/" target="_blank" rel="noopener noreferrer">Abstieg des VfL Wolfsburg: Die Illusion von Gerechtigkeit aufrecht erhalten</a><br><span class="bib-author">Gunnar Hinck</span><br><span class="bib-timestamp">26.05.2026, 17:42</span></td></tr>
            <tr id="bib-4"><td><a href="#bib-4">4</a></td><td><a href="https://www.tagesspiegel.de/sport/erster-abstieg-des-vfl-wolfsburg-auch-die-vw-millionen-kann-das-totalversagen-im-management-nicht-kaschieren-15638825.html" target="_blank" rel="noopener noreferrer">Erster Abstieg des VfL Wolfsburg: Auch die VW-Millionen können das Totalversagen im Management nicht kaschieren</a><br><span class="bib-author">Benedikt Paetzholdt</span><br><span class="bib-timestamp">26.05.2026, 11:01</span></td></tr>
            <tr id="bib-5"><td><a href="#bib-5">5</a></td><td><a href="https://www.instagram.com/p/DYxq38NDV34/" target="_blank" rel="noopener noreferrer">EILMELDUNG: Paderborn feiert Aufstieg, Wolfsburg steigt erstmals aus der Bundesliga ab</a><br><span class="bib-author">kicker via Instagram</span><br><span class="bib-timestamp">25.05.2026</span></td></tr>
            <tr id="bib-6"><td><a href="#bib-6">6</a></td><td><a href="https://www.sueddeutsche.de/sport/wolfsburg-abstieg-kader-trainer-hecking-vertraege-vw-bundesliga-li.3489180" target="_blank" rel="noopener noreferrer">Bundesliga: Wie es beim VfL Wolfsburg nach dem Abstieg weitergeht - mit weiteren Millionen?</a><br><span class="bib-author">Ulrich Hartmann, Thomas Hürner</span><br><span class="bib-timestamp">26.05.2026, 14:19</span></td></tr>
            <tr id="bib-7"><td><a href="#bib-7">7</a></td><td><a href="https://www.northdata.de/VfL%20Wolfsburg-Fu%C3%9Fball%20GmbH,%20Wolfsburg/Amtsgericht%20Braunschweig%20HRB%20100486" target="_blank" rel="noopener noreferrer">VfL Wolfsburg-Fußball GmbH, Wolfsburg</a></td></tr>
            <tr id="bib-8"><td><a href="#bib-8">8</a></td><td><a href="https://www.spiegel.de/sport/fussball/red-bull-leipzig-gegen-den-geist-der-50-1-regel-a-824548.html" target="_blank" rel="noopener noreferrer">RB Leipzig: Gegen den Geist der 50+1-Regel</a><br><span class="bib-author">Christoph Biermann</span><br><span class="bib-timestamp">06.04.2012, 12:14</span></td></tr>
            <tr id="bib-9"><td><a href="#bib-9">9</a></td><td><a href="https://www.bundeskartellamt.de/SharedDocs/Meldung/DE/Pressemitteilungen/2025/06_16_2025_50plus1.html" target="_blank" rel="noopener noreferrer">Bundeskartellamt sieht Nachbesserungsbedarf bei 50+1</a><br><span class="bib-timestamp">16.06.2025</span></td></tr>
            <tr id="bib-10"><td><a href="#bib-10">10</a></td><td><a href="https://rblive.de/news/mitgliederversammlung-oliver-mintzlaff-bei-rb-leipzig-als-aufsichtsratschef-wiedergewaehlt-4212543" target="_blank" rel="noopener noreferrer">Mitgliederversammlung: Oliver Mintzlaff bei RB Leipzig als Aufsichtsratschef wiedergewählt</a><br><span class="bib-timestamp">09.03.2026, 10:34</span></td></tr>
            <tr id="bib-11"><td><a href="#bib-11">11</a></td><td><a href="https://rblive.de/news/mitgliederversammlung-so-viele-mitglieder-hat-rb-leipzig-aktuell-3805701" target="_blank" rel="noopener noreferrer">Elfte Mitgliederversammlung: So viele Mitglieder hat RB Leipzig aktuell</a><br><span class="bib-author">Ullrich Kroemer</span><br><span class="bib-timestamp">13.03.2024, 13:58</span></td></tr>
            <tr id="bib-12"><td><a href="#bib-12">12</a></td><td><a href="https://www.kicker.de/501-leverkusen-und-wolfsburg-behalten-sich-rechtliche-moeglichkeiten-vor-1126249/artikel" target="_blank" rel="noopener noreferrer">50+1: Leverkusen und Wolfsburg behalten sich &quot;rechtliche Möglichkeiten vor&quot;</a><br><span class="bib-author">Michael Ebert</span><br><span class="bib-timestamp">17.06.2025, 15:55</span></td></tr>
            <tr id="bib-13"><td><a href="#bib-13">13</a></td><td><a href="https://de.wikipedia.org/wiki/50%2B1-Regel" target="_blank" rel="noopener noreferrer">50+1-Regel</a><br><span class="bib-author">Wikipedia</span></td></tr>
    </tbody>
</table>
        ]]></content:encoded>
    </item>
        <item>
        <title>Thoughts about edge computation</title>
        <link>https://lehnert.dev/blog/one/</link>
        <guid>https://lehnert.dev/blog/one/</guid>
        <pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate>
        <content:encoded><![CDATA[
            <h1>Thoughts about edge computation</h1>
<h2>April 17th, 2025</h2>

<p>
    I will start this blog post by defining what "computing on the edge"
    refers to. Wikipedia states that
</p>

<blockquote>
    [...] [edge computing] refers to any design that pushes computation
    physically closer to a user, so as to reduce latency [...]
    (<a href="https://en.wikipedia.org/wiki/Edge_computing">ref</a>)
</blockquote>

<p>
    However, as I'd like to focus on web apps, I will extend the definition
    by the understanding of major cloud providers (CP):
</p>

<blockquote>
    Edge computing is typically accomplished by serving requests via scalable,
    containerized, load-balanced systems.
</blockquote>

<p>
    Running your app on the edge typically requires some sort of containerization.
    When a user sends a request to your service, major cloud providers spin
    up the container, wait for the HTTP service (inside the container) to be
    available and then forward the request to the (now running) container.
    Here's a (simplified) graphic: <i>(not included in transcript)</i>
</p>

<p>
    The startup time for more complex HTTP services typically ranges from a few
    hundred milliseconds to a few hundred seconds, depending on the tech-stack
    used to build the service. Most (all) cloud providers know about this and
    thus mark the container with a
    <a href="https://en.wikipedia.org/wiki/Time_to_live">TTL</a>
    that is renewed on every subsequent request. Because of this, the startup
    latency is significantly worse for apps with few
    <a href="https://en.wikipedia.org/wiki/Active_users">MAU</a>s
    and for users that reside in regions with few MAUs, as the TTL will expire
    more often. As a customer of any CP, you can typically request to always
    have at least one running container per region. However, this will radically
    increase your hosting expenses, especially for apps with few MAUs, as CPs
    usually bill their customers per computing time.
</p>

<p>
    Because the cloud is overpriced, devs should always make sure to confirm that
    anything that runs in the cloud really needs to stay in the cloud. To augment
    the cost efficiency of the cloud, CPs usually offer their customers two
    different billing models:
</p>

<ol>
    <li>
        <b>Pay-per-Request/Request-based-billing (PpR)</b><br/>
        Customer pays a fixed amount per request <u>plus</u> a fixed amount per
        vCPU-second <u>plus</u> a fixed amount per GiB-second.
    </li>
    <li>
        <b>Pay-per-Instance/Instance-based-billing (PpI)</b><br/>
        Customer pays a fixed amount per vCPU-second <u>plus</u> a fixed amount
        per GiB-second. The fixed amounts are usually lower compared to PpR.
    </li>
</ol>


<p>
    You've probably already looked at
    <a href="/blog/one/#b-d5I21c9U7J">Example I</a>.
    This will be our scenario for showcasing the cost of the cloud. I am using the
    <a href="https://cloud.google.com/products/calculator">GCP Expense Calculator</a>
    for the calculation of costs.
</p>

<p>Assumptions:</p>
<ul>
    <li>2k requests per user per month</li>
    <li>1 vCPU</li>
    <li>300ms computing time per request</li>
    <li>1.5 GiB memory required</li>
    <li>1 container can handle up to 100 concurrent requests</li>
    <li>
        us-central1 (Iowa, <a href="https://cloud.google.com/run/pricing#pricing_for_regions_in_tier_1">Tier 1</a>)<br/>
        southamerica-east1 (São Paulo, <a href="https://cloud.google.com/run/pricing#pricing_for_regions_in_tier_2">Tier 2</a>)
    </li>
    <li>PpI 1 instance per region</li>
</ul>

<table>
    <tbody>
        <tr>
            <th>Setup</th>
            <th>Cost/month</th>
        </tr>
        <tr>
            <td>PpR no min-instances</td>
            <td>$ 13.81</td>
        </tr>
        <tr>
            <td>PpR 1 min-instance</td>
            <td>$ 52.56</td>
        </tr>
        <tr>
            <td>PpI 18h/day</td>
            <td>$ 81.00</td>
        </tr>
        <tr>
            <td>PpI 24h/day</td>
            <td>$ 121.41</td>
        </tr>
    </tbody>
</table>

<p>
    Putting the GCP and easy scalability aside, two
    <a href="https://en.wikipedia.org/wiki/Virtual_private_server">VPS</a>s
    on
    <a href="https://www.hetzner.com/cloud/">Hetzner Cloud</a>
    with 2 vCPUs and 4 GiB memory each, running 24h/day will cost $ 9.18/month.
    That will provide you with >2x better specs compared to PpI 24h/day while
    being >13x cheaper. Ironically, avoiding CPs like the GCP instantly gets
    you a >10x cost efficiency improvement.
</p>

<p>Larry Page, co-founder of Google:</p>

<blockquote>
    It's often easier to make something 10 times better than it is to make it
    10% better.
</blockquote>

<p>
    Thus, when running on the edge is a requirement, devs should strongly
    consider choosing VPS providers over major CPs, as the cloud is significantly
    overpriced and the initial manual effort can be easily paid off long term.
    Sadly, I feel like many devs have forgotten about what "running on the edge"
    really means. You absolutely do not have to pay Google, amazon or Microsoft
    ridiculous amounts of money. For most use cases, a few VPSs for every region
    will be enough.
</p>

<p>
    Up until here, we have mainly focused on the costs and talked a bit about
    latency. But now, we will get to the real deal when it comes to edge computing:
    data(-bases)
</p>

<p>
    To demonstrate why running on the edge is pointless when using a monolithic/single
    central database, let's take a look at
    <a href="/blog/one/#b-fLRN0SS32U">Example II</a>.
    Alice (A) resides in the US while Bob (B) resides in Russia. A talks to the NA
    Service (N-S) while B talks to the Asia Service (A-S). Both the A-S and the N-S
    need to access the central database that is being hosted in Germany. In order to
    talk to their services, A and B authenticate themselves using a
    <a href="https://en.wikipedia.org/wiki/JSON_Web_Token">JWT</a>.
    Because the access shall be revokable at any time, N-S and A-S need to query the
    DB to validate the given credentials. Now assume that our service is a messaging
    service and A wants to send B a message. We will observe 2 actions:
</p>

<ol>
    <li id="1">
        A sending the message<br/>
        <i>(sequence diagram not included in transcript)</i>
    </li>
    <li id="2">
        B pulling new messages<br/>
        <i>(sequence diagram not included in transcript)</i>
    </li>
</ol>

<p>Now let's make some assumptions:</p>

<ul>
    <li>database delay $d_{DB} = 100$ ms</li>
    <li>service delay $d_s = 10$ ms</li>
    <li>
        processing delay $d_p = 0$ ms<br/>
        "processing is free"
    </li>
</ul>

<p>
    With these assumptions made, it's obvious to see that
    <a href="https://en.wikipedia.org/wiki/Round-trip_delay">RTT</a>(<a href="#1">1</a>)
    = RTT(<a href="#2">2</a>), where
</p>

<p>RTT(<a href="#1">1</a>) $= 2 d_s + 4 d_{DB} = 420$ ms</p>

<p>Thus, sending as well as pulling messages takes 420 ms in this scenario.</p>

<p>
    <a href="/blog/one/#b-yR35Qi4Msf">This</a>
    example is a modified version of
    <a href="/blog/one/#b-fLRN0SS32U">Example II</a>:
    We still have A and B in their locations but only provide a single Main Service (M-S)
    this time. A still wants to send B a message and we still observe the actions
    <a href="#1">1</a> &amp; <a href="#2">2</a> (with N-S and A-S replaced by M-S).
    However, since the scenery has changed, we need a new set of assumptions:
</p>

<ul>
    <li>database delay $d_{DB} = 10$ ms</li>
    <li>service delay $d_s = 100$ ms</li>
    <li>processing delay $d_p = 10$ ms (unchanged)</li>
</ul>

<p>Obviously, RTT(<a href="#1">1</a>) = RTT(<a href="#2">2</a>) still holds, but</p>

<p>RTT(<a href="#1">1</a>) $= 2 d_s + 4 d_{DB} = 240$ ms</p>

<p>
    this time, which is almost 2x faster compared to
    <a href="/blog/one/#b-fLRN0SS32U">Example II</a>.
    As one can clearly see, when using a single central database, the use of edge
    computing significantly increases the latency for end users. Thus, edge computing
    should not be employed in such scenarios.
</p>

<p><a href="/blog/one/#b-qxKx5OdrIT">Example IV</a></p>

<p>
    But what if we want to have both low-latency database access and low-latency services?
    Then we need to have the same database in different regions at the same time. The key
    concept we need to accomplish this, is: replication. We need to replicate our database.
</p>

<p>
    Sadly, this easier said than done. Most data models are difficult to replicate. Take
    <a href="https://en.wikipedia.org/wiki/Relational_database">relational</a>
    databases for example, you will face some real challenges:
</p>

<ul>
    <li><a href="https://en.wikipedia.org/wiki/ACID">ACID</a>-Compliance</li>
    <li>database migrations/schema changes</li>
    <li>conflict resolution</li>
</ul>

<p>
    You will have to give up some guarantees if you want to improve latency. E.g. if you
    wouldn't give up ACID-compliance, you would have to lock relations simultaneously for
    all regions, which then would worsen the latency far beyond
    <a href="/blog/one/#b-fLRN0SS32U">Example II</a>.
</p>

<p>
    This is why most apps that (successfully) run on the edge employ
    <a href="https://en.wikipedia.org/wiki/NoSQL">NoSQL</a>
    databases, as those are much easier to replicate.
    <a href="https://en.wikipedia.org/wiki/Graph_database">Graph</a>
    databases on the other hand, despite belonging to the NoSQL family, are an exception and
    hard to replicate.
</p>

<p>To round things up, I'd like to share some of the best use cases for the edge:</p>

<ul>
    <li>
        <a href="https://en.wikipedia.org/wiki/Content_delivery_network">Content Delivery Networks</a>
        (CDNs)
    </li>

    <li>
        <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack#Distributed_DoS">DDoS</a>
        Protection
    </li>

    <li>
        Global
        <a href="https://en.wikipedia.org/wiki/Load_balancing_(computing)">Load Balancing</a>
    </li>

    <li><a href="https://en.wikipedia.org/wiki/TLS_termination_proxy">TLS Termination</a></li>
</ul>

<p>If you came this far, I hope you enjoyed the read :)</p>        ]]></content:encoded>
    </item>
        <item>
        <title>Test: First Blog Entry</title>
        <link>https://lehnert.dev/blog/zero/</link>
        <guid>https://lehnert.dev/blog/zero/</guid>
        <pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate>
        <content:encoded><![CDATA[
            <h1>Test: First Blog Entry</h1>
<h2>April 15th, 2025</h2>

<p><u>Hello</u> to whoever is reading this!</p>

<p>This blog entry is mainly for testing purposes.</p>

<p>Here's a <a href="https://google.com/">link</a> to Google, try clicking on it!</p>

<p>
    If you haven't noticed so already, this blog is heavily inspired by
    <a href="https://handwritten.blog/">handwritten.blog</a>.
    I've discovered Daniel's blog last week and almost instantly thought about how I
    could create my own handwritten blog. I don't know if Daniel will ever read this,
    but if you do, please keep up the work, I am a fan!
</p>

<p>
    And just like Daniel, I will only accept comments that have been written by hand
    and mailed to <a href="blog@lehnert.dev">blog@lehnert.dev</a>.
</p>

<p>
    But unlike handwritten.blog, this blog is brought to you by Simple Vector Graphics
    (<a href="https://en.wikipedia.org/wiki/SVG">SVG</a>s)
    instead of Portable Network Graphics
    (<a href="https://en.wikipedia.org/wiki/PNG">PNG</a>s).
    This comes at the disadvantage of bigger file sizes (currently, this blog entry
    weighs in at 25 MB without optimizations and still 1.8 MB when optimized using
    <a href="https://inkscape.org/">Inkscape</a> on default settings). However, I am
    convinced (and optimistic) to further reduce the size of handwritten SVGs in the
    future.
</p>        ]]></content:encoded>
    </item>
    </channel>
</rss>
