<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>yurix blog</title>
        <link>https://yurix.ch/blog/</link>
        <description>The yurix blog of chaos and random thoughts. Mostly computer related, but can be about anything.</description>
        <language>en</language>
        <lastBuildDate>Thu, 08 Oct 2026 13:29:06 +0000</lastBuildDate>
        <docs>https://www.rssboard.org/rss-specification</docs>
        <item>
        <title>In der anderen Wolke 2</title>
        <description><![CDATA[ Eine Kurzgeschichte aus meiner Schulzeit über eine Veränderung einer Person. ]]></description>
        <content:encoded><![CDATA[ <p>
        Diese Kurzgeschichte habe ich in der Schule geschrieben. Ich finde es immer schade, dass diese Texte einfach verloren und vergessen gehen. Deshalb habe ich entschieden, sie hier auf meiner Website zu sammeln.
        Es sind bei weitem keine Meisterwerke, aber alles in allem bin ich dennoch stolz darauf. Die Inspiration für diese Geschichte was Kafkas «Die Verwandlung» und meine andere Kurzgeschichte <a href="kurzgeschichte1.html">In der anderen Wolke 1</a>.
    </p>
    <h2>Text</h2>
    <p>
        Es war ein kalter, nebliger Novembermorgen um sechs Uhr, als der Wecker klingelte. Dabei war es noch tief am Schlafen. Es würde normalerweise nie vor neun Uhr aufstehen. An diesem speziellen Morgen war da allerdings ein Drang aufzustehen, zum Kleiderschrank zu gehen und sich bereit zu machen. Vor dem Schrank voller Anzüge stehend, befand es jedoch: «Zu grau». Gestern hatte der Tag anders begonnen. Um diese Zeit würde es in der Küche sitzen, einen Kaffee trinken und die Zeitung lesen. Heute blieb es stehen und starrte aus dem Fenster ins Grau. Dieser Morgen ist besonders. Wieso wusste es all das über ihn? Wieso es das Auto und nicht den Zug nahm, könnte es genauso schlecht beantworten. Langsam öffnete sich das Garagentor. Währenddem es mit dem Auto im Dunst der Stadt verschwand, winkte eine Frau. Seine Frau? Es selbst dachte nein, obwohl es wusste, dass sie es war.
    </p>
    <p>
        Am selben Morgen wachte noch jemand anderes auf. Früher als normal sprang schon um sechs Uhr jemand aus dem Bett und griff schnurstracks zuhinterst in den Kleiderschrank zum alten, zerknitterten Anzug. «Das muss passen», hörte man es erstaunt über den bunten Kleiderberg grummeln. Auch seinen Morgenkaffee konnte Jemand nicht trinken, denn er fand nur Teebeutel. Frustriert verliess Jemand seine Wohnung und betrat die seltsam bekannte und zugleich doch noch nie gesehene Strasse. Wieso fühlte sich heute alles so fremd an? Rundum erwachte die Stadt langsam wie jeden Morgen. Sein Blick kreuzte sich mit dem des Mannes auf der anderen Strassenseite. Dieser starrte mit dem gleichen Ausdruck von Entsetzen und Angst zurück. Als er seufzend seinen Weg fortsetzte, war die Person im grauen Nebel der Stadt verschwunden.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/kurzgeschichte2.html</link>
    </item>
<item>
        <title>Katze-Verstehts Memearchiv</title>
        <description><![CDATA[ Das Katze-Verstehts Memearchiv enthält eine Sammlung an Katzenmemes. ]]></description>
        <content:encoded><![CDATA[ <p>
        Willkommen im Katze-Verstehts Memearchiv.
        Hier werden alle Memes in diesem Format ausgestellt.
        Die meisten Ausstellungsstücke stammen aus dem D-INFK Discord #memes Kanal.
        Mehr Memes können <a href="https://imgflip.com/memegenerator/453425234/Cat-looks-inside">hier</a> erstellt werden
        und hier für die Website geteilt werden: <code>yurix[at]ycloud.yurix.ch</code>
    </p>
    __CATMEMES__ ]]></content:encoded>
        <link>https://yurix.ch/blog/catmemes.html</link>
    </item>
<item>
        <title>Essays Schreiben</title>
        <description><![CDATA[ Ein Essay aus meiner Schulzeit, das das Essayschreiben anspricht. ]]></description>
        <content:encoded><![CDATA[ <p>
        Dieses Essay habe ich in der Schule geschrieben. Ich finde es immer schade, dass diese Texte einfach verloren und vergessen gehen. Deshalb habe ich entschieden, sie hier auf meiner Website zu sammeln.
        Es sind bei weitem keine Meisterwerke, aber alles in allem bin ich dennoch stolz darauf.
    </p>
    <h2>Text</h2>
    <p>
        Unsere Deutschlehrerin hat uns erklärt, dass ein Essay ein assoziativer Gedankenspaziergang sei. Was für ein Unwort für etwas, dass in unseren Köpfen jeden Tag vorgeht. Unsere Gedanken sind miteinander verbunden. Entlang diesen Verbindungen können wir in unserem Kopf spazieren gehen. Wenn wir dies nun aufschreiben und für andere verständlich machen, nennen wir es ein Essay. Das ist alles.
    </p>
    <p>
        Allerdings kann es doch nicht so einfach sein. Wenn man einfach alles aufschreibt, das einem durch den Kopf geht, hat man leider noch kein gutes Essay. Die Assoziationen müssen Sinn machen, verständlich sein, aber auch den Leser unterhalten können, zumindest so, dass er den Text liest und im Fall des Lehrers hoffentlich auch positiv auffasst.

    </p>
    <p>
        Je nach dem kann in einem Essay aber genau auch der Unsinn Sinn machen. Für Gründe, die mir unbekannt sind, verbinde ich «meditieren» mit «Brokkoli» und «Fünfliber-Münzen». Es macht absolut keinen Sinn das dies so ist, da mir bei «meditieren» aber immer Brokkoli in den Sinn kommt, hat sich diese Verbindung nur noch mehr gefestigt. Unterzwischen gehört zu meditieren einfach auch Brokkoli dazu. Ich bin mir sicher, dass es anderen mit Gewissen Dingen ähnlich geht. Leider erzählen andere Leute viel zu selten von ihrem assoziativen Unsinn. Dabei ist es eine pure Kreativitätserfrischung.

    </p>
    <p>
        Denn was Kreativität für mich ausmacht, ist, dass sie Bahnen bricht und zu Dingen führt, die man zuvor selbst nicht erreichen kann. In einem Sinn geht sie also über die normalen Assoziationen hinaus. Nur dass mit Erklärung, wir anderen auch über unsere Grenzen folgen können, wenn sie es uns kreativ präsentieren.

    </p>
    <p>
        Man könnte denken, dass das In-Gedanken-Umherschweifen nur Menschen passiert. Schliesslich sehen wir uns selbst ja als etwas Besseres, Intelligenteres als Tiere. Dem ist aber nicht so. Etwas sehr Ähnliches habe ich bei Sprachassistenzen wie ChatGPT, die ja sicher kein Mensch sind, beobachtet. Ich nenne den Effekt Drift. Wenn ChatGPT längere Texte schreibt, hat es die Tendenz, keine geschlossenen, konsistenten Texte schreiben zu können. Es kann schlecht einen Anfang mit einem Ende verbinden oder einen gewissen Stil umsetzen. Der Text driftet in eine andere Richtung als die, die der Text am Anfang hatte. Meine Erklärung dafür ist, dass aufgrund technischer Limiten diese Assistenten nicht zu lange in die Vergangenheit zurückschauen können. Sie müssen daher basierend auf nur sehr wenigen Informationen von einem Abschnitt zum nächsten Hüpfen, und haben dabei schon wieder den Anfang vergessen. Das liest sich dann wie ein assoziativer Gedankenspaziergang, da von etwas zum Nächsten gesprungen wird, wobei sich das Thema aber schrittweise immer leicht ändert.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/essay1.html</link>
    </item>
<item>
        <title>Schoggimandeln</title>
        <description><![CDATA[ Schoggimandeln-Rezept-Verbesserungen basierend auf dem Fooby-Rezept ]]></description>
        <content:encoded><![CDATA[ <p>
        Schoggimandeln sind meiner Meinung nach definitiv unter den Top-10 der besten Süssigkeiten. Deshalb habe ich versucht, selber Schoggimandeln zu machen.
    </p>
    <p>
        Google hat mich dazu sofort zu einem <a href="https://fooby.ch/de/rezepte/19180/schokoladenmandeln">Rezept</a> von Fooby gesendet. Ich hatte nicht viel Erfolg mit diesem Rezept. Die mit flüssiger Schokolade überzogenen Mandeln in einer Dose zu bestäuben, hat für mich überhaupt nicht gut funktioniert. Die Mandeln kleben sofort aneinander und and der Wand. Auch mit Schütteln bleibt es ein einziger grosser Blob. Und da es in einer Dose ist, kann man den Blob auch nicht gut von Hand zerstückeln, da die Öffnung meiner Dose eher klein ist.
    </p>

    <img src="images/schoggimandeln.jpg" alt="Schoggimandeln-Produktionstrasse">

    <p>
        Stattdessen habe ich die Mandeln schlussendlich in einem Teller paniert. Dazu habe ich die Puderzucker-Kakaopulver-Mischung in einem Suppenteller mit hohem Rand vorbereitet. Mit einem Löffel kann man darin viel kontrollierter die Mandeln von allen Seiten einstäuben und Klumpen und Blobs zerteilen.
    </p>

    <h2>Andere Tipps</h2>
    <ul>
        <li>In kleinen Batches arbeiten: Es geht viel besser, so die Mandeln einzustäuben.</li>
        <li>Meiner Erfahrung nach braucht es viel mehr Puderzucker-Kakaopulver-Mischung als im Rezept. Der ganze Prozess ist relativ verschwenderisch. Schlussendlich haftet vielleicht nur die Hälfte an den Mandeln, aber mit weniger ist es schwer, die Mandeln rundum zu bedecken.</li>
        <li>Ich finde es feiner, mehr Puderzucker als Kakaopulver zu verwenden. Ansonsten sind die fertigen Mandeln sehr kakao-intensiv im Geschmack.</li>
        <li>Zimt in der Puderzucker-Kakaopulver-Mischung ist auch sehr empfehlenswert.</li>
    </ul> ]]></content:encoded>
        <link>https://yurix.ch/blog/schoggimandeln.html</link>
    </item>
<item>
        <title>Menschen aus Russland unerwünscht?</title>
        <description><![CDATA[ Ein Text vom August 2022 über den Ukraine-Krieg und Sanktionen ]]></description>
        <content:encoded><![CDATA[ <p>
        Diesen Text habe ich in der Schule geschrieben. Ich finde es immer schade, dass diese Texte einfach verloren und vergessen gehen. Deshalb habe ich entschieden, sie hier auf meiner Website zu sammeln.
        Es sind bei weitem keine Meisterwerke, aber alles in allem bin ich dennoch stolz darauf.
    </p>
    <p>
        Der Ukraine-Krieg ist noch nicht vorüber und Fakten, verfügbares Wissen und die Situation verändern sich immer noch. Deshalb ist es wichtig, zu wissen, dass dieser Text im August 2022 geschrieben wurde.
    </p>
    <h2>Text</h2>
    <p>
        Der Ukraine-Krieg hat unsere Welt erschüttert. Noch Anfangs Jahr hätte ich niemals damit gerechnet, dass es in Europa einen Krieg mit diesen Ausmassen geben wird.
    </p>
    <p>
        Es wird fast ausschliesslich dem Präsidenten Putin die Schuld am Krieg gegeben. Gleichzeitig hat der Westen unter der Anführung der USA strenge Sanktionen eingeführt, um Russland zu schaden. Diese treffen jedoch die Bevölkerung Russlands genauso fest. Es wurden auch schon mehrmals Sportler und Musiker aus Russland von Veranstaltungen ausgeladen, weil sie Russen sind.
    </p>
    <p>
        Wenn aber Putin am Krieg schuld ist, erscheinen Sanktionen, die die Bevölkerung treffen zuerst widersprüchlich, es sollte doch den Schuldigen treffen und nicht die normale Bevölkerung. Ausserdem sieht es aktuell so aus, als ob Putin nicht von selbst seine Macht abgeben wird, mit Sanktionen oder ohne.
    </p>
    <p>
        Sanktionen haben dennoch ein Ziel: Wenn sich die Bevölkerung nicht gegen einen widerrechtlichen Krieg führenden Präsidenten wehrt, unterstützt sie indirekt den Präsidenten und den Krieg, und sie wird damit zu einem Mitschuldigen. Die Kriegsmitschuldigen werden bestraft. Im Falle der Bevölkerung ist die Strafe in der Form von Sanktionen. Bis jetzt hat sich die Bevölkerung jedoch nicht gewehrt, deshalb sind Sanktionen, die die Bevölkerung treffen gerechtfertigt.
    </p>
    <p>
        Das Konzept sollte auch auf der Ebene von einzelnen Personen angewandt werden. Wenn sich russische Sportler, Musiker und Touristen nicht gegen ihren Präsidenten wehren, sind sie mitschuldig am Krieg. Als Strafe werden ihnen gerechtfertigt einige Privilegien entzogen, wie etwa die Erlaubnis, nach Europa zu reisen.
    </p>
    <p>
        Es gibt allerdings Grenzen: Wenn sich eine Person klar von Putin abgrenzt, sollte sie nicht bestraft werden. Spezifisch heisst das zum Beispiel, dass ihr die Einreise gewährt wird. Dazu muss sie aber klar ausdrücken, dass sie Putin nicht unterstützt. Das ist nicht unproblematisch, besonders zuhause in Russland können die damit verbundenen Aussagen bestraft werden. Damit ist es für diese Person dann fast nur noch möglich, aus Russland auszuwandern. Daraus folgt, dass nur Ferien nicht mehr erlaubt ist, auswandern aber schon. Das Auswandern schadet zudem der russischen Wirtschaft, was im Sinne der Sanktionen wie oben beschrieben wäre.
    </p>
    <p>
        Anzunehmen, dass alle Russen, oder Personen mit russischen Namen Putin unterstützen ist nicht akzeptabel. Zum Glück komm es bei uns selten so weit: Obwohl ich einen russischen Namen habe, wurde ich noch nie negativ darauf angesprochen.
    </p>
    <p>
        Die angesprochenen Sanktionen und Strafen für Personen, die den Krieg und Putin unterstützen haben auch ihre Limiten. Jeder Mensch, egal auf welcher Seite, hat das Recht zu leben. Deshalb sind Sanktionen, die zum Beispiel die Versorgung mit Nahrungsmittel oder die medizinische Versorgung betreffen, ein Tabu. Andere Dinge wie etwa Luxusgüter oder elektronische Geräte sind dazu viel besser geeignet.
    </p>
    <p>
        Propaganda und Zensur sind eine schwache Ausrede: Vielleicht werden Fakten verdreht, dass Krieg herrscht, ist sicherlich durchgerungen. Das erinnert stark an die Aussage Kants: «Aufklärung ist der Ausgang des Menschen aus seiner selbstverschuldeten Unmündigkeit». Man verschuldet die Situation sich selbst, man kann sich nicht hinter Ausreden wie Propaganda verstecken, man muss selbst handeln. Ein Krieg ist ein Verbrechen, und nichts kann daran etwas ändern. Deshalb bin ich auch nicht generell gegen ein Verbot russischer Sportler an Wettkämpfen, wenn sie «mündig» sind. Nur Sportler und andere, die den Krieg unterstützen, dürfen ausgeschlossen werden.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/ukraine.html</link>
    </item>
<item>
        <title>ChatGPT-Essay</title>
        <description><![CDATA[ Ein Versuch, mit ChatGPT ein Essay zu schreiben. ]]></description>
        <content:encoded><![CDATA[ <p>
        Aktuell sehen alle ChatGPT als das Tool, das Werkzeug, das unsere Welt verändern will. Unsere Deutschlehrerin hat uns deshalb forschen lassen, was sich mit ChatGPT erreichen lässt.
    </p>
    <p>
        Ich habe versucht, mit ChatGPT ein Essay zu schreiben, in dem ich es schreiben lasse, Feedback gebe und es nochmals schreiben lasse.
    </p>
    <p>
        Als erstes liess ich ChatGPT das Thema wählen. Es wählte «Das Universum». Das ist keine schlechte Wahl, aber auch nicht kreativ. Ein Thema, auf das jeder kommen und über das jeder schreiben könnte.
    </p>

    <h2>1. Version</h2>
    <p>
        Das Universum, eine unendliche Weite, die den menschlichen Verstand immer wieder aufs Neue herausfordert. Die schier endlose Anzahl von Sternen, Galaxien und Planeten, die sich in den Tiefen des Kosmos erstrecken, ist schlichtweg atemberaubend. Die Vorstellung, dass es mehr als 100 Milliarden Galaxien gibt, von denen jede Millionen bis Milliarden von Sternen beherbergt, ist schwer fassbar.
    </p>
    <p>
        Eine Frage, die viele Menschen bewegt, ist die nach außerirdischem Leben. Angesichts der schieren Anzahl von Sternen und Planeten in der Galaxie scheint es wahrscheinlich, dass irgendwo da draußen, in den unendlichen Weiten des Universums, Leben existieren könnte. Die Suche nach extraterrestrischem Leben ist ein faszinierendes wissenschaftliches Unterfangen, das weiterhin große Neugier und Spekulationen hervorruft.
    </p>
    <p>
        Wenn wir über das Universum sprechen, können wir nicht umhin, uns zu fragen, wie es entstanden ist. Die gängigste wissenschaftliche Theorie ist der Urknall, ein Ereignis, das vor etwa 13,8 Milliarden Jahren stattgefunden haben soll. Vor dem Urknall war das gesamte Universum in einem winzigen, heißen und dichten Zustand zusammengeballt, bevor es in einer enormen Expansion explodierte. Diese Theorie erklärt auf beeindruckende Weise die Ausdehnung und Entwicklung des Universums, wie wir es heute kennen.
    </p>
    <p>
        Doch die Frage nach dem, was vor dem Urknall war, bleibt ein Rätsel. Die aktuellen Modelle der Kosmologie bieten keine klaren Antworten auf diese Frage, da Raum und Zeit selbst mit dem Urknall zu existieren begannen. Daher sind wir bisher nicht in der Lage, eindeutige Schlussfolgerungen darüber zu ziehen, was möglicherweise vor diesem entscheidenden Ereignis existierte.
    </p>
    <p>
        Das Universum bleibt eine unerschöpfliche Quelle der Neugier und der wissenschaftlichen Forschung. Die unvorstellbare Größe und Komplexität des Kosmos regen unsere Vorstellungskraft an und fordern uns auf, immer weiter zu forschen und zu erkunden, um die Geheimnisse des Universums zu entschlüsseln. In seiner unendlichen Weisheit und Schönheit wird das Universum uns immer wieder dazu inspirieren, nach den Sternen zu greifen, buchstäblich und metaphorisch.
    </p>
    <ul>
        <li>Etwas trocken und monoton geschrieben</li>
        <li>Sehr distanziert</li>
        <li>Es fehlt etwas die Pointe</li>
    </ul>

    <h2>2. Version</h2>
    <p>
        Das Universum - oder wie ich es gerne nenne, der ultimative Space-Spaßpark. Stellen Sie sich vor, Sie stehen vor einer Achterbahn mit Milliarden von Sternen, die auf Sie warten. Das ist das Universum für Sie - immer ein Abenteuer!
    </p>
    <p>
        Wir alle lieben die Vorstellung von unendlichen Galaxien und Sternen, die sich da draußen befinden. Es ist, als ob jemand in der Nähe der Milchstraße ein gigantisches "Willkommen im Universum"-Schild aufgestellt hat. Aber Moment mal, gibt es vielleicht eine kosmische Rummelplatzkarte, die wir verpasst haben?
    </p>
    <p>
        Da ist diese Frage nach außerirdischem Leben. Nun, wer weiß, vielleicht haben sie bereits eine Galaxie-weite Party geplant, und wir sind zu spät. "Sorry, Erde, die Aliens haben bereits das Buffet geplündert und die intergalaktische Tanzfläche gerockt." Aber keine Sorge, vielleicht laden sie uns bald ein, wenn sie entdecken, dass wir auf dieser kleinen blauen Kugel einige großartige Sprünge auf dem Trampolin der Wissenschaft gemacht haben.
    </p>
    <p>
        Was den Ursprung des Universums angeht, nun, der Urknall klingt ein bisschen nach einer riesigen kosmischen Konfetti-Kanone, die vor 13,8 Milliarden Jahren abgefeuert wurde. Aber Moment mal, was war vorher? Vielleicht ein intergalaktischer Zauberer, der einen magischen Hut benutzte? Oder eine Art kosmisches Wartezimmer, in dem alle Teilchen herumsaßen und auf ihren großen Auftritt warteten?
    </p>
    <p>
        Das Universum ist ein Ort voller Rätsel, aber auch voller faszinierender Entdeckungen. Es ist wie eine riesige Schatzsuche, bei der wir immer neue Hinweise finden. Und selbst wenn wir die Antworten nicht sofort bekommen, macht die Suche nach ihnen eine Menge Spaß. Also schnallen Sie sich an und genießen Sie die Fahrt durch dieses kosmische Vergnügungspark - das Universum!
    </p>
    <ul>
        <li>Ich verstehe nicht genau, wie Rummelpark und Party mit dem Universum verknüpft sind. Ich frage ChatGPT, dies zu verbessern</li>
        <li>Am Schluss ist es ein englisches Essay</li>
        <li>Hat nicht funktioniert, ich versuche es nochmals</li>
    </ul>

    <h2>3. Version</h2>
    <p>
        Das Universum - oder wie ich es gerne nenne, die größte und kosmischste Vorstellung, die je existierte. Stellen Sie sich vor, wir sind Teil eines gigantischen Schauspiels, bei dem der Kosmos selbst die Bühne bildet und die Sterne die glitzernden Hauptdarsteller sind. Diese Vorstellung ist nicht allzu weit hergeholt, wenn man bedenkt, dass das Universum selbst eine Art epische Darbietung ist, die vor unseren Augen abläuft.
    </p>
    <p>
        Im Wesentlichen ist das Universum die größte Bühne, die wir uns vorstellen können. Die Sterne sind die Scheinwerfer, die unsere Aufführung beleuchten, und die Galaxien sind die verschiedenen Akte in diesem gewaltigen Drama. Manchmal fühlt es sich an, als ob der Vorhang aufgeht, wenn die Sonne über den Horizont steigt, und das Universum sagt: "Bitte begrüßen Sie unsere unglaubliche Besetzung von Planeten und Nebeln!"
    </p>
    <p>
        Die Idee, dass das Universum eine Art kosmisches Schauspiel ist, eröffnet eine humorvolle und faszinierende Perspektive auf die unendlichen Wunder und Mysterien, die es birgt. Wir sind alle unwissentlich Teil dieser riesigen Darbietung, in der das Universum selbst die Regie führt und wir unsere Rollen auf dieser galaktischen Bühne spielen.
    </p>
    <ul>
        <li>Es driftet immer etwas weiter weg vom ursprünglichen Thema.</li>
        <li>Der Text schrumpft.</li>
        <li>Der Text ist etwas einseitig. Ich frage in der nächsten Version, ob es etwas mehrseitiger das Thema behandeln könnte.</li>
    </ul>

    <h2>4. Version</h2>
    <h3>Das Universum als kosmisches Theater: Eine humorvolle Perspektive</h3>
    <p>Das Universum ist wie ein gewaltiges Theaterstück, bei dem die Sterne die Hauptdarsteller sind und die Galaxien die verschiedenen Akte in diesem kosmischen Drama darstellen. Diese humorvolle Perspektive ermöglicht es uns, das Universum auf eine völlig neue Weise zu betrachten.</p>
    <h3>Unsere Rollen auf der galaktischen Bühne</h3>
    <p>In diesem Theaterstück des Universums sind wir alle Schauspieler, die ihre Rollen auf der Bühne des Lebens spielen. Jeder von uns hat eine einzigartige Geschichte, die sich im Laufe der Zeit entfaltet. Manchmal fühlt es sich an, als ob das Universum auf uns herabschaut und sagt: "Bitte begrüßen Sie unsere unglaubliche Besetzung von Planetenbewohnern!"</p>
    <h3>Die Sterne als Scheinwerfer des Kosmos</h3>
    <p>Die Sterne sind die Scheinwerfer dieses kosmischen Theaters. Sie beleuchten unsere Welt in der Dunkelheit des Weltraums und erwecken die Nacht zum Leben. Wenn wir in den Himmel schauen, sehen wir die glitzernden Lichter, die die Bühne für unser irdisches Drama bereitstellen.</p>
    <h3>Die Vorstellung von außerirdischem Leben als Comedy-Show</h3>
    <p>Die Vorstellung von außerirdischem Leben kann in dieser humorvollen Perspektive als eine Art intergalaktische Comedy-Show betrachtet werden. Vielleicht beobachten uns Außerirdische von ihren Raumschiffen aus und amüsieren sich über unsere alltäglichen Probleme und absurden Entscheidungen. Wer weiß, vielleicht sind wir die beliebteste Reality-Show im ganzen Universum!</p>
    <h3>Der Ursprung des Universums: Der ultimative Startschuss</h3>
    <p>Der Ursprung des Universums, der Urknall, könnte als der ultimative Startschuss für dieses gewaltige kosmische Theaterstück angesehen werden. Es ist, als ob das Universum beschlossen hätte, im ganz großen Stil zu feiern und uns mit einer spektakulären Eröffnungsshow zu überraschen. Die Idee, dass das Universum von Anfang an eine Art großer Auftritt war, verleiht diesem faszinierenden Rätsel eine humorvolle Note.</p>
    <p>Insgesamt eröffnet die Vorstellung des Universums als ein kosmisches Theater eine amüsante und tiefgründige Möglichkeit, über die unendlichen Wunder und Mysterien des Universums nachzudenken. Es erinnert uns daran, dass wir alle Teil dieses gewaltigen Schauspiels sind und unsere Rolle darin einzigartig und bedeutsam ist. Und während wir uns auf dieser galaktischen Bühne bewegen, bleibt das Universum selbst der größte Regisseur und die faszinierendste Vorstellung, die jemals aufgeführt wurde.</p>
    <ul>
        <li>Besser, aber es hat wenig Verbindungen ausser dem Überthema zwischen den Abschnitten.</li>
        <li>Ausserdem will ich keine Titel. Ich frage ChatGPT, dies zu verbessern.</li>
    </ul>

    <h2>5. Version</h2>
    <p>
        In unserer Vorstellung ist das Universum nicht nur ein Ort, sondern auch eine grandiose Vorstellung, die immer weitergeht. Es ist, als ob das gesamte Universum selbst die Bühne für das epische Drama des Lebens ist. Hier sind einige humorvolle und faszinierende Gedanken, die uns in die unendlichen Weiten des kosmischen Theaters führen:
    </p>
    <p>
        Die Sterne, glitzernde Hauptdarsteller am kosmischen Himmel, beleuchten unsere Welt in der Dunkelheit des Weltraums. Sie sind wie die Scheinwerfer auf der Bühne des Lebens, die die Nacht zum Leben erwecken. Wenn wir in den Himmel schauen, betrachten wir die glitzernden Lichter, die die Bühne für unser irdisches Drama bereitstellen.
    </p>
    <p>
        Und dann ist da die Frage nach außerirdischem Leben, eine echte Komödie im Weltall. Stellen Sie sich vor, wir sind Teil einer intergalaktischen Comedy-Show, und Außerirdische beobachten uns von ihren Raumschiffen aus, während sie sich über unsere alltäglichen Probleme und absurden Entscheidungen amüsieren. Vielleicht sind wir die beliebteste Reality-Show im ganzen Universum!
    </p>
    <p>
        Aber was ist mit dem Ursprung des Universums? Der Urknall, der als der ultimative Startschuss für dieses kosmische Theaterstück angesehen wird, könnte als eine Art gigantische Eröffnungsshow betrachtet werden. Es ist, als ob das Universum beschlossen hätte, im ganz großen Stil zu feiern und uns mit einer spektakulären Leinwandprojektion zu überraschen. Die Idee, dass das Universum von Anfang an eine Art großer Auftritt war, verleiht diesem faszinierenden Rätsel eine humorvolle Note.
    </p>
    <p>
        Insgesamt eröffnet die Vorstellung des Universums als ein kosmisches Theater eine amüsante und tiefgründige Möglichkeit, über die unendlichen Wunder und Mysterien des Universums nachzudenken. Es erinnert uns daran, dass wir alle Teil dieses gewaltigen Schauspiels sind und unsere Rollen darin einzigartig und bedeutsam sind. Während wir uns auf dieser galaktischen Bühne bewegen, bleibt das Universum selbst der größte Regisseur und die faszinierendste Vorstellung, die jemals aufgeführt wurde.
    </p>
    <ul>
        <li>Hat überhaupt nicht funktioniert!</li>
    </ul>

    <h2>6. Version</h2>
    <p>
        in dieser Version fange ich nochmals von vorne an, mit einem ausführlicherem Prompt.
    </p>
    <h3>Prompt</h3>
    <p>
        Bitte schreibe diesen assoziativen Gedankenspaziergan in Essay-Form weiter. Tipps: Bitte keine Untertitel, bitte alle Abschnitte verbinden und humorvoll, aber nicht zu schrill schreiben. Es muss für einen Lehrer lesbar sein:
    </p>
    <p>
        Das Universum ist wie ein gewaltiges Theaterstück, bei dem die Sterne die Hauptdarsteller sind und die Galaxien die verschiedenen Akte in diesem kosmischen Drama darstellen. Diese humorvolle Perspektive ermöglicht es uns, das Universum auf eine völlig neue Weise zu betrachten.
        In der weiten Dunkelheit
    </p>
    <h3>Antwort</h3>
    <p>
        Das Universum ist wie ein gewaltiges Theaterstück, bei dem die Sterne die Hauptdarsteller sind und die Galaxien die verschiedenen Akte in diesem kosmischen Drama darstellen. Diese humorvolle Perspektive ermöglicht es uns, das Universum auf eine völlig neue Weise zu betrachten.
    </p>
    <p>
        In der weiten Dunkelheit des Weltraums entfaltet sich ein Spektakel, das selbst die kreativsten Köpfe unserer Welt in Erstaunen versetzt: das Universum. Doch statt es als bloßen Raum zu betrachten, könnte man es auch als ein riesiges, humorvolles Theaterstück betrachten, bei dem die Sterne die Hauptdarsteller sind und die Galaxien die verschiedenen Akte in diesem kosmischen Drama darstellen.
    </p>
    <p>
        Die Sterne, diese glitzernden Hauptdarsteller am kosmischen Himmel, könnten als die strahlenden Scheinwerfer auf der Bühne des Lebens betrachtet werden. Sie beleuchten die Dunkelheit des Weltraums und zaubern ein atemberaubendes Spektakel am nächtlichen Firmament. Wenn wir in den Himmel schauen, betrachten wir die glitzernden Lichter, die die Bühne für unser irdisches Drama bereitstellen.
    </p>
    <p>
        In dieser Vorstellung sind die Sterne nicht nur ferne Sonnen, sondern auch Protagonisten in einer kosmischen Geschichte. Ihre Positionen und Bewegungen am Himmel könnten als Teil eines übergeordneten Drehbuchs betrachtet werden, das die Geschichte des Universums erzählt. Vielleicht sind die Sternbilder nicht nur zufällige Ansammlungen von Sternen, sondern auch Symbole und Zeichen in diesem gewaltigen Theaterstück.
    </p>
    <p>
        Doch was ist mit der Frage nach außerirdischem Leben? In dieser humorvollen Perspektive könnte man sich vorstellen, dass wir Teil einer intergalaktischen Comedy-Show sind. Vielleicht beobachten uns Außerirdische von ihren Raumschiffen aus und amüsieren sich über unsere alltäglichen Probleme und absurden Entscheidungen. Vielleicht sind wir die beliebteste Reality-Show im ganzen Universum!
    </p>
    <p>
        Aber was ist mit dem Ursprung des Universums? Der Urknall, der als der ultimative Startschuss für dieses kosmische Theaterstück angesehen wird, könnte als eine Art gigantische Eröffnungsshow betrachtet werden. Es ist, als ob das Universum beschlossen hätte, im ganz großen Stil zu feiern und uns mit einer spektakulären Leinwandprojektion zu überraschen. Die Idee, dass das Universum von Anfang an eine Art großer Auftritt war, verleiht diesem faszinierenden Rätsel eine humorvolle Note.
    </p>
    <p>
        Insgesamt eröffnet die Vorstellung des Universums als ein kosmisches Theater eine amüsante und tiefgründige Möglichkeit, über die unendlichen Wunder und Mysterien des Universums nachzudenken. Es erinnert uns daran, dass wir alle Teil dieses gewaltigen Schauspiels sind und unsere Rollen darin einzigartig und bedeutsam sind. Während wir uns auf dieser galaktischen Bühne bewegen, bleibt das Universum selbst der größte Regisseur und die faszinierendste Vorstellung, die jemals aufgeführt wurde.
    </p>
    <ul>
        <li>Nicht schlecht, aber etwas übertrieben, sensationalistisch geschrieben. Ich will versuchen, dies noch zu verbessern.</li>
    </ul>

    <h2>7. Version</h2>
    <p>
        Das Universum, jenes schier unendliche Gebiet, das den Himmel bedeckt, hat viele Gesichter. Eines davon ist die Vorstellung, dass es sich um ein gewaltiges Theaterstück handelt, in dem die Sterne die Hauptdarsteller sind und die Galaxien die verschiedenen Akte in diesem kosmischen Drama darstellen. Diese Perspektive eröffnet eine einzigartige Sichtweise auf das Universum, die sowohl faszinierend als auch humorvoll ist.
    </p>
    <p>
        Die Sterne, jene glänzenden Lichter am nächtlichen Himmel, könnten als die strahlenden Scheinwerfer auf der Bühne des Lebens betrachtet werden. Sie erleuchten die Dunkelheit des Weltraums und schaffen ein atemberaubendes Schauspiel, das uns jede Nacht von Neuem fasziniert. Beim Blick in den Himmel betrachten wir die glitzernden Lichter, die die Bühne für unser irdisches Drama bereitstellen.
    </p>
    <p>
        Diese Vorstellung erlaubt es uns, die Sterne nicht nur als ferne Sonnen zu sehen, sondern auch als Hauptakteure in einer kosmischen Geschichte. Ihre Positionen und Bewegungen am Himmel könnten als Teil eines übergeordneten Drehbuchs betrachtet werden, das die Geschichte des Universums erzählt. Die Sternbilder, die uns am Firmament erscheinen, könnten mehr sein als zufällige Anordnungen von Sternen – vielleicht sind sie Symbole und Zeichen in diesem gewaltigen Theaterstück.
    </p>
    <p>
        Die Frage nach außerirdischem Leben, eine der faszinierendsten in der Kosmologie, kann in dieser humorvollen Perspektive als eine Art intergalaktische Comedy-Show gesehen werden. Wir könnten uns vorstellen, dass wir Teil dieser Show sind, und Außerirdische von ihren Raumschiffen aus zuschauen, während sie sich über unsere alltäglichen Probleme und absurden Entscheidungen amüsieren. In dieser Vorstellung sind wir die Protagonisten einer universellen Reality-Show.
    </p>
    <p>
        Was den Ursprung des Universums angeht, so ist der Urknall, der als der ultimative Startschuss für dieses kosmische Theaterstück angesehen wird, ein bedeutendes Kapitel. In dieser Perspektive könnte man sich vorstellen, dass das Universum beschlossen hat, im ganz großen Stil zu feiern und uns mit einer spektakulären Leinwandprojektion zu überraschen. Die Idee, dass das Universum von Anfang an eine Art großer Auftritt war, verleiht diesem faszinierenden Rätsel eine humorvolle Note.
    </p>
    <p>
        Die Vorstellung des Universums als ein kosmisches Theater eröffnet eine amüsante und tiefgründige Möglichkeit, über die unendlichen Wunder und Mysterien des Universums nachzudenken. Sie erinnert uns daran, dass wir alle Teil dieses gewaltigen Schauspiels sind und unsere Rollen darin einzigartig und bedeutsam sind. Während wir uns auf dieser galaktischen Bühne bewegen, bleibt das Universum selbst der größte Regisseur und die faszinierendste Vorstellung, die jemals aufgeführt wurde.
    </p>
    <ul>
        <li>Ich glaube, der Text ist so weit, dass man mit ChatGPT nicht mehr viel weiter kommt und man vielleicht von Hand den Text überarbeiten muss.</li>
        <li>Interessanterweise änden sich immer auch andere, zufällige Sachen als das, was ich sage. Ausserdem driftet es immer weiter ab.</li>
        <li>Ich habe mich jetzt nie auf die Länge geachtet, das könnte e.v. schwierig zu kontrollieren sein.</li>
    </ul>

    <h2>Fazit</h2>
    <p>
        Diese Aufgabe hat mich weiter überzeugt, dass AI-Tools einfach noch nicht so gut sind, wie gerne gesagt wird. Man kann damit keine zufriedenstellende Texte schreiben.
        Die Texte, die generiert werden, lassen sich höchstens als Ausgangsmaterial für einen eigenen Text verwenden. Ausserdem sind sie nicht wirklich kreativ.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/essay2.html</link>
    </item>
<item>
        <title>Strom-Rechner</title>
        <description><![CDATA[ Berechnet Strom-Kosten für Geräte gegeben der Strom-Preis und Stromverbrauch in Watt von einem Gerät. ]]></description>
        <content:encoded><![CDATA[ <p>
        Dieses Tool berechnet aus dem Stromverbrauch (in Watt) und dem Strompreis wie viel es kostet, ein Gerät 24/7 am Netz angeschlossen zu betreiben. Es kann zum Beispiel verwendet werden, um die Stromkosten eines Servers zu berechnen.
    </p>

    <label for="wattage">Stromverbrauch (Watt)</label>
    <input type="number" id="wattage" placeholder="10 Watt" value="42" min="0">
    <label for="electricityrate">Strompreis (CHF/kWh)</label>
    <input type="number" id="electricityrate" placeholder="0.33 CHF/kWh" value="0.26" step="0.01" min="0">

    <dl>
        <dt>Preis (Monat)</dt>
        <dd id="monthly-cost"></dd>
        <dt>Preis (Jahr)</dt>
        <dd id="yearly-cost"></dd>
    </dl>

    <script>
        const wattageInput = document.getElementById("wattage")
        const rateInput = document.getElementById("electricityrate")

        function update() {
            const wattage = parseFloat(wattageInput.value)
            const rate = parseFloat(rateInput.value)

            const kWhYearly = 365*24*wattage/1000
            const costYearly = kWhYearly * rate

            document.getElementById("yearly-cost").textContent = `${costYearly.toFixed(2)} CHF`
            document.getElementById("monthly-cost").textContent = `${(costYearly/12).toFixed(2)} CHF`
        }

        wattageInput.addEventListener("input", update)
        rateInput.addEventListener("input", update)

        update()
    </script> ]]></content:encoded>
        <link>https://yurix.ch/blog/power-calculator.html</link>
    </item>
<item>
        <title>Eskapismus</title>
        <description><![CDATA[ Ein Text aus meiner Schulzeit über Eskapismus. ]]></description>
        <content:encoded><![CDATA[ <p>
        Dieser Text habe ich in der Schule geschrieben. Ich finde es immer schade, dass diese Texte einfach verloren und vergessen gehen. Deshalb habe ich entschieden, sie hier auf meiner Website zu sammeln.
        Es sind bei weitem keine Meisterwerke, aber alles in allem bin ich dennoch stolz darauf.
    </p>
    <p>
        Dieser Text ist als eine Antwort auf die Aufgabenstellung geschrieben. Leider habe ich diese nicht mehr.
        Soweit ich mich erinnern kann, ging es darum, das wir alle einmal eine Auszeit brauchen "Eskapismus" und wie das auf uns selbst zutrifft.
        Ausserdem sollte die Problematik, wenn man zu viel verdrängt, angesprochen werden.
    </p>
    <h2>Text</h2>
    <p>
        Wer hat nicht das Bedürfnis, einmal abzutauchen, vom drückenden Deutschaufsatz zu fliehen und in ein Buch, das Internet oder in einen Film zu fliehen? Wir alle lenken uns gerne ab. In diesem Text will ich zeigen, wie das auf mich zutrifft.
    </p>
    <p>
        Leider habe ich immer dann das grösste Bedürfnis mich abzulenken, wenn ich am wenigsten Zeit habe. Zum Beispiel jetzt, während dem ich diesen Text schreibe. Eigentlich macht dies auch Sinn, denn wenn ich keinen Stress habe, kann ich mich besser erholen. Sowieso, wenn ich aus dem Alltag entfliehe, bin ich meistens erschöpft. Doch was mache ich überhaupt in einer solchen Pause?
    </p>
    <p>
        Oft lege ich mich einfach kurz ins Bett, besonders etwa, wenn ich weiss, dass ich eigentlich jetzt etwas anderes machen sollte. Allerdings schlafe ich nicht, sondern ich liege einfach herum, in meine Decke eingewickelt wie ein unschuldiges Kind. So liege ich dann meist für zwei bis drei Minuten, während dem ich an nichts denke. Interessanterweise führt dieses «an nichts denken» dazu, dass mich meistens plötzlich eine packende Idee trifft, an die ich mich dann hochmotiviert daranmache.
    </p>
    <p>
        Es gibt auch andere Fälle, etwa nach der Schule. Dann bin ich einfach oft zu müde für alles, was ich dann gerne mache, ist zum Beispiel mich hinzulegen und YouTube zu schauen. Es ist nicht wirklich eine sinnvolle Verwendung meiner Zeit und erholsam ist es auch nicht wirklich. Trotzdem kann ich so meine Gedanken loslassen.
    </p>
    <p>
        Ein ganz exotischer Weg sich der Realität zu entziehen ist für mich zu programmieren. Ja, wenn ich etwas programmiere kann ich komplett ausschalten und mich auf das, was ich programmiere fokussieren. Wahrscheinlich liegt das daran, dass ich währenddessen komplett mit logischem Denken beschäftigt bin und somit keine Kapazitäten mehr habe, um an anderes zu denken. Die Zeit verfliegt dabei oft auch wie im Flug. Es ist ein Gefühl, dass ich nicht beschreiben kann und wahrscheinlich auch nur schwer vorstellbar ist. Vielleicht ist es mit dem Lesen eines spannenden Buches vergleichbar, man versinkt in der Geschichte und vergisst die Realität.
    </p>
    <p>
        Ich lese auch gerne, allerdings ist das etwas, das ich viel zu selten mache. Ich geniesse es, in einem Buch zu versinken, in eine andere Welt einzutauchen und das hier und jetzt zu vergessen. Ich sollte definitiv mehr lesen, gleichzeitig hasse ich es aber auch auf Bücherjagd zu gehen. In einem Bücherladen oder der Bibliothek springen mich die Bücher nicht einfach an, ich weiss aber auch nicht nach was ich suchen soll oder lesen will.
    </p>
    <p>
        Gamen ist etwas das ich zwar durchaus auch mache, allerdings weniger, um mich bewusst abzulenken. Natürlich, ich versinke auch in eine andere Welt. Ich sehe aber nicht als Ablenkung, vielleicht auch, weil ich ein Ingenieur bin. Das wirkt sich auf die Wahl der Spiele aus, mir persönlich machen Shooters nicht gleich viel Spass wie ein Konstruktionsspiel.
    </p>
    <p>
        Ich bin ein Mensch, der schnell ermüdet. Dafür kann ich auch hoch konzentriert sein. Dies wirkt sich auch auf mein Verhalten in Bezug auf Eskapismus aus. Ich brauche auch eher viel Erholung, und Ablenkung ist meiner Meinung nach eine gute Erholung, die so gut wie immer funktioniert.
        Jetzt muss ich aufhören mit diesem Text, denn ein Freund hat mich gefragt, ob wir zusammen in die Welt eines Games versinken wollen.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/eskapismus.html</link>
    </item>
<item>
        <title>In der anderen Wolke 1</title>
        <description><![CDATA[ Eine Kurzgeschichte aus meiner Schulzeit über eine Veränderung einer Person. ]]></description>
        <content:encoded><![CDATA[ <p>
        Diese Kurzgeschichte habe ich in der Schule geschrieben. Ich finde es immer schade, dass diese Texte einfach verloren und vergessen gehen. Deshalb habe ich entschieden, sie hier auf meiner Website zu sammeln.
        Es sind bei weitem keine Meisterwerke, aber alles in allem bin ich dennoch stolz darauf.
    </p>
    <h2>Text</h2>
    <p>
        Es ist morgen, der Wecker klingelt. Wieso der Wecker? Ich hatte doch kein Wecker gestellt. Es ist erst 6:40? Wie auch immer, ich könnte genauso gut auch schon jetzt aufstehen. Ich sprang aus dem Bett und lief zu Kleiderschrank. Irgendwie fühlt sich das Zimmer fremd und bekannt zugleich. Der Kleiderschrank war zwar gross, aber doch seltsam leer. Nur 3 graue, langweilige Anzüge. Ich suchte vergeblich nach etwas farbigem. Gleichzeitig, wieso sollte ich auch mehr besitzen? Ich zog immer den gleichen Anzug an, da brauchte ich nicht mehr verschiedene Kleider. Irgendetwas stimmte nicht. Dieser Gedanke kam eindeutig nicht von mir. Genauso wie ich wusste, dass der Fluss vor dem Fenster Bünz hiess. Ich war nie zuvor hier und doch fühlte ich mich wie zuhause. Wie auch immer, ich nehme die Treppe ins Wohnzimmer und schaue mir die Küche an. Alles war sehr sauber und aufgeräumt, nichts ausser diesem ollen Fonduetopf stand herum. Ich durchsuchte die ganze Küche, fand aber nichts, was mir gefiel. Keine Früchte und Beeren, nur trockenes Müesli mit Joghurt. Das tut es zur Not aber auch. Eine Zeitung lag auf dem Tisch. Mehr aus Langweile öffnete ich sie und las den ersten Artikel. Eigentlich ist es ganz in Ordnung, was man da erfährt. Ich war gerade mitten im zweiten Artikel, als das Telefon klingelte. «Grüezi Herr Mehlmann,» tönte es. Heisse ich aber nicht Lehnam? Ich weiss es nicht, und es beunruhigte mich zutiefst. «Geht es ihnen gut? Die Besprechung hat schon vor 5 Minuten angefangen und Sie sind sonst doch immer pünktlich.»
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/kurzgeschichte1.html</link>
    </item>
<item>
        <title>Why I blog</title>
        <description><![CDATA[ Why do I write a blog? To get real, human-made content out to the wild. ]]></description>
        <content:encoded><![CDATA[ <p>
        The web is full of low quality websites. SEO-Sites just made to attract people without providing them with
        anything but a text ChatGPT could write better. It has come to the point that I sometimes skip sites that
        aren't stackexchange, wikipedia or reddit. And then it struck me: They are better because their texts come
        from a human. Or at least a human that's not driven by commercial interests. Some time later, I was browsing
        the web and found this <a href="https://mitchellh.com/zig">blog</a> with articles about zig compiler internals.
        At the time I was doing some research about zig's <code>MultiArrayList</code>. Since I enjoyed the article, I
        wandered off to other articles. Quite pleasant to read. There are still a few good quality websites besides
        stackexchange, reddit and wikipedia, even if they are few. Too few, in my opinion.
    </p>
    <p>
        EDIT: I've found a <a href="https://downloads.webis.de/publications/papers/bevendorff_2024a.pdf?ref=404media.co">paper</a> that seems to confirm this.
    </p>
    <p>
        How do we get away from this? By providing exactly this content that I sometimes miss. For example, I try to
        answer one question on <a href="https://stackoverflow.com">stackoverflow</a> whenever I find an answer that
        helps myself. Other's deserve to get their questions answered too. Of course, in reality I'm too lazy to do
        it every time, but I try.
    </p>
    <p>
        The other thing I decided to do is this: Use the website that I already have and put some content up. It's
        just an experiment. Maybe this will remain the only article. But I set myself the goal of at least one
        article per week, about anything I like. Most likely this will be programming, but maybe also electronics or
        whatever I want. Maybe I'll write a rant like this, or maybe I'll write about my projects. I don't know yet.
        But for some reason it's satisfying to write this.
    </p>
    <p>
        <b>Edit: One year later:</b>
        Obviously, I haven't managed to write even close to one article per week. But still, occasionally, I'll upload
        something I've written at midnight on a saturday evening when I'm almost falling asleep and my grammar is beyond terrible.
        I enjoy it though, and I feel like it has grown to a nice collection of pages. I get that they are maybe only interesting
        for me, but I don't care. Rant over.
    </p>
    <p>
        <b>Edit: Two years later:</b>
        "AI" slop hasn't made the whole situation better either. Also, the content on my website is probably not that good to really make a difference. At least it helps to feed ClosedAI's LLMs so the "AI" slop increases in quality.
    </p>
    <p>
        If you want to watch what I intended to express here, watch <a href="https://www.youtube.com/watch?v=V5wLQ-8eyQI&t=410s">this</a>.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/why.html</link>
    </item>
<item>
        <title>Salt Fiber SMTP</title>
        <description><![CDATA[ Salt Fiber does not allow SMTP traffic on port 25 despite talking about it on their website and having settings related to it in on the router, ]]></description>
        <content:encoded><![CDATA[ <p>
        Since a few months, I've been getting more spam emails. While manageable, I have been wondering from where they have got my address.
        The easiest way to figure that out would be to have one unique email address per service I sign up. If I start receiving spam on one address, I can associate it with the service that has given my address to spammers. Using a catch-all, I can even make up addresses on the spot.
    </p>
    <p>
        And because I'm sometimes a bit crazy, I decided to selfhost the email server. Many people recommend against it, but I only really need receive capabilities, so it should not be as bad. I was wrong.
    </p>
    <p>
        Many ISPs block port 25 TCP outgoing to avoid having spammers on their network. Ingoing should not need to be blocked though, and that is all I need for receiving email.
    </p>
    <p>
        However, my ISP <a href="https://www.salt.ch/en/home/internet-fiber">salt fiber</a> block all traffic involving port 25. While unnecessary, I'd be fine with that if they didn't pretend that it should work.
    </p>
    <p>
        First, you can create a NAT rule for port 25 without any issues. At least a warning would be appropriate here.
    </p>
    <img src="images/salt_fiber_nat_smtp.png" alt="salt fiber box nat setting for smtp  (expert mode->network->NAT->Port Mapping">
    <p>
        Second, the firewall settings even suggest you can allow outgoing traffic on port 25:
    </p>
    <img src="images/salt_fiber_firewall_smtp.png" alt="salt fiber box firewall settings allow smtp on port 25 (expert mode->network->firewall->firewall->Allow TCP port 25 (SMTP))">
    <p>
        And to make it even more confusing, as of the 10.9.2024, their <a href="http://web.archive.org/web/20240910145237/https://www.salt.ch/en/help/home/internet">own website</a> mentions SMTP as one protocol that can be configured on their router:
    </p>
    <img src="images/salt_fiber_confusing_faq.png" alt="salt fiber website faq regarding SMTP">
    <p>
        Yes, that page says IPv6, but I assume it should also apply to me. I'm still an <a href="https://sacha.horovitz.ch/ipv4-et-ipv6-avec-salt-fiber/">old IPv4 customer</a> without IPv6 (in 2024!) and for the remaining protocols, what is listed has been true up to now.
    </p>
    <h2>TLDR</h2>
    <p>
        No, it is not possible to run even a receive-only mail server on salt fiber since all tcp traffic on port 25 for SMTP is blocked in both directions. This is despite multiple pieces of evidence in their products and documentation suggesting it is possible.
    </p>
    <p>
        If you need a better ISP in Switzerland, go to <a href="https://www.init7.net/">init7</a>. I don't know if you can do SMTP, but at least they know what they are doing.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/salt-smtp.html</link>
    </item>
<item>
        <title>text-art minimalism web design</title>
        <description><![CDATA[ A presentation of my favorite websites using text-art minimalism as a style. ]]></description>
        <content:encoded><![CDATA[ <b class="header"># text-art minimalism in web design</b>
    <p>
        Personally, I'm a huge fan of minimalistic web design.
        Taken to its extremes, this can look quite brutal, as for example the <a href="https://motherfuckingwebsite.com">motherfuckingwebsite</a> shows.
        Still, I often prefer such sites over a fancy-looking but slow-loading alternatives.
    </p>
    <a href="https://motherfuckingwebsite.com"><img src="images/text-art/mfw.png" alt="https://motherfuckingwebsite.com"></a>
    <p>
        Going further, I think it is possible to do much more than the motherfuckingwebsite using just text by treating text
        as something that can be shaped into art. With a little effort, this can drastically improve the impression a website leaves,
        even if it uses nothing more than text and how it can be arranged and styled. I've been calling this style text-art minimalism.
    </p>
    <p>
        Below I'd like to present some of my favorite websites that employ text-art minimalism. If a website
        changed and doesn't look the way I've been describing it here, it might be worth searching it in the internet archive with a date around June 2025.
    </p>

    <a href="http://ianhenderson.org" class="noadeco"><b class="header">## ianhenderson.org</b></a>
    <p>
        Ian Henderson's <a href="http://ianhenderson.org">website</a> is definitely very close to the bare minimum of unstyled HTML the
        motherfuckingwebsite uses. However, he does a few smart things to make it more appealing. At the top of his start
        page, he uses ASCII art as an image, breaking up the dry list of links. He also avoids ginormous h1, h2 or h3
        tags that take away much of the attention. This might not be 100% semantically correct, but it shifts attention to the links to pages instead of the section headers. It also makes the page pleasantly
        compact.
    </p>
    <a href="http://ianhenderson.org"><img src="images/text-art/ianhenderson.png" alt="http://ianhenderson.org"></a>

    <p>
        When opening one of his <a href="http://ianhenderson.org/2025-04-03-post-links.html">blog
        entries</a>, I like how page
        navigation is done. It is a simple backlink to the start page, but given the site's navigation structure, that
        is all it needs. The link doesn't draw much attention, but you find it quickly when you need it. You also don't
        have to wait for a menu to expand before you can take the link, it is just there.
    </p>
    <a href="http://ianhenderson.org/2025-04-03-post-links.html"><img src="images/text-art/ianhenderson-blog.png" alt="http://ianhenderson.org/2025-04-03-post-links.html"></a>

    <a href="https://yaml.org" class="noadeco"><b class="header">## yaml.org</b></a>
    <p>
        Going a step further, the YAML specification hosted at <a href="https://yaml.org">yaml.org</a> introduces color and structure as a way to shape text. Using
        these two, you don't even notice that it uses one constant font size and margin throughout the whole page. The
        page is still very much readable, and it is clear what is a header and what is content.
    </p>

    <a href="https://yaml.org"><img src="images/text-art/yaml.png" alt="https://yaml.org"></a>

    <p>
        The way it plays with structure reminds me of Eugen Gomriger's poem "schweigen" (in English: "to remain
        silent"):
    </p>
    <pre>schweigen schweigen schweigen
schweigen           schweigen
schweigen schweigen schweigen</pre>


    <a href="https://www.franzhohler.ch" class="noadeco"><b class="header">## franzhohler.ch</b></a>
    <p>
        To build on the more poetic usages of text, the website of the Swiss author Franz Hohler also fits this list.
        Not only does the page start with an essay that would fully fit this post, but the design does just as much.
        When you first load the page, you are just presented with a wall of text. There is nothing else to focus on but
        the text, so you inevitably start reading it. And hopefully, you get drawn in, because in my opinion Franz
        Hohler writes very well.
    </p>

    <a href="https://www.franzhohler.ch"><img src="images/text-art/franzhohler.png" alt="https://www.franzhohler.ch"></a>

    <p>
        At the bottom of the page, there is a link that brings you to the actual page. However, that link is not just a
        normal link, it is an ugly scribbled red dot you have to click. The dot changes shape and size once you
        approach it with your cursor. A horrible user experience, but it is playful and fits the tone of the site.
        The website suddenly breaks in its minimalism, but this is done with great effect.
    </p>
    
    <p class="franz-hohler-link-container">
        Try it: <a href="https://www.franzhohler.ch" class="franz-hohler-link"></a>
    </p>

    <p>
        Lastly, this site also plays with margin and font. It is subtle, but has a great effect on readability and
        appearance.
    </p>

    <a href="https://zfs.rent" class="noadeco"><b class="header">## zfs.rent</b></a>
    <p>
        Minimalism and a focus on text might not appeal to everyone, and as a business site it might look
        unprofessional. But this doesn't mean you can't use text to great effect, as for example zfs.rent shows. The page
        uses other styling elements like colored areas, borders and horizontal dividers, but most of the work is done
        with text.
    </p>
    <a href="https://zfs.rent"><img src="images/text-art/zfs.rent.png" alt="https://zfs.rent"></a>

    <p>
        In the screenshot below, I've edited their HTML to remove all colors and borders. In my opinion, it still works
        well.
    </p>
    <img src="images/text-art/zfs.rent.unstyled.png" alt="https://zfs.rent with some styling removed">

    <b class="header">## text-art and video</b>
    <p>
        Text-art is not just limited to static text like on HTML pages. It can also be used to great effect with video.
    </p>
    <iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/SWBkneyTyPU?si=vKASvzMbnfBJ3dzT" title="YouTube video player" allow="autoplay; encrypted-media; picture-in-picture;" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> ]]></content:encoded>
        <link>https://yurix.ch/blog/text-art-minimalism-design.html</link>
    </item>
<item>
        <title>Reproducing Cadmium Sulfide Light Dependent Resistor Transistors</title>
        <description><![CDATA[ In this article I try to reproduce Nyle Steiner's LDR-Field-Effect-Transistor Experiment using the materials I
    have available. ]]></description>
        <content:encoded><![CDATA[ <p>
        I've been dreaming of building transistors and integrated circuits at home since a long time. A while ago, I
        found Nyle Steiner's article about <a href="http://sparkbangbuzz.com/cds-fet/cds-fet.htm">using an LDR (light
        dependant resistor) as an improvised field effect transistor(FET)</a>. Since I had all components to try and
        reproduce this experiment at home, I set the circuit up and took some measurements.
    </p>

    <h2>Test Circuit</h2>
    <p>
        The LDRs I used have a resistance between 5 kΩ and 10 kΩ and are made out of cadmium sulfide like Nyle
        Steiner's. To prevent shorts, I used another 2.2 kΩ resistor in series with the LDR. A circuit diagram can be
        seen below.
    </p>
    <img src="images/ldr_fet_circuit.png" alt="The circuit used to test the LDR-FET">
    <p>
        Depending on the exact measurement, the polarity of the 30V power supply was reversed.
        Additionally, I couldn't go above 30V, because that's the max my power supply can deliver. I can imagine that
        you will need a higher voltage to get better results. Neil Steiner talks about upt to 175V in his
        experiments, although it is unclear what lead to the best results. Maybe I'll build a voltage booster in the
        future, as the currents that flow aren't very high.
    </p>
    <img src="images/ldr_fet_setup.jpeg" alt="The chaotic breadboard setup used to test">

    <h2>Results</h2>
    <p>
        Obviously the experiments were carried out in complete darkness to avoid influences of light. That's also why
        you only see the screen of the oscilloscope on the images.
    </p>

    <img src="images/ldr_fet_positive_gate.jpeg"
         alt="Oscilloscope readings from the circuit using a positive gate voltage. There is a positive response on the rising and a negative response on falling edges, but it converges back to the initial state.">
    <p>
        Using a positive gate voltage (blue line) triggers a small response on the edges. The power supply voltage is
        +30V and the battery around 8V.
    </p>

    <img src="images/ldr_fet_negative_gate.jpeg"
         alt="Oscilloscope readings from the circuit using a positive gate voltage. There is a positive response on the rising and a negative response on falling edges, but it converges back to the initial state.">
    <p>
        Using a positive gate voltage (blue line) triggers a small response on the edges. The power supply voltage is
        +30V and the battery around 8V.
    </p>

    <img src="images/ldr_fet_negative_gate_different_voltage.jpeg"
         alt="Oscilloscope readings from the circuit using a negative gate voltage. There is a positive response on the rising and a negative response on falling edges, but it converges back to the initial state. By using different gate voltages, we get different responses">
    <p>
        Using a negative gate voltage (blue line) triggers a small response on the edges. The battery voltage is
        around 8V. The power supply(gate) voltage has been changed from 30V(left side) down to 15V(right side). It
        can be seen that a lower voltage leads to a smaller response on the edges.
    </p>

    <p>Without the water, no effect can be observed.</p>

    <h2>Discussion</h2>
    <p>
        Looking at the data, it isn't clear whether it is a FET that we are observing. There are only changes on the
        edges, not while holding a voltage level. These spikes immediately fall back to the normal level. I could
        imagine that this is capacitance or inductance, but I don't know electronics well enough to confirm or deny
        it. It is weird that the effect isn't the same for positive and negative edges though.
        On the other hand, Nyle Steiner mentions that he observes a similar effect:
    </p>
    <blockquote cite="http://sparkbangbuzz.com/cds-fet/cds-fet.htm">
        The response of this device also seemed to have a dynamic characteristic. That is, whenever the reversing switch
        was activated, the current through R2 would suddenly change and then slowly creep back toward the previous
        value. By running a sawtooth waveform into the gate however, I was able to establish to my satisfaction, that
        indeed the output current was responding to the input voltage.
    </blockquote>
    <p>
        However, his article doesn't provide enough data to see if this is the same effect. Since I don't have a wave
        generator available, I can't check if it works better with waveforms, like Nyle Steiner did it.
    </p>


    <h2>Conclusion</h2>
    <p>
        While an effect can be observed when the gate voltage changes, it is unclear to me if it is caused by a FET
        effect. Perhaps the higher voltage Neil used in his experiments makes a difference, but I can't test it since I
        don't have access to a power supply providing more than 30V.
    </p>

    <p>
        <b>
            EDIT: Looking at the graphs again with a better understanding of electronics, they look exactly like
            capacitors charging and discharging. A MOSFET or this improvised LDR-FET do also act as capacitors since
            they contain two conductors (the LDR's resistance is still close to a conductor) separated by an isolator
        </b>
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/ldr-fet.html</link>
    </item>
<item>
        <title>A screenshot is better than a thousand Words for debugging</title>
        <description><![CDATA[ TLDR: When troubleshooting issues with a web app, please include enough information so others can understand your diagnosis when asking for help. You are more likely to get help, and it makes everything much faster, ultimately benefiting you. The best way to do that is in my opinion to just post a screenshot of your problem. ]]></description>
        <content:encoded><![CDATA[ <p>
        <i>Attention: rant incoming - Please don't feel offended if I send this to you, it's just that after the hundredth message like the one below I have lost the patience writing the same thing over and over again.</i>
    </p>
    <p>
        As a contributor and developer of the <a href="https://eveseat.github.io/docs/">SeAT</a> eve corporation and alliance management tool, I frequently interact with users that have to troubleshoot problems with the application. A common pattern in these support requests is that they look something like this:
    </p>
    <blockquote>
        I can't access (data provided by an upstream API) on the web UI and I get an error saying the request is too long. I've increased the maximum request length in my nginx settings, but it doesn't help.
    </blockquote>
    <p>
        From this message, I see that:
    </p>
    <ol>
        <li>You have a problem</li>
        <li>It looks like it has something to do with an HTTP request from the browser.</li>
        <li>You changed something and it doesn't help</li>
    </ol>
    <p>
        This is just not enough so that I can provide assistance. I therefore need to ask for more context if I even write back.
        Most likely, I'll ask for the specific error instead of the paraphrased version. I might get a message like this:
    </p>
    <blockquote>
        Request Too Long - The length of the request headers is too long.
    </blockquote>
    <p>
        That message tells me that your action of changing the nginx setting is not completely unreasonable, but since we advise people to install the application behind a reverse proxy, we still don't know if the error is from the reverse proxy or the application itself. A simple snippet of text like this error is often insufficient to tell from where an error originates. Visually, I can tell application errors apart from reverse proxy errors since they use different error page designs. I therefore ask whether the background color of the error is white or a blue-gray. They reply with:
    </p>
    <blockquote>
        It is yellow
    </blockquote>
    <p>
        This is very much confusing. I've never seen a yellow error page with this application. I might think about it for a day and then ask for a screenshot to really confirm it is yellow.
    </p>
    <p>
        The screenshot shows that it is a terminal window. Additionally, besides the error I see a command that displays the logs of the upstream API. It is therefore an error with the upstream API.
    </p>
    <p>
        How is it even possible that it takes this long to figure that out? It is mostly the first message:
    </p>
    <p>
        <q>I can't access the data</q> means the tables that are supposed to display data are empty. They therefore did the correct thing and looked at the logs and reported the error, although paraphrased. However, they never mentioned where they got the error from, making it look like it was in the browser and leading the investigation down the wrong way.
    </p>
    <h2>How it could have been</h2>
    <p>
        Even still using the same, suboptimal text message, the screenshot could be attached alongside the message from the start. This would have immediately changed the following things:
    </p>
    <ul>
        <li>The error is not in a browser</li>
        <li>It is from the upstream API since the screenshot inadvertently provides the missing hint that I am looking at the API logs</li>
        <li>One roundtrip to get a non-paraphrased error message could be saved.</li>
        <li>Your nginx fix cannot work since API requests don't go through nginx.</li>
    </ul>

    <h2>Conclusion</h2>
    <p>
        This is just one made-up and of course exaggerated example, but I've experienced multiple situations where simply including a screenshot would have helped massively.
    </p>
    <p>
        Going forward, <b>please just include a screenshot of the thing that makes you think something is wrong</b> alongside your diagnosis of what is wrong, so I can check if it makes sense. Ultimately, it will help you!
    </p>
    <p>
        <s>Of course, this article is intentionally without any screenshot as illustrations :)</s>
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/give_me_a_screenshot.html</link>
    </item>
<item>
        <title>Eve ESI Quirks</title>
        <description><![CDATA[ Some missing parts of the EVE Online ESI API documentation CCP doesn't care to fix. ]]></description>
        <content:encoded><![CDATA[ <p>
        <b>Update: I no longer actively play EVE, but I've been told the situation has improved. This page is mainly for historical reference.</b>
    </p>
    <p>Use the creator code <code>RECURSIVETREE</code> during checkout on the <a href="https://store.eveonline.com" target="_blank">eve store</a> to support me with up to 5% of your purchase :)</p>
    <p>
        If you are new to EVE Online third party tool development and excited to get started with using ESI, I must unfortunately disappoint you.
        ESI is in <a href="https://esistatus.com/">on fire</a>.
        CCP doesn't invest nearly as much time into maintaining and documenting ESI as it is required for smooth operations.
        You can count yourself lucky if they fix an endpoint after it goes down, but fixing old bugs or updating the documentation just doesn't happen.
        At least, this has been the case in the past years (I'm writing this in November 2024).
        With this post, I aim to share some undocumented behaviours and tricks that could be useful for others.
    </p>
    <h2>/markets/{region_id}/orders/</h2>
    <p>
        For citadels, this endpoint returns buy orders with a larger range than just the citadel itself. Sell orders and buy orders within a citadel are not returned. To get a complete picture of the market in a region, combine this endpoint with scrapes of citadel markets using the citadel market endpoint.
    </p>
    <h2>/markets/{region_id}/history/</h2>
    <p>
        There are invisible, undocumented rate limits on this endpoint. If you exceed them, you can get banned. A safe value is around 100 requests per minute.
    </p>
    <p>
        Also, please don't even ask why they have undocumented rate limits...
    </p>
    <h2>Structure Names</h2>
    <p>
        To get the name of a citadel from a location_id, for example from the assets endpoint, you can use the /universe/structures/{structure_id}/ endpoint. However, when you can't docke there, this endpoint doesn't work and there is no other way to get the name of the structure.
    </p>
    <h2>SSO</h2>
    <p>
        Apparently, requesting ALL scopes can trigger an error <code>400 - Request too long</code>. The only fix is to remove a few scopes.
    </p>
    <p>
        The same can happen if you select "remember me" on too many accounts.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/esi-quirks.html</link>
    </item>
<item>
        <title>Traefik+k3s: What they don't teach</title>
        <description><![CDATA[ While traefik is per default shipped with k3s, the configuration is not ready to be used out of the box when TLS is
    desired. ]]></description>
        <content:encoded><![CDATA[ <p>
        I run a VPS with <a href="https://k3s.io/">k3s</a> for a few personal projects. k3s includes <a href="https://traefik.io/traefik/">traefik</a>, a reverse proxy, per default. However, I've kind of struggled how to actually use it. k3s docs go as far as to say it is included and you should manage it with helm. Traefik docs are generally a bit lacking, and since it support docker compose, kubernetes and everything imaginable, it is also sometimes a question of figuring out how to specifically solve a problem on kubernetes.
    </p>
    <p>
        The goal of this article is to explain the configuration required to use traefik on k3s with TLS.
    </p>
    <h2>Enabling TLS</h2>
    <p>
        The first step is to configure the let's encrypt acme provider for tls certificates. For this, we have to add a `HelmChartConfig` resource object. In it, we can override the helm chart options. For let's encrypt certificates, we have to specify a certificate resolver linked to the let's encrypt website, and a contact email. See the config below:
    </p>
    <pre>
        <code>
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    additionalArguments:
      - "--certificatesresolvers.letsencrypt.acme.email=email@you.com"          # <--- here: add your email
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.caServer=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json"
        </code>
    </pre>
    <h2>TLS persistence</h2>
    <p>
        While the config from above is enough to get and use a certificate, the certificate is not stored persistently. This means that whenever the traefik pod restarts, a new certificate is rerequested, until eventually the <a href="https://letsencrypt.org/docs/duplicate-certificate-limit/">duplicate certificate limit</a> of only 5 certificates/week is reached. In that case, you won't get any certificates anymore!
    </p>
    <p>
        However, there is an easy fix: the certificates can be stored in a persistent volume claim. This can be done with the following addition:
    </p>
    <pre>
        <code>
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    persistence:                    # <--- here: persistence setting
      enabled: true                 # <--- here: explicitly enable persistence
      storageClass: local-path      # <--- here: specify a storage provisioner for the certificate
    additionalArguments:
      - "--certificatesresolvers.letsencrypt.acme.email=recursivetreemail@gmail.com"
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.caServer=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json"
        </code>
    </pre>

    <h2>Using traefik as a reverse proxy</h2>
    <p>
        Traefik can use the gateway and ingress ingress system, but they are a bit awkward to use compared to the alternative, CRDs. HTTP routing is done using a IngressRoute object:
    </p>
    <pre>
        <code>
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: name
spec:
  entryPoints:
    - websecure                     # <--- here: websecure for https, web for http
  routes:
    - match: Host(`example.com`)
      kind: Rule
      services:
        - name: backend-service     # <--- here: The name of the service all traffic should be forwarded to.
          port: 8000
  tls:                              # <--- here: only required on https
    certResolver: letsencrypt       # <--- here: only required on https
        </code>
    </pre>
    <p>
        In general, IngressRoute is surprisingly well-documented in the traefik docs.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/traefik-k3s.html</link>
    </item>
<item>
        <title>Announcing Greed 5.0</title>
        <description><![CDATA[ The newest release of greed. ]]></description>
        <content:encoded><![CDATA[ <p>
        GreedCo is very happy to announce the latest release of our product, Greed version 5.0! This new version of greed is
        even greedier than Greed 4.0 and shows how we are on target of becoming the fastest growing startup since Greed 4.0.
    </p>
    <p>
        What's new in Greed 5.0:
    </p>
    <ul>
        <li>We added enshitification.</li>
        <li>A new subscription-driven AI vendor lock-in for consumers</li>
        <li>New strengthened walls for our walled garden</li>
        <li>500% growth in terms&service contract words</li>
    </ul>
    <p>
        Install it now!
    </p>
    <small>Page based on a joke from the NetBSD IRC server.</small> ]]></content:encoded>
        <link>https://yurix.ch/blog/greed5.0.html</link>
    </item>
<item>
        <title>Makefiles for website generation</title>
        <description><![CDATA[ Makefiles can be a solution for generating a website with diverse content generation methods. ]]></description>
        <content:encoded><![CDATA[ <p>
        Over time, I've been accumulating various small websites that I want to keep online on the same domain as this blog. This can be everything from an
        <a href="/eatlessenergy">old project</a>, the <a href="/fllcounter/documentation.html">documentation</a> for a
        file format, to a random patch file that needs to be accessible over HTTP. Most of these things don't deserve
        their own domain or subdomain, but I still want to keep them online. They feel just about right to stuff in a subdirectory.
    <p>
        I use simple static files for yurix. Other parts, like this blog article, use a script to generate static pages.
        The pages generated by scripts also use all kinds of scripting languages and frameworks. In short: not only the content is diverse,
        the way that content is built is diverse too. In the end, I have to assemble it all into one directory before uploading it
        to my hosting provider via FTP.
    </p>
    <p>
        This assembly step has been manual and error-prone until now. I've always wanted to automate it, but the diversity in the way the content is being generated means the automation framework needs to be very flexible.
    </p>
    <p>
        I've considered using bash scripts. The issue with that is that it takes quite long to assemble everything. You don't have any parallelism and everything has to be redone all the times. Full rebuilds are not always necessary, and adding a simple missing comma shouldn't take what feels like ages before I see the change in the browser. I want incremental rebuilds.
    </p>
    <p>
        The solution I found is a Makefile. While Makefiles are mostly known for being used for building C applications, they actually just specify shell commands and their dependencies. That can be a C compiler or a linker, but you can also call a python script or simply <code>cp</code> to copy a file. The shell gives me the flexibility of calling any possible tool I could use for the website. It also feels easy to use because I usually invoke these tools on the CLI anyway.
    </p>
    <p>
        On top of that, you can specify dependencies of files for incremental rebuilds. After fixing a typo, I can rebuild and reload the page in 100ms. It is sometimes a bit hard to figure out and specify all dependencies of an output, but I've yet to encounter a situation where it wasn't possible.
    </p>
    <p>
        You can even use other build systems from a Makefile. Just call the build system from your Makefile. It is all shell. If your build system supports incremental compilation, you can also instruct Make to always call the build system so it can check if it has to do incremental updates. That way, you can avoid two incremental systems fighting each other because one thinks the other has to update, while the second thinks it doesn't have to.
    </p>
    <p>
        Makefiles might sound a bit old-fashioned, but they are actually really useful to wrap incremental compilation around basically everything.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/makefiles-for-web.html</link>
    </item>
<item>
        <title>Sky2d - My first big programming project</title>
        <description><![CDATA[ Sky2d is one of my oldest programming project, dating back to around 2017. It is a 2D, factorio-like and minecraft-inspired
    game. ]]></description>
        <content:encoded><![CDATA[ <p>
        When I learned programming, one of my first project was to develop a game. The idea was to take modded skyblock minecraft
        and turn it into a 2D-game (This is maybe also the name, cough cough..). I envisioned it to be quite similar to factorio.
    </p>
    <p>
        At the time, I only had a Raspberry Pi Model 3b with a tiny, terribly bad screen as a computer. This did influence the game
        quite drastically: The windows size of the game is fixed to 256 by 256 pixels. On my screen back then, this was perfectly fine,
        but on a better, larger screen it is a bit small. However, this size is hardcoded into the UI and I don't dare to try and fix it.
        Here is that screen:
    </p>
    <img src="images/screen_vs_ipad.jpeg" alt="A size comparison between the screen and a IPad: The IPad is much bigger">
    <p>
        Today I can't believe I spent countless hours on that tiny screen, but I was a broken 12-year-old back then.
        In der Not frisst der Teufel Fliegen goes the German saying.
    </p>
    <h2>Gameplay</h2>
    <p>
        Walking is done using WASD. At the top, you see your inventory. You can change the active item stack with the numbers 0 to 9.
        Blocks are placed using a left click and mined using a right click.
    </p>
    <p>
        In a new game, you start with a few blocks of dirt and seeds. Seeds can be used to grow more seeds and given enough seed, it is possible to craft something from them.
        Generally, you want to start farming seeds by planting a seed onto dirt by left-clicking a seed onto dirt. It will grow and after around 30s,
        drop a stack of 2-3 seeds. You can collect them by walking over them. The following images demonstrate the process:
    </p>
    <img src="images/sky2d/game_start.png" alt="The games as seen when launching a new game. A dirt island, a player with some seeds and a crafting table">
    <img src="images/sky2d/seed_farming.png" alt="The same image, but the player has planted a few seeds">
    <img src="images/sky2d/seed_collecting.png" alt="The seeds have grown and can be collected">

    <p>
        With enough seeds, a tree sapling can be crafted from seeds. For this, right click the crafting table at the bottom of the island.
        You can scroll through the recipes using the right and left arrow keys. Find the tree sapling recipe and craft a sapling.
        Plant the sapling to grow a tree and harvest wood.
    </p>
    <img src="images/sky2d/crafting.png" alt="An image from the crafting screen">
    <img src="images/sky2d/tree.png" alt="Thew first tree has been planted">
    <p>
        The wood can be used to craft more things like composters to compost seeds into more dirt, allowing more farming.
        It is also possible to build chests, automatic seed collectors and a tool table to manufacture tools
    </p>
    <p>
        Using Q, you can open a fancy achievements screen.
    </p>

    <h2>Development History</h2>
    <p>
        After 2 months of intense development in 6th grade, I mostly forgot about it. A complete playthrough lasted about
        5 minutes, depending on how much I speedran it. Even after ceasing to work on theis project, I didn't stop with programming and
        even made another game, carace ("car race") that I might cover at some point.
    </p>
    <p>
        Many years later in 2021, I found the game files on a random USB stick I had lying around. Out of curiosity,
        I decided to try and get it to run. It worked, just as I remembered it. I even decided to finish a few features I was working
        on when I stopped development for the first time. But then again, I put it back and let it rot on my disk.
    </p>
    <p>
        In 2023, I again stumbled over it when sorting my files. Just like in 2021, I couldn't resist the urge to try it out again
        and continue development for an evening.
    </p>
    <p>
        As you can see, this is very much a personal project that has grown to my heart. The code quality is terrible, the game
        is quirky, but I enjoy occasionally working on it, and I'm even somewhat proud having created this game.
    </p>
    <h2>Download</h2>
    <p>
        The game uses many textures stolen from minecraft. As much as I'd like to share it, I don't want to get into troubles for it.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/sky2d.html</link>
    </item>
<item>
        <title>Building XTRKCAD on Apple Silicon</title>
        <description><![CDATA[ XTRKCAD is a Model Railway CAD program that runs on macOS unfortunately only provides intel builds. However, you can build it on your own for arm64 and Apple Silicon. ]]></description>
        <content:encoded><![CDATA[ <p>
        <a href="https://sourceforge.net/projects/xtrkcad-fork/">xtrkcad</a> is probably one of the best free model railroad planners that run on macOS. However, they only provide downloads for older intel-cpu based macs. (the switch to arm by apple was around 2020). You can run xtrkcad in rosetta, a translation layer allowing older intel apps to run on Apple Silicon, but I prefer native builds.
    </p>
    <p>
        Building for apple silicon natively turned out to be a bit more difficult than anticipated.
        The <a href="https://sourceforge.net/p/xtrkcad-fork/wiki/BuildNotes/">documentation</a> is rather sparse.
        Additionally, I'm using homebrew and not macports.
    </p>
    <h2>Installing Homebrew</h2>
    <p>
        This guide heavily uses <a href="https://brew.sh/">homebrew</a>. You should therefore go and install it if you haven't already.
    </p>
    <h2>Building from source</h2>
    <p>
        To build from source, obviously the source code is required. It is stored on the mercurial version control system, not git, like most software is today. Get the source like this:
    </p>
    <pre><code style="white-space: pre-line">   brew install mercurial
                                                mkdir xtrackcad
                                                cd xtrackcad
                                                hg clone http://hg.code.sf.net/p/xtrkcad-fork/xtrkcad src/  </code></pre>
    <p>
        Next is installing all dependencies. The first install command are common libraries that are found on the main brew index. The second line is for a library called Mini-XML. Mini-XML is on brew, but only for a newer, incompatible version. I've created a brew tap(repo) that provides the dependency. here is a <a href="https://github.com/recursivetree/homebrew-xtrkcad/blob/main/Formula/libmxml%403.rb">link</a> to the source code of the tap and here of the <a href="https://www.msweet.org/mxml/">Mini-XML website</a>.
    </p>
    <pre><code style="white-space: pre-line">    brew install cmake gtk+ inkscape libzip freeimage
                                                brew install recursivetree/xtrkcad/libmxml@3    </code></pre>
    <p>
        Finally build the software:
    </p>
    <pre><code style="white-space: pre-line">   cmake -S src -B build
                                                make -j4 -C build
                                                make -j4 -C build install</code></pre>
    <p>
        I've had it happen that the svg to png conversion fails. In that case, remove the build directory and build again. For me, that has always helped.
    </p>
    <p>
        It is also possible that you will run into linking issues about missing libraries. Since homebrew doesn't install libraries in the typical places, some tools have trouble finding them.
        The easies fix I've found is to open <code>src/CMakeLists.txt</code> and add the following line:
        <code>link_directories(/opt/homebrew/lib)</code>.
    </p>
    <p>
        If everything worked, you should now be able to launch the app using the command <code>xtrkcad</code>.
    </p>
    <h3>Bonus - Generating .app Files</h3>
    <pre><code style="white-space: pre-line">   make -j4 -C build package   </code></pre>
    <p>
        A .dmg file will be generated in the <code>build</code> folder that contains the <code>.app</code> file.
        However, I haven't figured out how to include the required dynamic libraries,
        so it will most likely crash when running it on different computers.
    </p>
    <h2>Using my Homebrew tap</h2>
    <p>
        Alternatively, I've built a homebrew formula that automates the above build steps.
        Due to how homebrew works, it was not possible to specify a dependency on inkscape.
        Therefore, it has to be installed manually beforehand.
    </p>
    <pre><code style="white-space: pre-line">   brew install inkscape
                                                brew install recursivetree/xtrkcad/xtrkcad</code></pre>
    <p>
        If everything worked, you should now be able to launch the app using the command <code>xtrkcad</code>.
    </p>
    <p>The source for the xtrkcad formula can be found <a href="https://github.com/recursivetree/homebrew-xtrkcad/blob/main/Formula/xtrkcad.rb">here</a>.
        It performs the same steps as described above, except it applies a <a href="https://yurix.ch/wpref.diff">patch</a> that allows xtrkcad to find its <code>share</code> directory, since again, due to homebrew's design it is located in non-standard places.
    </p>

    <h2>Closing Words</h2>
    <p>
        I know this guide does not have the highest quality. It is more of a note sheet for myself. If you run into any issues or have something to comment, contact me at <a href="mailto:blog@ycloud.yurix.ch">blog@ycloud.yurix.ch</a>.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/xtrackcad-apple-silicon.html</link>
    </item>
<item>
        <title>RSS Feeds</title>
        <description><![CDATA[ The RSS feeds of the yurix blog. ]]></description>
        <content:encoded><![CDATA[ <p>
        This blog provides multiple RSS feeds according to the language of the post.
    </p>
    <ul>
        <li>English: <a href="rss-feed-en.xml">yurix.ch/blog/rss-feed-en.xml</a></li>
        <li>German/Deutsch: <a href="rss-feed-de.xml">yurix.ch/blog/rss-feed-de.xml</a></li>
        <li>All: <a href="rss-feed.xml">yurix.ch/blog/rss-feed.xml</a></li>
    </ul> ]]></content:encoded>
        <link>https://yurix.ch/blog/rss.html</link>
    </item>
<item>
        <title>Minecraft Server With FreeDNS Subdomains</title>
        <description><![CDATA[ Hosting a minecraft server on a free dns provider like FreeDNS is not without issues due to the way mojang implements
    server banning. Luckily, there are solutions. ]]></description>
        <content:encoded><![CDATA[ <p>
        Some time ago, I set up a minecraft server for me and a few friends. We host it on a machine we already had, and where a few other things run alongside it.
        One of these other services is a website using a subdomain from <a href="https://freedns.afraid.org/">FreeDNS</a>. They are a great, free provider of subdomains
        for projects that don't need their own top-level domain. This other services requires reverse DNS to be set up, which is quite important as it turns out.
    </p>
    <p>
        After setting up the server, nobody could join it. There was just a <i>connection refused</i> error. Pinging the server with mcstatus did work though, meaning that the server
        was running and reachable. This looked very strange. Through googling the problem, we found a <a href="https://community.cloudflare.com/t/minecraft-dns-unknown-host/536151/4">discussion</a>
        in the cloudflare forums with the same problem. It turns out that Mojang, the company behind minecraft has banned all subdomains of the FreeDNS top-level domains from being played on in online mode,
        meaning with verification that the player has actually bought minecraft and is not a cracked account. And this is where it starts to matter that reverse DNS is set up for this server: Using reverse DNS,
        Mojang can associate the IP address of your server with the domain that has been blocked. Removing the reverse DNS entry luckily fixes the issue, but figuring this out took quite some time and nerves.
    </p>
    <h2>Rant about wildcard-bans</h2>
    <p>
        Mojang has quite a few reason why they should ban servers, I'm not questioning that. However, I disagree with the way they implement it. Mojang hosts a list of
        <a href="https://sessionserver.mojang.com/blockedservers">SHA-1</a> hashes of domains they ban. This list is quite short, and this is due to the way they ban domains:
        Instead of specifically banning an offending domain, they wildcard-ban the domain and all their subdomains. Wildcard-banning subdomains is an ineffective way to stop banned servers.
    </p>
    <p>
        First, it is not uncommon that minecraft servers use free subdomains provided by FreeDNS and the like. Most people set up a minecraft server to play with their friends, and not to
        publicly host a server. It is therefore by no means required to have your own top-level domain, a subdomain provided by FreeDNS is more than enough for your needs. The problem with wildcard-banning is
        that totally unrelated server that happen to use the same top-level domain are banned aswell.
    </p>
    <p>
        Expanding on that, the error message given in the client is quite vague and doesn't explain the problem. This makes sense from Mojang's point of view, as they want to pretend the server doesn't
        even exist, but from the user's point of view, their server doesn't work with no reason give as to why. Only with a lot of googling and a technical understanding that is beyond that of a typical administrator
        hosting a server for his friends, I was able to pinpoint and resolve the issue. Figuring this out beforehand: No chance, the issue is way to niche and undocumented for this. This is also the reason why I have decided to write this article: To shine some light on the problematic and hopefully help someone with a similar issue.
    </p>
    <p>
        Lastly, banning domains isn't even an effective way of banning server. I could just remove the reverse DNS entry and was able to join via IP address. The domain name of course still didn't work, but you could still join the server. Additionally, a serious ban evader could just buy a new domain and move over to that. it adds some inconvenience, but in the end, the server admin keeps the upper hand in this game of cat and mouse.
    </p>
    <p>
        In conclusion, the collateral damage caused by banning free DNS services causes more harm than it prevents banned servers from operating. Free subdomains are commonly used for private minecraft servers, the symptoms of being banned by Mojangs current system are difficult to detect, and a wildcard-subdomain ban can easily be evaded. My hope is that Mojang revises upon its policies and find a better system of banning servers.
    </p>
    <h2>Resolving the issue</h2>
    <p>
        After this essay-shaped rant (I have to write an essay tommorrow and used this article to get in the right mood), here are a few steps to detect and fix the issue:
    </p>
    <ol>
        <li>
            Check whether your server has reverse DNS enabled. To do this, resolve the IP of your server by running: <code>host yurix.ch</code>.
            The result should look like <code>yurix.ch has address 149.126.4.22</code>. Use this to run a reverse DNS lookup: <code>host &lt;IP from above&gt;</code>.
            This results in a response like <code>22.4.126.149.in-addr.arpa domain name pointer s013.cyon.net.</code>. As you can see, it does not match with yurix.ch. This is good.
            It should no match.
        </li>
        <li>
            If it does match, make sure to check whether you have actually been banned. For this, we need the SHA-1 hash of <code>*.your-top-level-domain.com</code>. The SHA-1 hash can for example be found using
            <a href="https://emn178.github.io/online-tools/sha1.html">this</a> calculator. Next, open the <a href="https://sessionserver.mojang.com/blockedservers">list of banned domains</a> and check whether your hash
            is in the list of blocked domains. If it is, you are affected by the problem described here.
        </li>
        <li>
            The easiest way to fix the issue is to remove the reverse DNS entry. I have tested this, and it seems to work, although it did take more than a day for all DNS caches to expire.
            Alternatively, you could use a different domain that is not banned, or use a IP with no domains pointing to it.
        </li>
    </ol> ]]></content:encoded>
        <link>https://yurix.ch/blog/minecraft-hosting-adventures.html</link>
    </item>
<item>
        <title>Building a Computer from Electronic Components</title>
        <description><![CDATA[ Over the last half year, I've been building my own version of a 16-bit, breadboard glue logic CPU based on a transport-triggered architecture. In this article, I present the current status and what I've learned. ]]></description>
        <content:encoded><![CDATA[ <p>
        Note: This is a newer version of this article. The old article written in the middle of the project can be found <a href="building_a_cpu.html">here</a>.
    </p>

    <p>
        Computer architecture is an interesting topic. While you can learn quite a lot about it by reading books and articles, doing something practical is a bit difficult. Besides the <a href="https://tinytapeout.com/">TinyTapeout</a> project, it is basically impossible to get integrated circuits manufactured as a private customer.
    </p>

    <p>
        However, as for example <a href="https://www.youtube.com/playlist?list=PLowKtXNTBypGqImE405J2565dvjafglHU">Ben Eater</a> and <a href="https://www.youtube.com/playlist?list=PLFhc0MFC8MiCDOh3cGFji3qQfXziB9yOw">James Sharman</a> have shown, it is possible to build a computer out of glue logic chips. They are a group of simple ICs that implement functionalities like logic gates, registers or even adders. While they are not typically used to build CPUs anymore, around the 1970s there have been many CPUs made with them. Today, it is still possible to build a simple computer using glue logic.
    </p>

    <p>
        Over the last half year, I've been building my own version of a glue logic CPU. It is a 16-bit computer using 16-bit words. In total, it has 64 KB of memory organized as 32k 16-bit words. Communication to a "big computer" (e.g. a laptop) can be done over SPI. An Arduino acts as a USB translator. This is also the primary way of loading programs onto the computer.
    </p>

    <img src="images/thecpu_november23.jpeg" alt="image of the cpu I built">

    <h2>Architecture</h2>
    <p>
        This computer is based on a transport-triggered architecture(TTA) very similar to the one described by Douglas W. Jones on his <a href="https://homepage.cs.uiowa.edu/~dwjones/arch/risc/">website</a>.
        A transport-triggered architecture means there is one instruction: Move data. All other operations are memory-mapped. Because there is just one instruction, an opcode can be omitted and an instruction only consists of a source and destination.
    </p>

    <p>
        A group of memory-mapped registers, for example, the operands of the subtraction device, are called a function unit since they help with performing an action, and form one unit.
    </p>

    <p>
        The function units are all connected over the so-called data-bus. This is one long bus that connects all function units. All data movements go through the data bus.
    </p>
    <img src="images/tta_arch_overview.png" alt="sketch of a TTA architecture showing how function units are connected over a bus">
    <p>
        In the picture of the finished CPU, the blue wires are the data bus. As it can be seen, it stretches over the whole CPU and connects many regions.
    </p>

    <h3>Memory-Mapped Function Units</h3>
    <p>
        The computer has the following function units memory-mapped:
    </p>
    <ul>
        <li>subtraction</li>
        <li>unconditional branches</li>
        <li>conditional branches (conditions: all bits set or is negative)</li>
        <li>SPI input and output</li>
        <li>main memory</li>
        <li>swapping the high part of a 16-bit word into the low parts</li>
        <li>breakpoints</li>
    </ul>
    <p>
        With these features, the CPU isn't very powerful and difficult to program, but it is more than enough to e.g. find prime numbers using the sieve algorithm.
    </p>

    <h2>Construction</h2>
    <p>
        The computer is built out of 74-series chips mounted on breadboards. It is wired using hook-up wire and in parts using wire wrap because I ran out of hook-up wire.
        The breadboards are mounted on a piece of wood. This allows me to move the computer around.
    </p>
    <p>
        I've included a few LEDs to visualize important parts of the CPU state. They have proven to be invaluable for debugging together with a single-step mode.
    </p>

    <h2>Programming</h2>
    <p>
        I've created a custom assembler for programming. An example program that can search for primes using the sieve algorithm can be found <a href="resources/cpu/primes.asm.txt" target="_blank">here</a>.
    </p>
    <p>
        Writing the assembler was my first big project using the zig programming language, and you notice it while reading its code. Therefore, I won't share it.
        It isn't particularly interesting though. It parses the file, converts it to an intermediate representation, optimizes immediate values, resolves the labels and emits a binary.
    </p>
    <p>
        Additionally, I started work on a cross-assembler that takes in RISC-V assembly and translates it to assembly for my CPU.
        However, since there is no function unit for binary operations like AND, I doubt I will ever finish it.
    </p>

    <h2>Advice</h2>
    <p>
        It was an interesting experience, and I learned a lot from building this CPU. Here are a few points I want to share with anyone attempting a similar project:
    </p>
    <ul>
        <li>Keep it simple. It will take you long enough to finish the project, so don't make it needlessly complicated. You can always do a second build/upgrade your current one. </li>
        <li>Build small: in retrospect, building it 16-bit wasn't worth it. Going 16-bit means you have to lay twice as many wires per function unit, and laying wires is what took the most time.</li>
        <li>Investing some time to test the computer properly is very much worth it.</li>
        <li>Use program-counter-relative jumps</li>
        <li>
            Don't forget the power supply. You will need to supply your project with power. Ideally, your power
            supply is short-circuit proven. Because I didn't have anything better, I <s>used</s>fried and arduino
            as a USB adapter. Don't do it. Get a lab power supply, resettable fuses, or just anything to protect you.
            While I haven't managed to destroy my CPU with short circuits yet, I managed to create plenty of them.
        </li>
        <li>
            A modular architecture like a transport-triggered architecture is worth it. With TTAs, you can always add and remove function units.
            This allows for some flexibility at the start, not all function units have to be planned completely, or you can even add completely new function units you didn't think about before.
        </li>
    </ul>

    <h2>More Information</h2>
    <p>
        I started this project as my matura project. This is a project I had to do in my final year of high school. Besides actually building the computer, I also had to write a report about it.
        It is way more detailed than this article ever can be. Check it out <a href="resources/cpu/2023_MA_Computer-From-Scratch.pdf" target="_blank">here</a>.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/building_a_cpu2.html</link>
    </item>
<item>
        <title>Hybrid VLAN port on mikrotik</title>
        <description><![CDATA[ This is a minimal example how to configure hybrid VLAN ports on mikrotik devices since I couldn't find any other examples on the internet. ]]></description>
        <content:encoded><![CDATA[ <p>
        While setting up my MikroTik RB5009 router, I wanted to configure a hybrid VLAN port. This took me longer than expected and I didn't get it working just from reading the docs. What I missed the most is a simple example that doesn't configure DHCP and whatever else that is unrelated to the actual problem. To help future me and maybe others, I decided to share a minimal example how to configure hybrid VLAN ports. For an explanation how VLANs work and what hybrid ports are, there are plenty of  better examples in the internet. Just google it.
    </p>
    <p>
        VLAN 10 is for untagged traffic. VLAN 99 is for tagged traffic.
    </p>
    <pre>
        <code>
# ----------------------------------------
# MikroTik Hybrid VLAN port example config
# ----------------------------------------

# create a bridge
/interface bridge
add frame-types=admit-only-vlan-tagged name=bridge1

# add a port to the bridge, set the VLAN for untagged traffic
/interface bridge port
add bridge=bridge1 interface=ether1 pvid=10

# configure the VLAN "routing" table
/interface bridge vlan
add bridge=bridge1 tagged=ether1,bridge1 vlan-ids=99
add bridge=bridge1 tagged=bridge1 untagged=ether1 vlan-ids=10

# add vlan interfaces to test the setup
/interface vlan
add interface=bridge1 name=DEFAULT-VLAN vlan-id=10
add interface=bridge1 name=MGMT-VLAN vlan-id=99

# add IP addresses to test the setup
/ip address
add address=192.168.99.1/24 interface=MGMT-VLAN network=192.168.99.0
add address=192.168.10.1/24 interface=DEFAULT-VLAN network=192.168.10.0

# enable vlan filtering
/interface bridge
set 0 vlan-filtering=yes
        </code>
    </pre>
    <p>
        To test it you can ping 192.168.10.1 for the untagged traffic and 192.168.99.1 for the tagged traffic. You'll have to manually configure the network interfaces on your client device.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/mikrotik-hybrid-vlan-port.html</link>
    </item>
<item>
        <title>Terminus Corporation History</title>
        <description><![CDATA[ Terminus was a small EVE Online corporation that did faction warfare and other shenanigans. Sadly, most members quit,
    but here is its history. ]]></description>
        <content:encoded><![CDATA[ <p>Use the creator code <code>RECURSIVETREE</code> during checkout on the <a href="https://store.eveonline.com" target="_blank">eve store</a> to support me with up to 5% of your purchase.</p>

    <p>
        While going through some files on my laptop, I found a copy of the old terminus <a href="https://github.com/recursivetree/seat-info">seat-info</a> pages. Since this was probably the best time I had in EVE and I want to keep the memories, I decided to publish the chronicles of the Terminus. corporation.
    </p>
    <h2>The Beginning</h2>

    <h3>Jabber & Highsec</h3>
    <p>
        Because it was before my time, I can only say that <i>*magically*</i>, a few guys got
        together as a group. I think they did faction warfare(still with the old mechanics), but it doesn't really matter
        that much. What matters more is that one day, they decided to create
         <i>JabberWock Mining and Industry</i>, a small mining and
        industry corporation in Northern Placid around Osmeden and Adacyne.
    </p>
    <p>
        This was also the time I joined. JabberWock was my first corporation.
    </p>
    <p>
        While I wouldn't join a highsec mining corporation anymore, it was a fun time we spent with orca racing and rock crunching.
    </p>
    <p>
        A bit later, Lucius, until now just a line member, was promoted to leadership, but actually wanted
        to have his own corp AND stay in Jabber. This lead to the creation of the
        alliance  <i>The Faceless.</i> and it's first members, <i>JabberWock Mining
        and Industry</i> and <i>Legion of Terra</i>, Lucius's corp.
    </p>
    <p>
        Some time later,  our beloved raitaru <i>FunkyTown</i> and our pocos got
        wardecced, we had to defend them. This is where everything started. While we were successful with defending FunkyTown and many many newbies like me saw their first blood, it showed
        that the corp had almost no income streams and PVP experience. That had to change, and the wormhole
        project was born.
    </p>

    <h3>The Wormhole</h3>
    <p>
        We did move in a C2 wormhole, built a few capitals (yes, after the patch,
        and all components hauled in with DST, not fun!) and set up a ton of
        Athanors to mine. We had fun (<a href="https://zkillboard.com/kill/94550394/"
                                 newtab>most expensive fax loss in the game</a>), but problems with
        recruiting enough members, so we were unable to respond when threatened to be evicted.
        Realizing we had no chance, we evacuated and sold the structures and
        capitals.
    </p>

    <h2>Terminus</h2>
    <p>
        All that time in the wormhole, we still were part of <i>The Faceless.</i>
        Socially, we were two groups tho, the wormholers and the highsec miners.
        This is why we (the wormholers) decided to split of into a new corp, and
        <i>Terminus</i> was born. The whole wormhole project and the evacuation
        did cost a lot for everyone, and we wanted a place to rebuild, hence we
        decide to rent a system. Because the Beeitnam War was ending around the same
        time, we saw that renting from Legacy Coalition was no good idea, Goons didn't have any space and Horde wasn't an option for other reasons, in the
        end, only Fraternity was really an option. And that's how we moved into
        Branch.
    </p>
    <p>
        While the PVE content was good, in terms of PVP, Branch had nothing to
        offer, so we moved into facwar while keeping a foot in null.
    </p>
    <h2>Faction Warfare</h2>
    <p>
        Our first staging area was in Slays in Southern Placid where we terrorized the area of Iges, Uphallant, Covryn, Dastryns and sometimes even Ostingele. It was also the time we started to make friends with Cynosural Field Theory.
    </p>
    <p>
        When content started to drown in Southern Placid, we moved up to Northern Placid and the Maut pipe to fight the newly formed United Caldari Navy caldari faction warfare alliance from <a href="https://zkillboard.com/kill/100978541/">Nayrok</a> <a href="https://zkillboard.com/kill/85431726/">the</a> <a href="https://zkillboard.com/kill/100931228/">freighter</a> <a href="https://zkillboard.com/kill/100801548/">feeder</a>. This provided some content for a while.
    </p>
    <img src="images/salt_mining_ucn.jpg" alt="terminus is mining UCN salt using mining barges">
    <p>
        I don't know when exactly, but around that time, we also abandoned nullsec. We didn't use it nearly enough and our landlords demanded more rent, while doing nothing against BOSS roaming from Venal. In hindsight, it was probably due to their terrible organization: They didn't notice we left until three months later because the bills haven't been paid. Additionally, they never kicked us from their discord, but messed up the permissions to that I could impersonate Noraus, the Fraternity leader and ping @everyone in #announcements. I can't find screenshots of it anymore though. Fun times.
    </p>
    <p>
        During summer 2022 we also made a deployment into syndicate, but I was on holidays.
    </p>
    <p>
        In autumn, things started to happen: We were again down in the Slays area and wanted to kill a enemy Astrahus with a coalition of galmil corporation. Uniting galmil was difficult and our agreement to work together fragile. Anyways, we were successful and killed the astra, but our ally JREX FC youngpuke wasn't happy at all because "we were not supposed to win and only there for the content", "we batphoned and lost our honor" etc. We were allies up to now despite a complicated history, but that day we and our friend the potato alliance decided to just leave galmil. We had enough.
    </p>
    <p>
        And this is how Terminus started to collapse: By winning an astrahus timer.
    </p>
    <h2>Pandemic Horde</h2>
    <p>
        Since everyone was kind of exhausted at this point, we decided to take a break and join Pandemic Horde. However, just as we joined, the first Fire Coalition war broke out and we were just burning structures uncontested for weeks. Our activity declined and many took a break. The few people that remained active generally joined another corp in Horde or elsewhere.
    </p>

    <h2>Drill-And-Kill</h2>
    <p>
        We're so back! Join the corp with the most glorious name ever, Drill-And-Kill. Terminus. is now our structure holding corp.
    </p>

    <p>Use the creator code <code>RECURSIVETREE</code> during checkout on the <a href="https://store.eveonline.com" target="_blank">eve store</a> to support me with up to 5% of your purchase.</p> ]]></content:encoded>
        <link>https://yurix.ch/blog/terminus.html</link>
    </item>
<item>
        <title>Building a CPU - 50% through the project</title>
        <description><![CDATA[ Building a diy, homebrew CPU is one of the craziest and largest project I've ever attempted. This post tells the
    experiences I've made. ]]></description>
        <content:encoded><![CDATA[ <img src="images/thecpu.jpg" alt="The breadboard CPU I built">
    <p>
        As part of my education, I have to do a bigger project before finishing school. I've always been very
        interested in computer architecture and design, so I decided to combine the two: Build a CPU as a project.
    </p>
    <p>
        This is obviously an ambitious project, additionally because I didn't just want to build the simplest things
        possible. And this is already the most important advice I can give to anyone: Keep it as simple as possible.
        And if you think it is simple enough, make it 10 times simpler.
    </p>
    <p>
        Anyways, how does one actually build a CPU? Producing your own chip is pretty much out of question, the cost
        are way to high. For example, the semiconductor prototyping platform <a href="https://efabless.com/">
        efabless.com</a> lists a price of <i>only</i> 10'000$.
    </p>
    <p>
        Since I want a real product and not just a simulation in something like an FPGA, I decided to build the thing
        using 74-Series glue-logic integrated circuits. They are great. To connect them, I use breadboards and wire.
    </p>
    <img src="images/74seriesic.jpeg" alt="A 74-Series integrated circuit as a PDIP chip">
    <p>
        However, I mainly wanted this post to be about my learnings. Here is a list
    </p>
    <ul>
        <li>
            Keep it simple. It will take you long enough to finish the project, so don't make it needlessly
            complicated. You can always do a second build/upgrade your current one.
        </li>
        <li>
            Cutting wires sucks. If anyone knows a better solution on breadboards, let me know.
        </li>
        <li>
            Don't forget the power supply. You will need to supply your project with power. Ideally, your power
            supply is short circuit prove. Because I didn't have anything better, I <s>used</s>fried and arduino
            as a USB adapter. Don't do it. Get a lab power supply, resettable fuses, anything to protect you.
            While I haven't managed to destroy my CPU with short circuits yet, I managed to create plenty of them.
        </li>
        <li>
            Try to make your architecture modular. This way, you can
            <ul>
                <li>
                    Add more features later on
                </li>
                <li>
                    Test parts of the CPU earlier
                </li>
            </ul>
        </li>
        <li>
            Simulate your CPU before building it. It doesn't need to be super detailed on an electronic component
            level, it's enough to model the ISA. I've found many, sometimes severe oversights while doing this
            that saved me a lot of time should I've missed them.
            <ul>
                <li>Don't write it in python, doing bit manipulations in python is a bit annoying. I can
                    recommend <a href="https://ziglang.org">zig</a> for it, as it allows you to specify the bit
                    width of an integer type to the bit, e.g. you can have an <code>u5</code>: A 5-bit unsigned
                    integer.
                </li>
            </ul>
        </li>
        <li>
            Multiply the breadboard space requirements by at least 1.5 times the amount you've calculated you'll
            need.
        </li>
    </ul>

    <p>
        Maybe one day I'll write about the details of the architecture of a CPU, but until then, these are my
        experiences I wanted to get out and share with the wild. On James Sharmann's discord from time to time people
        ask questions that exactly need this kind of answer, so I hope it helps ¯\_(ツ)_/¯.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/building_a_cpu.html</link>
    </item>
<item>
        <title>Software Project Spotlight: discordless</title>
        <description><![CDATA[ Discordless is a tool to archive discord by inserting a man-in-the-middle proxy to record discord traffic. ]]></description>
        <content:encoded><![CDATA[ <p>Discord is a chat and voice chat app originally developed for gaming, but since its launch it has been adopted by
        many online communities outside of gaming that would have traditionally hosted a publicly accessible forum or
        mailing list. This is problematic since discord is part of the deep web: While many of these communities are
        open for anyone who joins their discord server, discord is not indexed and searchable by search engines. I think
        it is sad if this knowledge is no longer as easily accessible and discoverable.</p>
    <p>Luckily, at least what is on discord is preserved relatively well: I haven't noticed any data get deleted,
        and using the search function, you can go back many years.</p>
    <p>However, Discord is a private company, interested in making a profit. Access to discord is free and while they
        sell Nitro, a subscription offering some perks like larger file uploads or a longer message character limit, the
        advantage it provides doesn't warrant the costs for most people. Most likely, Nitro sales alone don't
        provide enough money to sustainably operate the platform. It is probably only a question of time until
        enshitification or paywalls start. In a sense, it has already started with <a
                href="https://www.reddit.com/r/technews/comments/1jfs1ls/discord_is_getting_mobile_ads/">ads
            occasionally appearing on mobile</a>.</p>
    <p>To preserve the knowledge and conversations on discord, I've started to automatically archive conversations
        from discord and eventually plan to mirror them on the web. This solves both problems: A web archive of a
        discord server is indexable, and it can also stay accessible long after communities have migrated to other
        platforms if discord eventually is no longer usable.</p>
    <p>The issue with archiving discord: It is not something discord officially supports. As for inofficial ways, there
        are options. You could write a bot that records all messages, but that is against the terms of service. </p>
    <p>Instead, I'm using a method developed by a project called <a href="https://github.com/Roachbones/discordless">discordless</a>.
        Discordless is a man-in-the-middle proxy that automatically records all discord traffic. In a next step,
        a script converts the recorded traffic into formats like HTML or <a href="https://github.com/slatinsky/DiscordChatExporter-frontend">DiscordChatExporter</a> compatible JSON.</p>
    <p>Some advantages of discordless' approach include that it is difficult to detect. We are not spamming discord's APIs. As far
        as I'm aware, it doesn't violate discord's terms of service. Only sharing your recordings publicly
        might infringe on the copyright of people who sent messages.</p>
    <p>Another strength of discordless is that it records the raw traffic. This means that old messages can be
        reexported with improved exporters when improvements are made.</p>
    <p>Discordless is not without its share of issues. One problem is to get discord to use the proxy. For performance
        reasons, you probably don't want to send all traffic through the proxy. On desktop operating systems, this
        can be achieved by specifying the <code>--proxy-server=&lt;your server&gt;</code> option on the commandline, but
        at least on macOS, there is no easy way to do this with an app in your launch menu. In the end, I've
        resorted to not having discord in the launch menu, but an Automator app that just launches discord
        with these arguments.</p>
    <p>A similar issue is on iOS: You can only specify a proxy per WiFi. If you join a new WiFi, you'll have to
        reenter the proxy server details. This is annoying enough that I've only done it for the most important
        networks, like at home and at my university.</p>
    <p>
        A proxy can only record messages I'm loading in the discord app, so there is no guarantee it will get all messages. But since I'm fairly active, it will get most.
    </p>
    <p>Discordless is a small, slightly disorganized project, but it contains the scripts and techniques that makes it
        possible to archive and publicly mirror knowledge hidden in discord.</p>
    <p><a href="https://github.com/Roachbones/discordless">discordless github</a></p> ]]></content:encoded>
        <link>https://yurix.ch/blog/discordless.html</link>
    </item>
<item>
        <title>Removing a secondary Wi-Fi interface on macOS sequoia</title>
        <description><![CDATA[ This guide shows how to delete a secondary Wi-Fi interface (Wi-Fi 2) in the network setting on macOS sequoia. For some reason, this must be done in the terminal since the user interface doesn't seem to offer a remove button. ]]></description>
        <content:encoded><![CDATA[ <p>
        In the macOS network settings, you can add a second Wi-Fi interface. This can be used to e.g. configure a static IP and a dynamic IP from DHCP at the same time.
    </p>

    <img src="images/mac-secondary-wifi.png" alt="secondary wi-fi interface in mac os network settings">

    <p>
        However on macOS sequoia, you can't remove this network interface using the user interface once you no longer need it.
        I've found this way to remove it via the terminal:
    </p>
    <ol>
        <li>
            Open Terminal.app
        </li>
        <li>
            Type <code>networksetup -listallnetworkservices</code> and press enter.
        </li>
        <li>
            A list of network interfaces should be printed. Somewhere, a interface similar to <code>Wi-Fi 2</code> should be listed.
            The name might not exactly match the name shown in the network settings. For example, I get <code>WLAN 2</code> in the network settings, but <code>Wi-Fi 2</code> from the command. Note the exact name from the command.
        </li>
        <li>
            Next, execute <code>sudo networksetup -removenetworkservice "_name of interface_"</code> where you insert the exact name of the interface noted above, in my case this would be <code>sudo networksetup -removenetworkservice "Wi-Fi 2"</code>
        </li>
        <li>The network device should be removed.</li>
    </ol> ]]></content:encoded>
        <link>https://yurix.ch/blog/macos-sequoia-secondary-wifi.html</link>
    </item>
<item>
        <title>NetBSD on the i.MX23-OLinuXino</title>
        <description><![CDATA[ Some notes on how to boot NetBSD on the i.MX23-OLinuXino in it new, devicetree-ified version. ]]></description>
        <content:encoded><![CDATA[ <p>In the second half of 2025, I spent some time adding support for booting NetBSD on the i.MX23-OLinuXino
        using device trees and u-boot. All old i.MX23-OLinuXino guides have been lost in the depths of the internet and
        not
        even the internet archive has all pieces, so I&#39;ve decided to collect all information on one page.</p>
    <p>This guide is not a full step-by-step guide. Rather, it should be seen as a collection of notes to make it
        easier,
        but I won&#39;t be providing detailed instructions/commands for e.g. how to partition the SD card.</p>
    <p>If you struggle to get it working, feel free to <a href="aboutme.html">contact</a> me. Perhaps one day, I&#39;ll
        also add it to the
        prebuild images on <a href="https://armbsd.org">armbsd.org</a>.</p>
    <p>The i.MX23 SoC has many names, sometimes it is also called i.MX233 or MX23. Even Freescale/NXP couldn&#39;t
        decide on one
        name and calls it different across documents. These three names should be used synonymously and aren&#39;t a
        typo.</p>
    <h2>Supported Hardware</h2>
    <table>
        <thead>
        <tr>
            <th>Device</th>
            <th>State</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>Debug UART</td>
            <td>Working</td>
        </tr>
        <tr>
            <td>Application UART</td>
            <td>Not implemented</td>
        </tr>
        <tr>
            <td>Audio Output</td>
            <td>Working</td>
        </tr>
        <tr>
            <td>Audio Input</td>
            <td>Not implemented</td>
        </tr>
        <tr>
            <td>USB</td>
            <td>Working</td>
        </tr>
        <tr>
            <td>ECC+crypto accelerators</td>
            <td>Not implemented</td>
        </tr>
        <tr>
            <td>SD card</td>
            <td>Working</td>
        </tr>
        <tr>
            <td>Display Outputs</td>
            <td>Not implemented</td>
        </tr>
        <tr>
            <td>GPIO</td>
            <td>Working</td>
        </tr>
        <tr>
            <td>SPI, I2C</td>
            <td>bit-banging via gpio possible</td>
        </tr>
        </tbody>
    </table>
    <h2>Booting NetBSD</h2>
    <p>The i.MX23 boots NetBSD using u-boot. The u-boot bootloader, kernel and device trees are stored on the SD card,
        while the root filesystem is either on the SD card or an USB device.</p>
    <p>The SD card needs to be set up in a specific way:</p>
    <ul>
        <li>MBR partitions</li>
        <li>The first partition is of type 0x53 (83 in decimal) and contains u-boot.</li>
        <li>The second partition is FAT32 and contains the device tree and kernel uImage.</li>
        <li>The third partition is for the root filesystem.</li>
    </ul>
    <h2>Building u-boot</h2>
    <p>U-Boot for the i.MX233-Olinuxino is packaged as <a href="https://pkgsrc.se/wip/u-boot-imx23-olinuxino">wip/u-boot-imx23-olinuxino</a>
        in pkgsrc-wip. Instructions for how to build it can be found on the <a href="https://www.pkgsrc.org/wip/">pkgsrc-wip
            page</a>.</p>
    <p>This produces u-boot in /usr/pkg/share/u-boot/imx23-olinuxino/u-boot.sb.</p>
    <p>Alternatively, it is possible to directly compile from the u-boot sources:</p>
    <pre><code>gmake mx23_olinuxino_defconfig
CROSS_COMPILE=arm-none-eabi- gmake u-boot.sb
</code></pre>
    <h2>Getting the Kernel</h2>
    <p>The i.MX23 runs the GENERIC_V5 kernel configuration.</p>
    <ul>
        <li>You can download the kernel from <a
                href="https://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-earmv5/binary/">https://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-earmv5/binary/</a>
            The correct file is <code>GENERIC_V5.ub</code>. This file is the same as <code>netbsd.ub</code> when
            building from source. The device tree
            can be extracted from the DTB set.
        </li>
        <li>You can build the kernel from source:
            <pre><code>./build.sh -u -j8 -U -m evbearmv5-el tools
./build.sh -u -j8 -U -m evbearmv5-el kernel=GENERIC_V5
./build.sh -u -j8 -U -m evbearmv5-el dtb
</code></pre>
            The output <code>netbsd.ub</code> and <code>imx23-olinuxino.dtb</code> will be somewhere in the destdir.
        </li>
    </ul>
    <h2>Preparing the SD card</h2>
    <p>Partition the SD card:</p>
    <ul>
        <li>MBR partitions</li>
        <li>The first partition is of type 0x53 (83 in decimal) and contains u-boot. 32MB is enough</li>
        <li>The second partition is FAT32 and contains the device tree and kernel uImage. 32-128MB is appropriate.</li>
        <li>The third partition is for the root filesystem.</li>
    </ul>
    <p>Initially, I started out be modifying the linux image. This might be an option if you struggle to create a 0x53
        partition.</p>
    <p>To burn u-boot: <code>dd if=u-boot.sb of=/dev/sd_card_part_1 bs=512 seek=4</code>.
        The <code>seek=4</code> is important. Nobody really knows why, but your olinuxino won&#39;t boot without it.</p>
    <p>Create a FAT32 filesystem on the second partition. Copy <code>netbsd.ub</code> and
        <code>imx23-olinuxino.dtb</code> onto it.</p>
    <p>Next, you can set up the root filesystem. Alternatively, you can also use the installer.</p>
    <h2>Using the installer</h2>
    <p>To use the installer, you have to build the kernel from source.</p>
    <p>Add a file <code>sys/arch/evbarm/conf/GENERIC_V5.local</code> with the following contents to the source tree:</p>
    <pre><code>no options MEMORY_DISK_DYNAMIC
options MEMORY_DISK_IS_ROOT
options MEMORY_DISK_RBFLAGS=RB_SINGLE
options MEMORY_DISK_ROOT_SIZE=6144
</code></pre>
    <p>Build the kernel as usual.</p>
    <p>Next, we need a ramdisk containing the installer. You can download the <code>ramdisk.fs</code> from here: <a
            href="https://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-earmv5/installation/ramdisk/">https://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-earmv5/installation/ramdisk/</a>
    </p>
    <p>To embedd the ramdisk into the kernel, run:</p>
    <pre><code>$TOOLDIR/arm--netbsdelf-eabi-mdsetimage $BUILDDIR/GENERIC_V5/netbsd ramdisk.fs
$TOOLDIR/arm--netbsdelf-eabi-objcopy -S -O binary $BUILDDIR/GENERIC_V5/netbsd install-netbsd
$TOOLDIR/nbmkubootimage -A arm -T kernel_noload -O linux -C none -e 0 -n &quot;NetBSD/earmv5 11.99.5&quot; install-netbsd install-netbsd.ub
</code></pre>
    <p>Then copy it onto the SD card as usual.</p>
    <p>The following article about ramdisk/installer might be interesting too: <a
            href="https://bentsukun.ch/posts/ramdisk-kernel/">https://bentsukun.ch/posts/ramdisk-kernel/</a></p>
    <h2>Common Issues</h2>
    <p>Sometimes NetBSD crashes early on in the boot process due to an invalid device tree header. This is due to u-boot
        picking an unfortunate memory layout where NetBSD&#39;s BSS section overlaps the device tree. You can avoid it
        using this
        boot.scr script for NetBSD (compiled using <code>mkimage -C none -A arm -T script -d imx23-boot.cmd
            imx23-boot.scr</code>, then copy it to the SD card):</p>
    <pre><code>env set fdt_high 0x41000000;
fatload mmc 0:2 0x41000000 imx23-olinuxino.dtb;
fatload mmc 0:2 0x41800000 uImage;
bootm 0x41800000 - 0x41000000;
</code></pre> ]]></content:encoded>
        <link>https://yurix.ch/blog/imx23-olinuxino.html</link>
    </item>
<item>
        <title>HP Prodesk 600 G3 SFF PSU Replacement</title>
        <description><![CDATA[ Information about how to replace the PSU in a HP Prodesk 600 G3 SFF with a standard ATX PSU. ]]></description>
        <content:encoded><![CDATA[ <p>
        Recently, I've got my hands on a cheap and old HP ProDesk 600 G3 SFF PC with an Intel i5-7500 that I want to use as a server.
    </p>

    <img src="images/hp-prodesk/system.jpg" alt="HP ProDesk 600 G3 SFF with the case assembled">

    <p>
        Since that device will be running 24/7, I decided to measure the power consumption so I can compare the cost of running a server at home to renting a server in the cloud using a <a href="power-calculator.html">power calculator</a>. To my surprise, the device was pulling well north of 30 watts when shut down, but plugged into the socket.
    </p>

    <p>
        After some time, I discovered that the power draw of the PSU alone with the mainboard disconnected is the majority of these 30 watts. The PSU is horribly inefficient at these loads, still pulling more than 25 watts.
    </p>

    <p>
        A second issue I've been having with the system is that the tiny PSU fan is really loud and annoying.
    </p>

    <p>
        So, I've decided to replace the PSU. This sounds easier than done: The SFF in the name stands for small form factor, but it might as well mean proprietary, not compliant with any standard, and undocumented.
    </p>

    <p>
        The PSU to mainboard connection consists of three cables: First, there are two 4-pin molex connectors that look like normal ATX 12V 4-pin CPU power connections. With a multimeter, I was able to confirm this. Interestingly, these connectors are powered even when the computer is shut down, so it seems like the PSU never really turns off. These connectors are labeled P1 and P3. Additionally, there is a small 7-pin JST PHR header labeled P2. Of the seven pins, only four connect to a cable. I could identify one of them as GND and one as PS-ON, but the other two didn't seem to match anything you usually find on an ATX PSU, so I was kind of stuck.
    </p>

    <img src="images/hp-prodesk/header-locations.jpg" alt="Top-Down view of the mainboard indicating the positions of the header. P1, P2 are right next to each other in the lower left corner, close to the front. P3 is in the upper right corner, somewhat hidden between the airflow duct and case wall.">

    <p>
        Fortunately, there are some people on the internet that have already reverse-engineered the 7-pin header <a href="https://www.instructables.com/Use-ATX-PSU-With-HP-Motherboard-That-Uses-Propriet/">[1]</a> <a href="https://www.eevblog.com/forum/general-computing/hp-elitedesk-800-g3-psu-reverse-engineering/">[2]</a>.
    </p>

    <p>
        With a multimeter, I could quickly check that this is also the case for my PC. I've summarized the findings below.
    </p>

    <h2>HP's proprietary PSU connector standard</h2>

    <p>
        The full pinout of the PSU connection on the mainboard of my HP ProDesk 600 G3 SFF is the following:
    </p>

    <ul>
        <li>
            P1, P3: Standard ATX 12V P4 CPU power connectors. They contain two 12V and two GND wires each.
        </li>
        <li>
            P2: The small JST PHR 7-pin header.
            <ul>
                <li>black: GND</li>
                <li>purple: POWER METER, carries an analog voltage proportional to the power consumption of the system</li>
                <li>grey: PSU-ID, used to identify the PSU. On the PSU side, there is a resistor that connects this to 12V. In my case, the resistor was 392K, but I'd recommend to measure this on your own device using a multimeter.</li>
                <li>green: PS-ON, pulled low by the mainboard when the computer is running.</li>
            </ul>
        </li>
    </ul>

    <p>
        The computer will boot just fine if it has 12V on P1 and P3, and if PSU-ID is connected. It is therefore enough to use any 12V source that can provide enough power.
    </p>

    <h2>Mod to connect an ATX PSU</h2>

    <p>
     In the future, I might want to add PCIe cards, or I might build a new system and reuse some components, so I decided I want a real ATX PSU and not a random 12V power supply. The issue with that is that ATX PSUs have a standby state where power is turned off on the 12V rails and only 5V is available. Leaving standby requires the mainboard to pull PS-ON low. Unfortunately, this machine is solely powered by 12V, so the circuit to pull PS-ON low is not powered in standby.
    </p>
    <p>
       <a href="https://www.instructables.com/Use-ATX-PSU-With-HP-Motherboard-That-Uses-Propriet/">[1]</a> has shown that it is possible to build an adapter using step-up converters to generate a 12V supply from standby 5V. However, since I want to use the machine as a server, I don't actually care about a working standby, the machine is always on. Always-On is easier to achieve, you can just short PS-ON to ground on the PSU side.
    </p>

    <p>
        When choosing an ATX PSU, make sure that its P8 12V CPU cable is split into two P4 cables. I've used a be quiet! Pure Power 13M 550W. 550W is a bit overkill, but it works.
    </p>

    <h3>Connecting the PSU</h3>

    <p>
        The mainboard's P1 and P3 12V P4 power connectors are directly wired to the PSU's 12V P4 CPU connectors as on a regular PC.
    </p>

    <img src="images/hp-prodesk/p1.jpg" alt="Closeup of the P1 connector">
    <img src="images/hp-prodesk/p3.jpg" alt="Closeup of the P3 connector">

    <p>
        To get the PSU out of standby mode, I've shorted PS-ON to GND. The <a href="https://en.wikipedia.org/wiki/ATX#/media/File:ATX_PS_signals.svg">pinout image on wikipedia</a> can be used to find which pins to connect. Note for modular PSUs: As I've found out, even if the PSU uses a standard ATX connector on the PSU side, the pinout CAN BE DIFFERENT from what is found on the mainboard side. I luckily learned this without releasing any magic smoke, but you might not be as lucky. Either short PS-ON on the mainboard side of the 24-pin cable with the 24-pin cable plugged into the PSU, or trace the 24-pin cable with a multimeter to find out if it is remapped. I've extracted some molex crimps from a spare GPU power cable to make this short.
    </p>

    <img src="images/hp-prodesk/psu-side.jpg" alt="The PSU side with the PS-ON to GND short.">

    <p>
        On the P2 header, I've left all but PSU-ID (grey) disconnected. Since P1 is right next to P2, I've spliced a connection into that 12V cable to connect a 392k-resistor to PSU-ID.
    </p>

    <img src="images/hp-prodesk/p2.jpg" alt="Closeup of the P2 connector">

    <p>
        The system works. It pulls less power while idle and is way quieter than it used to be. The only downside is that an ATX PSU no longer fits the case because of the special form factor of the old proprietary PSU.
    </p> ]]></content:encoded>
        <link>https://yurix.ch/blog/prodesk-600-g3-psu-replacement.html</link>
    </item>
    </channel>
</rss>