MAGAZINE. IN DIT NUMMER O.A.:

Maat: px
Weergave met pagina beginnen:

Download "MAGAZINE. www.sdn.nl IN DIT NUMMER O.A.:"

Transcriptie

1 MAGAZINE SOFTWARE DEVELOPMENT NETWORK IN DIT NUMMER O.A.: Snel en Schaalbaar met Velocity Distributed Cache < SQL Server Integration Services in de Praktijk < XML-Parsing in COBOL < Create and use of Google maps web part < MVP: Most Valuable Pattern? < Nummer 103 november 2009 SDN Magazine verschijnt elk kwartaal en is een uitgave van Software Development Network 103

2 Advertentie Macaw

3 Colofon Uitgave: Software Development Network Zeventiende jaargang No. 103 november 2009 voorwoord Bestuur van SDN: Remi Caron, voorzitter Rob Suurland, penningmeester Joop Pecht, secretaris Mark Vroom, vice-voorzitter Redactie: Rob Willemsen Aan dit magazine werd meegewerkt door: Maurice de Beijer, Anko Duizer, Paul Gielens, Christiaan Heidema, Marcel van Kalken, Stefan Kamphuis, Marcel Meijer, Mirjam van Olst, Johan Parent, Joop Pecht, Sandra de Ridder, Maarten van Stam, Bob Swart, Marianne van Wanrooij, Rob Willemsen en natuurlijk alle auteurs! Listings: Zie de website voor eventuele source files uit deze uitgave. Vormgeving en opmaak: Reclamebureau Bij Dageraad, Winterswijk Alle rechten voorbehouden. Niets uit deze uitgave mag worden overgenomen op welke wijze dan ook zonder voorafgaande schriftelijke toestemming van SDN. Tenzij anders vermeld zijn artikelen op persoonlijke titel geschreven en verwoorden zij dus niet noodzakelijkerwijs de mening van het bestuur en/of de redactie. Alle in dit magazine genoemde handelsmerken zijn het eigendom van hun respectievelijke eigenaren. Adverteerders Macaw 2 VNU 10 Bergler 24 Aladdin 29 Avanade 36 4DotNet 44 Sogeti 53 Sybase ianywhere 58 Barnsten / Embarcadero 66 Microsoft 72 Adverteren? Informatie over adverteren en de advertentietarieven kunt u vinden op onder de rubriek Magazine. In de periode van de vallende bladeren, het natte wegdek, de laagstaande zon en de vierkante treinwielen valt de laatste editie van het SDN-magazine van 2009 met een hart verwarmende plof op je deurmat. Tijd genoeg om binnen te zitten en weer de volle 72 pagina s tot je te nemen. Na de succesvolle Software Development Conference van oktober j.l., inclusief de Open- Force 09 DNN-conferentie en de Developers Launch van Windows 7, en vóór het laatste Software Development Event van 2009 op 14 december in Houten verwennen we je nog met een 15-tal artikelen, variërend van de noodzaak van design van de user experience in Andries van der Meulens artikel Daarom User Experience Design! - tot de broodnodige aandacht die we als developers aan de dag (zouden) moeten leggen voor de beheerders van al onze, ongetwijfeld prachtige, applicaties zie Monitoring van Eric Denekamp - want zij kunnen maar weinig met een message-box met de melding unknown error en een Okbutton! Hoezo OK?!? En er is nog meer aandacht voor de kwaliteitsaspecten van onze applicaties. Schaalbaarheid wordt b.v. in 2 artikelen behandeld. Roy Cornelissen kijkt hoe dat geregeld zal kunnen worden via Velocity s Distributed Cache en Andre Boonzaaijer doet zijn verhaal over Schaalbare Modellen. Ook voor security-aspecten is aandacht: Brandon Haynes praat in zijn Under the Hood -reeks over de Security Services die je in DotNetNuke 5.1 terugvindt. Verbetering van de kwaliteit van een app kun je ook bereiken door niet het wiel opnieuw uit te vinden. Design patterns kunnen daar een goede rol bij spelen, zoals Marcel Peereboom laat zien in zijn eigen MVP-versie, die voor het Most Valuable Pattern. Op het gebied van user interactie worden jullie o.a. voorzien door Dennis Vroegop die ingaat op de beginselen van development voor Surface: als je met z n 4en rond die tafel staat is dat toch wat anders als dat je in je uppie met je eigen muis naar je eigen beeldscherm kijkt. Een belangrijke factor bij development voor Surface lijkt creativiteit: wie komt met het briljante idee voor de nieuwe killer-app? Paul Keijzers laat in het artikel Create and use of Google maps web part zien hoe bezoekers van het Spaarne Ziekenhuis in Haarlem via een interactief kaartje kunnen zien bij welke huisarts zij op zeker moment het beste/snelste terecht kunnen. De resterende artikelen hebben allemaal wel een data-link. Johan Machielse kijkt naar SQL Server Integration Services in de Praktijk en Marcel Meijer blikt vooruit naar SQL Azure. Cary Jensen vervolgt zijn Introduction to LINQ van het vorige magazine, en Ann Lynnworth kijkt o.a. naar de performance van Firebird in haar artikel Firebird SQL and Web Traffic Analysis with Delphi. Christiaan Heidema doet uit de doeken dat XML-Parsing in COBOL is opgenomen, en als gebruikers genereren wij die data vaak met behulp van een toetsenbord, misschien zelfs wel als een soort Hans Klok via Het Magische Toetsenbord van Peter van der Sman. Veel leesplezier! rob willemsen, PS: Rest me nog te melden dat dit niet alleen het laatste magazine van dit jaar is het is tevens het laatste magazine dat onder mijn redacteurschap valt. Het is tijd voor iets anders, as simple as that er is gelukkig! - nog zo veel uitdagends en interessants te beleven in de software-wereld. Een bedankje mijnerzijds naar alle lezers en naar alle SDN-medewerkers, en ik hoop dat menigeen met veel interesse en met veel plezier gelezen heeft in het SDN-magazine, en dat ook zal blijven doen! magazine voor software development 3

4 Inhoud SDN EVENT 14 DECEMBER 2009 HOUTEN 03 Voorwoord Rob Willemsen 04 Inhoudsopgave 05 Snel en Schaalbaar met Velocity Distributed Cache Roy Cornelissen 11 Firebird SQL and Web Traffic Analysis with Delphi Ann Lynnworth 17 Daarom User Experience Design! Andries van der Meulen 20 SQL Server Integration Services in de Praktijk Johan Machielse 25 ASP.NET onder de Motorkap: ASP.NET 4.0 op bezoek bij je browser Michiel van Otegem 26 XML-Parsing in COBOL Christiaan Heidema 30 Surface development Dennis Vroegop 35 Interesting Things: Writing Better Software Faster Sander Hoogendoorn 37 Introduction to LINQ, part 2 Cary Jensen 41 Under the Hood: Security Services in DotNetNuke 5.1 Brandon Haynes 45 Create and use of Google maps web part Paul Keijzers 50 DevTweet: Software Development with a wink Marianne van Wanrooij en Sander Hoogendoorn 51 Schaalbare modellen Andre Boonzaaijer 54 Monitoring Eric Denekamp 56 SQL Azure Marcel Meijer 58 Boek Review: Handboek Silverlight 3 Emile van Ewijk 61 MVP: Most Valuable Pattern? Marcel Peereboom 67 Het Magische Toetsenbord Peter van der Sman

5 .NET Roy Cornelissen Snel en Schaalbaar met Velocity Distributed Cache In het hart van je computer vind je de processor en het interne geheugen. Deze onderdelen horen bij de computerarchitectuur die is vernoemd naar John von Neumann, een beroemd wiskundige en computergeleerde. Eén van de onhebbelijkheden van deze architectuur is de Von Neumann bottleneck : doordat het geheugen zich op afstand van de processor bevindt en veel data kan bevatten, ontstaat er een grote hoeveelheid verkeer op de relatief smalle verbindingsweg tussen die twee onderdelen. Dit leidt tot opstopping en vertraging. Deze flessenhals wordt in computers deels opgeheven door een buffer tussen de twee onderdelen te plaatsen: de cache. Op veel grotere schaal, in de wereld van software development, krijgen we steeds meer te maken met gedistribueerde data en event-driven applicaties. Gegevens zijn cruciaal voor applicaties om te functioneren, maar applicaties zijn door hun gedistribueerde en servicegeoriënteerde architectuur afhankelijk van vele schakels in de keten. Gegevens kunnen van diverse bronnen afkomstig zijn, zelfs van externe partijen. Soms moet je gegevens van verschillende bronnen aggregeren voor je er iets mee kunt. Ook kun je er niet altijd zeker van zijn dat verbindingen voorhanden zijn. Of misschien heb je een SLA waarbij je moet betalen voor het aantal calls dat je afneemt en is het dus een kostenoverweging om het aantal aanroepen van services te beperken. Denk ook aan offline scenario s op smart clients, handheld devices, enz. In een gedistribueerde en servicegeoriënteerde omgeving ontstaat door al deze aspecten een behoefte aan een vorm van caching. De Von Neumann bottleneck is (deels) op te lossen via caches Er zijn gelukkig middelen die het ons steeds gemakkelijker maken om caches te bouwen. De prijs van geheugenchips blijft dalen en door slim gebruik te maken van meerdere computers kunnen we gedistribueerde caches bouwen op basis van goedkope hardware. Een gedistribueerde cache bestaat uit een verzameling computers die samen één grote cache vormen. Doordat de cache verspreid is over meerdere machines kun je profiteren van b.v. hoge beschikbaarheid (door kopieën van gegevens te verspreiden over meerdere computers en ze elkaars werk te laten overnemen als er een computer uitvalt) en hoge performance doordat de belasting van de machines wordt verdeeld over verschillende computers. Zolang je computers hebt met geheugen en een netwerkkaart, kun je de gedistribueerde cache blijven vergroten. De performance van bekende community sites als Hyves en MySpace of grote webwinkels als Amazon zou als een plumpudding in elkaar zakken als zij niet waren voorzien van grote gedistribueerde caches De performance van bekende community sites als Hyves en MySpace of grote webwinkels als Amazon zou als een plumpudding in elkaar zakken als zij niet waren voorzien van grote gedistribueerde caches. Wat stop je in een cache? Er zijn verschillende soorten gegevens die zich lenen om te cachen en waarbij ook verschillende scenario s passen. Referentiedata Dit zijn gegevens die niet vaak wijzigen maar wel heel vaak worden geraadpleegd. Denk hierbij aan productgegevens in een productcatalogus of gegevens over reisverzekeringen van verschillende verzekeringspartners. Stamtabellen voor landen, plaatsnamen, postcodes, etc., vallen ook in deze categorie. Meestal wordt aan deze gegevens een bepaalde geldigheidsduur meegegeven. Zolang deze uiterste houdbaarheidsdatum niet is verstreken, kunnen deze gegevens in de cache blijven. Referentiedata lenen zich uitstekend om te cachen. Activity data Hieronder verstaan we gegevens die geldig zijn terwijl een eindgebruiker bezig is met een gebruikerssessie. We noemen dit ook wel conversational state. Een voorbeeld van activity data is de inhoud van een winkelwagentje dat een gebruiker aan het samenstellen is op de site van een internetwinkel. Deze gegevens bevinden zich meestal ergens in de user interface / front end laag van een applicatie. In ASP.NET applicaties gebruiken we daarvoor vaak de Session container. Pas na afloop van een transactie komt activity data in een of andere vorm definitief in een backendsysteem, database of service te staan. Het winkelwagentje uit het voorbeeld wordt dan omgezet in een order. Activity data wordt vaak geschreven en gelezen, maar alleen binnen de context van één gebruiker. Deze gegevens moeten daarom worden gekoppeld aan die ene gebruiker. Voorbeelden hiervan zijn de session state, cookies of de viewstate in ASP.NET applicaties. Resource data Dit zijn gegevens die vaak worden gelezen en geschreven door meerdere gebruikers of applicaties. Bijvoorbeeld de beschikbare voorraad van producten in een magazijn. Bij iedere bestelling moeten deze gegevens worden bijgewerkt en ze moeten altijd beschikbaar zijn. Hier is dus een sterke koppeling met de achterliggende gegevensbron en deze gegevens moeten doorlopend met elkaar in de pas worden gehouden. Caching is in deze gevallen vooral een magazine voor software development 5

6 .NET middel om snelheid te krijgen bij het raadplegen, maar het risico is groot dat de gegevens in de cache verouderd zijn. De beste performance krijg je door de cache zo dicht mogelijk bij de applicatie te leggen, b.v. door de cache in-process te draaien of op dezelfde machine. Gedistribueerd cachen met Velocity Microsoft is een project gestart met de code naam Velocity uitgaande van de eerder genoemde trend in applicatiearchitectuur en de mogelijkheden die de hardware ons biedt. Velocity levert een gedistribueerde cache die in veel verschillende scenario s inzetbaar is. Het product is nog volop in ontwikkeling en is momenteel als CTP3 beschikbaar. Wanneer versie 1.0 beschikbaar komt is nog onduidelijk. In de rest van dit artikel ga ik in op de eigenschappen van Velocity CTP2 en waar je rekening mee moet houden als je het product wilt inpassen in je architectuur. Velocity is dus een gedistribueerde cache. De filosofie die Microsoft hanteert is die van een bundeltje computers waarvan de interne geheugens aan elkaar worden gesmeed tot één grote cache die beschikbaar is voor de applicatie. Vanuit de applicatie gezien benader je één logische cache, Velocity zorgt voor lastige zaken als het verdelen van gegevens over een heel cluster. Hiermee zorgt Velocity voor failover, hoge beschikbaarheid, schaalbaarheid enzovoort. In de huidige opzet is Velocity een cache-aside, wat betekent dat de cache niet meer is dan een grote silo voor gegevens. De applicatie bepaalt zelf wanneer objecten in de cache moeten worden gezet of wanneer ze moeten worden ververst. Velocity heeft zelf dus geen weet van wat de applicatie doet of wat er in de cache wordt opgeslagen. Wat kan er allemaal in Velocity worden opgeslagen?eigenlijk alle gegevens, zolang ze serializable zijn:.net objecten, DataRows, XML en byte arrays. De reden waarom ze serializable moeten zijn is dat ze proces- en machinegrenzen oversteken. Met serializable bedoel ik dat ze moeten zijn voorzien van het Serializable attribuut of de DataContract en DataMember attributen. Velocity is een Silo van serializable data In zijn kleinste vorm kan Velocity ook worden ingezet als een in-process cache. Dit heet een local cache. Velocity draait dan in het proces van je applicatie mee. De hoeveelheid gegevens die Velocity in de local cache stopt heeft dan wel direct invloed op het geheugengebruik van de applicatie. Een local cache kun je ook combineren met een volledig cache cluster. Gegevens die je opvraagt vanuit het cache cluster worden dan gebufferd in de local cache. Velocity werkt met een fallback mechanisme: het controleert of objecten in de local cache staan. Alleen wanneer dat niet het geval is, zal Velocity het cache cluster aanspreken. De eerstvolgende keer staan de gegevens wel in de local cache. Omdat de local cache in het proces van de applicatie meedraait, hoeven objecten niet te worden geserialiseerd en gedeserialiseerd. Het werkt daardoor zeer snel, maar het zorgt er wel voor dat de applicatie zelf meer geheugen gaat gebruiken. De opbouw van een cache cluster In de gedistribueerde cache van Velocity praten we over een aantal onderdelen: de cache zelf, hosts, clusters en regions. Figuur 1 toont hoe de verschillende onderdelen met elkaar in verbinding staan. Een cache host is een proces dat (een deel van) een cache beheert en vormt een apart te beheren onderdeel van de gedistribueerde cache. Een host is meestal gekoppeld aan één fysieke machine, maar er kunnen best meerdere hosts draaien op één computer. Een cluster is een logische verzameling van hosts en van één of meerdere caches. Een cluster als geheel is ook weer een eenheid van Fig. 1: Schematische weergave van de Velocity onderdelen beheer. Zo kun je een cluster in zijn geheel stoppen en starten. Je kunt de omvang van je cache beïnvloeden door er hosts aan toe te voegen of eruit te verwijderen. Een cache wordt gevormd door het geheugen van de hosts binnen een cluster te combineren en er een logische naam aan te koppelen. Door die naam wordt het een named cache. Er kunnen meerdere named caches in een cache cluster bestaan. De naam levert niets meer op dan een context voor je applicatie. Zo kunnen een order- en een salesapplicatie gebruik maken van hetzelfde cachecluster en zelfs dezelfde sleutels gebruiken voor hun data, maar doordat de cache in beide gevallen een eigen naam heeft, ontstaat er geen verwarring. Vergelijk het met de namespace van XML documenten. Zoals de figuur al aangeeft, is een cache uitgesmeerd over de hosts in het cluster. Fabric Het fabric clustering protocol is een populaire technologie in de netwerkwereld. Het is een protocol dat zorgt voor het beheer van group membership van hosts binnen een cluster, het automatisch detecteren dat er hosts worden toegevoegd of verwijderd. Het zorgt voor schaalbaarheid en beschikbaarheid en voorkomt een single point of failure doordat data wordt gerepliceerd naar andere nodes. Daarnaast levert het routing tables om een verzoek van de client door te verwijzen naar de juiste host binnen een cluster. Microsoft heeft Fabric geïmplementeerd en beschikbaar gesteld als een verzameling.net assemblies. Deze zijn op dit moment onderdeel van de Velocity CTP2 download. Binnen een cache kun je nog een opdeling maken in regions. Een region gebruik je om gelijksoortige gegevens te bundelen, vergelijkbaar met een tabel in een database. Je kunt dan, behalve de sleutel voor een object, ook meer informatie aan je data koppelen in de vorm van tags. Je kunt daardoor tag based zoeken, b.v. naar alle objecten met de tag Dieselauto. Velocity koppelt zo n region wel aan één bepaalde host, dus je kunt dan niet profiteren van het feit dat Velocity de gegevens verdeelt over de verschillende hosts ten behoeve van de schaalbaarheid. Velocity kan overigens wel regions als geheel repliceren voor failover doeleinden. Door een cluster op te bouwen uit verschillende hosts en daar een cache overheen te projecteren kan Velocity een cache leveren met 6 MAGAZINE

7 .NET een hoge beschikbaarheid en failover. Deze twee doelen bereikt Velocity door gegevens slim te verdelen over de hosts en vervolgens te repliceren. Mocht er een node uitvallen, dan is er altijd nog een host die een kopie van de gegevens beschikbaar heeft. Doordat er onbeperkt hosts kunnen worden toegevoegd aan een cluster, zelfs terwijl een cluster draait, is Velocity enorm schaalbaar. Het beheren van het cluster gebeurt in Velocity op basis van het Fabric Cluster Management protocol (zie kader). Voor het beheren van de clusters en hosts krijg je een beheertool op basis van Windows PowerShell. Velocity past goed op je spullen In een gedistribueerde omgeving zullen er meerdere applicaties zijn die gebruik maken van de cache. Denk aan een web farm waarop dezelfde web applicatie meerdere malen is uitgevoerd. Ook meerdere lagen binnen een applicatie kunnen gebruik maken van dezelfde cache. Doordat de cache vanuit verschillende bronnen kan worden gevuld met data en weer worden uitgelezen, is het belangrijk dat Velocity zijn cache goed bewaakt. Bij het beheren van de cache waar meerdere partijen gebruik van maken komen eigenlijk dezelfde aspecten aan bod als bij traditioneel gegevensbeheer, namelijk constistency, concurrency en beveiliging. Specifiek bij caching is ook een goed beheer van geheugen belangrijk. Consistency Consistency in Velocity betekent het gelijk houden van de gegevens die verspreid en gerepliceerd zijn over de verschillende hosts binnen het cluster. Je kunt kiezen voor twee modellen: weak consistency of strong consistency. Bij strong consistency is een operatie om gegevens in de cache te stoppen of te wijzigen synchroon: de operatie is pas klaar als de gegevens succesvol zijn gerepliceerd naar alle hosts in het cluster. Als je het niet zo belangrijk vindt om te weten of een object wel in de cache is opgeslagen, dan kun je kiezen voor het weak consistency model. In het weak model gebeurt het wegschrijven en repliceren van gegevens in de cache asynchroon. Dit kan je veel snelheidswinst opleveren als je vaak gegevens in de cache schrijft, doordat je niet telkens hoeft te wachten totdat alle gegevens succesvol over alle hosts in het cluster zijn verspreid. Wanneer het wegschrijven van de gegevens mislukt door een onvoorzien probleem terwijl je daar niet van op de hoogte bent, moet je er in je applicatie wel rekening mee houden dat objecten niet per se in de cache staan en je hierdoor mogelijk vaker misgrijpt als je om objecten vraagt. Velocity ondersteunt in CTP2 alleen nog het synchrone model (strong consistency). Concurrency en beveiliging Bij resource data heb je mogelijk te maken met gegevens die door verschillende clients worden gewijzigd. In deze gevallen is het prettig dat Velocity de concurrency bewaakt. Net als in een database kun je kiezen tussen optimistic en pessimistic locking. Bij optimistic locking gebruikt Velocity wat extra metadata in de vorm van een versienummer. Een update op de gegevens in de cache lukt dan alleen als je ook het juiste versienummer van die data hebt. Heeft iemand anders dat nummer in de tussentijd opgehoogd, dan zal de wijziging falen. In het pessimistic locking scenario leg je expliciet een lock op het object in de cache en kan alleen de houder van het lock de gegevens wijzigen en het lock weer vrijgeven. Het is wel belangrijk om te beseffen dat Velocity geen transacties over meerdere items heen ondersteunt. In een pessimistic locking scenario moet de applicatie goed de volgorde van acties en het leggen van locks bewaken om deadlock situaties te voorkomen. Velocity heeft zelf geen deadlock detectie, dus dat moet je in de applicatie verzorgen. Velocity doet in CTP2 nog niets aan beveiliging. Objecten worden nog niet beveiligd tegen ongeautoriseerde toegang en er is ook nog geen moeite gestoken in b.v. het coderen van gevoelige gegevens. Hoewel je je moet afvragen of het verstandig is om gevoelige gegevens te cachen, moet je er dus wel rekening mee houden dat deze objecten in het geheugen van je computer kunnen zijn geladen. Ze zouden door kwaadwillenden kunnen worden uitgelezen. Het Velocity team werkt momenteel aan een model voor security. De ideeën lopen uiteen van een systeem met ACL s (Access Control Lists) of het gebruik van een Traditioneel gegevensbeheer, zoals constistency, concurrency en beveiliging, is nog steeds belangrijk in de cache simpele sleutel per region of object. In de afweging wordt vooral gekeken naar een goed evenwicht tussen beveiliging en goede performance. Geheugenbeheer Eerder werd al genoemd dat Velocity een cache-aside is. Dit betekent dat de applicatie verantwoordelijk is voor het beheer van de gegevens in de cache: de applicatie bepaalt of gegevens nog geldig zijn en wanneer ze moeten worden vervangen. Velocity zorgt echter wel voor efficiënt geheugenbeheer en houdt daarbij rekening met de kaders die je stelt bij het aanmaken van een gedistribueerde cache. Deze kaders worden uitgedrukt in twee strategieën: expiration en eviction. Expiration gaat over de geldigheid van gegevens. Je kunt aan gegevens een bepaalde levensduur (time-to-live) meegeven. Wanneer deze levensduur is verstreken, zal Velocity de gegevens verwijderen uit de cache. Het verwijderen van items hangt nauw samen met eviction. Eviction is het verwijderen van cache items op basis van een Low en een High Watermark. Als je een cache aanmaakt, kun je een low en een high watermark als kaders opgeven. Deze watermarks zijn een soort barometers die bepalen wanneer Velocity moet gaan opruimen. De low watermark geeft aan bij welk geheugengebruik Velocity moet beginnen met opruimen van items waarvan de levensduur is verstreken. Als de high watermark is bereikt, dan gaat Velocity objecten opruimen ongeacht de levensduur. Bij deze laatste vorm van eviction verwijdert Velocity wel als eerste de objecten die het langst niet zijn gebruikt. Dit gaat op basis van het least-recently-used (LRU) algoritme. Als je in je oplossing gebruik maakt van expiration en/of eviction, dan is het dus belangrijk om je bewust te zijn van het gedrag dat Velocity dan vertoont. Bij caching in zijn algemeenheid kun je er niet altijd van uitgaan dat gegevens ook daadwerkelijk beschikbaar zijn in de cache en je applicatie is ervoor verantwoordelijk dat ontbrekende gegevens worden aangevuld of ververst. Het Velocity team heeft wel toekomstplannen voor het automatisch aanvullen van de cache op het moment dat objecten niet (meer) in de cache zitten. Hoe gebruik ik Velocity? Grofweg zijn er twee manieren waarop je Velocity kunt inzetten in je applicatie: als een expliciete cache-aside en voor sessiemanagement in webscenario s. In het eerste geval heb je een client API ter beschikking waarmee je objecten in de cache kunt stoppen of eruit kunt halen. Voor sessiemanagement heeft Velocity een provider. Als je Velocity wilt inzetten als sessionstate-provider, dan is het wel belangrijk de cache die je daarvoor gebruikt zodanig te configureren dat sessies niet zomaar verloren gaan. Denk daarbij aan het eerder beschreven eviction en expiration gedrag. Eviction zal moeten magazine voor software development 7

8 .NET worden uitgeschakeld. Verder kan het handig zijn de standaard expiration van 10 minuten te verhogen naar bijvoorbeeld een half uur. Sessiegegevens zijn belangrijk, dus het aanzetten van de high availability eigenschap van Velocity is in dit geval ook een goed idee. Dit alles doe je via de PowerShell beheertool met de opdracht in listing 1. Set-CacheConfig CacheName MijnSessionCache Eviction none TTL 30 Secondaries 1 Listing 1: Cache configureren voor session state via PowerShell beheertool Bovenstaande opdracht schakelt eviction uit ( -Eviction none ), stelt de expiration periode in op 30 minuten ( -TTL 30 ) en schakelt high availability in ( -Secondaries 1 ). Als je eviction uitschakelt, loop je wel de kans dat het geheugen volloopt, omdat objecten niet meer worden opgeruimd tenzij de houdbaarheid verloopt. Om CTP2 te kunnen gebruiken moet je referenties maken naar twee DLL s: CacheBaseLibrary.dll en ClientLibrary.dll. Deze vind je na installatie in %PROGRAMFILES%\Microsoft Distributed Cache\v1.0. mydefaultcache = mycachefactory.getcache("default"); // // Cache gebruiken // //Maak een region aan in de cache mydefaultcache.createregion("demoregion", true); //Zet objecten in DemoRegion, beiden met twee tags //Widget is een class met DataContract en DataMember attributen Tag[] tags = new Tag[] { new Tag("lifestyle"), new Tag("work") }; mydefaultcache.add("demoregion", "key1", new Widget("Widget101"), tags); mydefaultcache.add("demoregion", "key2", new Widget("Widget102"), tags); //Zoeken op tags List<KeyValuePair<string, object>> results = mydefaultcache.getanymatchingtag("demoregion", new Tag[] { new Tag("work") }); Listing 2 laat zien hoe je toegang krijgt tot de cache en welke methodes je onder andere kunt aanroepen om de data in de cache te manipuleren. In het eerste deel van de code wordt de cache-client geconfigureerd. De code geeft aan met welke cache-host hij communiceert, dat het een simple client is en dat de local cache ingeschakeld is. Je ziet dat hier expliciet de naam van een cache-host wordt opgegeven. Er is altijd één host die je als eerste aanspreekt om toegang te krijgen tot de cache, maar de Velocity infrastructuur zorgt ervoor dat je ook bij de andere hosts binnen het cluster uitkomt als dat nodig is. // // Cache client configureren // //We communiceren met 1 cache host ServerEndPoint[] servers = new ServerEndPoint[1]; foreach (KeyValuePair<string, object> kv in results) { Console.WriteLine(kv.Key + ": " + ((Widget)kv.Value).Name); } //Zet een waarde buiten een region mydefaultcache.add("key2", "Testwaarde2"); //Zet een waarde via indexer mydefaultcache["key3"] = "Testwaarde3"; Listing 2: Gebruik van Velocity vanuit code Je hoeft de cache-client niet altijd vanuit code te configureren. Dat kan ook in de App.config. Listing 3 geeft een voorbeeld van dezelfde configuratie als in het C# codevoorbeeld, maar nu in App.config. //Cache Host Details // Parameter 1 = host name // Parameter 2 = cache port number // Parameter 3 = cache service name servers[0] = new ServerEndPoint("localhost", 22233, "DistributedCacheService"); //Routing of Simple Client // False = Simple Client (geen routing table) // True = Routing Client bool routingclient = false; //Local cache of niet // True = Wel local cache // False = Geen local cache bool localcache = true; //Geen logging van cache exceptions CacheFactory.DisableLogSinks(); //Configuratie meegeven aan CacheFactory constructor mycachefactory = new CacheFactory(servers, routingclient, localcache); //Vraag de "default" cache op <configuration> <configsections> <section name="dcacheclient" type="system.data.caching.dcacheclientsection, CacheBaseLibrary" allowlocation="true" allowdefinition="everywhere"/> </configsections> <!-- Simple client --> <dcacheclient deployment="simple"> <!-- Local cache staat aan --> <localcache isenabled="true" sync="ttlbased" ttlvalue="300" /> <hosts> <!-- Cache host configuratie --> <host name="localhost" cacheport="22233" cachehostname="distributedcacheservice"/> </hosts> </dcacheclient> </configuration> Listing 3: Configuratie van Velocity in App.config 8 MAGAZINE

9 .NET De eigenschappen van Velocity, zoals het schaalbaar, gedistribueerd en highly available zijn, hebben ook voordelen in webapplicaties die draaien in grote webfarms. In ASP.NET heb je voor sessiemanagement de keuze uit in-process, SQL Server of een State Server. ASP.NET gebruikt daarvoor een provider model, waardoor je gemakkelijk kunt wisselen zonder de applicatie te hoeven aanpassen. SQL Server en State Server zijn de opties die je overweegt wanneer je applicatie flink is opgeschaald en draait op meerdere webservers, zeker als je geen sticky routing toepast. Bij sticky routing wordt dezelfde gebruiker voor ieder request telkens door dezelfde web server bediend. Nu we de kracht van Velocity kennen, zou het handig zijn ook meteen hier het sessie-management te beleggen. Dat kan, want Microsoft levert een ASP.NET sessionstate-provider op basis van Velocity. Listing 4 toont hoe je deze kunt configureren. <!-- Overige configuratie weggelaten voor duidelijkheid --> <sessionstate mode="custom" customprovider="velocity"> <providers> <add name="velocity" type="system.data.caching.sessionstoreprovider" cachename="mijnsessioncache"/> </providers> </sessionstate> Listing 4: Configuratie van session state provider op basis van Velocity Afwegingen voor configuratie Velocity kun je in verschillende configuraties toepassen. Welk scenario past nu het best bij datgene wat je wilt bereiken?tabel 1 geeft een overzicht van de effecten die een bepaalde configuratie met zich meebrengt. Configuratie Effect Positief Negatief High availability Hogere garantie dat gegevens beschikbaar zijn en blijven, ook bij uitval van een host. Negatief effect op performance doordat Velocity kopieën van gegevens op meerdere hosts moet bijhouden. Gepartitioneerde cache Local cache Betere performance doordat gegevens worden verdeeld over het cluster en daardoor ook de belasting van de cache hosts. Hierdoor ook een grotere scale. Hoge performance doordat local cache binnen de applicatie draait en objecten niet hoeven te worden geserialiseerd/gedeserialiseerd. Als een cache host uitvalt, verlies je die gegevens. Deze moeten dan opnieuw in de cache worden gezet. Kleine overhead door fallback mechanisme. De applicatie verbruikt meer geheugen. Tabel 1: Verschillende configuraties en hun effecten De configuraties in tabel 1 kunnen worden gecombineerd. Je kunt dus een gepartitioneerde cache maken die highly available is. Het verlies aan performance door high availability te gebruiken kun je compenseren door een local cache toe te passen. Een kijkje in de toekomst De CTP s tonen al een aardig werkend product. Maar er zijn nog zaken waar het team aan werkt. Naast het continu verbeteren van de schaalbaarheid en snelheid wordt gekeken naar betere manieren om de cache te monitoren voor diagnose van problemen. Verder staan voor versie 1.0 de volgende zaken op de planning: 1. Notificaties vanuit de cache bij wijzigingen in objecten, zodat clients hierop kunnen anticiperen; 2. Beveiligde toegang tot named caches; 3. Bulk operaties met meerdere objecten; 4. Read thru/write behind ondersteuning. De read thru/write behind ondersteuning is er één die een beetje tegen de cache-aside filosofie indruist. Read thru betekent dat de cache automatisch terugvalt op een back-end service of database wanneer een object niet kan worden gevonden in de cache. Write behind houdt in dat Velocity een wijziging in een item in de cache (asynchroon) doorstuurt naar de back-end. Hiermee wordt Velocity meer dan een cache-aside, namelijk de spil tussen applicatie en gegevensbronnen. Persoonlijk ben ik benieuwd naar de manier waarop Microsoft dit gaat oplossen. Ik denk dat een uniforme toegang tot gegevens hiervoor noodzakelijk is, dus ik verwacht rechtstreekse koppelingen met SQL Server tabellen of REST style interfaces zoals als die van ADO.NET Data Services. Op de roadmap staan verder nog zaken als het ondersteunen van LINQ queries op de cache en Velocity in the cloud. Deze zaken zullen waarschijnlijk na versie 1.0 aan Velocity worden toegevoegd. Op deze manier is Microsoft bezig om technologieën, die op zichzelf al nuttig zijn, op een slimme manier te combineren. Conclusie In een gedistribueerde applicatie, waar gegevens uit meerdere heterogene bronnen afkomstig zijn, is caching bijna onmisbaar. Het zorgt voor snellere toegang tot data, betere beschikbaarheid en grotere schaalbaarheid. Er zijn meerdere oplossingen op de markt maar Velocity is een veelbelovende nieuwe speler. Het is gratis beschikbaar als losse release naast het.net framework. Velocity is veelzijdig doordat het in uiteenlopende scenario s inzetbaar is, van een in-process cache tot volledig gedistribueerd en highly available en zelfs als session state provider voor ASP.NET. NB: Dit artikel is gebaseerd op de CTP2. Op dit moment is CTP3 beschikbaar en is CTP4 onderweg. Ten opzichte van CTP2 bevat CTP3 meer mogelijkheden, hier komen we later op terug. Referenties Velocity team blog: Voorbeeld code: Velocity whitepaper: PDC 2008 Sessies (waaronder over Velocity): https://sessions.microsoftpdc.com Roy Cornelissen Roy Cornelissen werkt als IT architect bij Info Support voor de business unit Industrie. Hij heeft negen jaar ervaring in de ICT en heeft gewerkt aan uiteenlopende projecten. In zijn dagelijks werk past hij Microsoft technologie toe in service georiënteerde omgevingen. Visual Studio 2010 TIP: Visual Studio 2010: VAR & Intellisense Je kunt nu gebruik maken van het VAR type. Deze wordt al compile time vervangen door het juiste datatype. Nadeel hiervan was, dat je deiintellisense moest ontberen. In Visual Studio 2010 is er nu full Intellisense support voor VARs. magazine voor software development 9

10 Advertentie VNU

11 DELPHI Ann Lynnworth Firebird SQL and Web Traffic Analysis with Delphi Whether you want to learn how to efficiently import data into Firebird, or you wonder if it is worth upgrading to Delphi 2010 for "routine" tasks, this article will give you some food for thought. In particular, this article explores the use of Delphi and the open-source relational database system named "Firebird SQL" to load and analyze web traffic logs. Along the way, the size and performance of EXEs compiled with Delphi 7 versus Delphi 2010 are compared, plus the speed of Firebird 1.5 versus Firebird 2.1 and four common Firebird data access components are measured. Fortunately, there are worldwide standards governing the format of web traffic log files. So, if you have a web site that logs traffic data (on any operating system), there is a very good chance that the solution discussed in this article will apply to your situation. We have (so far) tested log files from IIS 5 on Win2000 and IIS 6 on Win2003, with various data fields included and excluded. The FBPrepLog utility described in this article is free, with Object Pascal source, and is available immediately from Code Central thanks to Embarcadero (look for item #27086). An early version of FBPrepLog is also on the Delphi 2010 Companion DVD. The source definitely compiles in Delphi 7 and in Delphi 2010; it probably compiles in all versions in between. All SQL code in this article probably works with Interbase but was only tested with Firebird. Quick Background on Web Traffic Logs Picture a typical moment in your favorite web browser, just as you go to a web site, and focus on the address bar. The address starts HTTP or HTTPS, right?when you make a web request, an HTTP server, somewhere, processes your request and sends an answer-document that appears in your (client-side) software. Leaving all the complexity aside, that is how it works: request, process, response. It even works that way when you check the train schedule using your iphone. For each request, the HTTP server usually writes an entry in a web traffic log to record which file was requested, by whom, whether the request was successful, and so on. Whether those log files constitute a violation of your privacy is another long story which, although fascinating, is outside the scope of this article! Ordinarily, Windows-based webmasters use Microsoft SQL Server to store and query their IIS web traffic logs, but what if you are using Apache, or would simply prefer to use Firebird SQL? If you are the owner or webmaster of a web site, you might look at the traffic log files using anything from Notepad to Firebird to a glossy web-stats package to learn what surfers are doing on your web site. Here are some examples of reasons for studying web traffic logs: You can find out about errors on your site, including invalid links. Stop link rot! You can also find out how much traffic is coming from people versus from software robots. (One typical example of a "bot" is Googlebot, the "spider" used by Google to "crawl" the "web" for keywords, etc.) If you are doing any type of search engine optimization, such as displaying pages slightly differently to web robots than to humans, it can be vital to detect new bots as they come out. If you want to verify whether an advertiser is really sending you the traffic that they claim to be sending you, especially if you are paying on a per-click basis, running accurate queries is essential. These are only a few of the reasons that people wish to have some strong tools for viewing and analyzing web traffic logs. Microsoft IIS offers an ODBC option for logging the data directly to a SQL database. So I tried that first, with Firebird ODBC. That idea had Two Big Problems: 1. I could not make it work; 2. In ODBC-mode, IIS only saves a few fields, not the full extended list of fields. This led to the idea of building a utility to import the.log data into a Firebird database. Microsoft SQL has a bulk import feature; Firebird offers importing from so-called "external files". This external file feature was to be the basis of the utility. In addition to having fun, I also wanted to quantify the relative speed of two different versions of Delphi, two different versions of Firebird, and several different data access components magazine voor software development 11

12 DELPHI Any difficulty? If you have not looked at a web traffic.log file lately, you might be wondering what could be so difficult about importing its contents into a database. Surely in 2009, this must be a simple software task! The two main difficulties are: 1. The.log file contains comment rows and data rows, and we only want to import the data; 2. The list of fields can vary within the file, whenever the comments indicate a structure change. To make these difficulties more clear, look at a minimalist.log file (from with some comment rows, starting with #, then one data row, and then more comments to indicate a structure change and one final data row. #Software: Internet Information Services 6.0 #Version: 1.0 #Date: :42:15 #Fields: time c-ip cs-method cs-uri-stem sc-status cs-version 17:42: GET /default.htm 200 HTTP/1.0 #Software: Internet Information Services 6.0 #Version: 1.0 #Date: :44:00 #Fields: time c-ip cs-method cs-uri-stem sc-status cs-version cs(user-agent) 17:44: GET /default.htm 200 HTTP/1.0 Mozilla/5.0+Ok Listing 1: Minimal IIS Log File where #Fields comment defines structure of following data Stripping out the comment fields can be done in many ways, including using the free utility named PrepLog from Microsoft. However, making the importer cope with a structure that can vary an unlimited number of times per document is a bit more challenging. In web traffic log files, the data fields are delimited by a single space. Data strings, such as the user agent*, where you might ordinarily expect spaces, have those spaces translated to a plus ('+') symbol by the http server software prior to logging. (*: The "user agent" is the name of the http client software used by the user - commonly a web browser such as Firefox, Opera or Internet Explorer. Finding a user agent of "Mozilla/5.0+Ok" in a log file could mean that a person was there using Firefox, or it could means that some other http client was there, hoping that your web site would give it content as-if it were Firefox. Zie Mozilla.) The Goal If all goes well, we will end up with the web traffic data in a table, in a Firebird database. In figure 1 you can see some of the fields, as displayed by the IB_SQL utility: The question is, how quickly can we import the data?does it matter which Delphi compiler we use, or which data access components? Can we measure a difference between Firebird SQL v1.5 and v2.1? And how exactly does one use the External Files feature? Our Example Log Files The examples discussed here use log files generated by IIS 6 on Windows 2003, in Extended log format, made daily, with some but not all optional fields included. We have also tested the import of log files made by IIS 5 on Win2000. For testing, we used more than 60 log files, totaling more than 1/2 GB of data, courtesy of traffic data from Earth Wave Records, ranging from July 4th to early September The web application behind the site was written with Delphi 7 and WebHub. The site uses the ISAPI filter from HREF Tools named StreamCatcher to, among other things, adjust the IIS log files on the fly so that the Session ID (without any random portion) can be readily parsed out by FBPrepLog or human eyes. The particular log file used for all the performance tests was from 31-Aug-2009 and it size was 12,680 kb. Runtime Environment All tests were done on inside a VirtualBox (with thanks to WebCentre Ltd in New Zealand, who allowed us to run tests on one of their backup servers). Virtualizer Sun VirtualBox v3.0.4 Host OS Windows 2003 Standard Guest OS Windows XP Pro with SP3 Guest RAM 512 KB Guest Disk 10MB drive C Guest CPU 1 ble 1: Runtime Environment Table 1: Runtime Environment F Firebird Installation Notes The tests started with the installation of Firebird Win32.exe, using default options with these minor adjustments on the last page of choices: [ ] Use the Guardian [ ] Start Firebird automatically [x] Install Control Panel Applet [x] Copy Firebird client library [x] Generate client library as GDS32.DLL To test the newest Firebird, I uninstalled Firebird 1.5 and then installed the Firebird _0_Win32.exe file, again using default options. After installing Firebird, the firebird.conf file MUST be adjusted per the notes in the readme-fbpreplog.rtf file. Otherwise, your output when running FBPrepLog will look like this: Preparing external LOGBLOCK #0... Created table... Exception Access to external file "C:\FBPREPLOG\ LOGBLOCK 0" is denied by server administrator Listing 2: Oops - forgot to modify firebird.conf to grant access to external files Fig. 1: IB_SQL shows some of the IISLOGS table after FBPrepLog did the import Reset Between Tests Of course it is helpful to reset the starting point prior to each test. The reset-test BAT file stops the Firebird service, copies an empty database to the official location and restarts Firebird. Note that the empty database file does NOT include the table which will hold the data; that is created on the fly by FBPrepLog. 12 MAGAZINE

13 DELPHI CD /D c:\fbpreplog net stop FirebirdServerDefaultInstance copy IISLOGS.empty.fb2.fdb iislogs.fdb net start FirebirdServerDefaultInstance Listing 3: A BAT file to reset things between tests Test Results The test results cover two areas: size and speed. Size of FBPrepLog.exe The following table illustrates how much variation there is in the size of the FBPrepLog.exe depending on the type of components used and the compiler used: IBX is the built-in Interbase Express driver provided with Delphi; IBO refers to the TDataSet-derived version of Interbase Objects, where all components are named TIBO*; IBO Native refers to the version of Interbase Objects which descends from TComponent, where all components are named TIB_*; dbexpress refers to the new Firebird driver provided with Delphi Delphi 7 IBX 405 kb IBO (TIBO*) 1159 kb IBO Native 965 kb (TIB_*) Delphi 2010 IBX 827 kb dbexpress 1420 kb ble 2: Size of EXE depending on data access components and compiler Table 2: Size of EXE depending on data access components and compiler To better understand where the "size" comes from, we can look at the units linked in depending on the test: program fbpreplog; {Firebird SQL "prep log" utility} {$APPTYPE CONSOLE} {$DEFINE TESTIBX} {any Delphi, test Interbase Express} //{$DEFINE TESTDBEXPRESS} {for Delphi 2010, test dbexpress} //{$DEFINE TESTIBO} {test TIBOQuery, //{$DEFINE TESTIBONATIVE} {test native TIB_Query} //{$DEFINE HREFTOOLS} {to support ZaphodsMap configuration} uses SysUtils, DateUtils, {$IFDEF TESTDBEXPRESS} // dbexpress DBXFirebird, SqlExpr, WideStrings, {$ENDIF} {$IFDEF TESTIBX} // Interbase Express IBDatabase, IBCustomDataSet, IBQuery, {$ENDIF} {$IFDEF TESTIBO} // IBObjects IB_Components, IBODataSet, {$ENDIF} {$IFDEF TESTIBONative} // IBObjects Native IB_Components, {$ENDIF} {$IFNDEF TESTIBONATIVE} DB, // TDataSet used by most access components {$ENDIF} {$IFDEF HREFTOOLS} {*htns*}zaphodsmap, // for advanced, flexible configuration {*htns*}zaphodsmapmessages, {*htns*}zaphodprojectoptions, {*htns*}nativexml, {*htns*}ucode, {$ENDIF} Classes ; Listing 4: Units used in FBPrepLog DPR Speed of FBPrepLog.exe Each type of test was run at least three times and the average speed is reported here. The slowest speed is 4 minutes 41 seconds and the fastest is 1 minute 22 seconds. Delphi 7 Delphi 2010 IBX IBO IBO Native IBX dbexpress Firebird 1.5 4min 41sec 4min 5sec 4min 11sec 2min 30sec 2min 36sec Firebird 2.1 3min 25sec 3min 1sec 2min 58sec 1min 23sec 1min 22sec Table 3: Results of Timing Tests Unfortunately, table 3 does not include any Delphi 2010 test results for IBO nor IBO Native because those components were not available for that compiler at the time of testing. Based on the results with Delphi 7, it seems reasonable to expect IBO's performance in Delphi 2010 to be very similar to IBX and dbexpress. In any case, the speed differences among data access components is quite small. My guess is that this is because most of the time is spent (a) having the OS write the external file and (b) having Firebird bulk-import. Remember, in FBPrepLog, we are using a very small, rare subset of the data access component's capabilities. Therefore these timing results are not indicative of overall performance; that would require different tests. The speed improvement from Delphi 7 to Delphi 2010 is quite significant, and Firebird 2.1 is definitely faster than Firebird 1.5 Highlights from the Source Code The FBPrepLog utility is made from one source code file, FBPrepLog.DPR, with no additional PAS files. There are just under 900 lines of code. Some highlights follow. To understand the "engine" inside FBPrepLog, you will need some reference to the data structures, which follow in listing 5: const cutilversion = ' '; LogFieldDBEquivalent: array[0..29] of array[0..2] of string = ( ('time', 'fieldtime', '10'), // ('Field in IIS Log-file', 'Equivalent to field('time') // in Firebird database'). // 'Field' prefix avoids reserved-words. ('c-ip', 'fieldcip', '20'), // snip ('cs(user-agent)', 'fieldcsuseragent', '2048'), ('cs(cookie)', 'fieldcscookie', '2048'), ('cs(referer)', 'fieldcsreferer', '2048'), ('cs-username', 'fieldcsusername', '40'), magazine voor software development 13

14 DELPHI // snip ('sc-substatus', 'fieldscsubstatus', '40') ); AdditionalFieldsCount = 8; LogDBAdditionalFields: array[0..1] of array[0..additionalfieldscount - 1] of string = ( ('cs-uri-query', 'sessionid', 'session=', '&', '15', '', '+', ''), // SessionId placed in log-field "cs-uri-query". Value // placed after string "session=" and before delimiter "&" // This feature is for WebHub sites. ('cs-uri-stem', 'lingvo', '', '', '15', '#', '+', '/eng#/fra#/rus#/spa#/deu#/ita#/nld#/jpn#/chi') //# is delimiter //+/- is to include/exclude // erwrwe#cxvx - delimited string, erwrwe // and cxvx are items // This feature is for any site with translated sub-sites ); LogBlockMaxSize = 15000; type TLogBlockData = record Date: string; Index: Integer; Fields: TStringList; FieldsLengths: TStringList; end; TLogConfiguration = record dbpath: string; dbusername: string; dbpassword: string; dbtablename: string; end; TFBImportIISLog = class private FLogFile: TStringList; FLogBlock: TStringList; FLogBlockData: TLogBlockData; FLogConfiguration: TLogConfiguration; FdbFieldNames: TStringList; FdbAdditionalFieldNames: TStringList; public constructor Create; destructor Destroy; override; procedure LoadConfiguration; function PrepareLogsExternalTable(InFilename, OutFilename : string; var BlockStart: Integer): Integer; procedure ImportLogBlock(Filename: string); public property BlockIndex: Integer read FLogBlockData.Index; property LogTableName: string read FLogConfiguration.dbTableName write FLogConfiguration.dbTableName; end; var {$IFDEF TESTDBEXPRESS} LogsDatabase: TSQLConnection; LogsTransaction: TObject = nil; // not used {$ENDIF} {$IFDEF TESTIBX} LogsDatabase: TIBDatabase; LogsTransaction: TIBTransaction; {$ENDIF} {$IF Defined(TESTIBO) or Defined(TESTIBONATIVE)} LogsDatabase: TIB_Connection; LogsTransaction: TObject = nil; // not used {$IFEND} Listing 5: Data structures and essential variables The database location, log table name, user name and password parameters all have default values. These values can be overridden by command line parameters. The type of components needed to connect to the database and manage the external file import vary by test. At the end of listing 5, you can see how TSQLConnection is used in Delphi 2010 with dbexpress, whereas TIBDatabase is used with the IBX components which are available in older versions such as Delphi 7. When I compile with the {$DEFINE HREFTools} active and link in ZaphodsMap, etc., I can use XML files to configure the same details. That is helpful for me because I have to organize FBPrepLog import processes for many servers. If you are interested in advanced configuration, see TFBImportIISLog.LoadConfiguration in the source and pay a visit to the ZaphodsMap web site. The function TFBImportIISLog.PrepareLogsExternalTable transforms the data in the.log file into another file which is suitable for bulk-import into Firebird. The procedure TFBImportIISLog.ImportLogBlock does the "real work", and it includes the definition of all the SQL that is used for all steps in the process. Some steps are optional (such as creating the IISLOGS table, which may already exist). Please see the FBPrepLog.dpr file if you are interested in how this works -- look for procedure TFBImportIISLog.ImportLogBlock. Listing 6 shows certain key lines in bold to show the overall flow. procedure TFBImportIISLog.ImportLogBlock(Filename: string); //snip case SQLId of 1: //snip 12: begin Clear; Add('CREATE TABLE ' + 'Temp' + EXTERNAL FILE ''' + Filename + ''' '); //snip 14: begin Clear; Add('INSERT INTO ' + LogTableName + ' ('); //big snip try GetSQL(1, SQL); // step 1 Open; TableExists := not Eof; Close; //snip -- code for creating table, trigger, generator GetSQL(14, SQL); // step 14 ExecSQL; //snip Transaction.Commit; //snip GetSQL(11, SQL); // step 11 ExecSQL; //snip LogsDatabase.Connected := False; //snip Listing 6: ImportLogBlock The rest of the FBPrepLog source code (other than ImportLogBlock) is involved with (a) showing usage syntax in case someone needs to see the parameters allowed before running it, (b) looping as needed when importing all files in a directory and (c) timing the import process. Data Mining To get a rough idea of the amount of traffic by day, we can use the query shown in listing 7. This includes requests by humans and web robots. 14 MAGAZINE

15 DELPHI SELECT a.fielddate, count(a.id) FROM IISLOGS a group by a.fielddate order by a.fielddate To count the number of links from Google, we can count the hits where the referer starts with (and that will include google.co.jp which is relevant for this web site). Listing 7: Query count of requests by date FlameRobin or IB_SQL (or a custom Delphi application) can be used to display the results. If FlameRobin is used, some reassuring information is displayed while the query runs, as shown in the figure below. On a site that uses WebHub or for any reason includes a session id in the URL, we can follow people (anonymously) and find out which pages they view, and from that perhaps we can determine which pages to improve. The example shown in figure 5 helps us focus on hits from people who were sent by Google, to find out whether they stayed around to view more than 1 page after arriving. The SQL is a bit interesting and is shown in listing #8. The substring function is used because the SessionID field is varchar(128) and only the first 15 characters are signficant. (Yes - we have shortened that field since taking these screenshots.) Fig. 2: FlameRobin shows status info prior to running the query To find out whether we have any bad links on the site, we can search for hits where the status code is 404 (file not found). Of course, some of those hits will probably be from hackers trying to get in by trying vulnerable resources which yield access on some systems. In figure 3, you can see some of these "rotten links" and who has them (the Referer is the URL which led to the request). Fig. 5: FlameRobin shows result of query checking whether people arriving from Google "stick" on the web site If this query is run on a site and shows mostly 1's in the Count column, that would indicate that arriving surfers did not immediately see what they wanted, and they did not feel like following any links within the site. If these had been paid (adwords) links from Google, this would indicate an expensive problem, because all those click-throughs would represent wasted advertising. Figure 3: FlameRobin shows invalid requests and who sent them select B.FIELDDATE, Substring(B.SESSIONID from 1 for 15) as SESSIONIDCUT, count(b.id) from IISLOGS B, ( select A.FIELDDATE, Substring(A.SESSIONID from 1 for 15) as SESSIONIDCUT from IISLOGS A where (A.SessionID > '1001') and (A.fielddate >= ' ') and (A.FIELDCSREFERER STARTING WITH 'http://www.google.') ) GOOGLERS where (SUBSTRING(B.SESSIONID FROM 1 for 15) = GOOGLERS.SESSIONIDCUT) and (B.FIELDDATE = GOOGLERS.FIELDDATE) group by B.FIELDDATE, SESSIONIDCUT order by B.FIELDDATE, SESSIONIDCUT Fig. 4: FlameRobin shows people arriving from Google Listing 8: Nested query to count hits on the same session number for Googlers magazine voor software development 15

16 DELPHI This is just a sampling of the data mining that is possible once the data is in a database. Different sites have different requirements, and it is possible for anyone to do their own analysis if they are willing to put in the effort to figure out the query syntax. The SQL Knowledge Base compiled by IB Phoenix was helpful to me while I worked on the queries shown here. For low-traffic sites, you might not need any queries. Simply having the traffic in an organized format makes it possible to read through the entries and see important patterns. If you have a do-it-yourself site, that might be sufficient. Quick Tips For prototyping queries, consider installing both FlameRobin and IB_SQL. They each have their strengths. Use the fastest machine available for Firebird SQL. Log databases become large quickly and you will save yourself a lot of time by using a fast machine. If you decide to use FBPrepLog, test it once on a relatively small.log file and review the resulting IISLogs table. Then, go back to the source code and consider changing some of the field names to be shorter (easier to type and recognize), and consider making some field lengths shorter. Then, recreate an empty database and start using FBPrepLog daily or hourly. If you have other data transformations that you would like to accomplish during import (such as tracking the lingvo in its own field rather than just in the uristem), study the code which fills in the SessionID and Lingvo and use that as a basis for your own customizations. Enjoy! International Character Sets The examples in this article used English web sites and URLs. It is possible, with IIS6 on Win2003 and later, to log requests using UTF8, allowing for many important non-western lingvos. The FBPrepLog utility would need to be modified to support UTF8. The logic within the external file processing would need to change, and importantly, when you create the Firebird database to hold the traffic data, you would have to specify the charset as "UTF8", rather than "None." Both IB_SQL and FlameRobin make it easy to select the charset when the database is first created. It is very likely that by the time you read this article, the coding changes will be complete and included in FBPrepLog as posted on Code Central. Products and Other Things Worth Finding To find any of the products or services mentioned in this article, please see table 4. All URLs were valid as of September 3, Conclusion Were you surprised to find so little difference in speed between the data access components?i certainly was, until I realized that the whole point of doing a bulk import is that the Firebird engine does all the work, rather than the components. Finding out that Delphi 2010's compilation of the same source code (e.g. the "IBX" test) led to an EXE that was larger, yet 45% faster, was a wonderful outcome and has convinced me to start recompiling all my utilities with Delphi Finding out that Firebird 2.1 was faster the 1.5 was not a surprise, although I was glad for the confirmation. Now I need to chase down my last remaining copies of Firebird 1.5 and get them all upgraded! Thank you very much for reading this article, and please consider donating at least $10 to Firebird Foundation if you use FBPrepLog. Grazie. Danke sehr. Merci. Gracias. Dank u! Product URL Notes FBPrepLog Source cc.embarcadero.com Use of Code Central is free as long as you have registered with the Developer Network. Look for item # Firebird SQL Free, open-source Firebird Foundation ndation&id=contributions Any $ donation will be appreciated and invested per priorities which are open to discussion and community input. IIS6 enable UTF8 Knowledge Base Delphi Not free; talk to your local Embarcadero sales rep for upgrade pricing and deals. Firefox Free; available in many lingvos US/firefox/all.html FlameRobin Free admin and query tool Hosting Colo server IB Objects Interbase Objects components (free eval; trustware license) IB_SQL Free admin and query tool ol/windowsserver2003/library/iis/bea 506fd-38bc-4850-a4fbe3a0379d321f.mspx?mfr=true Topic: Log File Formats in IIS (IIS 6.0) Use [Search KnowledgeBase] link, bottom-left of home page, for excellent information about many aspects of Interbase and Firebird SQL Mozilla en.wikipedia.org/wiki/mozilla History lesson Opera Alternative to the alternative. RFC for logs Defines standard for web traffic.log files StreamCatcher Commercial ISAPI filter for remapping; can modify IIS logs on the fly. Vintage vinyl Supplied the traffic logs records Virtual Box Free, open-source... from Sun Warehousing and Distribution Courier Services co-sponsored the development of FBPrepLog to help the Firebird Foundation WebHub Commercial product; a web development framework for Delphi for sites that are to be translated, skinned or otherwise deployed repeatedly. ZaphodsMap Free, open-source, configuration subsystem from HREF Tools Ann Lynnworth Ann Lynnworth was born near Boston, Massachusetts USA at the right time to catch the information technology wave. In 1978, she found she could not resist learning to program fancy macros for Word- Perfect, and she has never been afraid to pick up a manual and/or guess her way into a new technology. She started her "Software Doctor" consulting business in 1983 on Apple's early computers, published WordStar at Your Fingertips, wrote Situation Analyst for the IBM PC, helped create Ronstadt's Financials and then joined XL/Proteus to learn all about Paradox and a bit about SQL. Skipping ahead to 1994, Ann learned Delphi and soon co-founded HREF Tools and has worn many hats with the internet tools company, the most enjoyable of which was producing Tech Talk Radio for several years for WebHub customers. A dynamic speaker with an unusual point of view, Ann has had rave reviews from attendees in training seminars and at technical conferences. Ann holds an associate art's degree from Simon's Rock College and a bachelor s degree in psychology from Wellesley College, also in Massachusetts. Table 4: Product Placement 16 MAGAZINE

17 UX Andries van der Meulen Daarom User Experience Design! Wat is het? User Experience, of UX in het kort, is de wetenschap over hoe een persoon een systeem ervaart en gebruikt. In dit artikel richt ik mij voornamelijk op UX van software applicaties. Dit varieert van mobiele applicaties tot tablet-, desktop- en webapplicaties. Als je het vervolgens over User Experience Design hebt, of UXD in het kort, dan ga je actief nadenken over wat de best mogelijke manier is om die applicatie door de eindgebruiker te laten ervaren. UX designers zijn voortgekomen uit verschillende rollen uit de 80er jaren. Destijds waren het voornamelijk mensen met een achtergrond die niet in de techniek lag, met bijvoorbeeld de naam Usability Engineers. In de loop der jaren zijn deze rollen geëvolueerd en is het meerdere specialisaties gaan kennen. Grafisch en interactie-ontwerpers, bouwers van prototypen, mensen die gespecialiseerd zijn in het testen met eindgebruikers, integratiespecialisten en de meer recent verschenen Persuasion Architect. Ze houden zich onder andere bezig met ergonomie, informatiedichtheid, navigatie, schermopbouw en de werkomgeving van de gebruikers. Helaas is het in veel projectmethoden nog steeds niet gestandaardiseerd. Maar dit is aan het veranderen. Er zijn steeds meer bedrijven die hiervoor ondersteuning bieden. Maar wat in de meeste situaties gebeurt is dat opdrachtgevers van het gebruik van UXD afzien, omdat niemand ze het voordeel van de investering heeft vertelt. Daarom is het tijd om aan te geven waarom je dit nou juist wel wilt. Waarom wil je het? De voordelen van het gebruik van UXD zal ik uitleggen aan de hand van de Application Lifecycle Management cirkel. Dit iteratief proces is onderverdeeld in drie delen. De eerste is Business, waar de functionaliteiten worden bepaald. Daarna komt Development waarbij de applicatie gebouwd en getest wordt. Als laatste is er Operations. Hier wordt o.a. de applicatie ondersteund in het gebruik. Van het laatste onderdeel kan vervolgens de applicatie worden uitgefaseerd, of er wordt teruggegaan naar Business om de cirkel te herhalen. Hieronder staan 4 argumenten waarom je als opdrachtgever UXD wilt. 1. Business - Verbeterde requirements Als je UX wilt gebruiken in je project, is het verstandig dit te doen vanaf de eerste stap, door het toevoegen van wireframes, interface design, interaction design, rapid prototyping en eindgebruikerstesten. Er wordt een betere dienst aan de opdrachtgever geleverd omdat je nu kunt laten zien wat ze kunnen verwachten. Het is inderdaad een extra investering en zal vermoedelijk de business periode verlengen. Maar wanneer dit goed wordt geïmplementeerd zal de toegevoegde waarde direct zichtbaar worden bij de volgende fase van het project. De ontwikkeltijd wordt verkort en daarmee de ontwikkelkosten. 2. Development - Versnelde Time-to-market Omdat de kwaliteit van de documentatie en specificaties is verbeterd, wordt de ontwikkeltijd gereduceerd. Er zullen minder wijzigingen op het laatste moment nodig zijn en de kans dat er onvoorziene fouten worden gemaakt is een stuk kleiner. Testen zal sneller en beter gaan, vanwege de duidelijke specificatie die al vooraf beschikbaar was. Door dit alles kun je sneller een applicatie uitbrengen. Sterker nog, naar mate het projectteam meer ervaring krijgt, wordt de extra tijd in de requirementsfase gecompenseerd door de snellere ontwikkeltijd. 3. Operations - Toegevoegde waarde per gebruiker Wanneer de applicatie is uitgerold, zullen de gebruikers beter en sneller kunnen werken en daarbij minder fouten maken. De applicatie is speciaal ontworpen en opgezet voor hun behoeften en hun manier van werken. Nieuwe medewerkers zullen minder tijd nodig hebben om de applicatie te leren, omdat een applicatie met een intuïtieve User Experience zichzelf uitlegt. Over het algemeen kun je zeggen dat het geleverde werk per gebruiker toeneemt. 4. Operations - Verlengde levensduur applicatie De levensduur van een applicatie neemt toe wanneer deze perfect aansluit op de werkmethoden van de gebruiker. Deze zal dan minder snel klagen, minder workarounds hoeven te gebruiken en daardoor minder snel aansturen op vervanging. Naast de argumenten voor de opdrachtgever, staat hieronder waarom het binnen het projectteam ook toegevoegde waarde heeft. Fig. 1: Application Lifecycle management 1. UXD bij ontwikkeling Door het verbeterde functioneel en technisch ontwerp zullen er in de architectuur minder wijzigingen en fouten voorkomen. Hiermee verkort je de volledige ontwikkeltijd. Het ontwikkelteam werkt met duidelijke en getoetste specificaties waardoor er een beter beeld is waarnaar wordt toegewerkt. Technisch wordt er een betere kwaliteit gehaald en onduidelijkheden zijn al in een vroeg stadium weggenomen. magazine voor software development 17

18 UX UXD in de ontwikkelfase werkt het best met de volgende drie rollen; de designer, de ontwikkelaar en iemand die daartussen staat, een zogenaamde integrator. De designer zorgt voor de interactie en interfaces. De ontwikkelaar maakt de interne werking van het systeem. De integrator kent beide kanten van de applicatie en kan zodoende het proces sturen zodat het werk van de designer en ontwikkelaar goed op elkaar aansluit. 2. Visuele terugkoppeling opdrachtgever Één van de belangrijkste zaken is hoe je communiceert met de opdrachtgever. Met UXD kun je naast tekst ook met beelden de wensen en eisen omschrijven. Het biedt de mogelijkheid te zien wat het wordt voordat het klaar is. Door het tekenen van wireframes, het maken van een interactie- en interface-ontwerp, en bouwen van prototypen met de voorgestelde functionaliteit, is er de mogelijkheid om een betere indruk te geven dan wat met tekst alleen mogelijk is. Daarbij bied je een handvat aan de opdrachtgever om duidelijker eventuele wijzigingen door te geven. Het is makkelijker aan te geven hoe, waarom en waar iets moet worden veranderd. En als er daarbij gebruik wordt gemaakt van prototypen, kunnen alle vooraf ontstane aannames worden voorkomen. Daarbij wordt ook gelijk getest of het voorgestelde idee werkt in de praktijk. het beste resultaat zul je voor elke mens-machine interactie actief moeten nadenken hoe dit gebeurt en hoe je het kunt optimaliseren. Met de huidige technieken zijn er weinig restricties om zo n mensmachine interactie zodanig uit te ontwikkelen dat het perfect kan aansluiten bij de werkzaamheden van zijn eindgebruikers. Uiteraard moet je een gezonde afweging maken in de mate van het toepassen. Voor kleinere projecten met relatief weinig eindgebruikers is de toegevoegde waarde van een uitgebreid onderzoek ook een stuk minder. Hierbij kun je er voor kiezen om alleen op basis van feedback van een uitgerolde applicatie verbetering aan te brengen. Initieel een zo n goed mogelijk product opleveren, maar waarbij je uitgaat dat er regelmatig nieuwe versies worden gelanceerd. UXD is de toegevoegde waarde bij applicatieontwikkeling dat het verschil gaat maken in de nabije toekomst Op het moment dat het product door veel mensen gebruikt gaat worden, en waarbij de beschikbare tijd van de eindgebruiker van belang is, is het t absoluut waard om UXD vanaf het begin toe te passen in het project. Wat is het niet? Waarschijnlijk doen veel mensen onbewust aan UXD. Ze denken na over een product dat goed aansluit bij de wensen van de gebruikers. Echter doordat ze hier niet bewust mee bezig zijn of omdat ze ook vaak een andere agenda hebben, komt het UXD gedeelte nooit volledig tot zijn recht. Voor een stukje bewustwording gebruik ik de 10 meest voorkomende misvattingen over UXD die Whitney Hess (User Experience Designer in New York) heeft samengesteld. 1. UXD is niet alleen User Interface Design Alhoewel de User Interface (of UI) het meest herkenbare is van de gebruikerservaring, is het slechts een onderdeel van UXD. Hoe informatie getoond wordt en hoe mensen ermee communiceren is ongelofelijk belangrijk, maar UXD gaat veel dieper. Het is de basis voor de gehele applicatie en daarmee ook de UI. Fig. 2: Interaction Design 2. UXD is niet één stap in het proces Het is iets waar je continu mee bezig moet blijven. Bij iedere iteratie neem je de ervaringen mee, en wordt er opnieuw gekeken waar en of je kunt verbeteren. UXD is niet een stap die je kunt afronden, het moet samenvallen in alles wat je in het project doet. 3. UXD gaat niet over techniek User Experience gaat niet over techniek, maar over hoe mensen leven, werken, hun dingen doen en alles wat daarmee te maken heeft. Techniek is daarbij een middel, maar geen doel. Net zoals schilders hun verf gebruiken om te communiceren, gebruiken User Experience Designers beschikbare techniek om mensen te helpen hun doel te bereiken. Het primaire doel is dan ook om mensen te helpen en niet om de beste, mooiste of laatste techniek te gebruiken. Fig. 3: Wireframe example Wanneer gebruik je het? User Experience Design wordt toegepast op het moment dat er direct of indirect gebruikers bij het eindproduct betrokken zijn. Voor 4. UXD gaat niet alleen over bruikbaarheid De bruikbaarheid van een product verhogen is erg belangrijk, maar UXD gaat ook over gedrag. Je gebruikers moeten het product willen gebruiken. Het moet aantrekkelijk zijn en rekening houden met leerbaarheid en emoties. Een goede manier om deze aspecten weer te geven is Peter Morville s UX honeycomb. 5. UXD gaat niet alleen over de gebruiker De U van UXD staat voor User. Het staat centraal in deze methodologie. Maar deze eindgebruiker is niet het enige waar 18 MAGAZINE

19 UX nodig. Net als dat je voor een gebroken voet niet naar de cardioloog gaat. Je kunt niet verwachten dat alle UXD professionals voor alle expertises een antwoord hebben. 10. UXD is niet een keuze Ik kan het me niet voorstellen dat een bedrijf bewust kiest voor een slecht UX ontwerp. Maar het gebeurt onbewust. Het is een risico. Daarbij beschouwen helaas nog steeds veel bedrijven UXD als een toevoeging, niet als een basisbehoefte. Wanneer je het verschil moet maken met de concurrentie, is UXD essentieel. Techniek zal op den duur het verschil niet meer maken, aangezien elk bedrijf kwalitatief op hetzelfde niveau komt door de continue ontwikkelingen van de frameworks. Het is daarom essentieel om nu te gaan werken om UXD binnen de projecten te krijgen om straks het verschil te maken. Fig. 4: Honeycomb rekening mee gehouden moet worden. UXD gaat namelijk over de zoektocht naar de beste combinatie van gebruikerservaring mét de business doelstellingen. Het is namelijk wel de bedoeling dat de applicatie bedoeld is om werk mee te verrichten. Daarnaast moet er ook rekening gehouden worden met bedrijfsspecifieke onderdelen zoals bijvoorbeeld de interne werkprocessen en de huisstijl. 6. UXD is niet prijzig Het gebruiken van UXD in je project hoeft niet veel te kosten. Elke project is afhankelijk van beschikbare mensen, mogelijkheden, tijd en geld. Daarop moet worden aangesloten en bepaald worden in hoeverre je UXD kunt gaan toepassen. Het is onverstandig om er direct bij het eerste project volledig voor te gaan. Probeer het stapsgewijs in te voeren, zodat op gegeven moment het een standaard in de projecten wordt. 7. UXD is niet makkelijk Helaas is het niet zo dat één methode alle antwoorden biedt voor het ontwerp. De grootste valkuilen zijn dat je aannames doet over hoe je eindgebruiker werkt. Het kost tijd om ze te leren kennen. Samen kun je vervolgens, op iteratieve wijze, komen tot het beste ontwerp. Daarbij wil je de juiste mensen gebruiken om die behoeftes te faciliteren. 8. UXD is niet de rol van één persoon of afdeling Binnen een project is het niet aan één specifieke persoon of een bepaalde groep om met UXD het product succesvol te maken. Iedereen moet hier aan meewerken. Echter omdat rollen en methodes nog niet gestandaardiseerd zijn, is het nu lastig hier volledig vorm aan te geven. Als je het niet kunt benoemen wordt het moeilijk hiervoor expertise aan te trekken. Er komt hier echter wel meer duidelijkheid in. Meer rollen worden algemeen erkend en krijgen daarmee ook de verantwoordelijkheden binnen het UX ontwerp. Maar voor een succesvol product, zal elk projectlid mee moeten doen met User Experience Design. 9. UXD is niet één discipline Afhankelijk van het product zijn er meerdere expertises nodig. Dit is ook van toepassing op UXD. Voor een webshop werk je naar een totaal andere gebruikerservaring dan bij een systeem voor een helpdesk. Hiervoor heb je ook mensen met andere expertises Conclusie User Experience Design is niet de rol van één persoon of afdeling. Het is een bewustwording dat het volledige team ondersteund voor een optimaal functionerend resultaat voor opdrachtgever en eindgebruikers. Je zorgt voor volledigere en getoetste requirements waarmee beter wordt gecommuniceerd, waardoor ontwikkeltijd wordt verkort, waar de applicatie meer oplevert tijdens operatie, en waarbij er een verlengde levensduur is voordat het uitgefaseerd kan worden. UXD is de toegevoegde waarde bij applicatieontwikkeling die het verschil gaat maken in de nabije toekomst. Referenties 10 Most Common Misconceptions About User Experience Design, 9 Januari 2009, door Whitney Hess, UX TIP: Andries van der Meulen Andries knows a lot about the presentation side of applications. He works regularly with subjects as graphical and interaction design for many different customers and projects. He also is a (certified) developer and knows multiple programming languages. By knowing both sides, he has the rare combination of creativity and logic. This regularly places him in the position of an integrator, which stands between designer, developer, requirements engineer and architect. jqtouch iphone applicaties maken maar geen zin om met Objective-C aan de slag te gaan. Het kan ook met HTML en JavaScript! Kijk eens naar jqtouch dat de kracht van HTML 5, jquery en JavaScript combineert om iphone applicaties te maken. En ze kunnen zelfs offline werken. Zie voor meer info. magazine voor software development 19

20 DATABASES Johan Machielse SQL Server Integration Services in de Praktijk SQL Server Integration Services (SSIS) is de Microsoft implementatie voor ETL (Extract, Transform, Load) waarmee je complexe data-integratie- en transformatie-oplossingen kunt bouwen. Met behulp van de Business Intelligence Development Studio (BIDS) kan de ontwikkelaar met standaard bouwblokken een enterprise oplossing bouwen. Dit artikel beschrijft de belangrijkste bouwblokken van SSIS, gevolgd door een beschrijving van de verschillende fasen van het ETL-proces aan de hand van een voorbeeldapplicatie. Daarna zal er een greep gedaan worden uit een aantal praktijksituaties waar je als SSIS ontwikkelaar mee te maken kunt krijgen. Een ETL-proces bestaat uit Tasks en pijlen die de flow aangeven Standaard bouwblokken Bij het maken van een SSIS-applicatie heeft de ontwikkelaar een aantal standaard bouwblokken tot zijn beschikking. Een SSISsolution bestaat uit één of meerdere uitvoerbare packages met daarin de functionaliteit om het ETL-proces te kunnen bouwen. Deze functionaliteit bouw je op met tasks en pijlen die de flow tussen tasks aangeven. De structuur van de package wordt beschreven in de control flow en het werkelijke inlezen, transformeren en laden van de data gebeurt in de data flow. Connection managers zijn de verbinding tussen een bron of doel en worden door de tasks gebruikt om data in te lezen resp. weg te schrijven. Je kunt de packages configureren met zgn. package configurations, en je kunt gebruik maken van event handlers voor het afhandelen van verschillende gebeurtenissen. SSIS voorbeeldapplicatie De voorbeeldapplicatie in dit artikel verzamelt elke week de kosten die zijn gemaakt voor de verschillende projecten binnen een bedrijf. Projecten worden uitgevoerd op diverse locaties in de wereld, waardoor kosten in verschillende munteenheden worden uitgedrukt. De manager van het bedrijf wil elke week een rapport hebben waarin alle projectkosten gesommeerd zijn uitgedrukt in euro s. De wekelijkse kosten van alle projecten worden aangeleverd in een CSV bestand met meerdere regels per project. SSIS genereert hier een rapport van waarin de projectkosten per land en per project gegroepeerd zijn. Fig. 2 : Schematische weergave van de SSIS voorbeeldapplicatie Fig. 1 : Overzicht van SQL Server Integration Services Fase 1: Extract In de eerste fase van het ETL-proces leest de package de brondata in. SSIS kan de brondata van verschillende soorten bronnen lezen, zoals een externe SQL Server database, een SAP-systeem of in ons geval een CSV-bestand. De data die het ETL-proces inleest, moet betrouwbaar zijn voor het doel en dus is het belangrijk om de 20 MAGAZINE

Snel en Schaalbaar met Velocity Distributed Cache

Snel en Schaalbaar met Velocity Distributed Cache Roy Cornelissen Snel en Schaalbaar met Velocity Distributed Cache In het hart van je computer vind je de processor en het interne geheugen. Deze onderdelen horen bij de computerarchitectuur die is vernoemd

Nadere informatie

Settings for the C100BRS4 MAC Address Spoofing with cable Internet.

Settings for the C100BRS4 MAC Address Spoofing with cable Internet. Settings for the C100BRS4 MAC Address Spoofing with cable Internet. General: Please use the latest firmware for the router. The firmware is available on http://www.conceptronic.net! Use Firmware version

Nadere informatie

Firewall van de Speedtouch 789wl volledig uitschakelen?

Firewall van de Speedtouch 789wl volledig uitschakelen? Firewall van de Speedtouch 789wl volledig uitschakelen? De firewall van de Speedtouch 789 (wl) kan niet volledig uitgeschakeld worden via de Web interface: De firewall blijft namelijk op stateful staan

Nadere informatie

Handleiding Installatie ADS

Handleiding Installatie ADS Handleiding Installatie ADS Versie: 1.0 Versiedatum: 19-03-2014 Inleiding Deze handleiding helpt u met de installatie van Advantage Database Server. Zorg ervoor dat u bij de aanvang van de installatie

Nadere informatie

Installatie instructies

Installatie instructies OpenIMS CE Versie 4.2 Installatie instructies OpenSesame ICT BV Inhoudsopgave 1 INLEIDING... 3 2 INSTALLATIE INSTRUCTIES... 4 3 OPENIMS SITECOLLECTIE CONFIGURATIE... 6 OpenIMS CE Installatie instructies

Nadere informatie

ICARUS Illumina E653BK on Windows 8 (upgraded) how to install USB drivers

ICARUS Illumina E653BK on Windows 8 (upgraded) how to install USB drivers ICARUS Illumina E653BK on Windows 8 (upgraded) how to install USB drivers English Instructions Windows 8 out-of-the-box supports the ICARUS Illumina (E653) e-reader. However, when users upgrade their Windows

Nadere informatie

ETS 4.1 Beveiliging & ETS app concept

ETS 4.1 Beveiliging & ETS app concept ETS 4.1 Beveiliging & ETS app concept 7 juni 2012 KNX Professionals bijeenkomst Nieuwegein Annemieke van Dorland KNX trainingscentrum ABB Ede (in collaboration with KNX Association) 12/06/12 Folie 1 ETS

Nadere informatie

Hoe met Windows 8 te verbinden met NDI Remote Office (NDIRO) How to connect With Windows 8 to NDI Remote Office (NDIRO

Hoe met Windows 8 te verbinden met NDI Remote Office (NDIRO) How to connect With Windows 8 to NDI Remote Office (NDIRO Handleiding/Manual Hoe met Windows 8 te verbinden met NDI Remote Office (NDIRO) How to connect With Windows 8 to NDI Remote Office (NDIRO Inhoudsopgave / Table of Contents 1 Verbinden met het gebruik van

Nadere informatie

Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14

Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14 QUICK GUIDE C Het beheren van mijn Tungsten Network Portal account NL 1 Manage my Tungsten Network Portal account EN 14 Version 0.9 (June 2014) Per May 2014 OB10 has changed its name to Tungsten Network

Nadere informatie

Standard Parts Installatie Solid Edge ST3

Standard Parts Installatie Solid Edge ST3 Hamersveldseweg 65-1b 3833 GL LEUSDEN 033-457 33 22 033-457 33 25 info@caap.nl www.caap.nl Bank (Rabo): 10.54.52.173 KvK Utrecht: 32075127 BTW: 8081.46.543.B.01 Standard Parts Installatie Solid Edge ST3

Nadere informatie

How to install and use dictionaries on the ICARUS Illumina HD (E652BK)

How to install and use dictionaries on the ICARUS Illumina HD (E652BK) (for Dutch go to page 4) How to install and use dictionaries on the ICARUS Illumina HD (E652BK) The Illumina HD offers dictionary support for StarDict dictionaries.this is a (free) open source dictionary

Nadere informatie

Cameramanager LSU Installation Guide

Cameramanager LSU Installation Guide Cameramanager LSU Installation Guide Network based video surveillance server Version 1.1 / August 2009 Copyright 2010 - Cameramanager.com Page 1 LSU installation guide index 1. Connecting the LSU to your

Nadere informatie

Leeftijdcheck (NL) Age Check (EN)

Leeftijdcheck (NL) Age Check (EN) Leeftijdcheck (NL) Age Check (EN) [Type text] NL: Verkoopt u producten die niet aan jonge bezoekers verkocht mogen worden of heeft uw webwinkel andere (wettige) toelatingscriteria? De Webshophelpers.nl

Nadere informatie

WWW.EMINENT-ONLINE.COM

WWW.EMINENT-ONLINE.COM WWW.EMINENT-OINE.COM HNDLEIDING USERS MNUL EM1016 HNDLEIDING EM1016 USB NR SERIEEL CONVERTER INHOUDSOPGVE: PGIN 1.0 Introductie.... 2 1.1 Functies en kenmerken.... 2 1.2 Inhoud van de verpakking.... 2

Nadere informatie

Interaction Design for the Semantic Web

Interaction Design for the Semantic Web Interaction Design for the Semantic Web Lynda Hardman http://www.cwi.nl/~lynda/courses/usi08/ CWI, Semantic Media Interfaces Presentation of Google results: text 2 1 Presentation of Google results: image

Nadere informatie

Security Les 1 Leerling: Marno Brink Klas: 41B Docent: Meneer Vagevuur

Security Les 1 Leerling: Marno Brink Klas: 41B Docent: Meneer Vagevuur Security Les 1 Leerling: Klas: Docent: Marno Brink 41B Meneer Vagevuur Voorwoord: In dit document gaan we beginnen met de eerste security les we moeten via http://www.politiebronnen.nl moeten we de IP

Nadere informatie

Handleiding beheer lijst.hva.nl. See page 11 for Instruction in English

Handleiding beheer lijst.hva.nl. See page 11 for Instruction in English Handleiding beheer lijst.hva.nl See page 11 for Instruction in English Maillijsten voor medewerkers van de Hogeschool van Amsterdam Iedereen met een HvA-ID kan maillijsten aanmaken bij lijst.hva.nl. Het

Nadere informatie

1. Voor het installeren wordt geadviseerd een backup te maken van uw database en bestanden.

1. Voor het installeren wordt geadviseerd een backup te maken van uw database en bestanden. NL: KiyOh.nl gebruikers kunnen met deze plug in automatisch klantbeoordelingen verzamelen, publiceren en delen in social media. Wanneer een klant een bestelling heeft gemaakt in uw Magento Shop, wordt

Nadere informatie

Intermax backup exclusion files

Intermax backup exclusion files Intermax backup exclusion files Document type: Referentienummer: Versienummer : Documentatie 1.0 Datum publicatie: Datum laatste wijziging: Auteur: 24-2-2011 24-2-2011 Anton van der Linden Onderwerp: Documentclassificatie:

Nadere informatie

Maillijsten voor medewerkers van de Universiteit van Amsterdam

Maillijsten voor medewerkers van de Universiteit van Amsterdam See page 11 for Instruction in English Maillijsten voor medewerkers van de Universiteit van Amsterdam Iedereen met een UvAnetID kan maillijsten aanmaken bij list.uva.nl. Het gebruik van de lijsten van

Nadere informatie

Multi user Setup. Firebird database op een windows (server)

Multi user Setup. Firebird database op een windows (server) Multi user Setup Firebird database op een windows (server) Inhoudsopgave osfinancials multi user setup...3 Installeeren van de firebird database...3 Testing van de connectie met FlameRobin...5 Instellen

Nadere informatie

Y.S. Lubbers en W. Witvoet

Y.S. Lubbers en W. Witvoet WEBDESIGN Eigen Site Evaluatie door: Y.S. Lubbers en W. Witvoet 1 Summary Summary Prefix 1. Content en structuur gescheiden houden 2. Grammaticaal correcte en beschrijvende markup 3. Kopregels 4. Client-

Nadere informatie

S e v e n P h o t o s f o r O A S E. K r i j n d e K o n i n g

S e v e n P h o t o s f o r O A S E. K r i j n d e K o n i n g S e v e n P h o t o s f o r O A S E K r i j n d e K o n i n g Even with the most fundamental of truths, we can have big questions. And especially truths that at first sight are concrete, tangible and proven

Nadere informatie

Understanding and being understood begins with speaking Dutch

Understanding and being understood begins with speaking Dutch Understanding and being understood begins with speaking Dutch Begrijpen en begrepen worden begint met het spreken van de Nederlandse taal The Dutch language links us all Wat leest u in deze folder? 1.

Nadere informatie

Registratie- en activeringsproces voor de Factuurstatus Service NL 1 Registration and activation process for the Invoice Status Service EN 11

Registratie- en activeringsproces voor de Factuurstatus Service NL 1 Registration and activation process for the Invoice Status Service EN 11 QUICK GUIDE B Registratie- en activeringsproces voor de Factuurstatus Service NL 1 Registration and activation process for the Invoice Status Service EN 11 Version 0.14 (July 2015) Per May 2014 OB10 has

Nadere informatie

Taco Schallenberg Acorel

Taco Schallenberg Acorel Taco Schallenberg Acorel Inhoudsopgave Introductie Kies een Platform Get to Know the Jargon Strategie Bedrijfsproces Concurrenten User Experience Marketing Over Acorel Introductie THE JARGON THE JARGON

Nadere informatie

Veel gestelde vragen nieuwe webloginpagina

Veel gestelde vragen nieuwe webloginpagina Veel gestelde vragen nieuwe webloginpagina Op deze pagina treft u een aantal veel gestelde vragen aan over het opstarten van de nieuwe webloginpagina http://weblogin.tudelft.nl: 1. Ik krijg de melding

Nadere informatie

Onder de motorkap van Microsoft Azure Web Sites. Eelco Koster Software architect ORDINA

Onder de motorkap van Microsoft Azure Web Sites. Eelco Koster Software architect ORDINA Onder de motorkap van Microsoft Azure Web Sites Eelco Koster Software architect ORDINA Agenda Introductie Architectuur Project Kudu Azure Resource Manager Doel Dieper inzicht geven in de werking van Azure

Nadere informatie

! GeoNetwork INSPIRE Atom!

! GeoNetwork INSPIRE Atom! GeoNetwork INSPIRE Atom GeoNetwork INSPIRE Atom 1 Configuration 2 Metadata editor 3 Services 3 Page 1 of 7 Configuration To configure the INSPIRE Atom go to Administration > System configuration and enable

Nadere informatie

Bijlage 2: Informatie met betrekking tot goede praktijkvoorbeelden in Londen, het Verenigd Koninkrijk en Queensland

Bijlage 2: Informatie met betrekking tot goede praktijkvoorbeelden in Londen, het Verenigd Koninkrijk en Queensland Bijlage 2: Informatie met betrekking tot goede praktijkvoorbeelden in Londen, het Verenigd Koninkrijk en Queensland 1. Londen In Londen kunnen gebruikers van een scootmobiel contact opnemen met een dienst

Nadere informatie

Cameramanager LSU Installation Guide

Cameramanager LSU Installation Guide Cameramanager LSU Installation Guide Network based video surveillance server Version 1.3 / November 2011 Copyright 2011 - Cameramanager.com Page 1 LSU installation guide index 1. Connecting the LSU to

Nadere informatie

LDA Topic Modeling. Informa5ekunde als hulpwetenschap. 9 maart 2015

LDA Topic Modeling. Informa5ekunde als hulpwetenschap. 9 maart 2015 LDA Topic Modeling Informa5ekunde als hulpwetenschap 9 maart 2015 LDA Voor de pauze: Wat is LDA? Wat kan je er mee? Hoe werkt het (Gibbs sampling)? Na de pauze Achterliggende concepten à Dirichlet distribu5e

Nadere informatie

Find Neighbor Polygons in a Layer

Find Neighbor Polygons in a Layer Find Neighbor Polygons in a Layer QGIS Tutorials and Tips Author Ujaval Gandhi http://google.com/+ujavalgandhi Translations by Dick Groskamp This work is licensed under a Creative Commons Attribution 4.0

Nadere informatie

Installatie SQL: Server 2008R2

Installatie SQL: Server 2008R2 Installatie SQL: Server 2008R2 Download de SQL Server 2008.exe van onze site: www.2work.nl Ga naar het tabblad: Downloads en meld aan met: klant2work en als wachtwoord: xs4customer Let op! Indien u een

Nadere informatie

Joomla! en SEO: De basis elementen van SEO. Richard Bruning

Joomla! en SEO: De basis elementen van SEO. Richard Bruning Joomla! en zoekmachines : De basis elementen van SEO Richard Bruning Joomla! out of the box CMS Hoe doeltreffend is Joomla out of the box voor U als website eigenaar? Ontmoet Tux, onze opdrachtgever voor

Nadere informatie

Ontpopping. ORGACOM Thuis in het Museum

Ontpopping. ORGACOM Thuis in het Museum Ontpopping Veel deelnemende bezoekers zijn dit jaar nog maar één keer in het Van Abbemuseum geweest. De vragenlijst van deze mensen hangt Orgacom in een honingraatpatroon. Bezoekers die vaker komen worden

Nadere informatie

Media en creativiteit. Winter jaar vier Werkcollege 7

Media en creativiteit. Winter jaar vier Werkcollege 7 Media en creativiteit Winter jaar vier Werkcollege 7 Kwartaaloverzicht winter Les 1 Les 2 Les 3 Les 4 Les 5 Les 6 Les 7 Les 8 Opbouw scriptie Keuze onderwerp Onderzoeksvraag en deelvragen Bespreken onderzoeksvragen

Nadere informatie

MobiDM App Handleiding voor Windows Mobile Standard en Pro

MobiDM App Handleiding voor Windows Mobile Standard en Pro MobiDM App Handleiding voor Windows Mobile Standard en Pro Deze handleiding beschrijft de installatie en gebruik van de MobiDM App voor Windows Mobile Version: x.x Pagina 1 Index 1. WELKOM IN MOBIDM...

Nadere informatie

Functioneel Ontwerp / Wireframes:

Functioneel Ontwerp / Wireframes: Functioneel Ontwerp / Wireframes: Het functioneel ontwerp van de ilands applicatie voor op de iphone is gebaseerd op het iphone Human Interface Guidelines handboek geschreven door Apple Inc 2007. Rounded-Rectangle

Nadere informatie

Workflow en screenshots Status4Sure

Workflow en screenshots Status4Sure Workflow en screenshots Status4Sure Inleiding Het Status4Sure systeem is een ICT oplossing waarmee de transportopdrachten papierloos door het gehele proces gaan. De status kan gevolgd worden door de logistieke

Nadere informatie

Ius Commune Training Programme 2015-2016 Amsterdam Masterclass 16 June 2016

Ius Commune Training Programme 2015-2016 Amsterdam Masterclass 16 June 2016 www.iuscommune.eu Dear Ius Commune PhD researchers, You are kindly invited to attend the Ius Commune Amsterdam Masterclass for PhD researchers, which will take place on Thursday 16 June 2016. During this

Nadere informatie

beginnen met bloggen (kleine workshop Wordpress)

beginnen met bloggen (kleine workshop Wordpress) beginnen met bloggen (kleine workshop Wordpress) Een weblog is van oorsprongeen lijstje linktips met een stukje tekst. Oorspongvan het weblog Jorn Barger is an American blogger, best known as editor of

Nadere informatie

Tentamen Objectgeorienteerd Programmeren

Tentamen Objectgeorienteerd Programmeren Tentamen Objectgeorienteerd Programmeren 5082IMOP6Y maandag 16 november 2015 13:00 15:00 Schrijf je naam en studentnummer op de regel hieronder. Sla deze pagina niet om tot de surveillant vertelt dat het

Nadere informatie

ATOS Viewer for Dental Frameworks User Manual

ATOS Viewer for Dental Frameworks User Manual ATOS Viewer for Dental Frameworks User Manual www.dentwise.eu Inhoud Content NEDERLANDS... 2 1. Installatie... 2 2. Algemene Functies... 2 3. Afstanden Meten... 3 4. Doorsneden Maken... 4 5. Weergave Aanpassen...

Nadere informatie

Appendix A: List of variables with corresponding questionnaire items (in English) used in chapter 2

Appendix A: List of variables with corresponding questionnaire items (in English) used in chapter 2 167 Appendix A: List of variables with corresponding questionnaire items (in English) used in chapter 2 Task clarity 1. I understand exactly what the task is 2. I understand exactly what is required of

Nadere informatie

Opgave 2 Geef een korte uitleg van elk van de volgende concepten: De Yield-to-Maturity of a coupon bond.

Opgave 2 Geef een korte uitleg van elk van de volgende concepten: De Yield-to-Maturity of a coupon bond. Opgaven in Nederlands. Alle opgaven hebben gelijk gewicht. Opgave 1 Gegeven is een kasstroom x = (x 0, x 1,, x n ). Veronderstel dat de contante waarde van deze kasstroom gegeven wordt door P. De bijbehorende

Nadere informatie

Usage guidelines. About Google Book Search

Usage guidelines. About Google Book Search This is a digital copy of a book that was preserved for generations on library shelves before it was carefully scanned by Google as part of a project to make the world s books discoverable online. It has

Nadere informatie

Over dit boek. Richtlijnen voor gebruik

Over dit boek. Richtlijnen voor gebruik Over dit boek Dit is een digitale kopie van een boek dat al generaties lang op bibliotheekplanken heeft gestaan, maar nu zorgvuldig is gescand door Google. Dat doen we omdat we alle boeken ter wereld online

Nadere informatie

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

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

Nadere informatie

Tim Akkerman - Head of Mobile

Tim Akkerman - Head of Mobile Tim Akkerman - Head of Mobile Emesa is the largest e-commerce company for searching, comparing and booking travel and leisure packages in the following categories: Holidays - Other accommodations - Hotels

Nadere informatie

CHROMA STANDAARDREEKS

CHROMA STANDAARDREEKS CHROMA STANDAARDREEKS Chroma-onderzoeken Een chroma geeft een beeld over de kwaliteit van bijvoorbeeld een bodem of compost. Een chroma bestaat uit 4 zones. Uit elke zone is een bepaald kwaliteitsaspect

Nadere informatie

Virtual Enterprise Centralized Desktop

Virtual Enterprise Centralized Desktop Virtual Enterprise Centralized Desktop Het gebruik van virtuele desktops en de licensering daarvan Bastiaan de Wilde, Solution Specialist Microsoft Nederland Aanleiding Steeds meer gebruik van Virtuele

Nadere informatie

Absentie Presentie Server Migratie

Absentie Presentie Server Migratie Absentie Presentie Server Migratie Auteur A. Boerkamp Versie V1.2 Datum 11-08-2010 Status Voor Intern / Extern gebruik Pincash International, 3066GS Rotterdam, Anthonetta Kuijlstraat 43-45, 010-2868000

Nadere informatie

[BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden?

[BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden? [BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden? Gebruik altijd de laatste versie omdat er serieuse bug-fixes in kunnen zitten. Check altijd de release notes en openstaande bugs. Er is

Nadere informatie

Introduction to IBM Cognos Express = BA 4 ALL

Introduction to IBM Cognos Express = BA 4 ALL Introduction to IBM Cognos Express = BA 4 ALL Wilma Fokker, IBM account manager BA Ton Rijkers, Business Project Manager EMI Music IBM Cognos Express Think big. Smart small. Easy to install pre-configured

Nadere informatie

De SAP Cloud Connector 2.0 maakt SAPUI5 ontwikkeling via de WEB-IDE mogelijk met data uit je eigen backend systeem.

De SAP Cloud Connector 2.0 maakt SAPUI5 ontwikkeling via de WEB-IDE mogelijk met data uit je eigen backend systeem. De SAP Cloud Connector 2.0 maakt SAPUI5 ontwikkeling via de WEB-IDE mogelijk met data uit je eigen backend systeem. Vele van ons willen wel eens spelen met de WEB-IDE in de could via het SAP Trial Hana

Nadere informatie

Oracle Rolling Upgrades met SharePlex Bart.vanKnijff@quest.com Systems Consultant Quest Software Nederland 9/11 2007

Oracle Rolling Upgrades met SharePlex Bart.vanKnijff@quest.com Systems Consultant Quest Software Nederland 9/11 2007 Oracle Rolling Upgrades met SharePlex Bart.vanKnijff@quest.com Systems Consultant Quest Software Nederland 9/11 2007 Copyright 2006 Quest Software Agenda Wat is SharePlex? Toepassingen en de belangrijkste

Nadere informatie

Inhoudsopgave: Whisper380-computerhulp

Inhoudsopgave: Whisper380-computerhulp Versie: 1.0 Gemaakt door: Whisper380 Eigenaar: Datum: 17-10-2010 Inhoudsopgave: Inhoudsopgave:... 2 Het programma downloaden.... 3 Het programma downloaden... 4 De installatie van het programma... 6 Het

Nadere informatie

Competencies atlas. Self service instrument to support jobsearch. Naam auteur 19-9-2008

Competencies atlas. Self service instrument to support jobsearch. Naam auteur 19-9-2008 Competencies atlas Self service instrument to support jobsearch Naam auteur 19-9-2008 Definitie competency The aggregate of knowledge, skills, qualities and personal characteristics needed to successfully

Nadere informatie

Contents. Introduction Problem Definition The Application Co-operation operation and User friendliness Design Implementation

Contents. Introduction Problem Definition The Application Co-operation operation and User friendliness Design Implementation TeleBank Contents Introduction Problem Definition The Application Co-operation operation and User friendliness Design Implementation Introduction - TeleBank Automatic bank services Initiates a Dialog with

Nadere informatie

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd. SQL Inleiding relationele databases DBMS DataBase Management System!hiërarchische databases.!netwerk databases.!relationele databases.!semantische databases.!object oriënted databases. Relationele databases

Nadere informatie

Zo kan je linken maken tussen je verschillende groepen van gegevens.

Zo kan je linken maken tussen je verschillende groepen van gegevens. 1 1. Entity Reference Entity Reference zal ook een onderdeel zijn van Drupal 8. Het is een module van het type veld. Het is een heel krachtige module die toelaat om referenties te maken tussen verschillende

Nadere informatie

WHITE PAPER. by Default Reasoning

WHITE PAPER. by Default Reasoning Title: Migratie van Windows 2003 naar Windows 2008 domain Authors: Marek Version: Final Date: 05 april 2009 Categories: Windows Server 2008 defaultreasoning.wordpress.com Page 1 Scenario: Een Windows Server

Nadere informatie

De convergentie naar gemak. Hans Bos, Microsoft @hansbos, hans.bos@microsoft.com

De convergentie naar gemak. Hans Bos, Microsoft @hansbos, hans.bos@microsoft.com De convergentie naar gemak Hans Bos, Microsoft @hansbos, hans.bos@microsoft.com ge mak (het; o) 1. kalmte, bedaardheid: iem. op zijn gemak stellen kalm laten worden 2. het vermogen iets zonder moeite te

Nadere informatie

Quality requirements concerning the packaging of oak lumber of Houthandel Wijers vof (09.09.14)

Quality requirements concerning the packaging of oak lumber of Houthandel Wijers vof (09.09.14) Quality requirements concerning the packaging of oak lumber of (09.09.14) Content: 1. Requirements on sticks 2. Requirements on placing sticks 3. Requirements on construction pallets 4. Stick length and

Nadere informatie

Relationele Databases 2002/2003

Relationele Databases 2002/2003 1 Relationele Databases 2002/2003 Hoorcollege 3 24 april 2003 Jaap Kamps & Maarten de Rijke April Juli 2003 Plan voor Vandaag Praktische dingen 2.1, 2.3, 2.6 (alleen voor 2.2 en 2.3), 2.9, 2.10, 2.11,

Nadere informatie

Risk & Requirements Based Testing

Risk & Requirements Based Testing Risk & Requirements Based Testing Tycho Schmidt PreSales Consultant, HP 2006 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Agenda Introductie

Nadere informatie

Open source VoIP Networks

Open source VoIP Networks Open source VoIP Networks Standard PC hardware inexpensive add-in vs. embedded designs Ing. Bruno Impens Overview History Comparison PC - Embedded More on VoIP VoIP Hardware VoIP more than talk More...

Nadere informatie

Hoe kun je je op RSS-Feeds abonneren? En hoe deze te lezen. Be updated! For friends and family door : Sander van de Pol ( mei 2007 ).

Hoe kun je je op RSS-Feeds abonneren? En hoe deze te lezen. Be updated! For friends and family door : Sander van de Pol ( mei 2007 ). Hoe kun je je op RSS-Feeds abonneren? En hoe deze te lezen. Be updated! For friends and family door : Sander van de Pol ( mei 2007 ). Ik wil hier 3 manieren bespreken : - via Internet Explorer 7 - via

Nadere informatie

een kopie van je paspoort, een kopie van je diploma voortgezet onderwijs (hoogst genoten opleiding), twee pasfoto s, naam op de achterkant

een kopie van je paspoort, een kopie van je diploma voortgezet onderwijs (hoogst genoten opleiding), twee pasfoto s, naam op de achterkant Vragenlijst in te vullen en op te sturen voor de meeloopochtend, KABK afdeling fotografie Questionnaire to be filled in and send in before the introduction morning, KABK department of Photography Stuur

Nadere informatie

Een eenvoudige webserver maken in Lazarus

Een eenvoudige webserver maken in Lazarus Een eenvoudige webserver maken in Lazarus Michaël Van Canneyt 2 december 2011 Samenvatting Free Pascal - en dus ook Lazarus - kan meerdere TCP/IP componenten compileren: Synapse, Indy en lnet. Free Pascal

Nadere informatie

Process Mining and audit support within financial services. KPMG IT Advisory 18 June 2014

Process Mining and audit support within financial services. KPMG IT Advisory 18 June 2014 Process Mining and audit support within financial services KPMG IT Advisory 18 June 2014 Agenda INTRODUCTION APPROACH 3 CASE STUDIES LEASONS LEARNED 1 APPROACH Process Mining Approach Five step program

Nadere informatie

Plotten. technisch tekenwerk AUTOCAD 2000

Plotten. technisch tekenwerk AUTOCAD 2000 Inleiding Voor het plotten van uw bent u bij Lifoka aan het juiste adres. Snel, betrouwbaar en dat in grote of kleine oplagen. Niet alleen het plotten, maar ook vergaren en verzenden kan Lifoka voor u

Nadere informatie

ProCallOne en MetaDirectory i.c.m. Gigaset Pro. Installatie en configuratie

ProCallOne en MetaDirectory i.c.m. Gigaset Pro. Installatie en configuratie ProCallOne en MetaDirectory i.c.m. Gigaset Pro Installatie en configuratie Juridische toelichting / Colofon De informatie in dit document gaat uit van de kennis op moment van schrijven. Fouten en wijzigingen

Nadere informatie

More speed. Less stress.

More speed. Less stress. More speed. Less stress. Wireless broadband Internet access for your laptop or PDA. Available here. Draadloos breedbandinternet voor uw laptop of PDA. Hier beschikbaar. What is T-Mobile HotSpot? Wat is

Nadere informatie

Windows Server 2003 EoS. GGZ Nederland

Windows Server 2003 EoS. GGZ Nederland Windows Server 2003 EoS GGZ Nederland Inleiding Inleiding Op 14 juli 2015 gaat Windows Server 2003 uit Extended Support. Dat betekent dat er geen nieuwe updates, patches of security releases worden uitgebracht.

Nadere informatie

Stichting NIOC en de NIOC kennisbank

Stichting NIOC en de NIOC kennisbank Stichting NIOC Stichting NIOC en de NIOC kennisbank Stichting NIOC (www.nioc.nl) stelt zich conform zijn statuten tot doel: het realiseren van congressen over informatica onderwijs en voorts al hetgeen

Nadere informatie

LCA, wat kan je er mee. Sustainability consultant gaasbeek@pre sustainability.com

LCA, wat kan je er mee. Sustainability consultant gaasbeek@pre sustainability.com LCA, wat kan je er mee Anne Gaasbeek Anne Gaasbeek Sustainability consultant gaasbeek@pre sustainability.com PRé Consultants PRé is pionier i van LCA sinds 1990; ontwikkelaar van Ecoindicator and ReCiPe

Nadere informatie

SuperOffice Systeemvereisten

SuperOffice Systeemvereisten Minimale systeemvereisten voor SuperOffice CRM De minimale systeemvereisten voor SuperOffice CRM zijn tevens afhankelijk van het besturingssysteem en de services/applicaties die op het systeem actief zijn.

Nadere informatie

Gebruikershandleiding / User manual. Klappers bestellen in de webshop Ordering readers from the webshop

Gebruikershandleiding / User manual. Klappers bestellen in de webshop Ordering readers from the webshop Gebruikershandleiding / User manual Klappers bestellen in de webshop Ordering readers from the webshop Gebruikershandleiding klappers bestellen Voor het bestellen van klappers via de webshop moeten de

Nadere informatie

Windows Azure in de praktijk

Windows Azure in de praktijk Windows Azure in de praktijk Eelco Koster IT Architect, Ordina eelco.koster@ordina.nl http://eelco.azurewebsites.net/ @eelco_zelf Agenda Wat is cloud Wat biedt Microsoft? Praktijk voorbeelden Wat is cloud?

Nadere informatie

04/11/2013. Sluitersnelheid: 1/50 sec = 0.02 sec. Frameduur= 2 x sluitersnelheid= 2/50 = 1/25 = 0.04 sec. Framerate= 1/0.

04/11/2013. Sluitersnelheid: 1/50 sec = 0.02 sec. Frameduur= 2 x sluitersnelheid= 2/50 = 1/25 = 0.04 sec. Framerate= 1/0. Onderwerpen: Scherpstelling - Focusering Sluitersnelheid en framerate Sluitersnelheid en belichting Driedimensionale Arthrokinematische Mobilisatie Cursus Klinische Video/Foto-Analyse Avond 3: Scherpte

Nadere informatie

ASRemote WebService. Via deze webservice kunt u:

ASRemote WebService. Via deze webservice kunt u: ASRemote WebService De ASRemote WebService is een SOAP Webservice die softwarematige communicatie met Exact Globe mogelijk maakt vanaf een willekeurige locatie op het internet. Via deze webservice kunt

Nadere informatie

Buy Me! FILE 5 BUY ME KGT 2

Buy Me! FILE 5 BUY ME KGT 2 Buy Me! FILE 5 BUY ME KGT 2 Every day we see them during the commercial break: the best products in the world. Whether they are a pair of sneakers, new mascara or the latest smartphone, they all seem to

Nadere informatie

Pijlers van Beheer. Bram van der Vos www.axisintoict.nl ict@axisinto.nl

Pijlers van Beheer. Bram van der Vos www.axisintoict.nl ict@axisinto.nl Welkom Pijlers van Beheer Bram van der Vos www.axisintoict.nl ict@axisinto.nl Waarom doe je Beheer Business perspectief Stabiliteit Security Enablen voor gebruikers Ondersteuning Technisch Perspectief

Nadere informatie

PROJECT INFORMATION Building De Meerlanden Nieuweweg 65 in Hoofddorp

PROJECT INFORMATION Building De Meerlanden Nieuweweg 65 in Hoofddorp BT Makelaars Aalsmeerderweg 606 Rozenburg Schiphol Postbus 3109 2130 KC Hoofddorp Telefoon 020-3 166 166 Fax 020-3 166 160 Email: info@btmakelaars.nl Website : www.btmakelaars.nl PROJECT INFORMATION Building

Nadere informatie

Comics FILE 4 COMICS BK 2

Comics FILE 4 COMICS BK 2 Comics FILE 4 COMICS BK 2 The funny characters in comic books or animation films can put smiles on people s faces all over the world. Wouldn t it be great to create your own funny character that will give

Nadere informatie

Nieuwsbrief NRGD. Editie 11 Newsletter NRGD. Edition 11. pagina 1 van 5. http://nieuwsbrieven.nrgd.nl/newsletter/email/47

Nieuwsbrief NRGD. Editie 11 Newsletter NRGD. Edition 11. pagina 1 van 5. http://nieuwsbrieven.nrgd.nl/newsletter/email/47 pagina 1 van 5 Kunt u deze nieuwsbrief niet goed lezen? Bekijk dan de online versie Nieuwsbrief NRGD Editie 11 Newsletter NRGD Edition 11 17 MAART 2010 Het register is nu opengesteld! Het Nederlands Register

Nadere informatie

SharePoint intranet bij Barco Beter (samen)werken en communiceren

SharePoint intranet bij Barco Beter (samen)werken en communiceren SharePoint intranet bij Barco Beter (samen)werken en communiceren Els De Paepe Hans Vandenberghe 1 OVER BARCO 90+ 3,250 +1 billion Presence in more than 90 countries Employees Sales for 4 consecutive years

Nadere informatie

liniled Cast Joint liniled Gietmof liniled Castjoint

liniled Cast Joint liniled Gietmof liniled Castjoint liniled Cast Joint liniled Gietmof liniled is een hoogwaardige, flexibele LED strip. Deze flexibiliteit zorgt voor een zeer brede toepasbaarheid. liniled kan zowel binnen als buiten in functionele en decoratieve

Nadere informatie

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt.

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt. Plsqldoc Genereer je documentatie Beeklaan 444 2562 BK Den Haag www.darwin-it.nl info@darwin-it.nl KvK 27283780 ING 65.35.40.663 Technical Architect Net als (vrijwel) elke ontwikkelaar vind ik het documenteren

Nadere informatie

NHibernate als ORM oplossing

NHibernate als ORM oplossing NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een

Nadere informatie

Netwerkprinter Dell 1320C installeren op Ubuntu 10.04 LTS - Lucid Lynx

Netwerkprinter Dell 1320C installeren op Ubuntu 10.04 LTS - Lucid Lynx Netwerkprinter Dell 1320C installeren op Ubuntu 10.04 LTS - Lucid Lynx Er is geen Linux driver voor deze printer, maar het werkt ook met de driver van de Fuji Xerox DocuPrint C525A Direct link to Linux

Nadere informatie

Handleiding Meldportaal Ongebruikelijke Transacties - pg 2. Manual for uploading Unusual Transactions - Reporting Portal - pg 14

Handleiding Meldportaal Ongebruikelijke Transacties - pg 2. Manual for uploading Unusual Transactions - Reporting Portal - pg 14 Handleiding Meldportaal Ongebruikelijke Transacties - pg 2 Manual for uploading Unusual Transactions - Reporting Portal - pg 14 Handleiding Meldportaal Ongebruikelijke Transacties meldportaal.fiu-nederland.nl

Nadere informatie

Introduction Henk Schwietert

Introduction Henk Schwietert Introduction Henk Schwietert Evalan develops, markets and sells services that use remote monitoring and telemetry solutions. Our Company Evalan develops hard- and software to support these services: mobile

Nadere informatie

Welkom in het nieuwe academische jaar! We hopen dat iedereen een goede zomerperiode heeft gehad.

Welkom in het nieuwe academische jaar! We hopen dat iedereen een goede zomerperiode heeft gehad. DATUM: 22-09-2009 (You will find the English version below) Beste allen, Welkom in het nieuwe academische jaar! We hopen dat iedereen een goede zomerperiode heeft gehad. NIEUWSBRIEF No. 1 Dit is de eerste

Nadere informatie

Denit Backup instellen op een Linux server

Denit Backup instellen op een Linux server Denit Backup instellen op een Linux server Deze handleiding beschrijft de stappen om de back-up software van Ahsay in te stellen. AANMAKEN BACK-UP SET... 2 DE SCHEDULER INSTELLEN... 4 HET FILTER INSTELLEN...

Nadere informatie

SPX Model A-360 Azimuth Antenna Rotor Model 1 & 2

SPX Model A-360 Azimuth Antenna Rotor Model 1 & 2 Gauke Boelensstraat 108 NL-9203 RS Drachten The Netherlands Tel: +31 (0) 512 354 126 GSM: +31 (0) 650 882 889 Fax: +31 (0) 847 187 776 www.rfhamdesign.com E-mail: info@rfhamdesign.com Model A-360 Azimuth

Nadere informatie

Holiday child daycare. Manual online enrollments 2015 (see below for translation website)

Holiday child daycare. Manual online enrollments 2015 (see below for translation website) Holiday child daycare Manual online enrollments 2015 (see below for translation website) Step 1: Registration Click the registration link (via intranet or www.vakantieopvangstekelbees.be Reserveren) Fill

Nadere informatie