De MetaFactory hackathon is een jaarlijkse traditie die in 2023 op maandag 11 en dinsdag 12 september viel. Op deze pagina lees je het verslag van Dag 2.
Bekijk het verslag van Dag 1 hier.
Klik op de foto’s om te vergroten.

> Edward en Marco aan de slag met automatisch testen voor de Code Composer
> Een zee van Post-its: wat heeft dit te betekenen Ralph?
Start Dag 2: dinsdag 12 september 2022
Update 9:30 – 11:00 uur
Inloop en koffie. De opstart verloopt vandaag iets trager dan gisteren. Maandagavond werkte een deel van de developers door tot in de kleine uurtjes. De muziekinstallatie blijft tot het begin van de middag uit: het is lekker rustig en deze ochtend staat in het teken van overleg en discussie. Na elf uur komt Aura de stoelmasseur binnen. Lekker!
Routine met de Code Composer
Het geldt voor bijna alle teams: de jaarlijkse hackathon is er om in de Code Composer te werken, en niet alleen mee… Dus om vertrouwd te blijven met de bron is een jaarlijkse kennismaking met de ‘internals’ geen overbodige luxe. Vaker zou fijn zijn, maar er moet ook geld verdient worden.
Die jaarlijkse kennismaking betekent voor elke installatie dat eerst alle updates moeten worden doorgevoerd. Ontwikkeling (verbetering) aan de Code Composer gaat namelijk continu door. Marnix brengt veranderingen aan op de development branche en Kim en Ralph op de feature branch.
Die nodige updates doorvoeren is voor iedere laptop even een werkje. Iedereen was daar maandag enkelen uren zoet mee. Team 5 zelfs de gehele eerste dag. Pas daarna kan er door de developers weer vanaf hun eigen laptop aan de Code Composer zelf worden gewerkt. De jaarlijkse hackathon is er dus ook om routine te houden met deze belangrijkste tool van MetaFactory.

> Bart en Bruno bespreken de status van hun project: gaat een presentatie vanmiddag lukken?
> Dmytro dieselt door en David is blij dat alle updates nu zijn uitgevoerd
Updates
Team 1: Kim, Sandra en Ralph
Traceerbaarheid van Java code binnen de Code Composer (Java Code Tracing Flow)
Sandra: “Gisteren startten we ons hackathon project met het up-to-date brengen van de Code Composer. We gaan immers verder op een bestaande branch, zoals die vorig jaar werd achtergelaten, en inmiddels zijn er updates. Als we de Code Composer inzetten in een klantproject kunnen we de ‘Magic Button’ gebruiken, om razendsnel de configuratie en de plug-ins op te zetten. Als we echt gaan ontwikkelen in de tool zelf, moeten eerst alle noodzakelijke updates worden uitgevoerd. Daar zijn we nu bijna mee klaar want dat is best een werkje.
Waar we nu tegenaan lopen: Kim zette een Graph Database op, zoals je op het whiteboard ziet in Arcs and Nodes. De data waar wij mee bezig zijn, leent zich er niet voor om in tabellen op te slaan. We zijn nu druk om een connectie op te zetten en de database op te hijsen in de Docker container. Ralph is druk met het toevoegen van timeStamps. Vorig jaar hebben we de entiteiten opgezet en die tweaken we nu zodat het goed aansluit bij het nieuwe frameworks en we bijvoorbeeld een standaard query kunnen laten werken.
Kim zet de connecties op in de Docker container. De configuratie werkt nog niet helemaal, maar we willen wel iets laten zien vanmiddag. We hebben goede hoop.”
Team 2: Marco en Edward
Automatiseren van testen
Edward: “Wij zijn druk met het leggen van een basis om cyberscripts aan te maken voor als we de Code Composer draaien.”
Marco: “We werken in de urenadministratie en hebben met de hand enkele acties vastgelegd en vervolgens gegeneraliseerd in een code snippet zodat we in de test voor elke entiteit naar de juiste overzichtspagina kunnen navigeren. Dat breiden we nu uit. We zijn nu aan het generaliseren dat we code instructies kunnen schrijven voor alle entiteiten die we hebben. Die code gaan we gebruiken voor het automatisch testen.
Als je op het scherm van Edward kijkt terwijl het script loopt, zie je dat er automatisch over een pagina wordt genavigeerd en op knoppen wordt gedrukt. Wat ik aangeef, wordt in de test dus doorlopen. Edward heeft de kennis om dit met de hand te schrijven en ik generaliseer dit door er code instructies voor te maken. Cool!
We hebben al voor elkaar dat we voor elke entiteit naar de juiste pagina kunnen navigeren, en gaan nu door met uitvinden welke velden er zijn. Want dat is voor elke entiteit anders. Einde dag klaar!”
Edward: “Ja, er is voor de presentatie vanmiddag een fraaie demo af. Met minimale aanpassingen is dit straks toepasbaar in al de projecten die wij uitvoeren met de Code Composer.”
Team 3: Bart en Bruno
Code Composer Java code: Optionals en Fluent Setters
Bart: “Het leek gisteren minder eenvoudig dan we in eerste instantie dachten. We willen informatie uit het model terecht krijgen op de plek waar de classes worden gerenderd. Het idee is dat we met een property kunnen sturen of we wel of geen optionals willen. Een optional is eigenlijk een Black Box: je krijgt een uitkomst en die kan nul zijn als het veld verplicht is. Maar dat moet je wel van tevoren weten. Zie Dag 1 voor meer achtergrond over optionals.
Team 3 wil ontwikkelaars een handvat geven om optionals te gebruiken voor de niet-verplichte velden, en ik regel in mijn model of een veld verplicht is en wat er uit komt. Dan weet een ontwikkelaar: ik krijg geen optional maar gewoon de waarde, en kan vervolgens daar op programmeren. Je weet dan over zo’n veld: zit er wel of geen waarde in. Erg handig.
Als je de nul-checks vergeet en iets kan toch nul zijn, en je hebt er tegenaan geprogrammeerd en het is ook nul, dan heb je een error. Als ons project lukt, kun je dit ondervangen.”
Team 4: Dmytro
Artificial Intelligence: ChatGPT instructions for software developers
Dmytro geeft context: “Wij werken hier allemaal met de MetaFactory Code Composer tool. Die gebruikt een enkele file om het hele systeem te genereren. We noemen dit Model XML. Dit bevat omschrijvingen van de entities en de attributen. Stel je hebt een boekenwinkel en je verkoopt boeken, een entity is dan een boek, een persoon (gebruiker), een aankoop. Deze worden beschreven in het Model XML.
Mijn project gaat over het genereren van een Model XML gebaseerd op de mondelinge beschrijving van het systeem. Bijvoorbeeld: het systeem heeft boeken, de admin user kan boeken toevoegen, met een verschijningsdatum en een auteur. Gebruikers kunnen de boeken bekijken, en een account aanmaken. Dit is een voorbeeld van een prompt voor bijvoorbeeld ChatGPT. Ik gebruik nu een Telegram AI Chatbot om mijn code uit te proberen. Puur voor prototyping.
Op een later moment schrijf ik het hele systeem uit met een call naar ChatGPT. Als ik een complete beschrijving van het systeem heb, zal ChatGPT mij als output de data structure geven die ik kan gebruiken om het Model XML te genereren. Vervolgens kan de MetaFactory Code Composer de gehele applicatie genereren. Hoe gaaf is dat?
Idealiter dit voorbeeld van een optimale situatie: een persoon wil een website, gaat naar ChatGPT, of een vergelijkbare AI tool, geeft een beschrijving van het systeem door en vervolgens ontvangen ze de code om de applicatie mee te bouwen.
Gisteren lukte het me om een gestructureerde reactie van ChatGPT te verkrijgen. Vandaag probeer ik een gegarandeerde uitkomst te realiseren om een Model XML mee te genereren. Er zijn verschillende manieren om dit te benaderen en ik laat vanmiddag in mijn presentatie zien hoe ver ik ben.”
Team 5: David en Olçay
Database
Vanwege detachering is de MetaFactory Code Composer op de laptop van David bijna twee jaar niet ge-update. De juiste versie van Java (17) en een reeks aan updates kostte David en Olçay zomaar een hele dag.
Olçay: “Dit project gaan we zeker niet afkrijgen, want eigenlijk lukte het pas na de koffie van vanochtend om goed en wel op te starten. Het project ‘Introduce JHipster 8 Spring Exception features’ is nu in grote lijnen opgezet. De details om dit vandaag ook af te krijgen, ging ons niet lukken. In overleg met Marco en Marnix is besloten om te switchen naar het project in Blaze Persistence, ‘Facetted search’.”
David: “Het hielp ook niet echt mee dat ik ruim anderhalf jaar niet met de Code Composer heb gewerkt. Dat was immers niet nodig voor het project van de opdrachtgever waar ik gedetacheerd ben.”

15:15 Bingo!
Ook een traditie: Marco verzorgt de bingo. Eigenlijk is iedereen een winnaar, want het gaat om de afleiding en een excuus voor een biertje.
Presentaties
’s Middags vanaf 17:00 uur start de presentatie van de teams. Hieronder een kort overzicht van de resultaten in woord en beeld. <invulling volgt >

Team 1: Kim, Sandra en Ralph
Traceerbaarheid van Java code binnen de Code Composer (Java Code Tracing Flow)
<korte uitleg doel, resultaat, bruikbaarheid>
<screenshot of illustratie>

Team 2: Marco en Edward
Automatiseren van testen
<korte uitleg doel, resultaat, bruikbaarheid>
<screenshot of illustratie>
Team 3: Bart en Bruno
Code Composer Java code: Optionals en Fluent Setters
<korte uitleg doel, resultaat, bruikbaarheid>
<screenshot of illustratie>
Team 4: Dmytro
Artificial Intelligence: ChatGPT instructions for software developers
<korte uitleg doel, resultaat, bruikbaarheid>
<screenshot of illustratie>

Team 5: David en Olçay
Database
<korte uitleg doel, resultaat, bruikbaarheid>
<screenshot of illustratie>