Software Design Descriptions voor Schedule-Generator
|
|
|
- Jurgen van Beek
- 10 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Software Design Descriptions voor Schedule-Generator Matthias Caenepeel Adam Cooman Alexander De Cock Zjef Van de Poel 20 mei 2011 Versie 3.0 1
2 Aanpassingsgeschiedenis. 23/2/2011 versie 0.1: Aanmaak document. 27/2/2011 versie 0.2: Toevoeging delen over interfaces. 28/2/2011 versie 0.3: Toevoeging hoofdstuk over algoritme en Logical. 28/2/2011 versie 1.0: Verbeteringen doorgevoerd. 17/3/2011 versie 1.1: Opmerkingen opdrachtgever in acht genomen en nodige aanpassingen gedaan. Gebruik van de GET en POST methode in de Site - Servlet interface grondiger uitgelegd. 28/3/2011 versie 2.0: Volledige revisie van het document en aanpassingen/toevoegingen doorgevoerd waar nodig.. 20/5/2011 versie 3.0: Volledige revisie van het document. Toevoegine van nieuw algoritme, toevoeging van uitleg over de werking van de servlets op de server, toevoeging van nieuwe klassediagrammas. 2
3 Inhoudsopgave 1 Compositie Design concerns Deployment Diagram Interfaces Design concerns, algemeen Interface: XHTML - CSS voor Layout Interface: XHTML - Javascript voor tabbladen Interface: Javascript - CSS voor tabbladen Interface: XHTML JavaInterface voor HTMLDatatable Interface: Browser - Server: HTTP Interface: Database interface Interface: XML interface Logical Design concerns Elementen Website/Server Communicatie Beknopte achtergrond informatie Inplementatie en Communicatie Session Tracking Overzicht Language Resolving Overzicht Algoritme voor kalenderplanning Inleiding Overzicht van de klasse SemesterScheduler De solver (methode solve() ) Het backtrackingalgoritme per week (methode makeweekschedule) Het aanmaken van Calendarfile (getcalendar() )
4 1 Compositie 1.1 Design concerns Het doel van dit ontwerpstandpunt bestaat er in alle componenten van het systeem te identificeren, hun attributen te kenmerken en hun onderlinge verbanden te beschrijven. Deze beschrijving zal gebeuren aan de hand van een component diagram en het deployment diagram. Beide zijn een onderdeel van de UML 2.0 modelleertaal. 1.2 Deployment Diagram Een deployement diagram geeft weer op welke manier de hard- en software wordt geconfigureerd tijdens de normale werking van het systeem. Hieronder volgt een beschrijving van de belangrijkste componenten in het diagram. Figuur 1: Deployment Diagram Gebruiker Een gebruiker die beschikt over een account kan zich aanmelden op de website via zijn gebruikersnaam en wachtwoord. Vervolgens zal hij beschikken over de functionaliteiten, eigen aan zijn gebruikertype. Als de gebruiker geen account heeft kan hij de site betreden als gast. Er wordt dan geen gebruikersgebonden informatie bijgehouden. Meer informatie over de verschillende gebruikertypes en functionaliteiten is voorzien in het SRS. Persoonlijke Computer Toestel dat de hard- en software aan de gebruikerszijde bevat. Er worden geen onderstellingen gemaakt over de eigenschappen van dit toestel met uitzondering dat het instaat is een webbrowser 4
5 te draaien met eigenschappen gelijkaardig aan die van Internet Explorer, Google Chrome of FireFox. Webbrowser Er worden geen specifieke onderstelling gemaakt met uitzondering van de reeds vermelde. Systeemserver Tijdens de ontwikkeling van het project wordt Wilma als systeemserver gebruikt. De specificaties van de server worden volledig bepaald door de opdrachtgever en kunnen terug gevonden worden op Tomcat Dit is een webcontainer ontwikkeld door Apache die onder andere toelaat servlets te draaien op een Linux server. Deze servlets zullen de vragen van de gebruiker opvangen en op dynamische wijze webinhoud generen als antwoord. Deze webinhoud zal hoofdzakelijk worden beschreven via XHTML en CVS. Voor meer informatie over Tomcat kan men terecht op Database De database maakt onderdeel van de hardware van de systeemserver en bevat zowel de account informatie als de informatie die relevant is voor het opstellen van de lessenroosters. Om gegevens uit de database toegankelijk te maken voor elementen uit de Java runtime environment (JRE) zal gebruikt worden gemaakt van JDBC. Dit is een Java Application Programming Interface ontwikkeld door Sun. Een overzicht wordt gegeven op 5
6 2 Interfaces 2.1 Design concerns, algemeen Database MySQL Servlet JAVA HTTP Webpagina XHTML Stylesheet; CSS Script; Javascript Server Files XML Browser Figuur 2: Overzicht van de verschillende delen van het programma In de structuur van ons programma bestaan verschillende elementen met verschillende taken. Deze moeten met elkaar interageren volgens het bovenstaande schema. De lijnen tussen de verschillende blokken noemen we interfaces en zullen in het volgende deel van het Software Design Document besproken worden. Vooraleer daarmee te beginnen een kort overzicht van de taken die elk blok uit het diagramma uitvoert. Webpagina, XHTML In het XHTML bestand wordt de inhoud van de webpagina geplaatst. Stylesheet, CSS In het stylesheet wordt de lay-out van de webpagina beschreven. Script, Javascript In het script word beschreven wanneer welk deel van de webpagina weergegeven wordt. We gebruiken tabbladen om de functionaliteiten die een gebruiker krijgt duidelijk weer te geven. Ht beheer van die tabbladen gebeurt met het javascript tabber dat ontwikkeld werd door derden; Servlet, JAVA De servlets runnen op tomcat en genereren de XHTML code, afhankelijk van de eigenschappen van de gebruiker. Database In de database wordt de informatie van gebruikers en de kalender opgeslaan. Files De files bevatten wijzigbare parameters van het programma. Ze zijn in een XML bestand opgeslaan. 6
7 Het schema is geen volledig correcte weergave van de werkelijkheid omdat het stylesheet en het script zich ook op de server bevinden en door de browser opgehaald worden van de server via een HTTP protocol. Om volledig correct te zijn zouden die twee onderdelen van het schema zich dus ook op de server moeten bevinden. Om alles overzichtelijk te houden heeft de auteur beslist om ze bij de browser te plaatsen, omdat de browser het ophalen van de server voorziet en niet de gebruiker. 2.2 Interface: XHTML - CSS voor Layout Initialiseren Om het.css bestand aan de XHTML pagina te linken moet in de header van de XHTML code het volgende voorzien worden <link rel="stylesheet" href="style.css" type="text/css"> Hierin zijn de volgende elementen te herkennen: rel="stylesheet": Duidelijk maken dat de link een link naar een stylesheet is. Deze tag verandert niet type="text/css": Duidelijk maken dat de stylesheet in css code geschreven is. Deze tag verandert ook niet href="style.css": De naam van het css bestand. Als die zich op een andere locatie bevindt dan de XHTML pagina moet het pad naar die map hierin toegevoegd worden Gebruiken In de XHTML code moet niet veel toegevoegd worden om de css op te roepen, enkel een id tag op de volgende manier om onderscheid te maken tussen verschillende gedefiniëerde stijlen in de css code. Als voorbeeld wordt het toevoegen van een id aan een rij van een tabel gegeven om aan te tonen hoe dit moet. <tr id="mainbottom"> De naam van het id staat tussen de aanhalingstekens. In het CSS bestand kan de code voor de stijl van hetzelfde id geschreven worden door gebruik te maken van hekje. Als voorbeeld de CSS code die de stijl beschrijfd van de tabelrij uit het vorige voorbeeld. tr#mainbottom { height:300px; } 7
8 2.3 Interface: XHTML - Javascript voor tabbladen Initialiseren Het oproepen van het javascript bestand gebeurt in de header van het XHTML bestand dat de inhoud van de site beschrijft met de volgende code. <script type="text/javascript" src="tabber-minimized.js"></script> Hierin zijn de volgende elementen te herkennen: type="text/javascript": Duidelijk maken dat het javascript is. Deze tag verandert niet src="tabber-minimized.js": De naam van het javascript bestand. Als die zich op een andere locatie bevindt dan de HTML pagina moet het pad naar die map hierin toegevoegd worden Gebruiken Om dan een tabblad aan te maken en er inhoud in te plaatsen wordt gebruik gemaakt van div elementen in de XHTML code. dit gebeurd op de volgende manier: <div class="tabber"> <div class="tabbertab" title="tabblad 1"> Inhoud van het eerste tabblad </div> <div class="tabbertab" title="tabblad 2"> Inhoud van het tweede tabblad </div> </div> In de buitenste div staat het volgenden: class="tabber": dit vertelt aan het javascript dat er tabbladen volgen. Het laat toe om geneste tabbladen te gebruiken In de binnenste divs, één per tabblad: class="tabbertab": dit vertelt aan het javascript dat er tabbladen volgen. Het laat toe om geneste tabbladen te gebruiken title="tabblad 1": In het title tag staat de titel van het tabblad die bovenaan weergegeven wordt 2.4 Interface: Javascript - CSS voor tabbladen Het Javascript tabber dat gebruikt wordt bevat interne links naar het CSS bestand. De exacte werking van de interface is niet gekend omdat tabber een programma is dat geschreven is door derden. De nodige css code werd aan het stijlbestand toegevoegd zodat alles werk. Het is nu mogelijk om de layout van de tabbladen te definiëren in het stijlbestand. De nodige onderverdelingen die toegevoegd moeten worden zijn de volgende: 8
9 .tabberlive.tabbertabhide {}.tabber {}.tabberlive {} ul.tabbernav{} ul.tabbernav li {} ul.tabbernav li a {} ul.tabbernav li a:link {} ul.tabbernav li a:visited {} ul.tabbernav li a:hover{} ul.tabbernav li.tabberactive a{} ul.tabbernav li.tabberactive a:hover{}.tabberlive.tabbertab {} 2.5 Interface: XHTML JavaInterface voor HTMLDatatable Overzicht Het doel van deze interface is om op een eenvoudige manier objecten van de zelfde klasse te kunnen oplijsten in HTML tabellen. Elke klasse die de in een tabel moet worden weergeven, implementeert deze interface. Vervolgens wordt via de aangegeven welke attributen in de tabel moeten verschijnen. Ook de titel van een tabel kan worden geannoteerd Tot slot kunnen de statische methodes van HTMLInterfaceTool worden gebruikt om de tabel te genereren. Klassen AnnotationTool Statsiche klasse die dient als hulp tool voor HTMLInterfaceTool.. Wordt gebruikt om annotaties en methodes uit een klasse te extraheren. HTMLUtil Statische klasse die dient als hulp tool voor HTMLInterfaceTool. Wordt gebruikt om standaard HTML code te generen. HTMLInterfaceTool Statische klasse die de methodes bevat om HTMLDatatable om ze omzetten in een tabel. Deze klasse is afhankelijk van HTMLUtil en AnnotationTool Deze annotatie wordt gebruikt om de getters aan te duiden van de attributen die in een HTML tabel moeten worden weergegeven. De getters mogen geen parameters bevatten. En de annotatie kan enkel worden gebruikt binnen een klasse die HTMLTablable is. De annotatie bevat nog 9
10 Figuur 3: UML Diagramma 10
11 twee parameters: Order: bepaald de volgorde waarin de attributen worden opgelijst. Text: bepaald welke naam het attribuut veld toegewezen Deze annotatie laat toe extra informatie over de tabel te specifieren. Voorlogig enkel de titel van de tabel. 2.6 Interface: Browser - Server: HTTP Concerns Omdat de algemene kalender en andere gegevens in een database op de server zullen opgeslaan zijn en omdat de gebruiker vanop zijn computer thuis via de website die informatie te zien moet krijgen, moet er een communicatie tussen de server en de browser van de gebruiker zijn. Zoals bij de meeste websites werd gekozen om het het HTTP protocol te werken. We laten niet toe dat de gebruikers rechtstreeks met de database communiceren om te vermijden dat ze informatie te zien krijgen die ze niet mogen zien, en om de informatie op een overzichtelijke manier te structureren. Daarom werken we met Servlets die op server runnen en die de besproken taken verrichten. De volgende paragrafen beschrijven dus de communicatie tussen de browser van de gebruiker en de servlets. Attributes Uit het HTTP protocol zullen de GET en POST functies gebruikt worden door onze toepassing. Een HTTP pakket bestaat uit twee delen, de header en de body. GET Deze methode vraagt een bepaalde pagina aan de server en zet alles in de header. Het is de methode die gebruikt wordt bij het klikken op een link van een site. Deze zal dus de meest gebruikte methode zijn om te communiceren met de server. POST Deze methode stuurt informatie door in de body van het paket. De manier waarop de informatie doorgestuurd zal worden hangt af van de plaats. Gevoelige informatie, zoals wachtwoorden zal via een POST verzonden worden, omdat de header gemakkelijk zichtbaar is voor gebruikers. Lange informatie, zoals beschrijvingen van vakken zal ook via de POST methode verzonden worden, omdat de lengte van de header beperkt is. Andere informatie, zoals het opvragen van het lessenrooster zal via de GET methode gebeuren. De waarden van de zoekactie worden dan in de link geplaatst 11
12 door een script dat nog ontwikkeld moet worden en waarvan de interface met de XHTML pagina gelijkenissen zal vertonen met die voor de tabbladen. GET We gebruiken HttpServlets die de doget methode bevatten om een Get aanvraag binnen te krijgen en die te beantwoorden. Beschouw als voorbeeld de volgende servlet. Hij stuurt het antwoord Hallo terug naar de gebruiker als die de juiste URL ingegeven heeft. Welke URL dat is wordt beschreven in een XML bestand dat zich op de server bevindt en een bepaalde URL aan een Servlet koppelt. public class test2 extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("hallo"); } } Om variabelen mee te geven naar de servlet met de GET methode wordt gerbuik gemaakt van een vraagteken. Als een variabele ID meegegeven wordt aan een URL gebeurt dit op de volgende manier: servletnaam?id=waarde in de doget methode kan de waarde van de variabele opgeroepen worden met de getparameter methode: String ID = request.getparameter("id"); POST Bij het gebruik van een GET om variabelen aan de servlet door te geven staan de variabelen en hun waarden allemaal in de URL. Voor gevoelige informatie zoals wachtwoorden, of als er zeer veel informatie doorgegeven moet worden (de maximum lengte van een URL in internet explorer is 2083 tekens) is deze methode niet geschikt. Daarvoor zal de POST methode gebruikt worden. Er zal dus enkel gebruik gemaakt worden van de POST methode bij het verzenden van een HTML Form. Deze HTML structuur bevat velden die ingevuld kunnen worden door de gebruiker en een knop waar de gebruiker op moet klikken om de informatie door te sturen. Om een variabele PASS door te sturen met een POST naar de servlet zou de code voor de form er als volgt uitzien: <FORM METHOD="POST" ACTION="servlet"> <P> 12
13 <INPUT TYPE="PASSWORD" NAME="PASS"><BR> <INPUT TYPE="submit" VALUE="Send"> </P> </FORM> In de begintag van het form wordt de opstuurmethode gedefinieerd in het METHOD attribuut. deze kan de waarden POST en GET aannemen. In het ACTION attribuut wordt de locatie van de servlet waar de form naartoe gestuurd wordt gespecifieerd. Het inputveld waar de gebruiker de data moet invoeren wordt gemaakt met een INPUT tag. Het attribuut NAME definieert de naam van de variabele en het attribuut TYPE definieert de vorm van het invoerveld 1. Als laatste essentieel deel van de Form is er de knop waar de gebruiker moet op klikken om de gegevens door te sturen. Dit is opnieuw een INPUT tag, maar nu van het type submit. in het Value attribuut staat de tekst die op de knop moet weergegeven worden. In de servlet kan de dopost methode geimplementeerd worden om de verschillende forms te verwerken. Opnieuw kunnen de variabelen opgevraagd worden met de getparameter methode: String ID = request.getparameter("pass"); Om meer variabelen mee te sturen met een form, is het mogelijk om onzichtbare INPUT tags te definiëren in het HTML Form. daarmee kan aan de Servlet bijvoorbeeld meegegeven worden welk Form ingevuld is. 2.7 Interface: Database interface Concerns De interface met de MySQL database wordt geleverd door de reeds bestaande java library MySQL Connector/J1 2. Deze biedt de mogelijkheid om queries uit te voeren vanuit Java code en de resultaten van deze query uit te lezen. Om eenvoudig en flexibel te kunnen werken met de database vanuit de object georinteerde code is er een extra interface geschreven rond de MySQL Connector. Deze levert op een eenvoudig te implementeren manier de mogelijkheid om rechtstreeks Java objecten op te slaan en deze ook dusdanig als objecten uit te lezen, met inbegrip van alle onderlinge verbanden tussen de objecten. 1 dit kan veel verschillende vormen aannemen, zie
14 design Figuur 4: Overzicht Figuur 5: Overzicht van belangrijkste klasses en methodes De interface biedt communicatie met de database op basis van objecten die aangeboden of opgevraagd worden aan de interface. De interface zal dan zelf de nodige informatie extraheren vanuit het object om het in de database op te slaan, of zal de juiste informatie in het object steken om het uit de database te lezen. Om deze data extractie correct te laten gebeuren, moet het object aan een bepaald protocol voldoen. Dit protocol dient zich aan onder de vorm van de java interface klasse Databasable. Het object dient deze klasse te implementeren. 14
15 De getters en setters van de parameters die in en uit de database gehaald moeten worden, moeten worden aangeduid met een Annotation. De interface zal tijdens het vertalen via Reflection in Java zo de juiste methodes kunnen selecteren uit de klasse. Meer bepaald: - Getters annoteren - Setters annoteren Tijdens het wegschrijven van een object worden alle parameters die teruggegeven worden door getters opgeslagen in de database. Tijdens het uitlezen worden setters opgeroepen met de waarde die uitgelezen werd uit de database. Elk object krijgt een unieke ID (uniek binnen zijn klasse) wanneer hij naar de Database wordt geschreven. Hierdoor moet een parameter van de klasse ID bijgehouden worden. De gebruiker dient deze slechts te voorzien samen met de methodes van de interface Databasable; de invulling van deze ID gebeurt automatisch. Door dit protocol wordt het schrijven van een object naar de database vereenvoudigd tot het schrijven van: mydatabase.write(myobj); Het uitlezen gebeurt via een Search object, waarmee een bepaald zoek criterium kan opgesteld worden: myobj=mydatabase.read(mysearch); De interface zorgt er ook voor dat de links tussen verschillende objecten ook mee afgehandeld worden. Zie de voorbeelden voor meer detail. Alle voorwaarden om de Databasable interface correct te implementeren zijn te vinden in de Javadoc commentaar van Databasable. Voorbeelden van correcte implementatie zijn te vinden in de google-code repository bij: trunk/database/voorbeeld 2.8 Interface: XML interface Concerns Er bestaan reeds talloze XML parsers, maar omwille van flexibiliteit en modificeerbaarheid is er een eigen parser geschreven. Zo is het huidige format niet meer zuiver xml, maar zijn extra features toegevoegd die extra functionaliteiten toevoegen, maar op een manier dat echte xml parsers de door deze parser gegenereerde xml nog steeds kan weergeven. Design Een boomstructuur van java objecten wordt opgesteld vanuit een xml bestand, of omgekeerd. Uitgedrukt in BNF: 15
16 <XMLDocument> ::= {<XMLElement>} <XMLElement> ::= <ElementWithValue> <ElementWithChildren> <ElementWithChildren> ::= <name><value> <ElementWithChildren> ::= <name>{<xmlelement>} <name> ::= {<any_character_no_space>} <value> ::= {<any_character>} Figuur 6: Voorbeeld van XMLDocument Features Tags Specifieke tags kunnen toegevoegd worden aan de elementen: <element tag=xxx>... </element tag=xxx> Code tag Door deze tag toe te voegen, wordt alle opmaak binnenin het element genegeerd. Dit kan gebruikt worden wanneer men bijvoorbeeld html code wil opslaan in een xml-element. Normaal gezien zouden de html tags interfereren met de xml tags, maar de code-tag zorgt ervoor dat alles wat binnen de tags van het element staat gewoon als tekst aanzien wordt Link tag Deze tag laat toe om links te genereren tussen verschillende xml bestanden. Links worden aangegeven door de link tag, waarna in de value van het element een link kan worden toegevoegd tussen. Zie voorbeeld hieronder: Figuur 7: Link tussen xml files 16
17 Na het inladen van File1.xml heeft element de waarde The selected language is Dutch. 17
18 3 Logical 3.1 Design concerns Om de lessenrooster op te stellen en uit te lezen zijn er verschillende klasses nodig die alle verschillende participerende objecten voorstellen. 3.2 Elementen Entiteiten - Lessen structuur - Course: Les die gevolgd kan worden - Subcourse: Onderdeel van een les; bv hoorcollege, labo of oefeningenles - Program: Verzameling van lessen die in een pakket zitten. Bijvoorbeeld 1e bachelor ingenieurswetenschappen - Gebouwen strucuur - Building: Gebouw - Room: Lokaal in een gebouw waar les gegeven kan worden - Hardware: Materiaal beschikbaar in een lokaal - Personen structuur - Andere Relaties - Student: Persoon die lessen kan volgen - Educator: Persoon die lessen kan geven; zowel professoren, docenten en assistenten - Faculty: Faculteit van de universiteit - Lessen structuur Elke Course bestaat uit een of meerdere SubCourses die in opgeteld het gehele vak weergeven. Courses zelf worden gegroepeerd in een Program. - Gebouwen structuur - Personen Een gebouw beschikt over een lijst met Rooms, die op zich een lijst met beschikbare Hardware bijhoudt. Een gebouw kan ingedeeld worden onder een faculteit. Elke Student is ingeschreven in een Program en een lijst met afzonderlijke Courses die ze volgen. Een Educator beschikt over een lijst Courses en SubCourses die ze geven. 18
19 UML Diagrammma Figuur 8: Dataclasses 4 Website/Server Communicatie 4.1 Beknopte achtergrond informatie De webpaginas worden op de server gegenereerd door een Java Servlet. Deze ontvangt de requests van de website. De website is modulair opgebouwd door middel van tabbladen. Elk tabblad vervult een afgebakende functie (zoals het bekijken van de eigen kalender, het beheer van de cursussen voor de admins,). De tabbladen die een gebruiker te zien krijgt is afhankelijk van zijn gebruikerstype. 4.2 Inplementatie en Communicatie Om de benodigde modulariteit te implementeren bestaat er een aparte java klasse/object voor elke functionaliteit/tabblad. Deze ontvangen de request van de browser wanneer het tabblad zijn pagina opvraagt en genereren aan de hand hiervan een pagina als antwoord. Deze pagina bestaat uit een statisch deel, die uit een template file gelezen wordt. Het dynamische deel wordt aangevuld aan deze template. Om de beveiliging te controleren (gebruikers die tabbladen opvragen waarvoor ze niet gemachtigd zijn) en om de site in verschillende talen te kunnen weergeven, is er een centraal punt nodig die deze taken, gemeenschappelijk aan alle functies, op zich neemt. Hiervoor is er een centrale servlet, MainServlet, opgesteld die alle request van 19
20 de browser ontvangt. De taken zelf worden uitgevoerd door PseudoServlets. De MainServlet stuurt de binnengekregen request door naar de correcte PseudoServlet (public String processrequest()), op basis van een tag in de query string. Doordat alle requests gebundeld worden door de MainServlet, kan deze op basis van de account nagaan of deze de gevraagde PseudoServlet toegankelijk is voor de gebruiker; zo niet kan deze de request tegenhouden en niet doorsturen naar de desbetreffende PseudoServlet. De PseudoServlet krijgt via de methode processrequest() de opdracht om een String te genereren die de html pagina voorstelt. Vooraleer deze String naar de browser wordt doorgestuurd door de MainServlet, zal deze eerst door een vertaler gestuurd worden, zodat elke gebruiker zijn eigen taal kan instellen, zonder dat elke PseudoServlet hier apart rekening mee moet houden. Verder bestaan er ook PseudoServletsForApplets (subklasse van PseudoServlet). Deze genereren via processrequest() een html pagina waarin een Java applet geladen wordt. De applet zelf kan communicatie aangaan met de PseudoServlet om meer informatie in te laden of om zelf informatie door te sturen onder de vorm van geserialiseerde Java objecten. Dit delegeert de MainServlet naar de PseudoServlet via processappletrequest(). De generatie van de totale pagina gebeurt nu eenvoudig. De MainServlet krijgt een request binnen waarvan de id niet is ingesteld. Dit triggert de creatie van een login pagina. Na het inloggen krijgt de gebruiker een id toegewezen die hij met alle requests zal doorsturen ter identificatie (de id wordt gekoppeld aan een account aan de server zijde). Na het inloggen genereert de MainServlet een pagina waarvoor er voor elke PseudoServlet van de gebruiker een tabblad voorzien is. In elk tabblad zit er een iframe waarbij de url naar de desbetreffende PseudoServlet verwijst. De webpagina zal nu alle correcte tabbladen kunnen inladen. 20
21 5 Session Tracking 5.1 Overzicht Als een gebruiker zich succesvol aanmeldt op de website zal de mainservlet voor hem een session aangemaakt die zijn account bevat. Elke session heeft een uniek ID wat de mainservlet toelaat bestaande sessions op te zoeken in een algemene tabel. Telkens de gebruiker een get of post request doet, moet hierbij zijn session id worden meegegeven. Om dit te bereiken wordt aan alle URLs het sessionid van de gebruiker toegevoegd. Op deze mannier kan de mainservlet voor elke request nagaan welke session er bij de gebruiker hoort. UMLDiagrammen Klassen Session Klasse die een websessie voorstelt. Telkens een gebruiker zich succesvol aanmeldt moet de MainServlet een session creren. Deze bevat zowel de accountgegevens van de gebruiker als een sessionid. Elke session die wordt aangemaakt wordt automatisch opgeslagen in een statische sessiontable die vervat zit in de Session klasse. Sessies die aanwezig zijn in deze algemene tabel kunnen worden opgevaagt via de methode getsession. Een session is slecht geldig voor een vooraf bepaalde tijd die men de levenstijd noemt. Als de gebruiker gedurende een volledige levenstijd inactief is gebleven of hij meldt zich af dan wordt de sessie niet langer als geldig bevonden. Dit 21
22 heeft als resultaat dat de gebruiker weer naar het login scherm wordt verwezen. Om vervallen sessions automatisch uit de algemene tabel te verwijderen bevat de Session klasse ook een sessioncleaner. Dit laat toe om sessions van gebruikers die zich niet hebben afgemeld maar toch de site hebben verlaten ook te verwijderen uit de tabel. SessionTable Klasse die wordt gebruikt om session in op te slaan. De sessiontable omsluit een hashtable. Als key van de hashtable wordt het sessionid gebruikt. Als veld wordt een session zelf meegegeven. Het is ook mogelijk om het aantal element in de sessiontabel op te vragen. SessionCleaner Klasse die gebruikt wordt om vervallen sessions automatische te verwijderen. De klasse SessionCleaner implementeert de interface runnable. Dit laat toe om een thread op te starten waarin de run methode van de klasse wordt uitgevoerd. Een sessioncleaner bevat steeds zelf een thread die zijn run methode uit voerd. Het is dus niet nodig om deze extern aan te maken. Tijdens de thread wordt in de toegekende sessiontable sequentieel gezocht naar vervallen sessions. 22
23 Hierbij is het belangrijk dat de toegewezen tabel op een gesynchroniseerde mannier wordt gewijzigd. 23
24 6 Language Resolving 6.1 Overzicht Om het mogelijk te maken aan de gebruiker om de taal van de site aan zijn voorkeur te kunnen aanpassen werd een klassenstructuur ontwikkeld die bepaalde stukken tekst op de webpagina s vervangt volgens de overeenkomstige taal. UMLDiagrammen Klassen LanguageTag Klasse die een vertaalbaar stuk tekst voorstelt. Een languagetag is een string die moet worden vervangen door de languageresolver en wordt gebruikt als een sleutel in een woordenboek. Het format van een languagetag ligt vast en zal worden gecontroleerd als de languagetag wordt gemaakt of gewijzigd. Als het format niet overeenkomt met het verwachte format wordt een DataFormatException gegenereerd. Het huidige format is ##tagname##. Dictionary Klasse die een hashtable omvat met LanguageTags als sleutel en Strings als waarde Een dictionay wordt gebruikt door de LanguageResolver om LanguageTags te vertalen naar een specifieke taal. Normaal worden Dicitonarys gemaakt aan de hand van taalfbestanden. Deze worden gekenmerkt door de.l extensie. Invoer in een taalbestand moeten van de volgende vorm zijn ##language- Tag##=value; De taal gekoppeld aan het woordenboek zal het zelfde zijn als 24
25 de naam van het taalbestand (zonder de extensie). LanguageResolver Een statische klasse die gebruikt wordt door de Main- Servlet om LanguageTags op te lossen De LanguageResolver vertaalt tekst naar een gegeven taal. Dit houdt in dat hij alle LanguageTags in de tekst vervangt door hun overeenkomstige waarde. Hiervoor maakt hij gebruik van een set van Dicitonarys. Deze worden geladen tijdens het maken van het klasse object 25
26 7 Algoritme voor kalenderplanning 7.1 Inleiding Het doel is om op basis van informatie uit de Database een lessenrooster op te stellen dat aan bepaalde vereisten voldoet. Deze informatie zal via een webinterface kunnen worden ingevoerd door daartoe bevoegde personen. De lessenroosters zullen per semester worden opgesteld. Dit gebeurt door een object van een klasse die SemesterScheduler heet. Dit object zal dan per semester CalendarFiles genereren die het lessenrooster beschrijven en deze zullen dan worden opgeslagen in een map op de server. 7.2 Overzicht van de klasse SemesterScheduler Variabelen: Vector<Educator> educators (lijst van de docenten) Vector<Program> programs (lijst van de programmas: bv. 1 Ma EIT) Vector<Room> rooms (lijst van de lokalen) Vector<Course> courses (lijst van de vakken die moeten ingedeeld worden) Bovenstaande vectoren bevatten variabelen uit het package DataStructure, deze klassen bevatten de informatie die nodig is om het lessenrooster op te stellen. Ze zullen uit de Database worden ingeladen met de methode loaddata(). int numberofweeks int startinghour int endinghour Deze drie integers bepalen enkele tijdsdimensies van het lessenrooster. numberofweeks bepaalt het aantal weken van de semester. startinghour en endinghour resp. het begin- en einduur per dag (bv. van 8 tot 18 uur) Hashtable<Educator,Vector<Integer>> unavailablehoursforeducator Hashtable<Program,Vector<Integer>> unavailablehoursforprogram Deze hashing tables zullen bijhouden welke uren er niet meer beschikbaar zijn voor een programma of een docent. Dit om dubbelboekingen te bekomen. Voor de docenten bestaat de mogelijkheid om via de webinterface data in te geven waarop hij of zij niet beschikbaar is. (Zie ook verder bij de klasse Constraint.) 26
27 Methodes: SemesterScheduler() De constructor. solve(...) Deze methode zal het lessenrooster voor heel de semester opstellen en dan de bekomen CalendarFiles wegschrijven in de Database. De lijst van onderstaande methoden zullen verder in dit document worden aangehaald en dan daar worden uitgelegd. generatecalendars() loaddata() createblocks() initializeunavailablehours(...) calcnextnewspace(...) addunavailableblock(...) removeunavailableblock(...) makeweekschedule(...) 7.3 De solver (methode solve() ) Deze methode zal uiteindelijk alle methoden bevatten die ervoor zorgen dat er een lessenrooster wordt opgesteld. In de constructor is de nodige data reeds ingeladen a.d.h.v. de methode loaddata(). De bedoeling is dat er nu per week een lessenrooster wordt opgesteld. Hiervoor is het dus nodig dat de data over het aantal weken worden verdeeld. Het algoritme dat het rooster per week opstelt is een backtrackingalgoritme. De vector courses bevat alle vakken die moet ingedeeld worden per semester. De klasse course bevat echter nog eens een vector met daarin de klasse Subcourse. Deze klasse geeft aan over welk type les (hoorcollege, werkcollege, labo,...) gaat en bevat ook hoeveel uren er van dit type zijn en hoe lang een minimum blok moet zijn. Per Subcourse zullen er objecten van de klasse Subcourseblock gegenereerd worden. Deze klasse heeft een verwijzing naar zijn Subcourse en bevat de lengte van het blok. Deze blocks moeten dan over het lessenrooster verdeeld worden. Deze blocks moeten echter ook nog eens per week ingedeeld worden. Daarom heeft elk object van Subcourse een veld met daarin een beginweek (geeft aan wanneer deze lessen beginnen) en een minimum aantal uur per week. Er zal hiervoor een methode worden opgeroepen die createblocks() heet. Deze geeft een Vector<Vector<Subcourseblock>> terug. Dit interpreteert men als volgt: elke week heeft een vector van Subcourseblocks. De 27
28 index van de buitenste vector geeft de week aan. Vector<Course> Vector<Subcourse> Vector<Vector<Subcourseblock>> De methode createblocks() roept een methode op uit de klasse Subcourseblock; generateblocksperweek(vector<course> courses, int NumberOfWeeks). Pseudocode generateblocksperweek weeks = new Vector<Vector<Subcourseblock>> Maak voor elke week een Vector<Subcourseblock> (for lus) Vraag voor elke Course zijn Subcourses op. (for lus1) Ga elke Subcourse af. (for lus2) Genereer zijn Subcourseblocks (while lus) Verdeel ze over de weken a.d.h.v. zijn beginweek en minimum aantal uur per week. Voeg de Subcourseblock toe bij de juiste week End (while lus) End (for lus2) End (for lus1) End (for lus) Return weeks Vervolgens zal in solve() voor elke week de daarbij horende vector van Subcourseblocks worden de methode makeweekschedule(vector<subcourseblock> blocks, Vector<Room> rooms, int numberofdays) opgeroepen. Deze methode zal dan het backtrackingalgoritme uitvoeren en de bekomen resultaten omzetten in calendarfiles. (Meer over deze methode in de volgende paragraaf.) Pseudocode solve Maak de Subcourseblocks en verdeel ze over de weken. (Vector<Vector<Subcourseblock>> weeks = createblocks()) Ga de vector weeks af en haal er per week de blocks uit. Los dan vervolgens het probleem op per week. (for lus) Vector<Subcourseblock> = blocks makeweekschedule(...) End (for lus) 28
29 7.4 Het backtrackingalgoritme per week (methode make- WeekSchedule) Deze methode zal een vector van Subcourseblocks invullen in lessenrooster. Men geeft de vector mee. Bovendien geeft men ook een vector mee met daarin het aantal beschikbare lokalen. Men geeft ook mee over hoeveel dagen het lessenrooster gespreid is. De SpaceTimeMatrix De methode beschikt reeds over een lijst van blocks die moeten ingedeeld worden in het lessenrooster. Het lessenrooster zelf is echt nog niet voorgesteld. Om dit te doen bestaat er een klasse die SpaceTimeMatrix heeft. Deze klasse zal variabelen bevatten die de tijd-ruimte structuur van het rooster voorstellen, alsook methoden die voor een geplaatste Subcourseblock het uur, de dag en het lokaal in de week teruggegeven. De belangrijktse variabele van deze klasse is de array Matrix met daarin booleans. De booleans geven weer of de plaats in het lessenrooster al dan niet is ingenomen (true == nog vrij, false == reeds ingenomen). De index van de array stelt de tijd-ruimte structuur voor. Dit gebeurt als volgt: Hour loopt van 1 tot (numberofdays*(endinghour-startinghour)-1): bv. 0 tot 39 (Dit stelt dan 40 uur voor. 5 werkdage en elke dag 8 uur) numberofrooms is het aantal lokalen (rooms.size() ) roomnumber is de index van de room in rooms. index = hour * numberofrooms + roomnumber (1) Uit (1) haalt men dan de informatie voor het lessenrooster als volgt: roomnumber = index mod numberofrooms hour = (index (index mod numberofrooms)) / numberofrooms hourinday = hour mod (endinghour-startinghour) (bv. 4e uur van een dag) Day = (hour hourinday) / (endinghour-startinghour) Deze klasse stelt dan het eigenlijke lessenrooster voor. Per Subcourseblock zullen dan de indices worden opgeslagen van de toegekende plaatsen en hieruit haalt men dan de tijdsinformatie. Overzicht van de klasse SpaceTimeMatrix Variabelen: Boolean[] Matrix int startinghour 29
30 Figuur 9: De SpaceTimeMatrix 30
31 int endinghour int numberofdays int numberofrooms Methoden: Het algoritme SpaceTimeMatrix(int startinghour, int endinghour, int numberofdays, int numberofrooms) Methoden om dingen op te vragen of aan te passen in de Space- TimeMatrix changeblockat(int i, Boolean b, int blocksize) checkblockat(int i, Boolean b, int blocksize) iswithinrange(int i) Methoden om de indices om te zetten. givehour(int i) giveroom(int i) givehourinday(int i) giveday(int i) Het algoritme om een weeklessenrooster is pure backtracking. Om dit op een efficinte manier te kunnen verwezenlijken heeft men de klasse Node ontwikkeld. Deze klasse bevat de toegekende Subcourseblock, de plaats in het lessenrooster (m.a.w. de index in de SpaceTimeMatrix) en een verwijzing naar de vorig toegekende Node. Aan de hand van deze verwijzing kan men dan teruggaan naar een vorige stap, als men op een doodlopend spoor terecht komt. Het algoritme zal een vector van Subcourseblocks afgaan en dan steeds een plaats zoeken voor elke Subcourseblock in het lessenrooster; deze gegevens dan in een Node steken en dan naar de volgende Subcourseblock overgaan. Om een plaats te zoeken scant men de SpaceTimeMatrix af en gaat men telkens na of een bepaalde plaats voor die Subcourseblock in aanmerking komt. Om na te gaan of een bepaalde plaats in aanmerking komt, moet men de vereisten voor het lessenrooster nagaan. Deze vereisten worden in de onderstaande kader weergegeven. Vereisten waaraan het rooster moet voldoen: (1) Er mag geen dubbelboeking van een lokaal optreden. (2) Het lokaal moet groot genoeg zijn voor het aantal studenten. (3) Het lokaal moet het nodige materiaal voor een les bevatten. (4) Programmas mogen niet dubbel geboekt zijn. 31
32 (5) Een docent mag niet dubbelgeboekt zijn. (6) Een docent moet beschikbaar zijn. (7) Op vakantiedagen mag er niets gepland zijn. Om deze vereisten na te kunnen gaan, als men een Subcourseblock in een het lessenrooster wilt plaatsen, heeft men de klasse Constraint gecreerd. Deze klasse is een verzameling van statische methodes die steeds een Boolean terug gegeven om aan te geven of er al dan niet aan de vereisten voldaan is (false indien niet, true indien wel). Overzicht van de klasse Constraint int i Dit is de index in de SpaceTimeMatrix die men evalueert. Hieruit kan men alle nodige informatie afleiden (zie ook SpaceTimeMatrix). roomavailableatblock(int i, Room room, Subcourseblock block) Deze methode checkt of het lokaal gedurende periode van het Subcourseblock nog beschikbaar is. (1) roomsufficient(int i, Room room, Subcourseblock block) Deze methode checkt of het lokaal groot genoeg is en het vereiste materiaal bevat. (2) en (3) houravailable(int i, Subcourseblock block, Hashtable hoursavailableforeducator, Hashtable hoursavailableforprogram) Deze methode gaat na of er geen dubbelboekingen zijn voor de docent of voor het programma. hoursavailableforeducator en hoursavailableforprogram zijn objecten van de klasse Hashtable (hashingtables) waarin de vectoren zijn opgeslagen met daarin de reeds toegekende uren voor een docent of voor een programma. (4) en (5) dateavailable(int i, Subcourseblock block) Deze methode gaat na of de dag waarop men iets wilt zetten geen verlofdag is en of de docent op die dag wel beschikbaar is. Dit gebeurt aan de hand van Calendarfiles. Elke docent heeft een persoonlijke Calendarfile en er is een algemene Calendarfile met daarin de verlofdagen voor een semester. Deze methode gaat overlappingen na. Indien er een overlapping is, is er niet aan deze vereiste voldaan. (6) en (7) Tijdens het backtracken, zal er steeds vooraleer men een Subcourseblock kan plaatsen de methode calcnext(int i) worden opgeroepen. Deze methode zal steeds de volgende beschikbare plek in het lessenrooster teruggegeven. Ze gaat de indices van de SpaceTimeMatrix af en de eerst mogelijke die voldoet aan de vereisten wordt teruggegeven. De index die men meegeeft is de laatst toegekende plek in het rooster. 32
33 Het backtrack algoritme: Zolang niet elke block is toegekend (while lus) Zoek een plek in het rooster Plek gevonden: Vul deze plek in SpaceTimeMatrix Maak een Node aan Zorg dat de uren voor de docent en het programma onbeschikbaar zijn End (while lus) Aan elke Subcourseblock zal zijn plaats de SpaceTimeMatrix worden toegekend. Aan de hand van deze informatie zal hij dan de dag, het uur in die dag en het lokaal kennen. Zijn week kent hij ook. Op die manier zal elke Subcourseblock alle informatie bevatten om in een Calendarfile te plaatsen. 7.5 Het aanmaken van Calendarfile (getcalendar() ) Elke Subcourseblock heeft nu een plek in het rooster. Nu moet dit nog omgezet worden in een bruikbare structuur die door gebruikers kan worden geraadpleegd. Hiervoor zal men per Subcourse een Calendarfile maken. De som van al deze Calendarfiles zal dan het hele lessenrooster voor de hele universiteit zijn. De methode getcalendar() zal alle Subcourseblocks afscannen en dan steeds hun Subcourse opvragen. Hiervan vraagt men dan de Calendarfile op en het Subcourseblock zal dan hieraan worden toegekend. 33
Dynamische webapplicaties in Java
Dynamische webapplicaties in Java October 7, 2006 In java is het mogelijk dynamische webpagina s te implementeren. De code om de dynamische gegevens te genereren staat in servlets of Java Server Pages
Software Requirements Specifications voor Schedule-Generator
Software Requirements Specifications voor Schedule-Generator Matthias Caenepeel Adam Cooman Alexander De Cock Zjef Van de Poel 20 mei 2011 Versie 3.0 1 Aanpassingsgeschiedenis. 23/2/2011 versie 0.1: Aanmaak
Software Requirements Specifications voor Schedule-Generator
Software Requirements Specifications voor Schedule-Generator Matthias Caenepeel Adam Cooman Alexander De Cock Zjef Van de Poel 23 februari 2011 Versie 1.1 1 Aanpassingsgeschiedenis. 23/2/2011 versie 0.1:
Les 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
4 ASP.NET MVC. 4.1 Controllers
4 ASP.NET MVC ASP.NET is het.net raamwerk voor het bouwen van webapplicaties. De MVC variant hiervan is speciaal ontworpen voor het bouwen van dergelijke applicaties volgens het Model-View-Controller paradigma.
Documentatie. InstantModules Q42. Versie 1.1
Documentatie InstantModules Q42 Versie 1.1 Inhoudsopgave Inhoudsopgave... 2 Voor gebruikers... 3 InstantComment... 3 InstantTagging... 5 Voor webmasters... 9 InstantComment... 9 InstantTagging... 11 Voor
Werken op afstand via internet
HOOFDSTUK 12 Werken op afstand via internet In dit hoofdstuk wordt uitgelegd wat er nodig is om op afstand met de ROS artikel database te kunnen werken. Alle benodigde programma s kunnen worden gedownload
Handleiding RS Form! 1.0.4
Handleiding RS Form! 1.0.4 Inhoud 1. Controlepaneel... 3 2. Forms Manager... 4 2.1 Nieuwe form aanmaken... 4 2.2 Nieuwe fields toevoegen... 7 2.3 Wijzigen/verwijderen bestaande Forms, Fields... 10 Versie
Formulieren maken met Dreamweaver CS 4/CS 5
Formulieren maken met Dreamweaver CS 4/CS 5 In deze handleiding leer je om een formulier en elementen die je binnen een formulier kunt gebruiken, te ontwerpen met Dreamweaver. Het uitgangspunt is dat dit
Technisch ontwerp. Projectteam 6. Project "Web Essentials" 02 april 2009. Versie 2.1.0
Projectteam 6 Faculteit Natuur en Techniek Hogeschool Utrecht Projectleider: Hans Allis, [email protected] Technisch ontwerp Project "Web Essentials" 02 april 2009 Versie 2.1.0 Teamleden: Armin
icafe 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...........................
Software 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
Beschrijving functioneel en technisch design van de website
Bespreking Punten: Beschrijving functioneel en technisch design van de website Nr. Punt 1 Student 2 Bedrijf 3 Algemene lay out 4 Technologieën 5 Webruimte en datatrafiek 1. Student Registratie Bij de registratie
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2010-2011 21 juni 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief
Les 9: formulier controle met javascript.
Les 9: formulier controle met javascript. Javascript is erg veel gebruikt bij internet toepassingen. In tegenstelling tot PHP, wat een server side scripting is, is java client side scripting. Dwz, niet
DrICTVoip.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
TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise
TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise Inhoudsopgave 1. Voorbereiding... 4 2. Web Service Connector tool configuratie... 5 3. TaskCentre taak voor het aanmaken van
Een website maken met databasetoegang.
Hoofdstuk 5 Een website maken met databasetoegang. In dit hoofdstuk gaan we het weblog dat je in hoofdstuk 4 hebt gemaakt verder uitbreiden. Een belangrijk onderdeel wordt toegevoegd aan de applicatie,
Datatypes 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
Technische 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
Software Requirements Specification
Software Requirements Specification PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage
Programmeren in C++ Efficiënte zoekfunctie in een boek
Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!
Central Station. CS website
Central Station CS website Versie 1.0 18-05-2007 Inhoud Inleiding...3 1 De website...4 2 Het content management systeem...5 2.1 Inloggen in het CMS... 5 2.2 Boomstructuur... 5 2.3 Maptypen... 6 2.4 Aanmaken
Formulieren en waarden posten naar een view
Hoofdstuk 4 Formulieren en waarden posten naar een view Waarden posten naar een view in een Zend-project gaat heel anders dan dat je gewend bent. Om dit mechanisme te leren, kunnen we het beste een eenvoudige
Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen
Installeer Apache2: Deze howto gaat over name based virtual hosting onder Apache 2.x., en is getest onder OpenSUSE 11 maar is in feite ook van toepassing op de andere distributies. Alleen Debian en afgeleide
Module V - XML. Stefan Flipkens - Cursus: Internet - Intranet (2004-2005) V 1
Module V - XML Extensible Markub Language is een eenvoudig en flexibel text-formaat voor de opslag van data. Het is een meta opmaak (markup) taal voor de beschrijving van gestructureerde gegevens. De stukjes
Kleine cursus PHP5. Auteur: Raymond Moesker
Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven
Mach3Framework 5.0 / Website
Mach3Framework 5.0 / Website Handleiding Mach3Builders Inhoudsopgave 1 Inloggen...5 1.1 Ingelogd blijven...6 1.2 Wachtwoord vergeten...7 2 Applicatie keuzescherm...8 2.1 De beheeromgeving openen...9 3
v.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
Technisch Ontwerp W e b s i t e W O S I
Technisch Ontwerp W e b s i t e W O S I WOSI Ruud Jungbacker en Michael de Vries - Technisch ontwerp Website Document historie Versie(s) Versie Datum Status Omschrijving / wijzigingen 0.1 20 nov 2008 Concept
AFO 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.
Handleiding: Whitelabel Customersite
ARGEWEB B.V. Handleiding: Whitelabel Customersite Controlportal.nl Argeweb Support 8-1-2009 Handleiding voor het gebruik maken van de Whitelabel Customersite op controlportal.nl, door Resellers van Argeweb.
Handleiding P2Go upload
24-11-2016 Handleiding P2Go upload In deze handleiding worden het volgende onderwerp besproken: 1. P2Go upload 1. Uitleg P2Go upload Wilt u graag een willekeurige video vanaf uw eigen computer/laptop toevoegen
Gebruikershandleiding voor: Beperkte Password protectie met JavaScript
Gebruikershandleiding voor: Beperkte Password protectie met JavaScript URL: http://home.hccnet.nl/s.f.boukes/html-2/html-202.htm INHOUD : 1. Structuur van een beveiligde site 2. Login-formulier 3. Login
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010
Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief
Software Engineering Groep 4
Software Engineering Groep 4 Software Design Description Jeroen Nyckees (Design Manager) Jan-Pieter Hubrecht (Project Manager) 3 e Bachelor Computerwetenschappen [email protected] 11 december 2011
Test Joomla op je PC 1
1 Disclaimer Bij de samenstelling van dit ebook is de grootst mogelijke zorg besteed aan de juistheid en correctheid van de informatie die in dit ebook wordt verstrekt. De auteur van dit ebook kan op geen
Handleiding planner. Handleiding RoosterPlaats pagina 1
Handleiding planner Handleiding RoosterPlaats pagina 1 In dit document wordt uiteengezet hoe u aan de hand van onderstaande 5 stappen een rooster kan maken. Voordat u kunt beginnen met het creëren van
Een ASP.NET applicatie opzetten. Beginsituatie:
Hoofdstuk 1 Een ASP.NET applicatie opzetten Beginsituatie: Windows XP Pro, Windows Vista Pro of Windows 7 Pro Visual Studio.NET moet zijn geïnstalleerd. Let hierbij op dat de Express versie niet voldoet.
Handleiding 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
Technische nota AbiFire5 Rapporten maken via ODBC
Technische nota AbiFire5 Rapporten maken via ODBC Laatste revisie: 29 juli 2009 Inhoudsopgave Inleiding... 2 1 Installatie ODBC driver... 2 2 Systeeminstellingen in AbiFire5... 3 2.1 Aanmaken extern profiel...
Stappenplannen MailPlus SOAP API
Stappenplannen MailPlus SOAP API Stappenplannen MailPlus SOAP API oktober 2009 Introductie Dit document bevat stappenplannen welke u als technische gebruiker van MailPlus op weg kunnen helpen met de koppeling
Programmeren in Java 3
26 september 2007 Deze les korte herhaling vorige les Unified Modelling Language notatie van een class afleiding pointers abstracte classes polymorphisme dubieuze(?) constructies interfaces Meer over class
Deel 5: Ontleding van een thema en subtheming. 20. YML-bestanden en subtheming
Deel 5: Ontleding van een thema en subtheming 20. YML-bestanden en subtheming Een thema moet voldoen aan bepaalde standaarden. Wat moet een thema zoal bevatten en kunnen we beroep doen op andere basisthema
Software 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
WebUntis 2014 Instructies basisinstallatie
WebUntis 2014 Instructies basisinstallatie Copyright 2013 Untis Benelux Rotterdam Installatie WebUntis 1 1 Algemeen...2 1.1 Java JRE 7... 2 1.2 Apache Tomcat... 2 1.3 Een database.... 4 1.4 JDBC-Driver...
v.1.9 Genkgo Handleiding Genkgo koppeling: Exact Online
v.1.9 Genkgo Handleiding Genkgo koppeling: Exact Online Inhoud Exact Online koppelen aan Genkgo... 3 Welke koppelingen zijn er?...3 Koppeling A ) Synchronisatie profielen (relaties)... 3 Koppeling B )
Een database gebruiken
Een database gebruiken In een vorige handleiding heb ik laten zien hoe je met Scratch soortgelijke gegevens kunt opslaan in een lijst om deze op een later moment weer op te halen. Als voorbeeld las ik
Les 12 : database koppeling, opmaken van template, webstructuur en afdrukken van gegevens. (deel2).
Les 12 : database koppeling, opmaken van template, webstructuur en afdrukken van gegevens. (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige
Software Requirements Specification
Software Requirements Specification PEN: Paper Exchange Network Software Engineering groep 1 (se1-1415) Academiejaar 2014-2015 Jens Nevens - Sander Lenaerts - Nassim Versbraegen Jo De Neve - Jasper Bevernage
Aan de slag met Google Analytics. Deel 1.
Aan de slag met Google Analytics. Deel 1. 1. Google Analytics account aanmaken Stap 1 Via de link http://www.google.com/analytics kan er ingelogd worden bij Google Analytics. Klik op de knop account aanmaken
Informatica. 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
PHP-OPDRACHT SITE BOUWEN
PHP-OPDRACHT SITE BOUWEN PERIODE 4 LEERJAAR 1 Opleiding: Duur: Applicatieontwikkelaar 1 onderwijsperiode (4-8 weken) Voorkennis: Basiscursus PHP 5.4 Victor Peters (978 90 125 8499 9) Basiscursus XHTML,
Proware Cloud Webbuilder Versie 2.30
Proware Cloud Webbuilder Versie 2.30 Laatste update: 02-12-2013 Inhoudsopgave Het principe van open login... 3 Functie- en procedurebeschrijving... 5 Loginfunctie... 5 Bevestigingsfunctie... 5 Demobestanden...
Ga naar http://www.google.com/analytics/. Heb je nog geen google account? Klik dan op: een account aanmaken (figuur 1) en volg de aanmeldprocedure.
Google analytics Een van de modules van mijnhengelsportvereniging.nl is de statistiekenmodule die gekoppeld is met Google Analytics (GA). Via een google account kunnen gegevens over de bezoekers inzichtelijk
INFITT01 Internettechnologie WEEK 2
INFITT01 Internettechnologie WEEK 2 Programma Contexts Listeners Scope/Attributes Thread safety Taken container Een servlet draait in een container (servlet container). De container, die ten dienste van
4.1 4.2 5.1 5.2 6.1 6.2 6.3 6.4
Handleiding CMS Inhoud 1 Inloggen 2 Algemeen 3 Hoofdmenu 4 Pagina s 4.1 Pagina s algemeen 4.2 Pagina aanpassen 5 Items 5.1 Items algemeen 5.2 Item aanpassen 6 Editor 6.1 Editor algemeen 6.2 Afbeeldingen
NOTITIE. Vragen gebruikersgroep
NOTITIE [van] Edward Diemel [voor] Swing gebruikersgroep [kenmerk] n2013-0081ed [plaats] Delft [project] 13057-SWG [datum] 19 maart 2013 [onderwerp] Swing gebruikersdag 19-03-2013 Op 19 maart 2013 heeft
Open Safari op de Mac, ga naar de webpagina www.ros-kabelkrant.nl/ros_download.html en klik op SSH scripts Mac OS X : Figure 1 SSH scripts downloaden
Mac OS X instructie Voor het op afstand werken in de studio wordt gebruik gemaakt van een beveiligde verbinding. Om verbinding te kunnen maken moeten moeten daarom eerst twee code bestanden ( public en
AUTOMATISERING. Act! WerkbonApp. De koppeling tussen het CRM systeem Act! en de Werkbon applicatie WerkbonApp.
Act! WerkbonApp De koppeling tussen het CRM systeem Act! en de Werkbon applicatie WerkbonApp. Act! Act! is een CRM softwarepakket waarmee u uw klanten en contacten kunt beheren. Het bevat alle functionaliteiten
Handleiding RoosterPlaats
Handleiding RoosterPlaats In dit document wordt uiteengezet hoe u aan de hand van onderstaande 5 stappen weergegeven in de Wizard van RoosterPlaats een rooster kunt maken. Deze vijf stappen helpen u bij
Programmeren (1) Examen NAAM:
Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft
Dynamische Websites. Week 2
Dynamische Websites Week 2 AGENDA Labo 1 GET, POST Navigatie, etc Varia 1 2
Hiervoor heeft u toegang nodig met uw persoonlijke account. Vraag uw account aan, aan de hoofd beheerder.
Handleiding Gebruik Download Chrome voor de beste compatibiliteit Aanmelden link: http://www.omegabelgium.com/cms/ Hiervoor heeft u toegang nodig met uw persoonlijke account. Vraag uw account aan, aan
Orbis Software. Debman4U. Release Notes2.10. Dit document bevat de Release Notes van Debman4U V2.10
Orbis Software Debman4U Release Notes2.10 Dit document bevat de Release Notes van Debman4U V2.10 Inhoudsopgave 1. 0 1. 1 1. 2 1. 3 1. 4 Belangrijkste nieuwe functionaliteiten Nieuw design Debman4U Ondersteuning
Inhoudsopgave. 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
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 [email protected] en [email protected]
Handleiding wordpress
Handleiding wordpress Wordpress versie 3.0.4 Handleiding versie 1.1 Auteur Website Geert Hoekzema www.geerthoekzema.nl www.geerthoekzema.nl [email protected] 1 Inhoudsopgave Inleiding... 3 Beginnen
Koppeling met een database
PHP en MySQL Koppeling met een database 11.1 Inleiding In PHP is het eenvoudig om een koppeling te maken met een database. Een database kan diverse gegevens bewaren die met PHP aangeroepen en/of bewerkt
HTML in Outlook 2007. Hoe zorgt u ervoor dat uw email goed in beeld komt?
HTML in Outlook 2007 Hoe zorgt u ervoor dat uw email goed in beeld komt? HTML in Outlook 2007 Inleiding Emark Mail biedt u de mogelijkheid om kant en klare HTML nieuwsbrieven in te laden en te versturen.
Handleiding gebruik Citymail
Handleiding gebruik Citymail Versie : 4.0.1 Jaar : 2014 Auteur : Citymail BV / Charly Traarbach Citymail BV Copyright 1 Citymail BV, Nederland 2014 Niets uit dit document mag worden vermenigvuldigd en/of
HANDLEIDING 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...
Handleiding Aastra 57i
Handleiding Aastra 57i Inhoudsopgave Account Informatie opvragen... 2 Web interface van het toestel openen... 4 Aanmelding Controle... 8 12Connect Support... 9 Begrippenlijst... 10 NB: Om gebruik te kunnen
Beschrijving webmail Enterprise Hosting
Beschrijving webmail Enterprise Hosting In dit document is beschreven hoe e-mail accounts te beheren zijn via Enterprise Hosting webmail. Webmail is een manier om gebruik te maken van e-mail functionaliteit
Configuratie. EasySecure International B.V. +31(0)88 0000 083 [email protected] Support.EasySecure.nl. v2.0.11 22-09-2014
Configuratie EasySecure International B.V. +31(0)88 0000 083 [email protected] Support.EasySecure.nl v2.0.11 22-09-2014 In deze handleiding zal het configuratie menu binnen IdentySoft worden behandeld.
Rapporten. Labels en Rapporten in Atlantis 1. Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports)
Labels en Rapporten in Atlantis 1 Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports) Rapporten Een rapport is eigenlijk altijd een tekst bestand, die vorm wordt gegeven
Websitecursus deel 1 HTML
Websitecursus deel 1 HTML WebCie A Eskwadraat [email protected] 8 april 2015 Inleiding Website cursus in drie delen: HTML CSS Javascript We gaan uit van geen voorkennis. Als je vragen hebt, stel ze!
Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op
1 Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP.... 8 Joomla installeren op XAMPP... 15 Handige links... 16 2 Disclaimer Bij de samenstelling
In de meeste netwerkomgevingen staan de firewalls het browsen of surfen op internet toe.
m:\helpdesk\vgmbox\documenten\handleiding - inzet binnen beveiligd netwerk (dmv proxyserver) - 20110112 - tbv pdf.doc Inzet van De VGM Box binnen een beveiligd netwerk Dit document beschrijft het functioneren
Kluwer Office. DMS Basic Medewerker. Software.kluwer.be
Kluwer Office DMS Basic Medewerker Software.kluwer.be Contents 1 Document Management System... 4 1.1 Alure Desktop... 4 1.1.1 IPad... 4 1.1.2 IMail... 6 1.2 CRM... 8 1.2.1 Algemeen... 8 1.2.2 Padvinder...
4.Starten met Hart & Ziel
4.Starten met Hart & Ziel Scholen kunnen zich gedurende het gehele schooljaar aanmelden voor Hart & Ziel. Besluit uw school om te gaan starten met Hart & Ziel dan worden de schoolgegevens opgevraagd en
Klik op het menu inhoud om te starten met inhoud toe te voegen. Klik daarna op de knop Inhoud toevoegen.
Hoofdstuk 5: Inhoud toevoegen 5.1. Inleiding Klik op het menu inhoud om te starten met inhoud toe te voegen. Klik daarna op de knop Inhoud toevoegen. Binnen Drupal kan zowel een pagina als artikel of als
NAAM: Programmeren 1 Examen 29/08/2012
Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je
Installatiehandleiding Privacy- en Verzendmodule DIS voor Windows, Mac OS en Linux
Installatiehandleiding Privacy- en Verzendmodule DIS Opdrachtgever: Opdrachtnemer: Uitgebracht aan: Nederlandse Zorgautoriteit Uitgebracht door: ZorgTTP Referentie: Installatie PVM_DIS_5.3 Datum: 17-12-2015
Externe pagina s integreren in InSite en OutSite
Externe pagina s integreren in InSite en OutSite Document-versie: 1.1 Datum: 04-10-2013 2013 AFAS Software Leusden Niets uit deze uitgave mag verveelvoudigd worden en/of openbaar gemaakt worden door middel
Project Woningcorporaties Open Source Initiatief Gebruikers handleiding: Verkoop
Project Woningcorporaties Open Source Initiatief Gebruikers handleiding: Verkoop Datum uitgave: 27-01-2009 Deze handleiding is specifiek geschreven voor de verkoop afdeling. Gebruikers handleiding Project
Altijd op de hoogte van de laatste ontwikkelingen.
Beheer Webredactie dashboard Het webredactie dashboard geeft u in één oogopslag een overzicht van de beheersmogelijkheden van uw website. Daarnaast blijft u via het dashboard gemakkelijk op de hoogte van
Opdrachtenboek Query en XML Rapporten
FF Opdrachtenboek Query en XML Rapporten ICS (Informatie, Communicatie en Studenten) Universiteit Leiden Postbus 9512 2300 RA Leiden 071 527 6969 VISI Opdrachtenboek Verzoekschrift Opdrachtgever: VISI
Taxis Pitane Link. (gebruikershandleiding) Censys BV - Eindhoven
Taxis Pitane Link (gebruikershandleiding) Censys BV - Eindhoven Inhoud Wat is Taxis Pitane Link?... 4 Inloggen in Taxis Pitane Link... 5 Wachtwoord vergeten... 6 Startscherm of hoofdmenu... 7 Helpvensters
WebUntis 2014 Instructies basisinstallatie
WebUntis 2014 Instructies basisinstallatie Copyright 2013 Untis Benelux Rotterdam Installatie WebUntis 1 1 Algemeen... 2 1.1 Java JRE 7... 2 1.2 Apache Tomcat... 2 1.3 Een database.... 4 1.4 JDBC-Driver...
Je website (nog beter) beveiligen met HTTP-Security Headers
Je website (nog beter) beveiligen met HTTP-Security Headers Wat is HTTP? Het HTTP (Hypertext Transfer Protocol) protocol is een vrij eenvoudig, tekst gebaseerd, protocol. Dit HTTP protocol regelt de communicatie
PhPlist Gebruikers Handleiding
PhPlist Gebruikers Handleiding Auteur: Sander Duivenvoorden Bedrijf: Buildnet webservices E-mail: [email protected] Datum: 23-09-2008 Laatste wijziging: 17-10-2008 Versie: 1.1 1 Inleiding Het verzenden
IBAN API. Simpel & krachtig. Documentatie : IBAN REST API Versie : 1.0 DE BETAALFABRIEK
IBAN API Simpel & krachtig Documentatie : IBAN REST API Versie : 1.0 DE BETAALFABRIEK Introductie De Betaalfabriek IBAN API is een REST API om IBAN-conversie en validatie te integreren in uw administratiesysteem,
Oefeningen 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
