Gradle: Schleife über JavaExec

Einen JavaExec-Task dynamisch loopen lassen:

someItems kann von irgendwo her kommen; aus einer eingelesenen Datei bspw.

via

Baldur’s Gate 3

So! Am 29.08. habe ich meinen ersten Run beendet – nach ca. 153 Stunden netto, also ohne Reloads oder dem Ausprobieren anderer Entscheidungen. Brutto waren es sogar 90 Stunden mehr 😅

Der zweite Run läuft schon, dieses mal versuche ich, böse zu spielen. Patch 7 ist raus und bringt einige Erweiterungen für den Dark Urge. Wobei mir die weiteren Ende nicht so wichtig sind wie bspw. Alfira als (temporäre?) Party Member.

Wie auch immer, ansonsten gucke ich seitdem endlich (weil ohne Gefahr von Spoilern) BG3-Videos 🙂 Hier meine bisherige Empfehlung, die sicherlich noch ergänzt werden wird:

Technisch gesehen ohne echte Spoiler, aber natürlich sieht man einige Szenen. Nicht jedes Kapitel ist gleich interessant, aber einige dafür schon sehr. Witzig fand ich, dass der Firmengründer nocht der CEO ist und gleichzeitig der Director von BG3. Der Mann steht hinter dem, was seine Firma tut! Das Video ist von Dan Allen, dessen andere BG3-Videos ich noch schauen werde.

Alle folgenden Videos sind quasi spoilerfrei:

Für (kurze!) Making-Ofs lohnt sich dieser neue Larian-Kanal. Exemplarisch ein Video vom Motion Capturing und wie sie Kampfstile der verschiedenen Rassen entwickelt haben. Gibt einen guten Eindruck davon, wie viel Liebe zum Detail da drin steckt. Ich mein’, guck nur, wie Lae’zel und Karlach dastehen!

Von der Idee her ganz witzig, mir aber zu lang, war dieses Video, wie der Cast Pen and Paper spielt – als sich selbst! Hier deshalb nur die Kurzzusammenfassung:

Man bekommt da einen schönen Eindruck der sympathischen Sprecher, und wie viel Spaß sie zusammen hatten. Wem das ebenfalls zu lang ist, kann sich hier in Kurzform noch mal anfixen lassen, einen zweiten Lauf zu starten:

Eine längere Version, imho besser verdauchlich als die P&P-Runde oben, und eines meiner Highlights ist die folgende Runde. Da habe ich angefangen, alle Charaktere zu vermissen. Ja, so gut ist das Spiel, man vermisst seine Gang, wenn es vorbei ist.

Und meine aktuelle Nummer 1: Shadowheart und Lae’zel reagieren auf “Horny Comments”, zu schön 😂 Da haben sich zwei gefunden 😍

Update 24.09.

Na gut, seit dem Wochenende spiele ich (wieder, im ersten Versuch bin ich nach einer Stunde gestorben) Honor Mode. Dieses Video hat mich dazu animiert:

Update 27.09.

Heute spiele ich nicht aktiv, sondern gucke Videos eines Users, der a) ohne jemanden zu töten

und b) mit per Mod ausschließlich 1er Würfen durchspielt

🤣

Update 10.10.

Apropos “Can you beat …”: Wie würden sich die Origin-Charaktere ohne menschliche Hilfe schlagen?

Custom ESLint rule with Ember.js

Ich habe hier ein Ember.js 5.8.1, was bedeutet, dass alle Tutorials für React, Angular, … schon mal ein Stück weit wegfallen. Dabei ist ein ESLint 8.57.0, was sich unterscheidet von der aktuellen 9.x. Das Ganze wird installiert per Node.js, was ebenfalls eine Rolle spielt. Long story short: Es ist nicht so einfach, für das Setup ein funktionierendes Tutorial für Custom Rules zu finden. Wie immer in der JS-Welt also 🥰

Das Grundgerüst habe ich deshalb von hier, basierend auf hier:

In der index.js wird ein Plugin definiert, das dynamisch alle Regeln aus dem Verzeichnis einliest – der Name des Verzeichnisses ist egal:

Eine solche Regel, im Beispiel oben some-rule.js, kann dabei auf dem Tutorial von ESLint basieren – Achtung, man wähle ein Tutorial passend zur vorhandenen Version. Wie die Datei heißt, ist egal (so lange sie auf .js endet, klar).

In einer (im Beispiel oben nur für die Tests) .eslintrc.js wird besagtes Plugin eingebunden. Die Syntax unterscheidet sich dabei subtil von der offenbar inzwischen präferierten eslint.config.js:

Warum “crusy”? Weil das Ganze unter einem Namen in der package.json “installiert” werden muss, Und der Teil fehlt im offiziellen Tutorial: npm link ./config/eslint/ --save. Dafür ist die config/eslint/package.json, besagter Name ist zwingend geprefixt mit eslint-plugin:

npm install, und schon geht’s!

Javascript: Image blob downloader

Folgendes sieht man manchmal – mutmaßlich um ein Öffnen im neuen Tab zu verhindern:

<img src=”blob:https://example.com/5becfe0f-9020-4012-b494-0d49f99f6d1e”>

Aber nicht mit dem Commander 😎 Dieses Snippet habe ich ein wenig angepasst, denn bevor ich id– oder class-Selector zusammenbaue, kopiere ich direkt src:

Copy & paste in die Devtools-Konsole, fertig.

Relevanssi mit (führender) Interpunktion

Ich nutze meine Tags insbesondere auch zum Suchen (wozu würde man die sonst brauchen?), aber WordPress indiziert die von Haus aus gar nicht. Deshalb nutze ich Relevanssi. Das wiederum versucht, besonders schlau zu sein, was (meiner Meinung nach: Wie immer) etwas nach hinten losgeht, denn so wird beispielsweise aus .NET “net”. Was total OK für die URL ist, aber beim Suchen nicht hilft, denn eine Suche nach “net” findet grundsätzlich auch “.NET” (weil Teilwort); eine Suche nach “.net” aber dann nicht!

Die Lösung ist das Folgende in der functions.php:

siehe hier.

Teams v2 in Ubuntu

Teams “classic” wird abgeschaltet, aber Dein aktueller Chrome zeigt Dir unter Ubuntu einfach keinen Button, um zu wechseln? Say no more! Mit F12 in die Konsole, dann

  1. window.localStorage.setItem("tmp.isOptedIntoT2Web", true)
  2. document.location.href = 'https://teams.microsoft.com/v2/'

Von, via.

[macOS] Ein .zip-File pro Datei

Ich weiß, man kann auch einfach alle Dateien auf das Archivierungsprogramm draggen, aber da hat man nicht all die schönen Optionen der Terminalanwendung – wie beispielsweise Passwörter:

-e verschlüsselt (“encrypt”), -0 (Null, nicht Oh) setzt die Kompression auf, naja, Null 🤓 -P nimmt das Passwort entgegen, ohne müsste man es für jede Datei eingeben. PS, Achtung: Das muss ggf. aus der .bash_history entfernet werden.

Man beachte den Backslash \ (ALT+SHIFT+7) zum Escapen von Sonderzeichen.

Entpacken ist analog:

macOS Mojave in VirtualBox

macOS in einer VM zu installieren ist eine Geschichte voller Missverständnisse. Zumindest auf meiner Seite 🙃

So wäre ich bspw. davon ausgegangen, dass die Hardware – also die “Machine” in “Virtual Machine” – nun ja, “virtuell” sei. Jein, zum Beispiel muss die verwendete Hardware Virtualisierung unterstützen. Geht bei Dir nicht? Pech gehabt. Und der Prozessor muss (!) von Intel sein. Klar, Apple hatte nie AMD-Prozessoren, warum sollte OS X die unterstützen. Mein Missverständnis an der Stelle: Der reale Prozessor wird nicht zu 100% weg-emuliert. Man kann für VirtualBox-VMs zwar ein wenig die CPU spezifizieren, aber trotzdem keine Chance (Stichwort “Stuck at End RandomSeed”).

Also kein VirtualBox. Es gibt eine Anleitung bei heise+ für macOS unter Windows mittels Qemu – die Idee: Windows 10 kann Linux, Linux kann KVM, und dafür gibt’s Skripte um macOS laufen zu lassen (siehe auch). It’s VMs all the way down, und das ist das nächste Problem: Windows 10 kann keine “Nested Virtualization” – für AMD. Also nächstes Missverständnis: Nur, weil Deine Hardware und Deine Software grundsätzlich Virtualisierung können, heißt das noch lange nichts, auch Dein OS muss das können.

Deshalb war ich zwischenzeitlich auf ein MacBook umgestiegen, um dort macOS Mojave (aka 10.14) als VM in Catalina (aka 10.15) zu hosten. Einschub: Warum eigentlich Mojave? Weil das das letzte macOS ist, das 32-Bit-Anwendungen erlaubt, und mein Photoshop CS6 ist eine solche. Einschub Ende. Und auf explizit Apple-Hardware sollte das ja alles gehen, richtig? Nein, und das ist das nächste Missverständnis. Dieselben Probleme, “End RandomSeed”. Ausprobiert mit einem aktuellen VirtualBox 7.

Dieser Artikel hier nun nennt explizit Mojave und VirtualBox 6.1.26, ok, probieren wir das auch noch mal aus. Und siehe da: Es geht!

Nächstes Missverständnis also offenbar: Was mit VirtualBox 6.1.26 geht/ging, geht auch mit VirtualBox 7.x. Bzw. wo für Windows zu viel Hardware an die VM durchgereicht wurde, war es hier zu wenig, denn die Hardware ist halt von Apple 🙂

Aber nun wollte ich es wissen; Gegenprobe: VirtualBox 6.1.26 auf Windows 11. Startet erst gar nicht:

Das soll mit 6.1.28 wohl behoben sein, aber da kommt dieselbe Meldung. Offenbar kann sich das mit anderer installierter Software ins Gehege kommen, bspw. besagtem Subsystem für Linux, was vom Versuch weiter oben noch installiert ist 🙂 Aber auch ohne das geht es nicht, keine Ahnung. Windows halt. Die “Weiteren Informationen” sagen, man solle die Speicherintegritätsprüfung deaktivieren, aber das klingt mir zu kritisch.

Naja, als nächstes probiere ich Big Sur (aka 11, aka 10.16) als Host, denn das ist das letzte macOS, das auf dem Host-MacBook noch läuft.

Update: Apropos “Emulieren”, es gibt hier einen Artikel, wie man x86 auf den aktuellen ARM-Prozessoren von Apple emuliert – habe ich noch nicht ausprobiert.