MAGAZINE. IN DIT NUMMER O.A.: Van Continuous Problems naar Continuous Delivery < Talking about Frames < Microsoft Project Siena < Roslyn <

Maat: px
Weergave met pagina beginnen:

Download "MAGAZINE. www.sdn.nl IN DIT NUMMER O.A.: Van Continuous Problems naar Continuous Delivery < Talking about Frames < Microsoft Project Siena < Roslyn <"

Transcriptie

1 MAGAZINE SOFTWARE DEVELOPMENT NETWORK ISSN: IN DIT NUMMER O.A.: Van Continuous Problems naar Continuous Delivery < Talking about Frames < Microsoft Project Siena < Roslyn < Nummer 122 september 2014 SDN Magazine verschijnt elk kwartaal en is een uitgave van Software Development Network 122

2

3 Colofon Uitgave: Software Development Network Tweeëntwintigste jaargang No. 122 september 2014 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, Arjen Bos, 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. Beste SDN Magazine lezer, voorwoord We zitten weer allemaal in het ritme. De vakanties zijn voorbij, de wegen worden weer drukker en de agenda's lopen weer vol met afspraken. Oftewel Nederland komt weer op gang. Ik hoop dat iedereen weer lekker uitgerust is en er met volle energie tegenaan kan. De dagen worden korter en de avonden weer langer. Dat zijn wel de momenten waarop je lekker op de bank met je Surface Pro 3 op schoot, een artikeltje kunt schrijven of een nieuwe technologie kunt uitproberen. De SDN is altijd op zoek naar artikelen. Wie hebben er allemaal een nieuwe XBox One aangeschaft? Na bijna een jaar is deze nu ook officieel verkrijgbaar op de Nederlandse markt. Deze nieuwe spelconsole van Microsoft is de next step in Games beleving, maar is eigenlijk meerdere computers in een. Ook is de Surface Pro 3 op markt. Hij is iets groter dan de vorige exemplaren, in de praktijk werkt dit net even iets prettiger. Het toetsenbord is vooral op het gebied van de mousepad aangepast. Het toetsenbord zit ook stabieler. En zo zijn er nogal wat hardware dingetjes gekomen, in de komende magazine zal we proberen e.e.a. te publiceren. Op software gebied komt er o.a. een nieuwe versie van Delphi aan. Het einde van de vakanties is lekker gevuld met nieuwe hobby dingetjes. Dit is de eerste keer dat het magazine alleen in een digitaal formaat verschijnt. Desalniettemin staat er wel weer hele interessante artikelen in. Zoals een artikel over Van Continuous Problems naar Continuous Delivery, een verhaal over Frames in Delphi, Microsoft Project Siena eenvoudig bouwen van Windows 8 app, een gedicht over Software Development en een stuk over Roslyn. Natuurlijk hebben onze Columnisten Sander en Michel weer mooie stukken over de impact van Agile op productivity en zin/onzin van ASynchroon. Kortom een lekker nummer met mooie artikelen. Veel leesplezier en mail ons jullie vragen c.q. opmerkingen. Wat ik in elk geval graag van jullie terug hoor, op welk device je ons magazine leest. Groeten, Marcel Meijer eindredacteur Magazine en Voorzitter SDN Adverteerders Microsoft 2 Achmea 24 Adverteren? Informatie over adverteren en de advertentietarieven kunt u vinden op onder de rubriek Magazine. magazine voor software development 3

4 Agenda 2014 Inhoud oktober 2014 Teched (Barcelona) 28 november Experts Live 1 december 2014 SDN magazine december 2014 SDC/SDE+ 03 Voorwoord Marcel Meijer 04 Inhoudsopgave 04 Agenda 05 Van Continuous Problems naar Continuous Delivery Wouter de Kort 09 So... does Agile improve Productivity? Sander Hoogendoorn 11 Talking about Frames Cary Jensen 14 Microsoft Project Siena Marcel Meijer 16 Reflections on Software Development in Lambic Heptameter Cary Jensen 17 Roslyn Sander Gerz 20 (A)Synchroon Michiel van Otegem 21 Vooruitblik op ASP.NET vnext Alex Thissen

5 .NET Wouter de Kort Van Continuous Problems naar Continuous Delivery Software wordt steeds belangrijker in onze wereld. Natuurlijk zouden we een zorgverzekeraar of een bank geen software bedrijf noemen maar stel dat de zorgverzekeraar zijn nieuwe premie bekent wil maken of dat de bank zijn rente percentage wil wijzigen? In de praktijk leiden dit soort wijzigingen tot wijzigingen in software. Daarom is Continuous Delivery een hot topic. Bedrijven zoals Amazon, Facebook en Twitter releasen nieuwe updates voor hun software aan de lopende band. Andere bedrijven, waaronder Microsoft releasen nog niet continu maar hebben hier toch grote stappen in gemaakt. Als je op kijkt zie je dat Visual Studio Online, de in de Cloud gehoste versie van Team Foundation Server, iedere drie weken nieuwe updates krijgt. Onze baan als software ontwikkelaars wordt in ieder geval steeds belangrijker! Om mee te kunnen in de wensen van de business moeten we daarom leren om sneller software op te leveren. Release Management Gelukkig heeft Microsoft dit ook onderkend. Team Foundation Server, dé Application Lifecycle Management oplossing van Microsoft wordt steeds beter in het opzetten van Release Pipelines. Een Release Pipeline is een geautomatiseerd proces waar iedere versie van een applicatie doorheen gaat om daadwerkelijk in productie te komen. Microsoft heeft hier een jaar geleden het bedrijf InRelease voor overgenomen. Waar voorheen het ALM verhaal stopte bij de Build Server, pakt Release Management het stokje nu over en brengt een applicatie helemaal naar productie. Release Management architectuur Release Management bestaat uit een aantal onderdelen: - Release Management Server - Release Management Client - Deployment Agent (vanaf Update 3 kun je hier ook PowerShell Desired State Configuration voor gebruiken maar dat laten we voor nu even buiten beschouwing). Fig. 1: Release Management Onderdelen Release Management Server wordt op de Team Foundation Server geïnstalleerd en regelt vanaf dat moment alle releases. De Client installeer je lokaal op je pc en gebruik je om Release Pipelines aan te maken en releases te beheren. De Deployment Agent installeer je op je target servers. Figuur 1 laat de verschillende onderdelen van Release Management zien. Stel dat je een OTAP (ontwikkel, test, acceptatie en productie) omgeving hebt die uit meerdere servers bestaat. Op ieder van deze servers installeer je dan de Deployment Agent. De Deployment Agent gebruikt het lokale netwerk of HTTP(S) om aan de Release Management server te vragen of er een nieuwe versie klaar staat. Zo ja, dan gaat de Agent aan de slag om deze nieuwe versie te installeren. Het voordeel van deze aanpak is dat de Release Management Server geen verbinding hoeft op te zetten met de Deployment Agent. Dit is vaak lastig voor elkaar te krijgen in beveiligde omgevingen of als de Deployment Agent in Azure of ergens anders buiten het domein van je organisatie draait. Doordat de Agent de verbinding opzet en hier HTTP voor kan gebruiken heb je veel firewall problemen in één keer opgelost. Zoals je in Figuur 1 misschien is opgevallen, is er nog één onderdeel wat we niet genoemd hebben: de Release Management web interface. Deze web interface kan gebruikt worden door stakeholders om een release goed te keuren of af te keuren zonder dat ze hiervoor de Client hoeven te installeren. Op deze manier kan de uiteindelijke verantwoordelijkheid om een applicatie door te zetten naar productie bij een stakeholder zonder technische kennis liggen. Installeren van Release Management Om een begin te maken met Release Management is het handig als je Team Foundation Server al geïnstalleerd hebt. Een snelle manier om een test omgeving op te zetten is door een virtual machine in Microsoft Azure aan te maken. Als je een Windows Server 2012 machine pakt heb je TFS hier in een paar minuten op geïnstalleerd. Voor een demo omgeving is het ook geen probleem om alles op één machine te zetten. Daarna komt het installeren van Release Management. Op kun je trials van de verschillende onderdelen van Release Management downloaden. De eerste keer zul je even wat configuratie werk moeten doen. Als je dit eenmaal achter de rug hebt wordt alles een stuk makkelijker. Als eerste installeer je Release Management op je server. Installeer je alles op één machine dan hoef je hier geen extra accounts voor aan te maken en is dit snel klaar. Als je daarna de Client installeert moet je bij de eerste keer opstarten aangeven waar je Release Management server te vinden is (Figuur 2). magazine voor software development 5

6 .NET Binnen Release Management vormen één of meerdere servers met elkaar een Environment. Bij een Environment moet je denken aan een test, acceptatie of productie omgeving. Een server kan ook in meerdere omgevingen terug komen. Figuur 5 laat zien hoe je je nieuwe server toegevoegd aan Release Management en Figuur 6 hoe je deze in een Environment hangt. Fig. 2: Client verbinden met Release Management Server Daarna krijg je het stappenplan uit Figuur 3 te zien onder Configure Paths. Zoals je ziet zijn veel stappen optioneel. Fig. 5: Toevoegen nieuwe server Fig. 3: Stappenplan voor inrichten Release Management Wat je wel moet doen is de Release Management server verbinden met TFS (vergeet niet om het account dat je gebruikt om Release Management en TFS te verbinden de permission Make requests on behalf of others heeft). Ook moet je een Stage Type toevoegen. Stage Types zijn bijvoorbeeld Ontwikkel, Test, Acceptatie en Productie of andere namen die jij binnen jouw organisatie gebruikt. Nadat je dit hebt gedaan ben je klaar om je eerste release te gaan opzetten. Je eerste release Nu je een werkende Client en Server hebt kun je je eerste omgeving gaan opzetten. Dit begint met het installeren van de Deployment Agent. Als je een snelle test omgeving wilt kun je deze gewoon op de machine die TFS en Release Management draait installeren. Deze Agent moet je configureren om verbinding te maken met de Release Management server (Figuur 4). Vanaf dat moment is je server beschikbaar binnen Release Management en kun je deze gaan gebruiken. Fig. 6: Aanmaken Integration Environment Als je eenmaal één of meerdere Environments hebt gedefinieerd maak je een Release Path aan. Een Release Path verbindt de Environments met elkaar. Je Release Path bepaald bijvoorbeeld dat je eerst automatisch naar een integratie omgeving deployed, daarna naar een test omgeving waar een groep testers verantwoordelijk voor is en zo verder naar acceptatie en productie. Figuur 7 toont een voorbeeld van een heel eenvoudig Release Path. In dit geval is er maar één fase waar je applicatie naar gedeployed wordt. Fig. 4: Configureren van de Deployment Agent Fig. 7: Een eenvoudig Release Path met één Stage 6 MAGAZINE

7 .NET Een Release Path geeft echter niet aan wat en hoe er nu precies gedeployed moet worden. Hiervoor gebruik je een Release Template. In een Release Template geef je aan wat er precies op welke server moet gebeuren. Denk hierbij aan dingen zoals het aanmaken van een IIS website, het updaten van een database of het wijzigen van je register. Als je naar het Release Template in Figuur 8 kijkt zie je bijvoorbeeld dat dit template een folder aanmaakt op de server. Tokens stellen je instaat om je zaken zoals connection strings of andere instellingen automatisch in te stellen voor de omgeving waar je heen deployed. Daarnaast wil je je Releases natuurlijk integreren met je Build Server. Als je deze dingen eenmaal op orde hebt blijkt in de praktijk dat Release Management een prima oplossing is voor het automatiseren van je deployements en niet zo moeilijk als je misschien denkt. Wouter de Kort Fig. 8: Een eenvoudig Release Template Nu je een Agent, Environment, Release Path en Release Template hebt ben je klaar voor je eerste release. Releases kunnen getriggered worden vanuit een Team Foundation Server build maar je kunt een Release ook handmatig starten. Nadat je Release eenmaal draait kun je via de Client de voortgang van je release volgen. Als je een Release start krijg je het traffic overzicht te zien van Figuur 9. Hierin zie je de verschillende stappen in je Release en hoever de Release is. Wouter begon met programmeren toen hij 7 jaar oud was. Hij werkt nu als Microsoft Lead Consultant bij Ordina. Wouter helpt organisaties om bij te blijven met alle ontwikkelingen op de Microsoft stack. Hij richt zich op Application Lifecycle Management en Software Architectuur voor web applicaties. Hij houdt ervan om complexe problemen op te lossen en anderen te helpen om betere ontwikkelaars te worden. Wouter heeft een aantal boeken geschreven, is een Microsoft Certified Trainer en een ALM Ranger. Je kunt hem vinden op Twitter (@wouterdekort) en op zijn blog TIP: Bing while coding Iedere developer kent dat wel, tijdens het ontwikkelen ben je op het internet op zoek naar tips en tricks. Er zijn nogal wat plekken om aan je informatie te komen op het internet. Hulp, tips en codevoorbeelden kunnen gevonden worden op verschillen forums, MSDN, CodeProject, StackOverflow en vele andere. We gebruiken allemaal onze favoriete zoekmachine om hulp te vinden. Normaal zou je dan de comfortabele omgeving van Visual Studio moeten verlaten. Sinds kort is er een handige extension voor Visual Studio beschikbaar. Je kunt dan in je development omgeving blijven. Fig. 9: Overzicht van een Release En nu? Natuurlijk is het aanmaken van een folder op een server nog geen echte deployment. Als je echte applicaties gaat deployen komt er nog iets meer bij kijken maar de basis heb je nu eigenlijk al onder de knie. Voor een echte applicatie ga je gebruik maken van Components. Een Component beschrijft een onderdeel van jouw applicatie. Denk dan bijvoorbeeld aan een website of database met de bijbehorende instellingen. Ook zul je al snel in aanraking komen met tokenization. a2d9-4a48-a5fd-504ff4ad1b65?src=featured magazine voor software development 7

8 GENERAL Sander Hoogendoorn So Does agile improve productivity? Over the past fifteen to twenty years I ve been invited numerous times to help organization move from traditional to iterative and agile software development. Without exception whenever I have a first board room meeting at any organization, I start the conversation with the same questions: why do you want to move to agile? What is it you are trying to achieve? You wouldn t believe the diversity of answers I ve received from CEO s, CIO s, CTO s, managers and project managers. Apparently, agile is conceived as the silver bullet to solve all of our problems. Almost automagically collaboration between people will improve, teams and projects will deliver the right functionality on-time, on-budget and without financial overruns. Of course, quality of design and code will improve on the fly, collaboration with the business, clients and other stakeholders will appear to be perfect, bugs will disappear without effort, testing in agile projects is a jiffy, and in the end everybody s happier than the Minions in Pharrell Williams song. But above all, the issue agile is supposed to solve is that the productivity of software development needs to improve. It seems that organizations automatically assume that just by going agile, Scrum, Kanban or similar approaches more software will be built in less time. There is a number of observations to make from this assumption. First of all, I seriously doubt that any approach, agile or from other paradigms will actually improve productivity. I remember that the same assumption was coined before with model driven development, component based development, offshore development and rapid application development. Productivity isn t only influenced by the mere application of any approach, but also by the organization s culture, the amount of requirements change, the knowledge and experience of the people in the teams, factors from outside of the projects, such as external parties and suppliers, or the complexity of the application landscape and architecture. Hence, the application of waterfall, agile, RUP, Scrum or Kanban as such only influences the increase or decrease of productivity for a very small part. Besides that, agile is applied differently in each and every organization and project, which makes it hard to come up with a generic statement on productivity improvement. Teams are not factories Secondly, developing software, including analysis and testing, is creative work. A software development team is not a factory. And creative work is not something which is easily measured. For every problem, no matter how small, there is a multitude of solutions available. Teams struggle and have to be inventive to find the best, or at least a good-enough solution, a usable user interface, a well-crafted domain model, a suitable service design. And estimating creative work, and moreover comparing creative work to that of others is always hard. It s like someone asking Vincent van Gogh how long it will take him to paint his next masterpiece. And even worse, then trying to compare that to the time it took Rembrandt to paint The Night Watch. The fact that a software development project is for a large part creative work makes it hard to estimate it exactly - the project manager s nightmare. But to use that estimate to compare it with the work done in traditional projects is even harder. People use different techniques, work in different styles, technology has changed dramatically. Again, it is like comparing Van Gogh s Sunflowers to Rembrandt s Night Watch, solely based on the amount of hours it took them to create their product. 8 MAGAZINE

9 GENERAL The weakest links Thirdly, the slowness of a software development project is only partly due to the actual development. Most of it can be directly attributed to endless changes in requirements and new insights from those who need the software. Every software development project, also the agile ones, have some sort of a life cycle of creating work items. Ideas are converted into requirements, requirements into features, features into user stories or use cases, next code is delivered, tests are done and eventually a product comes out. As we all know, every process is as strong as it s weakest link. Many people involved in the weakest links in the process of any software development project are hard to influence, such as the business, external parties or even DBA s. No matter how good agile techniques are, they only partly influence these weaker links in your process. Meaning agile only partly influences productivity anyway. On top of that, every software product is unique. In this industry we never build the same product twice. Why would we? It a product is there already, no need to build it again? And since every product is different, how can we compare different projects? Apples and oranges Last but not least, to really find out whether productivity is improving, agile projects and teams need to be measured and compared with traditional projects and teams. This alone is hard enough as it is. Many organizations haven t actually measured their projects well in the past, and still aren t measuring their (agile) projects. And even if they do, measurement in agile projects is usually achieved by establishing the number of story points that teams realize during iterations or sprints. Unfortunately, story points are hard to compare for different teams, as any team, even in the same project, may estimate differently, even using the same scale. Let alone that story points are comparable over different projects or different organizations. And even if we would be able to measure and compare agile projects using some point scale, traditional projects and teams, if they are measured at all, are usually not measured in story points, but using other techniques, such a different variations of function points or techniques such as COCOMO. These techniques hardly compare to story points. In other words, comparing the outcome and productivity of traditional and agile projects is much like comparing apples and oranges. Value in agile Concluding, I d say there s very little proof that going agile, Scrum, Kanban, Lean or whatever, will for sure improve your productivity in software development. At least I haven t seen much proof. Not in literature, and not in real life. At best, agile might improve your productivity. But it might as well slow it down too. I ve seen both cases - I think. All in all, if you are turning to agile just to increase productivity, think twice. However, that doesn t mean that you shouldn t move to agile. There is a lot of value in agile. Besides productivity, there are plenty of reasons to engage in agile, although hard to prove as well. I ve seen teams who improve the quality of their code, I ve witnessed organizations who benefitted largely from increased the flexibility agile offers, I ve seen people really happy to be able to collaborate with people in other roles whom they ve never worked with before, I ve seen growing mutual understanding between business and IT, I ve seen people creating more pride in their work, and even regaining joy and confidence in working at their employers. All things you could benefits from when adopting agile practices. But do those benefits solely rely on agile? Nope. It s you. Sander Hoogendoorn Sander Hoogendoorn houdt zich in zijn rol als Principal Technology Officer bij Capgemini zich vooral bezig met de innovatie van software development. Sander is erkend global thought leader op het vlak van agile development bij Capgemini. Daarbij is hij onder meer verantwoordelijk voor Capgemini s agile ontwikkelplatform, dat het Accelerated Delivery Platform (ADP) wordt genoemd. magazine voor software development 9

10 DELPHI Cary Jensen Talking about frames One of the new features introduced in Delphi XE6 makes it possible for you to control how TFields are created when their associated TDataSet becomes active. This has changed in XE6, though not to the extent that Embarcadero has suggested. This article describes how this new feature works, as well as how you can extend this feature to other TDataSets, such as TClient- DataSet. This new feature is part of a much larger issue concerning how TDataSets get their structure, that is, how the TFields that represent the individual columns of a TDataSet are created. This more general topic is beyond the scope of this article. Instead, in this article I am going to focus specifically on the design time definition of a TData- Set's TFields, and how those definitions affect the structure of the TDataSet when it is made active. Overview of TDataSet TFields A significant feature of Delphi's TDataSet interface is that individual columns of the result set returned by a TDataSet are represented by instances of the TField class. You can use these classes to read, and in many cases, write data to the underlying columns of your database. In addition, these classes also provide you with metadata about those columns, including their name and their data type. These classes have names such as TStringField, TDateTimeField, TBlobField, and so on. It is possible to create fields for your TDataSet at design time. You do this using the Fields Editor, which is a component editor available for all TDataSets. Figure 1 depicts the Fields Editor for a TFDQuery that points to the Customer table in the sample InterBase database named DBDEMOS.GDB that ships with Delphi. In this figure, all fields of the Customer table have been created at design time by right-clicking in the Fields Editor and selecting Add all fields. are stream to the corresponding form file (dfm or fmx file). The following listing shows the definition of the form on which this TFDQuery is placed once the persistent fields have been defined. type TForm1 = class(tform) FDConnection1: TFDConnection; FDQuery1: TFDQuery; FDGUIxLoginDialog1: TFDGUIxLoginDialog; FDGUIxWaitCursor1: TFDGUIxWaitCursor; FDQuery1CUSTNO: TFloatField; FDQuery1COMPANY: TStringField; FDQuery1ADDR1: TStringField; FDQuery1ADDR2: TStringField; FDQuery1CITY: TStringField; FDQuery1STATE: TStringField; FDQuery1ZIP: TStringField; FDQuery1COUNTRY: TStringField; FDQuery1PHONE: TStringField; FDQuery1FAX: TStringField; FDQuery1TAXRATE: TFloatField; FDQuery1CONTACT: TStringField; FDQuery1LASTINVOICEDATE: TSQLTimeStampField; private { Private declarations } public { Public declarations } end; If you do not take steps to define the structure of a TDataSet at design time, a TDataSet creates one TField for each column in the underlying result when the TDataSet becomes active. These fields are referred to as dynamic fields, and their class, name, and data type are based on the meta data associated with the data being returned in the result set. Clearly, dynamic fields cannot be configured at design time, since they do not exist at that point. Fig 1: Persistent Fields in the Fields Editor Fields that appear in the Fields Editor are referred to as persistent fields. This is because these fields are not only created at design time, but persist to runtime. In addition, these TFields appear as named reference types in the published section of the corresponding owner class declaration. As a result, they can be selected in the Object Inspector, permitting their published properties to be configured at design time. As you can imagine, values you set to these properties Turning our attention back to persistent fields, it is important to note that there are several different types of persistent fields. The type discussed here so far are referred to as data fields, and they represent an underlying column in a result set. Most datasets have two additional persistent field types: lookup and calculated. Lookup fields define a field whose possible values are defined by the contents of a field in another TDataSet, and calculated fields are virtual fields whose value can only be assigned from within the TDataSet's OnCalcFields event handler. 10 MAGAZINE

11 DELPHI Some TDataSets have two additional persistent field types: internalcalc and aggregate. An internalcalc field is a calculated field for which a maintained index may be defined, permitting index-related operations, such as FindKey, to be performed on the results of the calculation. Aggregate fields are those that can perform aggregate operations across records, such as COUNT, MIN, and SUM. Traditional TField Creation Until XE6, the creation of at least one persistent field prevented the creation of dynamic fields, with one exception. You can create one or more Aggregate fields and, so long as no other type of persistent field exists for the TDataSet, dynamic fields are automatically created at runtime for each field in the TDataSet's result set. This 'special nature' of aggregate fields can be seen in the Fields Editor. Figure 2 depicts the Fields Editor for a TDataSet that includes one aggregate field. Notice that the aggregate persistent field appears in a special pane at the bottom of the Fields Editor. property AutoCreateMode: TFieldsAutoCreationMode read FAuto- CreateMode write SetAutoCreateMode default acexclusive; property PositionMode: TFieldsPositionMode read FPosition- Mode write FPositionMode default polast; [Default(False)] property UpdatePersistent: Boolean read FUpdatePersistent write FUpdatePersistent default False; end; Now, the AutoCreateMode property of the FieldOptions property controls how dynamic fields are created. As you can see in the preceding listing, this property is of type TFieldsAutoCreationMode, an enumerated type. The TFieldsAutoCreationMode type declaration is shown in the following code TFieldsAutoCreationMode = (acexclusive, accombinecomputed, accombinealways); The default value for AutoCreateMode is acexclusive, which produces the dynamic field creation behavior that has been around since Delphi's release. In other words, the existence of any persistent field other than aggregate fields prevents the automatic creation of dynamic fields. Consequently, the introduction of this new feature should be backwards compatible with your existing applications that you have created using Delphi's TDataSets. (If you have created custom datasets that descend from TDataSet, your datasets will likely be backwards compatible, but you should do some testing just to make sure.) Fig 2: Aggregate fields are displayed in a separate pane in the Fields Editor That non-aggregate persistent fields prevented the creation of dynamic fields posed a formidable obstacle for some developers. Specifically, those developers needing to create calculated fields were also forced to create persistent data fields for all of the columns in the result set that they wanted to access. This limitation meant that developers would have to resort to complicated runtime code in order to surface calculated fields for results sets whose structures are not predictable at design time. The FieldOptions Property in Delphi XE6 Beginning with Delphi XE6, a new property, FieldOptions, was introduced in the TDataSet class. This property is of the type TFieldOptions, a class defined in the Data.DB unit. The TFieldOptions declaration is shown in the following listing. If you set AutoCreateMode to accombinecomputed, dynamic fields are created, but only when the existing persistent fields consist only of calculated fields and aggregate fields (as well as internalcalc, if supported by the corresponding TDataSet). With this setting, the presence of persistent fields other than calculated or aggregate fields will prevent the creation of dynamic TFields. Finally, if you set AutoCreateMode to accombinealways, dynamic fields are always created, and these are added to the persistent fields for the underlying dataset. Figure 3 depicts a DBGrid and a Fields Editor at design time. In this figure there are no persistent fields, and the TFDQuery has been made active. All fields shown in the figure are dynamic fields, with one for each field in the underlying query. TFieldOptions = class (TPersistent) private FDataSet: TDataSet; FAutoCreateMode: TFieldsAutoCreationMode; FPositionMode: TFieldsPositionMode; FUpdatePersistent: Boolean; procedure SetAutoCreateMode(const Value: TFieldsAutoCreationMode); protected function GetOwner: TPersistent; override; public constructor Create(DataSet: TDataSet); procedure Assign(Source: TPersistent); override; published Fig 3: All fields in the DBGrid are represented by dynamic fields By comparison, in Figure 4 AutoCreateMode has been set to accombinealways and the TFDQuery has been activated. As you can see in the Fields Editor, there are two persistent fields: InvoiceYear, an internalcalc field, and Company, a data field. magazine voor software development 11

12 DELPHI Here we see that the persistent fields have been created, followed by the dynamic fields. We can see that the Company field is a persistent field because it appears before the dynamic fields, and its column title is in mixed case, compared to the upper case title of the dynamic fields. appear in their index order. This order is defined by the Index property of the individual TFields. Data fields get their default Index property value based on their underlying field's position in the result set after taking into account the position of any non-data persistent fields (field position is 0-based). In this figure I have set the Index property of the InvoiceYear field to 0, as a result, the default Index value of the Company data field changed to 2, which places it in the third column of the grid. Fig. 4: Both persistent and dynamic fields have been created In Figure 4, as well as in the following figures, the internalcalc field InvoiceYear appears empty. This is because calculated fields are always empty at design time. If you run this form, and you have an appropriate event handler assigned to the TFDQuery's OnCalcFields property, the value assigned by that event handler would appear in the field. Fig. 6: Dynamic fields appear first in the TDataSet structure Figure 5 shows what can happen when AutoCreateMode is set to accombinedcomputed. In this case we only have the persistent fields created, but that is because there is non-calculated persistent field (Company, a persistent data field). If we were to remove the Company field, the image would look like that shown in Figure 4, though the Company field would be a dynamic field, and would appear to the right of the CustNo field, and its title would be in upper case. Fig. 7: Position of pofieldno orders the fields by their Index property The UpdatePersistent FieldOptions Property When you create data fields, you have can configure those fields at design time. In some cases this permits you to affect the FieldDef property of the resulting field. This happens when the metadata of a dynamic field creates FieldDef values that are different from the configured persistent field. Fig. 5: Use accombinedcomputed to create dynamic fields only if there are calculated (or aggregate) persistent fields Combine and PositionMode If you set AutoCreateMode to either accombinecomputed or CombineAlways, you use the PositionMode property of FieldOptions to control the position of the dynamically created fields in the underlying table structure. The default value for PositionMode is polast, in which case dynamic fields appear after the persistent fields in the table structure. This pattern can be seen in Figure 4. If you set Position to pofirst, the dynamic fields appear before the persistent fields. This can be seen in Figure 6. In this figure I have scrolled the DBGrid to the right so that we can see our persistent fields. The final PositionMode type, pofieldno, only applies if you have created one or more persistent data fields. In those cases, those fields Under these conditions you can control how the persistent field should initialize the resulting FieldDef property of the field at runtime. When you set UpdatePersistent to True, the Size, Precision, and Required properties of the resulting FieldDef will be based on metadata. When set to False, the configured properties of the persistent field take precedence. Field and Fields Properties Now that fields in a single TDataSet can be a mixture of persistent and dynamic fields, it is natural that you might have occasion to question how a particular field was created. At the individual TField level, you can use the TField.LifeCycle property to make this determination. LifeCycle will be lcautomatic if the field is dynamic, and lcpersistent if it is the result of a persistent field definition. You can ask a similar question about the collection of TFields in a TDataSet. Use the TDataSet.Fields property to examine the Life- Cycles property. TDataSet.Fields.LifeCycles will return a set of TField- LifeCycle flags. If this set includes lcautomatic and lcpersistent if there 12 MAGAZINE

13 DELPHI is a mixture of fields. If it contains a single flag, all fields of that TDataSet are of the returned type. FieldOptions and TDataSet The FieldOptions property is introduced and implemented in the TDataSet class. This property, however, is declared protected. As a result, it will only appear in descendant classes that have explicitly raised the visibility of this property from protected to published. Being a published property is crucial, since this is a feature that is only truly meaningful at design time. Contrary to Embarcadero's published descriptions of FieldOptions, this property is not available in every TDataSet implementation in Delphi. It's not even published in most of the TDataSets. In the original release of XE6 it appears as a published property in only the TFDDataSet classes and those associated with InterBase express, such as TIBQuery. In classes like as TClientDataSet, TQuery, and TSQLQuery, this property remains protected. Fortunately, it is not incredibly difficult to extend these classes, raising the visibility of FieldOptions to the published visibility. Doing this requires the following three steps: Summary The new FieldOptions property introduced in the TDataSet class permits TDataSets that expose this property as a published property to include both calculated fields and still permit dynamic field construction. This article has described the nature of this property, as well as how to expose this property in classes where it is still protected. Cary Jensen Cary Jensen is Chief Technology Officer of Jensen Data Systems. Since 1988 he has built and deployed database applications in a wide range of industries. Cary is an Embarcadero MVP, a best selling author of more than 20 books on software development, and holds a Ph.D. in Engineering Psychology, specializing in humancomputer interaction. Each spring Cary and fellow Embarcadero MVP Bob (Dr.Bob) Swart present the annual Delphi Developer Days tours. Learn more at 1. Descend a new class from the existing TDataSet 2. Redeclare FieldOptions in the published section of your new class declaration 3. Add your new class to a design time package, and ensure that there is an appropriate interface Registry procedure declaration whose implementation registers the new component The following is an example of a unit that declares and registers a TClientDataSet descendant that exposes FieldOptions. If you add this code to a designtime package that you install, you will find this TClient- DataSetFO component on the Samples page of the Tool Palette. unit ClientDataSetFO; interface uses System.SysUtils, System.Classes, Data.DB, Datasnap.DBClient; type TClientDataSetFO = class(tclientdataset) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } property FieldOptions; end; TIP: PASTE JSON/XML as Classes Visual Studio bevat heel veel handige tools en dingetjes. Eerder hebben we al iets laten zien over de editor. Maar wist je dat met de laatste update er twee mogelijkheden bij zijn gekomen om code te plakken. Nu kun je XML of JSON in je copy buffer plakken er gelijk Classes van laten maken. Dat is erg handig, zeker als je met OData streams of andere databronnen werkt. procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TClientDataSetFO]); end; end. magazine voor software development 13

14 WINDOWS Marcel Meijer Microsoft project Siena Deze Windows 8 app bestaat al een tijdje. Met deze app kun je krachtige Business apps maken en publiceren zonder een regel code te schrijven. Meer informatie kun je vinden op de Microsoft Project Siena site. Dat klinkt natuurlijk veel belovend. Business users die zelf hun apps in elkaar klikken en zo hun eigen werk vereenvoudigen. een developers account of settings downloaden. Dat geldt oa voor Yammer, Facebook, Twitter etc. In mijn voorbeeld heb ik een RSS feed gekozen. Als je de app start, dan krijg je onderstaande te zien. Je ziet een leeg scherm en daarop kun je Visuals plaatsen. Overigens is het wel handig om een van de verschillende tutorials te bekijken. De workflow of manier van werken nog niet heel intuïtief. We beginnen met een leeg scherm of window. Als je op Import data klikt, dan zal Siena melden dat de databronnen succesvol gekoppeld is. Het scherm zie je dan een voorbeeld van de data. Heb je meerdere databronnen voor je app nodig? Dan kun je meerdere bronnen toevoegen. Business apps zijn pas interessant als ze data laten zien. Data komt van een Data Source. Door een rechtermuis klik of het swipen van boven naar beneden krijg je een menu balk. In dit menu de standaard file functionaliteit, het toevoegen van data en het toevoegen van een nieuw scherm. Ook niet onbelangrijk is dat rechts een Preview button staat. Op het scherm moeten we dan iets neerzetten waarin deze data getoond kan worden. Daarvoor moet je op de grote plus klikken aan de rechterbovenkant. Er verschijnt een lijst met legio mogelijkheden. Bij de App data kun je kiezen voor databronnen. Er is een standaard lijst met bronnen. Voor sommige koppelingen moet je bij de bron wel 14 MAGAZINE

15 GENERAL Voor deze demo app is gekozen voor een Text Gallery uit de Galleries. Deze bevat een combinatie van velden etc dat scheelt een boel design. Aan de onderkant popped er een menu op, daaruit kun je de gewenste databron kiezen. Voor mijn App RSS_1. Op het scherm verandert gelijk de inhoud van de velden. Zoals je ziet is de data niet helemaal zoals ik zou willen. In de eerste regel staan de tags van een Blog item etc. Super eenvoudig. Als je app uit meerdere pagina s bestaat, dan kun je een nieuw Window aan toevoegen. In je eerste scherm kun je dan een navigatie toevoegen. Hoe om te gaan met parameters in het volg scherm is nog niet helemaal duidelijk. Samenvattend: het is een mooi begin. Er mag nog wel iets aan de gebruikers interface gedaan worden, maar het begin is er zeker. Als je de keynote van Microsoft Partner Conference hebt gekeken, dan was daar een demo te zien van deze applicatie in de volgende vorm. Ik hoop ook dat er nog mogelijkheden komen om security toe te voegen of als bedrijf eigen databronnen toe te voegen. Ik kan mij namelijk voorstellen dat bedrijven connecties naar hun ERP systemen of andere interne databronnen zelf in de hand willen houden. Dat Business users zelf hun apps maken lijkt mij niet gek, maar dan wel een beetje gecontroleerd. Overigens is dit niet nieuw, ruim 15 jaar geleden toen Excel en Microsoft Access veelvuldig door Business users gebruikt werden wilde we dit ook. Marcel Meijer Om dat aan te passen is redelijk eenvoudig. Je selecteert het veld en kiest uit het menu aan de onderkant voor Text. Daar kun je dan kiezen welk veld van de databron je wilt tonen. Al meer dan 20 jaar begeeft deze 44-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 Solution Architect bij Prodware. 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. Deze acties moet je bij meer velden uitvoeren. Zo is het plaatje toegevoegd en een tekst veld. Om het resultaat te kunnen kijken, dan klik je Preview uit hetzelfde menu waar de databronnen kon worden ingevuld. Je nieuwe app zal starten. OPROEP! Lijkt het je leuk een bijdrage te leveren aan (het volgende) SDN magazine? We nodigen je van harte uit om een artikel te schrijven over je vakgebied, over ontwikkelingen en/ of achtergronden. Stuur je kopij naar info@sdn.nl, er zit een auteur in ons allemaal! magazine voor software development 15

16 GENERAL Cary Jensen Reflections on Software Development in Iambic Heptameter While true, it's said, there's work to do, and now it's time to start This is my task, so plain and clear, it's science, love, and art My slate starts clean, a screen pure white, no logic bears my will Upon this page, through thought and might, it's my intent to fill I make my plan, each step designed, my spec is well thought out It matters much, oh yes it does, there can't be any doubt My fingers fly, the logic pours, a waterfall sublime I see my goal, I type and click, I lose all sense of time My words are key, my syntax right, and subtly reserved I own this world, I'm in control, though humble, numb, and nerved It's getting close, the tension firms, anticipation's high I hit F9, compile and run, I feel success is nigh But wait! It fails! How can this be, catastrophe I feel I've lost my touch, my senses fail, my mortal soul revealed Oh, damn the Gods! This logic broke, a bug I cannot find I check the source. I check each line. I think I'll lose my mind But what is this, a misplaced test, can this thing truly be Compile again, and it just works, I'm now in ecstasy I document the change I made, my comment explains why I always try to take this step, to prevent a future cry Relaxed, I am, my goal achieved, a conquest satisfied It's what I do, a job compelled, a source of joy and pride You beauty mine, my cherished child, the product of my soul From white blank slate to final code, a void has morphed to whole No eyes will see this gold I've spun, no heart with feel its beat It lies beneath the interface, resplendent and complete I scratch one item off my list, but I cannot pretend With this task done, there will be more, my work will never end Copyright 2014 Cary Jensen. All Rights Reserved 16 MAGAZINE

17 .NET Sander Gerz Roslyn De compiler is het onderdeel in het leven van de ontwikkelaar dat al het harde werken omzet naar het gewenste doel. Die regel onderaan het scherm Build succeeded geeft ons het goede gevoel. Daar werken we naar toe, daar doen we het eigenlijk voor. Maar compilers zijn van oudsher eigenlijk gesloten systemen. Broncode gaat erin, er gebeurt wat magisch, en bestanden, libraries of executables komen er uit. En terwijl de compiler onze broncode leest, leert hij er veel over. De compiler begrijpt de code, herschikt soms stukken, verbetert het, en wanneer het klaar is vergeet het alles weer. Lange tijd was dat nu eenmaal zoals het was. Niet efficiënt misschien, maar de compiler deed waar het voor gemaakt was. De afgelopen jaren heeft de compiler echter een steeds belangrijkere rol gekregen. We gebruiken Visual Studio en niet Notepad vanwege zaken als IntelliSense, refactoring, code analyses, navigatiehulpjes als Find all references. Allemaal om het ons ontwikkelaars makkelijker te maken. De compiler werd hiervoor nieuwe trucs geleerd. Code werd tijdens het schrijven al gecompileerd, en moest gelijk rapporteren als het wat raars tegenkwam. Ook als de code nog niet te compileren was, moest het al begrijpen wat de bedoeling kon zijn. Maar de compiler bleef een zwarte doos. Een trukendoos die steeds complexer werd en lastiger te onderhouden. Het werd tijd voor Microsoft om wat nieuws te bedenken. Zo is het project Roslyn geboren: een nieuwe compiler die niet meer gesloten was maar die de interne werking openbaart zodat iedereen kan zien wat er binnen de compiler pijplijn gebeurt. Fig. 1: Wat doet de compiler? Voordat het de naam Roslyn kreeg werd ernaar gerefereerd onder de noemer compiler-as-a-service. Anders Hejlsberg introduceerde het tijdens de PDC in De demos van toen lieten zien hoe je on-the-fly nieuwe C# instructies kon maken en gelijk laten werken. De naam is veranderd om duidelijk te maken dat het project onder de naam Roslyn veel verder gaat dan dat. Bovendien kan de term as-a-service de associatie met de cloud opwerpen en daar heeft het niets mee van doen. Roslyn draait om de volgende 5 thema s. 1. Compilatie on-the-fly 2. Scripting 3. Tooling voor Visual Studio 4. Code analyse 5. Aanpassing van de compiler Deze thema s worden mogelijk gemaakt door middel van twee API-lagen. Enerzijds hebben we te maken met Compiler API s en anderzijds komen we terecht in de Workspace API s. Fig. 2: Compiler API s en Workspace API s zijn de belangrijkste lagen in Roslyn We kunnen de themas daarom ook verdelen in: 1. Compiler API s met daarin: Diagnostic APIs voor aanpassing van de compiler en Scripting APIs voor scripting en compilatie on-the-fly 2. Workspace API s voor Code analyse en Tooling in Visual Studio. Compiler API s De compiler laag bevat informatie over iedere stap in de compiler pipeline, zowel qua syntax als semantiek. Ook vinden we hier alles terug over de gerefereerde assemblies, compiler opties die zijn meegegeven bij de build, en de broncodebestanden. Er zijn twee aparte APIs, een voor C# en een voor Visual Basic. De API s zien er hetzelfde uit, maar zijn apart opgezet om beter aan te sluiten op de specifieke ontwikkeltaal. De Diagnostic API s zijn onderdeel van de compiler API in de zin dat je hier alles kunt terugvinden dat betrekking heeft op fouten en waarschuwingen in relatie tot je code. Dat kunnen bijvoorbeeld syntaxfouten zijn, of fouten in de aanroep van variabelen, maar ook informatieve berichten. Deze Diagnostics API is uit te breiden en kan je dus ook inzetten voor controle van je code zoals StyleCop en FxCop dat doen. Door het te integreren in de compiler heb je meer controle over het build-proces en kan je de regels en richtlijnen beter naar je hand zetten. Op een test-build kan je bijvoorbeeld een minder strikt beleid toepassen dan op de uiteindelijke productie-build. Ook de Scripting API s zijn onderdeel van de Compiler API s. Hierin zit zowel het idee van on-the-fly compilatie als het gebruik van C# en Visual Basic.NET gebruiken als een scripting taal. Het ontwikkelteam van Microsoft heeft deze API echter voor nu uit Roslyn gehaald. Ze zijn momenteel het ontwerp van deze API aan het heroverwegen en misschien komt het terug in een latere versie. Maar misschien ook niet. magazine voor software development 17

18 .NET Workspaces APIs In de Workspace API s vinden we de opties om code analyse en refactoring te doen. Zo kan je alle informatie over de projecten in een solution onderbrengen in een enkel objectmodel zonder dat je moet nadenken over projectafhankelijkheden en (build-)configuratie-opties. De Workspace API s vervangen ook de code die nodig was voor Visual Studio opties als Find All References, Formatting en code - generatie. In dit artikel bekijken we voornamelijk de Diagnostics API. De Workspace API s komen een volgende keer aan bod. Installatie en gebruik Op de.net Compiler Platform ("Roslyn") website, vind je de meest recente versie van het project. Je vindt er ook de broncode van het project want Roslyn is open-source. Op kan je online eenvoudig door de broncode browsen. De features zijn te installeren als een uitbreiding, in de vorm van een End-User-Preview, op Visual Studio Maar je kunt ook de CTP van Visual Studio 14 installeren waarin de features van Roslyn zijn ondergebracht. In dit artikel gebruiken we Visual Studio 14 CTP2. Deze versie is gratis te downloaden en lokaal te installeren, maar je kunt ook een Virtuele Machine met een installatie van CTP 14 via Windows Azure starten. Dit is handiger omdat je deze CTP niet naast een bestaande installatie van Visual Studio kan draaien. Tegen de tijd dat de nieuwe versie helemaal klaar is kan dat overigens wel. Naast Visual Studio hebben we ook de SDK Preview van Roslyn nodig. Deze vind je hier: In deze SDK zit namelijk de Syntax Visualizer en met die tool gaan we wat dieper de code bekijken. Download de SDK, en installeer vervolgens de Roslyn Syntax Visualizer Extensie. Zodra je deze extensie hebt geïnstalleerd kan je in Visual Studio onder View > Other Windows > Roslyn Syntax Visualizer een apart venster openen om de syntax tree van je code te bekijken. De Diagnostics API vinden we in de folder C:\Program Files (x86)\msbuild\14.0\bin in de assemblies Microsoft.CodeAnalysis.*. Het zijn deze assemblies die ons meer kunnen vertellen over de syntax tree. De syntax tree De meest basale gegevensstructuur die we kunnen bekijken is de syntax tree. Die boomstructuur toont de lexicale en syntactische structuur van de broncode en dienen twee doelen. 1. Het stelt tools, zoals de IDE, add-ins, code analyse tools en refactoring tools, om de broncode te bekijken en te verwerken. 2. Naast pure analyse kunnen tools, zoals refactoring tools en de IDE, via de syntax tree ook broncode maken, aanpassen, reorganiseren zonder dat deze pure tekst bewerken. De syntax tree is dus de primaire structuur die we kunnen gebruiken voor compilatie, code analyse, refactoring, code generatie, enzovoort. De broncode wordt altijd eerst geïdentificeerd en gecategoriseerd in een van de bekende taal-elementen. Een voorbeeld van een syntax tree zie je in afbeelding 3. Een syntax tree heeft drie hoofdkenmerken. Het eerste kenmerk is dat de syntax tree beschikt over de volledige informatie over de broncode, alle instructies, alle puntkomma s, lege regels, spaties, commentaarteksten en noem maar op. In de syntax tree zit de broncode precies zoals het is ingevoerd, maar je ziet er ook de fouten wanneer de code incompleet is of schrijffouten bevat. Door deze eigenschap komen we bij het tweede kenmerk van syntaxt trees. Een syntax tree wordt geleverd door een parser. De parser maakt van de ruwe tekst een syntax tree om uiteindelijk te kunnen verwerken tot uitvoerbare code. De syntax tree die de parser heeft gemaakt is volledig terug te plaatsen naar de originele tekst. Fig. 3: Een syntax tree Vanuit ieder element kan je de tekst terugkrijgen, en op die manier kan je dus broncode creëren en veranderen. Je kunt een syntax tree zelf opbouwen, en daarmee schrijf je impliciet broncode, en door een syntax tree aan te passen, bewerk je impliciet broncode. Het derde kenmerk van een syntax tree is dat deze thread-safe en onveranderlijk is. Zodra je een syntax tree hebt, kijk je naar een snapshot van de broncode. Die broncode verandert op dat moment niet meer. Je kunt dus met meer threads tegelijk de broncode lezen en gebruiken, zonder locking of duplicaten. Omdat de syntax tree onveranderlijk is, en de syntax tree ook niet direct aangepast kan worden, moeten we aparte factory methoden gebruiken om syntax trees aan te maken of aan te passen. De belangrijkste elementen in de boomstructuur zijn als volgt. Nodes - deze erven van de klasse SyntaxNode en bevatten vertegenwoordigen onder meer declaraties, instructies, expressies. Voorbeelden van een SyntaxNodes zijn: class Program { } string[] args using System; Tokens - deze zijn van het CLR type SyntaxToken en vertegenwoordigen het kleinste element in de programmeertaal. Voorbeelden van SyntaxTokens zijn: using static void args Trivia - dit zijn de onderdelen van de code die niet per sé nodig zijn voor begrip van de code, zoals witregels, commentaar, en preprocessor directives. Voorbeelden van Trivia zijn: // uitleg van de code (dit is een SingleLineCommentTrivia) Einde van een regel (een EndOfLineTrivia) Met behulp van de Syntax Visualizer kunnen we de code inspecteren in termen van Nodes, Tokens en Trivia (zie afbeelding 4). Van elk element in de syntax tree zijn tot wel 20 verschillende eigenschappen op te vragen. Het gaat in het kader van dit artikel te ver om iedere eigenschap apart te bespreken. Je kunt onder meer 18 MAGAZINE

19 .NET Declaration expressions public static int GetValue(string text) { int.tryparse(text, out var result); return result; } Null propagation var temp = GetCustomer()?.name; in plaats van Fig. 4: de Nodes, Tokens en Trivia van een syntax tree terugvinden waar de tekst van het element begint, eindigt, het parent element, de taal, de ruwe tekst, enzovoort. Via de enumeratie Microsoft.CodeAnalysis.CSharp.SyntaxKind kunnen we ook elk element van een syntax tree identificeren. Van elke Node, Token of Trivia is dit te achterhalen via de extension method Microsoft.Code Analysis.CSharpExtensions.CSharpKind(). Fouten Zelfs wanneer er fouten in de broncode staan beschikken we over een volledige syntax tree die terug te herleiden valt tot de originele tekst. Zodra de parser een stuk code tegenkomt dat niet voldoet aan de specificaties van de taal gebruikt het twee technieken om een syntax tree te maken. 1. Ten eerste, wanneer de parser een token verwacht maar het niet tegenkomt, dan kan het de ontbrekende token invoegen op de verwachte plaats. 2. Als alternatief kan de parser tokens overslaan tot het er een vindt dat de verwerking van de code weer toestaat. Experimenteren met Roslyn We hebben gezien dat je met de Diagnostics API veel informatie kan verkrijgen over je code. In de Preview SDK vinden we ook enkele voorbeelden van wat je met die informatie kan doen. Deze voorbeelden zijn echter nog niet allemaal compatibel met CTP2 van Visual Studio 14 en laten we hier dus achterwege. Er is bovendien ook wat werk te doen om templates en projecten met experimentele code aan de praat te krijgen. Als je een nieuw project hebt gestart, moet je deze eerst aanpassen. Selecteer het project en kies via de rechtermuisknop voor Unload. Klik opnieuw met rechts op het project en selecteer Edit. Voeg dan het volgende element toe aan zowel de Debug als Release property groep. <LangVersion>experimental</LangVersion> Bewaar de wijzigingen en herlaad het project. Nu kan je experimenteren met een paar taalvernieuwingen die ook onderdeel uitmaken van Roslyn. Enkele voorbeelden zijn: Primary Constructors public class Location(int x, int y) { } var temp = GetCustomer(); string name = (temp == null)? null : temp.name; De status van alle features, gepland, maar ook eventueel weer ingetrokken vind je op Language%20Feature%20Status&referringTitle=Documentation. Conclusie Het project Roslyn is een flinke onderneming voor Microsoft. Dat blijkt wel uit het feit dat men al minstens 6 jaar bezig is om de compiler voor C# en Visual Basic vanaf de grond opnieuw op te bouwen. Het is ook een project dat, in tegenstelling tot sommige andere plannen, niet zo maar in de ijskast (of erger) kan belanden. Wil men talen als C# en Visual Basic relevant houden, dan is er geen andere keus dan de compiler open te breken en flexibeler te maken voor de innovaties van de komende jaren. Door Roslyn krijgen bovendien meta-programming, code-generatie tools, en DSL s een nieuwe impuls. De reis begint op En die reis is niet zonder obstakels. We zien bijvoorbeeld dat in de loop van de afgelopen jaren features op de lijst zijn gezet, maar daarna toch weer zijn terug getrokken. Zoals je eerder al las is ook de Scripting API weer even terug naar de tekentafel. Dat betekent allerminst dat het doel van reis - compiler-as-a-service - wordt verlaten, maar dat het nog wel wat tijd en omzwervingen kost om er te geraken. Links Sander Gerz Sander Gerz is a software architect and co-owner of Solvec ( a consulting and application hosting company. He's also vice chairman of DotNed, the Dutch.NET usergroup, VP Technology at INETA Europe and runs the website Auto-property initializers public int X { get; } = x; public int Y { get; } = y; magazine voor software development 19

20 GENERAL Michiel van Otegem A(synchroon) Synchroon denken zit in ons DNA. Bij vrijwel ieder probleem wat moeten oplossen kijken we (eerst) naar synchrone oplossingen. Dat is logisch, want synchroon denken is relatief simpel, omdat je maar één ding tegelijk doet. Efficiënt is het vaak echter niet en schaalbaar evenmin. Denk je eens in dat je een brief schrijft aan iemand en deze met de post verstuurt. Je moet antwoord hebben om verder te kunnen waar je mee bezig bent, dus je blijft bij je brievenbus zitten tot het antwoord komt. De wereld zou bijna tot stilstaan komen als we zo zouden werken. Het is geen wonder dat we in het echte leven gewoon doorgaan met andere dingen terwijl we wachten op antwoord. Toch is het zo dat als we software maken dat we op deze manier werken. Asynchrone UI De technische mogelijkheden om het anders te doen zijn er voldoende, te beginnen bij de User Interface. Veel web ontwikkelaars maken bijvoorbeeld gebruik van JavaScript frameworks om aanroepen asynchroon te doen volgens de principes van Asynchronous Java- Script and XML (hoewel daar tegenwoordig geen XML meer aan te pas komt, meestal JSON). Hoewel dit zeker voordelen heeft, zoals ik ook al in 2010 in nummer 102 besproken heb, is dit onderwater nog steeds een synchrone aanroep en in de meeste gevallen wacht de gebruiker ook nog steeds op antwoord. De eravring voor de gebruiker is echter vloeiender. Websockets en SignalR bieden ons de mogelijkheid om echt asynchroon te werken, omdat de server dan informatie naar de browser kan sturen. Een simpel voorbeeld is een chatapplicatie, waarbij de browser niet de hele tijd vraagt of er berichten zijn, maar berichten krijgt op het moment dat de server ze verstuurt. Websockets en SignalR bieden ons de mogelijkheid om echt asynchroon te werken In.NET zijn de laatste jaren een aantal constructies toegevoegd om asynchroon programmeren makkelijker te maken. In WinRT is een asynchrone UI zelfs tot standaard verheven. Je kunt eigenlijk geen synchrone aanroepen doen die de UI zouden blokkeren. Threading Nu is een asynchrone user interface heel fijn voor de gebruiker, maar voor de schaalbaarheid van je applicatie doet het op zichzelf weinig. Als je nog steeds synchroon de achterliggende functionaliteit uitvoert, dan is de winst oppervlakkig. Ook hiervoor zijn constructies bedacht, zodat het eenvoudiger is om met threading om te gaan. In.NET 2.0 was dit bijvoorbeeld nog best lastig en moest je zelf threads aanmaken en beheren, maar met de huidige stand van zaken moet je vooral weten hoe de Async en Await keywords werken. Java kent sinds Java EE 6 een vergelijkbare constructie methodes en de Future<V> interface. Maar let op! Het gebruik van Async en Await (of de Java equivalenten) ontslaan je niet van het schrijven van thread safe code! Ze maken multi-threading alleen makkelijker door thread management in het platform te beleggen, maar code kan daardoor nog steeds door meerdere threads tegelijk geraakt worden. Functionaliteit asynchroon ontwerpen Hoewel aanroepen binnen een applicatie en naar andere (deel)systemen asynchroon maken zeker een stap in de goede richting is, is dit nog steeds gepiel op de vierkante centimeter. Het is veelal een trucje om efficiënt met resources om te gaan terwijl je eigenlijk een synchrone operatie uitvoert. Met Async en Await wordt eigenlijk alleen de thread waarmee de aanroep gedaan werd teruggegeven aan de thread pool, zodat deze voor een geheel nieuwe opdracht werk kan gaan verrichten. Wanneer de aanroep die je asynchroon gedaan hebt klaar is, wordt een thread uit de thread pool gehaald om weer door te gaan waar je gebleven was. Het punt waarop de opdracht gegeven is staat al die tijd te wachten. Is dat een aanroep van een webservice, dan zal dit waarschijnlijk op een gegeven moment tot een timeout leiden. Dat is niet ongevaarlijk, want wat gebeurt er dan eigenlijk, en is dat dan wel het gewenste gedrag? Het zou kunnen dat de timeout de opdracht annuleert, maar het kan ook dat de opdracht gewoon succesvol afgerond is. Wil je van dit probleem af, dan moet je zorgen dat de uitkomst deterministisch is. Dat wil zeggen dat het gedrag voorspelbaar is. Om voorspelbaar gedrag te creëren denken veel mensen al snel aan transacties. Hoewel transacties in de meeste gevallen inderdaad voor voorspelbaar gedrag over deeloperaties heen zorgen, zijn transacties maar beperkt schaalbaar, zoals ik in nummer 118 ook al besproken heb. Een betere oplossing is om functionaliteit daadwerkelijk asynchroon te maken. Zet een opdracht bijvoorbeeld in een wachtrij en vertel de gebruiker dat de opdracht gegeven is. Wanneer de opdracht voltooid is (of er een fout opgetreden is), zorg je met een notificatie dat de gebruiker weet wat er gebeurd is. Dat hoeft niet in dezelfde gebruikerssessie te zijn. Dat kan ook zijn als de gebruiker een andere keer terugkomt. En mocht de gebruiker toevallig de UI wel open hebben, dan kun je die notificatie onmiddellijk geven en zo nodig de weergave aanpassen. De eerder genoemde websockets maken dat prima mogelijk. Een mooi voorbeeld van asynchrone functionaliteit is de Microsoft Azure Management Portal. Wanneer je daarin bijvoorbeeld een nieuwe virtual machine aanmaakt, dan kan het enkele minuten duren voordat deze actief is. Daarom laat de portaal zien dat je de opdracht gegeven hebt en laat via een notificatiebalk weten wat de voortgang is. Ondertussen kun je hele andere dingen doen. Mocht je de browser dichtgooien en later in de portal terugkomen, dan kun je zien wat de status is van de virtual machine. Naar alle waarschijnlijkheid loopt die dan en kun je ermee werken. Niet alles kan asynchroon, maar veel wel! Zeker niet alles kan asynchroon. Er is functionaliteit die absoluut synchroon moet, maar als je er goed over nadenkt kan veel meer asynchroon dan je denkt. Je moet alleen een andere bril opzetten om te zien dat iets ook asynchroon kan. 20 MAGAZINE

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

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

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

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

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

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

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

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

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

B1 Woordkennis: Spelling

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

Nadere informatie

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

(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

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

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

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

Risico s van Technologisch Succes in digitale transformatie S T R A T E G I C A D V I S O R

Risico s van Technologisch Succes in digitale transformatie S T R A T E G I C A D V I S O R Risico s van Technologisch Succes in digitale transformatie 2e Risk Event 2019 11 april 2019 The S T R A T E G I C A D V I S O R Ymanagement school of the autonomous University of Antwerp 2 Prof. dr. Hans

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

Comics FILE 4 COMICS BK 2

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

Nadere informatie

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

Stars FILE 7 STARS BK 2

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

Nadere informatie

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

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

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

Nadere informatie

Taco Schallenberg Acorel

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

Nadere informatie

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

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

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE. Toets Inleiding Kansrekening 1 8 februari 2010

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE. Toets Inleiding Kansrekening 1 8 februari 2010 FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Toets Inleiding Kansrekening 1 8 februari 2010 Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe. Als je een onderdeel

Nadere informatie

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

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

Nadere informatie

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

Preschool Kindergarten

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

Nadere informatie

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

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

Read this story in English. My personal story

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

Nadere informatie

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

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

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

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

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

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

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

TFS als perfecte tool voor Scrum

TFS als perfecte tool voor Scrum TFS als perfecte tool voor Scrum René van Osnabrugge renevo@delta-n.nl About me René van Osnabrugge Communicate @renevo renevo@delta-n.nl http://osnabrugge.wordpress.com Agenda Wat is Scrum? Wat is ALM

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

20 twenty. test. This is a list of things that you can find in a house. Circle the things that you can find in the tree house in the text.

20 twenty. test. This is a list of things that you can find in a house. Circle the things that you can find in the tree house in the text. 9006625806_boek.indd 1 31/08/16 15:26 1 6 test This is a list of things that you can find in a house. Circle the things that you can find in the tree house in the text. living room kitchen bedroom toilet

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

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

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

Nadere informatie

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

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

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

Nadere informatie

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

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

Nadere informatie

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

Understanding and being understood begins with speaking Dutch

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

Nadere informatie

A2 Workshops Grammatica Heden

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

Nadere informatie

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

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

Value based healthcare door een quality improvement bril

Value based healthcare door een quality improvement bril Rotterdam, 7 december 2017 Value based healthcare door een quality improvement bril Ralph So, intensivist en medisch manager Kwaliteit, Veiligheid & Innovatie 16.35-17.00 uur Everybody in healthcare really

Nadere informatie

voltooid tegenwoordige tijd

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

Nadere informatie

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

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

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Analyse 6 januari 203, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe. Als je een onderdeel

Nadere informatie

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

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

Nadere informatie

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

Impact en disseminatie. Saskia Verhagen Franka vd Wijdeven

Impact en disseminatie. Saskia Verhagen Franka vd Wijdeven Impact en disseminatie Saskia Verhagen Franka vd Wijdeven Wie is wie? Voorstel rondje Wat hoop je te leren? Heb je iets te delen? Wat zegt de Programma Gids? WHAT DO IMPACT AND SUSTAINABILITY MEAN? Impact

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

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

Talentmanagement in tijden van crisis

Talentmanagement in tijden van crisis Talentmanagement in tijden van crisis Drs. Bas Puts Page 1 Copyright Siemens 2009. All rights reserved Mission: Achieving the perfect fit Organisatie Finance Sales Customer Engineering Project management

Nadere informatie

Data Handling Ron van Lammeren - Wageningen UR

Data Handling Ron van Lammeren - Wageningen UR Data Handling 1 2010-2011 Ron van Lammeren - Wageningen UR Can I answer my scientific questions? Geo-data cycle Data handling / introduction classes of data handling data action models (ISAC) Queries (data

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

Vergaderen in het Engels

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

Nadere informatie

9 daagse Mindful-leSs 3 stappen plan training

9 daagse Mindful-leSs 3 stappen plan training 9 daagse Mindful-leSs 3 stappen plan training In 9 dagen jezelf volledig op de kaart zetten Je energie aangevuld en in staat om die batterij op peil te houden. Aan het eind heb jij Een goed gevoel in je

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

Vertaling Engels Gedicht / songteksten

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

Nadere informatie

Ius Commune Training Programme Amsterdam Masterclass 15 June 2018

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

Nadere informatie

OPEN TRAINING. Onderhandelingen met leveranciers voor aankopers. Zeker stellen dat je goed voorbereid aan de onderhandelingstafel komt.

OPEN TRAINING. Onderhandelingen met leveranciers voor aankopers. Zeker stellen dat je goed voorbereid aan de onderhandelingstafel komt. OPEN TRAINING Onderhandelingen met leveranciers voor aankopers Zeker stellen dat je goed voorbereid aan de onderhandelingstafel komt. Philip Meyers Making sure to come well prepared at the negotiation

Nadere informatie

MyDHL+ Tarief berekenen

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

Nadere informatie

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

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

Nadere informatie

Love & Like FILE 2 LOVE & LIKE BK 2

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

Nadere informatie

Media en creativiteit. Winter jaar vier Werkcollege 7

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

Nadere informatie

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

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

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

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

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

Appendix A: The factor analysis for the immersion questionnaire

Appendix A: The factor analysis for the immersion questionnaire 1 Appendix A: The factor analysis for the immersion questionnaire 2 3 Summary of exploratory factor analysis for the immersion questionnaire. Ik voelde mij zoals de hoofdpersoon zich voelde. 0.85 0.23-0.03-0.05-0.13

Nadere informatie

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

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

Nadere informatie

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

Continuous testing in DevOps met Test Automation

Continuous testing in DevOps met Test Automation Continuous ing in met Continuous testing in met Marco Jansen van Doorn Tool Consultant 1 is a software development method that emphasizes communication, collaboration, integration, automation, and measurement

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

MyDHL+ Exportzending aanmaken

MyDHL+ Exportzending aanmaken MyDHL+ Exportzending aanmaken Exportzending aanmaken In MyDHL+ is het aanmaken van een exportzending zo eenvoudig mogelijk gemaakt. De website en deze handleiding zal u stap voor stap erdoorheen leiden.

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Bewijzen en Technieken 1 7 januari 211, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe.

Nadere informatie

3 I always love to do the shopping. A Yes I do! B No! I hate supermarkets. C Sometimes. When my mother lets me buy chocolate.

3 I always love to do the shopping. A Yes I do! B No! I hate supermarkets. C Sometimes. When my mother lets me buy chocolate. 1 Test yourself read a Lees de vragen van de test. Waar gaat deze test over? Flash info 1 In the morning I always make my bed. A Yes. B No. C Sometimes, when I feel like it. 2 When I see an old lady with

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

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

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

Global TV Canada s Pulse 2011

Global TV Canada s Pulse 2011 Global TV Canada s Pulse 2011 Winnipeg Nobody s Unpredictable Methodology These are the findings of an Ipsos Reid poll conducted between August 26 to September 1, 2011 on behalf of Global Television. For

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

Teksten van de liederen die gospelkoor Inspiration tijdens deze Openluchtdienst zingt.

Teksten van de liederen die gospelkoor Inspiration tijdens deze Openluchtdienst zingt. Don t you worry There s an eternity behind us And many days are yet to come, This world will turn around without us Yes all the work will still be done. Look at ever thing God has made See the birds above

Nadere informatie

Hetty Verzaal Elise van der Giessen

Hetty Verzaal Elise van der Giessen Hetty Verzaal Elise van der Giessen Welcome and introduction Who amongst you doesn t speak Dutch? Who amongst you is working with clients with mental and/or physical disabilities? Who amongst you has experience

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

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

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