Twitter Tag: #sqlazure @e_office_com #cloud #azure (Dutch Only)
Source: TechNet Magazine May 2010 (Netherlands) page 50-56. Authors: Joachim Farla and Michiel van Oudheusden.
“Het Windows Azure Platform is productierijp. Het is al in 21 landen beschikbaar. Het is dus tijd om dieper naar de cloud componenten te kijken. En dan in het bijzonder SQL Azure, de relationele database in de cloud, gebouwd op SQL Server 2008. Is in de toekomst de cloud de plek voor software?”
SQL Azure
Wat een winterseizoen hebben we achter de rug! Waar het vorig jaar een lauw tot winterswarm weerbeeld was is het nu ijzig koud. We hebben heerlijk weer om te schaatsen gehad op natuurijs en konden op andere momenten weer heerlijk weg te dromen onder het genot van een wijntje op een beschut terras. Als u naar de ontwikkelingen kijkt in de IT is dit eigenlijk niet anders. We leven in wereld die enorm snel veranderd. Waar u enkele jaren geleden zag dat klanten investeerde in on-premise hardware en software zie je nu dat organisaties voorzichtig de stap naar de “cloud” overwegen. Microsoft Exchange is er als Exchange Online, SharePoint is er als SharePoint Online en Office Communications Server is er als Office Communications Online. Al deze diensten heeft u al voor nog geen 12 euro per maand per gebruiker in één pakket. Voor deze prijs kunt u haast geen on-premise server meer aanschaffen en onderhouden. We leven in de tijd van cloud diensten. Denk bijvoorbeeld ook eens aan de applicaties in uw eigen organisatie. Deze applicaties draaien vaak op on-premise hardware en moeten redundant en in een hoge beschikbaarheid toegankelijk zijn voor alle eindgebruikers. Deze vereisten zijn complex om te realiseren en in onderhoud erg kostbaar voor organisaties. Kijk bijvoorbeeld al aan naar de dure hardwarematige load balancers voor een middelgrote .NET applicatie. Dit moet toch anders kunnen?
Microsoft heeft al sinds 2008 een hele speciale visie op dit gebied. Tijdens de PDC in 2008 werd het nieuwe platform van Microsoft aangekondigd: Windows Azure Platform, het platform voor de cloud. En we kunnen u nu melden dat het Windows Azure Platform productierijp is. Al in 21 landen is het Windows Azure Platform beschikbaar! Niets houdt ons tegen om dieper naar de cloud componenten te gaan kijken en dan in het bijzonder SQL Azure, de relationele database in de cloud gebouwd op SQL Server 2008.
De kennis van uw organisatie zit in de hoofden van mensen. Ook de kennis rondom een specifiek database product als SQL Server. Het belangrijkste in de stap naar SQL Azure is dat deze bestaande kennis niet verloren gaat. Bij SQL Azure is het zo dat databasebeheerders vertrouwd blijven met het product en kunnen dit in grote lijnen op de manier kunnen blijven beheren die ze gewend zijn. Echter hoeft deze beheerder zich nu geen zorgen meer te maken over gegarandeerde uptime van een database of redundantie, omdat dit specificaties zijn die ingebakken zitten in het Azure platform. Ook krijgt een systeembeheerder met SQL Azure minder zorgen, zo is het niet langer nodig om periodiek te controleren of systemen wel gepatched zijn. Voor beheer blijft Microsoft SQL Server Management Studio bestaan, als on-premise beheeromgeving waar vanuit op een eenduidige manier verbinding gemaakt kan worden met de database omgeving binnenshuis en in de cloud.
Bij de keuze voor SQL Azure is een belangrijke vraag of Microsoft uw organisatie kan blijven ondersteunen naarmate uw organisatie groeit en uw SQL storage-behoeftes groeien. Ja is het antwoord: SQL Azure groeit met de organisatie mee en kan meegaan in een snelle toename van de omvang van uw databaseopslag. Denk bijvoorbeeld aan een applicatie die in het hoogseizoen tien maal zoveel registraties van gebruikers erbij krijgt. U wilt bij deze groei niet ervaren dat uw (on-premise) databaseomgeving onvoldoende capaciteit heeft. Microsoft hanteert bij groei het “pay as you grow” model. U betaalt meer naarmate u meer gebruikt en uw betaling schaalt weer terug als u minder capaciteit nodig hebt. Het behoeft geen uitleg dat het opvangen van een snelle groei met een on premise SQL Server of een eigen server in een datacentrum lastig en eigenlijk niet mogelijk is. Het zal daar al snel resulteren in traagheid van een on-premise SQL Server en uiteindelijk downtime van de applicatie.
Deze flexibiliteit om groei op te vangen is een standaard voorziening van de cloud. Wij zullen proberen u inzicht te geven in de werking van SQL Azure. Laten we kijken wat er onder de motorkap zit.
Data in de cloud
We hoeven u vanzelfsprekend niet uit te leggen, dat elke applicatie een vorm van data opslag nodig heeft. In de meest simpelste vorm is dit tijdelijke opslag in het werkgeheugen,maar er is binnen applicaties ook behoefte in permanente opslag, de gegevens gaan dan naar een bestandsysteem of
database toe. Op het Windows platform zal door ontwikkelaars al snel gekozen worden voor een Microsoft SQL Server als data opslag.
Hoe zit dat wanneer de data of de ontwikkelde applicatie of beiden in de cloud draaien? Men krijgt dan te maken met enkele specifieke uitdagingen. Er kan niet zonder meer geschreven worden naar een bestandsysteem. De applicatie moet allereerst ergens in de cloud een database kunnen vinden en er een veilige verbinding mee kunnen maken, maar ook de database zelf moet voldoen aan de eisen die afnemers verwachten van een database als cloud applicatie: schaalbaar, redundant en veilig.
Microsoft SQL Azure is op basis van deze eisen een volwaardige database in de cloud, maar er zijn nog andere cloud-specifieke manieren voor applicaties om data op te slaan. Een applicatie kan namelijk gebruik maken van Tables, Queues en Blobs. Dit zijn vormen van opslag in de Windows Azure Storage service en ze zijn te benaderen via een REST (Representational State Transfer) interface. Dat betekent dat met elke willekeurige programmeertaal via de webstandaarden HTTP, XML, JSON en dergelijke tegen deze stores kan worden geprogrammeerd. Voor de .NET talen is er een ontwikkel kit beschikbaar om dit te vergemakkelijken.
De blobs zijn uitermate geschikt om grote binary data structuren in op te slaan tot wel een terrabyte in grootte. De queues bieden een manier om te communiceren tussen verschillende Azure applicaties en met de tables bent u in staat om snel data op te slaan en via een eenvoudige taal weer op te halen. Daar zit ook meteen het nadeel; hoewel deze diensten snel en gemakkelijk te gebruiken zijn, zijn er ook een aantal belangrijke functionele beperkingen.
De tables zijn bijvoorbeeld niet relationeel, maar bestaan uit simpele properties. Ook is er geen schema beschikbaar en is het niet mogelijk om SQL te gebruiken om deze data met SQL-queries te benaderen.
Daar tegen over staat dat alle data op drie plekken wordt bewaard voor redundantie, enorm schaalbaar is en via standaard manieren, zoals REST, uitgelezen kan worden. Dit laatste betekent dat ook web- of andere applicatie met Java of PHP deze opslagmethoden kan raadplegen en bewerken.
Wilt u de mogelijkheden van een echte relationele database gebruiken, dan biedt Microsoft hiervoor SQL Azure Database aan.
3. Wat is SQL Azure
Of u nu uw applicatie in de cloud host, op een device zoals een telefoon hebt draaien of binnen uw eigen hostingomgeving heeft staan, u kunt altijd verbinding maken met SQL Azure aangezien deze het Tabular Data Stream (TDS) protocol ondersteunt. Dit betekent dat bestaande libraries en tools blijven werken met SQL Azure. Zo kunt u nog steeds gebruik maken van de SQL Server Management Studio en SQL Server Integration Services voor migratie, inrichting en beheer.
SQL Azure is voor u in de rol van DBA namelijk een normale SQL Server omgeving. Er zijn kleine verschillen die u even moet weten. Er ontbreken een aantal zaken, zoals de mogelijkheid om CLR data types te gebruiken, gedistribueerde transacties te doen en de full text search in te zetten. Op dit moment is ook het gebruik van spatial data nog onmogelijk. Maar Microsoft kondigde tijdens de MIX10 aan dit en meer in een volgende release toe te voegen. Ook ontbreken op dit moment functionaliteiten zoals Reporting, Analysis Services, Replication en de Service Broker. U kunt uiteraard wel vanuit een on-premise omgeving van de reporting, analysis server of BI-installatie gebruik maken door te verbinden met uw cloud database.
Aangezien de technici van Azure de SQL Server beheren kan de gebruiker zelf geen parameters van de server veranderen. Azure zorgt zelf voor de juiste instellingen om de server zo optimaal mogelijk te laten werken. Zo wordt alle data op drie verschillende plekken opgeslagen en zijn alle schrijfacties consistent. Ook garandeert het Azure platform een hoge beschikbaarheid zonder dat u hier iets voor hoeft te doen.
Een SQL database op Azure begint standaard met een 1 GB database, dat kost u ongeveer 7 euro per maand en er is een 10 GB versie voor 70 euro per maand. Microsoft heeft een 50 GB versie al aangekondigd. Daarnaast zijn er kosten voor het ingaande en uitgaande verkeer.
U kunt een database op elk moment aanvragen aangezien dit een geheel geautomatiseerd proces is. Binnen enkele minuten na aanvraag is uw database beschikbaar in de cloud. Azure is een utilization platform; u betaalt naar wat u gebruikt. Daarbij kunt u meerdere SQL Azure servers afnemen en binnen elke server meerdere databases draaien. Elke server heeft zijn eigen logins en wordt gehost vanaf een door u ingestelde geografische locatie.
Hoewel er geen limiet is aan de hoeveel data die u kunt opslaan, is er wel een limiet aan een enkele database; deze mag namelijk niet groter zijn dan 10 GB. Om meer data op te slaan, zult u de data moeten verdelen over meerdere databases. Dit is een techniek genaamd database sharding. De data wordt verdeeld over meerdere databases aan de hand van een partitioning key. Soms is deze verdeling (de partitioning) makkelijk te maken. Uw data is mogelijk op te delen in jaren, in verschillende klanten of goed te groeperen per categorie. Of u hierbij nu 3 of 300 databases gebruikt, dat maakt het Azure platform niets uit. Deze techniek is niet alleen geschikt wanneer u over veel data beschikt, maar kan ook helpen om snelle toegang tot uw data toegang te bevorderen omdat er parallel gewerkt kan worden door meerdere databases. Besef wel dat uw applicatie code complexer wordt.
Een SQL Azure database ondersteunt ook het nieuwe OData formaat. Dit kunt u aanzetten op uw database en biedt u de mogelijkheid om via een standaard manier (REST) uw data te delen. De eerder genoemde mogelijkheid van Azure dat u kunt aangeven in welke geografische locatie u uw data wilt opslaan is een belangrijke feature van SQL Azure. Met deze instelling kunt u uw cloud applicatie en database hosten vanuit een datacenter in de buurt van uw klanten.
4. Voor en nadelen SQL Azure
Laten we eens eerlijk tegen ons zelf zijn: is SQL Azure voor iedere organisatie de oplossing? Zeker niet in alle gevallen is SQL Azure de beste keuze als databasevoorziening. Voor uw bestaande on-premise omgevingen moet zeer goed en gedetailleerd gekeken worden welke database componenten er gemigreerd kunnen worden naar de cloud en wat beter binnen uw bedrijfmuren kan blijven staan.
SQL Azure kent in de huidige versie geen backup en snapshot mechanisme, u kunt dus niet zomaar een SQL Azure database backuppen en restoren zoals dat mogelijk is bij een on-premise database. Wel kunt u een database migreren naar het SQL Azure platform met tools die aangeboden wordt op onder andere Codeplex zoals de SQL Azure Migration Wizard. Deze tool maakt voorafgaand aan de migratie van de database naar het SQL Azure platform inzichtelijk welke onderdelen wel en niet gemigreerd kunnen worden. Het hebben van een goed backup en restore mechanisme in de cloud is hierbij van essentieel belang.
SQL Azure Migration Wizard is dus een hulpmiddel om databaseschema's en data te migreren naar de cloud, maar biedt u geen volwaardige backup oplossing. Welke oplossing u ook naar voren schuift om een vorm van een backup te hebben, zoals SSMS of BCP, geen van deze oplossingen kunnen garanderen dat de hele database consistent blijft. Een snapshot van een database kan teruggeplaatst worden, rekening houdend met het moment dat de data corrupt is geraakt.
Een aanpak zou kunnen zijn dat u een kopie van uw SQL Azure database met een restore op een on-premise SQL Server inleest om een periodieke data integriteitscheck te doen. Een enorme winst zou eveneens zijn dat u de on-premise SQL Server in “cloud mode” kan draaien met dezelfde restricties als in de cloud gelden. Zo krijgt u een beter en meer representiever beeld van hoe uw data straks in de cloud aangeboden wordt en kunt u veel eerder correcties doorvoeren, nog voor u daadwerkelijk gaat migreren.
Microsoft noemt de Sync Framework technologie een manier om data eenvoudig te synchroniseren tussen de cloud, on premise en devices zoals telefoons. Echte cloud backup opties, zoals database clone en continuous backup, zijn al wel aangekondigd door Microsoft en worden dit jaar nog verwacht.
Staat uw applicatie on-premise maar uw database in de cloud, denk er dan aan dat het data verkeer over het algemeen trager is dan wanneer uw applicatie en database dicht bij elkaar staan. Aangezien u ook betaalt over het ingaande en uitgaande verkeer van SQL Azure kunnen de kosten snel oplopen wanneer u veel verbruikt.
Aangezien uw databases niet meer bij u on-premise staan, moet u vertrouwen hebben in de partij (en ook het land) die u uw data in de cloud host. Dit geldt uiteraard voor alle cloud diensten en aanbieders.
Buiten de verschillende nadelen die wij net noemden, zijn er ook een groot aantal voordelen te behalen met SQL Azure. Denk aan het voordeel dat dezelfde beheerinterface wordt gebruikt. U in uw rol als DBA kunt gewoon naar een database connecten vanuit SQL Server Management Studio. Hetzelfde geldt bij het werken met SQL Azure vanuit Microsoft Visual Studio, waar uw ontwikkelaars profijt van hebben.
Ook het schaalbare model en hoge beschikbaarheid van uw database zijn een groot voordeel.
Binnen organisaties is het niet nodig de kennis ten aanzien van database en IT-Development als verloren te beschouwen, maar deze kennis juist weer nieuw leven in blazen. DBA'ers maar ook systeembeheerders hoeven niet opnieuw opgeleid te worden om met deze technologie aan de slag te gaan.
5. Starten met SQL Azure
Ervaring opdoen met SQL Azure is makkelijk. Om een SQL Azure database aan te kunnen maken heeft u een Live Id nodig zodat er achteraf afgerekend kan worden. Met dit account kunt u op de website http://sql.azure.com de Azure diensten aanvragen
U maakt een database server aan door een administrator account aan te maken en te bepalen op welke geografische locatie de server zich moet bevinden.
Hierna komt u in het scherm waar, naast het wijzigen van het wachtwoord, twee opties zijn te vinden; het beheren van databases en het beheren van de firewall. Standaard kan er namelijk geen verbinding gemaakt worden met de database, u moet hiervoor de firewall open zetten.
Daarna via de portal, maar ook via SQL Management Studio, is het mogelijk om nieuwe databases toe te voegen. Standaard is er uiteraard een master database. Deze bevat bij SQL Azure onder andere ook de firewall rules en heeft stored procedures om deze aan te passen. Hier is ook informatie over de werklast van SQL Azure te vinden.
Verbinden met SQL Management Studio is eenvoudig. U geeft de servernaam op zoals deze terug te vinden is in het portaal en u gebruikt uw eerder aangemaakt administrator accountgegevens om uzelf aan te melden. Vergeet hierbij niet uw IP adres toe te voegen in de firewall.
Met SQL statements of andere tooling is het dan mogelijk om een database te raadplegen, het schema te genereren en data te importeren.
6. Beheren van gebruikers in SQL Azure
Bij het aanmaken van een SQL Azure database zijn een aantal instellingen voorgedefinieerd in de master-database. Zo is er een login aangemaakt die de “server-level principal” is voor de SQL Azure Server. Deze login is vergelijkbaar met het sa account voor een instance op een on-premise SQL Server. Het SQL Azure sa account heeft direct het volledige recht om de server te beheren op zowel serverniveau als databaseniveau. Het beheren van security in SQL Azure is vergelijkbaar met een on-premise instance van een SQL Server. Het beheren van beveiliging op database niveau is bijna identiek, echter zijn er wel verschillende parameters beschikbaar die gebruikt kunnen worden voor verfijning van de gewenste functies. Omdat SQL Azure databases kunnen schalen naar een of meerdere fysieke computers, gebruikt SQL Azure ook een andere strategie voor het beheren van servers op serverniveau.
Uw eigen SQL Azure server is eigenlijk een abstractie van database groeperingen. Databases die geassocieerd zijn met SQL Azure kunnen fysiek op een andere server staan in het Microsoft Datacenter. De master database houdt alle logins centraal bij en ook de rechten die gebruikers hebben om bepaalde databases te mogen benaderen. U moet dus een connectie hebben met de master database om CREATE, ALTER of DROP commando's te geven richting logins of databases. De master database van SQL Azure heeft ook twee views waarmee u kunt zien welke rechten logins hebben op welke database. Gebruik hiervoor respectievelijk de views sys.sql_logins en sys.databases views.
Wellicht vraagt u zich af hoe u logins aanmaakt in de master database van SQL Azure. Hoe koppelt u een login aan een gebruiker in een SQL Azure database en hoe kunt u een user koppelen aan een rol in een SQL Azure database? Dit alles kan gewoon vanuit de oude vertrouwde SQL Server Management Studio!
Stap 1. Open de SQL Server Management Studio en kies bij server type: Database Engine. Voer vervolgens de servernaam op SQL Azure in en authenticeer met SQL Server Authenticatie. We gaan er in deze demonstratie vanuit dat de HoLTestDB database reeds is aangemaakt.
Stap 2. Nu gaan we een login aanmaken voor de gebruiker: HoLTestUser met een standaard password: “myP@ssword”. Klik hiervoor op New Query en voer het volgende commando uit:
CREATE LOGIN HoLTestUser WITH PASSWORD='REPLACE_HoLTestUser_PASSWORD'
Na het uitvoeren van het SQL statement gaat u terug naar de connectie properties in de SQL Management Studio.
Let op: Gebruikt u dit voor productiedoeleinden houdt er dan rekening mee dat u veilige wachtwoorden gebruikt. Hierboven is slechts een voorbeeld.
Stap 3. Klik op Options en ga naar het tabblad Connection Properties en verbindt naar de eerder aangemaakte HoLTestDB database.
Stap 4. Nu zullen we in de context van de HoLTestDB database een user creëren voor de login aangemaakt in Stap 2. Klik op New Query en voer het volgende commando uit:
CREATE USER HoLTestUser FOR LOGIN HoLTestUser
Belangrijk is dat de gebruiker hier nog geen enkele recht heeft om mutaties in de database te maken. Dit zullen we verzorgen in volgende stap.
Stap 5. In deze stap zullen we de aangemaakte gebruiker rechten geven in de rol van db_owner. Klik op New Query en voer het volgende commando uit:
EXEC sp_addrolemember 'db_owner', 'HoLTestUser'
De DB Owner rol is een hoog privilege binnen SQL, maar noodzakelijk voor onder andere het aanmaken van tabellen en procedures.
Stap 6. Open de SQL Server Management Studio en log aan met de user HoLTestUser op de database HoLTestDB.
Step 7. In deze stap zullen we controleren of we succesvol zijn verbonden. Klik op New Query en voer het volgende commando uit:
SELECT @@version.
Als resultaat ziet u dat we een verbinding hebben met de database server.
Naast de logins, speelt de firewall ook een belangrijke rol. Zoals eerder vermeld, kunt u in het portal van Azure deze eenvoudig instellen en expliciet IP ranges opgeven van de computers die mogen connecten met de database server. Met een specifieke instelling geeft u aan dat de Microsoft Services toegang krijgt tot uw SQL Azure server. Dit zet uw database server open voor uw cloud applicaties. Naast de portal die deze rules beheert, kunt u ook gebruik maken van een aantal stored-procedures om hetzelfde resultaat te creëren.
In volgende versies van SQL Azure kan er ook gebruik gemaakt worden van andere authenticatie manieren dan een inlognaam/wachtwoord. Denk hierbij aan ADFS en WLID.
7. Het gebruik van SQL Azure
U heeft bovenstaande stappen gedaan; een Azure account aangemaakt, een SQL Azure database gecreëerd, de firewall opengezet en uw logins toegevoegd. Hoe krijgt u uw relationele database en uw data in SQL Azure zodat u deze kunt gebruiken?
Er zijn een aantal manieren. U kunt gebruik maken van de SQLManagement Studio zoals eerder beschreven. Zorg dat er een firewall-rule is, noteer het adres van uw database server en log vervolgens in. U kunt dan met behulp van SQL statements de tabellen en relaties aanmaken en data toevoegen. Dit SQL script genereert u eenvoudig vanuit uw bestaande database. Let er wel op dat SQL Azure niet alles ondersteunt wat uw on premise database ondersteunt, u moet mogelijk het script of uw database aanpassen.
Daarna is het aanpassen van de connectionstrings in uw applicaties de laatste stap van uw eerste databasemigratie naar de Cloud. De juiste connectiestring vindt u in het portaal van SQL Azure. Uw applicatie zal nu naar de cloud database connecten en alles draait weer zoals u gewend bent.
Een alternatief om uw database te migreren of in te richten is om gebruik te maken van Sql Server 2008 Integration Services. De R2 November CTP van SQL Server 2008 kan databases te migreren van een on-premise database naar de cloud. Ook de bulk copy utility (bcp) kunt u gebruiken om data naar Azure toe te sturen.
Eerder noemde we al de SQL Azure Migration Wizard (http://sqlazuremw.codeplex.com/). Deze applicatie zorgt ervoor dat een bestaande SQL 2005/2008 database gemigreerd kan worden naar een cloud database door SQL te genereren die geschikt is voor SQL Azure.
Verder vertelde we u al over het Sync Framework wat uitgebreid is met ondersteuning voor SQL Azure. Deze technologie maakt het mogelijk om data te synchroniseren tussen een SQL Azure database en een lokale SQL Server Database of SQL Compact. Denk daarbij aan toepassingen waarbij een applicatie tijdelijk offline moet kunnen werken, maar bij het beschikbaar komen van een internet connectie de data gesynchroniseerd moet worden met de database in de cloud.
Wanneer uw applicatie eenmaal draait en u daarbij een de cloud database gebruikt, wilt u natuurlijk ook weten hoe deze zich gedraagt. Hiervoor zijn een aantal views beschikbaar zoals sys.dm_exec_connections (informatie over lopende connecties), sys.dm_exec_requests (de requests naar de database) , sys.dm_exec_sessions (openstaande sessies), sys.dm_tran_locks (locking activiteiten) en sys.dm_exec_query_stat (informatie over de query plans).
8. Conclusie
U denkt misschien prachtig al die databases en applicaties in de cloud maar is dit nu wel iets voor mij? Met dit artikel wilden wij u meer informatie geven over de mogelijkheden van het Windows Azure Platform en met name SQL Azure. Als IT-professionals zijn wij er van overtuigd dat in de toekomst de cloud de plek is waar uw software is. Software die eenvoudig en veilig te benaderen is, en dat tegen zeer lage vaste- en beheerkosten. Eveneens dat uw data beschikbaar is, vanaf elke plek en op elk moment van de dag. Data die organisch kan meegroeien met uw bedrijf dankzij het Azure principe "pay as you grow". U gaat alleen meer voor de resources betalen als u ook meer gaat gebruiken en de rekening schaalt weer terug als u minder nodig hebt.
Windows Azure is op dit punt anders dan andere aanbieders op de markt. Wat is er nu fijner dan al uw bestaande kennis te richten op processen die er al zijn en alleen nog maar beter en voorspelbaarder te worden. Geen onnodige kosten meer voor duur ijzer en specialistisch onderhoud. Geen zorgen meer over de toegankelijkheid uw bedrijfsdata van buitenaf voor uw zakelijke partners en de service naar de applicaties bij uw klanten als de
stroomvoorziening het weer eens laat afweten.
SQL en applicatie kennis is maximaal te hergebruiken met de bestaande mensen binnen uw organisatie. Nieuwkomers op zoek naar een SQL-database kunnen eenvoudig en tegen lage kosten instappen.
Wij wensen u veel cloud succes!
Vind je het interessant om dit soort verhalen eens per kwartaal op je deurmat te vinden registeer je dan hier om het TechNet Magazine hardcopy te ontvangen. Aanrader!