MiraBox - Ein Chinesischer Stream Deck Klon

Das MiraBox MBOX 293S, häufig auch „Stream Dock“ genannt, ist ein kompaktes, kabelgebundenes Macro-Pad, das funktional an ein „Stream Deck“ erinnert, jedoch mit etwa 35 Euro nur einen Bruchteil kostet. Es verfügt über 15 frei programmierbare LCD-Tasten, hinter denen ein durchgehendes Display verbaut ist. Dadurch können die Tasten beliebige Icons oder Statusanzeigen darstellen.

Im Vergleich zu herkömmlichen Tastaturen oder Maus-Shortcuts bietet ein Gerät dieser Art deutliche Vorteile: visuelles Feedback, eine klare Zuordnung von Aktionen und eine schnell zugängliche Bedienoberfläche. Das macht es besonders für Workflows mit vielen wiederkehrenden Schritten interessant, bei denen Übersicht und Reaktionszeit eine große Rolle spielen.

Elgato brachte mit dem „Stream Deck“ den ersten weit verbreiteten Vertreter dieser Geräteklasse auf den Markt, primär für Streamer, die damit Szenen, Audioquellen oder andere Streaming-Elemente steuern. Die Anforderungen, viele Befehle, schnelle Erreichbarkeit und intuitive Bedienung, gelten aber ebenso für zahlreiche andere Anwendungen, etwa Entwicklungs-, Kreativ- oder Automations-Tools.

Inzwischen existieren sowohl von Elgato als auch von MiraBox zahlreiche Varianten in unterschiedlichen Größen. Teilweise verfügen diese auch über Drehregler, um beispielsweise Lautstärken analog zu regeln.

Jeder Button des MBOX 293S kann mit Shortcuts belegt werden, die über die mitgelieferte Software verwaltet werden. Diese Software lässt sich über Plugins aus einem eigenen App-Store erweitern. Viele Plugins, die ursprünglich für das Elgato Stream Deck entwickelt wurden, sind zudem mit der MiraBox kompatibel. Mithilfe eines Tampermonkey-Scripts lassen sich diese Plugins direkt aus dem offiziellen Elgato-Store herunterladen. Icons und grafische Elemente können meist problemlos übernommen werden. Bei Plugins hängt die tatsächliche Kompatibilität jedoch von der jeweiligen Implementierung ab.

Der Shop und die offizielle Software unterstützen nur Windows und MacOS. Für die MiraBox 293 (ohne S) existieren bereits Open-Source-Implementierungen, die unter Linux funktionieren. Auch gibt es bereits ein Linux StreamDock SDK, das allerdings keine Plugins unterstützt, sondern nur die direkte Kommunikation. Wahrscheinlich wird es aber bald erste Implementierungen eines Pluginsystems auch für Linux geben.

Einer der nächsten Artikel wird sich mit der Pluginentwicklung beschäftigen. Auch wenn die Hardware gut und preiswert ist, so ist vor allem die Dokumentation auf Englisch dürftig. Es gibt zwar ein großes Forum, allerdings ist dieses hauptsächlich in Chinesisch.

Zusammengefasst kann man sagen, dass es sich bei der MiraBox um ein interessantes Produkt handelt. Vor allem durch den Preis wird es für eine größere Zielgruppe interessant.

Mit dem Ulanzi D200 U-Studio gibt es ein weiteres ähnliches Gerät, das bereits ausführlich auf HACKADAY analysiert wurde.

MiniSearch - Volltextsuche mit minimalem Overhead

MiniSearch ist eine JavaScript-Bibliothek, die client- und serverseitige Volltextsuche ermöglicht, indem sie einen invertierten Index im Arbeitsspeicher des Browsers oder Node.js-Servers aufbaut. Der Index wird vollständig im Arbeitsspeicher gehalten, wodurch die Datenmenge, die durchsucht werden kann, begrenzt ist. Auch wird der Index beim Starten immer neu aufgebaut, was für größere Mengen an Daten nicht ideal ist. Bei Versuchen mit ca. 6 MB an Daten hat der Aufbau des Index nur ca. 860 ms gedauert. Eine Fuzzy-Suche war meist in unter einer ms durchgeführt.

MiniSearch ist eine reine JavaScript-Bibliothek ohne externe Abhängigkeiten. Dadurch ist sie auch ideal, wenn ein kleines serverseitiges Projekt mit einer Volltextsuche ausgestattet werden muss, wo Solr oder auch schon Meilisearch viel Overhead benötigen. MiniSearch hingegen kann direkt eingebunden und verwendet werden. Auch die Nutzung im Browser in einer PWA ist ideal.

Die Kernfunktionalität von MiniSearch basiert auf einem Radix Tree (einem platzoptimierten Präfixbaum) für den invertierten Index. Dieser Ansatz macht die Indexierung und Suche nicht nur schnell, sondern auch besonders speichereffizient, was für mobile Browser entscheidend ist.

Es ist möglich, Dokumente zur Laufzeit hinzuzufügen und zu entfernen. Die Bibliothek bietet erweiterte Suchfunktionen wie Präfix-Suche, Fuzzy-Suche für Tippfehler und Field Boosting zur Gewichtung von Feldern, sodass Treffer in Titelfeldern höher bewertet werden können als z.B. in der Beschreibung. MiniSearch bietet viele Funktionen, die man bei einer so kleinen Suche nicht erwarten würde. So generiert Die Auto-Suggestion-Funktionalität Vorschläge direkt aus den indizierten Dokumenten und sortiert sie nach Relevanz.

Im Vergleich zu schwergewichtigen Lösungen wie Solr oder Meilisearch punktet MiniSearch durch minimalen Overhead. Während diese serverbasierten Lösungen erhebliche Ressourcen benötigen, kann MiniSearch direkt im Anwendungsprozess operieren.

sed - Der universelle Text-Transformer für die Kommandozeile

sed steht für Stream Editor und ist ein Unix/Linux-Kommandozeilenwerkzeug, das die automatische Bearbeitung von Text ermöglicht, indem es nicht-interaktive Transformationen durchführt.

sed gibt es für alle Unix-ähnlichen Betriebssysteme (wie Linux oder macOS) oder Umgebungen wie Cygwin unter Windows. sed ist praktisch immer vorinstalliert oder über die Paketverwaltung leicht beziehbar. Da es Bestandteil von Busybox ist, ist es auch in den meisten Docker-Containern vorhanden und muss nicht installiert werden.

Die Kernfunktionalität von sed besteht darin, einen Textstrom zeilenweise zu lesen, auf jede Zeile eine oder mehrere vordefinierte Operationen anzuwenden und das Ergebnis auszugeben. Sämtliche Bearbeitungen wie Suchen, Ersetzen, Löschen oder Einfügen laufen dabei ohne manuelle Eingriffe ab. sed verarbeitet Text zeilenweise: Es lädt jede Zeile in den Pattern Space, wendet die definierten Operationen darauf an und gibt das Ergebnis anschließend aus. Dieser Prozess wiederholt sich für alle Zeilen der Eingabedatei.

Es eignet sich hervorragend für Skripte oder Build-Pipelines, in denen Konfigurationsdateien angepasst werden müssen.

Entfernt alle Zeilen, die mit '#' beginnen und überschreibt die Originaldatei

sed -i '/^#/d' meine_konfiguration.conf

Ersetzt in allen Zeilen das Wort "alt" durch "neu" und erstellt eine Backup-Datei

sed -i.bak 's/alt/neu/g' meine_datei.txt

Weitere Informationen wie eine vollständige Befehlsreferenz und Tutorials findt man in der offiziellen GNU sed Dokumentation.

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.