<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Self-Hosting on oxi.ch</title><link>https://oxi.ch/tags/self-hosting/</link><description>Recent content in Self-Hosting on oxi.ch</description><generator>Hugo</generator><language>de-DE</language><copyright>oXiVanisher</copyright><lastBuildDate>Thu, 05 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oxi.ch/tags/self-hosting/index.xml" rel="self" type="application/rss+xml"/><item><title>scansort2nextcloud</title><link>https://oxi.ch/posts/2026-11-05-scansort2nextcloud/</link><pubDate>Thu, 05 Nov 2026 00:00:00 +0000</pubDate><guid>https://oxi.ch/posts/2026-11-05-scansort2nextcloud/</guid><description>&lt;p&gt;Rechnungen, Versicherungspolicen, Steuerunterlagen, Verträge - der Papierberg wird nicht kleiner. Mein Scanner kann zwar schon lange per SFTP scannen, aber danach musste ich jedes PDF von Hand anschauen, umbenennen und in den richtigen Ordner in meiner Nextcloud verschieben. Genau diesen Teil übernimmt jetzt &lt;strong&gt;scansort2nextcloud&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Der Ablauf ist simpel: Der Scanner lädt das PDF per SFTP hoch, scansort erkennt die neue Datei, macht bei Bedarf eine Texterkennung (OCR mit Tesseract via OCRmyPDF, Deutsch und Englisch) und liest das Dokumentdatum, den Absender und allfällige Beträge in CHF oder EUR aus. Anschliessend schlägt ein Klassifikator die drei wahrscheinlichsten Zielordner vor und generiert einen sprechenden Dateinamen wie &lt;code&gt;2026-01-05_CSS_Krankenkasse.pdf&lt;/code&gt;. Das PDF landet zuerst in einem &lt;code&gt;_Review&lt;/code&gt;-Ordner in der Nextcloud, und in einem kleinen Web-UI bestätige ich den Vorschlag mit &lt;strong&gt;einem Klick&lt;/strong&gt;. Danach wird die Datei serverseitig an ihren finalen Platz verschoben - Datei-ID, Versionen und Freigaben bleiben dabei erhalten.&lt;/p&gt;</description></item><item><title>PySprueFinder</title><link>https://oxi.ch/posts/2026-10-27-spruefinder/</link><pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate><guid>https://oxi.ch/posts/2026-10-27-spruefinder/</guid><description>&lt;p&gt;Wer Warhammer-Bausätze zusammenbaut, kennt das: Die Anleitung sagt &amp;ldquo;Teil 42&amp;rdquo;, und man sucht minutenlang auf drei verschiedenen Gussrahmen nach dieser winzigen, eingegossenen Zahl. Bei grossen Kits mit Rahmen A bis P wird das schnell mühsam. Darum habe ich &lt;strong&gt;PySprueFinder&lt;/strong&gt; gebaut.&lt;/p&gt;&#10;&lt;p&gt;Die Idee: Jeder Gussrahmen (Sprue) wird einmal fotografiert. Eine Texterkennung findet die Teilenummern, die in den Rahmen eingegossen sind, und speichert ihre Position. Danach tippt man einfach &lt;code&gt;A12&lt;/code&gt;, &lt;code&gt;P197&lt;/code&gt; oder nur &lt;code&gt;42&lt;/code&gt; ein, und die passende Stelle wird direkt auf dem Foto markiert. Die Bausätze werden als Projekte mit beliebig vielen Rahmen verwaltet.&lt;/p&gt;</description></item><item><title>PyNewsAggregator</title><link>https://oxi.ch/posts/2026-06-22-pynewsaggregator/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate><guid>https://oxi.ch/posts/2026-06-22-pynewsaggregator/</guid><description>&lt;p&gt;RSS ist für mich immer noch der beste Weg, um bei Nachrichten und Blogs auf dem Laufenden zu bleiben: kein Algorithmus, der entscheidet, was ich sehe, sondern einfach alle neuen Artikel in chronologischer Reihenfolge. Die meisten Feed-Reader sind mir aber entweder zu überladen oder brauchen gleich einen eigenen Datenbankserver. Darum habe ich mit &lt;strong&gt;PyNewsAggregator&lt;/strong&gt; einen eigenen gebaut.&lt;/p&gt;&#10;&lt;p&gt;Konfiguriert wird alles in einer einzigen YAML-Datei - es gibt bewusst keine Einstellungen in der Oberfläche. Pro Feed kann man das Abfrageintervall festlegen, und mit globalen oder feedspezifischen Filtern (Text oder Regex) lassen sich uninteressante Schlagzeilen ausblenden. Mit regelbasierten Kategorien wie Tech, Security oder Sport kann man die Timeline filtern, eine ganze Kategorie als gelesen markieren oder sie komplett ausblenden.&lt;/p&gt;</description></item><item><title>Ludus</title><link>https://oxi.ch/posts/2026-06-07-ludus/</link><pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate><guid>https://oxi.ch/posts/2026-06-07-ludus/</guid><description>&lt;p&gt;Mal schnell eine Runde Vier gewinnt oder Schiffe versenken mit jemandem spielen, der nicht im selben Raum sitzt - eigentlich eine einfache Sache. Die meisten Plattformen dafür wollen aber ein Konto, zeigen Werbung, sammeln Daten oder haben einen offenen Chat, was gerade für Kinder nicht ideal ist. Darum habe ich mit &lt;strong&gt;Ludus&lt;/strong&gt; meine eigene kleine Spieleplattform gebaut.&lt;/p&gt;&#10;&lt;p&gt;Aktuell gibt es zehn rundenbasierte Spiele für zwei Personen: Tic-Tac-Toe, Vier gewinnt, Schiffe versenken, Mastermind, Mühle, Reversi, Memory, Gomoku, Mancala und Käsekästchen (Dots &amp;amp; Boxes). Bei Mancala und Käsekästchen kann man auch gegen den Computer spielen.&lt;/p&gt;</description></item></channel></rss>