Muckturnier

News 26.04.2023–02.01.2024

Muckturnier 3.6.0 out now!

Es ist ganz schön lang her, dass das letzte Release (bei dem es nicht nur um Bugfixes ging) am 03.08.2022 veröffentlicht wurde. Seither hat sich einiges getan, viel unter der Haube, aber es gibt auch einige direkt sichtbaren Änderungen.

Auf jeden Fall ist es jetzt (endlich!) so weit: Muckturnier 3.6.0 ist fertig, und die Muckturnier-Saison 2024 kann losgehen :-) Ein Überblick über die wichtigesten Neuerungen:

Anmeldeseite überarbeitet

Wie bereits mehrfach kürzlich berichtet ([1], [2]) haben die Internas der Anmeldeseite (und auch gleich noch ein paar andere interne Strukturen) eine gründliche Überarbeitung bekommen. Abgesehen von Änderungen unter der Haube:

Hervorhebung der momentan ausgewählten Zeile

Eine der sichtbarsten Neuerungen ist die Hervorhebung der gerade bearbeiteten bzw. ausgewählten Zeile in der Anmeldeliste:

Eine ausgewählte Zeile auf der Anmeldeseite

Der Rahmen bleibt auch nach einer Bearbeitung erhalten (natürlich nur, wenn der Eintrag nicht gelöscht wurde). Weiterhin wird der ausgewählte Eintrag jetzt auch dann angezeigt, wenn er durch eine Bearbeitung jetzt eigentlich ausgeblendet wäre.

Verbesserte Suche und einfachere Handhabung von Voranmeldungen

Es kann jetzt bei der Anmeldung direkt bei der Eingabe der Namen bzw. des Namens die Anmeldeliste durchsucht werden. Das ist insbesondere dann praktisch, wenn es Voranmeldungen gibt: Die Eingabe wird dann erst zum Suchen einer evtl. vorhandenen Voranmeldung benutzt, und wenn es keine passende gibt, gleich auch zum Anmelden.

Diese Funktion ist standardmäßig aktiviert und kann mit dem neuen „Beim Eingeben die Anmeldeliste durchsuchen“-Knopf (de)aktiviert werden:

Der „Beim Eingeben die Anmeldeliste durchsuchen“-Knopf

Passend dazu gibt es jetzt die Funktion „Automatische Groß- und Kleinschreibung“:

Der Automatische Groß- und Kleinschreibung“-Knopf

Wenn diese Funktion aktiviert ist, wird die Groß- und Kleinschreibung der eingegebenen Namen automatisch korrigiert. Damit ist es dann kein Problem, wenn man nach einer Voranmeldung nur mit Kleinbuchstaben sucht, aber keine findet – und die Eingabe direkt zum Anmelden nutzt.

Die Funktion macht nicht einfach „doof“ den ersten Buchstaben jedes Wortes groß, sondern berücksichtigt diverse Namensbestandteile. Beispiel: Die Eingabe „karl-theodor von und zu guttenberg / valérie giscard d'estaing“ würde damit – korrekt – zu „Karl-Theodor von und zu Guttenberg / Valérie Giscard d'Estaing“ korrigiert werden.

Sonstige Änderungen an der Anmeldeseite

Turnier-Zeitplan

Es gibt jetzt eine neue Extra-Seite: Den Turnier-Zeitplan. Damit kann man den Ablauf des Turniers planen, und sieht jederzeit, wie man in der Zeit liegt.

So sieht das Ganze aus:

Die neue Turnier-Zeitplan-Seite

In der „Aktuelle Zeiten“-Box sieht man auf einen Blick alle relevanten Zeiten: Wie lang die Runde schon läuft, wie lang sie noch dauert, wann die nächste beginnt etc. Eine Stoppuhr, wie es sie auch bisher gab, kann automatisch beim Starten einer Runde geöffnet werden und läuft dann synchron mit der „Aktuelle Zeiten“-Anzeige.

Strafpunkte-Anzeige

Ein weiteres optionales Feature sind die „Strafpunkte“. Es handelt sich hier nur um eine Anzeige – man kann damit machen, was man will (z. B. sie auch einfach ignorieren ;-). Die Idee ist folgende:

Wenn man mit einer Zeitbegrenzung spielt, dann kommt es immer wieder vor, dass sich ein Paar beschwert, es würde jetzt schon 10 Minuten auf die Gegner warten und verliert Kart-Zeit. Die Strafpunkte-Anzeige berechnet, wie viele Punkte bzw. Bobbl seit dem Rundenstart schon gespielt sein müssten, wenn man sie gleichmäßig auf die ganze Zeit verteilt.

Damit hätte man dann theoretisch die Möglichkeit, dass man dem „unschuldigen“ Paar bei notorisch trödelnden Gegnern Punkte gutschreibt, wenn es für diesen Tisch dann tatsächlich losgeht. Quasi als Disziplinierungsmaßnahme. Aber natürlich wie gesagt rein optional.

Info-Display

Außerdem gibt es die Möglichkeit, ein Info-Display anzuzeigen (auf einem zweiten Bildschirm, Beamer etc.), wo gut sichtbar die momentan laufende Runde, die verbleibende Zeit und der Start der nächsten Runde angezeigt werden.

Das sieht dann z. B. so aus:

Die neue Info-Display-Anzeige

Die Optik (Farben, Ränder, Größe, Aufteilung etc.) kann umfänglich individualisiert werden (über den Menü-Knopf links oben).

Fehlerkorrekturen und kleinere Änderungen

Abgesehen davon gibt es eine ganze Reihe an Fehlerkorrekturen und kleineren Änderungen (vgl. auch den ChangeLog für Muckturnier 3.6.0):

Viel Spaß mit Muckturnier 3.6.0 :-)

Muckturnier auf dem Hofer Volksfest – Vielleicht nächstes Jahr

Vor einiger Zeit habe ich ja Zweifel angekündigt, ob es mit dem Muckturnier auf dem Hofer Volksfest noch einmal was werden wird. Zwar tatsächlich etwas unerwartet, aber sehr erfreulich: Der neue Festwirt hat sich tatsächlich bei mir gemeldet und würde gern wieder ein Muckturnier machen!

Die Durchführung an sich wäre auch kein Problem. Was sich aber tatsächlich als Problem herausgestellt hat: Das Besorgen von vernünftigen Preisen. Die letzten Male gab es für den 1. Platz z. B. jeweils einen großen Smart-TV. Da braucht man nicht mit einem Meter oder einem Flaschenöffner anfangen ;-) Und wie sich herausgestellt hat, war leider der Vorlauf, um die Sponsoren zu aktivieren und die Preise zu besorgen doch etwas zu kurz. Und alles allein übers Startgeld zu bezahlen würde hier nur den Preis unnötig in die Höhe treiben.

Heißt also: 2023 wird es leider noch nicht wieder ein Muckturnier auf dem Hofer Volksfest geben. Aber wenn es gut läuft, dann nächstes Jahr, also 2024. Von langer Hand geplant, und ohne Zeitprobleme. Wäre jedenfalls super, ich würde mich sehr freuen, wenn ich mit meinem Team eine Neuauflage des vermutlich größten Muckturniers überhaupt abhalten könnte! Zumindest hat Herr Böckl definitiv Interesse daran geäußert, also gibt es Hoffnung.

Ich hoffe, man sieht sich auf dem Muckturnier auf dem Hofer Volksfest 2024 :-)

Neues Datenmodell: Stresstest bestanden

Wie kürzlich angekündigt habe ich mich endlich darüber gemacht, das interne Datenmodell für die Anmeldeseite zu überarbeiten und vernünftig zu implementieren. Und wenn man schon dabei ist, kann man das auch gleich für die Markierungen und die Rangliste machen. Das Ergebnis ist deutlich saubererer Code, mit dem es jetzt hoffentlich keine sporadischen Crashes mehr beim Netzwerkeinsatz gibt.

Augenscheinlich hat sich gar nicht so viel getan, aber unter der Haube dafür um so mehr: Der Patch zu Version 3.5.1 umfasst Stand jetzt knapp 6 500 geänderte (neue, gelöschte und editierte) Zeilen Code. So tiefgreifende Änderungen wollen natürlich intensiv getestet werden.

Stresstest

Zum Testen bietet sich, natürlich als Trockenübung, eine Anmeldung und Auslosung in der Größenordung Hofer Volksfest an. Für das Test-Setup habe ich die gleiche Ausstattung gewählt, die wir damals hatten: Zwei Notebooks für je eine Anmeldungsstelle und eines für die Auslosung. Es gibt eine Voranmeldungsliste (mit der Markierung „Vorangemeldet“). Wenn sich die Paare anmelden, werden sie als „Auslosung fehlt“ markiert. Allein gekommene Spieler werden ebenfalls angemeldet (und automatisch als „Allein da“ markiert). Sobald es geht (zwei allein gekommene Spieler angemeldet), werden aus den allein gekommenen Spielern Paare gebildet. Der dritte Rechner kümmert sich nur um die Auslosung (also um die als „Auslosung fehlt“ markierten Paare).

Ich habe eine Voranmeldungsliste mit 92 Paaren erstellt, die teilweise falsch geschrieben waren, teilweise anders als vorangemeldet „gekommen“ sind und teilweise auch gar nicht. Jeder der beiden Anmeldungsrechner bekam eine Liste mit 60 Paaren und auch allein gekommenen Spielern, die sich an der jeweiligen Stelle anmelden wollten. Der dritte Rechner loste, nach der „Fenster“-Vergabe mit +4 Tischen, die Paare zu.

Das Ergebnis: Alles hat 1A funktioniert. Erwartungsgemäß gab es, natürlich auch bedingt durch die viel höhere Eingabefrequenz (unter Realbedingungen würde es ja nicht so schnell gehen), ein paar Netzwerkkollisionen. Sprich eine Handvoll Änderungen mussten erneut angefragt werden, weil sie der Server aufgrund eines zwischenzeitlich geänderten Datenbestands abgelehnt hatte. Wie gesagt: Das war zu erwarten und kann systembedingt in seltenen Fällen passieren. Macht ja auch nichts, man muss ja einfach nur die Änderung nochmal losschicken. Aber was nicht passiert ist: Ein Crash. Es ist alles stabil gelaufen. Und zwar genau so, wie es laufen sollte.

Nebenbei noch anzumerken ist: Das Ergebnis der schon ordentlich zufälligen „Fenster“-Auslosung mit +4 Tischen war – ohne manuelles Eingreifen! – dass bei den am Schluss 112 angemeldeten Paaren an 56 Tischen nur das Umsetzen von zwei Paaren erforderlich war. Danach war die Auslosung fortlaufend und lückenlos. Das System ist also wirklich für den Realeinsatz geeignet, vor allem für große Turniere – denn zwei oder drei Paare kann man in zwei Minuten an einen anderen Tisch beodern. Und die 100 anderen sitzen schon da, wo sie hingehören.

Muckturnier 3.6.0 t. b. a.

Ein paar neue Features gibt es ja auch noch, und vor allem einen ganzen Haufen Fehlerkorrekturen (es ist immer wieder erstaunlich, was man alles findet ;-). Alles das wird demnächst als Muckturnier 3.6.0 veröffentlicht. Vielleicht direkt nach dem Muckturnier des ASV Leupoldsgrün, das würde ich dann noch als öffentlichen Betatest mitnehmen :-)

Bald ist es jedenfalls so weit!

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 ;-)