Lokale Videogenerierung: ComfyUI und LTX-2.3

Bisher war die Erstellung von Videos mithilfe neuronaler Netze das Vorrecht von Cloud-Diensten wie Runway oder Luma. Wenn Sie heute über eine moderne Nvidia-Grafikkarte verfügen, können Sie hochwertige Videos direkt auf Ihrem Computer erstellen. In diesem Beitrag erkläre ich Ihnen, wie Sie die lokale Videogenerierung mit ComfyUI und dem effektiven LTX-2.3-Modell einrichten.

Tools zur Videogenerierung

Für die Arbeit benötigen wir:
ComfyUI: eine leistungsstarke Schnittstelle mit einer knotenbasierten Architektur, die es Ihnen ermöglicht, den Generierungsprozess flexibel anzupassen.
LTX-2.3: Ein modernes Modell von Lightricks, optimiert für die Erstellung flüssiger und detaillierter Videos mit relativ moderatem Videospeicherbedarf.

Hardwareanforderungen

Das Generieren von Videos ist ein viel ressourcenintensiverer Prozess als das Arbeiten mit Bildern:
Grafikkarte (GPU): Nvidia RTX mit 8 GB VRAM ist das Minimum, das für eine Auflösung von 768 x 512 erforderlich ist. Für eine komfortable Bedienung und höhere Auflösungen sind 16–24 GB VRAM äußerst wünschenswert.
Arbeitsspeicher (RAM): mindestens 32 GB. Videomodelle und VAEs beanspruchen beim Herunterladen viel Platz.
Speicherplatz: ca. 500 GB für das Modell selbst und zugehörige Komponenten.

Einrichten und starten

Der Prozess zum Starten von LTX-2.3 in ComfyUI ist wie folgt:
1. ComfyUI aktualisieren: Das Modell ist relativ neu. Stellen Sie daher sicher, dass Sie die neueste Version der Schnittstelle installiert haben.
2. Workflow installieren: Der einfachste Weg ist, eine vorgefertigte JSON-Vorlage für LTX Video zu finden. Das Modell erfordert bestimmte Knoten, um mit dem latenten Videoraum zu arbeiten.
3. Eingabeaufforderung und Parameter: Geben Sie eine Beschreibung der Szene auf Englisch ein. Beachten Sie, dass der LTX-2.3 Bewegungen gut versteht (z. B. „Kamera umkreist“, „schnelle Bewegung“).

Warum LTX-2.3 wählen?

LTX-2.3 zeichnet sich dadurch aus, dass es Ergebnisse liefert, die mit proprietären Cloud-Diensten vergleichbar sind, aber lokal ausgeführt wird. Das gibt Ihnen:
Vollständiger Datenschutz: Ihre Eingabeaufforderungen und generierten Videos werden nicht auf die Server anderer Personen übertragen.
Kontrolle: Sie können mit der Bildrate (FPS), der Auflösung und der Eingabeaufforderungsstärke experimentieren, ohne für jeden Versuch bezahlen zu müssen.

Die lokale Videoerzeugung befindet sich noch in der aktiven Entwicklung und LTX-2.3 ist ein großartiger Einstieg in die Welt des „Heimat-Hollywoods“.

Links

https://github.com/comfyanonymous/ComfyUI
https://huggingface.co/Lightricks/LTX-Video

Portweiterleitung zwischen Clients über Chisel: ein abgespeckter Tunnel ohne L3

Wenn sich zwei Geräte hinter NAT oder strengen Firewalls befinden und sich nicht direkt „sehen“ können, scheint ein VPN die Standardlösung zu sein. Ein vollwertiger L3-Tunnel (wie WireGuard oder OpenVPN) ist jedoch häufig überflüssig: Er erfordert Root-Rechte, die Einrichtung virtueller Schnittstellen und kann zu Konflikten mit vorhandenen Routen führen.

In solchen Fällen ist es praktisch, Chisel zu verwenden – einen TCP/UDP-Tunnel, der auf HTTP läuft und WebSockets für die Datenübertragung verwendet. In diesem Hinweis werde ich zeigen, wie man einen Port über einen Zwischenserver von einem Client an einen anderen „weiterleitet“.

Wie funktioniert es?

Stellen Sie sich die Situation vor: Sie haben Client A (z. B. Ihren Heimserver), Client B (Ihren Arbeitslaptop) und einen VPS mit einer öffentlichen IP-Adresse. Clients A und B können auf den VPS zugreifen, jedoch nicht aufeinander.

Das Weiterleitungsschema sieht folgendermaßen aus:
1. Client A stellt eine Verbindung zum VPS her und öffnet einen „Reverse“-Port auf dem Server. Jetzt geht alles, was an Port X des Servers ankommt, an Port Y von Client A.
2. Client B stellt eine Verbindung zum VPS her und leitet Port Z von seinem lokalen Computer an Port X des Servers weiter.
3. Infolgedessen greift Client B auf localhost:Z zu und landet auf Client A:Y.

Dieser Ansatz ist eine der Lösungen in Fällen, in denen die Kommunikation mit einem VPS die L3-Schicht nicht implementiert oder keine Möglichkeit besteht, Routing zwischen Clients zu konfigurieren. Wir arbeiten ausschließlich auf Anwendungs- und Portebene.

Schritt 1: Starten Sie den Server

Führen Sie Chisel auf Ihrem VPS einfach im Servermodus aus. Das Flag --reverse ist erforderlich, damit Clients Ports auf der Serverseite öffnen können.

chisel server --port 8080 --reverse

Schritt 2: Client A (Quelle) verbinden

Nehmen wir an, Kunde A möchte den Zugriff auf seinen lokalen Webserver auf Port 3000 öffnen. Er verbindet sich mit dem VPS und sagt: „Reservieren Sie Port 2000 auf dem Server und leiten Sie ihn an 3000 an mich weiter.“

chisel client vps-ip:8080 R:2000:127.0.0.1:3000

Jetzt führt Port 2000 am VPS (an der Loopback-Schnittstelle) zu Client A.

Schritt 3: Client B (Verbraucher) verbinden

Jetzt möchte Client B auf diese Ressource zugreifen. Es verbindet sich mit demselben VPS und leitet seinen lokalen Port 8080 an Port 2000 des Servers weiter.

chisel client vps-ip:8080 8080:127.0.0.1:2000

Bereit! Wenn Sie nun http://localhost:8080 auf Client B öffnen, sehen Sie, dass der Dienst auf Client A ausgeführt wird.

Sicherheit und Nuancen

Chisel unterstützt die Authentifizierung über das Flag --auth, was bei der Arbeit über öffentliche Server dringend empfohlen wird. Sie können TLS-Zertifikate auch zum Verschlüsseln des Datenverkehrs verwenden.

Der Hauptvorteil dieses Ansatzes besteht darin, dass keine TUN/TAP-Geräte und komplexen Routing-Tabellen erforderlich sind. Dabei handelt es sich um einen abgespeckten Tunnel, der genau eines tut: Ports über eine WebSocket-Verbindung bindet. Dies funktioniert sogar über Unternehmens-Proxys, wenn Sie Chisel so konfigurieren, dass es über Port 443 funktioniert.

Ausgabe

Chisel ist ein Dienstprogramm für bestimmte Netzwerkaufgaben. Wenn Sie Ports zwischen isolierten Knoten weiterleiten müssen, ohne ein vollwertiges VPN einzurichten, erweist sich eine Kombination aus Vorwärts- und Rückwärtstunneln über einen Relay-Server als eine durchaus praktikable Lösung.

Links

https://github.com/jpillora/chisel

Lokale Vibe-Codierung: LM Studio, VS Code und Weiter

Wenn Sie den Wunsch hatten, neuronale Netze zum Schreiben von Code zu verwenden (sog. Vibe-Codierung), und über einen recht leistungsstarken Computer verfügen, beispielsweise mit einer Nvidia RTX-Grafikkarte, können Sie die gesamte Umgebung völlig kostenlos auf Ihrem Computer bereitstellen. Dadurch werden Probleme mit kostenpflichtigen Abonnements gelöst und Sie können sicher mit Projekten unter NDA arbeiten, da Ihr Code nirgendwohin gesendet wird. In diesem Beitrag beschreibe ich, wie man ein lokales Bundle aus LM Studio, VS Code und der Continue-Erweiterung zusammenstellt.

Tools für die lokale Vibe-Codierung

Für komfortables Arbeiten benötigen wir drei Hauptkomponenten:
LM Studio: eine praktische Anwendung zum Herunterladen und Ausführen lokaler LLMs. Es übernimmt die gesamte Komplexität der Arbeit mit GGUF-Modellen und stellt einen lokalen Server bereit, der mit der OpenAI-API kompatibel ist.
VS Code: ein beliebter und bekannter Code-Editor.
Continue: Erweiterung für VS Code, die neuronale Netze direkt in die Arbeitsumgebung integriert. Ermöglicht das Chatten, das Hervorheben von Code für die Umgestaltung und unterstützt die automatische Vervollständigung.

Hardwareanforderungen

Lokale Sprachmodelle sind speicherintensiv:
Grafikkarte (GPU): Nvidia mit 8 GB VRAM oder höher (für komfortables Arbeiten mit Modellen mit 7–8 Milliarden Parametern). Schwerere Modelle benötigen 16 GB VRAM.
Speicherplatz: ca. 500 GB zum Speichern verschiedener heruntergeladener Modelle.

Link konfigurieren

Der Einrichtungsprozess ist recht einfach und erfordert keine komplexen Manipulationen im Terminal:
1. Laden Sie LM Studio herunter und installieren Sie es. Verwenden Sie die integrierte Suche, um ein leichtes Modell wie Qwen Coder oder gemma3:12b zu finden.
2. Gehen Sie in LM Studio zur Registerkarte Lokaler Server und klicken Sie auf Server starten. Standardmäßig startet es unter „http://localhost:1234/v1“.
3. Öffnen Sie VS Code und installieren Sie die Erweiterung Continue aus dem Plugin-Store.
4. Öffnen Sie die Continue-Konfigurationsdatei und fügen Sie ein neues Modell hinzu. Geben Sie dabei den „openai“-Anbieter und die Adresse Ihres lokalen Servers aus LM Studio an.

Anschließend können Sie direkt in der Seitenleiste „Weiter“ mit Ihrem lokalen LLM kommunizieren, Fragen zu Ihrem Code stellen und neue Komponenten generieren.

Warum funktioniert das?

Wie ich bereits geschrieben habe, schneiden LLMs mit flacher Struktur und WET-Code (Write Everything Twice) besser ab. Lokale Parametermodelle sind möglicherweise Giganten wie GPT-4 unterlegen, wenn es um den Entwurf komplexer Architekturen geht, aber sie sind mehr als in der Lage, Boilerplate-Code zu generieren, einfache Funktionen umzugestalten und schnelle Prototypen zu erstellen.

Darüber hinaus verlässt Ihr Code bei der lokalen Vibe-Codierung nie die Maschine. Damit ist diese Kombination ideal für die Unternehmensentwicklung und die Arbeit mit sensiblen Daten.

Ausgabe

Lokale neuronale Netze sind nicht in der Lage, einen Programmierer vollständig zu ersetzen oder ein komplexes System zu entwerfen. Die Kombination aus LM Studio + VS Code + Continue sorgt jedoch für Unabhängigkeit von Cloud-Diensten und wahrt die Privatsphäre. Dies ist ein voll funktionsfähiges Hilfsmittel für Routineaufgaben, wenn Sie bereit sind, die Einschränkungen kleiner Modelle in Kauf zu nehmen und die Projektarchitektur selbstständig zu steuern.

Links

https://code.visualstudio.com/
https://lmstudio.ai/
https://continue.dev/

Quellen

https://youtu.be/IqqCwhG46jY
https://www.youtube.com/watch?v=7AImkA96mE8

Lokale Musikgenerierung: ComfyUI und ACE-Step-1.5-Modell

Heutzutage ist man für die Erstellung von Inhalten nicht mehr auf Cloud-Dienste angewiesen: Sie können hochwertige Musik vollständig auf Ihrer eigenen Hardware generieren. In diesem Beitrag beschreibe ich, wie Sie das moderne ACE-Step-1.5-Modell mithilfe von ComfyUI lokal auf Ihrem Computer ausführen.

ComfyUI verwendet eine knotenbasierte Architektur. Dies ermöglicht Ihnen:
– Volle Kontrolle über jede Phase der Audioerzeugung.
– Teilen Sie ganz einfach vorgefertigte „Workflows“.

ACE-Step-1.5 ist ein fortschrittliches Modell zur Musikgenerierung, das erhebliche Rechenressourcen erfordert. Die Hardwareanforderungen sind höher als bei vielen einfachen Synthesizern:
Grafikkarte (GPU): Nvidia RTX mit 8 GB VRAM oder höher (12 GB+ empfohlen) für komfortables Arbeiten in hoher Qualität.
Arbeitsspeicher (RAM): mindestens 16 GB (vorzugsweise 32 GB und mehr).
Prozessor (CPU): Moderner Multi-Core-Prozessor mit guter Unterstützung für AVX/CUDA-Computing.
Speicherplatz: Ungefähr 20–50 GB für Modelle und Komponenten.

Der einfachste Weg, ACE-Step-1.5 auszuführen, besteht darin, eine vorgefertigte Vorlage zur Audiogenerierung zu verwenden. Suchen Sie einfach im Workflow-Fenster nach „Musiktext zu Audio“ und installieren Sie es.

Schreiben Sie im Knoten „Eingabeaufforderung“ eine Eingabeaufforderung, die das Genre und die Stimmung beschreibt (z. B. „aufmunternder Synthwave-Track mit starkem Bass“). Geben Sie die gewünschte Dauer an und drücken Sie RUN.
Die erste Generation kann einige Zeit in Anspruch nehmen, da die Modelle in den Speicher der Grafikkarte geladen werden und komplexe akustische Muster verarbeiten.

https://github.com/comfyanonymous/ComfyUI
https://www.youtube.com/watch?v=UAlLD5fS7-c

Raspberry PI 3 als WLAN-Router

Im Internet gibt es viele Artikel darüber, wie man aus einem Raspberry Pi (RPI) einen WLAN-Router baut. In diesem Beitrag werde ich kurz meine Methode zum Erstellen eines WLAN-Routers mit einer Sing-Box an Bord beschreiben. Die beschriebene Methode funktioniert zum jetzigen Zeitpunkt, und in Zukunft kann sich noch viel ändern. Nutzen Sie diese Notiz also als groben Überblick darüber, was auf Sie zukommt.

SSH

Für diejenigen, die nicht wissen, wie man mit OpenWrt arbeitet, empfehle ich die Installation von dietPI.
Verbinden Sie RPI über eth0 mit Ihrem aktuellen Router und verbinden Sie sich dort über SSH. Sie können die RPI-IP-Adresse im DHCP-Panel des Routers herausfinden. Stellen Sie eine direkte Verbindung zum Root her, zum Beispiel so:

ssh root@[IP_ADDRESS]

Zugangspunkt

Das standardmäßige dietPI-Passwort für Root lautet dietpi. Sobald die Verbindung hergestellt ist, werden Sie vom dietPI-Installationsprogramm/Konfigurator begrüßt. Wenn Sie fertig sind, müssen Sie aufgrund des Neustarts des Geräts erneut eine Verbindung herstellen.

Zuerst müssen Sie hostapd konfigurieren, damit Geräte Ihren Zugangspunkt sehen können. Wenn hostapd nicht installiert ist, installieren Sie es über apt.

Als nächstes müssen Sie eine Konfiguration für hostapd schreiben. Beispiel meiner Konfiguration:

interface=wlan0
driver=nl80211
ssid=MyPiAP
hw_mode=a
channel=157
wmm_enabled=1

auth_algs=1
wpa=2
wpa_passphrase=your_password
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ieee80211n=1
ieee80211ac=0
ieee80211ax=0
country_code=RU

Die Bedeutung der Hostapd-Konfiguration finden Sie im Handbuch. Wichtig ist jedoch, dass Sie es selbst konfigurieren – den Kanal (2,4 GHz oder 5 GHz), den Ländercode, sonst können Ihre lokalisierten Geräte ohne diesen korrekt mit dem Access Point funktionieren, ich habe dies bereits getan und weiß es, stellen Sie also unbedingt Ihr Land ein.

DHCP

Als nächstes installieren und konfigurieren Sie dnsmasq, um DHCP zu implementieren. Dies ist notwendig, damit die angeschlossenen Computer die IP-Adresse und den DNS-Server ermitteln können.
Beispiel meiner Konfiguration:

interface=wlan0
dhcp-range=172.19.0.10,172.19.0.200,255.255.255.0,12h

dhcp-option=3,172.19.0.1

dhcp-option=6,1.1.1.1,8.8.8.8

no-resolv

server=1.1.1.1
server=8.8.8.8

Dies ist die Mindestkonfiguration, die es Ihnen ermöglicht, eine Verbindung zu einem Zugangspunkt herzustellen und eine IP-Adresse zu erhalten. Als nächstes müssen Sie Routing und NAT konfigurieren. Dies ist notwendig, damit angeschlossene Computer auf das Internet zugreifen können.

Hier fällt der Hinweis in die Kategorie der typischen Routing-Einrichtung auf einem regulären Debian-kompatiblen System, über die es im Internet viele Artikel gibt. Dann hängt alles davon ab, welche Ziele Sie verfolgen, zum Beispiel die Verbindung zu einem externen Server als neue Schnittstelle im System oder einfach wlan0 <-> eth0, hier enden die RPI-Besonderheiten, dann konfigurieren Sie es nach Ihrem Geschmack.

Ich möchte auch die Notwendigkeit erwähnen, benutzerdefinierte Systemdienste über systemctl zu konfigurieren; Möglicherweise besteht die Notwendigkeit, Dienste in einer Kette zu verbinden. All dies steht in den Systemctl-Handbüchern im Netzwerk. Wenn es Probleme auf der Serviceebene gibt, überprüfen Sie die Protokolle in Journalctl.

WLAN-Adapter

Das eingebaute RPI3 erwies sich ehrlich gesagt als schwach und unterstützt kein 5GHz. Deshalb habe ich den RITMIX RWA-150-Adapter über USB 2 an den Realtek RTL8811CU-Chipsatz angeschlossen. Die Treiber wurden dem Linux-Kernel hinzugefügt, der in meiner dietPi-Version enthalten war. Als nächstes habe ich mit dietpi-config das integrierte WLAN komplett ausgeschaltet. Infolgedessen war nur noch ein WLAN0-USB-Adapter übrig.

Schlussfolgerung

Aus den Geschwindigkeitsmessungen konnten wir etwa 50 Mbit/s aus RPI3 über WLAN herausholen (nach Anschluss eines 5-GHz-Adapters), was einen Geschwindigkeitsverlust von der Hälfte im Vergleich zur direkten Verbindung mit dem Router bedeutet. Ich gebe zu, dass Sie mit produktiveren RPI-Modellen bessere Ergebnisse erzielen können, aber auch spezielle OpenWrt-Geräte und vorgefertigte Lösungen sind möglicherweise besser für Ihre Anforderungen geeignet.

Quellen

https://forums.raspberrypi.com/viewtopic.php?t=394710
https://superuser.com/questions/1408586/raspberry-pi-wifi-hotspot-slow-internet-speed
https://www.youtube.com/watch?v=jlHWnKVpygw

Lokale Bilderzeugung: ComfyUI- und FLUX-Modell

Heutzutage sind Sie nicht mehr auf Cloud-Dienste angewiesen: Sie können hochwertige Bilder vollständig auf Ihrer eigenen Hardware erstellen. In diesem Beitrag beschreibe ich, wie Sie das moderne FLUX-Modell mithilfe von ComfyUI lokal auf Ihrem Computer ausführen.

ComfyUI verwendet eine knotenbasierte Architektur. Dies ermöglicht Ihnen:
– Volle Kontrolle über jede Generationsstufe.
– Einfaches Teilen vorgefertigter „Workflows“

FLUX ist ein großes Modell, daher sind die Hardwareanforderungen höher als bei SD 1.5 oder SDXL:
Grafikkarte (GPU): Nvidia RTX mit 12 GB VRAM oder höher (für komfortables Arbeiten). Wenn Sie über 8 GB oder weniger verfügen, müssen Sie die quantisierten Versionen (GGUF oder NF4) verwenden.
Arbeitsspeicher (RAM): mindestens 16 GB (vorzugsweise 32 GB und mehr).
Speicherplatz: Ungefähr 20–50 GB für Modelle und Komponenten.

Der einfachste Weg, FLUX zu starten, ist die Verwendung einer vorgefertigten Vorlage. Suchen Sie einfach im Workflow-Fenster nach „flux text to image“ und installieren Sie es.

Schreiben Sie im Knoten „Text to Image (Flux.1 Dev)“ eine Eingabeaufforderung auf Englisch, wählen Sie die Auflösung aus (FLUX funktioniert gut mit 1024 x 1024 und sogar höher) und drücken Sie RUN.

Die erste Generation kann einige Zeit dauern, da die Modelle in den Grafikkartenspeicher geladen werden.

https://github.com/comfyanonymous/ComfyUI

Mars Miners v2

[Pause: Red Horizon Interplanetary News Service]

GASTGEBER: Gute Nacht, Mars! Der Hauptnachrichtendienst der Kuppel ist bei Ihnen. Heute hat die Verwaltung der Mars Miners-Kolonie ein umfangreiches Software-Update für alle Siedler und strategischen Module angekündigt.

HAUPTVERANSTALTUNGEN:

1. Aktualisierung der neuronalen Schaltkreise von Automaten Die Abteilung für Kybernetik hat die erfolgreiche Aktualisierung aller autonomen Bergbaueinheiten bestätigt. Neue Protokolle für strategisches Denken beseitigen kritische Fehler in der Entwicklungslogik. Jetzt wird die Simulation des Wettbewerbs um Ressourcen noch unberechenbarer und härter. Siedler können selbstständig taktische Analysezeiten für ihre KI-Partner festlegen.

2. Integration virtueller Trainingsgelände Neu angekommene Kolonisten haben Zugang zu persönlichen Trainingssimulatoren. Jetzt können Sie Ihre Fähigkeiten zur Sektoreroberung im Einzelspielermodus verbessern, bevor Sie sich in den echten Kampf um die Marsminen stürzen. Das System ist mit aktualisierten Trainingsprotokollen ausgestattet.

3. Stabilisierung der Kommunikationskanäle zwischen Kuppeln Kommunikationsingenieure haben die Kalibrierung der Satellitenkonstellation abgeschlossen. Die Multiplayer-Interaktionsschnittstelle zwischen entfernten Außenposten funktioniert jetzt ohne Verzögerung. Anomalien, die bei strategischen Operationen zu Verbindungsunterbrechungen führten, wurden beseitigt.

4. Unterbewusste Berechnung: Aktualisierung neuronaler Auslöser Die technische Abteilung hat ein paralleles Computersystem implementiert. Die taktische KI-Datenverarbeitung erfolgt jetzt im Hintergrund, ohne die CPU Ihrer persönlichen Terminals zu belasten. Keine Pausen mehr in kritischen Phasen des Spiels.

GASTGEBER: Die Verwaltung erinnert Sie daran, dass die neue Version der Spielsimulatoren bereits in das zentrale Terminal geladen wurde. Um Daten zu synchronisieren, wird empfohlen, Ihre lokalen Schnittstellen neu zu starten.

Die Zukunft des Mars liegt in Ihren Händen. Bleiben Sie bei uns auf der Red Horizon-Frequenz.

https://demensdeum.com/games/mars-miners/

Ausführen von macOS in Docker

Es ist möglich, macOS in Docker auszuführen, trotz der Einwände von Leuten, die sagen, dass dies unmöglich sei, und angeblich verfügt macOS über Schutzsysteme, die dem widerstehen können.

Einige der klassischen Möglichkeiten, macOS auf PC-Rechnern auszuführen, waren in der Vergangenheit:
*Hackintosh
* Virtualisierung, zum Beispiel mit VMWare

Hackintosh setzt das Vorhandensein von Hardware voraus, die dem Original-Mac ähnelt oder diesem sehr nahe kommt. Die Virtualisierung stellt bestimmte Anforderungen an die Hardware, jedoch im Allgemeinen nicht so streng wie im Fall von Hackintosh. Allerdings kommt es bei der Virtualisierung zu Performance-Problemen, da macOS nicht für das Arbeiten in einer virtuellen Umgebung optimiert ist.

Seit kurzem ist es möglich, macOS in Docker auszuführen. Möglich wird dies durch das Docker-OSX-Projekt, das vorgefertigte macOS-Images zur Ausführung auf Docker bereitstellt. Es ist erwähnenswert, dass Docker-OSX kein offizielles Apple-Projekt ist und von diesem nicht unterstützt wird. Sie können jedoch macOS auf Docker ausführen und es zum Entwickeln und Testen von Anwendungen verwenden.

Eines der ersten Projekte, das macOS in Docker ausführt:
https://github.com/sickcodes/Docker-OSX

Allerdings konnte ich es nie vollständig starten; Nach dem Laden in Recovery OS fielen meine Tastatur und meine Maus einfach ab und ich konnte die Installation nicht fortsetzen. Gleichzeitig funktioniert im ersten Bootmenü die Tastatur. Vielleicht liegt es daran, dass dieses Projekt nicht mehr so ​​aktiv unterstützt wird und es bei der Ausführung unter Windows 11 + WSL2 + Ubuntu einige spezifische Probleme gibt.

Eines der derzeit aktivsten Projekte:
https://github.com/dockur/macos

Ermöglicht die Ausführung von macOS in Docker, die Schnittstelle funktioniert über den Browser per VNC(?)-Weiterleitung. Nach dem Start ist macOS unter http://localhost:5900 verfügbar

Ich habe es geschafft, dieses Projekt auszuführen und macOS Big Sur (Minute 2020) unter Windows 11 + WSL2 + Ubuntu zu installieren, aber nur durch Ändern der Compose-Datei, nämlich:

environment:
    VERSION: "11"
    RAM_SIZE: "8G"
    CPU_CORES: "4"

VERSION: „11“ ist die Version von macOS, in diesem Fall Big Sur
RAM_SIZE: „8G“ ist die für macOS zugewiesene RAM-Größe
CPU_CORES: „4“ ist die Anzahl der CPU-Kerne, die macOS zugewiesen sind

Derzeit ist auch die Ausführung von macOS Tahoe (16) möglich, allerdings gibt es eine Reihe von Problemen, die die Projektentwickler beherzt zu lösen versuchen.

Diese originelle Art, macOS zu starten, ermöglicht es Ihnen, es auf Ihrer Nicht-Mac-Hardware auszuprobieren und sich, nachdem Sie genug gelitten haben, einen Mac zu kaufen. Es kann jedoch zum Testen von Software auf älteren Systemen und für die allgemeine Entwicklung nützlich sein.

Swift in WSL2 (Linux) erstellen

Das Swift-Ökosystem entwickelt sich aktiv außerhalb der Apple-Plattformen, und heute ist es recht komfortabel, darin unter Windows mit dem Windows-Subsystem für Linux (WSL2) zu schreiben. Es ist zu bedenken, dass für Assemblys unter Linux/WSL eine schlanke Version von Swift verfügbar ist – ohne proprietäre Apple-Frameworks (wie SwiftUI, UIKit, AppKit, CoreData, CoreML, ARKit, SpriteKit und andere iOS/macOS-spezifische Bibliotheken), aber für Konsolen-Dienstprogramme und das Backend ist dies mehr als ausreichend. In diesem Beitrag werden wir den Prozess der Vorbereitung der Umgebung und der Erstellung des Swift-Compilers aus dem Quellcode in WSL2 Schritt für Schritt durchgehen (am Beispiel von Ubuntu/Debian).

Wir aktualisieren die Liste der Pakete und das System selbst:

sudo apt update && sudo apt upgrade -y

Installieren Sie die erforderlichen Abhängigkeiten für den Build:

sudo apt install -y \
  git cmake ninja-build clang python3 python3-pip \
  libicu-dev libxml2-dev libcurl4-openssl-dev \
  libedit-dev libsqlite3-dev swig libncurses5-dev \
  pkg-config tzdata rsync

Installieren Sie den Compiler und Linker (LLVM und LLD):

sudo apt install -y llvm lld

Klonen Sie das Swift-Repository mit allen Abhängigkeiten:

git clone https://github.com/apple/swift.git
cd swift
utils/update-checkout --clone

Installieren Sie „swiftly“ und fertiges Swift mit Swiftc

curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz && \
tar zxf swiftly-$(uname -m).tar.gz && \
./swiftly init --quiet-shell-followup && \
. "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" && \
hash -r

Beginnen wir mit dem Build (dies wird lange dauern):

utils/build-script \
  --release-debuginfo \
  --swift-darwin-supported-archs="x86_64" \
  --llvm-targets-to-build="X86" \
  --skip-build-benchmarks \
  --skip-test-cmark \
  --skip-test-swift \
  --skip-ios \
  --skip-tvos \
  --skip-watchos \
  --skip-build-libdispatch=false \
  --skip-build-cmark=false \
  --skip-build-foundation \
  --skip-build-lldb \
  --skip-build-xctest \
  --skip-test-swift

Nachdem der Build abgeschlossen ist, fügen Sie den Pfad zum Compiler zu PATH hinzu (geben Sie Ihren Pfad zum Build-Ordner an):

export PATH=/root/Sources/3rdparty/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swiftc:$PATH

Wir überprüfen, ob die installierte Version von Swift funktioniert:

swift --version

Erstellen Sie eine Testdatei und führen Sie sie aus:

echo "print(\"Hello, World!\")" > hello.swift
swift hello.swift

Sie können die Binärdatei auch kompilieren und ausführen:

swiftc hello.swift
./hello

Quellen

Teflecher

Teflecher ist eine schnelle, interaktive, plattformübergreifende Quizanwendung, die auf Kotlin Multiplatform (KMP) und Compose Multiplatform basiert. Es ermöglicht Benutzern, Quizfragen intuitiv aus lokalen JSON-Dateien oder Remote-URLs zu laden, Multiple-Choice-Fragen zu beantworten, sofortiges Feedback zu richtigen Antworten zu erhalten und ihre Ergebnisse zu verfolgen.

Web:
https://demensdeum.com/software/teflecher/

GitHub:
https://github.com/zefir1990/teflecher

Außerdem ein Quiz-Editor im Teflecher-Editor-Format, der auf Ionic + Capacitor-Technologien basiert

Web:
https://demensdeum.com/software/teflecher-editor/

GitHub:
https://github.com/zefir1990/teflecher-editor

Musterinterpreter in der Praxis

Im letzten Artikel haben wir uns mit der Theorie des Interpreter-Musters befasst, gelernt, was ein AST-Baum ist und wie man terminale und nicht-terminale Ausdrücke abstrahiert. Lassen Sie uns dieses Mal von der Theorie Abstand nehmen und sehen, wie dieses Muster in ernsthaften kommerziellen Projekten angewendet wird, die wir alle täglich verwenden!

Spoiler: Möglicherweise verwenden Sie gerade das Interpreter-Muster, indem Sie einfach diesen Text in Ihrem Browser lesen!

Eines der auffälligsten und vielleicht wichtigsten Beispiele für die Verwendung dieses Musters in der Branche ist JavaScript. Die ursprünglich „auf dem Knie“ entstandene Sprache funktioniert heute dank des Interpretationskonzepts auf Milliarden von Geräten.

10 Tage, die das Internet verändert haben

Die Geschichte von JavaScript ist voller Legenden. Im Jahr 1995 erhielt Brendan Eich während seiner Arbeit bei Netscape Communications die Aufgabe, eine einfache Skriptsprache zu entwickeln, die direkt in einem Browser (Netscape Navigator) ausgeführt werden konnte, um Webseiten interaktiv zu gestalten. Das Management wollte etwas mit einer Syntax, die dem damals sehr beliebten Java ähnelte, aber nicht für professionelle Ingenieure, sondern für Webdesigner gedacht war.

Eich hatte nur 10 Tage Zeit, um den ersten Prototyp der Sprache zu schreiben, die damals Mocha hieß (damals LiveScript und aus Marketinggründen erst JavaScript). Der Ansturm kam nicht von ungefähr: Microsoft war ihm dicht auf den Fersen und bereitete gleichzeitig aktiv seine eigene Skriptsprache VBScript für die Einbettung in den Internet Explorer-Browser vor. Netscape musste dringend seine Antwort veröffentlichen, um im drohenden Browserkrieg nicht zu verlieren.

Es war einfach keine Zeit, einen komplexen Compiler in Maschinencode zu schreiben. Die offensichtlichste und schnellste Lösung für Eich war die Architektur des klassischen Interpreter.

Der erste Interpreter (SpiderMonkey) funktionierte folgendermaßen:

  1. Der Textquellcode des Skripts wurde von der Seite gelesen.
  2. Der lexikalische Analysator hat den Text in Token zerlegt.
  3. Der Parser hat einen Abstract Syntax Tree (AST) erstellt. In Bezug auf das Interpreter-Muster bestand dieser Baum aus terminalen Ausdrücken (Zeichenfolgen, Zahlen wie 42) und nicht-terminalen Ausdrücken (Funktionsaufrufe, Anweisungen wie If, ​​​​While).
  4. Dann „durchlief“ die virtuelle Maschine diesen Baum Schritt für Schritt und führte die darin eingebetteten Anweisungen an jedem Knoten aus (wobei sie eine Methode ähnlich Interpret() aufrief).

Kontext und Objekte

Erinnern Sie sich an das Context-Objekt, das wir in der klassischen Implementierung an die Methode Interpret(Context context) übergeben mussten? Der Interpreter benötigt es, um den aktuellen Speicherzustand zu speichern.

Im Fall von JavaScript wird die Rolle dieses Kontexts auf der obersten Ebene von einem globalen Objekt (z. B. einem Fenster in einem Browser) übernommen. Wenn Ihr AST-Knoten versucht, beispielsweise über document.write(“Hello”) Text auf den Bildschirm zu schreiben, greift der Interpreter auf seinen Kontext (das Dokumentobjekt) zu und ruft die gewünschte interne Browser-API auf.

Dank des Interpreters kann JavaScript so einfach mit dem DOM (Document Object Model) interagieren – das sind alles nur Objekte in einem Kontext, auf die über Baumknoten zugegriffen wird.

Entwicklung des Interpreters: JIT-Kompilierung

Historisch gesehen ist JS in Browsern lange Zeit ein „reiner“ Interpreter geblieben. Und das hatte einen großen Nachteil: langsame Geschwindigkeit. Das Parsen des Baums und das langsame Durchlaufen jedes Knotens bei jeder Ausführung des Skripts verlangsamte komplexe Webanwendungen.

Mit der Einführung der V8-Engine von Google (integriert in Chrome) im Jahr 2008 kam es zu einer Revolution. Ingenieure erkannten, dass ein Dolmetscher für das moderne Web nicht ausreicht. Die Engine ist komplexer geworden: Sie erstellt immer noch den AST-Baum, verwendet aber jetzt die JIT-Kompilierung (Just-In-Time).

Moderne JS-Engines (V8, SpiderMonkey) funktionieren wie eine komplexe Pipeline:

  1. Der schnelle und einfache Basisinterpreter beginnt sofort mit der Ausführung Ihres JS-Codes, ohne überhaupt auf die Kompilierung warten zu müssen (das klassische Muster funktioniert hier immer noch).
  2. Parallel dazu überwacht die Engine „heiße“ Codeabschnitte (Schleifen oder Funktionen, die tausende Male aufgerufen werden).
  3. Diese Abschnitte werden vom JIT-Compiler unter Umgehung des langsamen Interpreters direkt in optimierten Maschinencode kompiliert.

Es war diese Kombination aus dem sofortigen Start des Interpreters und der Rechenleistung der Kompilierung, die es JavaScript ermöglichte, die Welt zu erobern und zur Sprache von Servern (Node.js) und mobilen Anwendungen (React Native) zu werden.

Dolmetscher in der Spielebranche

Trotz der Dominanz von C++ im Heavy Computing ist das Interpreter-Muster ein Industriestandard in der Spieleentwicklung zum Erstellen von Spiellogik. Wofür? Damit Spieleentwickler Spiele erstellen können, ohne das Risiko einzugehen, die Engine „abzuwerfen“ oder sie ständig neu kompilieren zu müssen.

Ein hervorragendes historisches Beispiel ist UnrealScript – die Sprache, in der die Logik der Spiele Unreal Tournament und Gears of War in den Unreal Engines 1, 2 und 3 geschrieben wurde. Der Text wurde in einen kompakten abstrakten Maschinenbytecode kompiliert, der dann Schritt für Schritt von der virtuellen Maschine der Engine (interpretiert) wurde.

Visuelle Diagrammskripte (Blueprints)

Heute wurde Text durch visuelle Programmierung ersetzt – das Blueprints-System in Unreal Engine 4 und 5.

Wenn Sie jemals einen Blueprint in Unreal Engine geöffnet haben, haben Sie viele Knoten gesehen, die durch Kabel verbunden sind. Architektonisch gesehen ist das gesamte Blueprints-Diagramm ein riesiger abstrakter Syntaxbaum (AST), der auf dem Bildschirm gezeichnet wird:

  1. Terminalausdrücke: Konstante Knoten. Zum Beispiel ein Knoten, der einfach die Zahl 42 oder einen String speichert. Sie geben bei der Interpretation einen bestimmten Wert zurück.
  2. Nicht-terminale Ausdrücke: Rechenknoten (Hinzufügen) oder Flusskontrollknoten (Zweig). Sie verfügen über Argumenteingänge, die der Interpreter zunächst rekursiv auswertet, bevor er das Ergebnis als Ausgabepin erzeugt.

Und die Rolle des Kontexts spielt hier die Erinnerung an eine Instanz eines bestimmten Spielobjekts (Akteur). Die Interpretermaschine „geht“ sicher durch dieses Diagramm, fordert Daten an und führt Übergänge durch.

Wo wird der Interpreter sonst noch verwendet?

Das Interpretermuster kann in fast jedem komplexen System gefunden werden, in dem dynamische Anweisungen ausgeführt werden müssen. Hier sind nur einige Beispiele aus kommerzieller Software:

  • Interpretierte Programmiersprachen (Python, Ruby, PHP). Ihre gesamte Laufzeit basiert auf dem klassischen Muster. Beispielsweise analysiert die CPython-Referenzimplementierung Ihr .py-Skript zunächst in ein AST, kompiliert es in Bytecode und dann interpretiert eine riesige virtuelle Maschine (Rechenschleife) diesen Bytecode Schritt für Schritt.
  • Java Virtual Machine (JVM). Zunächst wird Java-Code nicht in Maschinenanweisungen, sondern in Bytecode kompiliert. Wenn Sie die Anwendung ausführen, fungiert die JVM als Interpreter (allerdings mit aggressiver JIT-Kompilierung, genau wie in V8).
  • Datenbanken und SQL Wenn Sie eine SQL-Abfrage (SELECT * FROM user) in PostgreSQL oder MySQL ausgeben, fungiert die Datenbank-Engine als Interpreter. Es führt eine lexikalische Analyse durch, erstellt einen AST-Abfragebaum, generiert einen Ausführungsplan und „interpretiert“ diesen Plan dann buchstäblich, indem es über die Zeilen der Tabellen iteriert.
  • Reguläre Ausdrücke (RegEx). Jede Engine für reguläre Ausdrücke analysiert intern ein Zeichenfolgenmuster (z. B. ^\d{3}-\d{2}$) in ein Zustandsdiagramm (NFA/DFA-Automaten), das der interne Interpreter dann durchläuft und jedes Eingabezeichen mit den Eckpunkten dieses Diagramms abgleicht.
  • Unity Shader Graph / Unreal Material Editor – visuelle Knoten in modularen Shader-Code (GLSL/HLSL) interpretieren.
  • Blender Geometry Nodes – interpretieren mathematische und geometrische Operationen, um prozedural 3D-Modelle in Echtzeit zu generieren.

Gesamt

Das Interpreter-Muster geht längst über den Rahmen des „Schreibens eines eigenen Taschenrechners“ hinaus. Dies ist der leistungsstärkste Industriestandard. Von JavaScript-Engines, die täglich Gigabytes an Code hinter den Kulissen von Browsern ausführen, bis hin zu Spieledesignern, die es Ihnen ermöglichen, komplexe Logik ohne Kenntnisse von C++ zu erstellen, bleiben Interpreter eines der wichtigsten Architekturkonzepte in der modernen IT-Entwicklung.

Glazki TV: Moderner Player für Internetfernsehen

Glazki TV ist ein moderner, leistungsstarker Player für Internetfernsehen (IPTV), der auf Basis von React Native und Expo entwickelt wurde. Das Projekt konzentriert sich auf Benutzerfreundlichkeit und Geschwindigkeit und bietet eine praktische Schnittstelle zum Anzeigen von IPTV-Kanälen sowohl auf Mobilgeräten als auch im Browser.

Hauptmerkmale

  • 📺 Kanalsuche: Durchsuchen Sie Tausende von Kanälen, kategorisiert für eine einfache Navigation.
  • 🔍 Suche: Finden Sie schnell die gewünschten Kanäle anhand des Namens.
  • ❤️ Favoriten: Speichern Sie Ihre Lieblingskanäle für den schnellen Zugriff (Daten werden lokal gespeichert).
  • 🔗 Deep Linking: Teilen Sie direkte Links zu Kanälen, die automatisch geöffnet werden.
  • 🌓 Theme-Unterstützung: Die Benutzeroberfläche passt sich automatisch an das dunkle oder helle Theme des Systems an.
  • 🌐 Web-Unterstützung: Der Player ist im Browser mit URL-Synchronisierung voll funktionsfähig.

Technologie-Stack

Das Projekt basiert auf modernen Entwicklungstools:

  • Framework: React Native + Expo
  • Video Player: expo-video (замена устаревшему expo-av)
  • UI-Toolkit: React-Native-Paper
  • Playlist-Parser: iptv-playlist-parser

Webversion:
https://demensdeum.com/software/glazki-tv/

Google Play-Version:
https://play.google.com/store/apps/details?id=com.demensdeum.glazkitv

Das Projekt entwickelt sich weiter und ich würde mich über jedes Feedback freuen!

Uschki-Radio

Ushki-Radio ist ein plattformübergreifender Radioplayer für Online-Radio, bei dessen Entwicklung Einfachheit und Hörvergnügen im Vordergrund stehen. Keine unnötigen Funktionen, keine überlasteten Schnittstellen – einfach einschalten und zuhören.


https://demensdeum.com/software/ushki-radio

Das Projekt nutzt den Open-Source-Radiobrowser, wodurch Tausende von Radiosendern aus aller Welt in der Anwendung verfügbar sind. Sie können sie nach Name, Genre oder Beliebtheit suchen, sie zu Ihren Favoriten hinzufügen und schnell zu Ihren Lieblingssendern zurückkehren.

Ushki-Radio eignet sich perfekt für die Rolle eines Hintergrundradioplayers: Es merkt sich den letzten Sender, ermöglicht die Steuerung der Lautstärke und erfordert keine komplexen Einstellungen. Die Benutzeroberfläche ist prägnant und verständlich – alles ist so gestaltet, dass nichts von Musik, Gesprächen und Übertragungen ablenkt.

Technisch basiert das Projekt auf React Native und Expo, funktioniert also sowohl im Browser als auch als native Anwendung. Unter der Haube wird expo-av zum Abspielen von Audio verwendet und Benutzereinstellungen werden lokal gespeichert. Es werden mehrere Sprachen unterstützt, darunter Russisch und Englisch.

Ushki-Radio ist ein gutes Beispiel dafür, was ein moderner Internetradio-Player sein kann: offen, leichtgewichtig, erweiterbar und in erster Linie auf den Hörer ausgerichtet. Das Projekt wird unter der MIT-Lizenz vertrieben und eignet sich sowohl für den persönlichen Gebrauch als auch als Grundlage für eigene Experimente mit Audioanwendungen.

GitHub:
https://github.com/demensdeum/Ushki-Radio

Coverer

Coverseer – intelligenter Prozessbeobachter mit LLM

Coverseer ist ein Python-CLI-Tool zur intelligenten Überwachung und zum automatischen Neustart von Prozessen. Im Gegensatz zu klassischen Watchdog-Lösungen analysiert es die Textausgabe der Anwendung mithilfe des LLM-Modells und trifft Entscheidungen basierend auf dem Kontext und nicht nur auf dem Exit-Code.

Das Projekt ist Open Source und auf GitHub verfügbar:
https://github.com/demensdeum/coverseer

Was ist Coverser?

Coverseer startet den angegebenen Prozess, überwacht kontinuierlich dessen stdout und stderr, leitet die neuesten Ausgabeblöcke an das lokale LLM (über Ollama) weiter und stellt fest, ob sich der Prozess im korrekten Ausführungszustand befindet.

Wenn das Modell einen Fehler, ein Einfrieren oder ein falsches Verhalten erkennt, bricht Coverseer den Prozess automatisch ab und startet ihn erneut.

Hauptfunktionen

  • Kontextbezogene Analyse der Ausgabe – Anstelle der Überprüfung des Exit-Codes wird eine Protokollanalyse mit LLM verwendet
  • Automatischer Neustart – der Prozess wird neu gestartet, wenn Probleme oder ein abnormaler Abbruch erkannt werden
  • Arbeiten mit lokalen Modellen – Ollama wird verwendet, ohne Daten an externe Dienste zu übertragen
  • Detaillierte Protokollierung – alle Aktionen und Entscheidungen werden zur späteren Diagnose aufgezeichnet
  • Eigenständige Ausführung – kann in eine einzelne ausführbare Datei (z. B. .exe) gepackt werden

Wie es funktioniert

  1. Coverseer führt den über die CLI übergebenen Befehl aus
  2. Sammelt und puffert die Textausgabe des Prozesses
  3. Sendet die letzten Zeilen an das LLM-Modell
  4. Erhält eine semantische Bewertung des Prozessstatus
  5. Beendet den Prozess bei Bedarf und startet ihn neu

Mit diesem Ansatz können Sie Probleme identifizieren, die von Standardüberwachungstools nicht erkannt werden können.

Anforderungen

  • Python 3.12 oder höher
  • Ollama installiert und läuft
  • Geladenes Modell gemma3:4b-it-qat
  • Python-Abhängigkeiten: requests, ollama-call

Beispiel verwenden


python Coverseer.py „Ihr Befehl hier“

Beobachten Sie beispielsweise das Laden des Ollama-Modells:


Python Coverseer.py „Ollama Pull Gemma3:4b-it-qat“

Coverseer analysiert die Befehlsausgabe und reagiert automatisch auf Ausfälle oder Fehler.

Praktische Anwendung

Coverseer ist besonders nützlich in Szenarien, in denen Standard-Supervisor-Mechanismen nicht ausreichen:

  • CI/CD-Pipelines und automatische Builds
  • Hintergrunddienste und Agenten
  • Experimentelle oder instabile Prozesse
  • Tools mit großen Mengen an Textprotokollen
  • Entwicklungsumgebungen, in denen Selbstheilung wichtig ist

Warum der LLM-Ansatz effektiver ist

Klassische Überwachungssysteme reagieren auf Symptome. Coverser analysiert Verhalten. Das LLM-Modell ist in der Lage, Fehler, Warnungen, wiederholte Ausfälle und logische Sackgassen zu erkennen, selbst wenn der Prozess formal weiterläuft.

Dadurch wird die Überwachung genauer und die Zahl der Fehlalarme verringert.

Schlussfolgerung

Coverseer ist ein klares Beispiel für die praktische Anwendung von LLM bei DevOps und Automatisierungsaufgaben. Es erweitert das traditionelle Verständnis der Prozessüberwachung und bietet einen intelligenteren, kontextbasierten Ansatz.

Das Projekt wird insbesondere für Entwickler interessant sein, die mit KI-Tools experimentieren und nach Möglichkeiten suchen, die Stabilität ihrer Systeme zu verbessern, ohne die Infrastruktur zu verkomplizieren.

Flame Steel: Mars-Minenarbeiter

Flame Steel: Mars Miners ist ein taktisches Strategiespiel mit ungewöhnlichem Tempo und einem Schwerpunkt auf Entscheidungsfindung statt auf Reflexen. Das Spiel findet auf dem Mars statt, wo die Spieler angesichts begrenzter Informationen und ständigem Druck von Rivalen um die Kontrolle über Ressourcen und Gebiete konkurrieren.

Das Gameplay basiert auf dem Bau von Hub-Stationen, die die Infrastruktur Ihrer Expedition bilden. Mit Knoten können Sie Ressourcen gewinnen, Ihren Einflussbereich erweitern und Logistik aufbauen. Jede Platzierung zählt: Ein Fehler kann dem Feind den Weg zu Schlüsselsektoren ebnen oder Ihnen einen strategischen Vorteil nehmen.

Der Spielrhythmus ist bewusst kontrolliert und intensiv. Es liegt irgendwo zwischen Schach, Go und Seekampf: Positionierung, Vorhersage der Aktionen des Gegners und die Fähigkeit, mit Unsicherheit zu arbeiten, sind hier wichtig. Ein Teil der Karte und die Absichten des Feindes bleiben verborgen, sodass der Erfolg nicht nur von der Berechnung, sondern auch vom Erfassen der Situation abhängt.

Flame Steel: Mars Miners unterstützt das Online-Spielen, was jedes Spiel einzigartig macht – Strategien entwickeln sich und die Meta wird gerade geformt. Das Spiel befindet sich in einem frühen Entwicklungsstadium und darin liegt seine Stärke: Spieler haben die Möglichkeit, als Erste in ein neues, nicht standardmäßiges Projekt einzutauchen, dessen Entwicklung zu beeinflussen und Mechaniken zu entdecken, die nicht die üblichen Vorlagen des Genres kopieren.

Wenn Sie sich für taktische Spiele mit Tiefe, experimentellem Design und einem Schwerpunkt auf Denken interessieren, sollten Sie sich jetzt Flame Steel: Mars Miners ansehen.

SPIELREGELN

* Das Spielfeld besteht aus Feldern, auf denen die Spieler nacheinander ihre Objekte platzieren. In jeder Runde kann ein Spieler eine Bauaktion durchführen.

* Es dürfen nur zwei Arten von Objekten gebaut werden: Hub-Stationen und Minen. Jede Konstruktion ist ausschließlich auf einer freien Zelle möglich, die sich vertikal oder horizontal neben einem vorhandenen Spielerknoten befindet. Eine diagonale Platzierung ist nicht zulässig.

* Hub-Stationen bilden die Grundlage der Gebietskontrolle und dienen als Erweiterungspunkte. Minen werden nach den gleichen Regeln platziert, gelten jedoch als Ressourcenobjekte und wirken sich direkt auf das Endergebnis der Gruppe aus.

* Wenn ein Spieler vertikal oder horizontal eine durchgehende Linie seiner Knotenstationen baut, wird eine solche Linie automatisch zu einer Waffe. Die Waffe ermöglicht es, den Feind anzugreifen und seine Infrastruktur zu zerstören.

* Um eine Waffe abzufeuern, wählt der Spieler ein zu seiner Waffe gehörendes Feld aus und zeigt auf eine beliebige feindliche Knotenstation auf dem Spielfeld. Die ausgewählte feindliche Knotenstation wird zerstört und vom Spielfeld entfernt. Minen können nicht direkt angegriffen werden – nur durch die Zerstörung von Knotenpunkten, die den Zugang zu ihnen ermöglichen.

* Das Spiel läuft bis zum festgelegten Spielende. Sieger ist der Spieler, der zu diesem Zeitpunkt die meisten Rohstoffminen auf dem Spielfeld hat. Bei Gleichheit können die Gebietskontrolle oder zusätzliche durch den Spielmodus bedingte Bedingungen ausschlaggebend sein.

https://mediumdemens.vps.webdock.cloud/mars-miners

Antigravitation

Innerhalb weniger Tage habe ich mit Hilfe von Antigravity das Masonry-AR-Backend von PHP + MySQL auf Node.js + MongoDB + Redis -> Docker übertragen. Die Fähigkeiten der KI sind wirklich erstaunlich. Ich erinnere mich, wie ich 2022 über ChatGPT die einfachsten Shader auf Shadertoy.com geschrieben habe und es schien, als könnte dieses Spielzeug nichts Höheres leisten.
https://www.shadertoy.com/view/cs2SWm

Vier Jahre später beobachte ich, wie ich in ca. 10 Eingabeaufforderungen mein Projekt mühelos von einer Back-Plattform auf eine andere übertragen und dabei Containerisierung hinzugefügt habe.
https://mediumdemens.vps.webdock.cloud/masonry-ar/

Cool, wirklich cool.

Kaban-Vorstand

KabanBoard ist eine Open-Source-Webanwendung zur Verwaltung von Aufgaben im Kanban-Format. Der Fokus des Projekts liegt auf Einfachheit, verständlicher Architektur und der Möglichkeit der Anpassung an die spezifischen Aufgaben eines Teams oder eines einzelnen Entwicklers.

Die Lösung eignet sich für kleine Projekte, interne Teamprozesse oder als Basis für Ihr eigenes Produkt ohne Bindung an SaaS-Dienste Dritter.

Das Projekt-Repository ist auf GitHub verfügbar:
https://github.com/demensdeum/KabanBoard

Hauptmerkmale

KabanBoard implementiert eine Reihe grundlegender und praktischer Funktionen für die Arbeit mit Kanban-Boards.

  • Erstellen mehrerer Boards für verschiedene Projekte
  • Spaltenstruktur mit Aufgabenstatus
  • Aufgabenkarten mit der Möglichkeit zum Bearbeiten und Löschen
  • Aufgaben zwischen Spalten verschieben (Drag & Drop)
  • Farbcodierung von Karten
  • Dunkles Interface-Design

Die Funktionalität ist nicht überladen und konzentriert sich auf die alltägliche Arbeit mit Aufgaben.

Verwendete Technologien

Das Projekt basiert auf einem gemeinsamen und verständlichen Stack.

  • Frontend:Vue 3, Vite
  • Backend: Node.js, Express
  • Datenspeicher: MongoDB

Die Trennung von Client- und Serveranteil erleichtert die Betreuung und Weiterentwicklung des Projekts.

Projektbereitstellung

Für die lokale Ausführung benötigen Sie eine Standardumgebung.

  • Node.js
  • MongoDB (lokal oder über die Cloud)

Das Projekt kann entweder im normalen Modus über npm oder mit Docker gestartet werden, was für eine schnelle Bereitstellung in einer Test- oder internen Umgebung praktisch ist.

Praktische Anwendung

KabanBoard kann in verschiedenen Szenarien eingesetzt werden.

  • Internes Aufgabenverwaltungstool
  • Basis für eine individuelle Kanban-Lösung
  • Ausbildungsprojekt zum Studium der SPA-Architektur
  • Ausgangspunkt für ein Lieblingsprojekt oder Portfolio

Schlussfolgerung

KabanBoard ist eine übersichtliche und praktische Lösung für die Arbeit mit Kanban-Boards. Das Projekt erhebt nicht den Anspruch, große Unternehmenssysteme zu ersetzen, sondern eignet sich gut für kleine Teams, den individuellen Einsatz und die Weiterentwicklung für spezifische Aufgaben.

Gofis

Gofis ist ein leichtes Befehlszeilentool zum schnellen Durchsuchen von Dateien im Dateisystem.
Es ist in Go geschrieben und nutzt stark Parallelität (Goroutinen), was es besonders effizient macht
bei der Arbeit mit großen Verzeichnissen und Projekten.

Das Projekt ist auf GitHub verfügbar:
https://github.com/demensdeum/gofis

🧠 Was ist Gofis?

Gofis ist ein CLI-Dienstprogramm zum Durchsuchen von Dateien nach Namen, Erweiterung oder regulärem Ausdruck.
Im Gegensatz zu klassischen Tools wie find wurde gofis ursprünglich entwickelt
mit Schwerpunkt auf Geschwindigkeit, lesbarer Ausgabe und paralleler Verzeichnisverarbeitung.

Das Projekt wird unter der MIT-Lizenz vertrieben und kann frei verwendet werden
für persönliche und kommerzielle Zwecke.

⚙️ Hauptfunktionen

  • Parallele Verzeichnisdurchquerung mithilfe von Goroutinen
  • Suche nach Dateinamen und regulären Ausdrücken
  • Nach Erweiterungen filtern
  • Schwere Verzeichnisse (.git, node_modules, Vendor) werden ignoriert
  • Menschenlesbare Ausgabe der Dateigrößen
  • Minimale Abhängigkeiten und schnelle Erstellung

🚀 Installation

Damit Go funktioniert, muss Go installiert sein.

git clone https://github.com/demensdeum/gofis
cd gofis
go build -o gofis main.go

Sobald die Binärdatei erstellt ist, kann sie direkt verwendet werden.

Auf der Release-Seite gibt es auch eine eigenständige Version für moderne Windows-Versionen:
https://github.com/demensdeum/gofis/releases/

🔍 Anwendungsbeispiele

Dateien nach Namen suchen:

./gofis -n "config" -e ".yaml" -p ./src

Schnelle Positionssuche:

./gofis "main" "./projects" 50

Suche mit regulärem Ausdruck:

./gofis "^.*\.ini$" "/"

🧩 Wie es funktioniert

Gofis basiert auf dem Wettbewerbsmodell von Go:

  • Jedes Verzeichnis wird in einer separaten Goroutine verarbeitet
  • Verwendet ein Semaphor, um die Anzahl aktiver Aufgaben zu begrenzen
  • Kanäle werden zur Übermittlung von Suchergebnissen verwendet

Dieser Ansatz ermöglicht eine effiziente Nutzung der CPU-Ressourcen
und beschleunigt die Suche in großen Dateibäumen erheblich.

👨‍💻 Für wen ist Gofis geeignet?

  • Entwickler, die mit großen Repositories arbeiten
  • DevOps und Systemadministratoren
  • Benutzer, die eine schnelle Suche über das Terminal benötigen
  • Für diejenigen, die die praktischen Anwendungen der Parallelität in Go erlernen

📌 Fazit

Gofis ist ein einfaches, aber effektives Tool, das eines tut und es gut macht.
Wenn Sie in großen Projekten häufig nach Dateien suchen und Wert auf Geschwindigkeit legen,
Dieses CLI-Tool ist auf jeden Fall einen Blick wert.

Ollama-Anruf

Wenn Sie Ollama verwenden und nicht jedes Mal Ihren eigenen API-Wrapper schreiben möchten,
Das Projekt ollama_call vereinfacht die Arbeit erheblich.

Dies ist eine kleine Python-Bibliothek, die es Ihnen ermöglicht, mit einer Funktion eine Anfrage an ein lokales LLM zu senden
und erhalten sofort eine Antwort, auch im JSON-Format.

Installation

pip install ollama-call

Warum wird es benötigt

  • Minimalcode für die Arbeit mit dem Modell;
  • Strukturierte JSON-Antwort zur weiteren Verarbeitung;
  • praktisch für schnelle Prototypen und MVPs;
  • unterstützt bei Bedarf die Streaming-Ausgabe.

Beispiel verwenden

from ollama_call import ollama_call

response = ollama_call(
    user_prompt="Hello, how are you?",
    format="json",
    model="gemma3:12b"
)

print(response)

Wenn es besonders nützlich ist

  • Sie schreiben Skripte oder Dienste auf Basis von Ollama;
  • benötigen ein vorhersehbares Antwortformat;
  • Es besteht kein Wunsch, schwere Frameworks zu verbinden.

Gesamt

ollama_call ist ein leichter und übersichtlicher Wrapper für die Arbeit mit Ollama aus Python.
Eine gute Wahl, wenn Einfachheit und schnelle Ergebnisse wichtig sind.

GitHub
https://github.com/demensdeum/ollama_call

SFAP: ein modulares Framework für die moderne Datenerfassung und -verarbeitung

Im Rahmen der aktiven Entwicklung von Automatisierung und künstlicher Intelligenz besteht die Aufgabe, effektiv zu sammeln,
Das Bereinigen und Transformieren von Daten wird von entscheidender Bedeutung. Die meisten Lösungen schließen nur
Dabei handelt es sich um separate Phasen dieses Prozesses, die eine komplexe Integration und Unterstützung erfordern.

SFAP (Seek · Filter · Adapt · Publish) ist ein Open-Source-Projekt in Python,
das einen ganzheitlichen und erweiterbaren Ansatz für die Verarbeitung von Daten in allen Phasen ihres Lebenszyklus bietet:
von der Quellensuche bis zur Veröffentlichung des fertigen Ergebnisses.

Was ist SFAP?

SFAP ist ein asynchrones Framework, das auf einem klaren Konzept einer Datenverarbeitungspipeline basiert.
Jede Stufe ist logisch getrennt und kann unabhängig erweitert oder ersetzt werden.

Das Projekt basiert auf dem Architekturmuster Chain of Responsibility, das Folgendes bietet:

  • Flexibilität der Pipeline-Konfiguration;
  • einfaches Testen einzelner Stufen;
  • Skalierbarkeit für hohe Lasten;
  • saubere Aufgabentrennung zwischen den Komponenten.

Hauptphasen der Pipeline

Seek – Datensuche

In dieser Phase werden Datenquellen entdeckt: Webseiten, APIs, Dateispeicher
oder andere Informationsflüsse. SFAP erleichtert die Anbindung neuer Quellen ohne Änderungen
der Rest des Systems.

Filter – Filtern

Die Filterung soll Rauschen entfernen: irrelevante Inhalte, Duplikate, technische Elemente
und Daten von geringer Qualität. Dies ist entscheidend für nachfolgende Verarbeitungsschritte.

Anpassen – Anpassung und Verarbeitung

Die Anpassungsphase ist für die Datentransformation verantwortlich: Normalisierung, Strukturierung,
semantische Verarbeitung und Integration mit KI-Modellen (einschließlich generativer).

Veröffentlichen – Veröffentlichung

Im letzten Schritt werden die Daten im Zielformat veröffentlicht: Datenbanken, APIs, Dateien, externe Dienste
oder Content-Plattformen. SFAP schränkt die Art und Weise, wie das Ergebnis geliefert wird, nicht ein.

Hauptmerkmale des Projekts

  • Asynchrone Architektur basierend auf asyncio
  • Modularität und Erweiterbarkeit
  • Unterstützung für komplexe Verarbeitungspipelines
  • Bereit für die Integration mit AI/LLM-Lösungen
  • Geeignet für hochbelastete Systeme

Praktische Anwendungsfälle

  • Aggregation und Analyse von Nachrichtenquellen
  • Datensätze für maschinelles Lernen vorbereiten
  • Automatisierte Content-Pipeline
  • Bereinigung und Normalisierung großer Datenströme
  • Integration von Daten aus heterogenen Quellen

Erste Schritte mit SFAP

Alles, was Sie brauchen, um loszulegen, ist:

  1. Klonen Sie das Projekt-Repository;
  2. Python-Abhängigkeiten installieren;
  3. Definieren Sie Ihre eigenen Pipeline-Schritte;
  4. Starten Sie einen asynchronen Datenverarbeitungsprozess.

Das Projekt lässt sich leicht an spezifische Geschäftsaufgaben anpassen und kann mit dem System wachsen,
ohne sich in einen Monolithen zu verwandeln.

Schlussfolgerung

SFAP ist nicht nur ein Parser oder Datensammler, sondern ein vollwertiges Framework zum Erstellen
moderne Daten-Pipeline-Systeme. Es eignet sich für Entwickler und Teams, die sich darum kümmern
skalierbar, architektonisch sauber und datenbereit.
Der Quellcode des Projekts ist auf GitHub verfügbar:
https://github.com/demensdeum/SFAP

FlutDataStream

Eine Flutter-App, die jede Datei in eine Folge maschinenlesbarer Codes (QR und DataMatrix) für Hochgeschwindigkeits-Datenstreaming zwischen Geräten umwandelt.

Besonderheiten
* Duale Kodierung: Stellt jeden Datenblock sowohl als QR-Code als auch als DataMatrix-Code dar.
*Hochgeschwindigkeits-Streaming: Unterstützt automatische Umschaltintervalle von bis zu 330 ms.
* Smart Chunking: Teilt Dateien automatisch in benutzerdefinierte Blöcke auf (Standard: 512 Byte).
* Detaillierter Scanner: Lesen Sie ASCII-Code in Echtzeit für Debugging und sofortiges Feedback.
* Automatische Wiederherstellung: Stellt Dateien sofort wieder her und speichert sie in Ihrem Download-Verzeichnis.
* Systemintegration: Öffnet die gespeicherte Datei nach Abschluss automatisch mit der Standardsystemanwendung.

https://github.com/demensdeum/FlutDataStream

Warum kann ich den Fehler nicht beheben?

Sie verbringen Stunden damit, am Code zu arbeiten, Hypothesen durchzugehen und die Bedingungen anzupassen, aber der Fehler wird trotzdem reproduziert. Kommt Ihnen das bekannt vor? Dieser Zustand der Frustration wird oft als „Geisterjagd“ bezeichnet. Das Programm scheint sein eigenes Leben zu führen und Ihre Korrekturen zu ignorieren.

Einer der häufigsten – und ärgerlichsten – Gründe für diese Situation ist die Suche nach einem Fehler an der völlig falschen Stelle in der Anwendung.

Die Falle der „falschen Symptome“

Wenn wir einen Fehler sehen, wird unsere Aufmerksamkeit auf die Stelle gelenkt, an der er „geschossen“ hat. Aber in komplexen Systemen ist das Auftreten eines Fehlers (Absturz oder falscher Wert) nur das Ende einer langen Kette von Ereignissen. Wenn Sie versuchen, das Ende zu beheben, bekämpfen Sie die Symptome, nicht die Krankheit.

Hier kommt das Flussdiagramm-Konzept ins Spiel.

Wie es in der Realität funktioniert

Natürlich ist es nicht notwendig, jedes Mal direkt ein Flussdiagramm auf Papier zu zeichnen, aber es ist wichtig, es im Kopf zu haben oder als architektonischen Leitfaden zur Hand zu haben. Mit einem Flussdiagramm können Sie den Betrieb einer Anwendung als Ergebnisbaum visualisieren.

Ohne diese Struktur zu verstehen, tappt der Entwickler oft im Dunkeln. Stellen Sie sich die Situation vor: Sie bearbeiten die Logik in einem Bedingungszweig, während die Anwendung (aufgrund eines bestimmten Parametersatzes) zu einem völlig anderen Zweig wechselt, an den Sie noch nicht einmal gedacht haben.


Ergebnis: Sie verbringen Stunden mit der „perfekten“ Codekorrektur in einem Teil des Algorithmus, was natürlich nicht dazu beiträgt, das Problem in einem anderen Teil des Algorithmus zu beheben, wo es tatsächlich fehlschlägt.


Algorithmus zur Beseitigung eines Fehlers

Um nicht mehr an einer verschlossenen Tür herumzurütteln, müssen Sie Ihre Herangehensweise an die Diagnose ändern:

  • Finden Sie den Status im Ergebnisbaum:Bevor Sie Code schreiben, müssen Sie den Pfad genau bestimmen, den die Anwendung genommen hat. An welchem ​​Punkt hat die Logik eine falsche Wendung genommen? Welcher konkrete Staat (Staat) hat zu dem Problem geführt?
  • Reproduktion ist 80 % des Erfolgs: Dies wird normalerweise durch Tester und automatisierte Tests durchgeführt. Wenn der Fehler „schwebt“, wird die Entwicklung in den Prozess einbezogen, um gemeinsam nach Bedingungen zu suchen.
  • Verwenden Sie so viele Informationen wie möglich: Protokolle, Betriebssystemversion, Geräteparameter, Verbindungstyp (WLAN/5G) und sogar ein bestimmter Telekommunikationsbetreiber sind für die Lokalisierung wichtig.

„Foto“ vom Moment des Fehlers

Um das Problem zu beheben, müssen Sie im Idealfall über den vollständigen Status der Anwendung zum Zeitpunkt der Reproduktion des Fehlers verfügen. Auch Interaktionsprotokolle sind von entscheidender Bedeutung: Sie zeigen nicht nur den Endpunkt, sondern auch den gesamten Benutzerpfad (welche Aktionen dem Fehler vorausgingen). Dies hilft zu verstehen, wie ein ähnlicher Zustand wieder hergestellt werden kann.

Zukunftstipp: Wenn Sie auf einen komplexen Fall stoßen, fügen Sie diesem Codeabschnitt erweiterte Debug-Protokollierungsinformationen hinzu, für den Fall, dass die Situation erneut auftritt.


Das Problem „schwer fassbarer“ Zustände im Zeitalter der KI

In modernen Systemen, die LLM (Large Language Models) verwenden, wird der klassische Determinismus („ein Eingang, ein Ausgang“) häufig verletzt. Sie können genau die gleichen Eingabedaten übergeben, erhalten aber ein anderes Ergebnis.

Dies geschieht aufgrund des Nichtdeterminismus moderner Produktionssysteme:

  • GPU-Parallelität: GPU-Gleitkommaoperationen sind nicht immer assoziativ. Aufgrund der parallelen Ausführung von Threads kann sich die Reihenfolge, in der Zahlen hinzugefügt werden, geringfügig ändern, was sich auf das Ergebnis auswirken kann.
  • GPU-Temperatur und -Drosselung: Ausführungsgeschwindigkeit und Lastverteilung können vom physischen Zustand der Hardware abhängen. In großen Modellen häufen sich diese mikroskopischen Unterschiede und können dazu führen, dass am Ausgang ein anderer Token ausgewählt wird.
  • Dynamisches Batching: In der Cloud wird Ihre Anfrage mit anderen kombiniert. Unterschiedliche Batch-Größen verändern die Mathematik der Berechnungen in den Kerneln.

Unter solchen Bedingungen wird es fast unmöglich, „denselben Zustand“ zu reproduzieren. Nur ein statistischer Testansatz kann Sie hier retten.


Wenn die Logik versagt: Speicherprobleme

Wenn Sie mit „unsicheren“ Sprachen (C oder C++) arbeiten, kann der Fehler aufgrund einer Speicherbeschädigung auftreten.

Dies sind die schwerwiegendsten Fälle: Ein Fehler in einem Modul kann Daten in einem anderen „überschreiben“. Dies führt zu völlig unerklärlichen und isolierten Fehlern, die mit der normalen Anwendungslogik nicht nachvollzogen werden können.

Wie schützt man sich auf architektonischer Ebene?

Um solche „mystischen“ Fehler zu vermeiden, sollten Sie moderne Ansätze verwenden:

  • Multithread-Programmiermuster:Eine klare Synchronisierung eliminiert Race Conditions.
  • Thread-sichere Sprachen: Tools, die Speichersicherheit zur Kompilierungszeit garantieren:
    • Rust: Das Eigentümersystem eliminiert Speicherfehler.
    • Swift 6-Parallelität:Starke Datenisolationsprüfungen.
    • Erlang: Vollständige Prozessisolation durch das Akteurmodell.

Zusammenfassung

Bei der Behebung eines Fehlers geht es nicht darum, neuen Code zu schreiben, sondern darum, zu verstehen, wie der alte funktioniert. Denken Sie daran: Sie könnten Zeit damit verschwenden, einen Zweig zu bearbeiten, den das Management nicht einmal berührt. Erfassen Sie den Zustand des Systems, berücksichtigen Sie den Faktor des KI-Nichtdeterminismus und wählen Sie sichere Tools aus.

Ferral

Ferral ist eine High-Level-Multiparadigmen-Programmiersprache, die speziell für die Codegenerierung aus großen Sprachmodellen (LLMs) entwickelt wurde. Während traditionelle Sprachen unter Berücksichtigung der menschlichen Ergonomie entwickelt wurden, ist Ferral darauf optimiert, wie große Sprachmodelle (LLMs) Logik begründen, tokenisieren und ableiten.

Der Name wird mit zwei R geschrieben, was auf einen „neu konzipierten“ Ansatz für die Unvorhersehbarkeit von KI-generiertem Code hinweist.

https://github.com/demensdeum/ferral