Mumble Auto-Restart für Let's Encrypt Zertifikate

Will man Let's Encrypt TLS/SSL-Zertifikate mit Mumble nutzen, so gibt es das Problem, dass der Mumble-Server diese nicht neu lädt, weswegen sie nach 90 ungültig sind. Wird der Mumble-Server in einem Docker-Container betrieben, kann man ihn über ein ENTRYPOINT automatisch neu starten lassen. Dafür muss der Mode restart: unless-stopped oder restart: allways gesetzt sein. In meinem Fall lasse ich die Let's Encrypt durch Caprover erstellen und mountet sie dann direkt im Docker-Container. Die Zertifikate findet man unter /captain/data/letencrypt/etc/live/<domain> auf dem Hostsystem.

#!/bin/bash
while true; do
  # Murmur im Hintergrund starten
  mumble-server -ini /config/mumble-server.ini -fg &
  
  PID=$!
  
  # Prozess für 30 Tage pausieren (2.592.000 Sekunden)
  sleep 2592000
  
  # Murmur-Prozess beenden, was den Container-Exit und Restart auslöst
  kill $PID
done

FrankenPHP und RoadRunner: Moderne App-Server für PHP

FrankenPHP und RoadRunner ersetzen den traditionellen PHP-FPM-Ansatz. Sie führen PHP-Anwendungen als dauerhafte Prozesse aus, die im Speicher bleiben, anstatt sie bei jeder Anfrage neu zu starten. Dieser Architekturwechsel bringt erhebliche Performance-Vorteile, insbesondere für framework-basierte Anwendungen mit hohem Initialisierungsaufwand. Beide Projekte sind Open-Source und können kostenlos genutzt werden.

FrankenPHP

FrankenPHP ist ein in Go geschriebener Application Server, der die PHP-Laufzeitumgebung direkt in den modernen Caddy-Webserver einbettet . Diese enge Integration erlaubt eine einfache Handhabung.

Man sollte beachten, dass FrankenPHP in zwei Modi betrieben werden kann:

  • Klassisch: Funktioniert als Drop-in-Ersatz für PHP-FPM und bietet sofortige Performance-Verbesserungen ohne Codeänderungen .
  • Worker-Modus: Hier bootet die gesamte Anwendung einmal und verbleibt im Speicher. Dies kann die Antwortzeiten laut Benchmarks um das 3,5-fache im Vergleich zu FPM verbessern, da der Framework-Initialisierungsaufwand für jede Anfrage entfällt.

Weitere herausragende Merkmale sind die native Unterstützung für moderne Protokolle wie HTTP/2 und HTTP/3, die automatische Verwaltung von HTTPS-Zertifikaten und die Möglichkeit, Anwendungen als eigenständige, portierbare Binärdateien zu bauen.

RoadRunner: Der leistungsstarke Manager

RoadRunner, ebenfalls in Go implementiert, verfolgt einen anderen Ansatz. Es handelt sich um einen High-Performance Application Server, der persistente PHP-Worker-Prozesse verwaltet . Anstatt PHP selbst einzubetten, startet und überwacht RoadRunner separate PHP-Worker und leitet Anfragen über eine schnelle Brücke an sie weiter.

Seine Stärken liegen in der hervorragenden Integration mit großen Frameworks wie Laravel oder Symfony und einem reichhaltigen Plugin-System, das Aufgaben wie Queue-Verarbeitung, gRPC und das Servieren statischer Dateien abdeckt . Dies macht es besonders geeignet für skalierbare Dienste, APIs und Anwendungen mit hohem Durchsatz.

Die Konfiguration und das Debugging gelten als anspruchsvoller als bei FrankenPHP.

Notwendige Anpassungen

Die Entscheidung für einen persistenten Application Server erfordert Anpassungen an der Architektur. Der größte Unterschied ist der Verlust der Prozessisolation. Während bei FPM jeder Request in einer sauberen Umgebung startet, kann globaler Zustand von einer Anfrage zur nächsten in einem Worker bestehen bleiben. Anwendungen müssen daher sorgfältiger mit globalen Variablen und der Initialisierung von Zuständen umgehen .

Zudem benötigt der Worker-Modus von FrankenPHP eine thread-sichere PHP-Version (ZTS), was die Kompatibilität mit einigen PHP-Erweiterungen einschränken kann. Für maximale Performance sollte der Bootstrap-Code der Anwendung so optimiert werden, dass er problemlos mehrmals in einem persistenten Worker ausgeführt werden kann.

Fazit

Mit FrankenPHP und RoadRunner stehen zwei ausgereifte und leistungsstarke Alternativen zu PHP-FPM zur Verfügung. Beide lösen das Problem des Kaltstarts von PHP-Anwendungen auf elegante Weise und ermöglichen so einen modernen, wettbewerbsfähigen Betrieb.

  • FrankenPHP überzeugt durch seine einfache Integration, den mitgelieferten Caddy-Server und seine raw Performance in Benchmarks.
  • RoadRunner punktet mit seiner Reife, einer breiten Funktionspalette durch Plugins und einer stabilen Architektur für komplexe, skalierbare Dienste.

Die Wahl zwischen ihnen hängt letztlich von den spezifischen Anforderungen des Projekts, der bestehenden Infrastruktur und den Vorlieben des Entwicklungsteams ab.

Abschließend ist es erwähnenswert, dass große Plattformen wie Facebook auf eigene, hochspezialisierte Lösungen wie HHVM und HackHack setzen, während FrankenPHP und RoadRunner diese moderne Architektur als praxistaugliche Werkzeuge für die gesamte PHP-Community bereitstellen.

NPM Packages - Patchen

Das Patchen von NPM-Paketen bezeichnet das gezielte Verändern des Quellcodes einer externen Bibliothek in einem Node.js-Projekt. Dies wird typischerweise dann notwendig, wenn ein kritischer Bug die eigene Anwendung betrifft, aber das offizielle Update des Paket-Maintainers noch nicht verfügbar ist. Diese Methode eignet sich auch für kleine, projekt-spezifische Anpassungen an einem Paket. Eine Alternative wäre das Erstellen eines Forks des Pakets, was jedoch mit einem erheblich größeren Aufwand verbunden ist.

Vorgehensweise mit patch-package

Ein beliebtes Werkzeug für diesen Prozess ist das NPM-Paket patch-package. Die Vorgehensweise ist wie folgt:

  1. Installieren npm i patch-package
  2. Erweitern der package.json um einen Postinstall-Step:
...
"scripts": {
     "postinstall": "patch-package"
}
...
  1. Manuell anpassen des Codes des zu patchenden Pakets innerhalb des node_modules-Ordners.
  2. npx patch-package <paket-name> aufrufen. Dadurch wird ein Diff erstellt und automatisch eine Patch-Datei abgelegt. Der Patch enthält die Unterschiede zwischen dem originalen und dem geänderten Code.
  3. Testen: npm i sollte nach der Installation automatisch das Paket patchen. Nachfolgend eine Beispielausgabe des Patchvorgangs:
patch-package
patch-package 8.0.1
Applying patches...
react-slick@0.30.3 ✔

Man sollte Patches immer nur als vorübergehende Lösung betrachten, bis ein offizielles Update des Originalpakets verfügbar ist. Den gefundenen Bug und den erstellten Fix sollte man idealerweise dem Maintainer des Originalpakets melden, beispielsweise via Pull Request auf GitHub. Zudem sollte man beachten, dass Patches bei größeren Updates des Originalpakets Konflikte verursachen können, die dann nach jedem update aufgelöst werden müssen.

raylib: Eine schlanke, plattformübergreifende Grafikbibliothek

raylib ist eine einfache Grafikbibliothek, die sich auf Spielprogrammierung spezialisiert hat. Das Cheat-Sheet mit allen 475 Befehlen passt auf fünf DIN-A4-Seiten. Durch den überschaubaren Umfang an Befehlen ist sie schnell zu erlernen und ideal für Anfänger sowie für das Prototyping geeignet. Die in reinem C99 geschriebene Bibliothek verfolgt einen minimalistischen Ansatz ohne visuelle Editoren und setzt voll auf Code. Sie hat keine externen Abhängigkeiten und kann dadurch einfach eingebunden werden.

Die Bibliothek ist als Open-Source unter der zlib/libpng-Lizenz verfügbar. raylib unterstützt eine Vielzahl von Plattformen, darunter Windows, Linux, macOS, FreeBSD, Android, Raspberry Pi (ARM) und WebAssembly (HTML5).

raylib bietet umfassende Features für die 2D- und 3D-Entwicklung. Die Hardware-Beschleunigung erfolgt über eine eigene OpenGL-Abstraktionsschicht, die verschiedene OpenGL-Versionen unterstützt. Ein herausragendes Merkmal ist das leistungsstarke Font-Modul, das SpriteFonts, BMFonts, TrueType (TTF) und Signed Distance Fields (SDF) beherrscht.

Für 3D-Entwickler bietet die Bibliothek volle Unterstützung für Shapes, Models, Heightmaps und Skeletale-Animationen, ergänzt durch ein flexibles Materialsystem für klassisches und PBR-Rendering. Zudem verfügt raylib über ein auf miniaudio basierendes Audiomodul, das Laden und Abspielen verschiedener Audio-Formate ermöglicht.

Features:

  • Plattformunabhängigkeit: Läuft auf Windows, Linux, macOS, Raspberry Pi, Android und im Browser via HTML5.
  • Grafik: Hardwarebeschleunigt mit OpenGL; unterstützt 2D- und 3D-Rendering, Texturen, Shaders und Post-Processing-Effekte.
  • **Audio:**Lädt und spielt Formate wie WAV, OGG, MP3, FLAC, XM und MOD ab; inklusive Audio-Streaming.
  • Eingabe: Vereinfachtes Handling für Tastatur, Maus, Gamepad und Touch-Input.
  • Mathematik: Leistungsstarkes Modul für Vektor-, Matrix- und Quaternion-Operationen (raymath).
  • Beispiele: über 120 Codebeispiele zum Lernen und für einen schnellen Start.

Die raylib-Community hat die Bibliothek in über 70 Programmiersprachen portiert. Zu den gepflegten Bindings gehören unter anderem: C#, Go, Python, Rust, Java und JavaScript, Lua, Nim, Zig, Odin, Pascal, R und PHP.

Neben der Kernbibliothek existieren einige Erweiterungen:

  • raygui: Ein Immediate-Mode-GUI-Modul für die schnelle Erstellung von Benutzeroberflächen.
  • rlImGui: Eine Integration der beliebten Dear ImGui mit ray lib.
  • Physac: Eine reine Header-Bibliothek für 2D-Physik.
  • raylib-extras: Eine Sammlung nützlicher Komponenten, Hilfsfunktionen und zusätzlicher Beispiele für C und C++.

Leider wird kein «einfach» zu aktiverendes Shadow-Rendering unterstützt. Dieses kann zwar über Custom-Shader implementiert werden, setzt dann allerdings ein gewisses Vorwissen voraus.

Vorkonfigurierte Projektvorlagen für verschiedene IDEs, einschließlich Visual Studio Code, erleichtern den Projektstart erheblich.

Unter github.com/southdy/awesome-raylib findet man eine hervorragende Sammlung mit weiteren raylib-Ressourcen.

Kooha - Simpler Screen Recorder für Linux

Wichtiger Hinweis: Kooha benötigt zwingend PipeWire, falls eure Distribution dieses noch nicht nutzt, könnt ihr Kooha leider nicht verwenden.

Wer unter Linux den Bildschirm aufnehmen möchte, steht oft vor einer Herausforderung. Im Gegensatz zu Simple Screen Recorder der das Simple nur im Namen trägt. Ist das Design von Kooha ist auf einfache Nutzbarkeit ausgelegt. Er eignet sich besonders, um Ausschnitte des Screens als Animation oder kurzes Video zu speichern.

Die Hauptfunktionen sind schnell zugänglich:

  • Audiomitschnitt:
    Mikrofon, Systemaudio oder beides gleichzeitig.
  • Vielseitige Formate:
    Aufnahmen in WebM, MP4, GIF oder Matroska.
  • Flexible Aufnahmebereiche:
    Gesamter Bildschirm, ein bestimmter Bereich oder ein Fenster.

Kooha ist ein gelungener Rekorder, der sich auf das Wesentliche konzentriert und eine Lücke im Linux-Ökosystem, besonders für Wayland-Nutzer, schließt.

Wicked Engine - OpenSource C++/Lua-Game-Engine

Bei der Wicked Engine handelt es sich um eine cross-plattform 3D-Grafikengine unter der MIT-Lizenz Ihr erklärtes Ziel ist es, einen modernen Renderer bereitzustellen, der die neuesten Grafikkarten-APIs voll ausreizt. Sie soll einfach zu bedienen sein und den Nutzer nicht mit komplexen Abhängigkeiten belasten.

Kernfeatures:

  • Leistungsstarkes Rendering:
    Moderne Tiled-Forward-Renderer mit einem cleveren Visibility-Buffer-System für Effekte wie Temporal AA und SSR, die sonst nur deferred möglich wären .
  • Volle Nutzung von DirectX 12 und Vulkan inklusive Hardware-Raytracing, HDR und Variable Rate Shading (VRS) .
  • C++-Framework für maximale Leistung und Kontrolle.
  • Lua-Scripting zur Laufzeit, ideal für Rapid Prototyping und Gameplay-Logik.
  • Importiert Formate wie GLTF 2.0, FBX, OBJ und das native WISCENE.
  • Spezieller Support für VRM-Charactermodelle, perfekt für Anime-Projekte und V-Tuber .
  • Plattformübergreifend
    • Läuft auf Windows 10+ und Linux .
    • Experimentell auch für Xbox Series X|S und PlayStation 5
  • Terrain Unterstützung mit Editor
  • Mesh Blending
  • Wetter und Sky-System

Leider gibt es keinen VR-Support und dieser ist auch nicht geplant.

Die Wicked Engine kann über Steam installiert werden oder einfach über die Webseite wickedengine.net bezogen werden.

Microsoft Edit - Terminal Editor von Microsoft

Microsoft hat mit Edit einen neuen, quelloffenen Texteditor für die Kommandozeile veröffentlicht, der sich auch mit der Maus bedienen lässt. Damit deckt Microsoft nun das gesamte Spektrum von der IDE über den Code-Editor bis hin zum Terminal-Editor ab.

Im Gegensatz zu rein tastaturzentrierten Editoren wie Vim oder Emacs können Nutzer mit der Maus navigieren, Text auswählen und scrollen. Dies macht Edit besonders für Einsteiger attraktiv, die mit den klassischen Terminal-Editoren noch nicht vertraut sind.

Edit positioniert sich mit seiner Mausunterstützung und der an VS Code angelehnten Bedienung als zugängliche Alternative zwischen Nano und den mächtigen, aber komplexen Editoren Vim und Emacs. Er erinnert an edit.com, der unter DOS Verwendung fand. Allerdings bietet selbst Nano derzeit noch einige Funktionen, die in Edit fehlen, wie z.B. Syntax-Highlighting für verschiedene Programmiersprachen.

Microsofts neuer Editor Edit wird primär für Windows-Systeme entwickelt und wird zukünftig direkt in Windows 11 integriert werden. Für Linux und macOS kann man Edit über die Github-Seite herunterladen.

PixiEditor: Ein universeller 2D-Editor

PixiEditor hat sich von einem reinen Pixel-Art-Editor zu einem universellen 2D-Grafikeditor entwickelt, der eine All-in-One-Lösung für nahezu alle 2D-Grafikanforderungen sein will, von Pixel-Art über Vektoren bis hin zu Animationen. Was ihn besonders macht, ist die einzigartige Kombination verschiedener Werkzeuge und eines mächtigen Node-Graph-Systems. Die Anwendung ist in C# mit dem .NET-Framework entwickelt. PixiEditor steht unter der LGPL 3.0-Lizenz. Die Software ist frei und quelloffen

Eine leistungsstarke Brush Engine fehlt momentan. Die Brush Engine ist ein wichtiger Meilenstein auf der Roadmap, von PixiEditor und ist nach Feedback zur Version 2.0 nun für Ende 2025 angekündigt.

Features:

  • Universal-Editor
    Ein Tool für Pixel-Art, Malerei, Vektorgrafiken, Bildbearbeitung und prozedurale Grafiken.

  • Werkzeugsets
    Umschaltbare Werkzeugsets für Pixel-Art, Malerei (weiche Pinsel) und Vektoren.

  • Node-Graph
    Ein mächtiges System für nicht-destruktives Arbeiten, prozedurale Effekte, Animationen und eigene Shader.

  • Animation
    Ermöglicht Frame-by-Frame-Animationen und prozedurale Animationen via Node-Graph; Export als GIF, MP4 oder Spritesheet.

PixiEditor ist besonders für die Spieleentwicklung prädestiniert, da er durch seine Kombination aus spezialisierten Werkzeugen und prozeduralen Möglichkeiten einen kompletten Workflow für 2D-Game-Assets in einem einzigen, kostenlosen Tool vereint. Der einzigartige Node-Graph eröffnet zudem die Möglichkeit, komplexe visuelle Effekte (VFX) und non-destruktive, prozedurale Texturen zu generieren.

PixiEditor ist kostenlos und plattformübergreifend für Windows, Linux und macOS verfügbar.

Bruno - eine schlanke Open-Source-Alternative zu Postman

Die meisten Entwickler kennen Postman als das Standard-Tool für API-Tests und Dokumentation. Doch seit einiger Zeit macht ein neues Tool namens Bruno auf sich aufmerksam. Die Open-Source-Anwendung verfolgt einen anderen Ansatz: einfacher, leichter und vollständig lokal. Für viele Projekte reicht das völlig aus und bringt sogar Vorteile mit sich.

Bruno ist ein API-Client, der mit dem Ziel entwickelt wurde, APIs wie "Code" zu behandeln. Statt auf eine zentrale Datenbank oder Cloud-Anbindung zu setzen, speichert Bruno API-Collections einfach als YAML-Dateien im Projektverzeichnis. Die Struktur ist transparent, git-freundlich und portabel.

Die Anwendung selbst ist minimalistisch gehalten, schnell gestartet und benötigt keine Registrierung oder Cloud-Zugang. Besonders in Git-basierten Projekten ist Bruno eine angenehme Alternative zu komplexeren Tools.

Bruno ist besonders dann interessant, wenn man:

  • API-Tests direkt im Projekt mit versionieren möchte,
  • Ein Tool sucht, das ohne Registrierung oder Cloud-Zwang auskommt
  • In automatisierten oder CLI-basierten Workflows arbeitet (z. B. über GitHub Actions)

Die Bedienung ist unkompliziert, die gesicherten Requests lassen sich einfach über Git mit dem Team teilen, wie man es von Code-Dateien kennt.

Postmann ist nach wie vor ein leistungsstarkes Werkzeug für Teams mit hohen Ansprüchen an Features, Cloud-Synchronisation und Testautomatisierung. Wer jedoch ein leichtgewichtiges, kostenloses und Git-kompatibles Tool sucht, sollte sich Bruno genauer ansehen.

Was läuft mit Was - Wappalyzer-Chrome-Plugin

Wer wissen möchte, mit welchem "Tech Stack" eine Webseite/Service erstellt wurde, setzt oft auf Browser-Plugins. Zwei bekannte Analyse-Tools sind WhatRuns und Wappalyzer – beide versprechen, die eingesetzten Frameworks, CMS, Analytics-Tools und weitere Komponenten einer Website zu erkennen.

In letzter Zeit funktioniert WhatRuns leider nicht mehr zuverlässig. Nutzer berichten, dass statt präziser Analysen häufig nur noch allgemeine "Werbe-Links" zu bekannten Frameworks oder kommerziellen CMS/Ad-Providern angezeigt werden. Selbst bei statischen Webseiten ohne jegliches JavaScript werden Technologien aufgelistet, die nachweislich gar nicht verwendet werden. Diese Ungenauigkeit schmälert den Nutzen des Tools erheblich.

Wappalyzer hingegen liefert weiterhin präzise Ergebnisse. Die Erkennung der eingesetzten Technologien ist aktuell deutlich besser, und die Erweiterung wird regelmäßig aktualisiert.

Wer auf präzise Technologie-Analysen angewiesen ist oder einfach neugierig ist, womit Webseiten gebaut sind, sollte aktuell besser auf Wappalyzer setzen. Der Wechsel ist einfach - die Erweiterung ist für Chrome, Vivaldi, Firefox und andere Browser verfügbar.