MAGAZINE SOFTWARE DEVELOPMENT NETWORK

Maat: px
Weergave met pagina beginnen:

Download "MAGAZINE SOFTWARE DEVELOPMENT NETWORK"

Transcriptie

1 MAGAZINE SOFTWARE DEVELOPMENT NETWORK 19 & 20 OKTOBER A.S. SDN CONFERENCE Papendal, Arnhem SCHRIJF NU IN! IN DIT NUMMER O.A.: Azure.Net Services < HierarchyID in SQL Server 2008 < Introduction to Language Integrated Query with Delphi Prism < Windows Sidebar Gadgets Ontwikkelen met Silverlight 2.0 < Spell Check in SharePoint 2007 < Nummer 102 september 2009 SDN Magazine verschijnt elk kwartaal en is een uitgave van Software Development Network 102

2 Advertentie Macaw

3 Colofon Uitgave: Software Development Network Zeventiende jaargang No. 102 september 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, Rolf Craenen, Anko Duizer, 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 20 Barnsten/Embarcadero 27 Bergler 28 Microsoft Alladdin 41 Sybase ianywhere 45 4DotNet 52 Sogeti 63 Avanade 71 Bridge Incubation Group b.v. 72 De zomereditie van het SDN-magazine ligt voor je: klaar voor gebruik en je hebt vast voldoende tijd om het tot de laatste letter door te nemen. B.v. omdat je vakantie hebt en na het eten lekker in de tuin van het zonnetje zit te genieten of op het strand zit of op je bootje ronddobbert op het strakblauwe water. Of omdat het op kantoor toch een fractie minder druk is dan een jaar geleden en je die tijd goed kunt gebruiken om je kennis weer helemaal up-todate te brengen. In beide gevallen vind je genoeg van je gading om weer helemaal mee te gaan tellen. Er wordt een groot aantal nieuwe versies, functionaliteiten en zelfs talen voorgesteld. Van SQL Server 2008 worden b.v. de nieuwe HierarchyID en de Sparse columns voorgesteld. De Azure.Net Services worden voorgesteld. Hiermee krijg je een omgeving tot je beschikking voor het draaien van applicaties en het opslaan van gegevens in Microsoft data centra, die zich overal ter wereld kunnen bevinden. Je kunt applicaties maken die je daar laat hosten, maar je kunt er ook voor kiezen bestaande applicaties te verrijken met individuele services die en let op, daar komt een modern toverwoord - in de Cloud draaien. Delphi Prism krijgt ook uitgebreid aandacht. Eerst presenteert Bob Swart nieuwe features als Asyncs, Futures & Parallels, waarmee hij maar wil laten zien dat Delphi for.net niet langer achterloopt op het gebied van.net features, maar juist nu al gebruik maakt van functionaliteit die nog niet eens (volledig) beschikbaar is in.net. Een geluid dat ook wel eens gehoord mag worden! En we hebben een artikel van de hand van Cary Jensen waarin hij een introductie van LINQ de Language Integrated Query in Delphi Prism geeft, iets dat we in.net al langer kennen. Nog meer nieuwigheden in een artikel over F#, een nieuwe taal uit de Microsoft-stal. Aardig om te lezen - maar ook wel even wennen! over een functionele taal als tegenhanger voor de imperatieve talen waar de meesten van ons gewend zullen zijn om mee te werken. Overigens gebiedt de eerlijkheid om te zeggen dat F# eigenlijk van beide walletjes snoept En last but not least wil ik nog een artikel uit de User Experience hoek vernoemen dat een onderwerp behandelt waar vast ook nog niet iedereen zijn handen aan gebrand heeft, nl. hoe je Windows Sidebar Gadgets kunt ontwikkelen die met Silverlight 2.0 werken, incl. het uitrollen daarvan. Al met al genoeg nieuws en dan hebben we nog een stuk of 8 (!) artikelen onvernoemd gelaten. Niemand hoeft zich dus te vervelen in de zomer van Wat je in dit magazine ook terugvindt is de blik op de aankomende SDN Conference die 19 & 20 oktober gehouden wordt op Papendal (Arnhem), tegelijk met de DotNetNuke Open- Force '09 Europe conferentie. Je kunt er in dit magazine haast niet om heen: het programma, voor zover bekend op het moment van drukken, wordt gepresenteerd, maar via talloze postits proberen we het event en de datum in je geheugen te prenten. Want als je dit jaar dan toch wilt gebruiken om weer helemaal up-to-date te geraken, dan moet je naar de SDN Conference 2009 komen natuurlijk! Veel leesplezier! Rob Willemsen, redactie@sdn.nl PS: Wellicht ten overvloede vermeld ik nog even dat we in dit magazine de lijn doortrekken die in de vorige editie- de WIT-special: Women In Technology wel heel expliciet gemaakt is, nl. dat vrouwen ook heel goed in de IT uit de voeten kunnen of liever artikelen van hun hand kunnen laten zien. We presenteren opnieuw een (flink aantal) artikelen van vrouwelijke hand; niet allemaal, zoals vorige keer, maar we hebben toch weer 4 vrouwelijke auteurs die acte de présence geven! Adverteren? Informatie over adverteren en de advertentietarieven kunt u vinden op onder de rubriek Magazine. magazine voor software development 3

4 SDN CONFERENCE 2 DAYS SOFTWARE DEVELOPER CONFERENCE 19 & 20 OKTOBER 2009 PAPENDAL, ARNHEM Inhoud 03 Voorwoord Rob Willemsen 04 Inhoudsopgave 05 Azure.Net Services Jacqueline van der Holst 09 DevTweet Marianne van Wanrooij en Sander Hoogendoorn 10 SDN Conference 14 The WebHub Way of Thinking Ann Lynnworth 21 Silverlight en Open Source Koen Zwikstra 24 HierarchyID in SQL Server 2008 André van t Hoog en Arjan Pot 29 FloraHolland Moderniseert Hart IT Norbert Mimpen 31 Under the Hood: Provider-Based Authorization in DotNetNuke 5.1 Brandon Haynes 34 Delphi Prism: Async, Futures en Parallele Mogelijkheden Bob Swart 38 Spell Check in SharePoint 2007 Gustavo Velez 42 Fun met Webparts in ASP.Net - Deel 2 User Controls en Webparts Bert Dingemans 46 Introduction to Language Integrated Query with Delphi Prism: Part 1 Cary Jensen 49 Interesting Things: Creative Plumbing Sander Hoogendoorn 50 Sparse Columns in SQL Server 2008 Bert Dingemans 53 De Kick Ass Development Reeks Freek Leemhuis en Maarten Metz 57 Agenda 58 ASP.NET onder de Motorkap: Ben jij al AJAX supporter? Michiel van Otegem 59 Requirements Management voor Software Architecten Marion Verwey en Nienke van de Brink 64 F#: Een Functionele Oplossing binnen een Imperatieve Wereld Laurens Ruijtenberg 67 Windows Sidebar Gadgets Ontwikkelen met Silverlight 2.0 Fons Sonnemans

5 .NET C# Jacqueline van der Holst Azure.Net Services De Microsoft.Net Service Bus en de Microsoft Access Control Service gecombineerd Afgelopen jaar kondigde Ray Ozzie op de Professional Developer Conference het Windows Azure Services Platform aan. Het Azure Services Platform is een omgeving voor het draaien van applicaties en het opslaan van gegevens in Microsoft data centra, die zich overal ter wereld bevinden. Bedrijven kunnen ervoor kiezen om daar nieuwe applicaties te hosten, maar je kan er ook voor kiezen bestaande applicaties te verrijken met individuele services die in de Cloud draaien. Microsoft.Net services bestaan uit een set services voor developers en een SDK om.net applicaties in de Cloud te kunnen draaien. Je kunt aan.net services denken als een nieuw.net framework maar dan specifiek voor dit type applicaties. Dit framework bestaat uit services, die gebaseerd zijn op standaard protocollen, zodat elk service platform erop kan aanhaken. Denk daarbij aan SOAP, REST en WS* technieken. Wanneer je als developer gewend bent om te werken met Windows Workflow Foundation en Windows Communication Foundation, dan zul je het niet moeilijk vinden om met de.net services SDK te werken. Wil je er direct mee aan de slag? Je kunt dan de SDK downloaden van en een code aanvragen om je eigen solution aan te kunnen maken. Op dit moment bestaan de.net services uit een drietal services voor het regelen van connectiviteit, toegang en workflow, te weten: Microsoft.Net Service Bus: een netwerk infrastructuur voor het verbinden van applicaties over het Internet; Microsoft.Net Access Control Service: op claims gebaseerde toegang waarbij het kan werken met identity providers als Active Directory en Windows Live ID; Microsoft.Net Workflow Service: een infrastructuur voor het managen en hosten van workflows. Dit artikel beschrijft de Microsoft.Net Service Bus in combinatie met de Microsoft.Net Access Control Service. Figuur 1 Om een applicatie in de Cloud te laten draaien moet je een nieuwe Azure solution aanmaken op Voor dit artikel heb ik de solution AzureExample aangemaakt (zie figuur 2). Microsoft.Net Service Bus In de praktijk zien we dat het nog steeds een uitdaging is om applicaties met elkaar te verbinden. Om dit mogelijk te maken gebruiken organisaties een Enterprise Service Bus (ESB). De Microsoft.Net Service Bus heeft een gelijkwaardige architectuur. Het verschil zit hem in het blikveld en de probleemstelling. Immers de.net Service Bus moet op een globaal internet niveau kunnen draaien en dat ook nog eens met hoge inzet. Met de Microsoft.Net Service Bus kun je je huidige ESB verbinden met services die in de Cloud draaien, maar je kunt de.net Service Bus ook inzetten om applicaties met elkaar te verbinden die zich op verschillende fysieke locaties achter een firewall bevinden. Architectuur Om beter te kunnen begrijpen hoe de Microsoft.Net Service Bus werkt, is de architectuur ervan te zien in figuur 1. Hieronder worden verschillende onderdelen van de architectuur besproken aan de hand van een listing. Figuur 2 In het voorbeeld gebruiken we een client project en een service project. Listing 1 toont het service contract en een operatie die twee integers verwacht. Listing 2 definieert de service die twee getallen met elkaar vermenigvuldigt. Hieronder wordt besproken hoe we deze magazine voor software development 5

6 .NET C# service via de servicebus beschikbaar gaan maken en hoe we hem kunnen gaan gebruiken. namespace Services { [ServiceContract (Name="SampleContract", Namespace= " ] interface ISampleContract { [OperationContract] int Sample(int getal, int multiplier); } } Listing1 namespace Services { [ServiceBehavior(Name="SampleService", Namespace= " ] public class SampleService: ISampleContract { public int Sample(int getal, int multiplier) { return getal * multiplier; } } } Listing2 Naamgeving Laten we allereerst eens naar de naamgevingstrategie kijken. De basis van het naamgevingsysteem is oplosbaar met traditionele DNS technieken. Het is aan de eigenaar van de solution om de hiërarchische namespace te controleren. De manier waarop je het moet indelen is als volgt: //Definieer credentials. Username en //password van de solution. TransportClientEndpointBehavior usernamepasswordservicebuscredential = new TransportClientEndpointBehavior(); usernamepasswordservicebuscredential.credentialtype = TransportClientCredentialType.UserNamePassword; usernamepasswordservicebuscredential.credentials. UserName.UserName = solutionname; usernamepasswordservicebuscredential.credentials. UserName.Password = solutionpassword; //Endpoint adres Uri address = new Uri( String.Format("sb://{0}/services/{1}/SampleService/", ServiceBusEnvironment.DefaultRelayHostName, "AzureExample")); ServiceHost host = new ServiceHost(typeof(SampleService), address); // Voeg de credentials aan alle endpoints toe foreach (ServiceEndpoint endpoint in host.description.endpoints) { endpoint.behaviors.add (usernamepasswordservicebuscredential); } // Open de host host.open(); Console.WriteLine("Service address: " + address); Console.WriteLine("Press [Enter] to exit"); Console.ReadLine(); host.close(); Listing 3 [scheme]://[solution-naming-scope]/[name]/[name] De naamgeving van de URI is onder te verdelen in een drietal onderdelen. De CTP release van november ondersteunt de schemes SB en HTTP, waarbij je HTTP gebruikt voor de op HTTP gebaseerde endpoints en SB voor alles wat anders is (bijvoorbeeld TCP). De solution-naming-scope beschrijft de solution binnen het Azure platform en bestaat uit In listing 3 is te zien hoe we een endpoint adres aanmaken voor onze SampleService. Voor authenticatie met de Service Bus worden de username en het password gebruikt die je hebt opgegeven bij het aanmaken van de solution in Azure. Op basis van de configuratie (listing 4) maken we een host aan. De credentials worden aan elk endpoint toegevoegd. In dit geval is dat er maar een, namelijk SampleService. Vervolgens wordt de host geopend (figuur 3). servicebus.windows.net/services/[solution] Als laatste definieer je de endpoint namen. Alles wat na [solution] komt in het pad is onderdeel van de door de gebruiker gedefinieerde namespace. Je kunt een onbeperkte hoeveelheid endpoint namen opgeven door een hiërarchie van namen achter [solution] te plakken in het pad. Voor het listing in dit artikel ziet de uri er als volgt uit: sb://servicebus.windows.net/services/azureexample/ SampleService Twee verschillende services binnen de solution hoeven niet op dezelfde machine of in hetzelfde netwerk te worden gehost. Het is de taak van de Service Bus om te bepalen waar de endpoints zich bevinden. Service Registry Naast de naming convention biedt de Service Bus een Service Registry voor het publiceren en ontdekken van service endpoints binnen een solution. Dit kan zowel automatisch als handmatig. Het handigst is om dit automatisch door de Service Bus te laten regelen. Figuur 3 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.servicemodel> <bindings> <nettcprelaybinding> <binding name="default" /> </nettcprelaybinding> </bindings> <services> 6 MAGAZINE

7 .NET C# <service name="services.sampleservice"> <endpoint name="relayendpoint" contract="services.isamplecontract" binding="nettcprelaybinding" bindingconfiguration="default" address="" /> </service> </services> </system.servicemodel> </configuration> Listing 4 De client applicatie is op een zelfde wijze geconfigureerd (listing 5) als de service applicatie. <?xml version="1.0" encoding="utf-8"?> <configuration> <system.servicemodel> <bindings> <nettcprelaybinding> <binding name="default" /> </nettcprelaybinding> </bindings> <client> <endpoint name="relayendpoint" contract="azuresample.isamplecontract" binding="nettcprelaybinding" bindingconfiguration="default" address="" /> </client> </system.servicemodel> </configuration> Listing 5 Relay In het hart van de Service Bus bevindt zich de Relay Service (figuur 4) om door firewalls en NAT heen te kunnen communiceren. De relay maakt het mogelijk voor een zender om met een ontvanger te communiceren door middel van een adres. In het code voorbeeld is dat Connection-oriented bi-directional socket communication. Wanneer je gebruik maakt van de Relay Service leg je de luisterverantwoordelijkheid bij de Relay Service. Om gebruik te kunnen maken van de Relay Service leg je een connectie tussen je lokale service en de Relay Service. Binnen.Net doe je dit door het WCF programmeermodel en -bindings die in de SDK zitten te gebruiken. Deze bindings worden dan omgezet naar nieuwe transport bindings om WCF listeners te maken die met de Relay Service integreren. Voor de Relay Service is het nodig dat een aantal outbound poorten open staan, te weten 808 (TCP connecties), 828 (TCP/SSL connecties) en poorten 818 en 819 voor geavanceerde TCP connecties. Wanneer je binnen een omgeving werkt die alle outbound connecties blokkeert, behalve diegene die gebruikt worden door HTTP/HTTPS, dan kun je een speciale HTTP gebaseerde verbindingsoptie gebruiken. De listing gebruikt de binding NetTCPRelayBinding aangezien Microsoft deze binding als default aanraadt. Hij is zeer efficiënt en maakt een publiekelijk te bereiken endpoint aan in de Relay Service. Client applicaties moeten geconfigureerd worden met dezelfde binding. Deze binding ondersteunt drie soorten verbindingen: Relay: alle communicatie gaat via de relay service; Hybride: de initiële communicatie gaat via de relay service waarna zender en ontvanger een directie communicatie met elkaar hebben. Deze communicatie wordt wel gecoördineerd door de relay service; Direct: zonder relay service. In de CTP werkt dit nog hetzelfde als de hybride connectie. Naast de binding getoond in bovenstaand voorbeeld, zijn er nog de volgende mogelijkheden: Standaard WCF Binding BasicHttpBinding WebHttpBinding WSHttpBinding WS2007HttpBinding Vergelijkbare Relay Binding BasicHttpRelayBinding WebHttpRelayBinding WSHttpRelayBinding WS2007HttpRelayBinding [sb://servicebus.microsoft.net/services/azureexample/ SampleService] WSHttpContextBinding WS2007HttpFederationBinding NetTcpBinding NetTcpContextBinding N/A N/A WSHttpRelayContextBinding WS2007HttpRelayFederationBinding NetTcpRelayBinding NetTcpRelayContextBinding NetOnewayRelayBinding NetEventRelayBinding Tabel 1: Relay bindings Figuur 4 De ontvanger is door middel van een naar buiten openstaande poort verbonden met de Relay Service en specificeert het adres waarnaar hij wil luisteren. De zender kan dan een bericht verzenden door hetzelfde adres te specificeren. Vervolgens kan de Relay Service het bericht doorgeven aan de ontvanger die op hetzelfde adres zit. De ontvanger hoeft geen inbound poorten open te hebben staan. De Relay Service ondersteunt de volgende messaging patronen: One-way Request/response Peer-to-peer Publish/subscribe scenarios De relay bindings werken ongeveer identiek aan de WCF bindings. Het is een uitdaging om te weten welke binding je exact nodig hebt. De NetTcpRelayBinding wordt als default aangeraden, maar je zou je kunnen voorstellen dat deze wellicht niet zou volstaan omdat outbound TCP poorten nodig zijn voor de luisteraar. Je zou dan bijvoorbeeld de NetOnewayRelayBinding kunnen gebruiken. Deze is wat agressiever en maakt gebruik van HTTP poorten 80/443 die meestal open staan. Een Relay Service werkt als een omgeving die compleet los staat van de lokale omgeving, wat het mogelijk maakt om ongewild verkeer tegen te houden voordat het bij je service-omgeving uitkomt. Het verbergt ook alle informatie over de netwerklocatie. Het idee van een Relay Service is niet nieuw. Ook Groove gebruikt een Relay Service voor het uitwisselen van documenten. Authenticatie en autorisatie De Microsoft.Net Service Bus vraagt van elke ontvanger om geauthenticeerd en geautoriseerd te zijn voor een specifieke URI, magazine voor software development 7

8 .NET C# voordat het een listener maakt voor die ontvanger. Dit geldt ook voor clients die willen dat de Service Bus berichten voor hen relayt, al kun je dat voor de client wel uitzetten wanneer je je endpoints configureert. Authenticatie kun je laten regelen door de Access Control Service. Vervolgens is het dan aan de Access Control Service om de claims aan de.net Service Bus te produceren voor autorisatie. Het verschil tussen authenticatie en autorisatie zit hem in wie je bent en wat je mag doen. De Service Bus is zo ontworpen dat het de Access Control Service vertrouwt. De Service Bus zoekt naar claims in de security tokens die meegegeven worden door zenders en ontvangers. Er zijn maar twee claims waarnaar gezocht wordt, namelijk #send en #listen. Wanneer die gevonden zijn en er is niet gerommeld met het securitytoken dan wordt toegang gegeven. Wanneer een zender of ontvanger met solution credentials of met een security-token op de proppen komt dan maakt de.net Access Control Service een rules gedreven beslissing of een autorisatie-token wordt afgegeven aan in dit geval de Microsoft.Net Service bus. De Access Control Service signt en encrypt het security-token zodat de claims alleen gelezen kunnen worden door de.net Service Bus. Alleen de Service Bus kan de informatie decrypten en lezen. Wanneer het bericht richting de ontvanger gaat wordt het autorisatie-token verwijderd. Dit heeft de ontvanger immers niet nodig. De listing maakt gebruik van een managed card van de Security Token Service, welke bekend staat als Microsoft Identity Lab ( waar een account is aangemaakt. Daarnaast moeten we voor de Access Control Service nog wat aanpassingen maken aan de solution in Azure ( Allereerst moeten we de scope toevoegen aan de solution, waarbij je kiest voor de Service Bus. Vervolgens klik je op identity issuer en voeg je toe. Binnen het lab is een account aangemaakt onder de groep Domain Users. Daarom wordt ook een claim type toegevoegd met de naam Group en de waarde Domain Users. Wanneer je dan naar Rules gaat dan zie je dat er al een Send en Listen rule is aangemaakt. Daar maak je nog een extra rule aan om aan te geven dat de receiver tot de groep Domain Users moet behoren. De servicebus authentiseert in listing 6 de client door Windows Cardspace informatie te geven. Hier kun je aangeven, dat je verwacht dat het token een claimtype group heeft. Vervolgens wordt een channel geopend en kan de service geconsumeerd worden. Tijdens het draaien van de code wordt om je credentials gevraagd (figuur 5). string serviceusername = Console.ReadLine(); //Adres Uri serviceuri = new Uri( String.Format("sb://{0}/services/{1}/SampleService/", ServiceBusEnvironment.DefaultRelayHostName, serviceusername)); //Federatie via cardspace TransportClientEndpointBehavior behavior = new TransportClientEndpointBehavior(); behavior.credentialtype = TransportClientCredentialType.FederationViaCardSpace; behavior.credentials.federationviacardspace. ClaimTypeRequirements.Add(new ClaimTypeRequirement (" EndpointAddress address = new EndpointAddress(serviceUri); //Channel ChannelFactory<ISampleChannel> channelfactory = new ChannelFactory<ISampleChannel>("RelayEndpoint", new EndpointAddress(serviceUri)); channelfactory.endpoint.behaviors.add(behavior); ISampleChannel channel = channelfactory.createchannel(); channel.open(); Listing 6 Conclusie De.Net Service Bus is een veilige, op standaarden gebaseerde manier van het verbinden van applicaties over het internet..net Developers kunnen hun voordeel doen met de Service Bus door simpelweg te kiezen uit een geheel nieuwe set WCF-bindings. De rest van de WCF-code blijft eigenlijk hetzelfde. Op security vlak verbergt de Service Bus alle informatie over de netwerklocatie en biedt het een omgeving die compleet los staat van de lokale omgeving. Op deze manier kunnen kwaadwillenden door de Service Bus worden gestopt voordat het te laat is. Door de Microsoft.Net Service Bus en de Microsoft Access Control Service te combineren is het mogelijk om op een makkelijke en veilige manier applicaties met elkaar te verbinden. Zelfs door firewalls heen. Links Je kunt alles vinden over dit onderwerp op Bekijk tevens alle presentaties over Azure op Jacqueline van der Holst Jacqueline van der Holst (j.van.der. holst@avanade.com) is als consultant werkzaam bij Avanade, een samenwerkingsverband tussen Micro soft en Accenture. Zij houdt zich bezig met onderwerpen als Share- Point, Azure, LINQ, Patterns and practices. Figuur 5 8 MAGAZINE

9 DevTweet: Software Development with a wink DevTweet s zijn de conversaties tussen Marianne van Wanrooij en Sander Hoogendoorn over de (on)zin die IT-ers bezig houdt: Software-ontwikkeling met een knipoog. Regelmatig zullen ook gasten worden uitgenodigd. Volg ze ook op Twitter Highway to reviewing code of the boys Listening to Black Sabbath's Master of Look at you... new avatar! Is that an AC/DC Howdy partner! It is AC/DC all right. Your avatar new too? Something wrong with the old Nope, just a change in scenery! Like the project I'm doing. I'm asked to do a code Cool! Whenever I'm asked to do a code review, the client always knows, or at least suspects, something's terribly Oh yes... We have the suspect... Now it's a case of getting the evidence... I feel like You know the suspects from the beginning, but you still have to look for the evidence for So when you are asked to do a code review, what is the first thing you The first thing I do? Ask the client what they're hoping to achieve: do they actually want to know how deep the rabbit hole Next, I make a list of all things I should look at during the review. Architecture, domain, data access, layers, Security, authorization, reuse, code copying (especially in VB), way of working, documentation, design, quality of So far so Rule #1 in code reviews: more time means more Code Reviews are fun! No deadlines. just looking at somebody else s Oh and telling what's wrong with it... I must say this is the first time I get such an You know, there's so much horrible code out there, we could do code reviews for the rest of our Well, a lot of this stuff is subject to opinion developers, 100x different code for the same Yes true, but some code is definitely worse than other code. And believe me, I've seen some bad coding in my Any Examples of bad code? How many do you need. Check out this old blog post of mine (in Dutch). Think of SQL statement in web pages, or of a single class that handles 50% of all Or think of the same business rule implemented multiple times on different locations, in different One of the things I came across: internal web application: authentication by doing a LDAP query to see if the user Haven't they heard of Windows Authentication in IIS? They didn't even check if the user was enabled or disabled... Haha, nice one. I once audited the enterprise web portal for a very large international company where ALL between front end and back end went through one single class. Imagine the effect of a single Sometimes, it gets really bad. Code a whole company depends on, which is so bad, that productivity will definitely be below zero Anyway, I love being asked for code reviews. It gives the opportunity to help improve the quality of That is, if they follow up on your advice from your code review. Unfortunately, that is not always the Well maybe it's not needed... Or they just want to know the risks and are happy to take Which could be the outcome of a code review. It's not good, but far from worse And it may be fixed with a couple of quick Well yes, that could be the outcome. Maybe I'm to idealistic about writing good code. If it ain't broken, don't fix But I just love clean But even bad code can My favorite example: an ASP.NET web site that was never compiled by the developers. They just ran it from the browser. Great As a consequence, of the over 40 pages in the application, only 6 compiled (the ones they visited running it in the LOL "we got a live one here!". This business application compiled at runtime? No test cases, just put it in And then things can get pretty messy. Especially when your poor company lives of this That is the whole point isn't it Developers just start coding without a plan, or knowing best Yes, a lot of developers code without having a decent architecture, without patterns, without layers - but with best Oh yes, best intentions... The road to hell is paved with good No stop signs, speed limits. Nobody's gonna slow me down. Highway to hell. Nope... 4 minutes by Madonna Madonna? Girl you need a music review instead of a code guess even bad music can function. ;-) magazine voor software development 9

10 .NET (C#, VB, etc.) User experience (ASP.Net, Silverlight, Expressions, Flash, etc.) Information Worker (MOSS, BizTalk, OBA, etc.) DotNetNuke (OpenForce Europe 09 Conference) Delphi Core Systems Databases Architecture General topics 2 DAYS SOFTWARE DEVELOPMENT CONFERENCE EN 20 OKTOBER 2009 PAPENDAL, ARNHEM Also included:. 19 & 20 OKTOBER A.S. SDN CONFERENCE Papendal, Arnhem SCHRIJF NU IN!

11 Daarom is er het Software Development Network! EEN ALL-IN PRIJS Het SDN is een No Nonsense Club, dus geen verrassingen achteraf. De prijs is duidelijk en All-In, dus mét consumpties in de pauzes, mét lunch (2x) en mét diner op maandagavond. Zelfs het parkeren is inbegrepen! Wie wil overnachten in het hotel van Papendal (een aanrader!) kan bij het aanmelden meteen een hotelkamer boeken. Wees er wel snel bij want het aantal beschikbare kamers is beperkt. SDN leden betalen 595,- voor deelname, niet-leden betalen 695,- Software Development Network, Postbus 506, 7100 AM Winterswijk Tel:

12 overzicht sprekers en sessies.net Richard Campbell CAN Performance Tuning ASP.NET (Understanding Performance Tuning) Stephen Forte USA Building RESTful Applications with Microsoft Tools Data Access Hacks and Shortcuts Robert Green USA WCF and WF: Two Great Technologies That Go Well Together An Introduction to Windows Communication Foundation Windows Communication Foundation Security Fundamentals Chad Hower CYP ADO.Net Entity Framework ASP.Net MVC Framework Nik Kalyani USA Hands-on Windows Azure: Building a Twitter Clone Beth Massi USA Future Directions for Microsoft Visual Basic and C# Taking Advantage of LINQ and XML in Office 2007 Ted Neward USA The Busy.NET Developer's Guide to DSLs in Oslo Dennis van der Stelt NL Velocity Shawn Wildermuth USA Building your first MGrammar Data Validation in Silverlight 3 Why Oslo Matters Architecture Kent Alstad CAN Queuing with Azure The Great Database in the Sky From iphone to Azure Richard Campbell CAN From One Web Server to Two: Making the Leap Udi Dahan IL Intentions & Interfaces - Making Patterns Concrete Avoid a Failed SOA - Business & Autonomous Components to the Rescue Designing High Performance, Persistent Domain Models Sander Hoogendoorn NL Modeling services using smart use cases Applying model driven development in developing Silverlight 2.0 applications Michael Stiefel USA How To Partition and Layer a Software Application Claims Based Security: What it is and Why it will be in your Future Does the Relational Database Make Sense in the Cloud? Architecting Software as a Service Delphi Marco Cantù I Creating Windows 7 Applications in Delphi Multi-Threading in Delphi Domain Specific Languages in Delphi Pawel Glowacki NL Delphi Natural Input Hadi Hariri SP ASP.NET MVC in Delphi Prism Advanced ASP.NET MVC in Delphi Prism Chad Hower CYP Connecting to.net with CrossTalk IntraWeb: Then, Now, and Future Cary Jensen USA Introduction to WPF Development with Delphi Prism An Introduction to LINQ in Delphi Prism 9 Thread Synchronization Options in Delphi Compared Barry Kelly USA Delphi Compiler RTTI Enhancements Design of a combined garbage-collection and serialization mechanism Bob Swart NL Delphi 2010 DataSnap Enhancements User experience Nik Kalyani USA Raising the UX Bar with ASP.NET MVC and jquery Don Kiely USA AJAX 4.0: Rich Internet Applications Come of Age Revenge of the Client: AJAX 4.0 Data Binding Joost Nuijten NL De ultieme gebruikerservaring Rich Internet Applications Klaasjan Tukker NL Building rich internet applications with Flash Builder and.net Interactive video expierences Shawn Wildermuth USA Building Behaviors in Silverlight 3 MAGAZINE

13 overzicht sprekers en sessies Information Worker / SharePoint Nick Boumans NL Social Networking in SharePoint E-Commerce using SharePoint and Commerce Server 2009 Donald Hessing NL SharePoint and Jquery Integratie Silverlight en SharePoint Beth Massi USA Building Office Business Applications with Visual Studio Dick Moffat CAN Excel Development - Rules of Engagement Wouter van Vugt NL Localizing SharePoint Solutions Developing SharePoint Workflows Core Systems Scott Ambler USA RUP: Agile Development Agile Development Workshop Martin Knobloch NL Security Advanced The Secure development lifecycle Ted Neward USA Effective Enterprise Java A Tour of the Open Source Java Community Database Cary Jensen USA Advantage Database Server and Delphi: A Perfect Match Don Kiely USA SQL Server 2008 Security for Developers User-Defined Types and Aggregates in SQL Server 2008 Dick Moffat CAN Using Microsoft Access 2010 With SharePoint The new features of Microsoft Access 2010 General Richard Campbell CAN Death of a Web Server: Crisis in Caching Sander Hoogendoorn NL Do s and don t in implementing and applying extension methods Dennis van der Stelt NL Introduction into the TDD Mantra Making sense of the buzz words DotNetNuke OpenForce 09 Europe Erik van Ballegoij NL Leverage the DotNetNuke framework for your own application Cathal Connolly UK DotNetNuke performance tips & tricks DotNetNuke and Dynamic Data Auditing and logging - Who, what and when? Peter Donker NL Advanced Module Development Extension software protection in DNN Steve Fabian USA WCF and DotNetNuke Windows Workflow and DotNetNuke Templating : User-Controlled Output Nik Kalyani USA Advanced Skinning with DotNetNuke 5 Using and Extending the DotNetNuke Widget Framework Stefan Kamphuis NL DotNetNuke 101 for ASP.NET Developers Vicenç Masanas SP Using MSBuild to automate building and packaging Creating a SiteMap provider for DotNetNuke Charles Nurse CAN DotNetNuke in the Cloud DNN and.net v4 Module Development Chalk and Talk Shaun Walker USA DotNetNuke Localization DotNetNuke Professional DotNetNuke State of the union

14 DELPHI Ann Lynnworth The WebHub Way of Thinking This is part 2 of the article published in magazine 101. How Exactly does a Team Cooperate? The user manual for the WebHub extension for Dreamweaver discusses the topic of team cooperation in great detail, and includes best-practice advice for file organization, naming conventions, and so on (see Nonetheless, I can give you an overview here now. We have already talked about the fact that the WHTEKO files are kept separate from the WebHub application. Generally, a graphic design person would be given access to those files, plus the images, css and javascript files. All such files can be easily maintained in version control. Refreshing when files change If the designer changes an image or a CSS file, reloading the web page in the browser should be enough to see the change. If the designer changes a WHTEKO file and wants to see the effect in a web browser (without using Dreamweaver), he or she needs to get the WebHub application to refresh. There are many ways to do this, including using WebHubAdmin on the server, right-clicking and selecting Refresh from the tray menu of the running app on the server, or using a browser to trigger a special page with a refresh command for this purpose. I find that using the browser is usually quickest. The special page would be declared as shown in listing 1, <whpage pageid="remoterefresh"> (~app.refresh~) </whpage> Listing 1: A page used to tell the app to reload WHTEKO and config details and called from Firefox or IE using Of course, you might add security to make sure the remoterefresh page was only called from certain ip numbers or only on a restricted subdomain. From sketch to actual A designer often needs to put in some placeholder content, before the Delphi programmer can create a perfect web action to generate the content dynamically. WebHub supports this process with a <whsketch_tag>. Listing 2 shows an example, where part of a page banner is built. <whsketch show="yes"> <table id="banner"> <tr> <td><img src="/sitedesign/abccompanylogo.png" /></td> <td>a.b.c Company the best, since 1885 </td> </tr> </table> </whsketch> Listing 2: A sketch, showing sample data in position, for design purposes When the developer sees the sketch, he or she could realize that only two variables are needed to make that section work for any company. At that point, the sketch would be copied to a droplet, expecting two parameters, as shown in Listing 3: <whdroplet name="drbanner"> <whdoc for="drbanner"> DYN1 name of image used for the logo DYN2 company slogan/text Usage: call via web action named 'wabanner' </whdoc> <table id="banner"> <tr> <td><img src="/sitedesign/(~dyn1~)" /></td> <td>(~dyn2~)</td> </tr> </table> </whdroplet> Listing 3: A droplet, expecting two parameters to fill in variable data The developer could then make a web action to find the data and display it. There are many approaches. Listing 4 shows how it can be done by calling the PARAMS command, which runs a droplet, passing in parameters. uses webapp; procedure TForm1.waBannerExecute(Sender: TObject); var OrgImageFilename: string; OrgSlogan: string; begin // do some database lookup to find these values OrgImageFilename := 'abc.jpg'; OrgSlogan := 'A.B.C. Company, the best since 1885'; pwebapp.sendmacro(format('params drbanner %s,%s', [OrgImageFilename, OrgSlogan])); end; Listing 4: Web action component loads data then calls the drbanner droplet, passing two parameters which become available as DYN1 and DYN2) When that was in place, most likely the Delphi programmer would disable the sketch by changing show="yes" to show="no", and adding (~wabanner.execute ~) 14 MAGAZINE

15 DELPHI Once that was in place, the designer could make further adjustments to the drbanner droplet (listing 3) to add CSS tags, etc., independently from the Delphi programmer. The <whdoc_tag> in listing 2 is optional. We recommend using it whenever droplets expect parameters, so that everyone knows what is required. In some future version of WebHub, we hope to make the web action components more self-documenting, so that they could report their usage automatically. For now, coders should use the <whdoc_tag> or a WebHub comment to annotate tricky sections of the file. Text Substitution Macros WebHub supports unlimited text substitution macros. The restrictions on macros is that each must fit on one line (but that can be a long line). A droplet, by contrast, can include unlimited lines. Listing 5 shows imaginary macros. <whmacros> mcassetroot=/files/ mclegaldir=(~mcassetroot~)/misc/legal/ mctrademarkpic=<img src="(~mclegaldir~)trademark.jpg" alt="tm" /> </whmacros> Listing 5: Text substitution macros can be defined in any WHTEKO file. You may have already realized that calling a macro is accomplished in W-HTML by putting its name inside parentils: (~mclegaldir~) Page Settings Internally, WebHub has an object for each page in the application, a TwhPage component. Each page can carry some configuration detail, known as Page Settings. That is basically a TStringList that can be used to write generic code. The following example (listing 6) shows how page settings can be used to enter details which are later used to generate a Google sitemap file. (The Google sitemap feature is included as a standard module in Web- Hub. It works as-is for sites where every page has its own PageID. It requires modification for sites that use WebHub pages as templates and need Google to a wide range of database-driven content.) <whpage pageid="login" desc="customer Login"> <whpagesettings> googlesitemap=include_all_lingvo googlechangefreq=monthly googlepriority=0.7 metarobot=index,nofollow metadescription=customers may login here. metakeywords=login; interactive; dynamic </whpagesettings> </whpage> <whpage pageid="homepage" desc="distribution"> <whpagesettings> googlesitemap=include_all_lingvo googlechangefreq=monthly googlepriority=1.0 metarobot=index,follow metadescription=full service east-coast distribution metakeywords=courier service; trucking; </whpagesettings> <whoutput> (~mcdoctype2006~) <html> <head> <title>(~pagedesc~)</title> (~drhead~) </head> </whoutput> </whpage> <whdroplet name="drhead"> (~HEADER Content-Type: text/html; charset=utf-8~)(~walingvo.execute~) <meta name="robots" content="(~pagesetting.metarobot~)" /> <meta name="description" content="(~pagesetting.metadescription~)" /> <meta name="keywords" content="(~pagesetting.metakeywords~)" /> <link rel="stylesheet" type="text/css" href="/css/common.css" /> </whdroplet> Listing 6: Page settings defined, then used to generate sitemap and shared header tags Application Configuration You may be wondering about custom settings needed for the application as a whole, such as a database name or the path to some utility used during processing. This is handled through the applicationlevel configuration file. In that file, you can have settings which are again basically a stringlist, although they are stored in XML format. Listing 7 shows a few sample settings and how they could be referenced in Delphi and in WebHub-HTML. In XML: <AppSettings> <AppSetting name="demographic" value="yes" /> <AppSetting name="dbname" value="alias123" /> </AppSettings> In PAS: ShowMessage(pWebApp.AppSetting['DemoGraphic']); ShowMessage(pWebApp.AppSetting['DBName']); In WHTEKO: (~AppSetting.DemoGraphic~) (~AppSetting.DBName~) Listing 7: Application settings in the config file; used in Delphi; used in WHTEKO Dozens of aspects of the application can be configured. Some people like to use Notepad to edit the XML file directly. Beginners will find that the configuration utility, ZMAdmin.exe, is very convenient for exploring and changing settings. Figure 1 shows AppSettings as they look in ZMAdmin. Fig. 1: ZMAdmin provides the GUI for configuring the application; hints are often more detailed! Live Content in Dreamweaver If the page layout expert on your team uses Dreamweaver, I highly magazine voor software development 15

16 DELPHI recommend that you look through the user guide for the WebHub Extension for Dreamweaver. That manual contains many screen shots showing exactly how it works. Remember, the big difference between WebHub's live content and that from ASP, PHP, etc., is that the Web- Hub content is generated specifically for Dreamweaver and provides 100% of the HTML for each WebHub expression. Other plug-ins use approximations for many of their dynamic pieces, especially for database content. If you are not a Dreamweaver fan, do not despair! People have built extreme sites using the WHTEKO editor provided with WebHub, or even their favorite text editor. Content Management Straight "out of the box," WebHub supports simplistic content management. A WebHub site is easier to maintain than a static web site because one usually shares all the headers and footers across the pages. However, if you want to use a database to store content, and manage users and permissions, you need to build something for that purpose. One of the demos provides a simple example for doing so. One of our customers, has built a full-featured CMS using WebHub. Another customer, built a CMS specifically for magazine and "news" content, and that is used on the award-winning site, Web Apps that look like Delphi Apps Do you want your web application to look and act exactly like an existing Delphi application? WebHub includes a fancy component nicknamed "F2H" meaning "form to html converter". This component can take any Delphi container, such as a form or a groupbox, and convert it to HTML. This content can be used as the basis for any page, such that the surfer looks at something which looks like a Windows application. Whether this is desirable or not, depends on the target market and the type of application. You may know that IntraWeb specializes in this type of web application, and uses AJAX in creative ways to make web applications operate like Delphi applications. There was an excellent presentation about this at CodeRage 2008, and if you missed it, I recommend you find the recorded session. Look for "Rich User Interfaces with IntraWeb" by Olaf Monien at WebHub supports AJAX and includes three general-purpose commands to make AJAX features extremely easy to use. A Delphi developer in Florida has used the WebHub AJAX commands to create a web version of his proprietary application. So if you want your web application to look and act like a Windows application, you certainly can. If you want **all** your web applications to look and act like your Delphi application, IntraWeb will be a better product for you than WebHub. WebHub developers often build an application with the idea of "skinning" it for multiple customers Apps with Skins; Re-use Would you agree that developers are most profitable when they can build something and then re-use it two or more times? WebHub developers often build an application with the idea of "skinning" it for multiple customers. This can be done in many ways. The simplest is to use an AppSetting to define the values that need to change for each customer, and use a different configuration file for each customer. Whatever technique you use, the key is to use macros and droplets for each piece of the design that will be swapped out. If you have an extra-talented CSS person on your team, you might not have to vary much more than the path to the CSS file. If you want to skin your web app for two or more purposes, WebHub will probably be a better product for you than IntraWeb. Techniques inside Delphi There are a few innovations inside Delphi which make WebHub applications unique and fun. MultiTypeApp; TtpProject MultiTypeApp is the name of a unit which, when included in your DPR instead of Forms, makes your application compile easily as a normal Windows app, a Windows service, or as a console application. Because most WebHub developers eventually deploy their app as a Windows service, that is the default behavior. However by adding the PREVENTGUI compiler directive, you eliminate the as-service feature (and overhead). TtpProject is the name of a component which we use to organize and sequence all the CreateForm statements relating to forms and datamodules, plus any initialization. When combining standard WebHub datamodules and forms with custom units, an ordinary DPR can become quite messy, and often only the original developer understands the required sequence. TtpProject has a series of events which offer a place to put the nuts and bolts of project startup that would normally be in the DPR. It includes some features which are especially helpful to WebHub coders and can be ignored in other types of projects. The use of TtpProject is always combined with the use of MultiType- App. Both are part of TPack and available with full source. Let's look at one real-world example, keeping in mind two goals: 1. Create objects in the correct order to avoid referencing something which is still nil; 2. Enable easy compilation of the app with zero GUI in case that is needed later. Fig. 2: Delphi Object Inspector with all the events on TtpProject (in Delphi 7) Each event is called in the order shown. Thus all the datamodules are created FIRST (over 3 steps, as needed for WebHub); then any Init methods are called on those datamodules in order to run code which cannot run inside OnCreate due to interdependencies among modules; then the GUI is created; then the GUI is initialized. Listing 8 shows the code inside those events for an app in production named CSShop, from the DMForCSShopPR.pas unit: 16 MAGAZINE

17 DELPHI procedure TDMforCSShopPM.ProjMgrDataModulesCreate1( Sender: TtpProject; var ErrorText: String; var Continue: Boolean); begin CreateCoreWebHubDataModule; // includes TwhApplication end; procedure TDMforCSShopPM.ProjMgrDataModulesCreate2( Sender: TtpProject; const SuggestedAppID: String; var ErrorText: String; var Continue: Boolean); begin if SuggestedAppID = '' then begin ErrorText := 'Usage: csshop.exe /ID=shopname'; Continue := False; Exit; end; if AppIDToConfigFilespec(SuggestedAppID) = '' then begin ErrorText := Format( 'WebHub Configuration Error in WHCentralInfo.xml%s' + 'No configuration file for AppID "%s".', [slinebreak, SuggestedAppID]); Continue := False; Exit; end; with pwebapp do begin AppID := SuggestedAppID; Refresh; // load all config and WHTEKO information end; // provide notice to use while the rest is loaded CoverApp(SuggestedAppID, 2, 'reloading application', False, ACoverPageFilespec); end; procedure TDMforCSShopPM.ProjMgrDataModulesCreate3( Sender: TtpProject; var ErrorText: String; var Continue: Boolean); begin try // uses MultiTypeApp, not Forms Application.CreateForm(TdmCommon, dmcommon); Application.CreateForm(Tdmdb, db); Application.CreateForm(TdmFastTax, dmfasttax); Application.CreateForm(TdmAccount, dmaccount); Application.CreateForm(TdmCart, dmcart); Application.CreateForm(TdmVersionControl, dmversioncontrol); Application.CreateForm(TdmPlaceLookup, dmplacelookup); Application.CreateForm(TdmAS400, dmas400); CreateStandardWHModules; // based on app config Application.CreateForm(TdmwhNavigation, dmwhnavigation); Application.CreateForm(TDataModuleProductPhotos, DataModuleProductPhotos); except on E: Exception do begin ErrorText := E.Message; Continue := False; end; end; end; procedure TDMforCSShopPM.ProjMgrDataModulesInit( Sender: TtpProject; var ErrorText: String; var Continue: Boolean); begin try db.init; dmfasttax.init; dmaccount.init; dmcart.init; dmversioncontrol.init; dmas400.init(dmcommon.cn1, dmcommon.tr1); InitCoreWebHubDataModule; // TwhApplication InitStandardWHModules; // based on app-config dmwhnavigation.init; DataModuleProductPhotos.Init; except on E: Exception do begin ErrorText := E.Message; Continue := False; end; end; end; procedure TDMforCSShopPM.ProjMgrGUICreate( Sender: TtpProject; const ShouldEnableGUI: Boolean; var ErrorText: String; var Continue: Boolean); begin if ShouldEnableGUI then try Application.CreateForm(TfmWebHubMainForm, fmwebhubmainform); CreateStandardWHModulesGUI; // based on app-config Application.CreateForm(TfmwhSponsor, fmwhsponsor); Application.CreateForm(TfmMemory, fmmemory); Application.CreateForm(TfmAS400, fmas400); except on E: Exception do begin ErrorText := E.Message; Continue := False; end; end; end; procedure TDMforCSShopPM.ProjMgrGUIInit(Sender: TtpProject; const ShouldEnableGUI: Boolean; var ErrorText: String; var Continue: Boolean); begin if ShouldEnableGUI then try InitCoreWebHubDataModuleGUI; InitStandardWHModulesGUI; fmwhsponsor.init; Application.MainForm.Caption := pwebapp.appid; UncoverApp(ACoverPageFilespec); WebMessage(''); // clear splash screen except on E: Exception do begin ErrorText := E.Message; Continue := False; end; end; end; end. Listing 8: Delphi code linked to the events shown in figure 2 To understand why all this is necessary, you need to think about how objects are created and initialized. Getting the sequence correct is essential. For a WebHub application, you must instantiate a TwhApplication (OnDataModulesCreate1), set its AppID property and refresh it (OnDataModulesCreate2), and then create other non-gui modules which work once the TwhApplication is ready (OnData - ModulesCreate3). After all of those have been instantiated, we do another pass to call an Init procedure on any datamodule which needs to do something special. For example, it's usually better to connect to a database in the Init method, in case one needs to use any properties on other datamodules. The GUI forms are created and initialized completely separately. While the GUI is great during development and testing, it is often undesirable during production. By isolating the CreateForm statements for forms in OnCreateGUI, the whole project can quickly be compiled as a non-gui edition when needed (by adding the PREVENTGUI directive). It is possible to build WebHub apps without MultiTypeApp or TtpProject. However we recommend using them because the resulting code is more self-documenting. magazine voor software development 17

18 DELPHI Too difficult? Talk to the Wizard! We built a few wizards to help you get your files started. They are accessible inside the Delphi IDE. 1. New AppID - creates the XML and WHTEKO files needed for a new application - do this first! Use the menu: Project > WebHub > New AppID 2. New Project - create the DPR and the unit containing TtpProject, with the events all coded for you. Use the menu: File > New > Other > Projects > WebHub Application and reference for detailed steps for creating your first hello-world app. 3. New Form use this to add a module into an existing project. File > New > Form > WebHub Form Modules aka Panelware When Delphi first came out with form inheritance, TPack started leveraging inheritance to allow for user interfaces that would snap together in a way that was suitable for prototyping and testing. As WebHub applications on production servers usually prefer a minimalist GUI, this made sense. At first, we called these snap-together forms "panelware". WebHub panels were often re-used in multiple projects. More recently, we have been talking about standard and custom "modules", where the GUI is optional. Let's illustrate this by reworking the banner idea we worked with earlier in listing 3. Of course, you would want that triggered from a web page through a TwhWebAction component. In addition, for testing, you might want the feature triggered by a button click. Ideally, you would create two new units, a datamodule and a form. You would do this using the New Form Wizard. You would put the non-visual functionality into the datamodule (i.e. the TwhWebAction), and you would put the visual button into the form. Now the form would be a special form, descending from TutParentForm in TPack. This type of form automatically adds itself as a "panel" into the WebHub GUI. If that form is created first, it will be the first panel. If it is created third, it will be the third panel. For advanced WebHubbers who want extra credit, it is possible to invent a keyword to associate with the new feature, say "banner". (This is worth doing if you intend to on-sell your module to other WebHub programmers.) You could then add a bit of code to your TtpProject events such that the core code in the datamodule and the GUI would be brought in based on configuration entries in your application-level config file. The custom configuration is shown in figure 3. Notice that the banner feature is "Enabled with GUI" by default, yet it is "Enabled" on a server which has been labeled as "production." The Delphi code which makes the feature come and go based on the configuration is shown in listing 9. procedure TDMSampleForWHProject.ProjMgrDataModulesCreate3( Sender: TtpProject; var ErrorText: String; var Continue: Boolean); begin CreateStandardWHModules; if (pwebapp.startup.custommodulestatus('banner') <> mstatusdisabled) then Application.CreateForm(TDM001, DM001); { Special Comment for DataModules - do not delete! This comment is used by the WebHub Wizard to position non-gui CreateForm statements for you, just above here. You may add your own CreateForm statements as well, either above or below this comment, as you wish. } end; procedure TDMSampleForWHProject.ProjMgrDataModulesInit( Sender: TtpProject; var ErrorText: String; var Continue: Boolean); begin InitCoreWebHubDataModule; InitStandardWHModules; if (pwebapp.startup.custommodulestatus('banner') <> mstatusdisabled) then DM001.Init; end; procedure TDMSampleForWHProject.ProjMgrGUICreate( Sender: TtpProject; const ShouldEnableGUI: Boolean; var ErrorText: String; var Continue: Boolean); begin {$IFNDEF PREVENTGUI} if ShouldEnableGUI then begin Application.CreateForm(TfmWebHubMainForm, fmwebhubmainform); CreateStandardWHModulesGUI; if pwebapp.startup.custommodulestatus('banner') = mstatusenabledwithgui then Application.CreateForm(TfmAppPanel, fmapppanel); { Special Comment for Forms - do not delete! This comment is used by the WebHub Wizard} end; {$ENDIF} end; Listing 9: Creating modules based on status in application-level config file When you are in a rush, you probably would not take the time to separate the GUI, give the feature a name, and load it conditionally based on configuration entries. However, if you wanted to develop a module to sell to other WebHub developers, or if you wanted to compile one large application for multiple purposes and needed to be able to turn major features on and off for various customers, you might take advantage of this approach. Any WebHub application can surface some or all of its features via the standard SOAP interface Fig. 3: ZMAdmin, used to vary the use of the banner feature for development vs production. SOAP Any WebHub application can surface some or all of its features via the standard SOAP interface, and we definitely recommend this. Precisely, any TwhWebAction derivative can be SOAP enabled by toggling the SOAPCallOk property from False to True. This is demonstrated in the "spam aversion" demo, If you click into that demo, you can see how SOAP documentation is generated automatically, both human-readable and 18 MAGAZINE

19 DELPHI everything needed for software interfacing. In that demo, use the [Source] link to see all the Delphi code, especially the whstop- Spam_fmWh.pas file which shows how to add a custom method with in and out parameters. Customer Comments I thought you might like to hear from "ordinary" Delphi programmers have to say about WebHub. The following two comments are from people who have built significant ventures using WebHub and Delphi. The first operates in Germany and the second in the USA. We have been working with WebHub since March At that time, we intensively evaluated web development options: Java, PHP, ASP, diverse frameworks in each of these languages. Even at that time, none of these evaluated tools impressed us with their performance. Also, the cost effectiveness and usability was often unbelievably lacking. Whoever has even once labored with Java and Struts and their XML will understand exactly what I am talking about. After months of searching and evaluating, I found href.com. It was like a miracle. We could finally develop our real estate portal in Delphi, logically and consistently. It was wonderful. The performance, the stability, the ease of use, the simplicity -- all this was, and still is today, the basis for us to say that the WebHub framework is the number 1 choice for anyone who wants to develop a stable, high-traffic, modular, high-performance web application. We know Java, we know PHP, we know Ruby and Ruby on Rails. Yet, if we were to build our real estate portal again, starting today, we would do it with 100%-awareness with the friendly WebHub. If it were possible to give 5 stars to WebHub, we would give it 6 stars. At this point, many, many thanks to Ann, for the always-friendly, high quality technical support, the quick clarification of ideas and quite simply for the best web tool which I use daily. -- Andreas Orth, customer from 2000 to 2009 We have had several iterations of migrating to ASP.Net and all have failed in matching or even approaching the performance and the productivity of Delphi + WebHub. All of these attempts have been by professional ASP.Net developers. Our competition (using ASP.Net, ASP, PHP, Java) have not been able to approach the complexities, performance, etc., we have attained on our site -- regardless of the number of developers they commit. -- John Correa, customer from 1997 to 2009 Licensing and Source Code Availability We have a fine-grained way of providing source code. We recommend that you start with a free evaluation license ( and make sure that you are in love with WebHub. The latest prices are always available at WebHub is available for Delphi 6 and above; Delphi 2009 is recommended. TNativeXml, ZaphosdMap and most of TPack also compile in Kylix 3 and Delphi for Dot Net through D2007. TNativeXml additionally compiles under FreePascal. Conclusion In these articles, I've walked you through the facets of WebHub which contribute to its unique level of power and flexibility. I invite you to use this knowledge -- in Delphi, with WebHub -- or otherwise. Who should build apps with WebHub? Ideally, WebHub is for programmers who love expressing themselves in Object Pascal, who are interested in skinning their web application for multiple audiences, who need to translate their site content into two or more lingvos, who see advantages in partnering with a web artist, and who want to build something long-lasting. Fig. 4:. Once more where we started off at the cables suspending the Brooklyn Bridge, April I have been very quiet about WebHub since 2002; we were consumed with extensive refactoring. We are now officially open again for new customers, and I look forward to hearing from readers with questions or comments. Reach me through our site, contact. 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. magazine voor software development 19

20 Advertentie VNU

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

MyDHL+ Van Non-Corporate naar Corporate

MyDHL+ Van Non-Corporate naar Corporate MyDHL+ Van Non-Corporate naar Corporate Van Non-Corporate naar Corporate In MyDHL+ is het mogelijk om meerdere gebruikers aan uw set-up toe te voegen. Wanneer er bijvoorbeeld meerdere collega s van dezelfde

Nadere informatie

ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK EN BEHANDELING (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK EN BEHANDELING (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM Read Online and Download Ebook ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK EN BEHANDELING (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM DOWNLOAD EBOOK : ANGSTSTOORNISSEN EN HYPOCHONDRIE: DIAGNOSTIEK STAFLEU

Nadere informatie

General info on using shopping carts with Ingenico epayments

General info on using shopping carts with Ingenico epayments Inhoudsopgave 1. Disclaimer 2. What is a PSPID? 3. What is an API user? How is it different from other users? 4. What is an operation code? And should I choose "Authorisation" or "Sale"? 5. What is an

Nadere informatie

2019 SUNEXCHANGE USER GUIDE LAST UPDATED

2019 SUNEXCHANGE USER GUIDE LAST UPDATED 2019 SUNEXCHANGE USER GUIDE LAST UPDATED 0 - -19 1 WELCOME TO SUNEX DISTRIBUTOR PORTAL This user manual will cover all the screens and functions of our site. MAIN SCREEN: Welcome message. 2 LOGIN SCREEN:

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

RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM Read Online and Download Ebook RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN GENEESMIDDELEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM DOWNLOAD EBOOK : RECEPTEERKUNDE: PRODUCTZORG EN BEREIDING VAN STAFLEU

Nadere informatie

Handleiding Zuludesk Parent

Handleiding Zuludesk Parent Handleiding Zuludesk Parent Handleiding Zuludesk Parent Met Zuludesk Parent kunt u buiten schooltijden de ipad van uw kind beheren. Hieronder vind u een korte handleiding met de mogelijkheden. Gebruik

Nadere informatie

Activant Prophet 21. Prophet 21 Version 12.0 Upgrade Information

Activant Prophet 21. Prophet 21 Version 12.0 Upgrade Information Activant Prophet 21 Prophet 21 Version 12.0 Upgrade Information This class is designed for Customers interested in upgrading to version 12.0 IT staff responsible for the managing of the Prophet 21 system

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

SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead

SAMPLE 11 = + 11 = + + Exploring Combinations of Ten + + = = + + = + = = + = = 11. Step Up. Step Ahead 7.1 Exploring Combinations of Ten Look at these cubes. 2. Color some of the cubes to make three parts. Then write a matching sentence. 10 What addition sentence matches the picture? How else could you

Nadere informatie

Introductie in flowcharts

Introductie in flowcharts Introductie in flowcharts Flow Charts Een flow chart kan gebruikt worden om: Processen definieren en analyseren. Een beeld vormen van een proces voor analyse, discussie of communicatie. Het definieren,

Nadere informatie

De grondbeginselen der Nederlandsche spelling / Regeling der spelling voor het woordenboek der Nederlandsche taal (Dutch Edition)

De grondbeginselen der Nederlandsche spelling / Regeling der spelling voor het woordenboek der Nederlandsche taal (Dutch Edition) De grondbeginselen der Nederlandsche spelling / Regeling der spelling voor het woordenboek der Nederlandsche taal (Dutch Edition) L. A. te Winkel Click here if your download doesn"t start automatically

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

B1 Woordkennis: Spelling

B1 Woordkennis: Spelling B1 Woordkennis: Spelling Bestuderen Inleiding Op B1 niveau gaan we wat meer aandacht schenken aan spelling. Je mag niet meer zoveel fouten maken als op A1 en A2 niveau. We bespreken een aantal belangrijke

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

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

MyDHL+ ProView activeren in MyDHL+

MyDHL+ ProView activeren in MyDHL+ MyDHL+ ProView activeren in MyDHL+ ProView activeren in MyDHL+ In MyDHL+ is het mogelijk om van uw zendingen, die op uw accountnummer zijn aangemaakt, de status te zien. Daarnaast is het ook mogelijk om

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

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

EM7680 Firmware Update by OTA

EM7680 Firmware Update by OTA EM7680 Firmware Update by OTA 2 NEDERLANDS/ENGLISH EM7680 Firmware update by OTA Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 3.0 (NL) Release notes:... 3 4.0 (NL) Overige

Nadere informatie

Puzzle. Fais ft. Afrojack Niveau 3a Song 6 Lesson A Worksheet. a Lees de omschrijvingen. Zet de Engelse woorden in de puzzel.

Puzzle. Fais ft. Afrojack Niveau 3a Song 6 Lesson A Worksheet. a Lees de omschrijvingen. Zet de Engelse woorden in de puzzel. Puzzle a Lees de omschrijvingen. Zet de Engelse woorden in de puzzel. een beloning voor de winnaar iemand die piano speelt een uitvoering 4 wat je wil gaan doen; voornemens 5 niet dezelfde 6 deze heb je

Nadere informatie

EM6250 Firmware update V030507

EM6250 Firmware update V030507 EM6250 Firmware update V030507 EM6250 Firmware update 2 NEDERLANDS/ENGLISH Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 3.0 (NL) Release notes:... 5 1.0 (UK) Introduction...

Nadere informatie

BISL EEN FRAMEWORK VOOR BUSINESS INFORMATIEMANAGEMENT (DUTCH LANGUAGE) (GERMAN EDITION) (DUTCH EDITION) BY REMKO VAN DER POLS, RALPH DONA

BISL EEN FRAMEWORK VOOR BUSINESS INFORMATIEMANAGEMENT (DUTCH LANGUAGE) (GERMAN EDITION) (DUTCH EDITION) BY REMKO VAN DER POLS, RALPH DONA Read Online and Download Ebook BISL EEN FRAMEWORK VOOR BUSINESS INFORMATIEMANAGEMENT (DUTCH LANGUAGE) (GERMAN EDITION) (DUTCH EDITION) BY REMKO VAN DER POLS, RALPH DONA DOWNLOAD EBOOK : BISL EEN FRAMEWORK

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

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

(1) De hoofdfunctie van ons gezelschap is het aanbieden van onderwijs. (2) Ons gezelschap is er om kunsteducatie te verbeteren

(1) De hoofdfunctie van ons gezelschap is het aanbieden van onderwijs. (2) Ons gezelschap is er om kunsteducatie te verbeteren (1) De hoofdfunctie van ons gezelschap is het aanbieden van onderwijs (2) Ons gezelschap is er om kunsteducatie te verbeteren (3) Ons gezelschap helpt gemeenschappen te vormen en te binden (4) De producties

Nadere informatie

HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM READ ONLINE AND DOWNLOAD EBOOK : HANDBOEK HARTFALEN (DUTCH EDITION) FROM BOHN Click button to download this ebook READ ONLINE AND DOWNLOAD

Nadere informatie

Shipment Centre EU Quick Print Client handleiding [NL]

Shipment Centre EU Quick Print Client handleiding [NL] Shipment Centre EU Quick Print Client handleiding [NL] Please scroll down for English. Met de Quick Print Client kunt u printers in Shipment Centre EU configureren. De Quick Print Client kan alleen op

Nadere informatie

Add the standing fingers to get the tens and multiply the closed fingers to get the units.

Add the standing fingers to get the tens and multiply the closed fingers to get the units. Digit work Here's a useful system of finger reckoning from the Middle Ages. To multiply $6 \times 9$, hold up one finger to represent the difference between the five fingers on that hand and the first

Nadere informatie

Group work to study a new subject.

Group work to study a new subject. CONTEXT SUBJECT AGE LEVEL AND COUNTRY FEATURE OF GROUP STUDENTS NUMBER MATERIALS AND TOOLS KIND OF GAME DURATION Order of operations 12 13 years 1 ste year of secundary school (technical class) Belgium

Nadere informatie

Vertaling Engels Gedicht / songteksten

Vertaling Engels Gedicht / songteksten Vertaling Engels Gedicht / songteksten Vertaling door een scholier 1460 woorden 23 januari 2002 5,4 399 keer beoordeeld Vak Engels Songtekst 1 Another day in paradise Artiest: Brandy & Ray J She calls

Nadere informatie

Preschool Kindergarten

Preschool Kindergarten Preschool Kindergarten Objectives Students will recognize the values of numerals 1 to 10. Students will use objects to solve addition problems with sums from 1 to 10. Materials Needed Large number cards

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

/ /

/   / Cookie statement / www.temagroningen.nl / board@temagroningen.nl / www.temagroningen.nl / board@temagroningen.nl Dutch hospitality is a cookie with your coffee or tea. Digital hospitality is a cookie for

Nadere informatie

CTI SUITE TSP DETAILS

CTI SUITE TSP DETAILS CTI SUITE TSP DETAILS TAPI allows an application to access telephony services provided by a telecom PABX. In order to implement its access to ETRADEAL, a TAPI interface has been developed by Etrali. As

Nadere informatie

The first line of the input contains an integer $t \in \mathbb{n}$. This is followed by $t$ lines of text. This text consists of:

The first line of the input contains an integer $t \in \mathbb{n}$. This is followed by $t$ lines of text. This text consists of: Document properties Most word processors show some properties of the text in a document, such as the number of words or the number of letters in that document. Write a program that can determine some of

Nadere informatie

150 ECG-problemen (Dutch Edition)

150 ECG-problemen (Dutch Edition) 150 ECG-problemen (Dutch Edition) John R. Hampton, Piet Machielse Click here if your download doesn"t start automatically 150 ECG-problemen (Dutch Edition) John R. Hampton, Piet Machielse 150 ECG-problemen

Nadere informatie

FOD VOLKSGEZONDHEID, VEILIGHEID VAN DE VOEDSELKETEN EN LEEFMILIEU 25/2/2016. Biocide CLOSED CIRCUIT

FOD VOLKSGEZONDHEID, VEILIGHEID VAN DE VOEDSELKETEN EN LEEFMILIEU 25/2/2016. Biocide CLOSED CIRCUIT 1 25/2/2016 Biocide CLOSED CIRCUIT 2 Regulatory background and scope Biocidal products regulation (EU) nr. 528/2012 (BPR), art. 19 (4): A biocidal product shall not be authorised for making available on

Nadere informatie

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

Registratie- en activeringsproces voor de Factuurstatus Service NL 1 Registration and activation process for the Invoice Status Service EN 10 QUICK GUIDE B Registratie- en activeringsproces voor de Factuurstatus Service NL 1 Registration and activation process for the Invoice Status Service EN 10 Version 0.19 (Oct 2016) Per May 2014 OB10 has

Nadere informatie

!!!! Wild!Peacock!Omslagdoek!! Vertaling!door!Eerlijke!Wol.!! Het!garen!voor!dit!patroon!is!te!verkrijgen!op! Benodigdheden:!!

!!!! Wild!Peacock!Omslagdoek!! Vertaling!door!Eerlijke!Wol.!! Het!garen!voor!dit!patroon!is!te!verkrijgen!op!  Benodigdheden:!! WildPeacockOmslagdoek VertalingdoorEerlijkeWol. Hetgarenvoorditpatroonisteverkrijgenopwww.eerlijkewol.nl Benodigdheden: 4strengenWildPeacockRecycledSilkYarn rondbreinaaldnr8(jekuntnatuurlijkookgewonebreinaaldengebruiken,maar

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

Read this story in English. My personal story

Read this story in English. My personal story My personal story Netherlands 32 Female Primary Topic: SOCIETAL CONTEXT Topics: CHILDHOOD / FAMILY LIFE / RELATIONSHIPS IDENTITY Year: 1990 2010 marriage/co-habitation name/naming court/justice/legal rights

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

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

voltooid tegenwoordige tijd

voltooid tegenwoordige tijd SirPalsrok @meestergijs It has taken me a while to make this grammar explanation. My life has been quite busy and for that reason I had little time. My week was full of highs and lows. This past weekend

Nadere informatie

Engels op Niveau A2 Workshops Woordkennis 1

Engels op Niveau A2 Workshops Woordkennis 1 A2 Workshops Woordkennis 1 A2 Workshops Woordkennis 1 A2 Woordkennis 1 Bestuderen Hoe leer je 2000 woorden? Als je een nieuwe taal wilt spreken en schrijven, heb je vooral veel nieuwe woorden nodig. Je

Nadere informatie

L.Net s88sd16-n aansluitingen en programmering.

L.Net s88sd16-n aansluitingen en programmering. De L.Net s88sd16-n wordt via één van de L.Net aansluitingen aangesloten op de LocoNet aansluiting van de centrale, bij een Intellibox of Twin-Center is dat de LocoNet-T aansluiting. L.Net s88sd16-n aansluitingen

Nadere informatie

DALISOFT. 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool. Connect the TDS20620V2. Start DALISOFT

DALISOFT. 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool. Connect the TDS20620V2. Start DALISOFT TELETASK Handbook Multiple DoIP Central units DALISOFT 33. Configuring DALI ballasts with the TDS20620V2 DALI Tool Connect the TDS20620V2 If there is a TDS13620 connected to the DALI-bus, remove it first.

Nadere informatie

LDAP Server on Yeastar MyPBX & tiptel 31xx/32xx series

LDAP Server on Yeastar MyPBX & tiptel 31xx/32xx series LDAP Server on Yeastar MyPBX & tiptel 31xx/32xx series Tiptel b.v. Camerastraat 2 1322 BC Almere tel.: +31-36-5366650 fax.: +31-36-5367881 info@tiptel.nl Versie 1.2.0 (09022016) Nederlands: De LDAP server

Nadere informatie

Hoe te verbinden met NDI Remote Office (NDIRO): Apple OS X How to connect to NDI Remote Office (NDIRO): Apple OS X

Hoe te verbinden met NDI Remote Office (NDIRO): Apple OS X How to connect to NDI Remote Office (NDIRO): Apple OS X Handleiding/Manual Hoe te verbinden met (NDIRO): Apple OS X How to connect to (NDIRO): Apple OS X Inhoudsopgave / Table of Contents 1 Verbinden met het gebruik van Apple OS X (Nederlands)... 3 2 Connect

Nadere informatie

Borstkanker: Stichting tegen Kanker (Dutch Edition)

Borstkanker: Stichting tegen Kanker (Dutch Edition) Borstkanker: Stichting tegen Kanker (Dutch Edition) Stichting tegen Kanker Click here if your download doesn"t start automatically Borstkanker: Stichting tegen Kanker (Dutch Edition) Stichting tegen Kanker

Nadere informatie

Stars FILE 7 STARS BK 2

Stars FILE 7 STARS BK 2 Stars FILE 7 STARS BK 2 Of course you have seen X-Factor, The Voice or Got Talent on TV or via the Internet. What is your favourite act? Do you like the dancing performances or would you rather listen

Nadere informatie

EM7680 Firmware Auto-Update for Kodi 17.2

EM7680 Firmware Auto-Update for Kodi 17.2 EM7680 Firmware Auto-Update for Kodi 17.2 2 NEDERLANDS/ENGLISH EM7680 Firmware Auto-update for Kodi 17.2 Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 3.0 (NL) Opmerking...

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

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

Een vrouw, een kind en azijn (Dutch Edition)

Een vrouw, een kind en azijn (Dutch Edition) Een vrouw, een kind en azijn (Dutch Edition) D.J. Peek Click here if your download doesn"t start automatically Een vrouw, een kind en azijn (Dutch Edition) D.J. Peek Een vrouw, een kind en azijn (Dutch

Nadere informatie

Luister alsjeblieft naar een opname als je de vragen beantwoordt of speel de stukken zelf!

Luister alsjeblieft naar een opname als je de vragen beantwoordt of speel de stukken zelf! Martijn Hooning COLLEGE ANALYSE OPDRACHT 1 9 september 2009 Hierbij een paar vragen over twee stukken die we deze week en vorige week hebben besproken: Mondnacht van Schumann, en het eerste deel van het

Nadere informatie

Archief Voor Kerkelijke Geschiedenis, Inzonderheid Van Nederland, Volume 8... (Romanian Edition)

Archief Voor Kerkelijke Geschiedenis, Inzonderheid Van Nederland, Volume 8... (Romanian Edition) Archief Voor Kerkelijke Geschiedenis, Inzonderheid Van Nederland, Volume 8... (Romanian Edition) Click here if your download doesn"t start automatically Archief Voor Kerkelijke Geschiedenis, Inzonderheid

Nadere informatie

Cambridge Assessment International Education Cambridge International General Certificate of Secondary Education. Published

Cambridge Assessment International Education Cambridge International General Certificate of Secondary Education. Published Cambridge Assessment International Education Cambridge International General Certificate of Secondary Education DUTCH 055/02 Paper 2 Reading MARK SCHEME Maximum Mark: 45 Published This mark scheme is published

Nadere informatie

open standaard hypertext markup language internetprotocol transmission control protocol internet relay chat office open xml

open standaard hypertext markup language internetprotocol transmission control protocol internet relay chat office open xml DOWNLOAD OR READ : OPEN STANDAARD HYPERTEXT MARKUP LANGUAGE INTERNETPROTOCOL TRANSMISSION CONTROL PROTOCOL INTERNET RELAY CHAT OFFICE OPEN XML PDF EBOOK EPUB MOBI Page 1 Page 2 relay chat office open xml

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

Duurzaam projectmanagement - De nieuwe realiteit van de projectmanager (Dutch Edition)

Duurzaam projectmanagement - De nieuwe realiteit van de projectmanager (Dutch Edition) Duurzaam projectmanagement - De nieuwe realiteit van de projectmanager (Dutch Edition) Ron Schipper Click here if your download doesn"t start automatically Duurzaam projectmanagement - De nieuwe realiteit

Nadere informatie

My Inspiration I got my inspiration from a lamp that I already had made 2 years ago. The lamp is the you can see on the right.

My Inspiration I got my inspiration from a lamp that I already had made 2 years ago. The lamp is the you can see on the right. Mijn Inspiratie Ik kreeg het idee om een variant te maken van een lamp die ik al eerder had gemaakt. Bij de lamp die in de onderstaande foto s is afgebeeld kun je het licht dimmen door de lamellen open

Nadere informatie

Concept of Feedback. P.S. Gandhi Mechanical Engineering IIT Bombay

Concept of Feedback. P.S. Gandhi Mechanical Engineering IIT Bombay Concept of Feedback P.S. Gandhi Mechanical Engineering IIT Bombay Recap Goal of the course: understanding and learning Assignments: optional to start with Contact hour with TAs: Monday AN: time? Meeting

Nadere informatie

What is the advantage of using expression language instead of JSP scriptlets and JSP expressions?

What is the advantage of using expression language instead of JSP scriptlets and JSP expressions? Web 3: Theorievragen No Scriptlets What is the advantage of using expression language instead of JSP scriptlets and JSP expressions? Geen javacode tussen de html. What is the difference between the. operator

Nadere informatie

Een vrouw, een kind en azijn (Dutch Edition)

Een vrouw, een kind en azijn (Dutch Edition) Een vrouw, een kind en azijn (Dutch Edition) D.J. Peek Click here if your download doesn"t start automatically Een vrouw, een kind en azijn (Dutch Edition) D.J. Peek Een vrouw, een kind en azijn (Dutch

Nadere informatie

EM4594 Firmware update

EM4594 Firmware update EM4594 Firmware update EM4594 Firmware update 2 NEDERLANDS/ENGLISH Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 4.0 (NL) Overige informatie:... 7 1.0 (UK) Introduction...

Nadere informatie

MyDHL+ Tarief berekenen

MyDHL+ Tarief berekenen MyDHL+ Tarief berekenen Bereken tarief in MyDHL+ In MyDHL+ kunt u met Bereken tarief heel eenvoudig en snel opvragen welke producten er mogelijk zijn voor een bestemming. Ook ziet u hierbij het geschatte

Nadere informatie

SEO Content. Creditcard aanvragen? Dé beste creditcards vergelijken.

SEO Content. Creditcard aanvragen? Dé beste creditcards vergelijken. Website review creditcardkiezer.nl Generated on October 16 2016 08:23 AM The score is 45/100 SEO Content Title Creditcard aanvragen? Dé beste creditcards vergelijken. Length : 57 Perfect, your title contains

Nadere informatie

GS1 Data Source. Guide to the management of digital files for data suppliers and recipients

GS1 Data Source. Guide to the management of digital files for data suppliers and recipients GS1 Data Source Guide to the management of digital files for data suppliers and recipients Version 1.4, Definitief - goedgekeurd, 11 December 2018 Summary Document property Name Value GS1 Data Source Date

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

Website review kamernet.nl

Website review kamernet.nl Website review kamernet.nl Generated on October 22 2016 22:07 PM The score is 51/100 SEO Content Title Huur een kamer, appartement of studio Kamernet Length : 48 Perfect, your title contains between 10

Nadere informatie

WEGWIJZER VOOR METHODEN BIJ PROJECTMANAGEMENT (PROJECT MANAGEMENT) (DUTCH EDITION) BY EDWIN BAARDMAN, GERARD BAKKER, JAN VAN BEIJNHEM, FR

WEGWIJZER VOOR METHODEN BIJ PROJECTMANAGEMENT (PROJECT MANAGEMENT) (DUTCH EDITION) BY EDWIN BAARDMAN, GERARD BAKKER, JAN VAN BEIJNHEM, FR Read Online and Download Ebook WEGWIJZER VOOR METHODEN BIJ PROJECTMANAGEMENT (PROJECT MANAGEMENT) (DUTCH EDITION) BY EDWIN BAARDMAN, GERARD BAKKER, JAN VAN BEIJNHEM, FR DOWNLOAD EBOOK : WEGWIJZER VOOR

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

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

MyDHL+ Uw accountnummer(s) delen

MyDHL+ Uw accountnummer(s) delen MyDHL+ Uw accountnummer(s) delen met anderen Uw accountnummer(s) delen met anderen in MyDHL+ In MyDHL+ is het mogelijk om uw accountnummer(s) te delen met anderen om op uw accountnummer een zending te

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

Love & Like FILE 2 LOVE & LIKE BK 2

Love & Like FILE 2 LOVE & LIKE BK 2 Love & Like I Like You Come a little closer Honey, come a little closer, let me whisper in your ear. Let me tell it to you quietly, So that no one else will hear. 1 File 2 - Love & Like BK2.indd 1 22-7-2014

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

Ius Commune Training Programme Amsterdam Masterclass 15 June 2018

Ius Commune Training Programme Amsterdam Masterclass 15 June 2018 www.iuscommune.eu Dear Ius Commune PhD researchers, You are kindly invited to participate in the Ius Commune Amsterdam Masterclass for PhD researchers, which will take place on Friday, 15 June 2018. This

Nadere informatie

Main language Dit is de basiswoordenschat. Deze woorden moeten de leerlingen zowel passief als actief kennen.

Main language Dit is de basiswoordenschat. Deze woorden moeten de leerlingen zowel passief als actief kennen. Lesbrief Les 2.1: My family Main language Dit is de basiswoordenschat. Deze woorden moeten de leerlingen zowel passief als actief kennen. Nouns: brother, sister, cousin, mother, father, aunt, uncle, grandmother,

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

Win a meet and greet with Adam Young from the band Owl City!

Win a meet and greet with Adam Young from the band Owl City! 1 Meet and greet read Lees de tekst. Wat is de prijs die je kunt winnen? early too late on time vroeg te laat op tijd Win a meet and greet with Adam Young from the band Owl City! Do you have a special

Nadere informatie

Lists of words from the books, and feedback from the sessions, are on

Lists of words from the books, and feedback from the sessions, are on Vocabulairetrainer www.quizlet.com - handleiding 1. Woordenlijsten van de boeken en de feedback van de les staan op http://www.quizlet.com. Lists of words from the books, and feedback from the sessions,

Nadere informatie

Vergaderen in het Engels

Vergaderen in het Engels Vergaderen in het Engels In dit artikel beschrijven we verschillende situaties die zich kunnen voordoen tijdens een business meeting. Na het doorlopen van deze zinnen zal je genoeg kennis hebben om je

Nadere informatie

Model driven Application Delivery

Model driven Application Delivery Model driven Application Delivery Fast. Flexible. Future-proof. How Agis streamlines health procurement using Mendix Model driven Application Platform Mendix in a nutshell Mendix delivers the tools and

Nadere informatie

It s all about the money Group work

It s all about the money Group work It s all about the money Group work Tijdsduur: 45 minuten Kernwoorden: money (geld) coin (munt), banknote (bankbiljet), currency (munteenheid) Herhalings-/uitbreidingswoorden: debate (debat), proposal

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

L.Net s88sd16-n aansluitingen en programmering.

L.Net s88sd16-n aansluitingen en programmering. De L.Net s88sd16-n wordt via één van de L.Net aansluitingen aangesloten op de LocoNet aansluiting van de centrale, bij een Intellibox of Twin-Center is dat de LocoNet-T aansluiting. L.Net s88sd16-n aansluitingen

Nadere informatie

Zo werkt het in de apotheek (Basiswerk AG) (Dutch Edition)

Zo werkt het in de apotheek (Basiswerk AG) (Dutch Edition) Zo werkt het in de apotheek (Basiswerk AG) (Dutch Edition) C.R.C. Huizinga-Arp Click here if your download doesn"t start automatically Zo werkt het in de apotheek (Basiswerk AG) (Dutch Edition) C.R.C.

Nadere informatie

VERPLEEGKUNDIGE INTERVENTIES: VERTALING VAN NURSING INTERVENTIONS CLASSIFICATION (NIC) (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM

VERPLEEGKUNDIGE INTERVENTIES: VERTALING VAN NURSING INTERVENTIONS CLASSIFICATION (NIC) (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM Read Online and Download Ebook VERPLEEGKUNDIGE INTERVENTIES: VERTALING VAN NURSING INTERVENTIONS CLASSIFICATION (NIC) (DUTCH EDITION) FROM BOHN STAFLEU VAN LOGHUM DOWNLOAD EBOOK : VERPLEEGKUNDIGE INTERVENTIES:

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

EM7580 Firmware Update by Micro SD card

EM7580 Firmware Update by Micro SD card EM7580 Firmware Update by Micro SD card 2 NEDERLANDS/ENGLISH EM7580 Firmware update by Micro SD card Table of contents 1.0 (NL) Introductie... 3 2.0 (NL) Firmware installeren... 3 3.0 (NL) Opmerking...

Nadere informatie

Disclosure belofte. Ik stel het belang van de patiënt voorop en eerbiedig zijn opvattingen. Doel van de patient staat centraal

Disclosure belofte. Ik stel het belang van de patiënt voorop en eerbiedig zijn opvattingen. Doel van de patient staat centraal Disclosure: belofte Ik stel het belang van de patiënt voorop en eerbiedig zijn opvattingen Ik zal aan de patiënt geen schade doen Ik luister en zal hem goed inlichten Disclosure: belofte Ik stel het belang

Nadere informatie

A2 Workshops Grammatica Heden

A2 Workshops Grammatica Heden Bestuderen Present Simple Normaal Hoe maak je de Present Simple? Kijk eerst maar even naar het volgende rijtje. I You He She It We You see see sees sees sees see see They see Je ziet dat het heel eenvoudig

Nadere informatie

Duurzaam projectmanagement - De nieuwe realiteit van de projectmanager (Dutch Edition)

Duurzaam projectmanagement - De nieuwe realiteit van de projectmanager (Dutch Edition) Duurzaam projectmanagement - De nieuwe realiteit van de projectmanager (Dutch Edition) Ron Schipper Click here if your download doesn"t start automatically Duurzaam projectmanagement - De nieuwe realiteit

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