Incidone
Een demonstratie van Task-Oriented Programming met iTasks
Task-Oriented Programming (TOP) is een nieuwe softwareontwikkelingsmethode voor het ontwerpen en bouwen van interactieve multi-user (web)applicaties. De methode is met name gericht op het bouwen van ondersteunende systemen voor werk waarin mensen samen complexe taken vervullen. Dit is veelal informatiegedreven kenniswerk dat wordt ondersteund door het uitzetten van taken, het opslaan en verzamelen van resultaten en het uitwisselen van informatie tussen mensen en organisaties zoveel mogelijk te automatiseren. In TOP staan taken centraal. Ondersteunende systemen kunnen declaratief worden geprogrammeerd door taken te definiëren, en de decompositie in deeltaken, hun onderlinge relatie, en de informatie die tussen taken wordt uitgewisseld te beschrijven. Systemen structureren aan de hand van de taken die ze ondersteunen klinkt misschien voor de hand liggend, maar het begrip taak wordt in zo veel verschillende contexten gebruikt dat het soms lastig is om een concreet beeld te vormen van wat TOP precies inhoudt. Om de mogelijkheden van TOP tastbaarder te maken is de afgelopen anderhalf jaar de Incidone demonstrator applicatie ontwikkeld. Incidone is een incidentcoördinatiesysteem voor het ondersteunen van kustwachtoperaties. Dit werk is een goed voorbeeld van werk waarin mensen samenwerken en het verzamelen, structureren en delen van informatie core business is. Incidone is volledig volgens de TOP methode ontwikkeld met het iTasks TOP framework. Hoewel het een bescheiden voorbeeldapplicatie is, bevat het veel belangrijke elementen die ook in bijvoorbeeld Command en Control systemen voorkomen en geeft het een goed beeld van de kracht van TOP.
Task-Oriented Programming met iTasks Wanneer mensen met behulp van software samenwerken om een gemeenschappelijk doel te bereiken, komt daar veel afstemming, communicatie en informatieoverdracht bij kijken. Het maken van dergelijke software is een uitdagende opgave. Er bestaat eigenlijk geen geschikte taal en methodiek om zulke samenwerkingsverbanden voldoende nauwkeurig, maar tegelijkertijd vrij van te veel technische details, te beschrijven. Ontwerpers en bedfijfsanalisten werken vaak met te informele modelleertalen die enkel de grote lijnen beschrijven. Essentiele details blijven open wat kan leiden tot onuitvoerbare ontwerpen. Ontwikkelaars daarentegen, werken veelal met programmeertalen en tools die zich richten op de technische aspecten van computersystemen. De techniek is vaak zo ingewikkeld dat men tussen de regels door moet lezen om te achterhalen waar het systeem nu eigenlijk voor is. Task-Oriented Programming is een nieuwe software-ontwikkelmethode die taakmodelleren integreert met functioneel programmeren. Voortbouwend op meer dan vijfentwintig jaar onderzoek naar functionele programmeertalen en gebruikmakend van de nieuwste ontwikkelingen op het gebied van codegeneratie en meta-programmeren
is het mogelijk geworden om uit compacte taakbeschrijvingen direct uitvoerbare informatiesystemen te genereren, zonder dat men zich druk hoeft te maken over technische details. Het kernconcept van TOP is de notie van ‘taak’. Om een doel te bewerkstelligen moeten taken uitgevoerd worden. Dit kunnen complexe taken zijn maar ook meer eenvoudige. Een TOP programma definieert hoe een complexe taak gerealiseerd wordt door middel van een samenstelling van eenvoudigere taken. Daarnaast beschrijft het de informatie die nodig is om een taak uit te voeren en welke nieuwe informatie geproduceerd wordt wanneer de taak wordt uitgevoerd. Aan de hand van beschikbare informatie kan vervolgens worden bepaald welke vervolgstappen gezet moeten worden om het gewenste doel te bereiken. Tevens wordt vastgelegd wanneer, en in welke vorm, informatie tussentijds gedeeld wordt. Om goed geïnformeerd te blijven is het namelijk vaak ongewenst om te moeten wachten tot deeltaken ‘af’ zijn voordat (deel)resultaten beschikbaar worden gesteld. Met de TOP methodiek kunnen willekeurig complexe samenwerkingsverbanden formeel en inzichtelijk worden beschreven. Taken kunnen heel algemeen beschreven worden, zodat het mogelijk is algemene samenwerkingspatronen als blauwdruk te definiëren die dan herbruikbaar toegepast kunnen worden in concrete situaties. Maar een formeel taakmodel is nog geen uitvoerbaar systeem. De technische infrastructuur, die zorgt dat gegevens opgeslagen worden, er over een netwerk gecommuniceerd kan worden en dat er interfaces zijn waarin informatie geraadpleegd en bewerkt kan worden, moet ook gerealiseerd worden. Een TOP framework faciliteert al deze zaken op een generieke manier. Het aan de Radboud Universiteit ontwikkelde iTasks framework biedt zo’n raamwerk in de functionele programmeertaal Clean. De TOP methodiek is hand-in-hand met dit framework ontwikkeld. Naast de kerninfrastructuur biedt het iTasks framework een bibliotheek met veel voorkomende taken en taakpatronen, om een TOP ontwikkelaar snel op weg te helpen.
Hoe ziet een iTasks TOP specificatie er uit? Om een beeld te geven van hoe iTasks taakbeschrijvingen er concreet uitzien geven we hier een klein voorbeeld. Dit voorbeeld is slechts ter illustratie. Het speelt verder geen rol voor begrip van de rest van dit deze brochure. Het onderstaande fragment is een stuk taakdefinitie uit Incidone waarin vastgelegd is hoe tijdens een telefoongesprek de beller wordt bepaald: ofwel door een nieuwe contactpersoon in te voeren, ofwel door een bestaande uit de database te kiezen. Als een taak wordt gedefinieerd ligt vast welke informatie gebruikt en opgeleverd wordt.
determineContact :: (Maybe ContactNo) -> Task ContactNo determineContact mbPrevious = withShared {ContactFilter|filterByName=Nothing} \filter -> In de definitie van een taak createNewContact filter worden andere taken gebruikt -||selectExistingContact filter om de taak uit samen te stellen <<@ ArrangeVertical where createNewContact filter = enterInformation (Title “Contact”) [] @> (mapToFilter,filter) >>* [OnAction ActionCreate (hasValue (createContact))] iTasks biedt een bibiliotheek selectExistingContact filter = whileUnchanged filter met voorgedefinieerde taken als \curFilter -> primaire bouwblokken enterChoiceWithSharedAs (Title “Select contact”) [ChooseWith (ChooseFromList contactTitle)] (sdsFocus curFilter filteredContactsShort) contactIdentity >>* [OnValue (hasValue return) :maybe [] (\prev -> [OnAction ActionCancel (always (return prev))]) mbPrevious]
Met behulp van operatoren worden complexe taken samengesteld uit eenvoudige. Bijvoorbeeld: na elkaar of door keuze uit alternativen
De Incidone Demonstrator Applicatie De Incidone demonstrator applicatie is een incidentcoördinatiesysteem voor kustwachtoperaties, met de nadruk op “Search and Rescue”. Het is gebaseerd op de organisatie en werkwijze van de Nederlandse Kustwacht, maar geeft een eigen invulling aan de manier waarop de informatievoorziening ondersteund kan worden. We hebben goed gekeken naar de uit te voeren taken, maar niet altijd de huidige werkwijze overgenomen. De specifieke invulling van taken is namelijk vaak beïnvloed door de mogelijkheden en beperkingen van de op dit moment gebruikte ondersteunende systemen. Een kustwachtsysteem is een goed voorbeeld voor het demonstreren van TOP en iTasks. De manier waarop de Nederlandse Kustwacht georganiseerd is en het werk wat ze doen sluiten goed aan bij TOP. Het coördineren van taken en het verzamelen en weer verspreiden van informatie is namelijk core business op het kustwachtcentrum. Daarnaast is in Nederland de kustwacht geen marineonderdeel, maar een zelfstandige netwerkorganisatie die weliswaar een coördinerende taak heeft, maar voor haar operaties ook middelen inzet van andere organisaties zoals de KNRM. Incidone is ontworpen voor primair gebruik in een centraal coördinatiecentrum zoals het Kustwachtcentrum in Den Helder waarin een klein team van wachtsofficieren operaties coördineren die uitgevoerd door eenheden van diverse organisaties. Incidone faciliteert het team in drie hoofdtaken: informatie uitwisseling in het coordinatiecentrum, communicatie met derden en eenheden, en het coördineren van actieplannen en uitvoeren van standaardprocedures. Onderlinge informatiedeling: In de kern is Incidone een multi-user informatiesysteem. Het heeft een centrale database waarin zowel gestructureerde als ongestructureerde informatie kan worden opgeslagen over schepen, vliegtuigen, vermiste surfers, betrokken personen, incidenten en allerlei geografische en meteorologische gegevens. Ook wordt er per incident een chronologisch log bijgehouden. Alle informatie in deze database wordt realtime gesynchroniseerd tussen alle gebruikers, zodat iedereen altijd over up-to-date informatie beschikt. Omdat de samenwerking en informatiedeling tussen teamleden in dezelfde ruimte ook deels informeel gebeurt, biedt Incidone ook de mogelijkheid om direct vanuit de applicatie informatie te delen naar een gedeeld display dat op een videowall of projector getoond kan worden. Daarnaast is er een tablet versie van de applicatie, waardoor watchofficers toegang blijven houden tot informatie wanneer ze van hun werkplek weg zijn.
Het SENECA Project De ideeën achter TOP en iTasks zijn al enkele jaren in ontwikkeling en onderwerp van onderzoek aan de Radboud Universiteit Nijmegen (RU) en andere kennisinstituten, waaronder de Nederlandse Defensieacademie (NLDA). De betrokkenheid van de NLDA heeft er onder andere voor gezorgd dat in dit onderzoek casussen uit het defensiedomein gebruikt zijn om de concepten te toetsen. TOP sluit goed aan bij Defensietoepassingen omdat de kernconcepten van de ontwikkelmethode, zoals taken uitzetten en informatie uitwisselen, goed passen bij bijvoorbeeld command en control (C2) systemen en ondersteuning van genetwerkt samenwerken. TOP wordt daarom binnen de NLDA gezien als een interessante ontwikkeling voor langetermijn onderzoek naar C2 systemen en als gereedschap voor experimenten. Begin 2013 is met financiering van de SENECA werkgroep een nieuwe samenwerken tussen de RU en NLDA gestart. De doelstelling van dit project was eenvoudig: Ontwikkel een concrete demonstrator applicatie met de TOP methode en tools om de mogelijkheden ervan concreet te laten zien. Er was namelijk bij aanvang weliswaar een proof-of-concept van de methode, maar er waren nog geen goede praktijkvoorbeelden. Hierdoor werd TOP vaak als erg abstract ervaren en bleek het soms moeilijk de potentie ervan op zijn waarde te schatten. De Incidone demonstrator is bedoeld om hier verandering in te brengen.
Communicatie met derden en uitgestegen eenheden: Naast onderlinge informatiedeling, moet er ook veel gecommuniceerd worden met betrokkenen buiten het coördinatiecentrum. Dit kunnen schepen zijn die een noodoproep doen, hulpverleners, of mensen die op een andere manier betrokken zijn bij een incident. Incidone biedt een geïntegreerd communicatieoverzicht waarin alle externe communicatie bijgehouden wordt en wordt gerelateerd aan incidenten en contacten. In het ideale geval is dit communicatie overzicht volledig gekoppeld met relevante communicatiesystemen zoals radio en telefonie. Als demonstratie van deze mogelijkheid bevat Incidone een koppeling met een VOIP telefooncentrale. Coördinatie van actieplannen: Het delen van informatie en het faciliteren van communicatie alleen is niet genoeg. Er moeten ook acties uitgezet worden en de voortgang ervan moet worden bewaakt. In dit deel van de applicatie kan optimaal gebruikt gemaakt worden van de taak-oriëntatie van iTasks. Actieplannen worden gefaciliteerd door ieder actiepunt uit een actieplan te modelleren als een losse iTasks taak. Voor ieder incident kan een actieplan gemaakt worden dat bestaat uit interactieve actiepunten. Dit zijn geen passieve checklisten, maar kleine interactieve deelprogramma’s die de uitvoering van het actiepunt ondersteunen. Zo wordt bij een actiepunt als “alarmeren reddingseenheid” direct de mogelijkheid geboden een beschikbare eenheid te kiezen en het alarmeringsbericht, dat vanuit een sjabloon vooringevuld wordt, direct te versturen. Er hoeft dus niet handmatig door het informatiesysteem heen gezocht te worden om de benodigde informatie voor een actiepunt te verzamelen. Actiepunten kunnen ook aan contacten gekoppeld worden en worden dan direct getoond tijdens communicatie met dat contact. Zo kan efficiënt gecommuniceerd worden en hoeft er niet onnodig vaak op en neer gebeld te worden.
Incidone in de toekomst Met het afronden van dit project is een belangrijke mijlpaal bereikt in de ontwikkeling van TOP en iTasks. Het uitleggen van wat Taak-georiënteerd programmeren inhoudt en hoe dat in de praktijk in zijn werk gaat hoeft niet langer aan de hand van abstracte algemeenheden, maar kan nu aan de hand van een aansprekend concreet voorbeeld gedaan worden. Ook is er door het beschikbaar stellen van de volledige broncode een basis gelegd voor ontwikkelaars die er zelf mee aan de slag willen. Niet ieder wiel hoeft zelf uitgevonden te worden. Er kan eenvoudigweg gekopieerd en aangepast worden. Het maken van een concrete voorbeeldapplicatie heeft ook belangrijke verbeteringen aan het iTasks framework opgeleverd. Ook in de komende jaren zal het iTasks framework verder uitgebreid en verbeterd worden, maar tijdens de ontwikkeling van Incidone is er al veel bereikt op het gebied van performance, robuustheid en de mogelijkheid tot integratie met third-party systemen en libraries. Hierdoor is iTasks nu een stuk gereedschap dat op kleine schaal ingezet kan worden voor onder andere rapid prototyping. Nu Incidone er is, hopen we dat het zijn beoogde functie zal vervullen. We hopen dat het zijn weg vindt naar ontwikkelaars die begrijpen dat de tools van gisteren niet meer toereikend zullen blijken in een wereld waarin steeds meer en steeds flexibeler geautomatiseerd moet worden, en die met een open blik willen kijken naar alternatieven zoals TOP. Binnen de kennisinstituten zal de komende jaren verder ontwikkeld worden aan iTasks. In een aantal lopende en nieuwe projecten waarin de NLDA, RU en ook TNO samenwerken zal TOP gebruikt worden in onderzoek naar onder andere nieuwe automatiserings- en bemanningsconcepten. Ook in meer op infrastructuur gericht onderzoek kan Incidone een belangrijke rol gaan spelen als benchmark toepassing. Er hoeft immers niet meer steeds een nieuwe voorbeeldcasus gezocht te worden omdat Incidone direct als voorbeeldtoepassing gebruikt kan worden. Samenvattend kunnen we concluderen dat het project een belangrijke impuls is geweest in de ontwikkeling van TOP en iTasks. Er is een flinke stap gemaakt op de weg van wetenschappelijk proof-of-concept tot inzetbaar gereedschap.
Zien is Geloven De beste manier om een beeld te krijgen van de Incidone demonstrator is door de applicatie zelf uit te proberen. U kunt dan zelf oordelen over wat er op dit moment al mogelijk is met TOP en iTasks. We stellen daarom de volledige Incidone applicatie, inclusief broncode, als open source software beschikbaar. De software is uiteraard online te vinden, maar om het u gemakkelijk te maken staat deze ook op de USB-stick bij deze brochure. U hoeft zelfs niets te installeren om de demo te bekijken, want de USB-stick is bootable (zie ook het kader “Gebruik van de USB-Stick” onderaan deze pagina). Naast het ontwikkelen van de demonstrator applicatie, hebben we ook een bijbehorende demonstratie- en testopstelling ontwikkeld. Deze opstelling bestaat uit een mobiele server, een volledig ingerichte operator werkplek, een projector en netwerkapparatuur. Met deze opstelling kan eenvoudig op een willekeurige locatie een mini-coördinatiecentrum ingericht worden. Hiermee kunnen demonstraties en voorlichtingspresentaties gehouden worden over de mogelijkheden van TOP en iTasks. De demonstratieoptstelling is volledig selfcontained. De mobiele server faciliteert de Incidone webservice, een VOIP telefooncentrale, en netwerkservices voor een gesloten lokaal netwerk. De operator werkplek bestaat uit een pc met twee monitoren voor het gebruik van de desktop versie van Incidone, een VOIP telefoon en een tablet voor het gebruik van de mobiele versie. De projector toont Incidone’s gedeelde overzichtsinformatie. Als u interesse heeft in een uitgebreide presentatie over TOP en een demonstratie met deze opstelling, aarzel dan vooral niet om contact met ons op te nemen.
Gebruik van de USB-Stick
Incidone is, zoals iedere iTasks applicatie, een web applicatie en kan dus in principe direct via het internet gebruikt worden. Voor een optimale gebruikservaring is het echter wenselijk om de Incidone server in een lokaal netwerk te draaien. Een systeemvereiste voor de Incidone server is een 64 bits Linux, of OSX besturingssysteem. Om het beschikbaar hebben een dergelijk besturingssysteem, en het installeren en configureren van Incidone geen nodeloos hoge drempel te laten zijn, hebben we er voor gekozen om naast de gebruikelijke verspreiding via packages, de demo ook als bootable systeem te verspreiden op de bijgesloten USB stick.
Als u een recente PC (met 64-bits processor) opstart vanaf de USB stick krijgt u een op maat gemaakt Ubuntu Linux systeem waarop u het Incidone systeem direct kunt uitproberen zonder ook maar iets te hoeven installeren.
Meer weten? Wilt u meer weten over de mogelijkheden van TOP en iTasks of een keer presentatie over Incidone bijwonen, neem dan contact met ons op. Bas Lijnse
[email protected] Radboud Universiteit
http://incidone.itasks.org/
Rinus Plasmeijer Jan Martin Jansen
[email protected] [email protected] Nederlandse Defensie Academie Radboud Universiteit
© 2014 Alle rechten voorbehouden