Skip to main content

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.

> De hackathon pet: nu al een collectors item
> 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.

> Tony en Marnix nemen het programma voor vandaag door
> 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.”

> Kim zet een Graph Database op, zoals je op het whiteboard ziet, in Arcs and Nodes

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.”

> Aura masseert elke developer; hier is Marco aan de beurt

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.”

> Bruno tijdens de bingo: you really got your card full?

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.”

> Dmytro hackt AI met een toepassing van ChatGPT voor developers

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.”

> David en Olçay: “Initially we started with Spring and a JHipster upgrade, but this morning we switched to the Blaze project.”

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.

> Traditiegetrouw wint Bart
> Edward vertrouwt het niet

Presentaties

’s Middags vanaf 17:00 uur starten de presentaties van de teams. Hieronder een kort overzicht van de resultaten in woord en beeld.

> Pieter (l) is geen developer maar de salesman van MetaFactory. Hij schuift aan om de verbluffende resultaten van twee dagen intensieve ontwikkeling aan te horen. Tony zorgt voor de Bruine Fruitschaal.

Team 1: Kim, Sandra en Ralph
Traceerbaarheid van Java code binnen de Code Composer (Java Code Tracing Flow)

Het is gelukt om een eerste opzet van een ‘graven database’ te maken en dit zichtbaar te maken. Om dit in de praktijk te gebruiken, is nog flink wat werk nodig. In een volgende hackathon ontwikkelen we dit verder.

> Voor team 1 voert Ralph het woord; als docent weet hij als geen ander dit compliceerde project duidelijk en rustig uit te leggen.

De elementen die tijdens het proces zijn verwerkt, worden getoond in het screenshot van de Code Composer trace graph.

  • Rood: de Code Composer zelf
  • Groen: de project file die als input diende voor de Code Composer
  • Paars: een snippet met daarin een stukje code die de Code Composer in het eindresultaat plaatst
  • Roze: een call uitgevoerd door de Code Composer om meta data op te halen uit een model element
  • Blauw: model elementen die een beschrijving vormen van de te bouwen applicatie

In de Neo4J omgeving kunnen we met de muis over een graph node hoveren en van elk element de details zien.

Team 2: Marco en Edward
Automatiseren van testen

Geautomatiseerd testen met Cypress en het onderbrengen in code instructies van deze testen wordt nu rap verder ontwikkeld. Het is de bedoeling om bij een nieuw klantproject geautomatiseerd testen van begin af aan mee te nemen.

> Edward demonstreert hier de resultaten van de automatische test op de urenadministratie

Team 3: Bart en Bruno
Code Composer Java code: Optionals en Fluent Setters

Dit onderwerp is doorontwikkeld en zit vanaf week 45/2023 in release 4.1.0 van de Code Composer, in tandem met release 3.2.0 van de plugin.

> Bart in zijn element: live code generatie via de Code Composer

Team 4: Dmytro
Artificial Intelligence: ChatGPT instructions for software developers

Er is een bruikbaar systeem ontwikkeld dat AI gebruikt om een menselijke tekstbeschrijving van een systeem om te zetten in een gestructureerd beschrijvingsformaat dat compatibel is met Code Composer.

> Dmytro imponeert met een heldere uitleg om met effectieve prompts ChatGPT aan te sturen voor kwalitatieve output voor applicatie codes

Team 5: David en Olçay
Database

Wegens de talrijke technische hindernissen waarmee ze werden geconfronteerd, is helaas weinig vooruitgang geboekt. Er zijn geen verdere updates.

> De projecten van David en Olçay kwamen niet helemaal van de grond: anderhalf jaar achterstallige updates was de rem op enige progressie; volgende keer beter