Kategorie: scripting & coding

  • Video Upscaling mit Machine Learning im Hintergrund

    Vor ein paar Jahren hatte ich mich mit einer Videosequenz herumgespielt, um einen gefällten Baum virtuell wieder auferstehen zu lassen. Das Ausgangsmaterial war qualitativ mäßig, aber der Einzeiler machte, was er sollte: Der Baum stand wieder.

    ML-gestütztes Video Upscaling wollte ich immer mal wieder ausprobieren. Ein erster Anlauf mit Real-ESRGAN in Ubuntu 22.04/WSL war unbefriedigend, die Performance war mau:

    • Die AMD Ryzen iGPU wird von ROCm nicht unterstützt.
    • Das Modell lief nur auf einem CPU-Kern.

    Den neuen Anlauf gestaltete ich auf Basis von Ubuntu 24.04/WSL bzw. nativ mit Fedora 43. Die Performance war in beiden Fällen deutlich besser, obwohl die iGPU weiterhin keine Nutzung fand. Dafür skalierte nun das Modell über alle CPU-Kerne. Allerdings stehen hinter der Aussage „deutlich besser“ immer noch ca. 12 Sekunden pro Frame.

    Baum sagt adieu – nach dem Upscaling mit Real-ESRGAN
    Und da ist er wieder, mein Freund der Baum – nach dem Upscaling mit Real-ESRGAN

    Was ziehe ich aktuell daraus:

    • Mein persönlicher Proof-of-Concept ✅
    • Um so weit zu kommen, musste ich die eine oder andere Library patchen um sie mit aktuelleren Python-Versionen zum Laufen zu bekommen (insbesondere basicsr) ✅
    • Die erzielte Video-Qualität ist auch bei wirklich schlechtem Ausgangsmaterial gut. Das zeigte der obige PoC, aber auch andere Videoschnipsel, die ich hier nicht posten kann ✅
    • ML auf CPU-Kernen macht keinen Spaß, schon gar nicht bei vielen Hundert oder Tausend Frames. Eine letzte Möglichkeit, die iGPU doch noch zum Mitmachen zu überreden, wäre die Inferenz via Vulkan zu beschleunigen. Aber auch da reden wir vielleicht von Faktor 2 bis 5 an Verbesserung gegenüber der reinen CPU – zu langsam um ein ernsthaftes Projekt zu wagen.

    Und hier nochmals der Link zu den originalen Videos.

    • FreshRSS – Endlich Newsfeeds plattformunabhängig konsumieren

      FreshRSS – Endlich Newsfeeds plattformunabhängig konsumieren

      Ich habe eine längere Liste an Newsfeeds, die ich von Zeit zu Zeit konsumiere. Allerdings fehlt mir schon länger die „Applikation“, die Plattform-übergreifend funktioniert (Linux, Android, Windows aktuell). Nach ein wenig Recherche habe ich mich für eine Web-basierte Lösung entschieden: FreshRSS bzw. https://github.com/FreshRSS/FreshRSS

      PHP, MySQL, … als Anforderungen lassen es auch auf den meisten Webspaces laufen.

      Was kann es?

      • Verschiedene RSS-Formate
      • Verwalten von Kategorien, Labels, Favoriten, …
      • Multi-User-Management

      Die Installation ging schnell von der Hand, entweder per Docker oder gleich am Webspace, die Konfiguration ebenso. I like. 🙂

    • [work-in-progress] Netgear Readynas ins Leben zurück holen

      [work-in-progress] Netgear Readynas ins Leben zurück holen

      Eine meiner eher partiell schlauen Entscheidungen war annodazumal ein Netgear Readynas Ultra 2, aka RDNU2120, zu beschaffen. Gedacht war es als NAS mit zusätzlicher Backup- und Media-Streaming-Aufgabe, also genau, was es (damals) konnte. Die Nutzungsrealität sah anders aus:

      • In der damaligen Wohnung gab es keinen Platz, wo das kleine Kastl nicht irgendwie störte (optisch, akustisch).
      • Der familiäre Media-Streaming-Konsum damals wie heute überschaubar geblieben ist.
      • 24/7 laufen lassen nur Strom verbraucht hätte, da außer Leerlauf kaum Betrieb zu erwarten war.
      • Außer den gelegentlichen Systemupdates wurden in unregelmäßigen Abständen Backups von unseren Endgeräten gezogen.
      • Bis es immer öfter im Schrank blieb.

      Dabei ist es ein für damalige Verhältnisse potentes Gerät für viele Aufgaben, die im Heimbereich anfallen:

      • Intel Atom Single Core Prozessor mit 1,8 GHz Taktfrequenz
      • 1 GB DDR3-RAM
      • 2x 1 Gb Ethernet
      • 3x USB
      • 2x 3,5″ HDD-Schnellwechselschächte
      • Und mit dem vorinstallierten Readynas-OS ein Debian-Abwandlung als Betriebsystem

      Vor kurzem habe ich es wieder aus dem Schrank geholt, wegen Backups ziehen warat’s und außerdem suche ich ein Poster aus einer Posterpräsentation aus dem Jahr 2009, das ich nirgends mehr finden kann.

      Long story short: Das Poster konnte ich (noch) nicht finden und beim Einbinden des Readynas wurde es holprig.

      Nach dem erfolgreichen Boot-Prozess und Abholens einer TCP/IP-Adresse beim DHCP-Servers zeigte sich mangels Unterstützung einer aktuellen TLS-Version ein Drama in mehreren Akten. Der in Nautilus/Files integrierte Samba/CIFS-Client war not amused die Shares einzubinden, mein Webbrowser wollte nicht mit dem Admin-Panel kommunizieren. Bei letzterem verständlich, TLS 1.0 ist seit einiger Zeit abgekündigt und das aus gutem Grund.

      Nicht unterstützte TLS-Version verhindert Zugriff auf das Admin-Panel

      Workaround Admin-Panel

      In Firefox kann unter

      about:config

      in die Innereien des Browsers eingegriffen werden. Unter anderem kann hier1 auch die minimale TLS-Version vorgegeben werden. Dafür gibt man in der Suchmaske folgendes ein:

      security.tls.version.min

      Per Default ist hier 3 als Wert eingetragen, was TLS-Version 1.2 oder höher entspricht. Im Fall von diesem Readynas musste ich TLS-Version 1.0 freischalten:

      Wert in about:configTLS-Version
      3TLS-Version 1.2 oder höher
      2TLS-Version 1.1 oder höher
      1TLS-Version 1.0 oder höher
      Zulässige Werte und deren Bedeutung für security.tls.version.min

      Es ist keine gute Idee, dauerhaft auf eine nicht mehr unterstützte und vor allem unsichere TLS-Implementierung zurückzugreifen.

      Mit dieser Anpassung gelang der Zugriff auf das Admin-Panel wieder.

      Workaround Nautilus/Files

      Ursache war hier, dass sich das Readynas nur auf SMB-Version 1.0 versteht, aber die Welt von Version 2 oder höher mittlerweile ausgeht.

      [Quick Fix #1] WebDAV aktivieren

      Im Admin-Panel aktivierte ich zusätzlich den Zugriff auf die Shares via WebDAV, womit der Zugriff in Nautilus/Files wieder funktionierte. Damit konnte ich wieder durch die Verzeichnisse navigieren.

      [Quick Fix #2] Mount via Terminal

      Mit den cifs-utils kann ein Share direkt im Terminal eingebunden werden:

      ~$ sudo mount -t cifs -o user=username,vers=1.0 //192.168.x.y/xyz /mnt/rn

      Wie geht es weiter?

      Die beiden Workarounds sind natürlich keine Dauerlösung. TLS wurde aus gutem Grund verbessert und WebDAV ist als Protokoll sicher ok um die wichtigsten Daten vom Readynas zu sichern, aber aus meiner Sicht ist es nicht das Protokoll für das dauerhafte Bewegen großer Datenmengen. Die Limitierung auf SMB-Version 1.0 kann mit entsprechendem Scripting bzw. Automount umgangen werden, somit ist dieser Punkt entschärft.

      Readynas-OS ist EOL und für mein deutlich älteres Readynas gibt es seit vielen Monden keine Updates mehr, d.h., die Hoffnung auf eine offiziell aktualisierte TLS-Version ist nicht gegeben. Beim Blick in das Gerät zeigte sich aber ein sehr guter Zustand, zum Wegwerfen zu schade. Folgende Ansätze stehen zur Diskussion:

      Was es wird, keine Ahnung – Schritt 1: Backup! #StayTuned

      1. Stand Firefox 128.0 ↩︎
    • WLAN-Optimierung mit nmcli

      WLAN-Optimierung mit nmcli

      Die Anforderungen ans hauseigene WLAN steigen, also war es wieder an der Zeit nachzuschauen, was mit der bestehenden Infrastruktur (noch) möglich ist. Folgende Ansatzpunkte hatte ich vorab identifiziert:

      • Festhalten des Status Quo
      • Optimieren des WiFi-Channels
      • Festlegen der relevanten IEEE 802.11-Standards
      • Hinzufügen des 5 GHz-Frequenzbandes
      • Kontrollieren der Sicherheitsmechanismen

      Da ich gerne mit dem arbeite, was schon da ist, bevor etwas Neues bei der Tür hereinkommt und motiviert durch einen Bekannten, der ein ähnliches Problem hat, findet sich hier eine kurze Mitschrift zum Vorgehen und der Erkenntnisse unterwegs.

      Festhalten des Status Quo

      Der WLAN-Router kommt von meinem ISP und gestattet erstaunlich viele Einstellmöglichkeiten im Admin-Panel. In den letzten Monaten hatte ich das „Gefühl“, dass der Datendurchsatz durch den WLAN-Router begrenzt ist. Mehr Endgeräte tummeln sich im Netz und einige datenintensiven Dienste werden konsumiert, sodass sich parallel stattfindende, beruflich bedingte Video-/Online-Konferenzen des Öfteren gestört fühlten. Hier ein paar Eckpunkte:

      • OEM-WLAN-Router vom ISP
      • IEEE 802.11b/g/n auf 2,4 GHz inkl. Channel-Optimierung konfiguriert
      • Keine Repeater installiert
      • Alle Endgeräte sind zumindest IEEE 802.11n-fähig.
      • Mehrparteiengebäude in der Stadt

      Optimieren des WiFi-Channels

      In den letzten Jahren gingen mehr und mehr WLAN im Umfeld online. Der erste Verdacht lag auf der Überbelegung des WiFi-Channels. Der vorliegende Router gibt vor eine Kanaloptimierung zu beherrschen , welche auch aktiviert war.

      Sichtlich machte die Kanaloptimierung nicht all zu viel, weil der vor Jahren ermittelte Kanal 11 war noch immer ausgewählt, aber heillos überfrachtet. Da mein ISP mehrere Parteien in unserem Haus ausstattet, ist der Kanal 11 wohl der Default und somit in meinem Fall ein faulty default.

      Um zu ermitteln, welche WLAN in der Nähe sind und auf welchen Kanälen sie funken, habe ich auf nmcli, das Command-Line-Interface von NetworkManager, zurückgegriffen. Der folgende Aufruf (in Anlehnung an user278801) hat mir die Grunddaten für die WLAN-Analyse geliefert:

      ~$ watch "nmcli -f "CHAN,BARS,SIGNAL,SSID,MODE,RATE,SECURITY,IN-USE" d wifi list | sort -n"

      Das Ergebnis im Terminal:

      nmcli mit den umliegenden WLAN sortiert nach Channel nach der Optimierung im Essbereich

      Um ein möglichst gutes Gesamtbild zu bekommen, habe ich diese Analyse in allen Zimmern durchgeführt. Bei der Auswahl des neuen Kanals wählte ich unter Berücksichtigung dieser Quelle den Kanal 9 für das 2,4 GHz-WLAN.

      Festlegen der relevanten IEEE 802.11-Standards

      Der WLAN-Router wurde im Jahr 2018 eingerichtet. Damals gab es noch Überlegungen, Geräte mit dem schon damals veralteten Standard IEEE 802.11g einzubinden. Dementsprechend wurde die Kompatibilitätseinstellung für den Mischbetrieb nach IEEE 802.11b/g/n gewählt. Mittlerweile unterstützt jedes Endgerät in unserem Haushalt zumindest IEEE 802.11n, was somit auch die neue Festlegung geworden ist.

      Hinzufügen des 5 GHz-Frequenzbandes

      Ähnlich war es damals mit des 5 GHz-Frequenzbandes. 2018 konnten nicht alle Endgeräte davon profitieren, die Performance im 2,4 GHz-Frequenzband ausreichend. Auch dieses wurde aktiviert, womit nun die meisten Endgeräte selbst entscheiden, in welchem Frequenzband sie bessere Bedingungen vorfinden.

      Kontrollieren der Sicherheitsmechanismen

      Auch hier gab es eine Veränderung: Alle unsere Endgeräte unterstützen zumindest WPA2, das unsichere WPA ist nicht mehr notwendig und WPA3 wird vom WLAN-Router nicht unterstützt. Somit wurde WPA2-only als Verschlüsselungsmechanismus gesetzt.

      Erkenntnisse aus der Aktivität

      • Linux-Distros bringen immer alles mit, was man so braucht. 😉
      • nmcli tut das Notwendige, wenn man tiefer in die WLAN-Analyse einsteigen möchte, gibt es spezielle Tools wie sparrow-wifi, kismet, …
      • Die Auffrischung der IEEE 802.11-Grundlagen tat gut.
      • Die Performance und Stabilität des eigenen WLAN ist deutlich besser geworden und das ohne neue oder zusätzliche Hardware angeschafft haben zu müssen.

      Update, 2024-07-16: BSSID

      Eines der Geräte hat Probleme sich mit dem 5 GHz-WLAN zu verbinden und bringt wiederholt die Aufforderung zur Passworteingabe ohne einen Anmeldeerfolg zu verbuchen. Ich vermute einen Hardware- oder Firmware-Defekt rund um das WiFi-Modul. Um dem Gerät den Versuch des ständigen Wechselns zum stärkeren Netzes auszutreiben habe ich in den WLAN-Einstellungen die BSSID fix vorgegeben.

      Ermitteln kann man die BSSID z.B. mit nmcli durch Hinzufügen des gleichnamigen Parameters:

      Und dann in den WLAN-Einstellungen hinterlegt:

    • dd & progress bar

      Ein älterer PC steht seit ein paar Wochen herum und dient als kurzweilige Spielwiese für verschiedene Linux-Distributionen, u.a. Debian Buster, AV Linux (aka MX Linux Respin) oder jetzt gerade eben Fedora SOAS (Sugar on a Stick).

      Praktischerweise reicht ein USB-Stick als Träger für die jeweilige Live-Session und als Installationsmedium. Und damit ich es nicht vergesse: dd unterstützt eine Fortschrittsanzeige, wenn ich eine Live-ISO wieder auf den USB-Stick spielen möchte…

      dd if=liveImage.iso of=/dev/sdb bs=512k status=progress

    • Log Files & systemd-journald

      Wieder einmal etwas aus der Kategorie „brauch ich ganz selten“: Log Files werden, seit systemd bei vielen Linux-Distributionen Einzug gehalten hat, durch das Service systemd-journald zentral verwaltet. Mit der Zeit werden gewinnen die Log Files an Größe, das lässt sich aber ganz einfach managen.

      Die Log Files werden je nach Konfiguration persistent unter /var/log/journal/MACHINE-ID/ oder in-memory unter /run/log/journal/MACHINE-ID/ abgelegt. Im zweiten Fall löst der Reboot die Speicherfrage, im ersten darf/muss man selbst Hand anlegen.

      Folgende Befehle helfen weiter:

      journalctl --disk-usage
      journalctl --rotate
      journalctl --vacuum-time=4months
      journalctl --vacuum-size=256M
      • --disk-usage gibt Auskunft über den verbrauchten Speicherplatz der aktiven und archivierten Log Files.
      • --rotate wandelt aktive Log Files in archivierte um.
      • --vacuum-time=4months entfernt alle Log-Einträge, die älter als vier Monate sind. Das geht auch Wochen (4weeks), Stunden (4h), Minuten (4m) und Sekunden (4s)…
      • --vacuum-size=256M entfernt alle älteren Log-Einträge, bis die Log Files 256Mb haben (K, M, G, T sind die möglichen Größeneinheiten).
      • --vacuum-time und --vacuum-size können auch gemeinsam in einem Aufruf verwendet werden, auch in Kombination mit --rotate (seit systemd 240): journalctl --rotate --vacuum-time=4months --vacuum-size=256M
    • Cheatsheet für git

      Cheatsheet für git

      Ich programmiere zur Zeit eher selten und VCS nutze ich noch seltener. Lange Zeit war SVN meine erste Wahl, heute ist es git. Aber seltene Nutzung bedeutet auch rasches Vergessen, deshalb hier mein persönliches Cheatsheet für git:

      BefehlErklärung
      git initEin leeres Git-Repository erstellen oder ein bestehendes neuinitialisieren
      git clone „https://server.com/sourcerepository“Ein Repository in einem neuen Verzeichnis klonen
      git config –global user.email „useremail“Festlegung der E-Mail-Adresse (ohne „–global“ erfolgt das nur für dieses Repository)
      git config –global user.name „username“Festlegung des Usernamens (ohne „–global“ erfolgt das nur für dieses Repository)
      git add „filename“Dateiinhalte zum Commit vormerken
      git commitÄnderungen in das Repository eintragen
      git pushRemote-Referenzen mitsamt den verbundenen Objekten aktualisieren
      git pullObjekte von einem externen Repository anfordern und sie mit einem anderen Repository oder einem lokalen Branch zusammenführen
      git diffÄnderungen zwischen Commits, etc. anzeigen
      git logCommit-Historie anzeigen
      Auszug über git Befehle

      Wenn es dann doch um mehr geht

      git help git

      #Last update: 2020-06-05

    • Video verkehrt als Einzeiler mit ffmpeg

      Ich bekam heute ein kurzes Video geschickt, wo ein lädierter Baum Stück für Stück gekürzt wurde. An sich nichts Ungewöhnliches, aber in mir reifte nach kurzer Zeit der Wunsch den Baum zumindest digital wieder zusammenzusetzen und somit das Video umzukehren.

      Das Original: Es war einmal ein Baum

      Der einfachste Weg war ffmpeg auf meinem Rechner zu installieren, ein sudo apt install ffmpeg im Terminal und keine 60 Sekunden später konnte ich die folgende Zeile eingeben:

      ffmpeg -i Treecut.mp4 -vf reverse Treecut_reversed.mp4

      Da das tonlose Original lediglich um die 10 Sekunden lang ist und das Ausgangsmaterial keine besondere Qualität besitzt, lässt der Aufruf jegliche Optimierungen vermissen, denn da kann ffmpeg in Punkto Video- und Audiostreams so einiges.

      Alles rückwärts: Stück für Stück zum Baum

      Der Baum steht wieder. 😉


      Anmerkung: ffmpeg gibt es für viele Plattformen, also auch für Windows und MacOS als Download erhältlich.

    • Excel VBA Makro Gedankenstützen

      Ich habe immer wieder die Aufgabe Tätigkeiten in Excel zu automatisieren, aber eben nur alle ewigen Zeiten. Manche Makros benötige ich öfters, wobei zwischen zwei Malen auch wieder einige Zeit vergeht.

      Generell ist jeder Code-Schnipsel vor seiner Nutzung auf den jeweiligen Anwendungsfall anzupassen, z.B. columns, range, etc.

      Diesen Blog-Eintrag werde ich von Zeit zu Zeit mit weiteren Code-Schnipseln ergänzen.

      Last update: 2019-12-22

      Verbundene Zellen auflösen

      Sub VerbundeneZellenAufloesen()
      Dim c As Range
      For Each c In Intersect(Columns("A:B"), ActiveSheet.UsedRange)
          If c.MergeCells Then
             With c.MergeArea
                .UnMerge
                .Value = c.Value
             End With
          End If
       Next c
       End Sub

      Checkboxen in Zellen hinzufügen

      Sub AddCheckbox()
           Dim i
           For i = 18 To 200 'cells from 18 to 200
           ActiveSheet.CheckBoxes.Add(Cells(i, "I").Left, Cells(i, "I").Top, 72, 17.25).Select
           With Selection
               .Caption = ""
               .Value = xlOff '
               .LinkedCell = "J" & i
               .Display3DShading = False
           End With
           Next
       End Sub