Paketmanagement unter Windows

Guten Morgen,

wollte dazu auch mal ein, zwei Sätze schreiben. Unter dem GitHub Repository winget-cli gibt es den Paketmanager WinGet, der im AppInstaller im Windows 10 Insider vorhanden ist, sich aber auch über ein *.appxbundle installieren lässt. Dazu einfach mal bei Release schauen, da kann man die herunterladen und installieren. Die letzte Meldung war bei mir was komisch und abgehakt, aber Installation ging durch.

Weiterlesen

Java Threads und die Zeit

Guten Morgen meine IT-Kollegen,

gerade stieß ich wieder auf ein Problem, welches unter normalen Umständen nicht auftreten sollte: Die Uhrzeit des Hosts ändert sich. Dies sollte bei Programmen die keine Threads haben, oder Threads, die alle paar Stunden einmal ausgeführt werden sollen, in der Regel kein Problem sein. Bei Threads die wichtige Daten alle paar Minuten auswerten / verschieben / löschen sollen, kann dies aber unter Umständen zu dem Problem führen, dass der Thread erst bei der nächsten Uhrzeit ausgeführt wird (Thread.sleep(), Timer und der TimerTask sind hier so Kandidaten).

Zur Veranschaulichung folgende Situation die ich letztens hatte: Ein Programm verschiebt Daten alle X Sekunden (oder sobald eine Datei in ein C:\Pfad landet) auf einen UNC-Pfad. Jetzt wird die nächste Ausführung durch den Timer auf die aktuelle Zeit plus den eingestellten Delay gesetzt. Auf Grund eines Backup-Systems mit einer falschen Uhrzeit, wird die Zeit des Hosts mit der Zeit des Backup-Systems, ein eigenes System mit leider falsch eingestellter Uhrzeit welches von meinem Kollegen verwaltet wird, synchronisiert (sollte nicht passieren, aber das ist ein anderes Thema) und somit um 2 Stunden nachgestellt.

Der Thread wird wieder ausgeführt und setzt die Zeit wieder auf die veränderte aktuelle Zeit plus den vorher eingestellten Delay. Das Backup System wird anschließend fertig und die Zeit wird wieder auf die vorherige zurück gestellt. Jetzt hätten wir auf dem Host beispielsweise 10:00 Uhr, auf dem Backup-System 12:00 Uhr und der nächste Thread würde um 12:02 Uhr anfangen. In den zwei Stunden macht das Programm gar nichts, da der Thread geplant ist und so gesehen kein Fehler zum Auswerfen vorliegt.

So weit dazu.

Dies scheint vor allem an den von Java verwendeten Funktionen zu liegen. Allen voran die Funktion System.currentTimeMillis(). Man könnte nun eigene Klassen und Funktionen schreiben, die statt dieser die Funktion System.nanoTime() verwendet, aber dann müsste man die damit zusammenhängenden Funktionen auch neu schreiben und da diese leider meist private deklariert wurden die entsprechenden Klassen gleich mit dazu.

Sowas mache ich meist eher ungern 😉

Eine gute Möglichkeit für den Ersatz von java.util.Timer (oder entsprechender anderer Klasse) ist ein ScheduledThreadPoolExecutor. Dies könnte in Verwendung in etwa wie folgt aussehen:

Ist natürlich nur ein Beispiel. Man könnte unter anderem die return Werte von scheduleAtFixedRate() in einem Future Array speichern und dann abfragen, aber das gehört in einen anderen Beitrag 😉

Viel Spaß beim Programmieren

Lukas

Diese Veranstaltung ist geschlossen

Hach ja, programmieren ist doch etwas schönes. Alles funktioniert ohne Probleme und keiner übt Druck auf einen aus beispielsweise um etwas zu beheben, was einwandfrei funktioniert. Alles harmoniert und ich liege faul auf dem Sofa und lass die Gedanken schweifen…

Scherz beiseite 🙂

Seit neuestem kriege ich ab und an eine „ClosedByInterruptException„. Das kommt meistens daher, dass es Threads gibt die sich alle gleichzeitig für die größten halten. Fast wie so ein Kollege von mir, aber das ist ein anderes Thema. In meinem Fall tritt es bei Dateioperationen auf (beim Threading immer eine schwierige Geschichte).

Weiterlesen

Kurzmitteilung

Game Development

Moin,

habe gerade mal ein wenig im Internet gestöbert. Diese Liste auf Reddit könnte für manche zukünftige Entwickler eine gute Anlaufstelle sein. Darunter auch der Hinweis, dass man möglichst mit Pong und Super Mario Bros. als Grundlage anfangen sollte.

Daher versuche ich mich die Tage mal an diesen beiden Spielen und werde diese neben anderen Tests auf folgender Seite hochladen:

Lukas Kurth Rocks Games

Wer Lust hat, darf sich meine Fehl-Versuche – und den einen oder anderen Test – daher auch gerne einmal anschauen und mir Feedback geben. Soweit von mir…

Lukas

Matrix Prozess Monitor

Hey Leute,

lange nichts mehr von mir gegeben. Habe die letzten Monate so vor mich her programmiert. Zwischenzeitlich hatten wir hier auch einen Praktikanten, der mir bei meinem Java-Projekt weitergeholfen hat. So konnte ich meine etwas überladene Swing-GUI beiseite legen und mit dem Spring Framework eine Seite gestalten (ist bei Applikationen die auf dem Server laufen eh zu empfehlen 🙂 ).

Jetzt nachdem der Praktikant nicht mehr da ist gäbe es zwar noch ein paar Sachen die angepasst werden müssten, aber ich komme klar 😉

Die Tage gab es dann mal wieder eine rege Diskussion zu Matrix (dem Film), was denn möglich ist und was überhaupt mit Matrix gemeint ist (es ist wirklich nur ein Film Leute 😉 ). Allerdings finde ich die Idee mit dem, wie soll man ich sonst nennen, „Matrix-Regen“ gar nicht mal schlecht. Richtig angeordnet und richtig gelesen, könnte er viele Informationen enthalten. Diese Informationen lassen sich dann auch schneller wiedergeben als nur simpler Text.

Ein Programm habe ich ja, fehlt also nur der Regen. Als Basis habe ich mal den Code von Kenai zu Grunde genommen. Hier wird allerdings nur 40 mal der addDrop() ausgeführt und dann so lange selbst aufgerufen bis man das Programm beendet.

Um mit dem Programm zu arbeiten also erst einmal eine Interface-Klasse gebastelt, bei mir sieht diese in etwa so aus:

Weiterlesen

Kurzmitteilung

DO NOT BLOCK THE EDT

Habe gerade noch einmal an einen Hinweis aus einem Forum gedacht:

Rule #1: Do not block the EDT
Rule #2: DO NOT BLOCK THE EDT, which leads directly to
Rule #3: Do not sleep()in the EDT, and
Rule #4: Do not perform any lengthy-operation in the EDT

Ich finde das eigentlich ganz hilfreich. Durch mein Studium habe ich eigentlich nie vom EDT (Event Dispatcher Thread) erfahren. Vielleicht hilft einem das auch nur bei größeren Projekten und wird deshalb nie erwähnt.

Tipp: Ein Workaround mit Timer oder Executor sollte helfen 😉

Let’s Party

Guten Morgen meine Freunde,

ich kam gestern wieder zu einem Gedanken den ich schon lange nicht mehr hatte: Warum eigentlich keine Spiele programmieren? Wie schwer kann das schon sein (*hust*)?

In gewisser Weise musste ich da immer an einen Satz meines Vaters denken: Wenn etwas nicht so wird wie du willst, mache es selbst! Ich finde damit liegt man in verdammt vielen Fällen genau richtig. Wenn es das Gartenhaus nicht gibt das ich will: mache ich es selbst. Wenn es den Computer nicht gibt den ich will, baue ich selbst einen zusammen. Wenn es das Tool nicht gibt das ich will, programmiere ich es selbst…

So kam mir diese Idee auch bei einer Spiele-Serie: Mario’s Party. Mittlerweile hat der kleine Klempner schon 10 Partys auf die Beine gestellt – Respekt kleiner Mann. Jedoch habe ich mich schon immer gefragt, warum solche Unternehmen nur bedingt auf „Kundenwünsche“ eingehen. Das mit den Wagen wurde schon in Teil 9 nicht wirklich gemocht, dennoch wurden sie in Teil 10 wieder eingefügt; zumindest eine Option zum Abschalten hätten sie einbauen können.

Auch gibt es keine ähnliche Serie für Konsolen aus anderen Häusern als Nintendo. Gerade an Party-Spielen könnte es auf Sonys und Microsofts Konsolen mehr geben. Einige wenige sind ja ganz in Ordnung (so wird Sing-Star wohl immer noch auf einigen Partys gespielt, auch wenn die Songs mittlerweile ziemlich teuer geworden sind), aber es gibt eben keine richtigen Board-Games mit Mini-Spielen darin. Hat Nintendo vielleicht ein Patent auf digitale Spielbretter? Nicht, dass ich wüsste ;-D

Warum also programmiert niemand so ein spaßiges Brettspiel? Weil alle Angst vor Nintendo haben? Glaube ich nicht. Dann hätte es wohl auch kein PlayStation All-Stars Battle Royale gegeben. Dies ist ja eigentlich auch nur ein Abklatsch eines Smash-Brothers Spiels, allerdings in meinen Augen bei weitem nicht so gut.

Vielleicht scheuen manche die Herausforderung die so ein Spiel mitbringt. Immerhin ist es kein Spiel dass ein bestimmtes Genre inne hat. Durch die ganzen kleinen Mini-Spiele taucht es eigentlich in mehreren Genres auf. Es hat kleine Autorennen, Luftschlachten, Wasserschlachten, Ski-Fahren etc. pp. Das Grundprinzip eines solchen Spieles zu entwickeln wäre also noch das einfachste ;D

Wie man unschwer erkennen kann finde ich den Gedanken eines neuen Party Spiels richtig gut. So etwas lässt sich allerdings kaum alleine stemmen. Dafür reichen meine Ressourcen bei weitem nicht aus, vor allem die Zeit. Zudem müsste ich so schon bei allem die Ordnung schlecht hin haben, davon bin ich aber noch zu weit entfernt. Außerdem haut das Fernstudium schon genug rein, da muss ich nicht die restliche Zeit über Spiele-Programmierung sinnieren 😉

Wenn ich ein Team hätte, wäre der Gedanke allerdings eine Überlegung wert. Dann könnten wir versuchen über Unity3D und deren Assets eine Collaboration aufzusetzen und miteinander an verschiedenen Sachen zu Programmieren (Grafik, Design, Scripts, AI etc.).

Wer weiß schon ob ich solche Leute finde; vielleicht sollte ich Mr. SSS mal wieder anschreiben …