Archiv der Kategorie: Computerkram

FXGL11 Level laden

Anscheinend hat sich bei FXGL11 gegenüber den teilweise schon etwas älteren Tutorials was geändert. Das ist eine Sache.

Eine andere, die mich grad in den Wahnsinn getrieben hat, war, dass das Laden eines mit Tiled erstellten Levels schon schief ging, weil das eigentlich vorgesehene, simple

    FXGL.setLevelFromMap("level0.tmx");

die Datei offenbar am falschen Ort gesucht hat. Nach ewigem Rumprobieren mit der Verzeichnisstruktur gab es Abhilfe letztlich nur mit dem etwas umständlicheren:

protected void initGame() {
    FXGL.getGameWorld().addEntityFactory(
        new PlanetExpressFactory());
    TMXLevelLoader tl = new TMXLevelLoader();
    FXGL.getGameWorld()
        .setLevel(tl.load(
        this.getClass().getResource("/assets/levels/level0.tmx"),
        FXGL.getGameWorld()));
}

JavaFX Mac-App erstellen mit Eclipse und Maven

… mit OpenJDK und JavaFX in der Version 14.

JavaFX braucht nicht extra installiert werden, wenn man ein neues Maven-Projekt über den Archetyp org.openjfx aus Maven Central erstellt. Um die Dependencies kümmert sich Maven.

In der pom.xml den Pfad zum jlinkExecutable einstellen sowie einen Launcher festlegen:

<plugin>
  <groupId>org.openjfx</groupId>
  <artifactId>javafx-maven-plugin</artifactId>
  <version>0.0.4</version>
  <configuration>
    <mainClass>package.App</mainClass>
    <jlinkExecutable>/Pfad/zu/jlink</jlinkExecutable>
    <launcher>MeinLauncherSkript</launcher>
  </configuration>
</plugin>

Dann aus Eclipse die pom ausführen als Maven build… und bei Goals javafx:jlink einstellen.

Es wird im target-Verzeichnis ein Verzeichnis image erzeugt, dass u.a. die angepasste Java Runtime sowie ein Launcher-Skript enthält. Vom Terminal aus kann das Launcher-Skript jetzt schon gestartet werden.

Um ein schönes .app-Bundle zu erzeugen, im Terminal ins target-Verzeichnis wechseln und dann:

jpackage --type app-image -i image -n MeineApp -m mein.modul/mein.package.Mainclass --runtime-image image/

Wenn jpackage nicht gefunden wird, muss der Pfad noch händisch gesetzt werden. jpackage liegt ganz normal im bin-Verzeichnis des JDK.

Natürlich sind jeweils die richtigen Namen für die Module, Packages und Klassen einzusetzen. Es kommt dann eine schöne Mac-Application raus, die sich durch Doppelklick starten lässt. (Ich bin mir nicht sicher, ob XCode dafür installiert sein muss, damit das Packagen funktioniert. Bei mir war’s drauf.) Ist dann halt > 100 MB, aber egal. :-]

Amazon Prime Video und Netflix auf dem Raspberry Pi – Update

Alles ist nun viel einfacher als im letzten Artikel beschrieben. Kodi 18 ist inzwischen aktuell, der ganze Kram mit experimentellen Builds ist Vergangenheit und man muss nicht mal LibreELEC nehmen, sondern kann Kodi unter Raspbian laufen lassen und parallel zu einem Desktop oder RetroPie betreiben.

Das Amazon Prime Plugin muss man sich aber immer noch aus dem Sandmann79 Repository besorgen, das vorher manuell einzutragen ist.

In den Einstellungen des Amazon VOD Plugins musste ich dann noch die Region händisch einstellen, sonst ging der Login nicht.

Außerdem muss (mit apt) das Paket kodi-inputstream-adaptive installiert sein, sonst kann das vom Amazon-Plugin mitinstallierte InputStreamHelper-Plugin in Kodi das Widevine-Geraffel (für’s CRM) nicht herunterladen.

Und dann war halt noch so Kindergartenzeugs einzustellen, wie z.B. der Audio-Kanal, wenn auf einmal der Center-Kanal fehlt…

Für Netflix muss händisch noch Pycryptodome installieren. pip install pycryptodomex

Python: Versionshorror bei Packages

Zwei Python-Packages haben mich gestern und heute mit Bugs unter macos Catalina geärgert:

PyGame

Das noch aktuelle PyGame 1.9.6 läuft auf Macs mit Retina-Display unbrauchbar langsam. Der Full-Screen-Modus bringt nur bedingt Abhilfe. Die Developer-Version von PyGame 2 läuft dagegen normal.

Hat wohl was mit SDL1 zu tun, ist bekannt und mit SDL2 gefixt. PyGame 1 mit SDL2 sollte sich eigentlich über Homebrew compilieren lassen, hat bei mir aber mit einer Compiler-Fehlermeldung abgebrochen. Hab’s dann aufgegeben, da sich PyGame 2 als Wheel installieren lässt. Von Python 3.8 sollte man wohl auch eher absehen.

Nachtrag: Bei PyGame 2 unter Windows scheint es wohl Probleme mit dem Alpha-Kanal zu geben, was Auswirkung auf die Kollisionserkennung mit Maske sowie die Darstellung hat.

asciimatics

Die Version 1.11.0 bringt in der Initialisierungsphase einen Fehler bei curses.cbreak(). Möglicherweise hat sich da was bei Catalina geändert, hab ich dann gestern nicht mehr weiter verfolgt, weil es mich in den Wahnsinn getrieben hat. Die ältere Version 1.10.0 läuft normal.

Notizen zu Machine Learning, Teil 2

Ressourcen

Zunächst mal ein Hinweis auf einen ziemlich unterbewerteten YouTube-Kanal zum Thema Machine Learning: Introduction to Machine Learning von Lukas Biewald, Gründer von Weights & Biases und Figure Eight.

Auch interessant, wenn es um Bildverarbeitung mit neuronalen Netzen und Python geht: pyimagesearch

Ein genereller KI-Kurs, der natürlich auch Machine Learning beinhaltet, wird vom MIT bereitgestellt.

Datenbanken, Teil 4: Eins-zu-Eins-Beziehungen

Teil 2 der Serie über Datenbanken, in dem es um das Entity-Relationship-Modell ging, liegt nun schon ungefähr 2 Jahre zurück, aber relationale Datenbanken haben natürlich nichts von ihrer Aktualität eingebüßt und in der Zwischenzeit haben wir in unserem Podcast darüber berichtet. Bisher haben wir 1:N- und N:M-Beziehungen betrachtet. In diesem Teil geht es weiter, denn mit den Beziehungen ist es manchmal kompliziert.

Dieser vierte Teil der Serie setzt Kenntnisse der Grundbegriffe des E/R-Modells und der Umsetzung von 1:N- und N:M-Beziehungen ins relationale Modell voraus. In den ersten drei Teilen der Serie wurden diese erklärt.

Beispiele für 1:1-Beziehungstypen; Quelle;
CC-BY-SA 2.5 Maximilian Dörrbecker

Für 1:N- und N:M-Beziehungen wurde im vorherigen Teil bereits diskutiert, wie die Umsetzung ins relationale Modell erfolgt. 1:N-Beziehungen können am einfachsten mit einer Fremdschlüsselspalte auf der N-Seite umgesetzt werden während für N:M-Beziehungen immer eine Beziehungstabelle notwendig ist.

1:1-Beziehungen

Eine weitere Beziehungsart zwischen zwei Entitätstypen ist die 1:1-Beziehung. Betrachten wir zunächst als Beispiel die Beziehung zwischen einer Person und ihrem Ausweis.

Eine Person besitzt nur einen Ausweis und ein Ausweis gehört zu einer Person. Wir gehen in dem Beispiel weiterhin davon aus, dass jede Person in der Datenbank auch einen Ausweis besitzt und es nur personalisierte Ausweise gibt.

Datenbanken, Teil 4: Eins-zu-Eins-Beziehungen weiterlesen

Datenbanken, Teil 3: Tabellen erstellen mit SQL

Im zweiten Teil der Serie über Datenbanken, der zugegebenermaßen schon etwas zurück liegt, hatte ich versprochen, im folgenden Teil der Serie zu zeigen, wie man in der Praxis mit SQL Tabellen erstellt. Dieses Versprechen will ich nun hiermit einlösen. In der ersten Staffel unseres Podcasts haben uns in der Zwischenzeit allerdings auch schon mit SQL beschäftigt.

SQL ist eine weit verbreitete Sprache für relationale Datenbankmanagementsysteme und umfasst, wie im ersten Teil schon erwähnt, sowohl eine Abfragesprache (Query Language) wie auch Sprachen zum Einfügen und Löschen von Daten (Data Manipulation Langauge) und zum Anlegen eines Datenbankschemas (Data Definition Language). SQL wird von vielen aktuellen relationalen Datenbankmanagementsystemen (DBMS) verstanden. Ein weit verbreitetes und kostenloses DBMS ist MySQL. Die Codebeispiele in diesem und den folgenden Teilen beziehen sich, sofern nichts anderes angegeben ist, auf MySQL. Da SQL aber weitgehend standardisiert ist, sollten sie auch in anderen DBMS funktionieren.

Datenbanken, Teil 3: Tabellen erstellen mit SQL weiterlesen

Darknet

Aber in einer freien, offenen Demokratie gibt es meiner Meinung nach keinen legitimen Nutzen.

Staatssekretärs im Bundesinnenministerium Günter Krings (CDU) über das “Darknet”

Ja, wir leben in einer freien und offenen Demokratie, aber offenbar arbeitet man in der CDU dran. Paradoxerweise führt Herr Krings gerade durch seine Forderungen nach einer Kriminalisierung des Tor-Netzwerks seine Prämisse ad absurdum.