War In Europe. Een RTS netwerkspel op macro niveau
|
|
- Wouter Jacobs
- 8 jaren geleden
- Aantal bezoeken:
Transcriptie
1 War In Europe Een RTS netwerkspel op macro niveau Jennick Scheerlinck, Pieter Vancoillie, Jelle De Weerdt Vakoverschrijdend Eindproject Academiejaar de jaar Bachelor in de industriële wetenschappen informatica Hogeschool Gent
2 Inhoud Het spelconcept... 3 Gamestructuur... 3 Het prototype... 6 De kaart... 6 Ontwikkeling van de kaart... 6 De kaart en het spel Het DTO pattern Design pattern voor de client De implementatie van het DTO Dataflow binnen het DTO pattern Communicatie DTO en XML Server Gameserver Overzicht van DTO-berichten Timers en delay Databank Tekortkomingen Uitbreidingen Besluit Taakverdeling Installatiegids Handleiding Bijlage :
3 War In Europe Een RTS netwerkspel op macro niveau Het spelconcept Het spel is gebaseerd op risk met een RTS (real time strategy) invloed. (we nemen hier risk als voorbeeld omdat dit gekend is maar het gaat hier om het genre afgeleid van het historische kriegspiele, het had even goed ridderstrijd of panzer generaal kunnen zijn) Dit geeft een aantal belangrijke concept veranderingen: Er zal gespeeld worden met verschillende individuele eenheden, dit verschilt met het risk concept van waar de eenheid een soldaat is in elk leger (cfr 5,10,100 soldaten op een vakje). Er zal de mogelijkheid zijn om met verschillende legers te spelen. Legers verschillen in grote en individuen. De stap naar real-time verschilt met het risk concept de turn based is. Hier schuilt de uitdaging van het goed synchroniseren. Maar geeft het spel wel een extra drive omdat je niet op je beurt moet wachten. De uitbreiding naar het second life concept is dan niet ver weg. Zo kan een spel op een server blijven doorgaan. Gamestructuur Elke speler regeert over een koninkrijk (Kingdom), dit koninkrijk beschikt over 1 leger (Army) bestaande uit meerdere divisies. Elke divisie (Division) is gestationeerd in een stad (City) en elke stad is het centrum van een gebied (Area). Een divisie kan bestaan uit meerdere eenheden (Unit). Er bestaan 3 soorten eenheden: cavalerie (Cavalry), infanterie (Infantry) en artillerie (Artillery). Elk type eenheid heeft een bepaalde sterkte en snelheid. Wanneer een divisie uit verschillende types eenheden bestaat dan wordt de snelheid bepaald door het traagste type. Een divisie verplaatst zich dus steeds in groep. De sterkte van een divisie is de som van de sterktes van alle eenheden apart. Ook bevat elke eenheid een moraal. Wij hebben dit geïmplementeerd met het idee om hier later op verder te bouwen, bijvoorbeeld na een gewonnen gevecht stijgt de moraal van de gewonnen divisie. Ook dachten we aan een rust -actie, zodat een divisie enkele uren kan uitrusten waardoor hun moraal stijgt maar tijdens hun rust zouden ze wel kwetsbaarder zijn voor vijandelijke aanvallen. Deze functies zijn nog niet geïmplementeerd maar zijn ideale uitbreidingen voor ons spel. Wij hebben ons spel zo geïmplementeerd dat er in de toekomst redelijk eenvoudig uitbreidingen kunnen toegevoegd worden. Zo zijn alle eenheden afgeleid van een ouderklasse Unit. Ook is er een hoofdstad (Capital) geïmplementeerd. Die afgeleid is van de klasse City en momenteel dezelfde functie heeft. Maar op deze manier is het later eenvoudig om extra karakteristieken toe te voegen aan de hoofdstad zoals versterkingen, beter beveiligt of andere extra eigenschappen. Elk game object houdt een hashmap bij van alle kingdoms, en telkens worden dan via enkele iteraties alle divisies of alle areas behorende tot de kingdoms overlopen. 3
4 Wanneer er een nieuw spel gestart wordt dan kan de speler een kingdomnaam, een kleur en een gebied op de map kiezen. De map (Map) is onderverdeeld in 20 delen elk bestaande uit 10 areas waarvan 1 de capital is. Bij initialisatie krijgt elke speler per area 1 divisie bestaande uit 10 infantery-, 5 cavalery- en 2 artillery-eenheden. Zijn army bestaat dus uit 10 van deze divisies. Een gevecht wordt steeds uitgevochten in een City en wordt steeds uitgevochten door 2 divisies. De divisie die gestationeerd is op de city, de verdediger en de divisie die vanuit een buurgebied is overgekomen, de aanvaller. De battle functie laat de divisies unit tegen unit vechten, steeds gebaseerd op de sterkte van de unit, de moraal en een factor geluk. De sterkste divisie wint het grootste deel van de tijd maar soms kan een zwakkere divisie met geluk, een sterkere tegenstander verslaan. Wanneer de aanvaller wint dan wordt de area van die city nu een area van de aanvaller en heeft hij dus zijn kingdom uitgebreid. Naast aanvallen kan een divisie ook gewoon verplaatst worden (move) naar een ongecontroleerde area. Deze area wordt dan automatisch nieuw grondgebied van het kingdom. Een divisie kan ook opgesplitst worden (split) in 2 delen. Het nieuwe deel verplaatst zich naar een andere city en de overgebleven units van de ouderdivisie blijven gestationeerd op de city waar ze stonden. Natuurlijk kunnen 2 divisies dan ook samengevoegd (merge) worden tot 1 grote divisie. De sterkte, snelheid en moraal worden dan automatisch aangepast aan de nieuwe samenstelling. Nog even iets over een divisie. Elke divisie heeft een Start en End attribuut die een city voorstelt, wanneer de start- en end-city dezelfde zijn dan is de divisie in deze city gestationeerd. Wanneer beide verschillend zijn dan is de divisie onderweg van de start-city naar de end-city. De progression teller houdt bij hoever hij al gevorderd is. Tenslotte heeft elk kingdom ook resources maar dit concept is nog niet uitgewerkt wegens tijdsgebrek. Het was de bedoeling dat elk kingdom nieuwe units kan aanmaken tegen een bepaalde kost. Het kingdom moest dus over voldoende resources beschikken om een unit te kunnen aanmaken. Dit kingdom zou dan na elk gewonnen gevecht een bepaalde hoeveelheid resources bij krijgen. Ook zou elke kingdom per gecontroleerd gebied een bepaald aantal resources krijgen. Een kingdom wordt dus gecontroleerd door de speler. Zijn gegevens zitten in een account (Account) die in de database bijgehouden wordt. Naast het aantal accounts heeft een game ook nog een GameInfo object nodig om een Game te starten. Dit GameInfo object houdt een aantal parameters bij zoals de tijdsmodus, het aantal spelers en het ip van de gameserver. Samen met de accounts kan dan een nieuw spel gestart worden. 4
5 Hieronder het vereenvoudigde klassendiagram van de game structuur: Figuur 1 - Klassendiagram gamestructuur 5
6 Het prototype Als vorm van analyse kiezen we ervoor een snel prototype te maken. Zo worden onze ideeën snel vastgelegd en weten we in welke richting we werken. Het geeft een idee van de opvolging van de gui s. Ook de lay-out als de functionaliteit van elke gui kan dan bekeken worden. Figuur 2 - Prototype gamegui De kaart Ontwikkeling van de kaart De basis van de kaart wordt gemaakt met behulp van een grafische editor. Dit is de kaart waarvan we vetrekken: Figuur 3 - De originele kaart Deze wordt als volgt bewerkt: - Alle namen van de gebieden worden verwijderd. - Alle gebieden krijgen een unieke grijswaarde toegewezen. 6
7 - Grenzen en punten voor steden worden zwart gekleurd (grijswaarde (0,0,0)). - Buren overzee worden verbonden door middel van een stippellijn. Aanpassingen die niet noodzakelijk zijn, maar het spel wel ten goede komen: - De indeling van de landen wordt zo aangepast dat er 10 gebieden zijn per land. - De zee wordt met een textuurfilter aangepast om het mooier te maken. Bij dit proces wordt een begeleidend bestand aangemaakt. Dit bestand bevat voor elk gebied een naam en een id en groepeert de gebieden in naties. Vormvereiste voor dit bestand is dat het id van een gebied overeenstemt met de grijswaarde van het gebied in het grafische bestand (id 1 = rgb(1,1,1)). Dit bestand wordt het map.dat-bestand genoemd en ziet er nu zo uit: NATION Great Britain PROVINCES 1 Belfast 2 Dublin 3 Highlands 4 Edinburgh 5 Umbria 6 Wales 7 Birmingham //(enzovoort voor alle provincies en naties). De map ziet er nu zo uit: Figuur 4 - De herwerkte kaart in finale vorm Dit is de finale toestand van het grafische bestand. De grafsiche bewerkingen worden gemaakt in Photoshop. Deze versie bevat nog een aantal tekortkomingen: - Het uitvoerformaat van de kaart is van belang omdat vele bestandsformaten een compressie impliceren waardoor niet alle pixels hun oorspronkelijke rgb-waarde behouden. Onze voorkeur gaat uit naar het PNG-formaat, aangezien we hiermee het beste resultaat verkrijgen. 7
8 - Vele grafische editors passen ongevraagd anti-aliasing technieken toe. Meestal wordt dit door de ontwikkelaar geapprecieerd, maar hier zorgt dit voor het vormen van vele artefact pixels rond de randen van de gebieden. Vooral deze tekortkoming was moeilijk weg te werken. Aangezien geen enkel teamlid een ervaren Photoshop-gebruiker is was het niet mogelijk de kaart op te slaan zonder interferentie van anti-aliasing effecten. Het begeleidende bestand map.dat wordt verder aangepast met een nevenprogramma dat geen deel uitmaakt van het project. Het kan gezien worden als de map editor voor dit project. Bij het uitbreiden naar een spel met meerdere kaarten is deze editor heel goed te gebruiken. Het is dan wel een must deze nog op punt stellen. Niet elke code van elke iteratie van deze editor werd bewaard, sommige stukken werden overschreven om sneller te kunnen werken. Om map.dat te voltooien, zijn er verschillende iteraties nodig. Elke iteratie zal het map.dat-bestand inlezen van de vorige iteratie en hieraan informatie toevoegen. In de eerste iteratie krijgt elke natie een kleur toegewezen. Dit gebeurt door de standaardkleuren bepaald in de java api als circulaire lijst te doorlopen (deze lijst werd opgesteld voor de editor). Manueel wordt aan het bestand de locatie van het grafische bestand met de natievlag toegevoegd. Dit kan in een latere versie deel uitmaken van de editor. Figuur 5 Mapeditor, eerste iteratie Het map.dat-bestand ziet er nu als volgt uit: NATION Great Britain NATIONCOLOR NATIONFLAG uk.gif PROVINCES 1 Belfast (.) Voor het tekenen van de divisies is het noodzakelijk de coördinaten van de steden te kennen. In de tweede iteratie kan er op elk gebied geklikt worden. Daarna wordt er geklikt op de stad van het gebied. Deze coördinaten worden onthouden en uitgeschreven naar de nieuwe versie van map.dat. Na het aanklikken van de stad wordt de id van het gebied weergegeven op de kaart ter hoogte van de stad. 8
9 Figuur 6 Mapeditor, met steden coördinaten Het map.dat-bestand ziet er nu als volgt uit: NATION Great Britain NATIONCOLOR NATIONFLAG uk.gif PROVINCES 1 Belfast // coördinaten 2 Dublin Highlands Edinburgh Umbria Wales Birmingham London Denmark Halland ( ) De derde iteratie zorgt voor het inlezen van de burenlijsten. Buren werden aangeduid door te klikken op de kaart. Met een toggle-knop wordt duidelijk gemaakt of we een nieuw startgebied gaan selecteren of een bijkomende buur. Het map.dat-bestand ziet er na afloop zo uit : NATION Great Britain NATIONCOLOR NATIONFLAG uk.gif PROVINCES 1 Belfast // buren 2 Dublin Highlands Edinburgh Umbria
10 Wales Birmingham London Denmark Halland ( ) Een laatste iteratie werd toegevoegd aan de map editor om de omschreven rechthoeken van elk gebied te berekenen. Dit werd gedaan om het zoeken en het tekenen te versnellen omdat dit vertraagd wordt door artefact pixels die tot het gebied worden gerekend maar het helemaal niet zijn. Deze omschreven rechthoeken werden eerst in runtime berekend maar dit kostte te veel initialisatietijd. Eerste berekening van omschreven rechthoeken toont dat foute pixels ervoor zorgen dat ook omschreven rechthoeken veel te groot worden genomen. Figuur 7 - Mapeditor, omschreven rechthoeken Hierop ziet men dat deze omschreven rechthoeken niet zullen helpen. De veel te grote rechthoeken zijn te groot en overlappen te veel om bruikbaar te zijn, het is zelfs niet te zien welke rechthoek bij welk gebied hoort. Een oplossing voor dit probleem is een buddysysteem te gebruiken als filter. Enkel pixels die grenzen aan genoeg buddy s komen in aanmerking om de omschreven rechthoek te bepalen. De grens wordt streng gelegd op 8 buddy s. Pixel (x,y) is een geldige pixel: (x-1,y-1) (x,y-1) (x+1,y-1) (x-1,y) (x,y) (x+1,y) (x-1,y+1) (x,y+1) (x+1,y+1) Pixel (x,y) is geen geldige pixel: (x-1,y-1) (x,y-1) (x+1,y-1) (x-1,y) (x,y) (x+1,y) (x-1,y+1) (x,y+1) (x+1,y+1) Het resultaat van het buddysysteem: 10
11 Figuur 8 - Mapeditor, omschreven rechthoeken met buddy filter Deze manier van berekenen geeft een goed resultaat. Het is duidelijk te zien welke rechthoek bij welk gebied hoort. In het spel geeft dit als voordeel als enkel pixels binnen de rechthoek van een gebied tot een gebied kunnen behoren dat er minder artefact pixels aanwezig zijn. Ook een voordeel is dat er een behoorlijke snelheidswinst wordt geboekt door het niet meer overlopen en hertekenen van artefact pixels. Nadeel is dat sommige landen hierdoor een dikkere grens krijgen en de kromming van de grens minder goed is dan ervoor. Deze selectie kost snel enkele minuten berekeningstijd voor een map van 200 gebieden en is daardoor niet geschikt om tijdens runtime te worden uitgevoerd. Het toevoegen van dit proces aan de map editor is dus een goede keuze. De rechthoek wordt uitgeschreven tussen de rij met id en naam en de rij met de burenlijst. De parameter zijn de x- en y-coördinaten van de linker bovenhoek en de breedte en de hoogte van de rechthoek. Het map.dat bestand ziet er nu als volgt uit: NATION Great Britain NATIONCOLOR NATIONFLAG uk.gif PROVINCES 1 Belfast Dublin Highlands Edinburgh Umbria Wales
12 7 Birmingham London Denmark Halland (...) Dit is de finale versie van het map.dat-bestand. Zo is de kaart en het begeleidende bestand klaar voor de applicatie. De kaart en het spel Tijdens het initialiseren van het spel wordt de kaart ingelezen. Eerst wordt het begeleidende bestand map.dat ingelezen. Zo kunnen de nodige hashes en lijsten worden opgemaakt die de informatie van de van de kaart zoals gebieden en buren zullen bijhouden. Als tweede stap wordt het grafische bestand ingelezen. Alle rechthoeken gedefinieerd in de begeleidende file worden bekeken. Zo wordt er per gebied een lijst aangelegd van pixels die tot het gebied behoren. Alles wat buiten de unie van deze gebieden valt wordt gezien als achtergrond. Deze achtergrond is voor het overgrote deel van de tijd statisch. Toch blijkt dat deze achtergrond soms opnieuw moet getekend worden, bijvoorbeeld als een divisie zich verplaatst over zee. Als oplossing hiervoor kunnen we de achtergrond als een extra gebied zien en hiervoor ook een lijst van pixels bijhouden. Deze oplossing volstaat echter niet, aangezien deze lijst veel te lang is en telkens aanleiding geeft tot heapspace overflow. Ook het terug inladen van het grafische bestand als basis voor de Image waarop er wordt getekend zorgt overschrijding van de java heapspace. In de laatste iteratie van de map editor schuilt er echter een mogelijke oplossing. Hier wordt de omschreven rechthoek bepaald. Als we deze rechthoek nu verder gaan opdelen in driehoeken, krijgt men een veel compactere voorstelling. Zodra een driehoek volledig tot het gebied behoort, wordt hij niet verder gedeeld en wordt de driehoek toegevoegd aan de lijst van beschrijvende driehoeken. Zo verkrijgen we een veel compactere voorstelling dan de lijst met pixels. Stap 1: Stap 2: Stap 3: 12
13 Stap 4: Stap 5: Stap 6: Stap 7: Stap 8: Stap 9: Sicilië wordt hier verdeeld in 14 driehoeken. Elke driehoek is te beschrijven door drie punten. Dit zorgt in totaal voor 42 integers die Sicilië beschrijven in plaats van op pixelbasis ongeveer 1000 integers. Het terugschroeven van deze hoeveelheid data moet heapspace problemen kunnen tegengaan. Hier blijft keuze in de manier van onderverdelen. Men kan verdelen in rechthoeken of driehoeken. Als er bijvoorbeeld verdeeld wordt in driehoeken, zijn er verschillende keuzes hoe te verdelen, men kan bijvoorbeeld de hoogtelijn of deellijn kiezen. Aan de omschreven rechthoek kan ook nog gewerkt worden. Zo kan het zijn dat bij minder strenge voorwaarden de grenzen beter zullen benaderd worden. Het is hier een evenwicht vinden tussen artefact pixels verwijderen en anderzijds zo goed mogelijk de grenzen benaderen. Om deze techniek te implementeren was er geen tijd meer. Zo blijft het spel werken met lijsten met pixels. Verder onderzoek is hier mogelijk en nuttig. Met een timer wordt de refreshrate van het model ingesteld. Bij elke update van het model wordt de kaart opnieuw getekend. Hiervoor wordt een object opgebouwd van de klasse Image. Als basis voor deze image nemen we het grafische bestand dat de kaart voorstelt. Dit wordt gedaan tijdens het initialiseren van de kaart. Nadien wordt deze image tijdens elke update bijgewerkt en naar het scherm geschreven. Het herwerken van de kaart verloopt in verschillende stappen. Eerst worden de gebieden gekleurd. De manier waarop is afhankelijk van welke kleurenmodus er geselecteerd is. Na het kleuren van de gebieden wordt de view van de speler bepaald. De view wil zeggen het gebied dat zichtbaar is voor de speler. Binnen dit gebied kan de speler de aanwezige divisies zien en er informatie over opvragen. Gebieden die worden geselecteerd en die niet behoren tot de view van de speler zullen enkel info geven over het gebied en niet over wie zich in het gebied bevindt. Na het bepalen van de view worden alle divisies binnen dit gebied getekend met de iconen overeenstemmend met hun koninkrijk. Wanneer de gebruiker over de kaart beweegt met de muis zullen de gebieden oplichten. Hier wordt slechts het gebied dat de focus verliest en het gebied dat de focus krijgt inclusief de eventuele divisies die er zich op bevinden opnieuw getekend. Dit is nodig om het spel niet te vertragen. Er wordt immers geluisterd naar de mousemove-event en de frequentie van het optreden van dit event ligt te hoog. Zo blijft er te weinig tijd over om de map volledig opnieuw te tekenen. 13
14 De speler bekijkt altijd slechts een deel van de kaart tegelijkertijd. Het is mogelijk gebruik te maken van de pijltjestoetsen om het venster te verplaatsen en zo een ander deel van de kaart te bekijken. Dit maakt het mogelijk van eenzelfde niveau van detail te hebben onafhankelijk van de grootte van de kaart. Zo geeft dit de gebruiker een blik die voor hem overzichtelijk is. Dit wordt praktisch gerealiseerd door het uitsnijden van een stuk uit de image die de grootte heeft van de kaart. Deze snede heeft dan de grootte van het venster en met de linkerbovenhoek als referentie. Op de coördinaten van een punt dat wordt aangeklikt in het venster, wordt dan een translatie toegepast om hetzelfde punt in het assenstelsel van de kaart te beschrijven. Er wordt de speler ook de mogelijkheid gegeven om in en uit te zoomen op de kaart. Hiervoor herschalen we eerst de image van de kaart voor we het venster er uit snijden. Het aantal maal dat er kan worden ingezoomd of uitgezoomd is beperkt. Zo worden performantieproblemen vermeden. Men kan de vraag stellen of verder in- of uitzoomen nuttig is. De speler beschikt over verschillende kleurenmodi om de situatie van het spel te verduidelijken. Zo is er als basis de native colormode. In deze kleurenmodus wordt de kaart ingekleurd zodat alle gebieden van eenzelfde natie dezelfde kleur hebben. Zo krijgt de speler ook de vlag van de natie te zien bij het selecteren van een gebeid. Een tweede kleurenmodus is player colormode. Hier krijgen de gebieden de kleur van het koninkrijk waartoe ze behoren. Zo krijgt de speler de vlag van het koninkrijk te zien waartoe het geselecteerde gebied behoort. Als laatste modus is er de friend or foe colormode. Deze modus dient ervoor om heel snel vijandig, neutraal en bevriend gebied te onderscheiden. Vijandelijk gebied wordt rood gekleurd, neutraal geel en bevriend groen. Het idee voor een extra kleurenmodus dringt zich op. Waneer een divisie geselecteerd wordt, kan deze verplaatst worden door gebruik te maken van het commandopaneel rechtsonder. Doch zou het spel beter speelbaar zijn mocht na selectie de kaart overgaan in select colormode. Select colormode toont dan welke gebieden er bereikbaar zijn met deze divisie. Het geeft de mogelijkheid dat de speler een doelgebied aanklikt om de geselecteerde divisie te verplaatsen. Deze modus is nog niet geïmplementeerd maar lijkt wel een waardevolle uitbreiding. Het DTO pattern Het Data Transfer Object is een pattern voor het uitwisselen van gegevens tussen tiers in een multitier toepassing of tussen componenten in een gedistribueerde toepassing. De toegang tot gegevens via een remote component impliceert vaak verzamelen van gegevens uit meer dan één informatiebron. Het aantal berichten dat wordt verstuurd om aan een verzoek te voldoen kan de prestaties van de vragende toepassing of van de client beïnvloeden. Het doel van het DTO pattern is de prestatieproblemen op te lossen verbonden aan gedistribueerde componenten die remote toegang hebben tot data van businessobjecten. Per definitie is een DTO een object dat uitsluitend voor het transport van data wordt gecreëerd. De gegevens, die uit één of meerdere informatiebronnen kunnen voortkomen, worden ingepakt in een Java bean. De bean reist dan plaatselijk door de toepassing, of (wat nog belangrijker is) wordt serialized en over het netwerk verzonden. Serialization van de Java bean laat clients toe om toegang te hebben tot modelinformatie van één enkel object met enkel één call. 14
15 Omdat een DTO een Java bean is, verstrekt het gewoonlijk geen business logica of validatie logica. Het geeft slechts toegang tot de dataleden van de bean. Sommige ontwikkelaars beklemtonen dat de bean in een DTO patroonimplementatie onveranderlijk (immutable) moet zijn omdat zijn veranderingen niet worden weerspiegeld in het systeem. Dit botst duidelijk met de JavaBeans specificatie, die vereist dat alle private attributen set en get methodes hebben. Het is de verantwoordelijkheid van de ontwikkelaar om in te staan van de onveranderlijkheid van de DTO-objecten. DTO-objecten moeten beschouwd worden als deel van het model omdat ze onveranderlijke kopijen zijn van businessobjecten. Ik vermeldde kort het serializing van objecten in het DTO design pattern. Serializing is het proces om een object in een bytestroom om te zetten alvorens het over een netwerk te verzenden. Voor aankomst wordt de bytestroom opnieuw samengebracht in een object en plaatselijk gebruikt. Java se voorziet de java.io.serializable inteface. Klassen die deze interface implementeren kunnen serialized worden. In de opdracht van het project is gespecificeerd dat de serialization moest gebeuren naar xml. Hierdoor wordt in het project deze interface niet gebruikt aangezien de java api een eigen standaard 1 voorziet voor serialization. Naast het feit dat een object-xml-object mechanisme niet veel verschilt van de serialization die de java api voorziet, is het leesbaar door zowel computers als mensen, in tegenstelling tot een serialized object. De menselijke leesbaarheid vereenvoudigt het proces van debuggen van de code omdat het produceren van verschillende instanties van hetzelfde object enkel een kwestie is van een XMLbestand aanpassen. Voorts kan men om het even welke browser gebruiken om een verzoek te verzenden naar de server en zijn reactie waar te nemen. Tot slot betekent het gebruiken van XML voor gegevensuitwisseling dat er mogelijkheid is voor communicatie tussen clients gebouwd uit verschillende technologieën, niet alleen Java maar ook van Java ME en.net, bijvoorbeeld. Anderzijds is het nadeel van het gebruiken van XML voor gegevensuitwisseling is het parsingproces en de syntactische analyse die erbij komt kijken. Voor het project werd gekozen voor de KXML library 2. Een licht gewicht parser die de mogelijkheid geeft om later een gui in Java ME te maken. Zo kan het spel verder gespeeld worden op je gsm. Gedeeltelijk wegens de vereiste dat DTO s onveranderlijk moeten zijn en gedeeltelijk voor de organisatie en netheid, is het een goed idee om twee types van gegevensobjecten in de architectuur van de client-server te hebben: lokale objecten en DTO s. Bijvoorbeeld, als u intern een object van het type ChatMessage gebruikt en zijn gegevens voorbij de JVM moest verzenden, zou u een ChatMessageDTO willen creëren, die versie van ChatMessage wordt gebruikt om de data over het netwerk te transporteren. De klasse ChatMessage maakt deel uit van het project en wordt gebruikt als voorbeeld omdat dit een eenvoudig object is. Conversies voor het mechanisme: Na het ontvangen : XML --> Object Voor het verzenden : Object --> XML
16 Figuur 9 - Interactie tussen de lagen Design pattern voor de client MVC (Model-View Controler) is één van de belangrijkste patterns voor het bereiken van een stevige clientarchitectuur. Voor complexere modellen, waar verscheidene subsystemen worden gebruikt, is het soms nuttig om MVC met het Facade pattern te combineren. Het facademodel zorgt ervoor dat vragen steeds worden doorverwezen naar een geldig model. Bijvoorbeeld als het lokaal model niet meer volstaat zal het facademodel de call doorverwijzen naar een remote model. In het project wordt het lokaal model met een vaste frequentie aangepast aan het remote model. Zo wordt het lokaal model altijd als geldig beschouwd en worden vragen direct aan het lokaal model gericht. In dit project is er dus geen nood aan een facademodel. Figuur 10 - Architectuur Model: Definieert de representatie van de informatie waarmee de applicatie werkt. Aan ruwe gegevens wordt betekenis gegeven door relaties te leggen tussen data en logica toe te voegen. De daadwerkelijke opslag van data wordt gedaan met behulp van een persistent opslagmedium, zoals de accountgegevens die opgeslagen worden in de database. De applicatie zal gegevens die gebruikt worden in het model, ophalen en wegschrijven van en naar de dataopslag via een datalaag. De datalaag is geen onderdeel van het MVC-pattern. De datalaag bevindt zich hier fysiek aan de serverside van het project. Data die enkel ingelezen worden door de gui hebben ook enkel betrekking tot de representatie en vormen geen deel van het model (pixellijsten). Het model wordt voorgesteld door een object van de klasse Model en bevindt zich in het code package. Dit object bevat een object 16
17 van de klasse RemoteModelProxy dat zich in het netwerk package bevindt. Zo kan het lokaal model worden aangepast aan het remote model op de server. View: Informatie wordt weergegeven via de View. Userinterface-elementen zullen gedefinieerd zijn in dit onderdeel. Controller: De Controller verwerkt en reageert op events, die meestal het gevolg zijn van handelingen van de gebruiker. Zowel de View als de Controller bevinden zich in de klasse GuiGame. De implementatie van het DTO Gegeven de objecten tussen lagen zullen circuleren als XML streams, DTO s moeten methodes hebben voor zowel het halen van gegevens uit het object als, omgekeerd, het geven van een staat aan het object via een reeks waarden die in een hashtabel worden ingekapseld. Het is noodzakelijk om een interface te bepalen. Het volgende is de interface voor DTO s: <IObjectDTO> public void populatefields(hashtable fields) Hashtable extractfields() Het gebruik van deze interface om DTO s te bepalen zal het terugwinnen van objecten vereenvoudigen omdat er kan gebruik gemaakt worden van polymorfisme. Als voorbeeld kunnen we hier het ChatMessage object gebruiken. Stel dat ChatMessage volgende attributen bezit: command message author dan kan de IObjectDTO interface als volgt geïmplementeerd worden: public void populatefields(hashtable fields) { } command = fields.get("command").tostring(); message=fields.get("message").tostring(); author=fields.get("author").tostring(); public Hashtable extractfields() { Hashtable fields = new Hashtable(); fields.put("message", message); fields.put("author", author); fields.put("command", command); return fields; 17
18 } Command is een attribuut van CommandDTO. Dit is de abstracte klasse die de Interface ICommandDTO implementeert. ChatMessage breidt de CommandDTO klasse uit. Zo kan gebruik gemaakt worden van polymorfisme in de Controller van de server bij het opvangen van het commando. Bij constructie van ChatMessage krijgt command als waarde de string chat. Dataflow binnen het DTO pattern Stel dat de client een chatbericht wil vesturen. Dan zal hij een ChatMessageDTO naar de server sturen. Hierop zal de sever antwoorden met een bericht met een Acknowledgement object. Dat zal een negatieve of positieve bevestiging geven, al naar gelang het succes van de verwerking van het chatbericht op de server. We zullen eerst bekijken hoe een binnenkomend bericht wordt verwerkt. Deze opvolging van methodes is gelijk aan server en client kant. Figuur 11 - Stappen voor transformatie van het antwoord van de server in een DTO Methode A: Aan de serverside luistert deze methode naar berichten die hij krijgt van de client. Deze XML berichten worden doorgegeven aan methode B als String object. Methode A is de run() methode van de SendAndRecieve thread. Deze methode zal na verwerking van het bericht een antwoord terugsturen naar de client. Aan de clientside is deze methode verantwoordelijk voor het openen van de verbinding met de server en het teruggeven van een String object met XML. Methode A wordt hier backendcomms genoemd. Signatuur: String backendcomms(string inputstring); Na het verkrijgen van de string met XML, moet het relevante IObjectDTO er uit worden gehaald. Dit zal in twee stappen worden gedaan: eerst zal de XML algemeen worden ontleed om een object te verkrijgen gebruik makende van de interface IObjectDTO, dan zal het object gecast worden naar het verwachte type. In dit voorbeeld is dit ChatMessage. Methode B: Hier wordt de String met xml omgezet in een IobjectDTO. Signatuur :IObjectDTO convertxmltoiobjectdto(string xml); Methode C: In theorie cast deze methode het IObjectDTO object naar naar ChatMessageDTO object. Aangezien het hier een commando betreft wordt er eerst in de SendAndRecieveThread gecast naar een ICommandDTO. Dit object wordt doorgegeven aan de Controller. Deze zal het dan casten naar een ChatMessageDTO. 18
19 Daarna wordt door de Controller een object van de klasse ChatMessage aangemaakt met de data gewonnen uit het ChatMessageDTO. Het object ChatMessage wordt doorgegeven aan de GameServer. Na het opnemen van het chatbericht zal de Controller antwoorden door een AcknowledgementDTO op te stellen. Zo krijgt de client informatie over het succes van zijn handeling. Bij het versturen van een DTO worden de stappen omgekeerd doorlopen met enkele wijzigingen. Methode C: Methode C komt theoretisch nu eerst aan de beurt. Deze stap is hier echter overbodig aangezien methode B een IObjectDTO object verwacht en er geen cast naar IObjectDTO nodig is (polymorfisme). Methode B: Deze methode zal nu zorgen voor de conversie van IObjectDTO naar een String met xml. Signatuur: String convertiobjectdtotoxml (IObjectDTO iodto); Methode A: Hier zien we dezelfde methode als bij het ontvangen. Nu zal de zendfunctionaliteit van de methode worden aangewend. Klassediagram DTO pattern : 19
20 Figuur 12 - Klassendiagram DTO pattern Communicatie DTO en XML De communicatie tussen server en clients is misschien wel de meest belangrijke schakel van dit project. De focus ligt hierbij voornamelijk op de bestuurbaarheid en structuur. De berichten worden omgezet naar een DTO-object en deze worden bijgevolg naar XML geparsed om zo doorgesluisd te worden over het netwerk waar client en server gebruik van maken. Deze technologieën werden reeds besproken in een vorig hoofdstuk. De server beschikt over een controller die alle binnenkomende DTO-berichten kan afhandelen. Aangezien de client gebaseerd is op het principe van polling, is er dus enkel een controller nodig bij 20
21 de server. Het is de server die interpreteert, verwerkt en antwoordt. De client zal dus op periodieke wijze naar updates vragen waarop de server zal reageren door de nieuwe waarschijnlijk gewijzigde toestand terug te sturen. Ook de andere opdrachtberichten die de spelbediening bevat (move, split,...) worden vanuit de client aan de server doorgegeven. Het komt er dus op neer dat de server enkel reageert en niet ageert. Ter illustratie even volgend schema (figuur DTO-schema) waarbij er bovenaan vanuit de client vertrokken wordt om zo na een circulair proces terug bij de client te eindigen. Client Netwerk Server Server Voor een goede controle en bestuurbaarheid is er geopteerd om een centrale server te bouwen. Deze server zal voortdurend actief zijn. De bedoeling hiervan is dat spelers zich op eender welk tijdstip kunnen aanmelden om een spel te spelen. Een speler zal via zijn client dus rechtstreeks verbinding maken met de main server (MS) om te connecteren via sockets. Het basisprincipe is eigenlijk vrij eenvoudig. De MS zit in een voortdurende lus waarin hij luistert naar clients die proberen te connecteren. Wanneer de MS een verbindingsoproep binnenkrijgt op zijn socket, zal hij deze aanvaarden en vervolgens meteen een SendAndRecieveThread opstarten. Vanaf dat moment zal deze Thread instaan voor de communicatie tussen de client en de server. Het spreekt voor zich dat er voor elke geconnecteerde client zo een SendAndRecieveThread zal opgestart worden. Eens deze communicatielijn opgesteld is, kan de client beginnen met het verzenden van berichten (DTO-objecten) over het netwerk. Het begint uiteraard allemaal door in te loggen. De logindto is hier verantwoordelijk voor. Hoe zo een logindto object er exact uitziet, kan u eventueel nagaan in de bijgeleverde code. Het komt er op neer dat elk DTO-object afgeleid is van de klasse CommandDTO met elk hun specifieke string-id. Dit is belangrijk want elke SendAndRecieveThread heeft zo een controller die binnenkomende pakketten zal verwerken. De controller zal op die manier, aan de hand van de string-id, de juiste verwerkingsprocessen kunnen aanroepen. 21
22 Er volgt een recapitulatie van de zonet beschreven structuur. Er is dus één continu draaiende MS waar clients op connecteren. Elke client krijgt één SendAndRecieveThread om te interageren met de MS. Elke SendAndRecieveThread bevat een controller om de berichten te verwerken. De relaties tussen de verschillende instanties worden nog even opgesomd: Server <-> Client (1...n) Server <-> Databank (1...1) Client <-> SendAndRecieveThread (1...1) SendAndRecieveThread <-> Controller (1...1) Tot slot nog even vermelden dat de MS het enige onderdeel van ons project is dat rechtstreeks in verbinding staat met onze online MySQL databank. Hij gebruikt de databank om accounts af te halen, om ervaringspunten te updaten, enz Gameserver De gameservers (GS) zijn de allerbelangrijkste componenten in ons project omdat ze elk instaan voor beheer van hun speelomgeving. De GS bevat het object Game die op zijn beurt alle speldata bevat. De gameservers zijn afgeleid van de klasse Thread met als die reden dat ze afzonderlijk van elkaar en van de MS moeten kunnen functioneren. De MS bevat een hashmap waarin alle bestaande gameservers opgeslagen zitten. Het is dan ook de MS die een gameserver initialiseert aan de hand van een GameInfo object. De invulling van dit object wordt later besproken. Het bevat simpelweg de parameters (naam, aantal spelers, tijdsmodus, poort, map, status,...) die nodig zijn om een gameserver op te starten naar eigen smaak. Even kort een illustratie van zo een gameserver initialisatie van op de MS: public void startgameserver(string gamename, int timemode, int maxplayers, Map map){ int port = 4444; boolean find = true; while (find){ port++; if(gameports.get(port)){ System.out.println("Starting Gameserver \""+ gamename + "\" on port: " + port); find=false; gameports.put(port, false); GameInfo gameinfo = new GameInfo(gameName, port, timemode, maxplayers, map); GameServer gs = new GameServer(gameinfo); gameservers.put(gameinfo.getgamename(),gs); gameservers.get(gameinfo.getgamename()).start(); } } } codefragment Server.java 22
23 De gameserver zelf is niet alleen een thread die zelfstandig draait, maar tevens vervult hij ook de rol van server, zoals zijn naam doet vermoeden. Het is namelijk zo dat de client een lijst van gameserver te zien krijgt van de main server die voorgesteld wordt in de GuiServerLobby (een visuele voorstelling van de MS). Deze gebruiker zal dan via zijn GuiServerLobby een nieuwe verbinding moeten leggen met de gekozen GS uit de lijst. Dit kan misschien verwarrend lijken, maar het bevordert de bestuurbaarheid immens. De GS bestaat net als de MS ook uit een voortdurende luisterlus waarbij hij de connectie van spelers gaat aanvaarden, maar deze keer toegepast op de spelerslimiet. Een gameserver laat dus net zoveel connecties toe als het aantal spelers dat beschreven staat in zijn GameInfo object. public boolean joingame(account a){ boolean joined = false; int maxplayers = gameinfo.getmaxplayers(); if (accounts.size() < maxplayers) { accounts.add(a); readychecks.put(a.getusername(), false); joined = true; } if (accounts.size() == maxplayers) { gameinfo.setstatus(full); } return joined; } codefragment Gameserver.java Opnieuw start ook dit soort server een SendAndRecieveThread om te kunnen communiceren met de clients. Deze SendAndRecieveThread bevat dan uiteraard ook weer diezelfde controller om de berichten te verwerken. Men kan hier dus opmerken dat er veel over hergebruik van code is nagedacht. Er wordt namelijk gebruik gemaakt van zowel de klasse SendAndRecieveThread als de klasse Controller bij de MS als bij de GS. Merk op dat de client op dit moment twee connecties bezit en dus ook twee communicatielijnen waarover berichten kunnen verstuurd worden. Opnieuw biedt dit tal van voordelen. Het belangrijkste voordeel hiervan is de terugkoppeling naar de MS. Wanneer een client (speler) een gameserver verlaat, sluit hij de connectie met deze GS af, maar hij behoudt de connectie met de MS waardoor hij terug in de ServerLobby terechtkomt. Op dit moment is de client nog steeds ingelogd en kan hij gewoon een nieuwe GS uitkiezen om nog een spel te spelen. Ook dit onderdeeltje wordt even gerecapituleerd. Er zijn dus verschillende continu draaiende gameservers waar een aantal clients op kunnen connecteren. Elke client krijgt opnieuw één SendAndRecieveThread om te interageren met de GS. De relaties tussen de verschillende instanties worden nog even opgesomd: Server <-> Gameserver (1...n) 23
24 Client <-> Gameserver (1...1) Client <-> SendAndRecieveThread (1...1) SendAndRecieveThread <-> Controller (1...1) Hieronder het Klassendiagram van de interactie tussen server en gameserver: Figuur 13 - Klassendiagram netwerklaag server 24
25 Overzicht van DTO-berichten Om een verstaanbaar overzicht te geven van de verschillende DTO-berichten die geïmplementeerd zijn, worden deze DTO-berichten opgesplitst in twee categorieën. Er kan namelijk een onderscheid gemaakt worden tussen DTO-berichten die bestemd zijn voor de main server (MS) en de DTOberichten die bestemd zijn voor de gameserver (GS). De klasse controller is eveneens voorzien om dit onderscheid te kunnen maken. Hoewel er maar één klasse controller geschreven is, kan deze toch zowel voor de MS en GS verwerking gebruikt worden. De klasse controller heeft namelijk twee aparte constructoren waarbij in de ene constructor de MS meegegeven wordt en in de andere de GS. Bij het verwerken van een DTO-opdracht die zowel door GS als MS kan geïnterpreteerd worden, volstaat een simpele test waarbij er getest wordt dat ofwel de MS ofwel de GS verschillend is van null. Dit is eigenlijk overbodig omdat de taken van de MS en de GS in de praktijk zo van elkaar verschillen dat verwarring onmogelijk is. Om toch een voorbeeld op te noemen waarbij er eventueel een null-test zou moeten geimplementeerd worden, kan men het voorbeeld van de chatfuncties aanhalen. Stel je voor dat je zowel in de ServerLobby als in de GameServerLobby wil kunnen chatten. Het chatdto dat de client dan verstuurt heeft op de MS een ander verwerkingsproces dan op de GS. In dit geval is het nodig om de null-test te gebruiken. Dit was even terzijde, want er is geen chatfunctie voorzien op de MS, aangezien dit ons totaal overbodig leek. public class Controller { private GameServer gameserver; private Server server; public Controller(Server server) { this.server = server; } public Controller(GameServer gs) { this.gameserver = gs; }... if (icommanddto.getcommand().equals("update")) { //handle update if (gameserver!= null) { iodto = new GameDTO(gameserver.getGame()); } else { throw new IllegalCommandException("update is not a valid command,"); } }... codefragment Controller.java 25
26 Het voorafgaande codefragment maakt duidelijk hoe de werking van de controller verloopt. Zoals reeds eerder aangegeven is er in de praktijk dus wel degelijk een verschil in de DTO-berichten om de MS aan te spreken met die DTO-berichten om de GS aan te spreken. Aan de hand van deze splitsing volgt er een kort overzicht van de verschillende geïmplementeerde DTO-objecten. De Client-Server interactie: deze vorm van communicatie staat voornamelijk in voor administratieve taken zoals login. Hieronder zullen alle DTO-berichten besproken worden die naar de MS kunnen gestuurd worden en hun antwoord, want elke actie zorgt voor een reactie. LoginDTO (actie) AccountDTO (reactie) De client stuurt zijn logingegevens door aan de MS. Deze laatste verifieert de gegevens en stuurt de opgehaalde account terug naar de client. Dit verifiëren en ophalen van de account omvat interactie met de databank. UpdateGameServersDTO (actie) GameServersInfoDTO (reactie) De client vraagt via polling aan de MS om de nieuwe toestand van de gameservers terug te sturen. Zo kan de client steeds de recentste status van elke GS bekijken (status: WAITING, FULL, PLAYING). NewGameDTO (actie) GameServersInfoDTO (reactie) De client maakt een nieuwe gameserver aan. Hij moet hiervoor bepaalde parameters instellen. Het antwoord van de MS is gewoon een nieuwe update van de gameservers. Op deze manier kan de client zijn lijst van gameservers direct updaten. De Client-Gameserver interactie: deze vorm van communicatie bestaat voornamelijk uit spelopdrachten. Bijgevolg bestaan er dus een pak meer DTO-berichten voor de interactie tussen client en gameserver. JoinDTO (actie) - AcknowledgementDTO (reactie) De client probeert een bepaalde GS binnen te gaan. Het AcknowledgementDTO bevat enkel een boolean. Dit bericht wordt gebruikt wanneer de client moeten laten weten of de overdracht al dan niet geslaagd is. GetLobbyDTO (actie) LobbyDTO (reactie) De client vraagt aan de GS om een nieuwe update van de GameServerLobby te sturen. Dit omvat voornamelijk nieuwe spelers die connecteren op de gameserver. Op deze manier weet de gebruiker ook onmiddellijk welke spelers toegevoegd zijn aan zijn chatomgeving. LeaveGameDTO (actie) AcknowledgementDTO (reactie) De client verlaat de GS. De gameserver laat weten of deze actie geslaagd of niet geslaagd was. ReadyDTO (actie) AcknowledgementDTO (reactie) De client laat aan de GS weten dat hij klaar is. Dit wil zeggen dat de client zijn land, naam en kleur gekozen heeft. Wanneer hij op de button Ready klikt zal hij reactie krijgt of de opdracht al dan niet geslaagd was. Indien de opdracht niet geslaagd was, ligt dit aan het feit dat twee spelers ofwel? éénzelfde kleur, éénzelfde naam of éénzelfde land gekozen hebben. 26
27 IsReadyDTO (actie) AcknowledgementDTO (reactie) De client gaat via polling steeds opvragen of de GS klaar is. De GS is klaar wanneer alle spelers een geslaagde ReadyDTO gestuurd hebben. De GS status wordt dan op PLAYING gezet. Als deze polling een positief resultaat oplevert, dan starten alle clients bijgevolg hun spelgui. UpdateDTO (actie) GameDTO (reactie) De client gaat via polling steeds de nieuwe toestand van het Game object opvragen. De gameserver reageert hier op door via Xstream het volledig Game object over te hevelen. Dit Game object bevat steeds de recentste speldata, aangezien enkel de GS dit object wijzigt. ChatUpdateDTO (actie) - ChatRevisionDTO (reactie) De client gaat via polling steeds de nieuwste chatberichten opvragen. De gameserver bekijkt de revisie van de client en stuurt alle chatberichten die de client nog niet heeft door. ChatDTO (actie) AcknowledgementDTO (reactie) De client verstuurt een chatbericht naar de gameserver. SplitDivisionDTO (actie) AcknowledgementDTO (reactie) De client probeert een divisie op te splitsen. De gameserver zal laten weten aan de client of dit al dan niet gelukt is. MoveDTO (actie) AcknowledgementDTO (reactie) De client probeert een divisie te verplaatsen. De gameserver zal laten weten aan de client of dit al dan niet gelukt is. Timers en delay Het project maakt uitvoerig gebruik van timers en delay-opdrachten om de speelbaarheid een niveau hoger te tillen. Zowel aan de clientside als aan de serverside was er nood aan een paar getimede opdrachten. De client gebruikt timers vooral voor polling. Dit wil zeggen dat de timers ingesteld zijn om na elke tik een bepaalde update te vragen aan de server of gameserver. Dit omvat: chat updates, game updates, updates voor gameserverlijst, updates voor de lobby's. De client zal zo na elke reactie van de server of gameserver steeds de recentste gegevens aan de gebruiker tonen. De gameserver gebruikt timeropdrachten als delay. Dit wil zeggen dat de GS bepaalde opdrachten die hij binnenkrijgt pas mag uitvoeren na verloop van tijd. We hebben hiervoor onze eigen delayqueue ontwikkeld. Een timer zal per tik steeds een progressie parameter aanpassen tot wanneer deze progressie de gewenste waarde bevat, daarna roept hij de juiste verwerkingsinstructies aan om tenslotte de opdracht uit de lijst te verwijderen. De reistijden zijn hier een voorbeeld van. 27
28 Databank Van bij de aanvang van ons project hadden we het idee om een community website te ontwikkelen waarop toekomstige spelers informatie over ons game kunnen vinden en waarop ze statistieken kunnen bekijken. Wij hebben dit dan ook geïmplementeerd in een ASP.net 3.5 applicatie. Nieuwe bezoekers kunnen zich registreren en reeds geregistreerde gebruikers kunnen zich dan inloggen. Op de site kunnen de bezoekers 5 pagina's bezoeken: Home, Gameinfo, Ranking, Contact en Private. Het inloggen gebeurt simpelweg door een sessievariabele bij te houden en eens ingelogd kan de bezoekers natuurlijk ook uitloggen en zijn persoonlijke informatie zien. Op de Ranking-pagina kunnen de gebruikers de huidige top 10 van de spelers vinden, gerangschikt op hun aantal experience points. Deze worden weergegeven door een ListView control uit ASP.Net 3.5. U kan screenshots van de website bekijken in de bijlagen. Deze accounts worden opgeslagen in een MySQL database en zijn tevens dezelfde accounts die in ons game zelf gebruikt worden. Figuur 14 databank In onze databank hebben we 2 tabellen. wieusers en wieranks, in wieusers hebben we de standaardvelden. We hebben er dan voor geopteerd om ene tweede tabel wieranks te maken zodat we later de ranking kunnen wijzigen, zodat we dus de naamgeving hiervan later dynamisch kunnen wijzigen. De ranking hangt dus af van de experience points die de speler opdoet tijdens het spelen en aan de hand daarvan wordt de juiste ranknaam gekozen bijv. korporaal of generaal. Na elk gewonnen spel geven we de winnaar een aantal experience points en geven we de verliezer ook enkele puntjes voor de moeite. Dit systeem is wel nog niet volledig geimplementeerd. Later kunnen we eventueel ook een uitgebreider puntensysteem implementeren dat punten toekent aan het aantal gewonnen battles of het aantal overwonnen vijanden of eventueel zelfs een tijdsgebaseerde puntenteling. Tekortkomingen Wegens tijdgebrek hebben we ons project niet voor de volle 100% kunnen afwerken. 28
Vakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be
Nadere informatie1. Over LEVIY 5. Openen van de activiteit 2. Algemene definities 6. Inloggen op het LEVIY dashboard 3. Inloggen 6.1 Overzichtspagina 3.
Versie 1.0 05.03.2015 02 1. Over LEVIY Wat doet LEVIY? 08 5. Openen van de activiteit Hoe wordt de activiteit geopend? 2. Algemene definities Behandelen van terugkerende definities. 09 6. Inloggen op het
Nadere informatieDatatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
Nadere informatieOefeningen Jaarproject I
Oefeningen Jaarproject I Deze oefeningenreeks behandelt de grafische Scheme bibliotheek die jullie mogen gebruiken voor de implementatie van het Pacman spel. De bibliotheek i is een evaluator voor Scheme
Nadere informatieSoftware Design Document
Software Design Document PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie
Nadere informatieHANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) LES 3 De programma s die we in Les 1 en Les 2 gezien hebben, zagen er niet erg mooi uit. In deze les gaan we er onder andere naar kijken, hoe we de programma
Nadere informatieVraag 1. Vraag 1a TERUGKOPPELING PROEFTENTAMEN. Software architecture
Software architecture IM0203 TERUGKOPPELING PROEFTENTAMEN Vraag 1 Vraag 1a Veel van de in het werkboek besproken patterns kunnen ingezet worden voor het referentiesysteem. We lopen de patterns hier stuk
Nadere informatieKatholieke Hogeschool Kempen ASP
Katholieke Hogeschool Kempen Campus Geel Departement Handelswetenschappen en Bedrijfskunde 3de jaar Toegepaste Informatica ASP www.projectchatroom.be Yorkim Parmentier 3TI4 Andy Geluykens 3TI4 Academiejaar
Nadere informatieLabo 2 Programmeren II
Labo 2 Programmeren II L. Schoofs K. van Assche Gebruik Visual Studio 2005 om een programma te ontwikkelen dat eenvoudige grafieken tekent. Deze opgave heb je vorig academiejaar reeds in Java geïmplementeerd.
Nadere informatieHandleiding CMS. Auteur: J. Bijl Coldfusion Consultant
Handleiding CMS Auteur: J. Bijl Coldfusion Consultant Inhoudsopgave 1.0 Inleiding 3 2.0 Introductie CMS en websites 4 3.0 Inloggen in beheer 5 4.0 Dashboard 6 4.1 Bezoekers totalen 6 4.2 Bezoekers 7 4.3
Nadere informatieNaam project Lost And Found Animals Lokaal gehost Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50%
Naam project Lost And Found Animals Url Lokaal gehost Groepsleden Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50% 1. Beveiliging in de toepassing Naam gebruiker Wachtwoord
Nadere informatieSparse columns in SQL server 2008
Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG
Nadere informatieWebsite van het openbaar ministerie Korte gebruikershandleiding voor Content Managers
Website van het openbaar ministerie Korte gebruikershandleiding voor Content Managers De website van het openbaar ministerie is momenteel (tijdelijk) te vinden op volgende intranetadres: http://10.241.132.229.
Nadere informatieicafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous
icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous 2006-2007 Inhoudsopgave 1 2 1.1 Programmeertaal PHP5..................... 2 1.2 MySQL database......................... 3 1.3 Adobe Flash...........................
Nadere informatieWeb applicatie Tolk- en vertaalaanvragen: Handleiding voor aanvragers SVBBO
Eerste aanmelding Web applicatie Tolk- en vertaalaanvragen: Handleiding voor aanvragers SVBBO Datum release 24/04/2013 Versie 1.0 1. Eerste aanmelding Wanneer u als contactpersoon via het registratiesysteem
Nadere informatieHandleiding digitaal dossier
Handleiding digitaal dossier Handleiding digitaal dossier... 1 Omschrijving... 2 Login met persoonlijke account... 3 Geen persoonlijke account... 3 Automatisch omwisselen naar persoonlijke account... 4
Nadere informatie5. Documenten Wat kan ik met Documenten? 1. Over LEVIY. 5.1 Documenten terugvinden Uitleg over vinden van documenten.
Versie 1.0 23.03.2015 02 1. Over LEVIY Wat doet LEVIY? 08 5. Documenten Wat kan ik met Documenten? 2. Algemene definities Behandelen van terugkerende definities. 09 5.1 Documenten terugvinden Uitleg over
Nadere informatieNACSPORT TAG&GO HANDLEIDING. 3.2.1. Eigenschappen knop
Handleiding NACSPORT TAG&GO HANDLEIDING 1. Introductie 2. Configureren en bestellen 3. Sjabloon (categorieën en descriptors) 3.1 Lijst sjablonen 3.2 Sjablonen bewerken 3.2.1. Eigenschappen knop 4. Analyseren
Nadere informatieProjectHeatmap. Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar
ProjectHeatmap Onderzoeksrapport v0.5 11-03-11 Dennis Wagenaar 1 Inhoudsopgave Inleiding...3 Gheat...4 Info...4 Voordelen...4 Nadelen...4 Google Fusion Tables...5 Info...5 Voordelen...5 Nadelen...5 OLHeatmap...6
Nadere informatieSoftware Design Document
Software Design Document Mathieu Reymond, Arno Moonens December 2014 Inhoudsopgave 1 Versiegeschiedenis 2 2 Definities 3 3 Introductie 4 3.1 Doel en Scope............................. 4 4 Logica 5 4.1
Nadere informatieBLReactions. Copyright 2016 by B-Logicx. All Rights Reserved.
Copyright 2016 by B-Logicx. All Rights Reserved. Inhoudstabel Introductie... 3 Starten... 4 Systeemvereisten... 4 Installatie... 4 Bestandslocaties... 4 Gebruikers interface... 5 Verbinding... 6 Statusweergave...
Nadere informatieInhoudsopgave. Hoofdstuk 1.RMI...2
- CORBA Inhoudsopgave Hoofdstuk 1.RMI...2 1.1.Inleiding...2 1.2.De remote...4 1.3.Het remote...5 1.4.De server...6 1.5.De server opstarten...8 1.6.De client applicatie...8 1.7.De stub en skeleton en...10
Nadere informatieElbo Technology BV Versie 1.1 Juni 2012. Gebruikershandleiding PassanSoft
Versie 1.1 Juni 2012 Gebruikershandleiding PassanSoft Versie 1.1 Juni 2012 2 Inhoud: Opstart scherm PassanSoft... 1 Het hoofdmenu van PassanSoft wordt geopend... 4 Verklaring extra knoppen weergegeven
Nadere informatieKlassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers
1 Inhoud Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 2 Geluidsbronnen simulator, deel 2 Inleiding De weergave versnellen
Nadere informatieHANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)
HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) Vereiste voorkennis Voldoende kennis van het besturingssysteem (in deze handleiding wordt uitgegaan van Windows) De basisprincipes van programmeren Vereiste
Nadere informatieHandleiding voor het gebruik van de community website van OBS t Padland
Handleiding voor het gebruik van de community website van OBS t Padland Versie: 1.1 Datum: 18 juli 2013 Geschreven door: ict@padland.nl 2013 OBS t Padland. Pagina 1 Inhoud Inleiding... 3 Padland Startpagina...
Nadere informatieSwhite bvba Frankrijklei 104 bus 3.1 2000 Antwerpen. support@flux.be flux.be. Flux webdesign. Versie 1.0.2
Swhite bvba Frankrijklei 104 bus 3.1 2000 Antwerpen support@flux.be flux.be Flux webdesign Versie 1.0.2 Inhoudstafel 1. Inleiding... 3 2. Starten... 3 3. Menu... 4 4. Pagina s... 5 4.1. Bewerk de pagina...5
Nadere informatieQuickstart. Browser instellingen
Browser instellingen Projectadministratie is getest onder : Mac OS 10.3 met Safari versie 1.3 Mac OS 10.4 met Safari versie 2.0.3 (417.9.2) Windows met Internet Explorer versie 6.0.2900.2180. Belangrijke
Nadere informatieZorgmail handleiding. Inhoud
Inhoud 1. Beginnen met Zorgmail pag. 2 2. Het instellen van Zorgmail pag. 2 3. Het gebruik van Zorgmail m.b.t. Artsen pag. 3 4. Het aanpassen van de lay-out van Zorgmail pag. 4 5. Werken met Zorgmail pag.
Nadere informatieTemperatuur logger synchronisatie
Temperatuur logger synchronisatie Juni 10, 2010 1 / 7 Temperatuur logger synchronisatie Introductie Twee of meerdere ontvangers van het Multilogger systeem kunnen met de temperature logger synchronisatie
Nadere informatieHandleiding DEMO Digitaal Wedstrijd Formulier (DWF)
Handleiding DEMO Digitaal Wedstrijd Formulier (DWF) 0 Handleiding DEMO Digitaal Wedstrijd Formulier (DWF) Inhoudsopgave Volleybal.nl account aanmaken... 1 Oefenen met Digitaal wedstrijdformulier thuis...
Nadere informatieLes 15 : updaten van gegevens in de database (deel2).
Les 15 : updaten van gegevens in de database (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige lessen en documenten om informatie op te zoeken
Nadere informatieBerichtenbox. Auteur : Rakesh Poeran Datum : 19 mei 2015 Versie : 2014.5 Documentnaam : Berichtenbox
Berichtenbox Auteur : Rakesh Poeran Datum : 19 mei 2015 Versie : 2014.5 Documentnaam : Berichtenbox Inhoud 1. Inleiding 3 2. Inloggen op de berichtenbox 4 3. Lay-out van de berichtenbox 6 3.1 Linker menu
Nadere informatieHoofdstuk 16: Grafieken en diagrammen: hoe
Hoofdstuk 16: Grafieken en diagrammen: hoe 16.0 Inleiding Wanneer je de betekenis van een serie nummers in een presentatie wilt weergeven, zal je ondervinden dat een diagram de meest effectieve manier
Nadere informatie4.4 Voeg ruimtes toe Hoe ga jij te werk? 1. Over LEVIY. 4.5 Aanwezigen Zijn er aanwezigen bij de DKS-controle? 2. Algemene definities. 3.
1. Over LEVIY Wat doet LEVIY? 02 08 4.4 Voeg ruimtes toe Hoe ga jij te werk? 2. Algemene definities Behandelen van terugkerende definities. 09 4.5 Aanwezigen Zijn er aanwezigen bij de DKS-controle? 03
Nadere informatieHandleiding uitwisseling Tekla Structures RFEM versie: Dlubal RFEM 5.02 - Tekla Structures 19.1
Handleiding uitwisseling Tekla Structures RFEM versie: Dlubal RFEM 5.02 - Tekla Structures 19.1 1 Inhoudsopgave: 1 Rekenmodel maken... 3 2 Import in RFEM... 10 3 Export naar Tekla Structures... 15 2 Rekenmodel
Nadere informatieXelion ESPA koppeling Handleiding Beheer V1.6
Xelion ESPA koppeling Handleiding Beheer V1.6 van de Xelion ESPA koppeling. Dit document is bedoeld voor beheerders en operators Inhoud 1 Overzicht... 1 2... 2 2.1 Espa apparaat toevoegen... 4 2.1.1 ESPA
Nadere informatie1. Over LEVIY. 5. Meldingen Wat zijn meldingen? 5.1 Technische melding toevoegen Hoe voeg ik een melding toe?
Versie 1 02 1. Over LEVIY Wat doet LEVIY? 06 5. Meldingen Wat zijn meldingen? 2. Algemene definities Behandelen van terugkerende definities. 07 5.1 Technische melding toevoegen Hoe voeg ik een melding
Nadere informatiePlanbord installatie instructies
Planbord installatie instructies Uit Comprise Wiki Inhoud 1 Basis installatie 1.1 Installeren 1.1.1 Microsoft Data Access Components 1.2 De eerste keer starten 2 Veelgestelde vragen 2.1 "Network resource
Nadere informatieProjectdocument Airport Suite. The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan
Projectdocument Airport Suite The Wright Company: Zehna van den Berg Steven Both Reinier Maas Adolfo Ochagavía Bas Ouwerkerk Thijs van der Zaan December 2013 Contents 1. Overzicht... 4 2. Planning... 5
Nadere informatieDe controlekaart volledige werkloosheid
De controlekaart volledige werkloosheid Mobiele Versie Gebruikershandleiding Inhoudstafel Toegang 4 Algemene beschrijving 6 Bovenaan 7 Het logo van de uitbetalingsinstelling 7 De PDF downloaden 7 Instellingen
Nadere informatieHANDLEIDING DMS Plugin Installatie, configuratie & werking
HANDLEIDING DMS Plugin Installatie, configuratie & werking Dit document is de handleiding voor de installatie, configuratie en werking van de DMS Plugin. Versie 1-12/09/2005 Inhoudstafel 1 Installatie...
Nadere informatieElektronisch factureren
Elektronisch factureren Inleiding Elektronisch Factureren in RADAR is mogelijk vanaf versie 4.0. Deze module wordt niet standaard meegeleverd met de RADAR Update maar is te bestellen via de afdeling verkoop
Nadere informatieAFO 142 Titel Aanwinsten Geschiedenis
AFO 142 Titel Aanwinsten Geschiedenis 142.1 Inleiding Titel Aanwinsten Geschiedenis wordt gebruikt om toevoegingen en verwijderingen van bepaalde locaties door te geven aan een centrale catalogus instantie.
Nadere informatieTechnische nota AbiFire Rapporten maken via ODBC
Technische nota AbiFire Rapporten maken via ODBC Laatste revisie: 23 januari 2018 Inhoudsopgave 1 Inleiding... 2 2 Systeeminstellingen in AbiFire... 3 2.1 Aanmaken extern profiel... 3 2.2 Toewijzing extern
Nadere informatieAPI...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8
API API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8 Identificatie Alle programma's communiceren met elkaar door gebruik te maken van JSON objecten. Het normale
Nadere informatieWEBSHOPKOPPELING. Flexibel, efficiënt & accuraat
WEBSHOPKOPPELING WINGS Software Flexibel, efficiënt & accuraat INHOUDSOPGAVE ALGEMEEN 1.1. Algemeen 3 1.2. Wings Schema webshopkoppelingsmodule 3 1.3. Webshop Wings 5 1.4. Wings Webshop 5 INSTALLATIE 2.1.
Nadere informatieHANDLEIDING. coachtool
HANDLEIDING coachtool INHOUD Inloggen Nieuwe groep aanmaken Groep aanpassen Groepen bekijken Deelnemer bekijken Acties bekijken en op acties reageren Coach berichten maken en reageren Notities maken en
Nadere informatieMOTUS- APP: De gebruikersgids
MOTUS- APP: De gebruikersgids 1 Hoe de MOTUS- app gebruiken Een gebruikersgids voor de web tool van MOTUS is beschikbaar via de webpagina s http://www.motus.vub.ac.be en www.motusdemo.com. Wat nu volgt
Nadere informatieInhoudsopgave. GlinQ: BattleField2 beheertool, Handleiding versie 1.0
Inhoudsopgave Inleiding... 2 Key features... 2 Suggesties... 2 Inlog venster:... 3... 3... 3 General... 4... 4... 4 Advanced:... 5... 5... 5 Maplist:... 6... 6... 6 Players:... 7... 7... 7 Banlist:...
Nadere informatieAutomatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at www.pyrrho.
Automatisering voor Financiële Dienstverleners Werken met Queries en Merge Documenten For more information visit our website at www.pyrrho.com Date: Document Nr: 30 maart, 2007 UBizzMerge, Versie 4.0 Status:
Nadere informatieAAN DE SLAG L O G I S T I E K G E D E E LT E i
AAN DE SLAG LOGISTIEK GEDEELT E i Inhoudsopgave Inleiding... 3 Begin... 4 Schermuitleg... 6 Beschrijving inkoopproces... 7 Beschrijving verkoopproces... 9 Voor veel gestelde vragen (FAQ) kunt u terecht
Nadere informatieHandleiding. Opslag Online voor Windows Phone 8. Versie augustus 2014
Handleiding Opslag Online voor Windows Phone 8 Versie augustus 2014 Inhoudsopgave Hoofdstuk 1. Inleiding 3 Hoofdstuk 2. Installatie 4 2.1 Downloaden van KPN Opslag Online QR Code 4 2.2 Downloaden van KPN
Nadere informatieSoftware Engineering Groep 4
Software Engineering Groep 4 Software Design Description Jeroen Nyckees (Design Manager) Jan-Pieter Hubrecht (Project Manager) 3 e Bachelor Computerwetenschappen se4-1112@wilma.vub.ac.be 11 december 2011
Nadere informatiev.1.11 Verenigingenweb handleiding Genkgo koppeling: Exact Online
v.1.11 Verenigingenweb handleiding Genkgo koppeling: Exact Online Inhoud Welke koppelingen zijn er?...3 Koppeling A ) Synchronisatie profielen (relaties)...3 Koppeling B ) Koppeling van debiteurenkaarten...3
Nadere informatieVoor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:
Eenvoudig voorbeeld. Er wordt verondersteld dat er met VS 2008 EXPRESS gewerkt wordt. Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: (Sommige schermafdrukken zijn afkomstig
Nadere informatieSoftware Design Document
Software Design Document PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage Versie
Nadere informatie1. Milieuklacht... 2 1.1 Handleiding opladen XML in mkros... 2 2. Werken met Refertes... 5
1. Milieuklacht............................................................................................. 2 1.1 Handleiding opladen XML in mkros......................................................................
Nadere informatie1. Introductie 2. Omschrijving 2 Omschrijving van de onderdelen (voorzijde) 2. 2. Algemeen 3
HANDLEIDING Digitale Harddisk Recorder DVR DigitAll CCTV Doornseweg 2a Tel.: 0183-4016346 1. Introductie 2 Omschrijving 2 Omschrijving van de onderdelen (voorzijde) 2 2. Algemeen 3 Opstarten systeem 3
Nadere informatieGebruikers Toevoegen. EasySecure International B.V. +31(0)88 0000 083 Info@EasySecure.nl Support.EasySecure.nl. v2.0.11 22-09-2014
Gebruikers Toevoegen EasySecure International B.V. +31(0)88 0000 083 Info@EasySecure.nl Support.EasySecure.nl v2.0.11 22-09-2014 In deze handleidingen worden de volgende functies binnen de IdentySoft software
Nadere informatieIMP Uitwerking week 13
IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het
Nadere informatiecase: use-case-diagram
Hoofdstuk 9 case: use-case-diagram Dit hoofdstuk beschrijft de totstandkoming van de use-cases voor EasyShop, het maaltijdsysteem van Hans en Jacqueline. Het zijn de functionele systeemeisen die hier worden
Nadere informatieFuel. Handleiding voor installatie en gebruik
Fuel Handleiding voor installatie en gebruik Inhoudsopgave 1. Installatie 2. Gebruik - Windows - Linux / Apple / andere systemen - Een nieuw voertuig aanmaken - Uitgaven 3. Onderhoud - Waarschuwingen -
Nadere informatieSportCTM 2.0 Sporter
SportCTM 2.0 Sporter APP Inloggen Dotcomsport heeft ter ondersteuning van de dagelijkse praktijk ook een APP ontwikkeld, om data invoer te vereenvoudigen. Deze APP ondersteunt de onderdelen; Agenda (invoer
Nadere informatieHoe "PO Omzetten" gebruiken om een factuur te maken van een purchase order
1 / 7 Hoe "PO Omzetten" gebruiken om een factuur te maken van een purchase order 1. Log in op uw OB10-account 2. Selecteer rij "Aanvaard" - Op de homepage van uw OB10-account, onder "Samenvatting van mijn
Nadere informatieNetwerk Interfacing Data Logging.
Handleiding Netwerk Interfacing Data Logging. EduTechSoft.nl 2009-2010 H.O.Boorsma. Pagina - 2 - Netwerk Interfacing Data Logging Pagina - 3 - Inhoud Inleiding.... 4 Beschrijving van het programma....
Nadere informatieINFITT01 - Internettechnologie WEEK 8
INFITT01 - Internettechnologie WEEK 8 Programma Databases (JDBC, JNDI, ORM, JPA) MVC & Spring/Struts EJB Databases Veel web applicaties moeten informatie over langere tijd op kunnen slaan. Een voor de
Nadere informatiePuntjes op de I. Baris Firat
Puntjes op de I Baris Firat 1 Functies en kritieke onderdelen in code (onderdelen die niet in één oogopslag te verklaren zijn) zijn voorzien van comments. Hierbij wordt er gebruikt gemaakt van geldende
Nadere informatieOns privacybeleid. Persoonsgegevens
Ons privacybeleid Persoonsgegevens Op Weethetsnel.nl verzamelen en gebruiken we diverse gegevens van jou. De wet noemt dit persoonsgegevens: alle gegevens die direct of indirect aan jou te koppelen zijn.
Nadere informatie10. BEHEER MODULAIR KWARTAAL
10. BEHEER MODULAIR KWARTAAL In het verleden werden de benuttingscijfers van elke voorziening via Excel formulieren doorgegeven aan Jongerenwelzijn. Deze communicatie is nu ingebouwd in Binc. Op basis
Nadere informatieVariabelen en statements in ActionScript
Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer
Nadere informatieGetting-started tutorial. Versie 1.0
Getting-started tutorial Versie 1.0 Getting-started Apparaat toevoegen Installatie en activatie Getting-started tutorial In deze getting-started tutorial gaan we u helpen met de eerste stappen met ROXY,
Nadere informatieInformatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele
Informatica Objectgeörienteerd leren programmeren Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode Objectgeörienteerd
Nadere informatieSportCTM 2.0 Startscherm trainer
SportCTM 2.0 Startscherm trainer Inloggen Webapplicatie Via inlog.dotcomsport.com kun je in inloggen op de webapplicatie van het SportCTM. Wij adviseren onderstaande browsers Windows: Internet Explorer,
Nadere informatieLandelijk Indicatie Protocol (LIP)
Handleiding Landelijk Indicatie Protocol programma pagina 1 of 18 Landelijk Indicatie Protocol (LIP) Welkom bij LIP Lip is ontstaan uit een toegevoegde module aan het kraamzorg administratie pakket van
Nadere informatieSpraakmakers 1 Handleiding Multimedia voor docenten Pagina 1-1 van 17. Handleiding voor docenten bij Spraakmakers Multimedia
Spraakmakers 1 Handleiding Multimedia voor docenten Pagina 1-1 van 17 Handleiding voor docenten bij Spraakmakers Multimedia Spraakmakers 1 Handleiding Multimedia voor docenten Pagina 1-2 van 17 INHOUD
Nadere informatieHANDLEIDING TRACK & 1. Track & Trace e-mails bewerken 2. 1.1 Algemeen 3 1.2 E-mails 3 1.3 E-mails bewerken 4 1.4 Triggers 4 1.5 Beschikbare Tags 5
HANDLEIDING TRACK & INHOUDSOPGAVE Trigger Based Track & Trace e-mails 1. Track & Trace e-mails bewerken 2 1.1 Algemeen 3 1.2 E-mails 3 1.3 E-mails bewerken 4 1.4 Triggers 4 1.5 Beschikbare Tags 5 2. Track
Nadere informatieEen eerste applicatie
Een eerste applicatie 2.1 Inleiding Programmeren in Visual Basic.NET doe je niet alleen door regels met code te schrijven. Je begint met het ontwerpen van een venster in de design mode met allerlei controls,
Nadere informatieWerkwijze Licenties Use2Day
Werkwijze Licenties Use2Day Versie: 1.1 Laatste wijziging: 23 december 2008 Website: www.use2day.nl Informatie: Info@Use2Day.nl Copyright: 2008 Use2Day Inhoudsopgave 1 Versiehistorie... 3 2 Algemeen...
Nadere informatieTen opzichte van de vorige versie zijn er een aantal functionaliteiten verbeterd, ook zijn er een aantal functionaliteiten toegevoegd:
Gebruikershandleiding Support Website Versie: 1.0 Datum: 17/09/2008 1 Inhoudsopgave 1 Inhoudsopgave... 2 2 Inleiding... 3 3 Overzicht van de pagina s en hun functies... 4 3.1 Login...4 3.2 Home...5 3.2.1
Nadere informatieGEBRUIKERSHANDLEIDING MAAKJETRAINING.NL 1
GEBRUIKERSHANDLEIDING MAAKJETRAINING.NL 1 INHOUD 1 Inleiding 3 1.1 De drie categorieën 3 2 Inloggen op MaakJeTraining 4 2.1 Registreren op MaakJeTraining 4 2.2 Inloggen met account 5 2.3 Veranderingen
Nadere informatieOntwerp van Informatiesystemen
1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents
Nadere informatieXampp Web Development omgeving opzetten onder Windows.
Xampp Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 3. Installatie Xampp... 3 1.1 Installatie Xampp Launcher... 7 1.2 Controle geïnstalleerde bestanden...
Nadere informatieDrICTVoip.dll v 2.1 Informatie en handleiding
DrICTVoip.dll v 2.1 Informatie en handleiding Nieuw in deze versie : Koppeling voor web gebaseerde toepassingen (DrICTVoIPwebClient.exe) (zie hoofdstuk 8) 1. Inleiding Met de DrICTVoIP.DLL maakt u uw software
Nadere informatieInhoudsopgave. Hoofdstuk 1.JMS...2
Inhoudsopgave Hoofdstuk 1.JMS...2 1.1.Inleiding...2 1.2.Messaging architectuur...3 1.2.1.Point to point domein...3 1.2.2.Publish/Subscribe domein...4 1.2.3.Synchrone - asynchrone verwerking...4 1.2.4.De
Nadere informatieSession Beans.
Session Beans joost.vennekens@kuleuven.be Prequel: annotaties Nieuw Java feature Gestructureerde manier om extra info toe te voegen aan code (ipv. commentaar) @Author( name = "Joost Vennekens", date =
Nadere informatieSoftware Test Plan. Yannick Verschueren
Software Test Plan Yannick Verschueren November 2014 Document geschiedenis Versie Datum Auteur/co-auteur Beschrijving 1 November 2014 Yannick Verschueren Eerste versie 1 Inhoudstafel 1 Introductie 3 1.1
Nadere informatieHandleiding DigiRecord.nl
Introductie... 1 Eerste keer inloggen... 1 Dossiersjablonen... 2 Map verwijderen... 3 Map aanmaken... 4 Dossierbeheer... 5 Dossier eigenaar... 7 Gebruikers... 7 Gebruiker... 8 Dossierbeheerder... 8 Beheerder...
Nadere informatieVersturen van email vanuit een Delphi VCL toepassing
Versturen van email vanuit een Delphi VCL toepassing Voor Delphi bestaan uiteraard verschillende libraries om emails te versturen, maar in dit voorbeeld wordt een C# Dotnet library gebruikt en aangesproken
Nadere informatieObject Oriented Programming
Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming
Nadere informatieHANDLEIDING FLEXI-SMS
1 HANDLEIDING FLEXI-SMS Index: 1. Algemeen... p 2 2. Activatie FLEXI-SMS... p 3 3. Hoe verstuur ik SMS en?... p 4 4. SMS en versturen aan een groep klanten (batch SMS)... p 6 5. Versturen van een SMS vanuit
Nadere informatieStarterskit begeleiders ONLI
KON. OLVAC vzw Starterskit begeleiders ONLI Beste, Met trots prestenteert Olvac jullie zijn nieuwste transfer! De club heeft namelijk geïnvesteerd in een nieuwe website, met heel wat troeven. Wij beseffen
Nadere informatiecase: toestandsdiagrammen
Hoofdstuk 13 case: toestandsdiagrammen In dit hoofdstuk wordt het maken van de eerste versie van de toestandsdiagrammen voor het boodschappensysteem van Hans en Jacqueline uitgewerkt. 13.1 Vind klassen
Nadere informatieQUESTI OPSTARTGIDS ALGEMENE INSTELLINGEN EN LVS
01 - WELKOM BIJ QUESTI Welkom bij Questi. Alvorens je opstart, willen we je graag attent maken op enkele zaken. Voor je op de knop inloggen klikt, bekijk je best even de algemene filmpjes onder de knop
Nadere informatieReferences. Handleiding. Intelly B.V. En nu verder (documentmanager)
Intelly B.V. Handleiding En nu verder (documentmanager) References Project : 17V12303 v1.0 Intelly B.V. Datum : 31 juli 2017 Laagveld 1 Auteur : Jenna Geraets 6014 DD ITTERVOORT Organisatie : Intelly B.V.
Nadere informatieDAVE. Migratie Cockpit A BUSINESS INTELLIGENCE ODYSSEY. Inleiding. Voorbereiding
DAVE A BUSINESS INTELLIGENCE ODYSSEY Migratie Cockpit Inleiding De module Migratie zorgt ervoor dat u op een vlotte manier kan overstappen van Cockpit Boekhouding naar Dave Accounting. Dit betekent dat
Nadere informatieQuickstart. 1 Inleiding Welkom bij projectadministratie.nl. 2 Browser en instellingen. 2.1 Browsers. 2.2 Instellingen
1 Inleiding Welkom bij projectadministratie.nl 2 Browser en instellingen 2.1 Browsers Projectadministratie is getest en werkt onder : Safari versie 1.3 en hoger Internet Explorer versie 6 en hoger Google
Nadere informatieChris de Kok 223548 TDI 3. Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren
Chris de Kok 223548 TDI 3 Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren Inhoud Inleiding... 3 Black box / White box... 3 XP... 3 SimpleTest... 3 Eclipse plugin... 4 GroupTest...
Nadere informatieSchoolmail. Handleiding voor het gebruik van je Snorduffel-adres. Druk deze handleiding NIET af. Ze is 25 pagina s lang en je hebt niet alles nodig.
Schoolmail Handleiding voor het gebruik van je Snorduffel-adres. Druk deze handleiding NIET af. Ze is 25 pagina s lang en je hebt niet alles nodig. Wil je meer uitleg of hulp bij het instellen van de juiste
Nadere informatie