Ik moet ze nog steken! Dikdikdik v3.2
By penningmeester
Jawel, er is alweer een nieuwe versie van dikdikdik, onze score app voor het wiezen, live gegaan. Ik heb quasi heel de read side van de toepassing herschreven, en ik hoop dat u er niets van merkt. Maar voor de liefhebbers zal ik in deze blog-post uitleggen wat er achterliggend is aangepast. Onder het motto: het mag ook al eens wat technischer zijn.
U herinnert zich mogelijks dat ik in november, bij de release van versie 3.0 ben overgeschakeld naar nieuwe technologie om de frontend te regelen. De frontend is hetgeen u ziet in uw browser.
Bij die omschakeling, heb ik wel wat gefoefeld. Als uw scherm op uw browser/smartphone wordt ververst, dan worden de getoonde gegevens bijgewerkt, op basis van informatie die van de backend komt. Maar typisch werden de frontend al bijgewerkt vooraleer alle informatie in de backend up-to-date was, en om dat te vermijden had ik dus iets gedaan dat niet volgens de regels van de kunst was.
Dikdikdik werkt met een event bus. Op die event bus worden alle events (gebeurtenissen) van alle kaarttafels gepubliceerd. Daar passeert dus informatie à la ‘aan tafel 1 werd ronde pas aangekondigd’, ‘aan tafel 2 speelde speler x abondance erdoor’, ‘aan tafel 1 werd speler n de nieuwe deler’, ‘aan tafel 1 kreeg speler x 5 fr/man van spelers y, z en q’, enzovoort.
Op basis van wat er op die event bus passeert, gaan de read models zichzelf bijwerken. Het blad met scores, is een read model. Maar ook bijvoorbeeld het lijstje met spelers die effectief meespelen, en kunnen bieden (want soms zijn er ook pissers aan de tafel, en die spelen dan even niet mee). Ik had het zo gemaakt dat, als er bijvoorbeeld zo’n event ‘aan tafel 1 kreeg speler x 5 fr/man van spelers y, z en q’ passeerde, er nieuwe informatie uit de read models naar de frontend gestuurd werd.
Om kort te zijn: die nieuwe informatie die naar de frontend gestuurd werd, was niet nieuw. Het was nog de oude informatie, omdat het versturen gebeurde vooraleer het read model was bijgewerkt op basis van het event.
Ik had daar toenertijd gauw rondgewerkt door een soort van ‘fake events’ op de event bus te publiceren. Die events zeiden ‘aan tafel x hebben ze gevraagd om de frontend bij te werken’. Als er dan een event ‘speler x verdient 5 fr/man’ werd uitgezonden, werd dat gevolgd door ‘er werd gevraagd de frontend bij te werken’, het laatste event triggerde de update van de frontend, en dat werkte. Maar mooi is het niet.
Nu is dat dus gefixt. Als er nu een read model geüpdatet is ten gevolge van een event, dan gaat dat read model zelf laten weten: ‘hey, ik heb nieuwe informatie’, en op dat moment wordt die nieuwe informatie gepubliceerd voor de frontend. Geen ‘er werd gevraagd de frontend bij te werken’ meer; een propere oplossing.
Ik ben blij dat dit nu in orde is. Ik hoop niet te veel nieuwe bugs geïntroduceerd te hebben, want ik heb de read models wel wat herwerkt; mocht u toch op nieuwe fouten stoten, laat het weten.
Ik zal nog even vermelden wat u in de toekomst nog kunt verwachten van de score app:
Ik plan binnenkort een bugfix release, waarin ik hopelijk een probleem kan oplossen met een vertalingsfout bij het loggen van een abondance (#213). (Update: Deze bugfix is gedeployd donderdagavond 13 januari.)
En dan wordt het tijd om aan versie 4 te denken, waarbij ik effectief php 8.1 wil gebruiken (#181), en misschien ga ik eindelijk eens werken aan een deftige undo (#81).
Rest mij nog enkel u veel kaartplezier te wensen. Onze scoretoepassing is te vinden op