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.

Umgang mit HEAD-Anfragen in Astro.js für UptimeRobot und Co.

Beim Einsatz von Monitoring-Diensten wie UptimeRobot, die HEAD-Anfragen nutzen, um die Verfügbarkeit einer Website zu prüfen, kann es in Astro im Produktionsmodus zu Problemen kommen. Diese Dienste senden oft keinen Origin-Header, was zu einer 403-Antwort führt. HEAD-Anfragen ohne Origin-Header werden von Astro.js im Produktionsmodus abgelehnt, was Monitoring-Dienste wie UptimeRobot dazu veranlasst die Website als down anzusehen. Um das zu beheben kann in der Astro-Konfiguration die Sicherheitsprüfung für den Origin-Header deaktiviert werden.

astro.config.mjs

export default defineConfig({
    security: {
        checkOrigin: false, // for head requests -> uptimerobot
    },
});

Durch das Setzen von checkOrigin: false in der Astro-Konfiguration wird sichergestellt, dass Dienste wie UptimeRobot HEAD-Anfragen erfolgreich durchführen können, ohne eine 403-Antwort zu erhalten.

Hinweis: Diese Einstellung sollte mit Vorsicht verwendet werden, da sie Sicherheitsprüfungen beeinflusst.

Self-Host Google-Fonts

Aus Datenschutzgründen kann es problematisch sein, Fonts von Google-Servern einzubinden. Google-Fonts erlaubt es, alle benötigten Font-Dateien als ZIP herunterzuladen. Allerdings generiert es nicht die dafür notwendigen CSS-Dateien. Natürlich ist es möglich, diese manuell zu erstellen, einfacher geht es aber mit dem Dienst: gwfh.mranftl.com. Hier kann man ebenfalls alle Google-Fonts heruntergeladen, allerdings kann man sich hier mit wenigen Klicks ein passendes CSS generieren lassen.

Die Benamung der Dateien unterscheidet sich von der der bei Google, deswegen ist es einfacher die von mranftl bereitgestellte ZIP-Datei zu verwenden.

Vor der Nutzung von heruntergeladenen Fonts gilt es selbstverständlich, zu überprüfen, ob die Lizenz die gewünschte Nutzung ermöglicht.

Gluon.js & Neutralino - Zwei Newcomer vordern Electron und NW.js heraus

Zwei Newcomer vorderen Electron und NW.js bei Erstellen von JavaScript-Desktopaplikationen heraus. Die beiden neuen Tools erzeugen weit kleinere Applikationen als die eingesessenen Konkurrenten. Anwendungen sind nur wenige MB und nicht mehrere Hundert MB groß. So liefern beide keine Chrome-Runtime mit. Dadurch lässt sich schon ca. 60 MB sparen. Gluon setzt einen bereits installierten Chrome oder Firefox voraus. Neutralino setzt auf die in dem jeweiligen Betriebssystem integrierte Browser-Technologien (z.B. gtk-webkit2 unter Linux). Es kann immer noch clientseitiges JavaScript ausgeführt werden, außerdem bieten beide die Möglichkeit ein Backend anzubinden. Diese Funktionalität ist für viele Anwendungsfälle ausreichend, oft wird wahrscheinlich überhaupt keine Backendfunktionalität benötigt, auch wenn solche Anwendungen dann auch als PWA umgesetzt werden könnten, bevorzugen es manche dennoch diese als Desktop-Anwendung zu vertreiben.

Neutralino

Neutralino verzichten auf eine Node.js Runtime. Es kann noch immer auf die integrierten APIs zugegriffen werden. Im Gegensatz zu Gluon stehen über die Neutralion API viele Desktop-Funktionen zur Verfügung. Deswegen kann oft auf ein Backend verzichtet werden. Dennoch kann über IPC/Websockets ein solches angebunden werden. Das Backend kann in beliebiger Technologie umgesetzt werden, solange diese Websockets unterstützt. Es existieren Beispiele für C++ und Node.js. Anwendungen können über das integrierte neu build Befehl für Windows, Linux und MacOS erstellt werden. Teilweise wird auch bereits ARM64 unterstützt.

Gluon

Gluon ist ein noch sehr neues Projekt. Dennoch hat es bereist sehr viel Aufmerksamkeit erzeugt. Als Backend könne Node, Deno oder Bun verwendet werden. Dabei wird die Anbindung an den Client wie bei Neutralino auch über IPC umgesetzt. Leider verfügt Gluon noch über kein integriertes "build"-Kommando. Beide Tools befinden sich momentan noch in einer frühen Entwicklungsphase und sind deswegen nicht für große Anwendungen geeignet. Auch haben sie das Problem, dass der Entwickler nicht weis, in welcher Umgebung seine Anwendung ausgeführt wird. Wer damit leben kann, sollte den beiden Tool auf jeden Fall einmal anschauen.

zx - Ein Werkzeug für einfachere Konsolen-Scripte in Node.js

Bash-Scripte sind schnell geschrieben, allerdings erschwert die gewöhnungsbedürftige Syntax es, komplexere Skripte zu schreiben. JavaScript ist eigentlich eine perfekte, um Scripte zu schreiben (was das Script im Namen ja bereits andeutet), aber die Verwendung der Node.js-Standardbibliothek ist leider nicht intuitiv. Das zx-Paket, das als Open-Source von Google bereitgestellt wird, stellt nützliche Wrapper für child_process bereit und liefert darüber hinaus einiges an sinvollen Funktionen.

zx kann über npm i -g zx global installiert werden, einzige Vorausetztung ist ein installiertes Node/NPM.

Hier ein einfaches Beispiel-Script:

#!/usr/bin/env zx
await $`cat package.json | grep name`

let branch = await $`git branch --show-current`
await $`dep deploy --branch=${branch}`

await Promise.all([
    $`sleep 1; echo 1`,
    $`sleep 2; echo 2`,
    $`sleep 3; echo 3`,
])

let name = 'foo bar'
await $`mkdir /tmp/${name}`

Es werden folgende Befehle bereitgestellt:
  • $ - Führt angegbenen Befehl über spawn aus
  • cd()
  • fetch()
  • question()
  • sleep() 
  • echo()
  • stdin()
  • within()
  • retry()
  • spinner()- Rendert einen Spinner/Ladeanimation auf der Konsole
  • chalk - Ermöglicht farbige Ausgaben auf der Konsole
  • fs 
  • os 
  • path 
  • glob
  • yaml - Ermöglicht das einlesen von YAML
  • minimist - Einfaches parsen von Argumenten
  • which 
  • filename 
  • dirname 
  • require()

Mehr zu zx unter github.com/google/zx

NPM-Pakete komfortabler aktuell halten

Mit den beiden Paketen npm-check und npm-check-updates gibt es zwei Tools, die es Entwicklern erleichtern Node.js und Java-/Type-Script Projekte aktuell zu halten. Beide Tools analysieren die package.json bzw. die package-log.json und listen mögliche Updates auf. Im interaktiven Modus können updates Pakete direkt ausgewählt und installiert werden. Es empfiehlt sich Tools über npx auszuführen und nicht lokal/global zu installieren. Dadurch ist gewährleistet, dass immer die aktuellste Version verwendet wird.

npm-check im Interaktiven Modus:

npx npm-check -u 

npm-check-updates im Interaktiven Modus:

npx npm-check-updates --format group --interactive

npm-check bietet im interaktiven Modus (-u) eine detailliertere Darstellung der Pakete gefällt deswegen besser als npm-check-updates.

PrimeReact - Umfassende Componenten Biblothek für React

React Komponenten Libraries gibt es wie Sand am Meer. Leider fehlen ihnen meist komplexere Komponenten, wie man sie z. B. für Admin-Interfaces wünscht. Für solche Anwendungsfälle will man nicht immer das Rad neu erfinden. PrimeReact ist eine recht unbekannte Komponentenbibliothek von der Firma Prime, obwohl PrimeReact über sehr viele Komponenten verfügt. Diese Komponenten decken auch kompliziertere Falle ab. So gibt es z. B. eine DataTable mit Edit, Pagination und Filterfunktion oder einen Tree-View mit Drag-Drop Support. Bei den Standard-Formularkomponenten gibt es alle erdenklichen Varianten wie Multi-Select, Cascade-Select, Masked-Inputs, Color-Picker, DatePicker Chips. Es existieren auch Komponenten wie die PickList oder eine einfachere OrderList. Aber auch Diagramme sind in die Komponenten-Bibliothek vorhanden (unter anderem: Kuchen, Bar, Line, PolarArena). Durch dieses umfassende Komponenten-Angebot können die meisten Fälle abgedeckt werden, ohne auf zusätzliche Komponenten zurückgreifen zu müssen.

Alle Komponenten sind kostenlos unter der MIT-Lizenz veröffentlicht. Es gibt mehrere kostenlose Themes. Allerdings werden diese nur als CSS angeboten. Will man die zugrundeliegenden SASS-Files, die ein einfaches Anpassen des Designs ermöglichen, so wird man zur Kasse gebeten. Alternativ existiert auch ein ebenfalls kostenpflichtiger PrimeDesigner,mit dem rudimentäre Anpassungen vorgenommen werden können.

Vorteile

  • Viele Business-Komponenten, die anderswo Geld kosten oder die man sich irgendwo zusammensuchen oder selber bauen muss
  • Gute Dokumentation mit vielen Beispielen
  • Einheitliches Konzept über alle Komponenten
  • Die gleichen oder ähnliche Komponenten werden von Prime auch für andere Frameworks wie Vue und Angular angeboten. Dadurch kann auch über Technologie-Grenzen hinweg ein einheitliches Design umgesetzt werden.
  • Es existieren mit PrimeIcons und PrimeFlex noch weitere kostenlose Erweiterungen, mit denen Icons und Layouts umgesetzt werden können

Nachteile:

  • Anpassen des Designs nicht ohne weiteres möglich. Bzw. kostenpflichtig
  • Fast alle Design-Anpassungen an den Komponenten werden per CSS-Klassen umgesetzt. Das ist ungewöhnlich und teilweise auch unübersichtlich
  • Formular-Layouts sind Komplizert und ausladend.
  • Community könnte größer sein

Pico.css - Micro-CSS-Framework für semantisches HTML

Bei Pico.css handelt es sich um ein sehr kleines, responsive CSS-Framwork. Minified und gzipped ist es kleiner als 10 KB und bietet doch einheitliches Design und einen integrierten Darkmode für die meisten HTML-Elemente. Mit "für semantisches HTML" ist gemeint, dass Pico.css ohne grösstenteils ohne Klassen auskommt. Es werden HTML-Komponenten gestylt. Dadurch ist es nicht notwendig, sich für das Standard-Design spezielle Klassennamen einzuprägen. Für Komponenten wie Buttons werden aber dennoch Modified-Klassen wie .primary, .secondary, .contrast oder .outline angeboten. Deswegen bezeichnet sich Pico.css auch nicht komplett Klassenlos.

Natürlich ist es weiterhin möglich, eigene Klassen einzuführen und zu verwenden.

Durch seine Größe und einfache Verwendung ohne Build System ist Pico.css prädestiniert für das Stylen von auf Mikrocontrollern wie dem ESP8266 oder dem ESP32 gehosteten Webinterfaces.

NSIS - Nullsoft Scriptable Install System

Mit dem Open-Source-Tool NSIS lassen sich über Script-Dateien, Installer für Windows erstellen. Dabei gibt es unzählige Optionen und Anpassungsmöglichkeiten. Das Erstellen eines rudimentären Installers ist dadurch leider aufwändig. Hat man sich aber einmal alle benötigten Features zusammengesucht stehen die erstellten Installer kommerziellen Lösungen in nichts nach. NSIS wurde von den Machern von Winamp ins Leben gerufen und wird auch bei großen kommerziellen Produkten eingesetzt.

Nachfolgen ein Beispiel-Script zum Erstellen eines Installers:

!include "MUI2.nsh"

Name "ragersComicImporter"
OutFile "ragersComicImporter Setup.exe"

InstallDir "$PROGRAMFILES\ragersComicImporter"
RequestExecutionLevel admin
Unicode True


!define MUI_ABORTWARNING
!define MUI_ICON "..\public\icons\icon.ico"
!define MUI_HEADERIMAGE_RIGHT
!define MUI_WELCOMEFINISHPAGE_BITMAP "..\public\images\Wizard.bmp"

;Pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "..\LICENSES.md"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"

Section 
    SetOutPath $INSTDIR
    WriteUninstaller $INSTDIR\uninstaller.exe
    # File /r ..\dist\*
    File ..\dist\icon.ico

    CreateShortcut "$SMPROGRAMS\ragersComicImporter.lnk" "$INSTDIR\ragersComicImporter.exe" "$INSTDIR\icon.ico"
    CreateShortcut "$DESKTOP\ragersComicImporter.lnk" "$INSTDIR\ragersComicImporter.exe" "$INSTDIR\icon.ico"

    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ragersComicImporter" \
                 "DisplayName" "ragersComicImporter"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ragersComicImporter" \
                 "DisplayIcon" "$INSTDIR\icon.ico"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ragersComicImporter" \
                 "Publisher" "ragerWorks"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ragersComicImporter" \
                    "UninstallString" '"$INSTDIR\uninstaller.exe"'

SectionEnd

Section "uninstall"
    Delete "$INSTDIR\uninstaller.exe"
    Delete "$SMPROGRAMS\ragersComicImporter.lnk"
    Delete "$DESKTOP\ragersComicImporter.lnk"

    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ragersComicImporter"

    RMDir  /r $INSTDIR
SectionEnd

Tilt-Effekte mit tilt.js

Hallo Welt

Bei tilt.js handelt es sich um eine Java-Script-Bibliothek zum Erstellen von Tilt-Effekten. Diese können auf beliebige HTML-Elemente angewendet werden. Ursprünglich nur für jQuery gibt es inzwischen sowohl eine Vanilla.js als auch eine React-Variante. Mit dem Tilt-Effekten können überraschende Eyecatcher erstellt werden. Ein Beispiel ist über diesem Text zu sehen. Um den Effekt zu Aktiveren ist es notwendig mit der Maus über den Button "Hallo Welt" zu fahren.