MAGAZINE. IN DIT NUMMER O.A.:

Maat: px
Weergave met pagina beginnen:

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

Transcriptie

1 MAGAZINE SOFTWARE DEVELOPMENT NETWORK ISSN: IN DIT NUMMER O.A.: Advantage Database Server 11: A first Look < Onderhoudbare GUI tests met Coded UI < Getting testing done in the sprint < Nummer 115 december 2012 SDN Magazine verschijnt elk kwartaal en is een uitgave van Software Development Network 115

2

3 Colofon Uitgave: Software Development Network Twintigste jaargang No. 115 december 2012 Bestuur van SDN: Remi Caron, voorzitter Rob Suurland, penningmeester Marcel Meijer, secretaris Redactie: Marcel Meijer Aan dit magazine werd meegewerkt door: Roel Hans Bethlehem, Bob Swart, Maarten van Stam, Alexander Meijers, Remi Caron, Marcel Meijer en natuurlijk alle auteurs! Listings: Zie de website voor eventuele source files uit deze uitgave. Contact: Software Development Network Postbus 506, 7100 AM Winterswijk Tel. (085) Fax (085) 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 CSC 2 Achmea 13 Compuware 18 Delta-N 27 Macaw 36 Beste SDN magazine lezer, voorwoord Tjonge, wat hebben we een hete herfst achter de rug zeg! Het was het release seizoen! Delphi kwam met een nieuwe versie, maar Microsoft had ook het één en ander te releasen. Op ons laatste SDN event stonden veel sessies in het teken van Windows 8. Toen was Windows 8 al RTM en beschikbaar via MSDN en Technet. De officiële release was uiteindelijk op 26 oktober. Tijdens deze keynote werd ook de Microsoft Surface gelanceerd. Deze veel geroemde ipad killer is vanaf heden beschikbaar, helaas is er nog geen verkooppunt in Nederland. Als je niet kunt wachten, dan heeft WP7.nl alle mogelijkheden op een rijtje gezet. Denk goed na wat je doet. Na de officiële release van Windows 8 werd ook Windows Phone 8 officieel gereleased. Enkele toestellen zijn in Nederland verkrijgbaar. Deze opvolger is van Windows Phone 7 belooft een gouden toekomst voor het Windows Phone platform van Microsoft. De SDK voor dit platform is nu ook beschikbaar, laat je uitdagen om de missing en geweldige apps te maken! Tijdens het //Build event van 30 oktober tot en met 2 november op de Campus van Microsoft waren er ook nog diverse zaken te melden. Zo werd er een nieuwe versie van de Windows Azure SDK gereleased, versie 1.8. Voor het Windows Azure platform waren er meerdere aankondigen, zoals het toevoegen van ios en Windows Phone 8 targets aan de Windows Azure Mobile Services. Maar ook de aankondiging dat er naast de Windows Azure Market een Windows Azure Store komt. Een hele interessante ontwikkeling voor ISV s en leveranciers van tools. Ander nieuwtje op het //Build event was, dat TFS Preview de preview status heeft verlaten en nu werkelijk productioneel is geworden. Het mooiste nog, voor teams van 5 personen is gratis ongeacht het aantal projecten. Als je nog niet de mogelijkheid hebt gehad om TFS on Windows Azure te evalueren, dan zou ik dat nu zeker doen. Kortom op de koude winteravonden die nu gaan komen, is er genoeg te doen om je niet te vervelen. Wat hebben we toch een mooi vak! Dit magazine bevat weer een mooie selectie aan artikelen van Cary Jensen, Clemens Reijnen, Sander Hoogendoorn, Michiel van Otegem, Lammert Vinke en Marcel Meijer. We wensen jullie heel veel leesplezier! Met vriendelijke groet, Marcel Meijer Adverteren? Informatie over adverteren en de advertentietarieven kunt u vinden op onder de rubriek Magazine. magazine voor software development 3

4 Agenda 2012/2013 Inhoud SDC 3/4 december 2012 Papendal Microsoft TechDays Nederland 7/8 maart 2013 Den Haag SDE 1 25 maart 2013 SDE 2 7 juni 2013 TechEd Europe juni 2013 Amsterdam SDE 3 20 september 2013 PDC of toch weer een //Build? oktober Voorwoord Marcel Meijer 04 Inhoudsopgave 04 Agenda 05 Advantage Database Server 11: A first Look Cary Jensen 14 Using 32 bit (Legacy) DLL on Windows Azure Marcel Meijer 17 The Waterfall Dentist Anti-Pattern Sander Hoogendoorn 19 Onderhoudbare GUI tests met Coded UI Lammert Vinke 22 JSON with Delphi Part 2 Cary Jensen 26 Mijn hart zingt voor Visual Studio 2012 Michiel van Otegem 29 Windows Azure Portal Updates Marcel Meijer 30 Getting testing done in the sprint Clemens Reijnen SDC 25/26 november 2013

5 DELPHI Cary Jensen Advantage Database Server 11: A First Look The Advantage Database Server is a high-performance, low maintenance database server that has earned the affection of small-to-medium sized businesses and vertical market developers. It combines speed and high-end features with an ease-of-use that is welcome but unexpected. And now, with the release of Advantage Database Server 11, a whole new world of features and enhancements make Advantage even more powerful and easier to use and manage. This article is designed to introduce you to the many exciting new features introduced in Advantage 11. It begins by looking at the Advantage Web Platform, a RESTful service that makes your data available from anywhere, anytime. Next, we will look at the new online maintenance features, improvements to replication, and the many enhancements to Advantage's support for SQL, the structured query language. Later in this article, you will learn about the new and enhanced connectivity options, general performance updates, and improved error reporting. Advantage Web Platform One of the most anticipated updates in Advantage 11 is the new Advantage Web Platform. The Advantage Web Platform is a RESTful Web service that provides you with the ability to interact with your Advantage databases over the World Wide Web. There are two distinct capabilities that the Advantage Web Platform enables. The first is the ability to read, update, and delete data from your Advantage data dictionaries using a RESTful interface. This feature is implemented through the OData protocol, an industry standard for accessing data using a REST interface. This interface also provides you with access to metadata, stored procedure and query execution, as well as offline storage. The second capability is that it permits you to manage and query your databases from a Web browser, permitting you to access your data from anywhere, using any browser, even from a smart phone. When you install the Advantage Web Platform, you are actually installing a lightweight version of Apache Web server, and it is through this Web server that the Advantage Web Platform provides access to your data. This service is configured by default to listen to HTTP (hypertext transfer protocol) requests on port 6272, and HTTPS (secure HTTP) on port These port numbers, and other aspects of the Apache Web service can be configured. Please see the Advantage help details. The following sections describe the two principle features provided by the Advantage Web Platform. Data Anywhere Using the Advantage Web Platform and OData OData is a standards-based protocol for accessing data using a RESTful Web interface. REST, which stands for REpresentation State Transfer, is a description of the basic request and response interaction that drives the World Wide Web. A RESTful Web service is one that you can interact with using basic HTTP commands over the Internet. A significant feature of REST is that you call the methods of your Web service using the values that you pass in your URI (uniform resource identifier), and sometimes pass additional data in the HTTP message body. These methods, when they return a value, return a string. Using the OData protocol, this string will either be in AtomPub (Atom Publishing Protocol), an XML-based format, or JSON (JavaScript Object Notation), and you get to choose which format you want. Because OData uses REST, any client that can communicate across the Internet, and which can issue HTTP requests, can interact with the Advantage Web Platform to retrieve, update, and manage data in your database. Importantly, because OData relies on HTTP, the client from which the RESTful Web service is accessed does not need the Advantage client API installed locally. OData can only be used to interact with Advantage data dictionaries that have been configured for access through the Advantage Web Platform, and only through the Advantage Database Server (the Advantage Web Platform cannot be used with the Advantage Local Server). For information on configuring a database for access through the Advantage Web Platform, please see the Advantage help. Fortunately, nearly every modern client development tool has the capability to communicate using HTTP, including.net, JavaScript and jquery, Java, C++, Objective-C, and Delphi, to name just a few. This means that the Advantage Web Platform provides access to your Advantage data from almost any imaginable platform, including Windows, Linux, the Mac, Unix, mobile devices, ios and Android tablets, and Web pages. OData consists of a sophisticated collection of standards and capabilities. For more information, including examples of how to use OData to communicate to the Advantage Web Platform, see the Advantage help. For more information on OData, visit The Advantage Web Administrator The Advantage Web Administrator is a Web application that gets installed along side of the Advantage Web Platform. This Web application provides you with a wide range of options, including the ability to view information about connected users, active queries, configuration parameters, communications statistics, and more. Based on how you configure the Advantage Web Administrator, you may also be able to run ad-hoc queries, interact with multiple data dictionaries, and even change configuration parameters (though many magazine voor software development 5

6 DELPHI of these configuration changes made within the Advantage Web Administrator require a subsequent re-start of the Advantage Database Server service). To provide an entry point for communication to Advantage through the Advantage Web Administrator, a new concept, the root dictionary, has been introduced. Each server can have at most one root dictionary, and it is the dictionary to which the Advantage Web Administrator initially connects. You configure the root dictionary for a particular server using the Advantage Configuration Utility. The Advantage Configuration Utility, showing the new Root Dictionary file location, is shown in Figure 1. adsweb\apache\conf directory, as well as set the JavaScript rootdb variable declaration in the configoptions.js file, located in C:\Program Files\Advantage 11.0\adsweb\apache\htdocs\adsconfig. After changing the adsweb.conf file, you must restart the Advantage Web Platform service. For more information on configuring the Advantage Web Administrator, please see the Advantage help. The Advantage Web Administrator is shown in Figure 2, where the contents of the Error logs are displayed. Online Maintenance Online maintenance is one of the more popular updates introduced in Advantage 11. Online maintenance lets you pack, reindex, and alter the tables of your database without having to first obtain an exclusive lock on those tables. This feature permits you to make significant changes to your tables without having to limit your users' access to their data. There are three aspects to online maintenance. The first is how Advantage treats these maintenance operations while users are actively using your database. The second concerns a collection of new system stored procedures introduced in Advantage 11 that permit these operations to be initiated programmatically. Finally, each of the online maintenance functions is also associated with a notification that will trigger when the operation is complete. How Online Maintenance Is Applied Normally, pack, reindex, and alter operations require that you have exclusive access to the table on which you are performing the operation. This often means that these operations have to be performed only after taking the database offline, which, in a production environment, can be difficult, or at least inconvenient. Fig. 1: The Advantage Configuration Utility showing the new Root Data Dictionary Path option You can select one of your existing data dictionaries to serve as your root dictionary. Alternatively, you can create a new, empty data dictionary, and use that as your root dictionary. This second option has the benefit of providing you with greater control over the data dictionary features that you want to expose using the Advantage Web Administrator. In addition to defining a root dictionary using the Advantage Configuration Utility, there are several additional configurations that you must perform. You must specify a location for the root dictionary in the adsweb.conf file, located in the C:\Program Files\Advantage 11.0\ Fig. 2: The Advantage Web Administrator When performing online maintenance, Advantage begins by creating a copy of the original table, and duplicating both the data and its indexes to the copy. It then uses this copy to apply the requested change. For pack and reindex online maintenance, once any pending transactions have been applied, and all users have released their locks, the new table becomes available. Users will begin using that updated table as soon as they make a request that results in a refresh of their cursor, such as navigating to a new record or setting a filter. Because an online alter physically changes the structure of the table (or its indexes), users must actually close and reopen that table before the new structure becomes available. Online maintenance is only supported using the Advantage Database Server. You cannot perform online maintenance from the Advantage Local Server. Online Maintenance System Stored Procedures Advantage 11 introduces three new system stored procedures associated with online maintenance. These are sp_packtableonline, sp_packalltablesonline, and sp_reindexonline, and they permit you to perform online maintenance programmatically from your custom applications. Calls to these stored procedures return once the operation has been completed on the copy of the table. However, individual users may continue to use the old version of the table until they reposition their cursor. As a result, a return from sp_packtableonline, sp_packall TablesOnline, or sp_reindexonline does not signal that all users are current, only that all users are in a position to use the new version of the table. There is no special system stored procedure associated with online alter operations. Instead, you execute a special version of an ALTER TABLE query, ALTER ONLINE TABLE. Other than the ONLINE 6 MAGAZINE

7 DELPHI keyword, the syntax of an ALTER ONLINE TABLE query is the same as for a normal ALTER TABLE statement. Online Maintenance Notifications Notifications, which were introduced in Advantage 9, provide a mechanism by which a client application can request to be informed by Advantage when a particular operation has taken place. For example, a client may ask to be notified when new records are inserted into a particular table, or when updates are made to a table's contents. There are two parts to a notification. First, a server must issue a specific notification through the execution of the sp_signalevent stored procedure. Second, a client must subscribe to a notification and then wait for it. A client subscribes to a notification by calling sp_createevent, and waits for the notification using the sp_waitfor Event stored procedure. Since the sp_waitforevent stored procedure call blocks until the notification is issued, this stored procedure is often called from a worker thread on the client. In the case of online maintenance operations, Advantage always issues a notification when the online operation has reached a stage where users can begin transitioning to the updated table. In the case of online packing or reindexing, a single notification is issued once users can switch to the new table. In the case of an online alter table operation, Advantage will issue a notification once users can be transitioned to the new table. In addition, Advantage will continue to issue notifications every minute until all users have closed their connection to the old version of the table. If you want your client applications to be informed once an online maintenance operation has reached the point where a transition to the new table is possible, your client applications must subscribe to, and listen for, these notifications. A client subscribes to an online maintenance notification by calling the sp_createevent system stored procedure, passing in the first parameter, an event name using a specific pattern. The event name prefix begins with two underscore characters, following by OP, OR, or OA, which corresponds to online pack, online reindex, and online alter, respectively. The middle section of the event name is FinalStage, and the suffix is a single underscore character followed by the name of the table upon which the maintenance was performed. As a result, if you want to subscribe to a notification about the packing of a table named archive, you will use the following string: OPFinalStage_archive By comparison, if you want to subscribe to a notification about the alter table operation on a table named customers, you will use the following string: OAFinalStage_customers To learn more about notifications in general, and online maintenance notifications in particular, please see the Advantage help. Replication Replication, which was first introduced in Advantage 8, provides a mechanism for duplicating changes made to one database to one or more databases. For example, replication can be used to copy changes made at regional data centers to a centralized data center, where the combined data can be analyzed and reported. Similarly, replication can be implemented in a bi-directional fashion, permitting two databases to share changes made to the individual databases. There are a number of requirements that must be met before you can implement replication. First of all, replication requires that the source database and the target database both use data dictionaries. Second, both the source data dictionary and the target data dictionary must be accessed by the Advantage Database Server (ADS). Replication cannot be implemented using Advantage Local Server. Finally, an additional replication license must be installed on the source server, and sometimes the target server as well, depending on how you configure your replication. Replication is an extremely valuable mechanism for those developers who need it. Fortunately, there are several significant capabilities added to Advantage's replication introduced in Advantage 11. These include replication to older Advantage servers, additional system stored procedures to examine the replication queue, and the ability to more easily edit the replication queue. Each of these capabilities is described in the following sections. Replication to Older Advantage Servers A significant update, one that I know will delight many developers, is the ability to replicate between the new Advantage 11 server and those servers running older versions of Advantage. In Advantage 11, replication to Advantage 9 and later servers is supported. In all previous implementations of replication, an older Advantage server could replicate to a new server, but a newer server could not replicate to an older one. What makes this update so valuable is that it permits an organization to upgrade one or more of their servers to take advantage of the many new features in Advantage 11 without having to upgrade every server involved in replication. For example, a company may want to upgrade the server at their main headquarters so that they can use the Advantage Web Platform, the new SQL capabilities, and online maintenance. If that server is involved in replication with satellite offices, those offices can continue to use their Advantage 10 servers for the meantime, upgrading at a later date when it is convenient. Replicating to an older server from Advantage 11 requires some setup. See the Advantage help for a detailed description of these steps. Viewing the Replication Queue The replication queue, which is a table in your data dictionary that you designate to hold the records that will be replicated, now displays its data in a more meaningful order. Previously, the replication queue records were displayed in the natural order. Due to efficiencies in how Advantage reuses records when they are deleted, which happens to records in the replication queue once a record has been replicated, the natural order often fails to preserve the order in which the records will actually be replicated. In Advantage 11, the order of records in the replication queue now more accurately reflect the order in which the records will be replicated. In addition, two new stored procedures assist in your work with the replication queue. You can call the system stored procedure sp_getreplicationentrydetails to retrieve detailed information about a record in the replication queue, including the text of the update, insert, delete, or merge statement that Advantage has generated to perform the replication on the target database. The sp_testreplicationconnection permits you to test whether an attempt to replicate to a replication subscription will be successful. This stored procedure is useful since it permits you to test your subscription configuration without actually having to initiate the replication. magazine voor software development 7

8 DELPHI Editing the Replication Queue Under normal conditions, replication works fine so long as your servers involved in the replication can maintain their connection, relying on the replication queue for temporary storage for those periods of time when a connection is not possible. However, sometimes anomalies in the data of a record or collection of records prevent the replication from being successful. When this happens, it is necessary to manually delete one or more records from the replication queue in order to allow the replication to proceed normally. Advantage 11 introduces a new system stored procedure that helps in this process. You can now call sp_deletereplicationentry to remove a problem record from the replication queue. Importantly, if this record was involved in a transaction, sp_deletereplicationentry deletes all records associated with that transaction from the replication queue, thereby maintaining the integrity of the data. technique we can write this same stored procedure using the syntax shown in Figure 3. SQL Enhancements Some of my favorite enhancements introduced in Advantage 11 are associated with Advantage SQL, Advantage's implementation of the structured query language. Among these changes are improvements in parameter access in stored procedures and triggers, an option for variable output parameters from SQL stored procedures, new SQL functions, new system variables, a modulo operator, several new SQL literals, and the SQL command line utility. Each of these features are described in the following sections. Improved Parameter Access in SQL Stored Procedures and Triggers In previous versions of Advantage, it was your responsibility to specifically read your input parameters from the temporary, virtual input table. This could be done using a cursor, which you needed to open, fetch, and close, or by querying the input table directly (this table's name is input preceded by two underscore characters). For example, consider the following simple SQL stored procedure: Fig. 3: Input parameters of stored procedures can be accessed using the underscore character This technique can also be used in triggers. Instead of having to use a cursor or a SELECT statement to retrieve the fields of the new table, you can use this same technique. Simply prefix the field names of the new table with a single underscore character to read the values directly. Variable SQL Stored Procedure Output Previously, you had to explicitly declare each of the output parameters of your SQL stored procedure, using the OUTPUT keyword, as seen in the preceding two queries. Furthermore, the output of your SQL stored procedures was necessarily fixed, in terms of the number of fields in the result table. CREATE PROCEDURE GetCustomer ( CustomerID Integer, FirstName Char( 18 ) OUTPUT, LastName Char( 25 ) OUTPUT, Address Char( 50 ) OUTPUT, City Char( 40 ) OUTPUT, State Char( 25 ) OUTPUT) BEGIN CURSOR as SELECT CustomerID FROM input; TRY INSERT INTO output SELECT [First Name], [Last Name], Address, City, State FROM Customer WHERE [Customer ID] FINALLY END; END; In Advantage 11, you can specify that the output is variable, permitting you to omit the output parameters altogether. When you do this, the number of fields produced by your stored procedure execution depends on the number of fields in the last SELECT statement in your stored procedure. This can be seen in Figure 4, which includes a stored procedure that supports variable output parameters. There are a total of four statements associated with the retrieval of the input parameters using this technique, which involves a cursor. And yes, in this case, we could have used a SELECT CustomerID FROM input statement instead (one statement instead of four), but the cursor approach would have been less verbose if we had five or more input parameters. Advantage 11 introduces a new option, which requires no extra lines of code. All you need to do is to reference the name of the input parameter, prefixed by a single underscore character. Using this Fig. 4: Stored procedures that return result sets can return a variable number of columns SQL Command Line Utility Another highly anticipated addition to Advantage's support for SQL is the new SQL command-line utility. The SQL Command Line Utility 8 MAGAZINE

9 DELPHI provides two distinct capabilities. First, it can act as a command line window, similar to the Windows command prompt, from which you can connect to a database and then execute ad hoc queries. In this mode you are presented with a prompt from which you can enter queries, as well as a small set of interactive commands that permit you to connect to databases, list queries you previously executed, flush the cache of previously executed queries, and exit this interactive mode. The second capability that it provides is the ability to create batch operations that execute single SQL statements, or execute SQL scripts that perform multiple operations. One important application for this usage is to create regularly scheduled batch operations, such as initiating backups or performing maintenance operations. returns true if a string ends with a particular substring. Finally, SubstringOf returns true if the specified substring is contained in the specified string. The fourth function is LastRowID. This interesting function returns the unique row id value for the most recently added row in a table. You can use this function to identify the most recently added record to a table, without knowing any of the particulars of the table's structure, such as its primary key, or without having to rely on auto increment fields, which introduce a whole slew of problems on their own. The new SQL engine functions are listed in Table 1. The SQL Command Line Utility is installed with many of the Advantage packages, including the Advantage Data Architect. To run the SQL Command Line in interactive mode, run asqlcmd.exe from a command prompt, or run it from the Window Explorer. Figure 5 shows the SQL Command Line Utility running in interactive mode. Table 1: The New SQL Engine Functions The Modulo Operator Advantage SQL supports a new operator, the modulo operator (%). The modulo is the remainder following a division operation on two numbers. For example, if you divide 5 by 4, the remainder, or modulo, is 1. If you divide 6 by 2, the modulo is 0. Figure 6 shows the use of the modulo operator in a query and the result that it produces. Fig. 5: The SQL Command Line Utility in interactive mode In batch mode, you will execute asqlcmd.exe from a batch file, or by scheduling a task using the Windows Task Scheduler. When run in this mode, you will pass command line parameters to the SQL Command Line Utility to provide it with connection string information, or direct it to read from one or more files where it will find connection information, queries to execute, or SQL scripts. Here is a typical scenario of how the SQL Command Line Utility might be used. Imagine that your database is part of an interactive shopping Web site. During the day users might browse your inventory, and create virtual shopping carts, which are records in your database that identify the items users have selected. While many of your customers will continue to checkout, after which you can delete the contents of the temporary shopping carts, moving those items to an invoice table, other users will lose interest and leave your site without checking out. Using the Windows Task Scheduler, you might run a batch file late each evening. This batch file could invoke the SQL Command Line Utility, instructing it to run a SQL script that looks for shopping carts that never made it to checkout, and which have remained unused for more than four hours or so. Those shopping carts could be considered abandoned, and the SQL script could delete those unnecessary records from their tables. Fig. 6: A query using the modulo operator The modulo operator performs essentially the same task as the MOD() SQL engine function. New System Variables System variables are symbols that are automatically available within your SQL queries and SQL scripts. Unlike the custom variables that you must declare in your SQL scripts, system variables are predefined, and can be used in expressions simply by referencing them. Five new system variables are introduced in Advantage 11, and all of them are connection-level system variables. Connection-level system variables are prefixed by two colons, the letters conn, followed by a period and the variable identifier. An example of one of these new connection-level system variables is ::conn.osuserloginname. New SQL Engine Functions SQL engine functions are subroutines that you can use in your SQL queries, whether they are used in stored procedures, SQL scripts, user defined functions, or triggers. The SQL engine includes four new functions. Three of these provide information about the contents of strings. StartsWith returns True if a specified string begins with a specified substring. Likewise, EndsWith Table 2: The New System Variables magazine voor software development 9

10 DELPHI Table 2 contains a list of the five new system variables, along with a brief description of their associated values. Figure 7 shows a query that includes the five new system variables, as well as the resulting output. This particular query was executed from a virtual machine. user account with specific privileges. For example, sp_packtableonline is only available if executed from a user account having the DB:Admin role or appropriate effective permissions. Table 3: New System Stored Procedures Fig. 7: A query using the new system variables New SQL Literals Four new SQL literals have been introduced for Advantage SQL. Three of these literals can be used to represent Timestamp, Date, and Time values in queries or SQL scripts, and supplement existing literals for those types. For example, in addition to previously available literals for Timestamp values, you can now use a literal with the following format: datetime'yyyy-mm-dd hh:mm:ss' For example, the following query will select all records where the From- Timestamp field is less than 3:00am on January 1, 2012: SELECT * FROM [Accounts] WHERE [FromTimestamp] < datetime' :00:00'; Date and Time literals can now also be represented by time'hh:mm:ss' and date'yyyy-mm-dd', respectively. The fourth new literal type represents binary data. You define a binary literal by preceding a string with the letter x (upper or lower case). The string must contain a hexadecimal value consisting of 0-9 and a-f and A-F. Spaces can be used for readability, but are not required. There is no limit to the number of characters that can appear in the string. The following two queries are equivalent, and both test the Key binary field for a very small binary value: SELECT * FROM Products WHERE Key = x'29 a2 f3 0e ee'; SELECT * FROM Products WHERE Key = X'29a2f30e1676ee'; New System Stored Procedures System stored procedures are built-in routines that you can execute using the SQL EXECUTE PROCEDURE syntax. These stored procedures are typically used to control or interrogate your databases, permitting you to add intelligence to the various operations that you need to perform. In discussing some of the new features introduced in Advantage 11, I have mentioned in passing new system stored procedures that you can use. Table 3 contains a list of all of the new system stored procedures that are introduced in Advantage 11. Many of these stored procedures, like many of those introduced in previous versions of Advantage, require that they be executed from a Other SQL Enhancements In addition to the SQL features mentioned above, there are several other enhancements to Advantage SQL. For one, there is now support for SQL scripts larger than 32 K in size for SQL-based views, triggers, stored procedures, and user defined functions. Advantage now also supports transaction logs larger than 4 GB in size, as well as SQL intermediate files greater than 4GB (in both 32- bit and 64-bit environments). While few users will be affected by these changes, those users who do need such large operations will no doubt welcome the removal of these limitations. Connection Enhancements There are a number of enhancements found in Advantage 11 that are associated with connections. These are discussed in the following sections. Connection Pooling Connections made through the Advantage Client Engine (ACE), which is used by most of the Advantage connectivity options, now support connection pooling. When pooling is enabled, the Advantage Client Engine will not automatically close a connection that has been returned from a client application. Instead, the connection may be kept active for a period of time, making it available if another client requests a connection. Connection pooling is particularly useful in situations where many different connections are required for short durations. This scenario is particularly common in Internet applications. Making and dropping connections to a database tend to be expensive operations, and connection pooling goes a long way to eliminating a significant bottleneck. Connection pooling is enabled in the Advantage Client Engine through the new Pooling connection string parameters. When Pooling is set to True, connection pooling is enabled. The default is False. Additional connection string options that apply to connection pooling include Connection Timeout (how many seconds a client will be permitted to wait for a connection), Connection LifeTime (how long a connection in the pool will remain open), Max Pool Size (the maximum number of connections to maintain in the connection pool), and Unused Timeout (how long an unused connection in the pool will exist before being closed). Other Connection String Options In addition to connection pooling, the Advantage Client Engine introduces a number of additional connection string options. All of these options are supported by the new AdsConnection101 API. 10 MAGAZINE

11 DELPHI These connection string parameters include Decimals, ShowDeleted, and DateFormat. Web Versus Traditional Connections In previous versions of Advantage, all connections were treated similarly, in that they all consumed one of the available licensed connections. For example, a connection from an Internet-based application consumed a connection that could have also been used by a traditional client application (though in many cases, there were additional licensing issues that either limited or prohibited the use of Advantage from an Internet-based application). With Advantage 11, you can specifically designate how many connections are allocated for Advantage Web Platform versus traditional connections. This can be seen in Figure 8, where the Maximum Web Platform Users option permits you to limit how many of the connections are consumed by Web Platform operations. its OData support, permits access to your data from almost any development environment. While this is the case, Advantage's language and environment specific access mechanisms tend to provide direct support that greatly exceeds the "lowest common denominator" approach offered by open specifications such as OData. As a result, it is significant that Advantage has introduced additional connectivity options in Advantage 11. These connectivity options can be divided into two groups: new connectivity options and enhanced connectivity options. These are discussed separately in the following sections. New Connectivity Options In addition to the connectivity options enabled by the Advantage Web Platform's support for OData, Advantage 11 introduces three new developer libraries. Together, these provide access for developers using Ruby, Python, and PHP. There are actually two APIs (application programming interfaces) introduced in Advantage 11 intended for Ruby developers. The first is the Advantage Ruby API, and it provides Ruby developers access to the Advantage Client Engine API. The second is a package for Ruby developers that uses the Advantage Ruby API, and it implements ActiveRecord, an object-relational mapping (ORM) API commonly associated with Ruby on Rails. The new Advantage Python Driver gives Python developers access to Advantage. There is also now an Advantage Django Backend, a package that uses the Advantage Python Driver to enable Advantage access from Django, a Python Web framework that supports RAD (rapid application development) for Web sites. Advantage 11 also introduces a new PHP driver. While Advantage has supported PHP for many years with its Advantage PHP Driver, a new driver, the Advantage PDO (PHP Data Objects), is also available, increasing Advantage's support for PHP development. Fig. 8: The new Web Platform Users option reports the number of available Web platform connections Even if you do not configure a Web connection (leaving Web Platform Users set to zero), Advantage allows one connection by the Advantage Web Platform for connecting the Advantage Web Administrator for configuration purposes. If you are also using the Advantage Web Platform for its OData connectivity, you will definitely want to set Maximum Web Platform Users to a positive integer, to accommodate the additional connections through the RESTful service. One thing to keep in mind when configuring your Maximum Web Platform Users is that clients that connect through the Advantage Web Platform using OData do not share connections from the connection pool in a manner typical of other Internet-based architectures. Instead, these users are treated as normal clients, and each individual connection through OData consumes one user license, and that license remains in use by that connection until that user disconnects, or the connection times out. In other words, you should set Maximum Web Platform Users to the maximum number of OData clients that your system is designed to support. Developer-Related Enhancements While Advantage has always been notable for its many connectivity options, this release of Advantage has seen a significant increase in these options. As discussed earlier, the Advantage Web Platform, and Enhanced Connectivity Options Some of Advantage's existing connectivity options have been updated with the release of Advantage 11. For example, The Advantage RDD (replaceable database driver) for Visual Objects now supports parameters in the AdsServerObject class. In addition, a 64-bit version of the Advantage TDataSet for Lazarus is now available. Lazarus is a free IDE (interactive development environment) for the Free Pascal Compiler. The Advantage.NET Data Provider also received an upgrade. The templates for creating Advantage AEPs (Advantage Extended Procedures) and triggers using C# for.net and Visual Basic for.net have been improved. But most of the enhanced data connectivity features can be found in Advantage's support for Delphi. Advantage 11 provides support for Delphi XE2, both 32-bit and 64-bit Windows compilation. This means that you can now build 64-bit AEPs and triggers for 64-bit Advantage using Delphi. Another improvement introduced recently in Delphi, delayed loading of DLLs, has also now been implemented in the Advantage Delphi Components library. This feature allows the Advantage components to delay loading of the ACE DLLs until they are first needed, as opposed to being loaded statically when your Delphi application is initializing. Delayed static loading of DLLs was introduced in Delphi ADS 11 introduced a number of new connection string options, which magazine voor software development 11

12 DELPHI are represented by the AdsConnection101 interface. These are supported in the TAdsConnection component found in the Advantage Delphi Components package, specifically from the ExtraConnectionString property. The enhanced TAdsConnection component also introduces a new DateFormat property, which permits your application to define the default format for dates on a per connection basis. Advantage has also improved its support for the TDataSet Locate method. This method now makes more efficient use of available indexes, improving the performance of Locate invocations. Additional Improvements The updates, additions, and enhancements that I've mentioned up until now have applied to specific areas of developer concern. But there are additional improvements found in Advantage 11 that I am categorizing as miscellaneous. One notable update that has been found in all of the preceding releases of Advantage is once again present in Advantage 11, and it is related to performance. These improvements are scattered about the product, and will effect your applications depending on which of Advantage's features you use. But one of these enhancements, in particular, will effect nearly all Advantage installations. Advantage 11 has updated expression parsing, and this provides a significant improvement in the speed of opening tables and indexes. And on some platforms, such as Windows Server 2008 R2 and those Advantage installations under significant concurrent load, the performance improvement is quite large. Another area of general improvement is related to error messages. A number of error messages have been updated, providing additional information not previously available. For example, some error messages that previously reported a problem with a field now actually include the name of the field where the problem has occurred, a welcome update that will be appreciated by developers. The detection of corruption in memo fields in Advantage 11 has also improved. And, when a problem is detected, an appropriate exception is raised, alerting you to the issue and helping you to resolve the problem by packing the table, or taking some similar preventative measure. Another error message-related update is revealed by the new option for database restore operations to suppress warnings associated with automatic table creation. Many developers do not consider these to be actionable errors. Warnings that were previously created when an auto-create table was being created can now be suppressed. Advantage 11 has also introduced a number of enhancements related to security and encryption. For example, the AdsBackup utility now supports FIPS (Federal Information Processing Standard) and SSL (secure socket layout) options, as do many of the Advantage client libraries. Note that support for FIPS 140-2, a government standard that defines security standards for encryption support, requires the FIPS Encryption Security Option Add-on, which is a separate license available from Advantage. Finally, there are two new roles that can be applied to users and groups. These are administrative in nature. SERVER:Admin is a role that provides the users to which it is applied the rights to a number of administrative tasks associated with the new root dictionary when connected with the Advantage Web Administrator. Likewise, SERVER:Monitor is a role that provides its users with enhancement information gathering, again when connected to the root dictionary. See "What's New in Advantage 11" in the Advantage help for a complete list of new and enhanced features found in Advantage 11. Summary Similar to previous releases of Advantage, Advantage 11 comes filled with a wealth of new features that continue the tradition of high performance and ease-of-use. Some of these features, such as the support for online maintenance and the Advantage Web Platform, will fundamentally change the way that some users manage and access their data. Others, such as the default fetching of stored procedure parameters and variable output parameters, will dramatically improve developer productivity. These features, when taken together, make Advantage 11 yet another in a string of must have upgrades. Cary Jensen Cary Jensen is the bestselling author of more than 20 books on software development, including Delphi in Depth: ClientDataSets, and winner of the 2002 and 2003 Delphi Informant Reader's Choice Award for Best Training. A frequent speaker at conferences, workshops, and seminars throughout much of the world, he is widely regarded for his self-effacing humor and practical approaches to complex issues. Cary's company Web site is at: JensenDataSystems.com. Cary has a Ph.D. from Rice University in Human Factors Psychology, specializing in human-computer interaction. TIP: Delphi XE3 Starter Essentials Begin september is het Delphi XE3 Starter Essentials ebook uitgekomen van Bob Swart, dat gratis te downloaden is voor alle geregistreerde Delphi XE3 Starter editie gebruikers. SDN leden kunnen dit boek nu ook gratis downloaden van met als password van de ZIP file het woord "Brandevoort" (de naam van de wijk in Helmond waar de auteur woonachtig is). Het betreft de eerste van een verzameling elektronische cursusboeken over Delphi XE3 die de komende maanden zullen verschiijnen, zie voor meer details. Windows Azure SDK 1.8 for.net is uit. De SDK is er voor Visual Studio 2010 en Visual Studio Je kunt hem installeren via de Microsoft Web Platform Installer. Als je in de zoekbox Windows Azure typt, dan vind je de nodige install spullen. 12 MAGAZINE

13

14 CLOUD Marcel Meijer Using 32 bit (Legacy) DLL on Windows Azure Op Windows Azure is (bijna) alles mogelijk. Zo ben je niet beperkt tot alleen applicaties op basis van.net. Maar ook Java, PHP, NodeJS en nog veel meer talen en taaltjes zijn heel goed bruikbaar op het Windows Azure platform, Windows Azure Websites en Windows Azure Virtual Machine. Windows Azure is in de basis een 64 bits Windows 2008 server park. Maar ook dan ben je niet beperkt tot het gebruik van alleen 64 bits programma s of dll s. Dit is erg prettig, want zo hoef je legacy software niet perse te verherbouwen. Of deze legacy nu geschreven is een Microsoft taal of anders maakt dan ook weer niet zoveel uit. Zo hebben wij voor een klant een Windows Azure Proof of Concept uitgevoerd, waarbij we te maken hadden met een 32 bits C++ dll met een soort memory leak. Het resultaat moest wel in de Cloud kunnen draaien en dan ook nog eens netjes schaalbaar zijn. return result; Door het gebruik van de Mutex moet iedere aanroep wachten tot de vorige aanroep klaar is. Dat is vervelend als je een behoorlijke load verwacht. Maar we gaan het op Windows Azure gaan hosten. Daar kunnen we mooi schalen en op deze manier de load aan. Blijft nog wel het 32 bits probleem. Hiervoor zijn 2 oplossingen. 1. We kunnen de DLL hosten in een 32 bits Console applicatie. 2. We kunnen de app pool van IIS in 32 bits mode zetten. Laten we beide eens bekijken. Oplossing 1: Het hosten van de DLL in een 32 bits Console applicatie. We maken een Console applicatie en geven bij de Build opties aan dat het Platform target x86 is. In de main van deze Console applicatie zetten we dan deze code. Hoe hebben we dat aangepakt? Laten we eerst eens kijken naar de C++ dll. Zoals gezegd dit component heeft een soort memory leak. Vooraf nog even de dll was ooit bedoeld en gebruikt in een stand alone desktop applicaties. De dll is niet echt bedoeld om in een gedistribueerde omgeving te werken. Als het component door 2 websites gelijktijdig aangeroepen werd, dan werd het resultaat van beide berekeningen vermengd met elkaar. De dll heeft een stukje shared memory, dat niet per proces uniek is en daardoor vindt de vermenging plaats. In.NET is dit relatief simpel op te lossen. Door gebruik te maken van een Mutex. public int Calculate32Mutex() int result = 0; mutex.waitone(); try result = Calculate32(); // calls the actual 32bit dll function finally mutex.releasemutex(); static void Main(string[] args) Uri address = new Uri("net.pipe://localhost/Calculator- Service"); NetNamedPipeBinding binding = new NetNamedPipeBinding(); binding.receivetimeout = TimeSpan.MaxValue; using (ServiceHost host = new ServiceHost(typeof(CalculatorDll))) var ff = host.addserviceendpoint(typeof(icalcservice), binding, address); ServiceMetadataBehavior metadata = new ServiceMetadataBehavior(); host.description.behaviors.add(metadata); host.description.behaviors.oftype<servicedebugbehavior>().first().includeexceptiondetailinfaults = true; Binding mexbinding = MetadataExchangeBindings.CreateMexNamedPipe- Binding(); Uri mexaddress = 14 MAGAZINE

15 CLOUD new Uri("net.pipe://localhost/CalculatorService/Mex"); host.addserviceendpoint(typeof(imetadataexchange), mexbinding, mexaddress); host.open(); Console.WriteLine("The receiver is ready"); Console.ReadLine(); CalcServiceClient client; client = (CalcServiceClient)Application["CalcServiceClient"]; if (client == null client.state!= System.ServiceModel.CommunicationState.Opened) client = GetCalcServiceClient(); Application["CalcServiceClient"] = client; Met behulp van een named net pipe wordt de service beschikbaar. De methode op deze service bevat dan een call naar de functie in de 32 bits dll. [DllImport("Win32Project1.dll", SetLastError = true)] public static extern Int32 Calculate(Int32 delay); public int RekenDllExample() return Calculate(2000); Om dit geheel te kunnen schalen heb ik er voor gekozen om deze achter een normale WCF service te hangen. Als je hem rechtstreeks in de Website wil gebruiken, dan kan dat natuurlijk ook. Maar dan wordt het schalen erg beperkt. Op de WCF service moet dan een koppeling met deze Named Net pipe gemaakt worden. Het handigst is dat te doen in de Global.asax en wel in de Application_BeginRequest methode. Daar heb ik twee methodes: een om de DllHost te starten en een om de koppeling te maken. string dllhostpath private const int ClientInitTimeOut = 20; // in seconds protected void Application_BeginRequest(object sender, EventArgs e) // Make sure that our dll host is running EnsureDllHostRunning(); // Make sure the client is connected EnsureCalcServiceClientConnected(); private void EnsureDllHostRunning() Process[] p = Process.GetProcessesByName( Path.GetFileNameWithoutExtension(dllHostPath)); if (p.length == 0) Application["CalcServiceClient"] = null; ProcessStartInfo psi = new ProcessStartInfo(Path.Combine( AppDomain.CurrentDomain.BaseDirectory, dllhostpath).tostring()); Process dllhost = Process.Start(psi); private void EnsureCalcServiceClientConnected() De GetCalcServiceClient ziet er zo uit. private CalcServiceClient GetCalcServiceClient() CalcServiceClient serv = null; int retrycount = 0; bool connected = false; while (retrycount < ClientInitTimeOut * 10) try EndpointAddress address = "net.pipe://localhost/calculatorservice"); Binding(); new EndpointAddress( NetNamedPipeBinding binding = new NetNamedPipe- binding.receivetimeout = TimeSpan.MaxValue; serv = new CalcServiceClient(binding, address); serv.open(); if (serv.state == System.ServiceModel.CommunicationState.Opened) connected = true; break; catch (Exception e) retrycount++; System.Threading.Thread.Sleep(100); if (!connected) throw new TimeoutException( "Couldn't connect to the calculator service."); return serv; In je project moet je dan ook een Service reference leggen naar de DllHost Console applicatie. Dit is relatief eenvoudig. Je start de Console applicatie op en kies voor Add Service Reference. Hierna zijn er in de Web.config endpoint gegevens toegevoegd. Dit endpoint is net.pipe://localhost/calculatorservice. Maak je geen zorgen over Localhost, want de DllHost applicatie en de WCF service die uiteindelijk het endpoint aanroept, draaien in dezelfde instance. Daarmee is magazine voor software development 15

16 CLOUD localhost altijd waar, ook in de Cloud. Verder moet je dan een Folder aan je solution toevoegen waarin je de DllHost console app en de 32 bits dll hebt zitten. Vergeet dan niet om de property Copy to Output Directory dan te zetten op Copy Always or Copy if newer. Oplossing 2: We kunnen de app pool van IIS in 32 bits mode zetten Deze oplossing is het minst ingrijpend. Enige lastige (ik ben geen IT pro meneer) hoe kun je dat doen vanuit een script. Ten slotte kan je alles op een Windows Azure instance zolang je het maar kunt automatiseren. Als het gescript is, dan kun je met een Startup task het script laten uitvoeren en is het helemaal geregeld. Het commando om dit te doen is: REM make apppools 32bit %windir%\system32\inetsrv\appcmd set config -section:applicationpools -applicationpooldefaults.enable32bitapponwin64:true Dit commando in een startup.cmd bestand. Plaatsen in het desbetreffende project. In de ServiceDefinition.csdef definiëren we de startup task en we zijn klaar. getal groter dan 1 dan is het resultaat gemixt met een andere aanroep. Dit kun je testen door twee browser naast elkaar open te zetten en bij gelijktijdig (er is nog tijd) drukken op de knop zal er een 0 en een 1 verschijnen. Tenzij er meerdere bloglezers op hetzelfde moment aan het testen zijn ;-) Als je dat doet met de Mutex knoppen, dan zal voor beide het resultaat 0 zijn. Bovenstaand verhaal gaat niet alleen op voor Windows Azure, maar feitelijk voor elke 64 bits server omgeving on premise of bij een andere hosting partij. Referenties: 32bit-dll-in-the-windows-azure.aspx 32-bit-and-64-bit-asp-net-versions-at-the-same-time-on-differentworker-processes.aspx Marcel Meijer <Startup> <Task commandline="startup.cmd" executioncontext="elevated" tasktype="simple" /> </Startup> Verder moet je dan een Folder aan je solution toevoegen waarin de 32 bits dll staat. Vergeet dan niet om de property Copy to Output Directory dan te zetten op Copy Always or Copy if newer. Nadeel van de oplossingen: Als er dynamische configuratie nodig is, dan is de Console applicatie het minst handig. Zoals gezegd het is een Console applicatie met een app.config. Default kan deze niet zomaar uit de Service configuration settings lezen. Bij de andere oplossing kan de Webservice er gewoon wel bij. Testen Om de twee oplossingen te testen heb ik een frontend gemaakt. Daarop staan 4 knoppen. De eerste twee knoppen roepen een WCF service aan die gebruik maakt van de Dll Host console applicatie. De laatste twee knoppen roepen een WCF service aan die gebruik maakt van AppPool in 32 bits mode. Er staan labels result, waar een 0 of een 1 of hoger in komt. Als het getal 0 is dan werd de rekenmodule aangeroepen en is er niets gemixt met een andere aanroep. Is het Al meer dan 15 jaar begeeft deze 42 jarige zich in de wereld van de ICT. Op dit moment houdt hij zich voornamelijk bezig met Azure, Cloud, C#, Software Ontwikkeling, Architectuur in het algemeen en Windows Phone 7. Ook is hij bezig met Biztalk en Sharepoint. Hij werkt als Senior Architect bij VX Company. In zijn vrije tijd is hij.net track owner, eindredacteur en bestuurslid van de SDN. Binnen de SDN is hij verantwoordelijk voor het regelen van sprekers voor de SDN Events (SDE), het regelen/redigeren van artikelen voor het SDN Magazine, mede verantwoordelijk voor de eindredactie van de hardcopy en digitale magazines en de inhoud van de SDN Conferences. Op 1 oktober 2010 werd hij MVP. TIP: Windows Azure Store Echt nieuw op de portal zijn Add-on en Store. De Store is interessant voor ISV of leveranciers van handige tools. Op dit moment is de Store alleen beschikbaar in de US. Het idee van de store is, dat je daar tools/apps kunt kopen, die je in je eigen subscription installeert en gebruikt. De aangeschafte zaken komen dan te staan bij Add-on. Je ben hierbij dus niet afhankelijk van de derde partij, zoals dat wel het geval is bij de Windows Azure Market. De hele verkoop afhandelijk zal dan door Microsoft geregeld worden. Dit biedt wel weer hele mooie kansen voor diverse leveranciers en ontwikkelaars om ook hier handige tooltjes en functionaliteiten aan te bieden bij de bron. De hele afhandeling op de Windows Azure portal is een hele API, waar je op kunt aansluiten. Het principe werkt zoals je ook een Windows Azure website uitkiest of een Virtual Machine. Je kunt kiezen uit een lijst met verschillende tools. Je kunt dan voor een betaalplan kiezen en uiteindelijk betalen. Daarna zal het tool geserviced worden. 16 MAGAZINE

17 GENERAL Sander Hoogendoorn The Waterfall Dentist Anti-Pattern Believe it or not, but I have a confession to make. I m currently in a pure waterfall project. It s my first in many, many years and despite the fact that I love the technology, I don t like our way or working it a bit. During the first phase of this project we are trying to deliver twenty functional work items. All of these twenty work items are analyzed first, then reviewed. After all review comments have been processed, all work items are designed. And again reviewed. After all review comments have been processed again, the developers start constructing them. And once they finish the testers have a go at the software produced. Yes, I know this is efficient nor effective. And yes, the testers find lots of defects that could have easily been prevented using an iterative approach where we jointly work on a single work item, and only after it s finished move on to the next. But we just don t. And the delivery date is nearing. As a result, at the delivery date we will likely deliver twenty half-baked work items, instead of delivering maybe ten or twelve complete work items. It s a choice. End of discussion You could say that the discussions about the chosen approach I have with the project manager are vivid. At the very least. No, we re not going to do agile, he clearly states. I don t care if we call it agile or not, I respond, But the way we are working now is simply inefficient. Personally I really don t care if projects are tagged as agile, Scrum, Smart, RUP or even waterfall. I just dislike inefficient processes. This approach is easy to explain to the client, the project manager continues, So we are going to stick to it. End of discussion. And then coming out of my girlfriends apartment building this morning I saw this car in the parking lot. It occurred to me immediately. We are waterfall dentists. Imaging you re a young dentist, fresh out of dentistry school, and you are starting a new practice. Why on earth you would name it The Waterfall I don t know, but twenty new patients are hurdling up to be treated. Being the waterfall dentist you use an appropriate approach. During the first week you examine all twenty patients. During the second week you commence to the first part of their treatment: drilling holes. Then in the third week, all twenty patients come back and have the holes filled. In the fourth week all patients return again for a last check-up. Just testing if all holes are filled properly. Finally, in the fifth week you get to send twenty bills to twenty happy patients. Project done. Next project. Good bookkeeping and new patients Doesn t that sound good? This approach resembles my current project in great detail. So why is it, although this model is easy to explain to patients, no dentist in the world would even slightly consider to apply it? Well, first of all, your patients don t like to walk around with unfilled holes in their mouths for a least a week. Second, your patients will have to come in to your office four times, and you will have to do pretty good bookkeeping to remember each patient s details when they return. If you would have filled a patients tooth right after you ve drilled a hole, this need for documentation and good memory wouldn t have been necessary. Moreover, what if a new patient comes in during the second or third week with a terrible toothache? You would have to decline him saying: Sorry, I don t take additional work now, advising the new patient to come back after all current patients are serviced. It s the vicious change request. And what if you become ill during? Your whole schedule will certainly slide. As a result, none of the patients will have been fully serviced at the end of the scheduled period, leaving them in uncertainty about when you will deliver. Basically, you will lose your patients as fast as they hurdled up. And you won t be able to send any bills. I could probably spent another two posts in explaining why the waterfall model isn t applied by dentist anywhere in the world. But I won t. We just might Dear project managers, despite the fact that the waterfall model is so easy to explain to clients, that doesn t make it any more effective or efficient. Armed with The Waterfall Dentist Anti-Pattern, you can explain iterative, or agile, approaches to your clients just as easy. In fact you can even service your clients better, as they may send in new urgent patients during the project, and you will be able to service those patients early. And even though you may turn ill during the project, servicing the patients one by one, rather than in a returning batch, you can actually fully service a large number of them within the designated timebox, instead of having serviced all of them half when the deadline approaches. I would much rather be able to send bills to fifteen out of twenty patients, then not being able to bill at all. So where s my current project standing? Well, just like the waterfall dentist might actually serve twenty patients during the current phase, we might actually deliver all twenty work items. But I wouldn t bet my gold teeth on it. magazine voor software development 17

18

19 DESKTOP Lammert Vinke Onderhoudbare GUI tests met Coded UI Continuous Delivery wordt de laatste jaren steeds populairder. Bij Continuous Delivery test een team bij elke oplevering of de applicatie nog functioneert conform de requirements. Daarom voert een team de testen vaker uit gedurende de lifecycle van applicatie. Daarmee loont het steeds meer om testen te automatiseren. Met end-to-end testen via de GUI kan je (deels) een invulling geven aan deze testautomatisering. Een kenmerk van end-to-end testen is dat de te testen applicatie volledig is geϊntegreerd met de andere systemen. Er zijn verschillende tools die je hierbij kunnen helpen. In dit artikel zal ik in gaan hoe dit mogelijk is met behulp van Visual Studio in combinatie met Coded UI. Een vaak terugkerende vraag daarbij is, hoe blijft een geautomatiseerde test onderhoudbaar? In dit artikel laat ik daarnaast ook zien hoe je een onderhoudbare testset realiseert. Test Automation Pyramid De literatuur beschrijft al veel over verschillende soorten geautomatiseerde testen. Mike Cohn schrijft onder andere over de Test Automation Pyramid. Deze pyramide beschrijft dat er naast geautomatiseerde end-to-end testen via GUI er ook nog andere mogelijkheden zijn om de applicatie geautomatiseerd te testen. Andere mogelijkheden zijn Unit Testen of Integratie Testen. Elk van de hiervoor genoemde type geautomatiseerde testen heeft bepaalde kenmerken en heeft een specifiek (test)doel. De Test Automation Pyramid geeft aan dat je meer Return on Investement behaald wanneer er (a) meer Unit Testen zijn dan Integratie testen, en er (b) meer Integratie Testen zijn dan end-toend GUI testen. Kortom realiseer zoveel mogelijk (en als nodig) geautomatiseerde testen op een zo laag mogelijk integratie niveau. Daarnaast geeft de pyramide aan dat handmatig uitgevoerde testen nodig blijven. Denk bijvoorbeeld aan Usabilty en Exploratory testen. Dit artikel is dan ook geen pleidooi om alle end-to-end testen via te GUI te testen of te automatiseren. Maar om end-to-end testen via de UI alleen in te zetten voor het doel waar deze het meest waardevol zijn. En probeer deze testen eerst op een lager integratie niveau te testen, bijvoorbeeld op het niveau van een service of klasse. Voorbeeld web applicatie Alhoewel end to end testen wellicht minder voorkomen dan Unit Testen en Integration Testen, leveren een set met End-to-End testen wel toegevoegde waarde in sommige scenario s. Dit omdat deze testen juist andere aspecten van de applicatie testen. Aan de hand van een voorbeeld applicatie illustreer ik in in dit artikel hoe je een onderhoudbare test set realiseert. De voorbeeld applicatie die ik gebruik in dit artikel is een website van een loterij. Met deze website kunnen (a) geϊnteresseerden een lot kopen, (b) kopers controleren wat het lotnummer was en (c) kopers controleren of de hoofdprijs op het door hun aangekochte lot is gevallen. De applicatie is al ontwikkeld; en in dit artikel zullen we een onderhoudbare verzameling test scripts op basis van Coded UI realiseren. Fig. 2: Demo applicatie Fig. 1: Test Automation Pyramid Manual Tests in MTM Op basis van de requirements van de Loterij applicatie maakt een tester als eerst een aantal Test Scripts. Elk Test Script bestaat uit een aantal test stappen. Bijvoorbeeld 1. open de applicatie, 2. navigeer naar de pagina om een lot te kopen, enz. De tester legt de Test Scripts vast met behulp van Microsoft Test Manager, in dit artikel verder afgekort als MTM. Microsoft positioneert MTM als de tool die de functionele tester gebruikt bij het maken van Test Scripts. Deze Test Script voert de functionele tester vervolgens handmatig uit binnen MTM. Voor traceability koppelt de tester elk Test Script in MTM aan een requirement. Op deze wijze geeft TFS in rapportages inzicht in welk deel van de requirements al is getest, ook wel de functional test coverage genoemd. Ook kan een teamlid of stakeholder zo herleiden in hoeverre requirements al door een tester zijn getest. Bij onderhoud magazine voor software development 19

20 DESKTOP levert dit ook het voordeel dat bij wijzigende requirements gelijk inzichtelijk is welke Test Scripts ook aangepast moeten worden. Fig. 3: Testen in MTM In een Test Script gebruikt men in MTM vaak Shared Steps. Wanneer een aantal opeenvolgende stappen herhaaldelijk voorkomen in verschillende Test Scripts, kan je daar een Shared Step van maken Een voorbeeld van een shared step is: het openen van de browser en het navigeren naar de webapplicatie op een specifieke url (Zie ook de rood gearceerde stappen in Figuur 3 voor de Shared Step Open Startpage die de browser opent en navigeert naar de startpagina). Door Shared Steps op een slimme wijze op te zetten, kan je een beter te onderhouden verzameling Test Scripts opzetten. Ook kan het gebruik van Shared Steps bijdragen aan een hogere productiviteit. Je kan een Test Script namelijk veel sneller realiseren door verschillende Shared Steps te gebruiken. Vervolgens kan de tester deze Test Scripts met behulp van MTM uitvoeren. MTM opent daarvoor de Test Runner met daarin het gemaakte Test Script in uitvoer modus (Zie Figuur 4). Per stap in het Test Script voert de tester de genoemde acties in het Test Script uit. Wanneer een stap geslaagd is, markeert de tester de stap met geslaagd en anders met gefaald. Op deze wijze worden de resultaten van de uitvoer van Test Scripts vast gelegd in TFS. Manual Test naar Coded UI Test Op basis van de Action Recording die is gekoppeld aan een Test Script genereert de developer een Coded UI Test uit in Visual Studio. Daarbij genereert Visual Studio onder andere een UIMap. Een UIMap is een afspiegeling van de te testen applicatie in code. Wanneer er aanpassingen nodig zijn in de UIMap, bewerkt de developer de UIMap met een daarvoor in Visual Studio beschikbare editor (Zie Figuur 4 voor een weergave van deze editor) of voert de developer aanpassingen uit in de gegenereerde code-behind file van de UIMap. Voor elk van de stappen in het Test Script dat de tester maakte in MTM genereert Visual Studio een zogenaamde UI Action. Daarom is het van belang om bij de test uitvoer in MTM de uitgevoerde stappen in de Test Script juist af te vinken. Voor de verschillende controls in de front-end bevinden zich in de UIMap zogenaamde UI Controls. Een UI Control beschrijft in code (als een property) hoe het test framework een control in de GUI vindt. De verschillende UI Actions gebruiken vervolgens de elementen in de UI Control Map. Naast de UIMap genereert Visual Studio een Coded UI Test. De Coded UI Test roept de verschillende UI Actions in de juiste volgorde aan. Fig. 5: Coded UI Test Builder Fysiek gezien genereert Visual Studio de volgende bestanden uit (Zie ook Figuur 5): De Coded UI Test, deze roept de verschillende UI Actions aan. (Zie KopenVanEenLot.cs, WatIsMijnLotNummer.cs en HebIk Gewonnen.cs). Dit bestand mag de developer aanpassen, want Visual Studio overschrijft dit bestand niet bij het opnieuw genereren van een Coded UI test. Deze klasse is vergelijkbaar met een normale Unit Test, echter een Coded UI Test roept de UI Actions in de UIMap aan. Doordat het een soort Unit Test is, kan de developer ook de Data Driven Tests gebruiken; De UIMap.uitest bevat een XML file met daarin de structuur van de UIMap. Dit bestand verwijst naar de verschillende uitgegenereerde elementen in de UIMap.Designer.cs; Fig. 4: Test Runner Terwijl de tester de Test Script uitvoert neemt MTM een zogenaamde Action Recording op. Een Action Recording is een opname van de acties die tester uitvoerde bij het runnen van een Test Script. Deze Action Recording gebruikt de tester om het Test Script in volgende iteraties automatisch af te spelen, dit noemt men ook wel Fast Forwarding. Bij het gebruik van Fast Forwarding controleert de tester zelf de resultaten nog wel handmatig. De Action Recording kan later door de developer worden gebruikt om een Coded UI test te generereren. Een Coded UI Test voert de verificatie stappen ook automatisch uit. Fig. 6: Gegenereerde Coded UI Test De UIMap.Designer.cs is een C#/VB bestand. Dit bestand bevat al de UI Actions (Uitgegenereerde methoden) en de UI Control Map (Properties). Deze file werkt nauw samen met het Coded UI Test Framework. Deze file mag niet worden aangepast, want dit bestand 20 MAGAZINE

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

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

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

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

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

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

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

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

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

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

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

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

[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

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

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

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

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

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

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

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

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

AVG / GDPR -Algemene verordening gegevensbescherming -General data Protection Regulation

AVG / GDPR -Algemene verordening gegevensbescherming -General data Protection Regulation AVG / GDPR -Algemene verordening gegevensbescherming -General data Protection Regulation DPS POWER B.V. 2018 Gegevensbeschermingsmelding Wij, DPS POWER B.V., beschouwen de bescherming van uw persoonlijke

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

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

CBSOData Documentation

CBSOData Documentation CBSOData Documentation Release 1.0 Jonathan de Bruin Dec 02, 2018 Contents 1 Statistics Netherlands opendata API client for Python 3 1.1 Installation................................................ 3

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

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

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

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

FAAC DRIVER. Driver install procedure for FAAC boards. Installatieprocedure voor driver voor FAAC-kaarten.

FAAC DRIVER. Driver install procedure for FAAC boards. Installatieprocedure voor driver voor FAAC-kaarten. FAAC DRIVER Driver install procedure for FAAC boards Installatieprocedure voor driver voor FAAC-kaarten www.record-toegangstechniek.nl 1 When a FAAC board (E124 or E145) is connected to the USB port, it

Nadere informatie

LONDEN MET 21 GEVARIEERDE STADSWANDELINGEN 480 PAGINAS WAARDEVOLE INFORMATIE RUIM 300 FOTOS KAARTEN EN PLATTEGRONDEN

LONDEN MET 21 GEVARIEERDE STADSWANDELINGEN 480 PAGINAS WAARDEVOLE INFORMATIE RUIM 300 FOTOS KAARTEN EN PLATTEGRONDEN LONDEN MET 21 GEVARIEERDE STADSWANDELINGEN 480 PAGINAS WAARDEVOLE INFORMATIE RUIM 300 FOTOS KAARTEN EN PLATTEGRONDEN LM2GS4PWIR3FKEP-58-WWET11-PDF File Size 6,444 KB 117 Pages 27 Aug, 2016 TABLE OF CONTENT

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

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

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

Basic operations Implementation options

Basic operations Implementation options Priority Queues Heaps Heapsort Student questions EditorTrees WA 6 File Compression Graphs Hashing Anything else Written Assignments 7 and 8 have been updated for this term. Each of them is smaller than

Nadere informatie

Chapter 4 Understanding Families. In this chapter, you will learn

Chapter 4 Understanding Families. In this chapter, you will learn Chapter 4 Understanding Families In this chapter, you will learn Topic 4-1 What Is a Family? In this topic, you will learn about the factors that make the family such an important unit, as well as Roles

Nadere informatie

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

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

Nadere informatie

NETWORK CHARTER. #ResourceEfficiency

NETWORK CHARTER. #ResourceEfficiency NETWORK CHARTER 1 WHAT IS THE EREK NETWORK? EREK stands for the European Resource Efficiency Knowledge Centre, a vibrant platform to enable and reinforce businesses and especially small and medium sized

Nadere informatie

Virtual Enterprise Centralized Desktop

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

Nadere informatie

Find Neighbor Polygons in a Layer

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

Nadere informatie

Usage guidelines. About Google Book Search

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

Nadere informatie

Over dit boek. Richtlijnen voor gebruik

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

Nadere informatie

Deel 1: schriftelijk deel

Deel 1: schriftelijk deel Examen Computerarchitectuur en systeemsoftware Donderdag 15 januari 2009, namiddag Deel 1: schriftelijk deel Algemene bemerkingen: Het examen bestaat uit 2 delen. Dit zijn de vragen voor het eerste deel.

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

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

Procedure Reset tv-toestellen:

Procedure Reset tv-toestellen: Procedure Reset tv-toestellen: Volgende procedure is te volgen wanneer er een tv-toestel, op een van de kamers niet meer werkt. TV Re-installation Factory Default Her-installeren van de TV Fabrieksinstellingen

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

! GeoNetwork INSPIRE Atom!

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

Nadere informatie

/ /

/   / 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

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

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

Nadere informatie

SAP Exchange Infrastructure. SAP Partner Connectivity Kit Overview

SAP Exchange Infrastructure. SAP Partner Connectivity Kit Overview SAP Exchange Infrastructure SAP Partner Connectivity Kit Overview SAP Partner Connectivity Kit Overview Enablement of smaller companies / subsidiaries to exchange XML documents with their business partner

Nadere informatie

Introductie tot het ON0RCL Echolink-systeem

Introductie tot het ON0RCL Echolink-systeem Introductie tot het ON0RCL Echolink-systeem Bijgedragen door Douglas Ros Radio Club Leuven De bedoeling van Echolink is verre spraak-verbindingen tussen radioamateurs mogelijk te maken, gebruik makend

Nadere informatie

Wi-Fi Range Extender Add-on Device Quickstart Guide

Wi-Fi Range Extender Add-on Device Quickstart Guide Wi-Fi Range Extender Add-on Device Quickstart Guide Model No. WRP1220 What s inside: 1x Wi-Fi Range Extender 1x Power Adapter All Home8 add-on devices have to work with Home8 systems. Nederlands Stap 1:

Nadere informatie

PRIVACYVERKLARING KLANT- EN LEVERANCIERSADMINISTRATIE

PRIVACYVERKLARING KLANT- EN LEVERANCIERSADMINISTRATIE For the privacy statement in English, please scroll down to page 4. PRIVACYVERKLARING KLANT- EN LEVERANCIERSADMINISTRATIE Verzamelen en gebruiken van persoonsgegevens van klanten, leveranciers en andere

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

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

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

Topic 10-5 Meeting Children s Intellectual Needs

Topic 10-5 Meeting Children s Intellectual Needs Topic 10-5 Meeting Children s Intellectual Needs In this topic, you will learn how to help children develop the ability to reason and use complex thought, as well as The role of play in intellectual development

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

ZorgMail Address Book SE Documentation

ZorgMail Address Book SE Documentation ZorgMail Address Book SE Documentation File ID: addressbook_zorgmail_a15_se 2014 ENOVATION B.V. Alle rechten voorbehouden. Niets uit deze uitgave mag worden openbaar gemaakt of verveelvoudigd, opgeslagen

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

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 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

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

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

AlarmShield Interactive Security System Quickstart Guide. Model No. OPG2204

AlarmShield Interactive Security System Quickstart Guide. Model No. OPG2204 AlarmShield Interactive Security System Quickstart Guide Model No. OPG2204 Nederlands Stap 1: Installatie Zorg dat u toegang heeft tot uw router (max. 3 meter afstand). Verbind de Security Shuttle met

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

Yes/No (if not you pay an additional EUR 75 fee to be a member in 2020

Yes/No (if not you pay an additional EUR 75 fee to be a member in 2020 Meedoen aan dit evenement? Meld je eenvoudig aan Ben je lid? Ja/Nee Do you want to participate? Please apply Are you a LRCH member? Yes/No (if not you pay an additional EUR 75 fee to be a member in 2020

Nadere informatie

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

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

Nadere informatie

!!!! 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

(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

Nederlands. Stap 1: Installatie. Stap 2: Uw Smartphone instellen

Nederlands. Stap 1: Installatie. Stap 2: Uw Smartphone instellen Nederlands Stap 1: Installatie Zorg dat u toegang heeft tot uw router (max. 3 meter afstand). Verbind de Centrale module met uw (DHCP-) router met behulp van de ethernet-netwerkkabel. Sluit de Centrale

Nadere informatie

Automatic Medication Dispenser Add-on Device Quickstart Guide

Automatic Medication Dispenser Add-on Device Quickstart Guide Automatic Medication Dispenser Add-on Device Quickstart Guide Model No. WMD1201 What s inside: 1x Automatic Medication Dispenser 6x Dosage Templates 1x Key 4x AA Battery All Home8 add-on devices have to

Nadere informatie

Travel Survey Questionnaires

Travel Survey Questionnaires Travel Survey Questionnaires Prot of Rotterdam and TU Delft, 16 June, 2009 Introduction To improve the accessibility to the Rotterdam Port and the efficiency of the public transport systems at the Rotterdam

Nadere informatie

Fall Detector Add-on Device Quickstart Guide

Fall Detector Add-on Device Quickstart Guide Fall Detector Add-on Device Quickstart Guide Model No. FDS1300 What s inside: 1x Fall Detector 1x Lanyard 1x Power Cable All Home8 add-on devices have to work with Home8 systems. Nederlands Stap 1: Apparaat

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

Mobile Devices, Applications and Data

Mobile Devices, Applications and Data Mobile Devices, Applications and Data 1 Jits Langedijk Senior Consultant Jits.langedijk@pqr.nl Peter Sterk Solution Architect peter.sterk@pqr.nl Onderwerpen - Rol van Mobile IT in Tomorrow s Workspace

Nadere informatie

Introduction to Compgenomics Part II. Lee Katz January 13, 2010

Introduction to Compgenomics Part II. Lee Katz January 13, 2010 Introduction to Compgenomics Part II Lee Katz January 13, 2010 All students and groups should be on the Wiki Wiki needs to be closed and secured by Friday How are we doing 2 Introduction to using the server

Nadere informatie

My Benefits My Choice applicatie. Registratie & inlogprocedure

My Benefits My Choice applicatie. Registratie & inlogprocedure My Benefits My Choice applicatie Registratie & inlogprocedure Welkom bij de My Benefits My Choice applicatie Gezien de applicatie gebruik maakt van uw persoonlijke gegevens en salarisinformatie wordt de

Nadere informatie

Medication Tracking Sensor Add-on Device Quickstart Guide

Medication Tracking Sensor Add-on Device Quickstart Guide Medication Tracking Sensor Add-on Device Quickstart Guide Model No. ADS1302 What s inside: 1x Medication Tracking Sensor All Home8 add-on devices have to work with Home8 systems. Nederlands Stap 1: Apparaat

Nadere informatie

CBSOData Documentation

CBSOData Documentation CBSOData Documentation Release 0.1 Jonathan de Bruin Mar 18, 2017 Contents 1 Statistics Netherlands opendata API client for Python 3 1.1 Installation................................................ 3

Nadere informatie

Contents. An Augmented Backus-Naur Format, (ABNF), Parser Generator for Erlang. Anders Nygren ABNF Using abnfc Implementation Todo

Contents. An Augmented Backus-Naur Format, (ABNF), Parser Generator for Erlang. Anders Nygren ABNF Using abnfc Implementation Todo An Augmented Backus-Naur Format, (ABNF), Parser Generator for Erlang Anders Nygren anygren@txm.com.mx ABNF Using abnfc Implementation Todo Contents 1 Why abnfc? ABNF used for specifying many important

Nadere informatie

MobiDM App Handleiding voor Windows Mobile Standard en Pro

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

Nadere informatie

Issues in PET Drug Manufacturing Steve Zigler PETNET Solutions April 14, 2010

Issues in PET Drug Manufacturing Steve Zigler PETNET Solutions April 14, 2010 Issues in PET Drug Manufacturing Steve Zigler PETNET Solutions April 14, 2010 Topics ANDA process for FDG User fees Contract manufacturing PETNET's perspective Colleagues Michael Nazerias Ken Breslow Ed

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

NMOZTMKUDLVDKECVLKBVESBKHWIDKPDF-WWUS Page File Size 9,952 KB 29 May, 2016

NMOZTMKUDLVDKECVLKBVESBKHWIDKPDF-WWUS Page File Size 9,952 KB 29 May, 2016 NAVIJVEN MINILAMPJES OM ZELF TE MAKEN KERSTFIGUREN UIT DE LAPPENMAND VOOR DE KINDERSSALOON EN COWBOYS VAN LOLLYSTOKJES KAMERBREED BOEKENREK VOOR EEN SMAL BUDGETGEBAKKEN KOEKFIGUURTJES HANGEN WE IN DE KERSTBOOM

Nadere informatie

ALGORITMIEK: answers exercise class 7

ALGORITMIEK: answers exercise class 7 Problem 1. See slides 2 4 of lecture 8. Problem 2. See slides 4 6 of lecture 8. ALGORITMIEK: answers exercise class 7 Problem 5. a. Als we twee negatieve (< 0) getallen bij elkaar optellen is het antwoord

Nadere informatie

Plotten. technisch tekenwerk AUTOCAD 2000

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

Nadere informatie

Quick start guide. Powerbank MI Mah. Follow Fast All rights reserved. Page 1

Quick start guide. Powerbank MI Mah. Follow Fast All rights reserved. Page 1 Quick start guide Powerbank MI 16.000 Mah Follow Fast 2016 - All rights reserved. Page 1 ENGLISH The Mi 16000 Power Bank is a very good backup option for those on the move. It can keep you going for days

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

Nederlands. Stap 1: Installatie. Stap 2: Uw Smartphone instellen

Nederlands. Stap 1: Installatie. Stap 2: Uw Smartphone instellen Nederlands Stap 1: Installatie Zorg dat u toegang heeft tot uw router (max. 3 meter afstand). Verbind de Centrale module met uw (DHCP-) router met behulp van de ethernet-netwerkkabel. Sluit de Centrale

Nadere informatie

Today s class. Digital Logic. Informationsteknologi. Friday, October 19, 2007 Computer Architecture I - Class 8 1

Today s class. Digital Logic. Informationsteknologi. Friday, October 19, 2007 Computer Architecture I - Class 8 1 Today s class Digital Logic Friday, October 19, 2007 Computer Architecture I - Class 8 1 Digital circuits Two logical values Binary 0 (signal between 0 and 1 volt) Binary 1 (signal between 2 and 5 volts)

Nadere informatie

Installatie van Windows 10 op laptops. Windows 10 installation on laptops

Installatie van Windows 10 op laptops. Windows 10 installation on laptops Installatie van Windows 10 op laptops In mei vindt de migratie naar Windows 10 plaats op de laptops. Per dag worden ongeveer 25 laptops gemigreerd. Elke laptop heeft een ISSC-sticker met een laptop-nummer.

Nadere informatie

NCTS - INFORMATIE INZAKE NIEUWIGHEDEN VOOR 2010

NCTS - INFORMATIE INZAKE NIEUWIGHEDEN VOOR 2010 NCTS - INFORMATIE INZAKE NIEUWIGHEDEN VOOR 2010 Op basis van het nieuwe artikel 365, lid 4 (NCTS) en het nieuwe artikel 455bis, lid 4 (NCTS-TIR) van het Communautair Toepassingswetboek inzake douane 1

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

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

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

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