Maersk is een van de grootse container-rederijen ter wereld. Een onderdeel van de groep is APM Terminals, dat wereldwijd 70+ terminals runt. Als onderdeel van een programma om de operatie op de terminals te stroomlijnen is het Flow Execution System ontwikkeld, dat uit verschillende software componenten bestaat. Voor één van die componenten, genaamd Gate, ben ik een leidend developer geweest.

Gate visualiseert en stuurt vrachtwagens die containers komen halen en brengen op een efficiënte (pull based) veilige wijze over het terminal terrein. Doel is enerzijds ophopingen van vrachtwagens te voorkomen (veiligheid) en tegelijkertijd wachttijden op de container kranen laag te houden (efficiëntie). Afhankelijk van het soort container transactie (halen of brengen, import of export) wordt de route bepaald.

De Gate applicatie is een event sourced systeem, waarbij een truck visit de belangrijkste eenheid is. Events komen uit het Terminal Operating System (Navis N4) binnen over Kafka, waarbij ze worden omgezet in command’s voor de truck visit. De business logic wordt uitgevoerd, hetgeen resulteert in domain events. Deze worden op hun beurt omgezet in a) externe messaging richting het Terminal Operating System om de trucks te sturen en b) projecties in de database die worden gebruikt om de frontend te updaten via Server Side Events (SSE). Deze code is geschreven in Kotlin, met gebruikmaking van Exposed en Arrow-kt en functional programming principes.

De frontend is ontwikkeld in React en geeft operators in de control room inzicht in de positie van vrachtwagens: waar zijn ze, wat is de geplande route, wat is de huidige duur van het bezoek ten opzicht van de geplande duur, waar zijn er opstoppingen en welke trucks hebben aandacht nodig (o.a.vanwege technische problemen). Een tweede deel van de frontend bevindt zich op display’s die diverse plaatsen op het terminal terrein staan en dienen om de chauffeurs te instrueren naar de juiste posities te rijden.

Hi, I’m mlindhout