Na 12 jaar in de detachering te hebben gewerkt wilde ik graag eens in een bedrijf werken waar software-ontwikkeling de core-business was. Het leek me dat je daar extra veel aandacht zou kunnen en moeten besteden aan optimalisering van het ontwikkel-proces. Als je goed regelt hoe je software standaardiseert, herbruikbare componenten maakt en zoveel mogelijk automatiseert dan maak je juist in zo'n omgeving het verschil. Ik vond een baan bij Maccs International, een bedrijf in Ubbena (bij Assen). Maccs was gevestigd in een verbouwde boerderij, een beetje in the middle of nowhere, maar de klanten zaten over de hele wereld. Maccs maakte namelijk software voor de filmindustrie, en had een enorm marktaandeel in software specifiek voor film-distributie. De filmindustrie is een grote business, waar veel partijen bij betrokken zijn. Producenten maken films en verkopen de rechten voor vertoning aan distributeurs, die vervolgens weer contracten afsluiten met exploitanten. In de contracten is geregeld wat een partij precies mag met een film in welk territorium, en hoeveel daarvoor betaald moet worden, meestal een bedrag per voorsteling of vertoning en een percentage van de opbrengst van kaartverkoop. Met vaak weer staffel-prijzen en nog heel veel andere mogelijke constructies. Uiteindelijk gaan mensen kijken naar een film, en kopen daarvoor een kaartje. Dan wordt er bepaald wat de exploitant aan de distributeur moet betalen, en de distributeur aan de producent enzovoort. Dat kan ook nog per land variƫren. In het systeem van Maccs kan dit hele proces worden vastgelegd, en de uitvoer ervan is uiteindelijk een overzicht wie wat mag en wie wat betaalt aan wie. Omdat het wereldwijd wordt gebruikt zijn alle mogelijke scenario's erin in te richten en is het dus een erg flexibel maar achter de schermen ook wel erg ingewikkeld systeem. Het wordt gebruikt door de grootste filmdistributeurs in de wereld, maar ook door hele kleine lokale distributeurs. Wat ik heel bijzonder vond aan het werken in de filmwereld is dat klanten weliswaar elkaars concurrenten zijn, maar dat de hele film-markt geen zero-sum wereld is. Winst voor de een hoeft niet ten koste te gaan van de ander, uiteindelijk is iedereen gebaat bij goede films in de bioscopen. Op die manier gaan mensen meer naar de film, wordt de markt groter en wordt uiteindelijk iedereen er beter van. Daarnaast zijn klanten gewend aan het projectmatig werken, elke film is tenslotte weer een project, en samenwerken, afspraken nakomen en deadlines halen zijn vanzelfsprekend. Net als een feestje vieren als het gelukt is natuurlijk.
Ik begon in het onderhoud van het Maccs systeem voor distributeurs, gebouwd in Powerbuilder met een Oracle database. Na verloop van tijd werd besloten een nieuwe applicatie te bouwen voor een klant in de UK, die filmrechten leverde via een web-aplicatie op hun website. Hiervoor hadden we een pilot-project gedaan dat goed beviel, en we besloten hiervoor een productie-ready applicatie te bouwen in Wicket, een "hip" Java/webapplicatie-framework op dat moment. De database die we gebruikten was Oracle en we gebruikten Hibernate voor de Object-relational mapping. We begonnen met het maken van herbruikbare componenten, die we in blokken op schermen gebruikten, en die herbruikbare componenten namen we op in een library die we ook in andere projecten konden gebruiken. Al snel kwam er een nieuw project bij, dat we in eerste instantie Maccsbox noemden. Dit was een systeem waarin exploitanten boxoffice-returns konden melden, gegevens over de kaartverkoop bij filmvoorstellingen. Die gegevens konden handmatig in de webapplicatie worden ingevoerd, maar ook elektronisch worden aangeleverd, door bijvoorbeeld bestanden te uploaden of te mailen. Daemons zorgden voor het verwerken van alle aangeleverde gegevens en de applicatie leverde vervolgens informatie over bijvoorbeeld bezoek- en omzetcijfers. De gegevens konden daarna ook in het Maccs systeem van de distributeurs worden ingelezen waarna dat vervolgens de te factureren bedragen kon bepalen, rekening houdend met alle afspraken die waren vastgelegd. Maccsbox was een groot succes, en we voerden het wereldwijd in voor een aantal grote filmdistributeurs. Daarvoor moesten steeds per land alle bioscopen worden ingelezen, alle mogelijke kaartsoorten, bestandsformaten en dergelijke worden onderzocht en het systeem moest dan worden geconfigureerd en soms aangepast om de gegevens juist te kunnen verwerken. Dat gebeurde in samenwerking met de mensen van de distributeur ter plaatse, dus dat bracht veel communicatie over en weer (en op uiteenlopende tijden) met zich mee.
Het distributeur-systeem van Maccs is een grote database-gebaseerde applicatie. De onderliggende database is Oracle, en de client-applicatie is gebouwd in Powerbuilder. Hoewel Powerbuilder in principe database-onafhankelijk zou zijn gebruik je toch al gauw Oracle-specifieke code om het geheel te laten performen. Voor de webapplicaties gebruikten we Wicket, waarin Java-code en HTML gecombineerd worden (wel elk in hun eigen bestanden) tot een applicatie. Opmaak ging met CSS en we gebruikten Javascript voor alles wat door de frontend afgehandeld kon worden. Wicket had zijn eigen library met Javascript-functies, die we waar nodig aanvulden of vervingen. Hibernate gebruikten we voor toegang tot database-gegevens vanuit Java. Met name met het database transactie-beheer binnen de Wicket-request lifecycle zijn we wel even bezig geweest om alles soepel aan de praat te krijgen. Java-classes voor database objecten genereerden we met JBoss Hibernate tools, waarin we op maat gemaakte templates gebruikten en na het genereren werden de gegenereerde classes nog automatisch opgeschoond en uitgebreid. Voor versiebeheer gebruikten we Subversion. Voor rapportages zijn we een tijd op zoek geweest naar de juiste tooling. In het eerste systeem dat we bouwden gebruikten we Jasper reports, een oplossing waarmee we gemakkelijk overzichten en bijvoorbeeld facturen konden aanmaken. In Maccsbox zijn we BIRT gaan gebruiken, een uitgebreidere tool met ook meer interactieve mogelijkheden. Ook hebben we nog een tijdje de Maccs-distributor applicatie als een service op een Windows-server gebruikt om specifieke Maccs rapporten vanuit de webapplicatie te kunnen genereren.
Bossers & Cnossen