Op maandag 10 en dinsdag 11 oktober werken de senior java developers van MetaFactory niet voor opdrachtgevers.In vijf teams werkt MetaFactory non-stop twee dagen aan een reeks projecten om de MetaFactory Code Composer verder te ontwikkelen en te verbeteren. Volg deze liveblog en blijf op de hoogte van de ontwikkelingen. Start: maandagochtend om 10 uur!
Liveblog
Maandag 10 oktober 2022
Update 10:05 uur
Briefing: de tweedaagse hackathon start met formatie van de teams en verdeling van onderwerpen van een shortlist met 31 topics gericht om de drempel om met de Code Composer te werken te verlagen en de functionaliteiten te verbeteren. Check de t-shirts: klik op een afbeelding om te vergroten.

Uit de lijst met 31 mogelijke onderwerpen zijn vijf projecten gekozen. Developers werken afwisselend en naar keuze aan één of meer projecten.

Op twee na , David en Bruno werken voor opdrachtgevers, is MetaFactory compleet. Marco, Bart, Sandra, Olti, Kim, Olçay, Ralph, Marnix en Dmytro starten op met de technische voorbereiding van hun laptops. Groepsfoto en aan de slag!
Doel van de Hackathon
Marnix is vandaag vliegende keep en zorgt voor coördinatie: “Belangrijk voor de opstart is dat iedereen start met de juiste set-up en kan beginnen met ontwikkelen van de gekozen onderwerpen. De laatste Hackathon is alweer ruim twee jaar geleden en in de tussentijd is er veel gebeurd. Zo is er een Client Server versie van de Code Composer gemaakt. Deze is nog niet in bedrijf maar dat duurt niet lang meer. Met de komende aanpassingen wordt dat een bruikbare versie voor geïnteresseerden in onze tool, zoals nieuwe medewerkers of developers buiten MetaFactory. Het doel is om letterlijk met één klik van start te gaan met de Code Composer.”

Marnix (coördinatie) is tevreden met de opstart van de Hackathon. Hier praat hij Olti en Kim bij voor Project 3, Automatische integratie van handgeschreven code.
Marnix: “De IntelliJ plug-in (download) weet de Code Composer Client Server te vinden. Een gebruiker maakt zich kenbaar met zijn of haar LinkedIn- of Twitter-profiel en kan van start. De geste om met onze instapversie te experimenteren is een gratis handreiking om de Code Composer te leren kennen. Bij interesse is de volledige versie beschikbaar. Dat is de MetaFactory Code Composer tool waar onze developers mee werken. Geïnteresseerden kunnen zich bij ons melden.
Mede door deze nieuwe insteek is het Code Composer project veranderd en is er werk aan de winkel. Ik ben heel benieuwd wat we vandaag en morgen kunnen bereiken om stappen verder te komen.”
Vijf teams
Team 1, Ralph, Sandra
Traceren van recente actie; samenstelling van logs
Om de Code Composer goed te leren kennen, is het slim om te weten hoe acties verlopen terwijl de tool bezig is met code genereren. Hoe en waar zijn beslissingen en oplossingen tot stand gekomen? Dus: waarom heeft de Code Composer gedaan wat ie heeft gedaan; welke metadata is gebruikt, welk model, template, code-instructie? Et cetera. In feite een log, om terug te kunnen kijken en te begrijpen wat er is gebeurd. Dit is erg handig voor de Client Server versie, maar ook voor nieuwe medewerkers. Een soort handleiding met praktijkvoorbeelden, cases. Ralph en Sandra starten vandaag met het verzamelen van de juiste informatie.
Team 2, Marco, Olçay
Uitbreiding database functionaliteit met Blaze Persistence
De applicaties die MetaFactory maakt, maken veel gebruik van JPA (Jakarta Persistence, voorheen Java Persistence API) en native database functionaliteit. Met Blaze Persistence worden de native database functies benaderbaar via JPA. Marco en Olçay zijn de database experts. Dit project is er om de kloof tussen de Java developer en de database developer kleiner te maken. Veel Java devs maken te weinig gebruik van de kracht van een database. Er is binnen ons vakgebied ook best veel gebrek aan kennis. Dit project is een goed voorbeeld om de verschillende disciplines bij elkaar te brengen en te laten samenwerken.
Team 3, Marnix, Olti, Kim
Automatische integratie van handgeschreven code
De Code Composer is sterk in het omgaan met handgeschreven code. Dit project gaat ervoor zorgen dat de tool zelf gaat herkennen welke code handgeschreven is en zorgt automatisch dat dat deel blijft bestaan. Handmatige code stoppen wij in hooks. Het doel is: automatisch detecteren en er zo mee omgaan dat deze informatie bewaard blijft.
Team 4, Dmytro
Code Composer in Docker
Docker is een ‘container technology’. Het doel is om de instaptijd om met de Code Composer te werken terug te brengen van 1 à 2 dagen naar een uurtje. Dit is handig voor de eerste kennismaking, bijvoorbeeld voor ontwikkelaars die met de tool willen spelen of nieuwe medewerkers tijdens hun onboarding. In feite maak je een computerprogramma om het bestandssysteem van de computer te virtualiseren. Dat kan zowel voor Windows als voor Linux. David en (ex-MetaFactory medewerker) Friso kregen tijdens de vorige hackathon in 2020 de Code Composer werkend in Linux. De volgende stap, een volledig werkende ontwikkelomgeving met een GUI (Graphical User Interface) is een virtualisatie (een ander besturingssysteem virtueel op je laptop draaien) en is nog niet af. Gaat het Dmytro lukken? Tuurlijk!
Team 5, Bart
Create model from data source
Kort en goed: database schema (algemene tool) naar Code Composer model. Wait for it.

Team 2, Marco en Olçay gaan aan de slag met het project om de kloof tussen de Java developer en de database developer te verkleinen. (foto: Kim)
Update 13:15 uur
Lunch!
Update 14:55 uur
Team 1 – Traceren van recente actie; samenstelling van logs
Sandra: “We starten met het verzamelen van de juiste informatie tijdens het proces van file-generatie. Die gaan we buggen in de Code Composer om te zien waar we gaan ingrijpen en hoe.”
Ralph: “Tijdens het genereren kijken we mee en leggen vast welke code-instructie, snippet en metadata zijn gebruikt. Als de run klaar is, staat de opgeslagen data in de database. Via een query kom je achter de relevante informatie.”

Sandra: “Het is handig om bij files die gegenereerd worden te weten welke code instructies daar nu eigenlijk verantwoordelijk voor zijn. Welke meta-data zorgt ervoor dat deze file tot stand komt zoals ie nu is? Welke snippet is er gebruikt?”
Ralph: “Wanneer er een file gegenereerd wordt, kijken we: waar gaan de files door, waar gaat de metadata door en waar kunnen we informatie vandaan vissen om op te slaan zodat we die later kunnen gebruiken? We analyseren de weg naar een generated file: welke input heeft nu geleidt tot deze output? Als je aanpassingen wilt maken, bijvoorbeeld nieuwe objecten toevoegen aan het model van je project, dan wil je weten welke metadata je nodig hebt om er voor te zorgen dat er een bepaald type file gegenereerd wordt.”
Sandra: “Vandaag gaan we die informatie extraheren. Daarna slaan we het op. Vervolgens presenteren we het aan de hand van queries. Ik verwacht dat we dat vandaag en morgen voor elkaar krijgen. Dat is dan voor 1 item he? Als we daar de hele route voor kunnen aanleggen, is dat een goed begin om het uit te bouwen voor meerdere items.”
Update 15:59 uur
Intermezzo: Marco presenteert een pubquiz.
De winnaars? Sandra, Ralph en Dmytro natuurlijk…
Update 16:45 uur
Team 2 – Uitbreiding database functionaliteit met Blaze Persistence
Olçay is even buiten de deur. Marco: “Voorheen schreef je met JDBC een query als je in Java gegevens uit de database wilde hebben. Frameworks als Hibernate en JPA maakte het leven van de Java developer makkelijker. Het scheelde specifieke kennis van SQL. Naast dat de kennis vaak ontbreekt, is ook de omzetting door de genoemde tools gelimiteerd. Als je geavanceerde queries wilt maken is het of lastig of onmogelijk. Blaze Persistence biedt uitkomst.”

Marco: “Geavanceerde queries zijn bijvoorbeeld de toepassing van Window Functions (CTE’s) of recursive queries. Of een union. Dat is een combinatie van twee queries. Dat lukt niet in Hibernate of JPA…”
Marco: “Met Blaze Persistence lukt het wel om geavanceerdere queries te maken. Vanuit Use Cases is dat nuttig. Dit gaat een stapje verder dan de gemiddelde gereedschapstas van een developer. Als je specifieke schermen maakt, vanuit de front-end gekoppeld aan een database, en data uit verschillende entiteiten haalt en als een resultaat terug wil geven, is dit project een goede oplossing. We zijn best al ver en werken fijn samen.
Voor deze hackathon willen we het inzetten voor de filters die we hebben op onze list-pagina’s. De tool zetten we in de Code Composer maar eerst gaan we kijken hoe we de instructie voor de query met de hand kunnen schrijven. Hoe performed de query en lukt het om Blaze Persistence als library toe te voegen? Het laatste stapje voor vandaag is om handmatig in Java en met Blaze Persistence een simpele variant van die query te schrijven. Morgen leveren we een prototype op: zo ziet het straatje er uit.”
Update 18:16 uur
De bezorg-Thai is te vroeg… Boeien!

De keuze is reuze, net als de lekkere trek. Analist en documentalist Niels (met rood vest) blijft ook nog even. Even een uurtje pauze en bijkletsen.
Update 19:35 uur
Team 3 – Automatische integratie van handgeschreven code
Marnix en Olti zitten in overleg. Kim mag het verhaal over de automatische hooks in de Code Composer uitleggen: “Een custom methode moeten we nu omzetten in code-instructies. Dat kan minder omslachtig. Er is een verschil tussen automatische en handmatig gegenereerde code. Dit project gaat over detectie en isolatie van het handmatige deel code. Uitschrijven naar bestanden is de laatste stap voor het genereren van code. Er vindt vooraf een check plaats, bijvoorbeeld om te kijken of een bestand wel bestaat. Dit is inmiddels uitgebreid met logica: een trigger aan het begin van een aangewezen file. Hiermee kun je besluiten om die file wel of niet uit te schrijven.
Ik geef een voorbeeld van een voordeel van deze methode. Een component voor de front-end krijgt informatie van een template. Je krijgt vaak te maken met een afwijkende situatie van wat wij willen genereren, bijvoorbeeld voor een gewenste lay-out. Nu moeten er in de code-instructies kunstgrepen uitgehaald worden om een custom volgorde van invoervelden te realiseren. Dus extra werk om te vermijden dat een file niet meer gegenereerd wordt. Door een eenvoudige trigger (hook) in te voegen geef je eenvoudig een commando om een gewenst deel niet meer te genereren. Klaar.”

Voorschot op de tweede hackathon-dag, dinsdag: Kim stapt van zijn racefiets, Olti heeft pepernoten gepakt en Marnix praat Team 3 bij: hackathon Dag 2 is begonnen!
Kim: “Deze methode scheelt veel gedoe en gezoek. Wat we morgenochtend gaan doen: in Java klasses heb je methoden die gegenereerd worden. Als je handmatig methodes toevoegt, met custom business logica die niet gegenereerd wordt, is het belangrijk dat die methodes blijven bestaan na het opnieuw genereren van die file. Niet door de code instructies aan te passen maar vanwege de gemaakte hook.
We zijn al een heel eind op weg. De hooks werken al op file-niveau. Dinsdag hopen we dat we methodes kunnen behouden die handmatig zijn toegevoegd aan in Java en typescript gegenereerde files. Wat we nu hebben bereikt, gaan we al toepassen in de nieuwe productieversie. Stilletjes hoop ik dat we hooks niet alleen op methode-niveau kunnen toepassen maar ook op delen van een methode.”
Een deel van de hackers gaat door tot half twaalf. Morgen verder.
Einde dag 1, lees dag 2 van de liveblog verder: dinsdag 11 oktober 2022