<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>Weblog von Simon Samtleben</title><link>https://samtleben.me/</link><description>Artikel zu Webentwicklung, Serveradministration, Fotografie, Linux und weiteren Themen.</description><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><item><title>Mit Quäldich in der Provence 2025</title><link>https://samtleben.me/blog/quaeldich-provence-2025</link><guid>https://samtleben.me/blog/quaeldich-provence-2025</guid><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><description><![CDATA[<p>Im September 2025 war ich auf meiner ersten organisierten Radreise. Mit quäldich.de ging es in die <a href="https://rennradreisen.quaeldich.de/klassiker/rennradherbst-provence/">Provence</a>. Super organisiert, tolle Unterkunft, super Essen - eine absolute Empfehlung.</p>
<p>Auch die Rennrad Routen waren super geplant und zum Großteil komplett ohne Autoverkehr. Es war ein wirklich gelungener Urlaub 🥰</p>
<p>Hier ein paar der schönsten Bilder:</p>
<div class="image-gallery">
        <a href="/media/fotos/provence_2025/provence_01.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_01.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_01.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_02.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_02.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_02.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_03.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_03.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_03.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_04.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_04.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_04.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_05.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_05.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_05.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_06.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_06.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_06.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_07.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_07.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_07.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_08.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_08.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_08.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_09.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_09.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_09.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_10.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_10.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_10.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_11.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_11.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_11.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_12.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_12.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_12.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_13.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_13.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_13.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_14.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_14.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_14.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_15.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_15.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_15.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_16.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_16.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_16.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_17.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_17.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_17.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_18.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_18.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_18.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_19.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_19.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_19.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_20.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_20.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_20.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/provence_2025/provence_21.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/provence_2025/provence_21.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/provence_2025/provence_21.jpg" />
        </picture>
    </a>
    </div>]]></description></item><item><title>Blog Software Update</title><link>https://samtleben.me/blog/blog-software-update-2025-02</link><guid>https://samtleben.me/blog/blog-software-update-2025-02</guid><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><description><![CDATA[<p>Seit 2019 ist die Software, die diese Webseite erzeugt, nahezu unverändert. Hier und da gab es mal kleinere Anpassungen, aber mehr ist nicht passiert.</p>
<p>In letzter Zeit, hat es mich aber dann mal wieder in den Fingern gejuckt und ich habe ein bisschen was angepasst. Im wesentlichen sind das zwei Dinge:</p>
<ol>
<li>Die komplette Seite wird nun statisch generiert.</li>
<li>Es gibt einen neuen Bereich &quot;<a href="/stream">Stream</a>&quot;.</li>
</ol>
<p>Die Inhalte des Blogs pflege ich in Markdown Dateien. Für jeden Artikel lege ich einfach eine neue Markdown-Datei an und fülle sie mit Inhalt. Bisher wurde draus dann dynamisch, bei jeder Anfrage, das entsprechende HTML erzeugt und an den Besucher ausgeliefert. Nun ist das &quot;rendern&quot; von Markdown nicht besonders rechenaufwändig und ich hätte es auch einfach so lassen können, aber mir ist aufgefallen, dass die Seite eigentlich keine dynamischen Elemente im eigentlichen Sinne hat, und ich die entsprechenden HTML Inhalte auch schon im Voraus generieren kann. Der Webserver muss dann nur noch die entsprechende HTML Datei ausliefern und fertig. PHP (damit ist die Software gebaut) wird nun nur noch benötigt um die HTML Dateien zu generieren. Die fertigen Inhalte werden direkt vom Nginx ausgeliefert.</p>
<p>Netter Nebeneffekt: Die Response-Time der Seite ist nochmal um ein klein wenig schneller geworden.</p>
<p>Die <strong>zweite Anpassung</strong> ist inhaltlicher Natur. Es gibt nun einen neuen Bereich: <a href="/stream">Stream</a></p>
<p>Hier möchte ich unsortiert, unbürokratisch und chaotisch alles rein packen, was keinen eigenen Blog-Artikel verdient. In erster Linie werden das vermutlich einzelne Fotos, hin und wieder aber auch mal ein kurzer Text sein. Im Gegensatz zum Blog, gibt es hier keine &quot;Detail-Seite&quot; - alles was es zu sehen und zu lesen gibt, ist direkt auf der Stream Seite zu finden. Ein Art Instagram Ersatz quasi. Das ist jedenfalls der Plan. </p>
<p>Ob das tatsächlich so klappt, und ob ich mich dazu motivieren kann tatsächlich regelmäßig etwas hinzuzufügen, wird die Zeit zeigen ;)</p>]]></description></item><item><title>Rennrad fahren auf Mallorca 2024</title><link>https://samtleben.me/blog/mallorca-2024</link><guid>https://samtleben.me/blog/mallorca-2024</guid><pubDate>Thu, 31 Oct 2024 00:00:00 +0000</pubDate><description><![CDATA[<p>Auch in diesem Jahr habe ich mir eine Woche Rennrad fahren auf Mallorca gegönnt. Dieses Jahr war ich in Alcudia.</p>
<p>Hin- und Rückreise mit dem Radkoffer haben ohne größere Probleme geklappt. Ich habe in diesem Jahr vier schöne Routen abgefahren, dich ich euch hier verlinkt habe.</p>
<ul>
<li>Tag 1: <a href="https://www.komoot.com/de-de/tour/1337684513?share_token=aKUOpiN7Qvs7iy1dFN0vYXLsp2s3QKYWXAn5GSYAjLMOBMJBTB&amp;ref=">Formentor und Co</a></li>
<li>Tag 2: <a href="https://www.komoot.com/de-de/tour/1937518123?share_token=a7s8pp6Vuu7CUZJbUFySHAvpgSkMSsEvJPKD1N6AvJl0S3u2P7&amp;ref=">Sa Calobra und Col de Femenia</a></li>
<li>Tag 3: <a href="https://www.komoot.com/de-de/tour/1937522009?share_token=aTmKHv5PynSVltmha8NehWpMHzxNQpFwyyl4n2QbHQn0iYVMdx&amp;ref=">Sineu Velodrom und Randa</a></li>
<li>Tag 4: <a href="https://www.komoot.com/de-de/tour/1937525120?share_token=a7ahBJfyW0m2H6Oxr7benIaHdZNDgNyEZxAECbJwca6q5G4xWE&amp;ref=">Soller und Puig Major</a></li>
</ul>
<p>Zudem ein paar Fotos:</p>
<div class="image-gallery">
        <a href="/media/fotos/mallorca_2024/PXL_20241007_163910719.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241007_163910719.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241007_163910719.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_080507470.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_080507470.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_080507470.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_082105622.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_082105622.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_082105622.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_090546346.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_090546346.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_090546346.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_092526256.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_092526256.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_092526256.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_092542100.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_092542100.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_092542100.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_092949108.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_092949108.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_092949108.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_093157706.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_093157706.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_093157706.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_101355718.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_101355718.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_101355718.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_101414345.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_101414345.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_101414345.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_104005192.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_104005192.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_104005192.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_104051523.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_104051523.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_104051523.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_114553702.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_114553702.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_114553702.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_115143603.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_115143603.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_115143603.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_115351918.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_115351918.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_115351918.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_115903440.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_115903440.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_115903440.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_121826334.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_121826334.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_121826334.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_151700252.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_151700252.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_151700252.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241008_171257600.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241008_171257600.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241008_171257600.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_081054426.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_081054426.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_081054426.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_083605325.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_083605325.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_083605325.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_085141305.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_085141305.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_085141305.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_091857061.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_091857061.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_091857061.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_092608002.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_092608002.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_092608002.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_093914677.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_093914677.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_093914677.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_104153703.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_104153703.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_104153703.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_122530315.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_122530315.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_122530315.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241009_122703756.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241009_122703756.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241009_122703756.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241010_080401787.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241010_080401787.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241010_080401787.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241010_084051751.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241010_084051751.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241010_084051751.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241010_092958009.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241010_092958009.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241010_092958009.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_080245538.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_080245538.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_080245538.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_085016809.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_085016809.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_085016809.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_085404464.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_085404464.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_085404464.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_112622881.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_112622881.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_112622881.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_120110823.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_120110823.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_120110823.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_120300703.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_120300703.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_120300703.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_124659038.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_124659038.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_124659038.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_161239826.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_161239826.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_161239826.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_162034728.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_162034728.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_162034728.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241011_164856089.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241011_164856089.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241011_164856089.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2024/PXL_20241012_091857098.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2024/PXL_20241012_091857098.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2024/PXL_20241012_091857098.MP.jpg" />
        </picture>
    </a>
    </div>]]></description></item><item><title>Rennrad fahren auf Mallorca 2023</title><link>https://samtleben.me/blog/mallorca-2023</link><guid>https://samtleben.me/blog/mallorca-2023</guid><pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate><description><![CDATA[<p>Im Oktober 2023 war ich für eine Woche in Can Picafort auf Mallorca. Von dort aus habe ich einige der Rennrad-Highlights der Insel abgefahren.
Dabei waren:</p>
<ul>
<li>Cap de Formentor</li>
<li>Petra</li>
<li>Puig de Randa</li>
<li>Sa Calobra, Puig Major, Coll de Soller, Col de Femania</li>
<li>Sant Salvador</li>
<li>und einiges mehr...</li>
</ul>
<p>Absolute Empfehlung. Hier ein paar Impressionen:</p>
<div class="image-gallery">
        <a href="/media/fotos/mallorca_2023/PXL_20231004_112243781.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231004_112243781.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231004_112243781.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231004_163736676.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231004_163736676.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231004_163736676.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231004_175711411.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231004_175711411.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231004_175711411.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231005_071624478.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231005_071624478.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231005_071624478.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231005_133927752.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231005_133927752.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231005_133927752.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_070917191.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_070917191.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_070917191.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_071813878.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_071813878.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_071813878.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_072627989.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_072627989.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_072627989.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_074923444.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_074923444.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_074923444.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_082128464.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_082128464.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_082128464.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_083133608.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_083133608.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_083133608.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_083153542.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_083153542.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_083153542.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_083808608.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_083808608.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_083808608.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_091934610.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_091934610.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_091934610.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_093138932.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_093138932.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_093138932.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_100301856.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_100301856.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_100301856.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_111534183.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_111534183.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_111534183.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_111553288.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_111553288.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_111553288.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_165914848.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_165914848.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_165914848.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231006_194509192.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231006_194509192.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231006_194509192.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231007_070700223.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231007_070700223.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231007_070700223.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231007_134443952.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231007_134443952.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231007_134443952.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231007_134717830.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231007_134717830.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231007_134717830.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231008_071824228.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231008_071824228.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231008_071824228.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231008_081249789.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231008_081249789.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231008_081249789.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231008_081413949.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231008_081413949.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231008_081413949.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231008_091850148.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231008_091850148.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231008_091850148.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231008_110254304.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231008_110254304.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231008_110254304.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_054857210.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_054857210.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_054857210.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_054916176.NIGHT.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_054916176.NIGHT.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_054916176.NIGHT.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_060530009.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_060530009.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_060530009.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_061806290.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_061806290.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_061806290.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_073433234.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_073433234.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_073433234.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_073435705.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_073435705.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_073435705.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_073930896.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_073930896.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_073930896.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_073935387.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_073935387.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_073935387.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_074446516.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_074446516.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_074446516.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_074548905.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_074548905.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_074548905.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_075815380.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_075815380.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_075815380.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_082509905.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_082509905.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_082509905.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_091745119.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_091745119.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_091745119.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_094232696.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_094232696.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_094232696.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_105057074.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_105057074.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_105057074.MP.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231009_110649065.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231009_110649065.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231009_110649065.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231010_085047077.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231010_085047077.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231010_085047077.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231010_090557128.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231010_090557128.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231010_090557128.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231010_104650543.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231010_104650543.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231010_104650543.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/mallorca_2023/PXL_20231010_172624171.MP.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/mallorca_2023/PXL_20231010_172624171.MP.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/mallorca_2023/PXL_20231010_172624171.MP.jpg" />
        </picture>
    </a>
    </div>]]></description></item><item><title>MySQL Datenbank Performance verbessern mit Bitmasks</title><link>https://samtleben.me/blog/mysql-performance-bitmasks</link><guid>https://samtleben.me/blog/mysql-performance-bitmasks</guid><pubDate>Mon, 24 Apr 2023 00:00:00 +0000</pubDate><description><![CDATA[<p>Wenn es um die Optimierung von (MySQL-)Datenbanken geht, ist es üblich, die Datenbankstruktur zu normalisieren. Im Allgemeinen ist das eine gute Idee, aber wenn es um die reine Performance geht, ist eine komplett normalisierte Datenbank nicht immer die beste Lösung.</p>
<p>Zur besseren Verständlichkeit werde ich in diesem Artikel die folgenden Beispieldaten bzw. Tabellen verwenden:</p>
<pre><code class="language-text">Table shirts
+----+----------+
| id | motive   |
+----+----------+
|  1 | Homer    |
|  2 | Marge    |
|  3 | Bart     |
+----+----------+

Table colors
+----+----------+
| id | color    |
+----+----------+
|  1 | Red      |
|  2 | Blue     |
|  4 | Green    |
|  8 | Black    |
+----+----------+</code></pre>
<p>Wir haben eine Tabelle mit T-Shirts und eine weitere Tabelle mit den Farben. Jedes Shirt kann in verschiedenen Farben erhältlich sein, aber nicht jedes Shirt ist in jeder Farbe erhältlich. Daher müssen wir eine neue Tabelle erstellen, um zu speichern, welches Shirt in welcher Farbe erhältlich ist. Diese würde wahrscheinlich so aussehen:</p>
<pre><code class="language-text">Table: shirts_x_colors
+----------+------------+
| shirt_id | color_id   |
+----------+------------+
|        1 |          1 |
|        1 |          4 |
|        2 |          2 |
|        2 |          8 |
|        3 |          2 |
+----------+------------+</code></pre>
<p>Diese Tabelle gibt uns nun Auskunft darüber, welches Shirt in welcher Farbe erhältlich ist - zum Beispiel ist das Shirt &quot;Marge&quot; in Rot und Schwarz erhältlich. Wenn wir eine Liste aller Shirts und verfügbaren Farben haben möchten, müssten wir 3 Tabellen berücksichtigen z.B. GROUP_CONCAT verwenden, um eine kommaseparierte Liste der Farben zu erhalten. Etwas wie:</p>
<pre><code class="language-sql">SELECT shirts.motive, GROUP_CONCAT(colors.color)
FROM shirts
JOIN shirts_x_colors ON shirts.id = shirts_x_colors.shirt_id
JOIN colors ON shirts_x_colors.color_id = colors.id
GROUP BY shirts.id</code></pre>
<p>Solche Abfragen können schnell langsam werden, vor allem wenn wir berücksichtigen, dass Shirts wahrscheinlich nicht nur eine Farbe haben, sondern auch unterschiedliche Größen, Materialien usw.</p>
<h2>Verwendung von Bitmasks</h2>
<p>Bitmasken können dazu beitragen, diese Art von Abfragen zu verbessern. Die IDs in der Tabelle &quot;colors&quot; sind daher nicht einfach aufsteigende Ganzzahlen, sondern nur Zahlen, die Zweierpotenzen (1,2,4,8,16,32,...) sind.
Wir können nun unsere Tabelle &quot;shirts&quot; wie folgt erweitern:</p>
<pre><code class="language-text">Table shirts
+----+----------+--------+
| id | motive   | colors |
+----+----------+--------+
|  1 | Homer    |      5 |
|  2 | Marge    |     10 |
|  3 | Bart     |      2 |
+----+----------+--------+</code></pre>
<p>Ich habe einfach eine neue Spalte namens &quot;colors&quot; hinzugefügt, die die Summe aller verfügbaren Farb-IDs für jedes Shirt enthält - zum Beispiel ist das Shirt &quot;Homer&quot; in Rot (1) und Grün (4) erhältlich, also ist &quot;colors&quot; 1 + 4 = 5. Das Schöne an Bitmasken ist, dass diese Summe immer eindeutig ist - das bedeutet, dass wir nur aufgrund dieser Summe wissen, in welchen Farben ein Shirt erhältlich ist.</p>
<p>Hier ist ein Beispielcode, der die Summe unserer IDs zurück in die einzelnen Werte umwandelt:</p>
<pre><code class="language-php">function reverseBitmask($bitmask)
{
    $bin = decbin($bitmask);
    $total = strlen($bin);
    $stock = [];
    for ($i = 0; $i &lt; $total; $i++) {
        if ($bin{$i} != 0) {
            $bin_2 = str_pad($bin{$i}, $total - $i, 0);
            array_push($stock, bindec($bin_2));
        }
    }
    return $stock;
}

print_r(reverseBitmask(5));</code></pre>
<p>Es gibt aber noch andere Vorteile: Was ist, wenn wir z.B. alle Shirts suchen möchten, die in Rot oder Grün erhältlich sind? Das können wir mit einer einzigen Abfrage tun. Die Summe der Rot- und Grün-IDs wäre 5, also sieht unsere Abfrage so aus:</p>
<pre><code class="language-sql">SELECT * FROM shirts WHERE colors &amp; 5 &gt; 0;</code></pre>
<p>Dies würde eine Liste aller Shirts zurückgeben, die entweder in Rot oder Grün erhältlich sind.</p>
<p>Aber Vorsicht: Die obige Abfrage kann keinen MySQL-Index nutzen. In Bezug auf die Performance kann es daher besser sein, eine einfache IN(x,y,z)-Abfrage zu verwenden.</p>
<h2>Fazit</h2>
<p>Die Verwendung von Bitmasken kann dazu beitragen, die Performance von SQL-Abfragen in einigen Fällen zu verbessern. Natürlich muss sorgfältig geprüft werden, ob diese Technik im gegebenen Fall nützlich ist. Wenn z.B. die Liste der Attribute (z.B. Farben) sehr lang werden kann, würde ich die Verwendung von Bitmasken nicht empfehlen. Außerdem muss klar sein, dass redundante Daten in Ihrer Datenbank gespeichert werden, wenn die Struktur einer Datenbank wie im Beispiel oben angepasst wird.</p>
<p>Die Verwendung von Bitmasken ist kein Allheilmittel zur Lösung von Performance-Problemen in Datenbanken, kann jedoch in einigen Fällen helfen - und ich hoffe, mit diesem Artikel ein grundlegendes Verständnis dafür vermittelt zu haben, wie Bitmasken funktionieren.</p>
<p>Happy coding!</p>
<p><small>Hinweis: Diesen Artikel hatte ich (auf Englisch) bereits 2016 auf einer anderen Website veröffentlicht.</small></p>]]></description></item><item><title>Elgato Key Light Air unter Linux</title><link>https://samtleben.me/blog/elgato-key-light-air-linux</link><guid>https://samtleben.me/blog/elgato-key-light-air-linux</guid><pubDate>Tue, 04 Jan 2022 00:00:00 +0000</pubDate><description><![CDATA[<p>Ich mach's mal kurz: Für besseres Licht, bzw. ein besseres Bild in Videokonferenzen, habe ich seit kurzem ein <a href="https://www.elgato.com/de/key-light-air">Key Light Air von Elgato</a> auf dem Schreibtisch stehen. Ein schönes Teil mit dem ich sehr zufriden bin.</p>
<p>Aber: Wie so oft, gibt es vom Hersteller keine Software für den Linux Desktop. Natürlich kann ich die Lampe einfach mit dem Smartphone steuern - das war mir aber zu friemelig. Und sind wir mal ehrlich: Irgendeine weitere Electron App, um eine Lampe an oder aus zu schalten, ist auch nicht unbedingt notwendig. </p>
<p>Daher habe ich mir ein einfaches Shell-Script gebastelt mit dem ich die Lampe nun steuern kann. Selbstverständlich für jenden zugänglich in einem <a href="https://github.com/nekudo/keylights">GitHub Repository</a>.</p>
<ul>
<li>Lampe an: <code>./keylights -h=elgato-key-light-air-12ab.local on</code></li>
<li>Lampe aus: <code>./keylights -h=elgato-key-light-air-12ab.local off</code></li>
<li>heller: <code>./keylights -h=elgato-key-light-air-12ab.local b+</code></li>
<li>dunkler: <code>./keylights -h=elgato-key-light-air-12ab.local b-</code></li>
</ul>
<p>Selbsterklärend, denke ich.</p>
<p>Mit so einem Script, einem Bash-Alias und/oder einem Keybinding ist das steuern der Elgato Key Light Air auch unter Linux sehr einfach möglich.</p>]]></description></item><item><title>TUXEDO InfinityBook S14 - Umstieg nach 15 Jahren Thinkpad</title><link>https://samtleben.me/blog/tuxedo-infinitybook-s14</link><guid>https://samtleben.me/blog/tuxedo-infinitybook-s14</guid><pubDate>Sat, 30 Jan 2021 00:00:00 +0000</pubDate><description><![CDATA[<p>Eine Ära geht zu Ende. Nach ungefähr 15 Jahren habe ich zum ersten Mal kein Thinkpad mehr im Einsatz. Jedenfalls nicht
für meine Arbeit als Webentwickler.</p>
<p>Genau bekomme ich nicht mehr zusammen, welche Geräte ich alle benutzt habe. Auf jenden Fall dabei waren ein
<a href="https://thinkwiki.de/T42">T42</a>, ein <a href="https://thinkwiki.de/X200">X200</a>, ein <a href="https://thinkwiki.de/T400">T400</a> und
ein <a href="https://thinkwiki.de/T440s">T440s</a>. Die meiste Zeit war ich mit den Geräten sehr zufrieden. Die Langlebigkeit,
Wartbarkeit und die grundsätzlich hohe Verarbeitungsqualität der Thinkpads genießen nicht umsonst einen regelrechten
Kultstatus. Nachdem das T440s nun jedoch auch schon etwas in die Jahre gekommen ist, wurde es Zeit für ein neues
Notebook.</p>
<figure>
    <a href="/media/2021/01/thinkpads01.jpg" class="lightbox">
        <img src="/thumbs/320x240/media/2021/01/thinkpads01.jpg" alt="Thinkpad X200 and T440s">
    </a>
    <figcaption><small>Thinkpad X200 and T440s</small></figcaption>
</figure>
<h2>Die Qual der Wahl</h2>
<p>Ich nutze seit Jahren nun Linux auf meinen Rechnern. Bei der Auswahl neuer Hardware versuche ich daher primär auf
die Linux-Unterstützung zu achten. Das schränkt die Möglichkeiten oft schon ziemlich ein. Zwar ist es mittlerweile
durchaus so, dass Linux auf fast jedem Gerät grundsätzlich funktioniert, der Teufel steckt aber oft im Detail:</p>
<ul>
<li>Wird das Wlan-Modul unterstützt?</li>
<li>Funktionieren die Funktionstasten?</li>
<li>Funktionieren Webcam und Mikrofon?</li>
<li>Gibt es eine Lösung für die Lüftersteuerung?</li>
<li>Sind Treiber für die GPU verfügbar?</li>
<li>u.s.w.</li>
</ul>
<p>Man kann sich nun ein paar Notebooks aussuchen und versuchen alle diese Fragen zu klären. Das ist aber ein ziemlich
großer Aufwand und nicht immer auch tatsächlich möglich. Gerade bei sehr neuen Geräten sind diese Information oft noch
schwer zu finden. Ich habe mich daher bei meiner Auswahl auf ein paar wenige Geräte beschränkt, die bereits vom
Hersteller (meist optional) mit Linux ausgeliefert werden. In meinen Fall waren das: </p>
<ul>
<li>diverse Thinkpads</li>
<li>Die DELL XPS Serie</li>
<li>Geräte von Tuxedo/Schenker</li>
</ul>
<h3>Warum nicht wieder ein Thinkpad?</h3>
<p>Thinkpads sind sicherlich noch immer eine gute Wahl, wenn man eine Notebook mit gutem Linux Support sucht. Aber die
Unterschiede zu anderen Herstellern sind immer geringer geworden. Meiner Meinung nach unterscheiden sich die
Top-Modelle hier nur noch sehr wenig voneinander. Es lohnt sicht also auch mal über den Tellerrand zu schauen.</p>
<p>Zusätzlich gabe es 1-2 Dinge die mich an den Thinkpads gestört haben: </p>
<ul>
<li>Ein nerviges Tastaturlayout mit &quot;Fn&quot;-Key unten links (statt CTRL).</li>
<li>Kaum Konfiguraationsmöglichkeiten (z.B. beim Arbeitsspeicher).</li>
</ul>
<p>Für das <a href="https://www.tuxedocomputers.com/de/Linux-Hardware/Linux-Notebooks/10-14-Zoll/TUXEDO-InfinityBook-S-14-v6.tuxedo">InfinityBook S 14</a>
habe ich mich dann letztendlich aufgrund folgender Kriterien entschieden:</p>
<ol>
<li><strong>Preis/Leistung</strong><br>
Mit einer vergleichbaren Konfiguration war Tuxedo schlicht etwas günstiger als Dell oder Lenovo.</li>
<li><strong>Anschlüsse/Ausstattung</strong><br>
Das InfinityBook hat mit 1x Thunderbold/USB-C, 2x USB-A und einem HDMI deutlich mehr Anschlussmöglichkeiten als z.B.
das XPS 13. Ausserdem bekommt man hier satte 40GB RAM!</li>
<li><strong>Linux-Support</strong><br>
Alle 3 Hersteller bieten Geräte mit vorinstalliertem Linux Betriebssystem an. Tuxedo hat sich jedoch auf den Vertrieb
von Linux-Hardware spezialisiert und bietet daher noch ein paar nette Details. Dazu später mehr.</li>
</ol>
<h2>Der erste Eindruck</h2>
<p>Das Notebook wird schlicht, aber ausreichend verpackt geliefert. Es liegen eine gedruckte Bedienungsanleitung sowie
ein USB-Stick mit einem Tool zur Linux Neuinstallation bei. Zusätzlich einige Goodies.</p>
<p>Das Notebook macht einen sehr soliden Eindruck. Die Tastatur hat kaum Flex und der Deckel scheint ausreichend stabil
befestigt. Die Verarbeitungsqualität ist vollkommen in Ordnung.</p>
<figure>
    <a href="/media/2021/01/tuxedo_infinitybook01.jpg" class="lightbox">
        <img src="/thumbs/320x240/media/2021/01/tuxedo_infinitybook01.jpg" alt="Tuxedo InfinityBook S 14">
    </a>
    <figcaption><small>InfinityBook S 14</small></figcaption>
</figure>
<p>Das Gerät kam, wie bestellt, mit der hauseigenen Linux Version &quot;Tuxedo OS&quot; vorinstalliert. Für Linux-Anfänger absolut
perfekt. Aufklappen und loslegen, keine Konfiguration irgendwelcher Hardware nötig. Soweit ich das beurteilen konnte,
ist TuxedoOS eine auf Ubuntu basierende Distribution mit der Budgie Desktop-Umgebung. Abseits von einigen
Layout-Anpassungen (Wallpaper, Farben, ...) sah das System sehr &quot;standardmäßig&quot; aus. Sprich: Keine unnötige
Hersteller-Bloatware.</p>
<h2>Linux Installation</h2>
<p>Da meine bevorzugte Linux Distribution Xubuntu nicht zu verfügbaren Varianten bei Tuxedo gehört, war hier zunächst
eine Neuinstallation nötig. Aber seien wir ehrlich: Eine frische Installation mit Vollverschlüsselung gehört sowieso
zum Prozedere bei neuer Hardware. So konnte ich auch direkt testen was alles zu tun ist, um die Hardware auch einem
neuen System wieder ans Laufen zu bringen.</p>
<p>Und ich muss sagen: An dieser Stelle kann Tuxedo wirklich punkten und lässt das Entwickler-Herz etwas schneller
schlagen. Nachdem das Basissystem installiert ist, bietet Tuxedo ein Shell-Script in einem
<a href="https://github.com/tuxedocomputers/tuxedo.sh">Repository</a> auf Github an, um fehlende Treiber und Ähnliches
nachzuinstallieren. Das spart eine Menge arbeit und funktioniert tadellos. Der Vollständigkeit halber sei Folgendes
erwähnt:</p>
<ul>
<li>Ich habe das Script minimal angepasst, da ich einige der zu installierenden Pakte nicht benötige.</li>
<li>Das Script ersetzt die Standard-Paketquellen der Ubuntu-Installation durch Quellen auf einem Tuxedo-Server. Dadurch
werden Updates automatisch eingespielt, aber aus Datenschutzgründen ist das evtl. nicht für Jeden die optimale Lösung.</li>
</ul>
<h2>Disclaimer &amp; Fazit</h2>
<p>Dieser Artikel ist natürlich nicht von Tuxedo gesponsort und beinhaltet auch keine Affiliate-Links. Das Notebook
wurde von meinem Arbeitgeber bezahlt. (Übrigens: Wenn du auch eins möchtest, schau doch mal in unsere
<a href="https://www.online-akademie.com/karriere.php">Stellenanzeigen</a>!)</p>
<p>Ich habe das Gerät erst seit ein paar Tagen im Einsatz, daher ist das hier nur ein erster Eindruck. Bis jetzt bin
ich allerdings zufrieden mit meiner Entscheidung den Lenovo Kosmos zu verlassen. Ich werde versuchen den Artikel
in ein paar Wochen/Monaten mit &quot;Langzeit-Erfahungen&quot; zu aktualisieren.</p>]]></description></item><item><title>Ruhrgebiet und Industriekultur</title><link>https://samtleben.me/blog/ruhrgebiet-und-industriekultur-2020</link><guid>https://samtleben.me/blog/ruhrgebiet-und-industriekultur-2020</guid><pubDate>Sun, 20 Sep 2020 00:00:00 +0000</pubDate><description><![CDATA[<p>Da sich Urlaubsplanung in diesem Jahr recht schwierig gestaltet hat, habe ich beschlossen komplett darauf zu verzichten
und mir stattdessen spontan ein paar Dinge anzusehen. Die Industriekultur im Ruhrgebiet hatte ich schon länger nicht
mehr wirklich zu Gesicht bekommen und ich dachte mir &quot;Das könntest du doch mal wieder machen...&quot;. Das habe ich dann
noch mit ein wenig Sport kombiniert und bin mit dem Rad von Köln ins Ruhrgebiet gefahren. Dort bin ich dann für ein
paar Tage geblieben und habe mir unter anderem den Landschaftspark in Duisburg, den Zoo in Gelsenkirchen, Tiger &amp; Turtle
und verschiedene andere Sehenswürdigkeiten angesehen. Wie immer: Absolut sehenswert - das Ruhrgebiet hat durchaus seine
schönen Seiten!</p>
<h3>Halde Hoheward (Herten/Recklinghausen)</h3>
<div class="image-gallery">
        <a href="/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_01.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_01.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_01.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_02.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_02.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_02.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_03.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_03.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_03.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_04.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_04.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_04.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_05.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_05.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/halde-hoheward/2020-09-06_halde-hoheward_05.jpg" />
        </picture>
    </a>
    </div>
<h3>Zoom Erlebniswelt (Gelsenkirchen)</h3>
<div class="image-gallery">
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_01.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_01.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_01.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_02.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_02.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_02.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_03.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_03.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_03.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_04.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_04.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_04.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_05.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_05.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_05.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_06.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_06.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_06.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_07.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_07.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_07.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_08.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_08.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_08.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_09.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_09.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/zoom/2020-09-07_zoom-gelsenkirchen_09.jpg" />
        </picture>
    </a>
    </div>
<h3>Tiger &amp; Turtle (Duisburg)</h3>
<div class="image-gallery">
        <a href="/media/fotos/ruhrgebiet_2020/tiger-and-turtle/2020-09-08_tiger-and-turtle_01.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/tiger-and-turtle/2020-09-08_tiger-and-turtle_01.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/tiger-and-turtle/2020-09-08_tiger-and-turtle_01.jpg" />
        </picture>
    </a>
    </div>
<h3>Landschaftspark Nord (Duisburg)</h3>
<div class="image-gallery">
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_01.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_01.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_01.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_02.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_02.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_02.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_03.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_03.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_03.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_04.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_04.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_04.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_05.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_05.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_05.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_06.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_06.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_06.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_07.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_07.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_07.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_08.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_08.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_08.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_09.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_09.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_09.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_10.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_10.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_10.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_11.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_11.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_11.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_12.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_12.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_12.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_13.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_13.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/ruhrgebiet_2020/landschaftspark/2020-09-08_landschaftspark-nord-duisburg_13.jpg" />
        </picture>
    </a>
    </div>]]></description></item><item><title>Segelwochenende in Nordfriesland</title><link>https://samtleben.me/blog/segelwochenende-in-nordfriesland-2020</link><guid>https://samtleben.me/blog/segelwochenende-in-nordfriesland-2020</guid><pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate><description><![CDATA[<p>Ende August war ich für 4 Tage zu Gast auf der SY Panacee. Dafür bin ich Freitags sehr früh morgens in Richtung Norden
aufgebrochen und erreichte nach einer ca. 5 stündigen, sehr regenerischen Autofahrt schließlich Husum. Dort hieß es
sofort &quot;Leinen los&quot; um noch rechzeitig nach Pellworm zu kommen. In der Region beträgt der Tidenhub bis zu 4 Metern,
da ist gute Planung wichtig. Besonders auf einem Segelboot ;) Wir haben es aber rechtzeitig geschafft und konnten einen
tollen Sonnenuntergang im Hafen von Pellworm genießen.</p>
<p>Am nächsten Tag setzten wir die Segeln in Richtung Hooge. Niemand von uns war vorher schonmal auf einer Hallig - und so
war Hooge genau das richtige Ziel. Bei meist tollem Segelwetter kamen wir rechtzeitig an und mussten noch einige Zeit
vom dem Sperrtor warten, bevor es dann mit dem lezten bischen &quot;Hochwasser&quot; in den Hafen ging.<br>
Hooge ist wirklich sehenswert und ein tolles Naturparadies. Ich empfehle jedem der die Chance hat sich das einmal
anzuschauen.</p>
<p>Sonntags ging es dann zurück von der Hallig in Richtung Husum. Zwar haben wir es nicht mehr im Tageslicht zurück in den
Hafen geschafft, es war jedoch noch genug Wasser da um mit unseren 60cm Tiefgang (minimum) einzulaufen.</p>
<p>Auch wenn das Revier um die nordfriesischen Inseln segeltechnisch nicht das Optimum ist, ist die Landschaft und Natur
mit dem Wattenmeer extrem schön. Eine klare Empfehlung!</p>
<div class="image-gallery">
        <a href="/media/fotos/nordfriesland_2020/DSC01280.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01280.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01280.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01283.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01283.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01283.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01287.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01287.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01287.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01291.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01291.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01291.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01298.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01298.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01298.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01304.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01304.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01304.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01308.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01308.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01308.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01309.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01309.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01309.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01318.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01318.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01318.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01320.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01320.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01320.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01321.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01321.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01321.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01323.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01323.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01323.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01328.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01328.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01328.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/nordfriesland_2020/DSC01332.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/nordfriesland_2020/DSC01332.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/nordfriesland_2020/DSC01332.jpg" />
        </picture>
    </a>
    </div>]]></description></item><item><title>Flora Köln in 2020</title><link>https://samtleben.me/blog/flora-koeln-juni-2020</link><guid>https://samtleben.me/blog/flora-koeln-juni-2020</guid><pubDate>Sun, 28 Jun 2020 00:00:00 +0000</pubDate><description><![CDATA[<p>Auch wenn der Botanische Garten hier in Köln noch ein ganze Weile
<a href="https://www.stadt-koeln.de/politik-und-verwaltung/gebaeudewirtschaft-der-stadt-koeln/ein-canyon-fuer-koeln">umgebaut wird</a>
schaue ich gerne ein bis zwei Mal im Jahr vorbei. Zum einen um den Baufortschritt zu sehen und zu anderen ist es auch
auch ohne die Schaugewächshäuser noch eine schöner Ort zum entspannen. Heute war es dann mal wieder soweit.
Die Fundamende der neuen Häuser sind fertig und man kann erste Grundrisse der späteren Architektur erkennen.</p>
<p>Trotz mäßigem Wetters und Corona war es überigens überraschen voll. Liegt vermutlich an den Sommerferien.</p>
<p>Ein paar Blüten konnte ich aber dennoch knipsen :)</p>
<div class="image-gallery">
        <a href="/media/fotos/flora_2020/DSC01108.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/flora_2020/DSC01108.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/flora_2020/DSC01108.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/flora_2020/DSC01117.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/flora_2020/DSC01117.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/flora_2020/DSC01117.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/flora_2020/DSC01119.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/flora_2020/DSC01119.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/flora_2020/DSC01119.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/flora_2020/DSC01123.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/flora_2020/DSC01123.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/flora_2020/DSC01123.jpg" />
        </picture>
    </a>
    </div>]]></description></item><item><title>Nerd Nostalgie: Vom Betrieb einer PreDB/NFO Website</title><link>https://samtleben.me/blog/nerd-nostalgie-betrieb-einer-predb</link><guid>https://samtleben.me/blog/nerd-nostalgie-betrieb-einer-predb</guid><pubDate>Sat, 01 Feb 2020 00:00:00 +0000</pubDate><description><![CDATA[<p>Vor ungefähr 10 Jahren habe ich eine Webseite mit einer Pre Datenbank an den Start gebracht. Diese Webseite habe ich
dann für ca. 3 Jahre betrieben und dabei vieles gelernt. In diesem Text möchte ich ein wenig von den Herausforderungen
beim Betrieb der Seite erzählen. Zum Teil, weil die Warez Szene ein faszinierendes Thema war und ist, aber auch weil
ich es aus technischer Sicht interessant finde. Über die Jahre kamen da ein paar durchaus kreative Lösungen zusammen.</p>
<p>Hinweis: Ich habe eine ganze Menge technische Details und Erklärungen mit aufgenommen. Daher ist der Artikel etwas
länger geworden. Also schnappt euch eine Mate bevor ihr anfangt zu lesen.</p>
<h2>Ein kurzes Intro in die (damalige) Warez Szene</h2>
<p>Für das Verständnis dieses Textes ist es nötig eine paar Grundbegriffe aus der Warez Szene der 1990er und 2000er Jahre
zu kennen. Ich fasse das hier nur grob zusammen um den Text nicht zu lang werden zu lassen. Einen guten Einstieg bietet außerdem die englische Wikipedia in diesem Artikel: <a href="https://en.wikipedia.org/wiki/Nuke_(warez)">Nuke (warez)</a></p>
<p>In der Warez Szene werden Filme, Computerspiele, Musik, etc. von <em>Release groups</em> veröffentlicht. Jede einzelne
Veröffentlichung nennt man ein <em>Release</em>. In der Regel werden die <em>Releases</em> auf einen FTP Server geladen. Ein
solcher Server wird als <em>Site</em> bezeichnet. Große Teile der Kommunikation innerhalb der Szene finden im IRC Netzwerk
statt. Zu jedem neun Release gibt es eine &quot;Ankündigung&quot; in einem speziell dafür bereitgestellten IRC channel. Diese
speziellen Chat-Räume werden <em>Pre channel</em> genannt. Zusätzlich werden alle <em>Releases</em> in einer Datenbank gesammelt, der
sog. <em>Pre database</em> oder kurz <em>PreDB</em>.</p>
<p>In einer <em>PreDB</em> werden neben Titel und Zeitpunkt der Veröffentlichung noch ein paar zusätzliche Informationen
gespeichert. Dazu gehören die <em>Release group</em>, die Größe (Anzahl der Dateien + Größe in MB/GB), eine Kategorie oder
Section sowie ein Genre. Auch die Information ob und wieso ein <em>Release</em> zurückgezogen wurde wird ggf. in der <em>PreDB</em>
gespeichert.</p>
<p>Zusätzlich zu diesen Information stellen die meisten <em>Release groups</em> eine NFO Datei zu jeden <em>Release</em> bereit. Dabei
handelt es sich um eine kleine Textdateien die genauere Information zum <em>Release</em> beinhalten. Einen gewissen Kultstatus
genießen diese Dateien weil sie häufig das &quot;Logo&quot; der <em>Group</em> in Form von
<a href="https://de.wikipedia.org/wiki/ASCII-Art">ASCII Art</a> beinhalten.</p>
<h2>Betrieb einer PreDB/NFO Webseite</h2>
<p>Nach dieser Einleitung ist es hoffentlich nun etwas einfacher zu verstehen worum es beim Betrieb einer PreDB
Website geht. Ich habe eine Datenbank mit (mehr oder weniger) allen Releases online bereitgestellt. Diese Datenbank
wurde ständig aktualisiert und war durchsuchbar. Zusätzlich wurden (sofern verfügbar) die NFO Dateien zu den
jeweiligen Releases angezeigt.</p>
<figure style="float: left; margin-right: 5px;">
    <a href="/media/2020/02/nfosws01.png" class="lightbox">
        <img src="/thumbs/320x240/media/2020/02/nfosws01.png" alt="nfos.ws screenshot01">
    </a>
    <figcaption><small>nfos.ws Release Liste</small></figcaption>
</figure>
<figure style="float: left; margin-right: 5px;">
     <a href="/media/2020/02/nfosws02.png" class="lightbox">
        <img src="/thumbs/320x240/media/2020/02/nfosws02.png" alt="nfos.ws screenshot02">
    </a>
    <figcaption><small>nfos.ws Rlease mit NFO</small></figcaption>
</figure>
<div style="clear:both;"></div>
<p>An dieser Stelle vielleicht noch ein wichtiger Hinweis: Auf der Webseite (und auch auf allen anderen PreDB Seiten)
werden nie Downloads der eigentlichen Releases angeboten. Das ist eine komplett andere Baustelle.</p>
<h3>Releases aus Pre Chans sammeln</h3>
<p>Um die Datenbank ständig aktuell zu halten war es nötig die neuesten Releases aus den Pre Chans zu sammeln. Die Channel
selbst, sowie die Bots in den Channels, sind allerdings relativ &quot;fragil&quot;. Mal wird ein Channel
geschlossen, mal ist ein Bot down. Der ein oder andere erinnert sich sicherlich auch noch an die sog. Net-Splits
im IRC. Die können ebenfalls dafür sorgen, dass man die Nachrichten aus einem Channel nicht mitbekommt.<br>
Daher wurde mir schnell klar, dass es notwendig ist die Releases aus verschiedenen Pre Channels gleichzeitig zu sammeln.</p>
<p>Ein Teil des Projekts war somit ein &quot;IRC Bot&quot; bzw. ein Script welches ständig in mehreren Pre Chans anwesend war, und
dort die geposteten Releases gesammelt hat. Zu den Herausforderungen in diesem Bereich gehörte es sicherlich die
geposteten Releases vom Rest der Kommunikation im Channel sauber zu trennen.<br>
Dazu hatte ich pro Channel ein (oder mehrere) reguläre Ausdrücke welche die Release-Announcements filterten.
Zusätzlich wurden nur Releases in die Datenbank aufgenommen, die in mindestens zwei Pre Chans unabhängig voneinander
gepostet wurden.<br>
Das bedeutete im Umkehrschluss jedoch auch, dass das komplette System nur funktionierte wenn mein Bot in mindestens
zwei Pre Chans anwesend war. Daher habe ich den Bot in der Regel in 3-5 unterschiedlichen Channels lauschen lassen.</p>
<figure>
    <a href="/media/2020/02/nfosws05.png" class="lightbox">
        <img src="/thumbs/320x240/media/2020/02/nfosws05.png" alt="prebot release regexs">
    </a>
    <figcaption><small>RegEx zur Identifizierung von Pre-Messages</small></figcaption>
</figure>
<p>In einigen der Pre Channels war sämtliche Kommunikation verschlüsselt. Nur wem das aktuelle Passwort für den Kanal
bekannt war konnte die Nachrichten lesen. Daher musste ich in den IRC Bot verschiedene Crypto-Alogorithmen
implementieren - und je nach Channel aktivieren.</p>
<p>Grundsätzlich war das Aktualisieren der Datenbank mit neuen Releases eine eher einfache Aufgabe. Wesentlich
schwieriger, war da schon das Sammeln der NFO Dateien.</p>
<h3>Die ständige Jagd nach NFO Dateien</h3>
<p>Einige der Pre Chans haben zu jedem Release auch eine NFO Datei bereitgestellt, sobald diese verfügbar war. Diese
Channels waren jedoch wesentlich seltener als diejenigen in denen nur die Releases an sich gepostet wurden.<br>
Primär habe ich die NFO Dateien damals zwar über diese Channels, und den im vorherigen Abschnitt erwähnten IRC Bot,
gesammelt - es konnte aber nicht schaden auch noch andere Quellen zu nutzen.<br>
Zwei dieser Quellen möchte ich hier erwähnen, weil sie aus meiner heutigen Sicht technisch ziemlich kreativ waren:</p>
<h4>Der Usenet NFO Crawler</h4>
<p>Viele der Releases incl. der NFO Dateien, landen früher oder später im Usenet. Daher kam ich auf die Idee &quot;einfach&quot;
die Binary-Groups nach NFO Dateien zu durchsuchen, und diese dann den Releases in der Datenbank zuzuordnen.</p>
<p>Dazu eine extrem verkürzte und technisch sehr unsaubere Erklärung des Usenets:</p>
<p>Das Usenet ist im Prinzip nichts anderes als ein großes Forum in dem Textbeiträge geschrieben werden. Die Themen
sind in verschiedene Gruppen (<em>usenet groups</em>) unterteilt. In jede Gruppe können Textbeiträge mit einem Subject und
dem eigentlich Text geschrieben werden. Wenn man Texte lesen möchte schaut man sich zunächst die Titel/Subjects in
einer Gruppe an, und kann dann entscheiden welche Texte man aufrufen möchten. Heute vielleicht am ehesten vergleichbar
mit reddit.</p>
<p>Irgendwann kamen findige Hacker auf die Idee, dass Binärdateien im Prinzip auch nur Text sind, und man diesen Text
natürlich auch im Usenet posten kann. Newsgroups in denen ausschließlich Binärdateien gepostet werden nennt man
Binary-Groups.<br>
Die Dateien werden dazu einfach in hunderte Teile zerlegt und dann in einzelne Beiträge geschrieben. Über die Subjects können diese später wieder zu einer Datei zusammengefügt werden.<br>
Eine wesentlich ausführlichere Erklärung findet sich in der Wikipedia:
<a href="https://en.wikipedia.org/wiki/Usenet#Binary_content">Usenet (Binary Content)</a></p>
<p>Wie findet man aber nun NFO Dateien in diesen zig-tausenden Binärtext-Beiträgen?</p>
<figure>
    <a href="/media/2020/02/nfosws03.png" class="lightbox">
        <img src="/thumbs/320x240/media/2020/02/nfosws03.png" alt="usenet release regexs">
    </a>
    <figcaption><small>RegEx für Releases im Usenet</small></figcaption>
</figure>
<p>Auch dafür habe ich wieder einen Bot programmiert. Dieser ging permanent alle neu geposteten Beiträge in verschiedenen
Binary-Groups durch, und versuchte zunächst zu identifizieren ob es sich um ein Scene-Release handelt. Dazu wurde das
Subject jedes einzelnen Beitrags mit eine Liste von regulären Ausdrücken angeglichen. Wenn es hier einen Treffer gab,
bestand eine hohe Wahrscheinlichkeit für eine Scene-Release. Der so gefundene Name wurde dann mit allen Releases in
der Pre-Datenbank abgeglichen. Gab es auch hier einen Treffer war ein Release gefunden. Schlussendlich wurde nun noch
geprüft ob es sich um eine NFO Datei handelt. Nur dann wurde der Inhalt des Beitrags (in diesem Fall also die NFO Datei)
gespeichert, und dem Release in der Datenbank zugeordnet.</p>
<p>Auf dem Screenshot sieht man einen Ausschnitt aus der Tabelle in der die Regulären Ausdrücke für die verschiedenen
Binary-Groups gespeichert waren.</p>
<h4>Der Png2Nfo Crawler</h4>
<p>Verschiedene Quellen stellten NFO Dateien nicht im Textformat sondern als PNG Bilder zur Verfügung. Zum einen gibt es
dann keine Probleme bei der Darstellung, und zum anderen sollte so die Weiterverbreitung der ursprünglichen
NFO Dateien unterbunden werden.</p>
<p>Um also weitere Quellen für NFO Dateien nutzen zu können habe ich mir überlegt, dass es gut wäre aus PNG Dateien
&quot;einfach&quot; wieder den ursprünglichen Text zu generieren. <em>(Das berüchtigte &quot;Entwicker-Einfach&quot; ;))</em></p>
<p>Das es möglich ist aus den PNG Dateien wieder Text zu generieren ist zwei wesentlich Eingenschaften des &quot;ASCII Art&quot; zu
verdanken:</p>
<ol>
<li>Es werden nur Zeichen aus dem ASCII-Zeichensatz verwendet, was die Anzahl der nutzbaren Zeichen auf ca. 240 begrenzt.</li>
<li>Zur Darstellung der Dateien werden nichtproportionale Schriften verwendet, wodurch jedes Zeichen im resultierenden
Bild die gleiche Höhe und Breite hat.</li>
</ol>
<figure>
    <a href="/media/2020/02/nfosws04.png" class="lightbox">
        <img src="/thumbs/320x240/media/2020/02/nfosws04.png" alt="usenet release regexs">
    </a>
    <figcaption><small>Hashwerte und ASCII-Nummern</small></figcaption>
</figure>
<p>Um nun aus den PNG Dateien wieder Textdateien zu erstellen, ging ich folgendermaßen vor:</p>
<ul>
<li>Zunächst wurden einige der NFO-PNGs in viele kleine PNGs aufgeteilt, die jeweils ein Zeichen beinhalteten.
In Handarbeit mussten, für jede Schriftart, diese ca. 240 Bilder einmal den jeweiligen ASCII Zeichen
zugeordnet werden. Zusätzlich wurde für jedes Bild mit einem Zeichen ein Hash-Wert berechnet. Daraus entstand
dann eine Tabelle die jedem ASCII-Zeichen in Bildform (via Hashwert) einen ASCII-Wert zuordnen konnte.</li>
<li>Anschließend konnte ich mit einer simplen Software beliebige PNG Dateien in die jeweiligen einzelnen Zeichen
zerlegen, daraus einen Hash-Wert bilden und über die Tabelle die jeweilige Nummer im ASCII Zeichensatz bestimmen.</li>
<li>Schließlich wurden die so bestimmen ASCII Zeichen in eine Datei gespeichert und die &quot;ursprüngliche&quot; NFO Datei
war rekonstruiert.</li>
</ul>
<p><em>Hinweis am Rande: Heutzutage würde man das vermutlich Machine-Learning nennen. ;)</em></p>
<h3>Technik und Performance der Webseite</h3>
<p>Eigentlich alle Teile des Projekts habe ich mit PHP umgesetzt. Die Daten lagen in einer MySQL Datenbank.<br>
An einigen Stellen musste ich jedoch von einer Standard PHP/MySQL Anwendung abweichen um eine vernünftige
Performance gewährleisten zu können.</p>
<p>Ich habe dieses Projekt als reines Hobby betrieben - weil ich es technisch interessant fand. Dadurch war ich bei der
Auswahl der Hardware natürlich etwas eingeschränkt. Je billiger desto besser ;) Oder umgekehrt: Je performanter die
Software, desto geringer die Kosten. Zusätzlich war ein 20€ VServer (oder Ähnliches) vor 10 Jahren natürlich lange
nicht so leistungsstark wie heute.</p>
<p>Die Release-Datenbank umfasste etwa 4,5 Millionen Einträge. Dazu etwa 400.000 NFO Dateien und eine wenig &quot;Nuke History&quot;.
Insgesamt war die Datenbank ca. 1GB groß. Heute würde ich die Tabellen vermutlich einfach in den RAM laden und die
Seite wäre wunderbar schnell. Vor 10 Jahren, und mit wenig Budget, war das etwas komplizierter.</p>
<h4>Sphinx als Suchserver</h4>
<p>Um die Datenbank performant durchsuchbar zu machen und das Navigieren durch die Releases (mit verschiedenen Filtern) zu
beschleunigen, habe ich neben den MySQL Indexen einen <a href="https://github.com/sphinxsearch/sphinx/">Sphinx Suchserver</a>
aufgesetzt. Dieser erzeugte weitere Indexe aus den Daten in der MySQL DB, welche ich dann in PHP verwenden konnte.
So konnte ich z.B. bei Paginieren durch eine bestimmte Kategorie von Releases, zunächst die Primärschlüssel der
betreffenden Releases aus dem Sphinx-Index anfragen, um dann ein wesentlich performanteres Query auf die
MySQL Datenbank fahren zu können.</p>
<h4>Gearman und Redis für Usenet Crawler</h4>
<p>In den Binary-Gruppen des Usenets kommen tausende neue Beiträge pro Minute hinzu. Selbst nur die Header der neuen
Beiträge periodisch zu crawlen, ist mit einem einfachen single threaded PHP Script nicht möglich. Daher habe ich hier
auf <a href="http://gearman.org/">Gearman</a> gesetzt. Damit kann man relativ einfach &quot;Worker&quot; erstellen, welchen dann parallel an
einer Aufgabe arbeiten können. (Ich habe dazu vor Jahren schon mal
<a href="/blog/asynchrone-php-prozesse-mit-gearman">etwas geschrieben</a>)<br>
Für die Koordination und Kommunikation der Worker habe ich eine Redis Datenbank eingesetzt, was auch recht gut
funktionierte.</p>
<h2>Abschließende Worte</h2>
<p>Nach wie vor finde ich die Technik und Organisation der Warez Szene faszinierend. Relativ einfache und über viele Jahre
erprobte Software und Protokolle (IRC, FTP, Usenet, ASCII, ...) wurden und werden hier seit vielen Jahren erfolgreich
eingesetzt.<br>
Während der Zeit in der ich dieses Projekt betrieben habe, habe ich technisch extrem viel gelernt. Ich musste mich
mit verschieden Protokollen auseinandersetzt, diverse Bots programmieren, performante Software schreiben und vieles
mehr. Kurzum: Es hat extrem viel Spass gemacht!</p>
<p>Aufgehört habe ich irgendwann weil es extrem viel &quot;Arbeit&quot; ist hier am Ball zu bleiben. Die ständige Suche nach
Pre-Chans, NFO Quellen, u.s.w. nimmt eine Menge Zeit in Anspruch. Man muss in den entsprechenden IRC Channels mitlesen
und mit den Leuten in Kontakt bleiben um auf dem &quot;Stand der Dinge&quot; zu bleiben. Die komplette Szene ist zwar einerseits
recht &quot;konstant&quot;, anderseits aber auch sehr schnelllebig.</p>
<p>Damit schließe ich diesen Text, den ich schon lange einmal schreiben wollte.</p>
<p>Hach ja... Good old times...</p>]]></description></item><item><title>Temperatur messen mit dem Raspberry Pi Zero W</title><link>https://samtleben.me/blog/raspberry-pi-temperatur-messen</link><guid>https://samtleben.me/blog/raspberry-pi-temperatur-messen</guid><pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate><description><![CDATA[<p>Der letzte Tag des Jahres eignet sich perfekt für einen Jahresrückblick. Natürlich gebe ich hier nun nicht die Hoch- und
Tiefpunkte meines Privatlebens zum Besten, sondern schreibe stattdessen über ein kleines Elektronik Projekt welches ich
Anfang des Jahres gestartet habe.</p>
<h2>Hitze im Dachgeschoss</h2>
<p>Seit einiger Zeit wohne ich in Köln in einer Wohnung im obersten Stockwerk. Südseite mit viel Glas sowie ein schwarzes
Flachdach sorgen dafür, dass es im Sommer quasi unerträglich heiß wird – erzählt jeder der schon einmal in einer
Dachgeschosswohnung gelebt hat. Aber ist das wirklich so? Hat mich mal interessiert, und so kam ich auf die Idee die
Temperatur in meiner Wohnung einfach automatisiert zu messen und aufzuzeichnen.</p>
<p>Ich habe nun ein Jahr lang Daten gesammelt und daher nun dieser Jahresrückblick - bzw. eine kleine Auswertung.</p>
<h2>Umsetzung</h2>
<p>Zunächst habe ich mir überlegt wie man die Temperatur am besten messen und aufzeichnen kann. Natürlich kann man hierfür
fertige Gerät wie z.B. eine Netatmo Wetterstation oder Ähnliches kaufen, das fand ich aber zu langweilig und zu teuer.
Daher habe ich mich für den DIY Ansatz entschieden und das Ganze mit einem Raspberry Pi Zero W und einem DHT22 Sensor
selbst zu basteln.</p>
<figure>
    <a href="/media/2019/12/rpizero_temp_sensor01.jpg" class="lightbox">
        <img src="/thumbs/320x240/media/2019/12/rpizero_temp_sensor01.jpg" alt="Raspberry Pi Zero W mit DHT22 Sensor">
    </a>
    <figcaption><small>Raspberry Pi Zero W mit DHT22 Sensor</small></figcaption>
</figure>
<p>Die Umsetzung ist extrem simpel und auf diversen Seiten im Netz ausführlich erklärt:
<a href="https://buyzero.de/blogs/news/tutorial-dht22-dht11-und-am2302-temperatursensor-feuchtigkeitsensor-am-raspberry-pi-anschliessen-und-ansteuern">Hier ein Beispiel</a>.</p>
<p>Grob zusammengefasst werden 3 der 4 Pins des Sensors mit den den entsprechenden GPIO Ein- und Ausgängen des Raspberry
Pies verbunden und die Hardware Seite des Projekts ist fertig. Der Sensor wird glücklicherweise bereits mit
entsprechenden Widerständen etc. fertig geliefert.</p>
<p>Software-seitig habe ich die bekannte <a href="http://wiringpi.com/">WiringPi</a> Bibliothek verwendet um Daten der Sensoren
auszulesen. Für den DHT22 Sensor gibt es auch hier bereits fertige Lösungen: <a href="https://github.com/technion/lol_dht22">https://github.com/technion/lol_dht22</a></p>
<p>Um die Daten nun regelmäßig automatisch auszulesen und zu speichern habe ich mich für
<a href="http://munin-monitoring.org/">Munin</a> entschieden. Dieses Tool nutze ich bereits an vielen anderen Stellen um
Servermetriken zentral zu sammeln. Das entsprechende Plugin für die Munin-Node ist in ein paar Zeilen Shell-Script
schnell gemacht:</p>
<pre><code class="language-bash">#!/bin/sh

case $1 in
 config)
 cat &lt;&lt;'EOM'
graph_title Temperature
graph_vlabel Celsius
graph_category AM2302
temperature.label Celsius
temperature.label Temperature
temperature.draw AREASTACK
temperature.colour 00FF00
EOM
 exit 0;;
esac

printf "temperature.value "
/usr/local/bin/loldht 7 | grep -i "temperature" | cut -d ' ' -f7</code></pre>
<p>Damit die Daten der Munin-Node regelmäßig von einem zentralen Server angefragt und verarbeitet werden können, muss der Raspberry-Pi irgendwie mit dem Netz verbunden sein. Daher habe ich mir hier für die „W“ Variante des Zeros entschieden.</p>
<p>Den kompletten Aufbau habe ich dann in einem Blumentopf „versteckt“ und so im Raum platziert, dass er nicht direkt hinter einem Fenster in der direkten Sonneneinstrahlung steht.</p>
<figure style="float: left; margin-right: 5px;">
    <a href="/media/2019/12/rpizero_temp_sensor02.jpg" class="lightbox">
        <img src="/thumbs/320x240/media/2019/12/rpizero_temp_sensor02.jpg" alt="Raspberry Pi im Blumentopf">
    </a>
    <figcaption><small>Raspberry Pi im Blumentopf (1)</small></figcaption>
</figure>
<figure style="float: left; margin-right: 5px;">
    <a href="/media/2019/12/rpizero_temp_sensor03.jpg" class="lightbox">
        <img src="/thumbs/320x240/media/2019/12/rpizero_temp_sensor03.jpg" alt="Raspberry Pi im Blumentopf">
    </a>
    <figcaption><small>Raspberry Pi im Blumentopf (2)</small></figcaption>
</figure>
<div style="clear:both;"></div>
<h2>Auswertung</h2>
<p>Nun habe ich ein Jahr lang Temperaturdaten gesammelt. Alle 5 Minuten wurde die aktuelle Raumtemperatur ausgelesen und
gespeichert. Daraus habe ich dann jeweils eine Tages-Durchschnittstemperatur errechnet. Diese Daten sieht man auf
folgendem Graph:</p>
<img src="/media/2019/12/avg_temperature_2019.png">
<p>Nun wollte ich natürlich wissen ob diese Daten ansatzweise korrekt sind und habe Sie daher mit entsprechenden Graphen
aus anderen Quellen verglichen:</p>
<figure>
    <img src="/media/2019/12/avg_temperature_2019_dwd.png">
    <figcaption><small>Quelle: <a href="https://www.dwd.de/DE/wetter/wetterundklima_vorort/nordrhein-westfalen/koeln_bonn/_node.html" target="_blank" rel="noopener">dwd.de</a></small></figcaption>
</figure>
<figure>
    <img src="/media/2019/12/avg_temperature_2019_wettercom.png">
    <figcaption><small>Quelle: <a href="https://www.wetter.com/wetter_aktuell/rueckblick/deutschland/koeln/DE0005156.html?sid=H744&timeframe=1y" target="_blank" rel="noopener">wetter.com</a></small></figcaption>
</figure>
<p>Der Graph des DWD zeigt ebenfalls tägliche Mittelwerte der Lufttemperatur in Köln. Auf dem Graph von wetter.com sind
die Temperaturen nach Min. und Max. Werten getrennt. </p>
<p>Natürlich vergleiche ich hier nun Innen- mit Außentemperaturen, aber der grundsätzlich gleiche Verlauf der Temperatur
über das Jahr hinweg ist schön zu erkennen. Besonders gut zu sehen sind die „heißen“ Phasen in diesem Jahr jeweils
zu Ende er Monate April, Juni, Juli und August.</p>
<p>Ebenfalls sehr interessant ist die Tatsache, dass die durchschnittliche Temperatur in meiner Wohnung eher dem Graphen
mit den maximalen Temperaturen von wetter.com, als den Durschnittstemperaturen des DWD entspricht ;)</p>
<p>Der heißeste Tag des Jahres in meiner Wohnung war übrigens der 26.07.2019 mit einer durchschnittlichen Temperatur
von 31,94°C. Dieser fällt genau in den Bereich mit den höchsten Temperaturen der beiden anderen Graphen.</p>
<p>Ich denke also, dass meine Daten halbwegs in Ordnung sind und die ursprüngliche Frage schön beantworten: Ja, in einer
Dachgeschosswohnung ist es im Sommer sehr warm, besonders in den Monaten Juni – September. Hier sinkt die durschn.
Temperatur kaum noch unter 25°C.</p>
<p>Im nächsten Jahr gibt es dann vielleicht eine Detailauswertung der heissesten Tage oder andere Rekorde. Bis dahin: </p>
<p>Einen guten Rutsch ins neue Jahr.</p>]]></description></item><item><title>China Lights Festival 2019</title><link>https://samtleben.me/blog/china-lights-festival-2019</link><guid>https://samtleben.me/blog/china-lights-festival-2019</guid><pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate><description><![CDATA[<p>Vor ein paar Tagen habe ich mir im <a href="https://koelnerzoo.de/index.php/aktuell/#ChinaLightFestival">Kölner Zoo</a> das
diesjährige China Lights Festival angesehen. Die Lichtinstallationen sind wirklich beeindruckend und wunderschön
gemacht. Auch die Größe des gesamten Festivals hat mich beeindruckt - fast im kompletten Zoo sind die Werke zu sehen.</p>
<p>Leider war es extrem kalt. Daher sind die Fotos eher hastig als mit der nötigen Ruhen entstanden. Hier trozdem ein
kleiner Eindruck:</p>
<div class="image-gallery">
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_01.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_01.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_01.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_02.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_02.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_02.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_03.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_03.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_03.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_04.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_04.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_04.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_05.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_05.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_05.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_06.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_06.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_06.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_07.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_07.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_07.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_08.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_08.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_08.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_09.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_09.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_09.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_10.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_10.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_10.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_11.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_11.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_11.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_12.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_12.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_12.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_13.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_13.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_13.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_14.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_14.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_14.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_15.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_15.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_15.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_16.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_16.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_16.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_17.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_17.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_17.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_18.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_18.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_18.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_19.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_19.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_19.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_20.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_20.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_20.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_21.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_21.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_21.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_22.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_22.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_22.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_23.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_23.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_23.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_24.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_24.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_24.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_25.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_25.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_25.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_26.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_26.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_26.jpg" />
        </picture>
    </a>
        <a href="/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_27.jpg" class="lightbox">
        <picture>
            <source
                srcset="/thumbs/230x173/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_27.jpg"
                media="(min-width: 526px)"
            />
           <img src="/thumbs/320x240/media/fotos/china_lights_festival_2019/2019-12_china-lights-festival_27.jpg" />
        </picture>
    </a>
    </div>]]></description></item><item><title>Kölner Nikolauslauf 2019</title><link>https://samtleben.me/blog/koelner-nikolauslauf-2019</link><guid>https://samtleben.me/blog/koelner-nikolauslauf-2019</guid><pubDate>Sun, 01 Dec 2019 00:00:00 +0000</pubDate><description><![CDATA[<p>Heute bin ich beim <a href="http://koelner-nikolauslauf.de/">Kölner Nikolauslauf</a> im Stadtwald noch einmal für die 10km
Strecke im &quot;Top Lauf&quot; an den Start gegangen. Nach 0:45:52 (0:44:59 Netto) hatte ich das Ziel erreicht und bin damit
unter meinem selbst gesteckten Ziel von 50 Minuten geblieben.</p>
<img src="/thumbs/320x240/media/2019/12/nikolauslauf_2019.jpg" alt="Kölner Nikolauslauf Startnummer">
<p>Ich denke für dieses Jahr war es das dann auch mit den Sportevents und ich werde meinem Körper eine Erholungspause
gönnen. Im nächsten Jahr geht es dann weiter. Vielleicht ist ja mal wieder ein Halbmarathon drin ;)</p>]]></description></item><item><title>Nachtrag: Run of Colours 2019</title><link>https://samtleben.me/blog/run-of-colours-2019</link><guid>https://samtleben.me/blog/run-of-colours-2019</guid><pubDate>Fri, 08 Nov 2019 00:00:00 +0000</pubDate><description><![CDATA[<p>Wahnsinn – Es ist wirklich schon mehr als 10 Jahre her, dass ich das letzte Mal etwas zu einem
<a href="/blog/ruhrtal-marathon-witten-21km">Lauf-Event geschrieben</a> habe. Also wirklich allerhöchste Zeit wieder etwas mehr
in diese Richtung zu tun. Daher möchte ich hier kurz (hauptsächlich als Referenz für mich selbst) einen Lauf nachtragen:</p>
<img src="/thumbs/320x240/media/2019/11/run-of-colours.jpg" alt="Run of Colours Startnummer">
<p>Am 21. September 2019 bin ich beim <a href="http://www.aidshilfe-koeln.de/events/run-of-colours/">Run of Colours hier in Köln</a>
mitgelaufen. Ein relativ kleines, aber toll organisiertes Event rund um den Rheinauhafen. Bonus: Die Erlöse der
Veranstaltung werden an die Aidshilfe gespendet. Ich werde versuchen auch im nächsten Jahr wieder dabei zu sein.</p>
<p>Mein Ergebnis in diesem Jahr: 10km in 00:47:40</p>
<p>Als nächstes steht dann am 1. Dezember der <a href="http://koelner-nikolauslauf.de">Nikolauslauf</a>, ebenfalls hier in Köln, an.
Ich habe mich auch hier wieder für die 10km Strecke angemeldet und werde versuchen diese in weniger als 50min
zurück zu legen.</p>]]></description></item></channel></rss>
