Strategieweekend / Hackathon – 2018

Een paar dagen even lekker (ver) weg in Zuid-Limburg, prachtig weer, ergens bovenop een berg, met een stunning view. Ideale ingrediënten voor een paar dagen met de mannen ouderwets offline.

Op een adembenemende locatie. Bij Hofleverancier De Smockelaer. Zouden de royals hier zelf eens gelogeerd hebben?

Okay, voordat het ons naar het hoofd stijgt, het is ook de plek waar opnames zijn gemaakt voor Boer zoekt Vrouw. Toegegeven, daar hebben we (stiekem) nét iets meer mee 😉

Het weekendje weg stond in het teken van vermaak, lering en focus.

  • Vermaak: met elkaar een paar dagen even eruit.
  • Lering: als vakgenoten aan de slag met nieuwe technologieën in de vorm van een hackathon.
  • Focus: samen bepalen wat onze strategische route voor komend jaar wordt, waar gaan we op inzetten?

Hackathon – Let the game begin

Een 5-tal collega’s hadden zich tot het laatste moment in het zweet gewerkt om tot een minimum viable product (MVP) te komen om de Hackathon mee te starten.

Gegeven: een virtueel slagveld waar je het met jouw warbot opneemt tegen de andere teams. Een strijd op leven en dood in een digitale arena.

Alle basiscomponenten zijn aanwezig: een api waar je alle strategische informatie kunt opvragen: waar bevindt mijn tegenstander zich, waar kan ik power-up ophalen & zelfs de locatie van incoming gunfire is te traceren.

Let the game begin!

Toegepaste tooling / technologie

Het was een hackathon die polyglot is. Dat wil zeggen dat iedereen zijn eigen favoriete taal kan gebruiken om de robot te besturen. Via een Websocket API die taal-agnostisch is.

  • De clients verzenden robot-commando’s (zoals throttle, draaien, schieten) naar de backend via een websocket. Voor Java-clients gebruiken we hier Stomp voor.
  • De backend draait op het Axon-framework en is verantwoordelijk voor het ontvangen van commando’s van clients, het bijwerken van de frontend middels events, en het terugkoppelen van de gamestate aan de clients.
  • De frontend (Angular, Redux) zorgt voor de visualisatie van het slagveld.

Om je eigen client te testen kon je ook lokaal een Dockerized backend en frontend opstarten, zodat je je tankrobot in werking ziet, voordat je hem ‘in het wild’ loslaat…

Een voorbeeld van de bijgeleverde Java-interface:

BotCommand processEvents(
    Collection<BulletState> bulletState,
    Collection<BotState> botStates,
    Collection<PowerupState> powerupStates,
    BotState ownBot);

Je kan dus reageren op de inkomende game states, en je bot vervolgens een commando geven (draaien, rijden, schieten).

De wedstrijd


Of je er nu al helemaal klaar voor bent of niet: op vastgestelde momenten gedurende de dag worden de warbots losgelaten in de digitale arena.

Eerst een aantal testrondes en dan voor het echie, nu wordt het menens.

Al driftend door het veld racen de warbots, jagend op de tegenstander en moet de gebouwde functionaliteit zich gaan bewijzen: is onze bot slimmer geprogrammeerd dan die van het andere team?

Uiteraard ontstaan er heftige discussies tijdens de verschillende rondes. Gaat het er hier wel eerlijk aan toe?

Een groot aantal speelrondes verder valt er een stilte om het wedstrijdscherm en vraagt een collega zich af: “Hoe leg je dit thuis uit? Met z’n allen naar een korrelig scherm kijken met een UI uit 1980?”

Ondertussen zijn diverse collega’s ijverig bezig om tussen de spelrondes nog een snelle commit te doen om de (strategische) werking van de warbot nog verder aan te scherpen.

Om af te sluiten met een mooie one-liner van een van de collega’s, die wat ons betreft het weekend prima samenvat: ‘Het was VET!’ -> Volgend jaar weer! 😉

PS We zouden het bijna vergeten te melden, maar tussen de spelrondes door hebben we dus stilgestaan bij de strategie van de organisatie. We hebben onder meer nagedacht over: wat zijn de marktontwikkelingen? Hoe en in welke vorm kunnen deze ontwikkelingen bijhouden?

De uitkomst is een ‘strakke’ backlog met items waar we het komende jaar mee aan de slag gaan. Game on!

Leave a Reply

Your email address will not be published. Required fields are marked *