Muckturnier

News 12.02–26.04.2023

Code-Sanierung an der Anmeldeseite

Auf dem Muckturnier der JU Leupoldsgrün (bei dem ich übrigens mit meinem Kartpartner Florian Ziehr bei 94 anderen Mitstreitern einen überragenden 13. Platz erringen konnte!) konnte das Muckturnier-Programm endlich mal wieder „richtig“ eingesetzt werden. Mit zwei Rechnern in einem Netzwerk und auch dem Nutzen vieler Features.

Und prompt gab es einen Speicherzugriffsfehler und das Programm stürzte ab. Gut, passiert ist dabei nichts, neu gestartet, neu verbunden und gut. Daten sind keine verlorenen gegangen, und hinterher war auch alles gut bis zum Schluss.

Aber das darf natürlich nicht passieren. Es darf Fehlermeldungen geben, ein Client darf aus dem Netzwerk fliegen … aber ein Absturz ist nicht akzeptabel. In weiser Voraussicht habe ich alle Instanzen in einem Debugger laufen lassen, so dass ich mit Hilfe des Backtraces genau herausfinden konnte, wo exakt der Crash passiert ist. An einer Stelle, wo das eigentlich überhaupt nicht hätte passieren dürfen, beim Speichern des aktuellen Zustands eines Namens-Editors vor einer Netzwerkänderung. Offensichtlich gab es den Editor zu dem Zeitpunkt nicht mehr.

Während ich auf der Suche nach der Ursache und vor allem der Korrektur des Problems war, fiel mir folgender Kommentar ins Auge (geschrieben von mir selber):

// TODO: Most probably, all this here would better implemented in a model/view infrastructure
// and not by messing with a QTableWidget and QTableWidgetItems. Well, at least, it works ;-)

… tut es eben nicht :-P

Die Anmeldeseite war am Anfang sehr einfach. Einfach eine Liste von Namen. Schritt für Schritt kam immer mehr dazu, und es wurde eine Tabelle. Für die Darstellung bot sich ein QTableWidget an, eine „Bequemlichkeits“-Klasse für die tabellarische Darstellung von Daten.

Und dann kam immer mehr Funktionalität dazu, und es wurde immer komplizierter – und das QTableWidget war immer weniger geeignet dafür. Wie bereits erkannt und per Kommentar festgehalten sollte man sowas mit einer eigenen Model-View-Implementierung lösen. Das kam mir aber damals recht kompliziert und schwierig vor, und deswegen habe immer mehr an dem, was da war, rumgebastelt und ein paar Sachen so gemacht, wie man sie eigentlich nicht machen sollte … mit dem Resultat, dass so ein Crash passiert, weil man eigentlich gar nicht mehr weiß, was wann und wo passiert.

Schluss mit lustig: Jetzt machen wir’s mal richtig

Also gut: Dann machen wir das eben so, wie’s eigentlich gehört. Mit einem eigenen Datenmodell, einer Tabellen-Anzeige dafür, und einem „Delegate“, was eine Klasse ist, die u. a. das genaue Zeichnen auf dem Bildschirm und das Editieren regelt. Man lernt ja dazu im Lauf der Zeit, und kennt sich irgendwann auch ein bisschen aus.

Die Daten so anzuzeigen war jetzt nicht das Problem. Aber das „ordentlich“, sinnvoll, sauber und vor allem netzwerkfähig zu machen stellte sich dann doch als ein riesen Fass heraus, das ich da aufgemacht habe. Auf dem Weg sind mir dann auch noch einige Fehler bzw. Unzulänglichkeiten der bisherigen Implementierung aufgefallen, die ich gleich mit behoben habe. Aber es musste viel geändert werden. Teilweise systemweit benutzte Datenstrukturen, Datenbankaufrufe etc. etc. – aber unterm Strich sollte die Anmeldeseite jetzt vernünftig und vor allem deutlich robuster implementiert sein.
Das vorher war in der Retrospektive ein Tanz auf dem Vulkan, wo das Funktionieren des Programms auch mal davon abhängig war, ob oder ob nicht zur richtigen Zeit ein bestimmter Anmeldelisteneintrag unter einem definierten Pixel auf dem Bildschirm zu finden war ;-)

Abgesehen davon ist jetzt einiges schöner, einfacher (auch codeseitig!) und vor allem benutzbarer – dazu aber mehr beim nächsten Release Announcement.

Beim ersten Code-Zustand, der komplett und funktionell aussah, spuckte diffstat für den Patch verglichen zu git master folgendes aus:

37 files changed, 1921 insertions(+), 1310 deletions(-)

Wir reden also von gut 3 200 Zeilen geändertem Code. Das ist schon eine Hausnummer. Zum Vergleich: Die erste C++-Version (0.7), veröffentlicht am 09.01.2017, hatte insgesamt 3 684 Zeilen Code. Das ganze Programm.

Was jetzt natürlich noch fehlt, ist ein intensives Testen – insbesondere der Netzwerkfunktionalität. Da sind garantiert noch Fehler drin, bzw. neue dazugekommen.

Aber alles in allem sollte das Programm jetzt viel sauberer, robuster, und auch besser zu benutzen sein. Irgendwann wird das schon noch was ;-)

19. Muckturnier der JU Leupoldsgrün am 14.04.

Plakat für das 19. Muckturnier der JU Leupoldsgrün am 14.04.2023

Endlich ist es wieder so weit: Nachdem das letzte Muckturnier der JU Leupoldsgrün am 28.02.2020 vermutlich auch eines der letzten Muckturniere überhaupt vor Corona war, geht es nun endlich wieder los, und zwar mit dem sage und schreibe 19. Muckturnier der JU Leupoldsgrün am 14.04.2023!

Für alle Details gibt es dieses Mal eine eigene Seite. Wir sehen uns dort :-)

Muckturnier 3.5.1

Es gibt ein neues Maintenance-Release: Version 3.5.1 behebt ein paar Fehler, die beim Erstellen von Backups aufgefallen sind. Vielen Dank an Matthias Döhla für den Bug-Report!

Im Einzelnen:

Alle Änderungen enthält wie immer der ChangeLog.

Jeder sollte auf die neue Version updaten! Viel Spaß damit :-)

11. Muckturnier der SPD Konradsreuth

Am Freitag fand das 11. Muckturnier der SPD Konradsreuth statt (bei dem ich mit Andrea Krauß mit dem 10. Platz – von 26 – einen Achtungserfolg für mich als Amateurmucker hingelegt habe ;-).

Erstmals wurde zum Auswerten das Muckturnier-Programm benutzt! Aber die SPD hat nach zehn Jahren kategorischer Ablehnung sämtlicher EDV für ihr Turnier wirklich einen Kaltstart von 0 auf 100 hingelegt: Es wurden auch gleich die hier unter Material bereitgestellten Spielstandzettel (generiert und vorausgefüllt mit dem Beispiel-Perl-Script!), die Auslosungszettel und auch die Tischnummern-Aufkleber benutzt! Zitat Turnierleiter Matthias Döhla: „Wieso soll ich mir denn die Arbeit machen, wenn sich da schon jemand anders Gedanken darüber gemacht hat?“ – exakt mein Reden!

Das freut mich als Entwickler und Bereitsteller der Materialen natürlich sehr. Und natürlich auch die überparteiliche Zusammenarbeit – das Muckturnier-Programm ist ja quasi ein Kind des Muckturniers der JU Leupoldsgrün ;-)

Willkommen im Team, ich freue mich schon aufs nächste Mal!