Ben door verschillende hoofdstukken gegaan om ze te herschrijven

This commit is contained in:
Bram van der Veen 2015-11-19 20:32:26 +01:00
parent 0be017e706
commit c0d00951ff
5 changed files with 69 additions and 78 deletions

View file

@ -1,15 +1,43 @@
#### In het kort - De broodjeszaak
---
Ik hoop dat ik je geen honger heb gegeven met deze titel, ik moet toegeven dat ik zelf ook honger kreeg toen ik dit voorbeeld bedacht.
Laten we beginnen. Hoe Werkmanrooster werkt is vergelijkbaar met een broodjeszaak, een soort Subway. Jij komt binnen bij een broodjeszaak. Je loopt naar de balie en vraagt naar een bepaald soort broodje. Dit broodje wordt dan vervolgens voor je gemaakt: er worden ingrediënten voorbereid en uiteinelijk op je broodje gedaan. Uiteindelijk word het broodje ingepakt in wat papier met wat servetten, daarna kan je genieten van je broodje.
Laten we beginnen. Hoe Werkmanrooster werkt is vergelijkbaar met een broodjeszaak, een soort Subway. Als jij binnen komt bij een broodjeszaak, dan loop je naar de balie en bestel je een broodje. Dit broodje wordt dan vervolgens voor je gemaakt: er worden ingrediënten voorbereid en uiteinelijk op je broodje gedaan. Uiteindelijk word het broodje ingepakt in wat papier met wat servetten, daarna kan je genieten van je broodje.
Bij Werkmanrooster gaat het ook op deze manier. Als jij bij Werkmanrooster je naam in typt is het alsof jij bij de balie verteld wat voor je broodje je wil. Het persoon wat achter de balie staat weet wat wat er moet gebeuren om dat broodje te maken, afhangend van welk broodje je wil. Hetzelfde geld voor Werkmanrooster. Door jouw naam in te voeren op Werkmanrooster doe jij als het ware een bestelling. Een bestelling van je naam. Het is dan de taak voor Werkmanrooster om alles bij elkaar te zoeken en een rooster aan jou te geven. Bij beide voorbeelden is er in het begin sprake van uitwisseling van informatie. Bij de broodjeszaak is het wat voor soort brood, of je er ook zout en peper op wilt, bij Werkmanrooster is het een naam, docentencode of lokaalcode.
Nadat je een naam of code hebt ingetypt, word er bij Werkmanrooster een zoektocht gemaakt naar de informatie die bij de naam hoort. Die [informatie](http://werkmanrooster.nl/api/search?name=Bram%20van%20der%20Veen) zijn dingen zoals: het leerlingnummer (id) van de leerling, welke klas zit hij in, wat is zijn gebruiksnaam, zijn volle naam, welke afdeling, de link naar en uiteindelijk of we met een [leerling](http://werkmanrooster.nl/api/search?name=Bram%20van%20der%20Veen) of [docent](http://werkmanrooster.nl/api/search?name=bGel) te maken hebben. Deze informatie word allemaal gebruikt om het zoeken naar bepaalde leerlingen, docenten, lokalen en klassen makkelijker te maken, zodat je bijvoorbeeld ook kan zoeken met je leerlingnummer als je weet dat er iemand is met dezelfde voornaam als jij. Als dat allemaal gedaan is word er je rooster gehaald van de [officiële](http://roosters5.gepro-osi.nl/roosters/rooster.php?school=934) roostersite. Wat overblijft is een groot pakket van rauwe informatie.
Dit lijkt allemaal vrij triviaal. Tuurlijk zou je zeggen, dat is inderdaad hoe een broodjeszaak werkt, dat hoef je me niet uit te leggen. Meeste mensen zullen ook vragen wat dit nou te maken heeft met Werkmanrooster. Een goede vraag om te stellen. Het is namelijk zo dat Werkmanrooster en heel veel andere websites, apps en programma's op een soortgelijke manier werken. Laten we kort kijken wat je doet bij Werkmanrooster om je rooster te krijgen.
Deze "rauwe informatie" is net zoals rauw ingredienten. Niemand wil een hele kaas op zijn broodje, met plastic randen er nog aan vast. Nee, jij wil gewoon een plakje kaas. Dit is waarom Werkmanrooster niet die rauwe informatie doorstuurd, maar eerst verwerkt net zoals bij de broodjeszaak waar je kaas eerst in plakjes word gedaan.
Nadat deze rauwe informatie is verwerkt wordt alles bij elkaar gegooid, de informatie die is gevonden bij je zoek opdracht en het rooster wat daar bij hoort. Bij de broodjeszaak zou je nu kijken naar een afgemaakt broodje. Maar zelfs dan is alles nog niet klaar, want als je een lekker broodje eenmaal in je handen hebt kan je misschien knoeien en je handen plakkerig maken. Hiervoor krijg je altijd nog wat mee. Bij de broodjeszaak word namelijk eerst je broodje ingepakt in wat papier zodat het niet gaat knoeien als je er mee rond loopt, en ze geven wat servetten zodat je, wat je dan ook knoeit, kan opruimen. Dit alles word gedaan om het "gebruiksgemak" te maximaliseren. Bij Werkmanrooster wordt de verwerkte informatie ([je rooster](http://werkmanrooster.nl/api/schedule?name=Bram%20van%20der%20Veen&tab=0)) nog in een [webpagina](http://werkmanrooster.nl/rooster/Bram%20van%20der%20Veen) gestopt voor dezelfde principes. Bij Werkmanrooster is het papier en de servetten de website zelf. De website, de zoekbalk en zoekknop zijn er allemaal voor gebruiksgemak.
Je gaat naar [werkmanrooster.nl](http://werkmanrooster.nl) en typt je naam in bij de zoekbalk die je ziet. Werkmanrooster zoekt het rooster voor je op, en verwerkt de informatie tot een leesbaar rooster. Je ziet dat de webpagina voor je geladen wordt en je rooster verschijnt zo voor je neus met wat stijlvol webdesign.
Als dit allemaal is gebeurd ziet het resultaat er ongeveer [zo](http://werkmanrooster.nl/rooster/Bram%20van%20der%20Veen) uit. Of je geniet van je rooster op dezelfde manier als een lekker broodje is natuurlijk de vraag.
Laten we nu de broodjeszaak met Werkmanrooster vergelijken.
| Stap | Broodjeszaak | Werkmanrooster |
| :--: | ------------ | -------------- |
|1| Je vraagt naar je broodje | Je vraagt naar je naam
|2| Ingredienten worden verwerkt (klaargemaakt) | [Je rooster informatie wordt verwerkt](http://werkmanrooster.nl/api/search?name=Bram%20van%20der%20Veen)|
|3| De ingredienten worden op je broodje gedaan| Je rooster informatie wordt gesorteerd in een leesbaar rooster|
|4| Je broodje word ingepakt in wat papier en wat servetten| [Je rooster verschijnt voor je neus met wat stijlvol webdesign](http://werkmanrooster.nl/rooster/Bram%20van%20der%20Veen)|
Je ziet dat er in beide gevallen sprake is van opvragen.
Er is beide gevallen sprake van het verwerken van grondstoffen, of het nou ingredienten zijn of informatie van een rooster.
De verwerkte grondstoffen worden van vervolgens samengevoegd totdat het een geheel vormt.
Het uiteindelijk geheel word ingepakt om het gebruiksvriendelijker te maken.
---
[Volgende (Je gaat naar de website) >>](/intypen)
#### Hoe werktmanrooster
Tijd om ons los te maken van de broodjes en de lekkere dingen. Tijd voor wat details, we gaan nu elke stap weer langs van rooster.io. Klik op de kopjes om alvast naar het bijhorende hoofdstuk te gaan.
##### [Je gaat naar werkmanrooster.nl](/intypen)
Voordat je naar de website gaat zijn er een paar dingen die gebeuren tussen jouw computer en het internet. Je typt `werkmanrooster.nl` in, in je adresbalk. Vervolgens word je gestuurd naar de website. Wat de meeste mensen niet weten is dat er aardig wat processen zijn verlopen in de tijd dat jij op enter hebt gedrukt en wanneer de webpagina voor jou laadt.
##### [Rooster.io gaat een match zoeken van je zoekopdracht.](/opzoek)
Nadat je naam is opgevraagd bij rooster.io gaat de webapplicatie bezig met het vergelijken van jou zoekopdracht met een database vol met informatie van leerlingen, docenten, klassen en lokalen. Als het een overeenkomst vind met jouw zoekopdracht en een stuk informatie in de database, dan wordt die informatie vervolgens gebruikt voor het maken van een rooster.
##### [Het verkrijgen en verwerken van het rooster](/verkrijgen).
In deze stap gaat rooster.io bezig met het gebruiken van de gevonden informatie om een rooster op te halen. Hij doet dit door het downloaden van een rooster aan de hand van de informatie die hij heeft verkregen in de database. Vervolgens wordt deze informatie verwerkt zodat het laten zien kan worden op een webpagina.
##### [Het renderen van het rooster](/renderen).
Maar hoe zorgen we ervoor dat [dit](http://werkmanrooster.nl/api/schedule?name=Bram%20van%20der%20veen) er uit gaat zien als [dat](http://werkmanrooster.nl/rooster/Bram van der Veen)?
Het laatste deel van de rooster.io weg is het geven van de informatie in de vorm van een webpagina. Het verwerkte rooster uit de vorige stap word gestopt in een voorontworpen templaat en word vervolgens gestuurd naar de gebruiker.
[Volgende](/intypen)

View file

@ -1,37 +0,0 @@
#### In het kort - Hoe werktmanrooster
---
We hebben het eigenlijk wel genoeg gehad over broodjes, balies en archieven. Laten we beginnen met het echte werk, de laag van dit profielwerkstuk waar we wat dieper ingaan op alle stof van Werkmanrooster. Bij Werkmanrooster of rooster.io gaat het om de informatie van je rooster zo snel en efficient mogelijk op je scherm krijgen. Hoewel we in dit hoofdstuk niet heel diep in gaan op elk deel van rooster.io, maar gaan we vooral alles globaal uitleggen. De genoemde kopjes zijn natuurlijk apart uitgelegd in hoofdstukken, dus het klikken van de links na het lezen zou voor de benodigde diepgang zorgen. Maar voor we beginnen wat basis begrippen.
##### [Je gaat naar werkmanrooster.nl](/intypen)
Voordat je naar de website gaat zijn er een paar dingen die gebeuren tussen jouw computer in het internet. Je computer vraagt aan een DNS (Domain Name System) waar werkmanrooster.nl word omgezet in een internet telefoonnummer, zo genaamd een "IP adres" waar je computer naar toe gaat om verbinding te maken met de website.
Rooster.io stuurt dan de hoofdpagina, dit is misschien wel het snelste proces wat er gebeurd binnen het systeem. Er is namelijk geen informatie nodig van de gebruiker en de website kan gelijk reageren zonder roosters op te halen. Het enige wat rooster.io hoeft te doen is een pagina te laten zien aan de gebruiker.
Wanneer de gebruiker op enter drukt nadat hij zijn of haar naam heeft ingetypt wordt een heel groot proces aan het werk gezet.
<!-- Op het moment dat de gebruiker op enter drukt wordt namelijk de naam die je hebt ingetypt geüpload naar rooster.io, dat wil zeggen, de informatie wordt vanaf de gebruiker gedeeld naar de server. De server controleerd wat je gestuurd hebt en reageerd op wat je hebt ingevuld. Bijvoorbeeld als je specifieke dingen intypt zoals "hoewerkt" word je naar deze paginas gestuurd. Als je zoekopdracht niet overeenkomt met die speciale gevallen dan doet hij een standaard zoekopdracht naar een rooster. -->
##### [Rooster.io gaat een match zoeken van je zoekopdracht.](/opzoek/normaal)
Rooster.io gaat bezig met het vergelijken van je zoekopdracht met wat het kan vinden in de database. Deze database bestaat uit meerdere datasets van leerlingen, docenten en lokalen. Als er meerdere datasets overeenkomen met de zoekopdracht laat hij een lijst zien van alle gevonden datasets. Als de zoekopdracht overeenkomt met maar één van de datasets uit de database dan gaat rooster.io verder met de volgende stap.
##### Het verkrijgen en verwerken van het rooster.
In deze stap gaat rooster.io bezig met het gebruiken van de gevonden dataset om een rooster op te halen. Hij doet dit door het gerelateerde rooster te downloaden en vervolgens te filteren om het rooster er uit te halen. Hoe deze filter werkt is waar rooster.io het meeste tijd over doet. Om meer functionaliteit toe te voegen zijn wordt alle informatie in de gedownloade pagina zoveel mogelijk gebruikt.
<!-- Nu dat het voorwerk is gedaan, is het eindelijk tijd voor rooster.io om bezig te gaan met waar het om gaat: roosters. Zoals je misschien gezien hebt bij [de informatie](http://werkmanrooster.nl/api/search?name=Bram%20van%20der%20Veen) is er een data waarde genaamd "url". Als je naar deze [url](http://roosters5.gepro-osi.nl/roosters/rooster.php?school=934&type=Leerlingrooster&afdeling=l_atheneum 6&leerling=16374) gaat dan zul je de normale roostersite zien van Schoolmasters. Waar je nu naar kijkt is de informatie die rooster.io ontvangt als hij opzoek gaat naar je rooster. De hoeveelheid informatie die uit deze pagina te halen is lijkt op het eerste gezicht triviaal, maar als je verder kijkt dan wat de gebruiker ziet zul je een grote cluster vinden van informatie die allemaal te gebruiken is voor verschillende doeleindes.
Los van wat je met al die informatie kan doen, gaat rooster.io in dit geval bezig met het verwerken van het rooster op de pagina naar "rauwe informatie". Een dataobject word gemaakt van de verschillende dingen. Een algoritme gaat langs de verschillende dagen, gaat langs elk uur en kijkt naar de volgende dingen:
* Is het een uitgevallen uur?
* Is er een roosterwijziging op het uur?
* Welk uur is het? (1e, 2e, etc)
* Welke docent geeft de les? (bGel, hTig, etc)
* Welk lokaal of welke locatie word er gebruikt in de les? (L2.10, Lfit, etc)
* Wat voor les is het? (WIS, AK, etc)
Rooster.io stopt dan alle uren in de bijhorende dag en stopt dan alle informatie bij elkaar. Het resultaat is een [dataobject](http://werkmanrooster.nl/api/schedule?name=Bram%20van%20der%20veen) wat door rooster.io gebruikt kan worden voor het laten zien van een rooster. -->
##### Het renderen van het rooster.
Maar hoe zorgen we ervoor dat [dit](http://werkmanrooster.nl/api/schedule?name=Bram%20van%20der%20veen) er uit gaat zien als [dat](http://werkmanrooster.nl/rooster/Bram van der Veen)?
Rooster.io maakt gebruik van "templates" om de pagina's zo efficient mogelijk te bieden terwijl de informatie op de pagina wel dynamisch blijft.
<!-- Simpel is het niet, maar het systeem gebruikt aan aantal "[templates](http://git.werkmanrooster.nl/werkmanrooster/rooster-io/tree/master/resources/jade)" of sjablomen. Deze templates zijn gemaakt voor het laten zien van verschillende paginas. Rooster.io heeft er een voor de hoofdpagina, roosters, login en lijsten van mensen. Voor een rooster word het template "schedule" gebruikt. Deze template sorteerd de informatie van het dataobject in een tabel van een webpagina. Het is alsof het dataobject gesmolten ijzer is en het gegoten word in een vorm zodat het bruikbaar word. Er wordt bij het renderen van het rooster ook nog wat extra dingen bij gedaan voor beter gebruiksgemak. -->

View file

@ -1,8 +1,10 @@
#### Inleiding
---
Heel veel mensen op het Werkmancollege locatie Stadslyceum gebruiken een alternatieve manier van hun rooster bekijken. Dit doen ze via Werkmanrooster, een door leerlingen opgerichte website voor het bekijken van je eigen rooster. [Het eerste initiatief](http://web.archive.org/web/20101216064457/http://werkmanrooster.nl/) van [Moet opzoek naar eerste oprichters] toen [overgenomen](http://web.archive.org/web/20140103031959/http://werkmanrooster.nl/) door Daniël Koster & Friso Wobben. Sinds December 2014 was het mijn beurt om het domein in bezit te nemen.
Heel veel mensen op het Werkmancollege locatie Stadslyceum gebruiken een alternatieve manier van hun rooster bekijken. Dit doen ze via Werkmanrooster, een door leerlingen opgerichte website voor het bekijken van je eigen rooster. [Het eerste initiatief](http://web.archive.org/web/20101216064457/http://werkmanrooster.nl/) van een paar leerlingen, toen [overgenomen](http://web.archive.org/web/20140103031959/http://werkmanrooster.nl/) door Daniël Koster & Friso Wobben. Sinds December 2014 was het mijn beurt om het domein te beheren.
Er zijn in die tijd al verschillende versies van Werkmanrooster langsgekomen, dit profielwerkstuk zou echter gaan over mijn tweede versie van Werkmanrooster, genaamd [rooster.io](http://git.werkmanrooster.nl/werkmanrooster/rooster-io). Dit is de versie van werkmanrooster die iedereen heeft gebruikt voor de twee jaar en waar laatst een nieuwe versie van is uitgekomen. Ik ga in mijn profielwerkstuk uitleggen hoe Werkmanrooster in elkaar zit en wat er allemaal gebeurd tijdens en voordat je jouw rooster opvraagd. Ook ga ik antwoorden geven op veel gestelde vragen en nog een ander voorbeeld geven van soort gelijke webapplicatie.
Mijn passie voor programeren en dingen uitzoeken heeft me de laatste paar jaar bezig gehouden met het steeds beter worden in het ontwikkelen van websites, applicaties en andere technische snufjes. Werkmanrooster is daar geen uitzondering op. Dit is dan ook de reden dat ik mijn profielwerkstuk hierover schrijf, omdat ik het heel leuk vind om uit te leggen hoe programeren te werk gaat en misschien mensen iets nieuws laten leren.
Sinds December 2014 was het mijn beurt was het mijn beurt om Werkmanrooster te beheren. Er zijn al veel versies van Werkmanrooster langsgekomen sinds toen, dit profielwerkstuk zou echter gaan over mijn tweede versie van Werkmanrooster, genaamd [rooster.io](http://git.werkmanrooster.nl/werkmanrooster/rooster-io). Dit is de versie van werkmanrooster die iedereen heeft gebruikt voor de twee jaar. Ik ga in dit profielwerkstuk aan jou uitleggen hoe het internet werkt, hoe Werkmanrooster werkt, wat data-gedreven applicaties zijn en nog veel meer.
---
[Volgende (Moeilijkheidsgraad) >>](/moeilijkheidsgraad)

View file

@ -1,16 +1,40 @@
#### Moeilijkheidsgraad - Explain Like I'm Five (ELI5)
#### Moeilijkheidsgraad
---
Als je naar de titel van deze pagina kijkt dan denk je zeker, wat is dit nou weer voor een rare term. Vast voor iets gerelateerd aan programeren of zo iets moeilijks. Gelukkig voor jou, de lezer, is dat het omgekeerde. ELI5 staat voor "Explain Like I'm 5", dat wil zeggen, leg me dit uit alsof ik vijf jaar oud ben. Dit is om ervoor te zorgen dat mijn uitleg voor iedereen begrijpbaar zou moeten zijn. Ik geef van dezelfde hoofdstukken ook nog uitleg op een gemiddeld en een wat hoger niveau, dus mocht je geintereseerd zijn dan is er meer en wat diepgaandere informatie beschikbaar. Aan het begin en aan het eind van elke pagina zijn er dus meerdere knoppen aanwezig voor het verwisselen van moeilijkheid. [Momenteel nog niet beschikbaar/word later toegevoegd].
Bij het maken van de nieuwe versie van werkmanrooster heb ik vooral gedacht aan het schrijven van code die door mensen leesbaar is, en niet alleen door machines.
#### EL15
Als je naar de titel van deze pagina kijkt dan denk je zeker, wat is dit nou weer voor een rare term. Vast voor iets gerelateerd aan programeren of zo iets moeilijks. Gelukkig voor jou, de lezer, is dat het omgekeerde. ELI5 staat voor "Explain Like I'm 5", dat wil zeggen, leg me dit uit alsof ik vijf jaar oud ben. Dit is om ervoor te zorgen dat mijn uitleg voor iedereen begrijpbaar zou moeten zijn. Bij elke pagina zal het van makkelijk naar steeds moelijker gaan verlopen om het zo goed mogelijk uit te leggen.
Mocht je echter nog steeds denken dat je alles snapt, dan daag ik je uit om de [code](http://github.com/96aa48/rooster.io) te lezen. Gelukkig heb ik rekening gehouden met potentiele lezers van de code. Het is namelijk ook belangrijk dat je code leesbaar blijft voor mensen, naast dat het leesbaar is voor computers.
> "Any fool can write code that a computer can understand.
Good programmers write code that humans can understand." -Martin Fowler
Dit allemaal bij elkaar is een poging om alles zo duidelijk mogelijk uit te leggen.
---
Als je het PWS hebt gelezen in de ELI5 versie, kan je doorgaan met de wat [moeilijkere](/moeilijkheidsgraad/normaal) versie.
#### Rooster.io en code
Als wij het hebben over Werkmanrooster dan hebben we het eigenlijk over een website waarop leerlingen hun roosters kunnen bekijken. Ik kan je ook uitleggen hoe het werkt in [grote lijnen](/inhetkort) maar er komt veel meer bij kijken dan alleen een voorbeeld met een broodjeszaak. Werkmanrooster heeft namelijk een tweede naam: [rooster.io](http://github.com/96aa48/rooster.io).
Dit is de naam voor het project, een project wat 100% bestaat uit code. Om een wat dieper begrip van Werkmanrooster en rooster.io te krijgen is het dus belangrijk dat je ook deze kant kent. Ik zou verschillende begrippen gebruiken en uiteraard uitleggen.
Om te beginnen ga ik je wat leren over `code`. `Code` is eigenlijk gewoon een manier waarop je een computer verteld wat hij moet doen. Dit kan door te vertellen welke handelingen hij moet doen, maar ook vooral afwegingen maken tussen verschillende soorten informatie. Sommige dingen zou je wel herkennen van wiskunde bijvoorbeeld de `<`, `>` en `=` tekens. Ook word er in `code` gebruik gemaakt van variabelen (`var`).
Zo'n afweging ziet er als volgende uit in `code`.
```javascript
//Defineer het variabele fount_students en geef het een waarde van 10.
var found_students = 10;
//We weten dat found_students 10 is. 10 is groter dan 1, dus deze afweging klopt.
if (found_students > 1) { //Afweging: als er meer dan één leerling is gevonden
//Als de bovenstaande afweging klopt, wordt deze code uitgevoerd.
}
else {
//Als de eerste afweging niet klopt dan wordt deze code uitgevoerd.
}
```
Bij de andere hoofdstukken zou ik uiteraard nieuwe dingen uitleggen, dus wees bereidt om wat nieuws te leren!
---
[Volgende (In het kort) >>](/inhetkort)
[Volgende >>](/inhetkort)

View file

@ -1,26 +0,0 @@
#### Rooster.io en code
---
Als wij het hebben over Werkmanrooster dan hebben we het eigenlijk over een website waarop leerlingen hun roosters kunnen bekijken. Ik kan je ook uitleggen hoe het werkt in [grote lijnen](/Inhetkort) maar er komt veel meer bij kijken dan alleen een voorbeeld met een broodjeszaak. Werkmanrooster heeft namelijk een tweede naam: [rooster.io](http://git.werkmanrooster.nl/werkmanrooster/rooster-io.git).
Dit is de naam voor het project, een project wat 100% bestaat uit code. Om een wat dieper begrip van Werkmanrooster en rooster.io te krijgen is het dus belangrijk dat je ook deze kant kent. Ik zou verschillende begrippen gebruiken en uiteraard uitleggen.
Om te beginnen ga ik je wat leren over `code`. `Code` is eigenlijk gewoon een manier waarop je een computer verteld wat hij moet doen. Dit kan door te vertellen welke handelingen hij moet doen, maar ook vooral afwegingen maken tussen verschillende soorten informatie. Sommige dingen zou je wel herkennen van wiskunde bijvoorbeeld de `<`, `>` en `=` tekens. Ook word er in `code` gebruik gemaakt van variabelen (`var`).
Zo'n afweging ziet er als volgende uit in `code`.
```javascript
//Defineer het variabele fount_students en geef het een waarde van 10.
var found_students = 10;
//We weten dat found_students 10 is. 10 is groter dan 1, dus deze afweging klopt.
if (found_students > 1) { //Afweging: als er meer dan één leerling is gevonden
//Maak dan een lijst.
}
else { //Als de eerste afweging niet klopt, dan gaat hij naar de volgende
//Laat een rooster zien
}
```
Bij de andere hoofdstukken zou ik uiteraard nieuwe dingen uitleggen, dus wees bereidt om wat nieuws te leren!
---
[Volgende >>](/inhetkort/normaal)