Montag Feb. 16, 2026

vdradmin-go als vdradmin(-am) Alternative

Ich benutze vdradmin-am jetzt schon seit etlichen Jahren um meinen VDR (Video Disc Recorder) zu steuern. Hauptsächlich um Sendungen aufzuzeichnen und zu guggen, was so um Fernsehen läuft. Für Live-TV nehme ich den VDR so gut wie nicht her, da ich alles aufzeichne, was ich anschauen will. vdradmin-am hat jetzt doch schon einige Jahre auf dem Buckel und ist in Perl geschrieben. Ich hatte schon seit Jahren die Idee, dass mal in Go neu zu schreiben, aber war zeitlich etwas schwierig. Mit KI sieht die Sache jetzt anders aus. Es hat mich zwar trotz KI einige Abende und Wochenenden gekostet, bis alles soweit lief, wie ich das wollte, aber jetzt habe ich tatsächlich vdradmin-go fertig.

Man kann von KI halten was man will, aber mich fasziniert das immer wieder, was man damit machen kann. Ich hab jetzt genau den vdradmin, denn ich schon immer haben wollte. Die Hauptziele waren hauptsächlich:

- Moderne Architektur: Hexagonale Architektur (ports & adapters)
- Clean code, geschrieben in Go und Go best practices
- Moderne UI: Modernes CSS, minimales JavaScript und wo man es doch braucht htmx für die Interaktion
- Themes: Sind schon über 30 fertige Themes drin und lässt sich auch leicht um Neue erweitern
- Archiv: Wenn ich eine Sendung archivieren will, brauche ich jetzt bloß auf den Archiv Button zu drücken bei der Aufnahme und schon wird das Ganze im Hintergrund in .mp4 oder .mkv konvertiert. Danach sind die Aufnahmen erheblich kleiner als die ganzen .ts files. Das System ist allerdings ziemlich meinen Bedürfnissen angepasst.
- Das Konfigurationsdatei ist eine YAML-Datei, dass man entweder selber editiert oder über die UI ändert.
- Fernsehen kann man direkt im Browser. Das benötigt dann das vdr-streamdev-server Plugin und auch ffmpeg.
- Damit das mit der EPG Suche etwas besser klappt, wird das vdr-epgsearch Plugin benötigt.

Ansonsten ist das Ganze ein Go Binary und damit kann man dann schon Einiges anfangen. Die o.g. Plugins und ffmpeg sollte man trotzdem installieren, damit man die volle Funktionalität hat. Und so sieht das Ganze dann aus (oben das "Dark" und unten "Spaceship Grey Dark" Theme):

vdradmin-go_channels_01.png vdradmin-go_watch_tv_01.png


 spaceship_grey_dark_channels-fs8.png spaceship_grey_dark_now-fs8.png spaceship_grey_dark_playing-fs8.png

Mittwoch Dez. 28, 2016

m4a Dateien in mp3 konvertieren mit ffmpeg unter Linux

Mit folgender Kommandozeile kann man mit ffmpeg m4a Sounddateien ins mp3 Format umwandeln:

find . -type f -name '*.m4a' -exec bash -c 'ffmpeg -i "$0" "${0/%m4a/mp3}"' '{}' \;

Mit find suchen wir uns erst mal alle m4a Dateien und für jede Datei wird eine neue Bash Shell gestartet. Diese startet ffmpeg, übergibt die gefundene Datei an ffmpeg als Input (-i). Dahinter wird die Zieldatei angegeben. Dabei ersetzen wir die Dateiendung m4a durch mp3.

Montag Nov. 07, 2016

KDE Plasma Display Helligkeit (Display Brightness)

Wenn bei KDE Plasma mal wieder der Helligkeitsregler (Screen / Display brightness) versagt und genau nichts macht (was bei mir unter Archlinux ab und an passiert) und man auf das nächste Update wartet, kann man sich der weilen so behelfen, das man die Hintergrundbeleuchtung per Kommandozeile einstellt. Z.B.:

echo 700 > /sys/class/backlight/gmux_backlight/brightness

In meinem Fall steht hier gmux_backlight (MacBook Pro, der unter Linux läuft). Bei anderen muss man unter /sys/class/backlight/ einfach schauen, welche Backlights angezeigt werden (z.B. intel_backlight). Den aktuellen Wert kann man sich mit cat /sys/class/backlight/*/brightness ausgeben lassen. Für das gmux_backlight war der Wert bei mir bei 1023. Am Besten geht man in 100erter Schritten nach unten bis man die gewünschte Helligkeit eingestellt hat.

Donnerstag Nov. 03, 2016

Website jetzt mit über HTTPS erreichbar

Hat ne Weile gedauert, aber jetzt ist tauceti.net endlich nur noch über eine sichere https-Verbindung erreichbar. Verwendet habe ich ein kostenloses Let's Encrypt Zertifikat. Das Ganze kann man mit Hilfe von Certbot relativ einfach einrichten. Einfach Webserver (z.B. nginx, Apache, ...) und Betriebssystem auswählen und schon bekommt man entsprechende Informationen, was man es einrichten muss. Entweder ziemlich automatisiert (hier sind nur ein paar Handgriffe notwendig) oder mit ein bisschen mehr Handarbeit, aber dafür mehr Eingriffsmöglichkeiten während der Einrichtung.

Die Zertifkate sind jeweils 3 Monate gültig und man richtet sich am Besten einen Cronjob o.ä. ein, der dann automatisiert ein neues Zertifikat einrichtet, bevor das Alte abläuft.

Donnerstag Okt. 20, 2016

Google Storage mit s3cmd und aws cli benutzen

Wenn man s3md mit Google Cloud Storage benutzen will, muss man in dessen Konfigurationsdatei .s3cfg Folgendes anpassen:

access_key = xxx
secret_key = xxx
host_base = storage.googleapis.com
host_bucket = %(bucket).storage.googleapis.com

xxx muss man natürlich durch seine entsprechenden Keys ersetzen, die man sich über die Google Console/UI (Storage -> Settings -> Interoperability) erstellen kann (nachdem man den interoperable access aktiviert hat natürlich). Diese Keys sind pro Projektmitglied und nicht pro Projekt (also jeder hat seinen eigenen Key).

Bei der AWS CLI (aws Kommando) konnte ich die Einstellungen in .aws/config irgendwie nicht nutzen.  Hier half nur die Keys als Env. Variable zu setzen und den Endpoint zu ändern:

export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
aws s3 --endpoint-url https://storage.googleapis.com ls

Auch hier natürlich xxx entsprechend ändern.

Dienstag Okt. 11, 2016

How it feels to learn JavaScript in 2016

Ein wirklich lustiger Artikel über JavaScript Frontend-Entwicklung.

Donnerstag März 24, 2016

nc (netcat) als primitiver Portscanner

Wenn man kurz mal wissen möchte, ob z.B. eine Portrange offen ist, geht das recht flott mit nc (netcat) z.B.: 

nc -w 2 -zv 10.0.0.1 30000-30003

Connection to 10.0.0.1 30000 port [tcp/*] succeeded!
Connection to 
10.0.0.1 30001 port [tcp/*] succeeded!
Connection to 
10.0.0.1 30002 port [tcp/*] succeeded!
Connection to 
10.0.0.1
 30003 port [tcp/*] succeeded!

Mit -w geben wir ein Timeout von 2 Sek. an, damit wir nicht so lange warten müssen. -z prüft, ob der Port offen ist, -v macht nc etwas gesprächiger und hinten gibt man dann noch die IP und die Port(s) an.

Läuft Docker Container im privilegierten Modus?

Wie findet man raus, ob ein Docker Container im privilegierten Modus läuft?

docker inspect --format='{{.HostConfig.Privileged}}' <container id>

Dienstag März 01, 2016

PID eines Prozesses auf dem Docker Host einem Docker Container zuordnen

Wenn man auf einem Server Docker am Laufen hat, sieht man vielleicht mal Prozesse auf diesem Host mit top, ps o.ä. mit hoher CPU-Belastung. Nun möchte man wissen, in welchem Container dieser Prozess läuft. Das findet man mit folgendem Kommando raus.

sudo docker ps -q | sudo xargs docker inspect --format '{{.State.Pid}}, {{.Id}}'

Die erste Spalte zeigt die PID an und dahinter die Container ID.

Dienstag Sep. 08, 2015

Ersatz für KDE Quadkonsole

Bei KDE 4 hatte ich immer u.a. die KDE App Quadkonsole im Einsatz. Wird aber leider schon länger nicht mehr weiterentwickelt und unter Archlinux mit KDE Plasma 5 klappte das mit selber kompilieren auch nicht so wirklich. Als Ersatz habe ich Terminator gefunden, eine Konsole mit der man das Konsolenfenster in mehrere Teile splitten kann.

Montag Aug. 31, 2015

Audex - KDE CD Ripper

Ein wirklich gutes Programm zum CD rippen unter KDE ist Audex. Alles Mögliche lässt sich einfach und praktisch über die GUI einstellen inkl. der Dateinamen usw. Ziemlich durchdacht.

Samstag Aug. 08, 2015

Wo ist mein Speicherplatz hin?

cd /in/ein/verzeichnis
du -h . | grep -P '^[0-9\.]+G

Alternativ das Tool ncdu installieren...

Gentoo - Alle installierten Pakete auflisten

equery list "*"

Muguet - DNS Server & Reverse Proxy für Docker

Muguet ist ein DNS Server & Reverse Proxy für Docker, der automatisch generierte Hostnamen zu Conainter IPs auflöst. Außerdem enthält Muguet einen Reverse Proxy, der den Zugriff auf Web-Apps in den Container auf Port 80 ermöglicht.