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 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 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: https://connect.microsoft.com/visualstudio/downloads. 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 https://roslyn.codeplex.com/wikipage?title= 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 https://connect.microsoft.com/visualstudio/roslyntest Sander Gerz Sander Gerz is a software architect and co-owner of Solvec (www.solvec.com), 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

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

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

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

Nadere informatie

ETS 4.1 Beveiliging & ETS app concept

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

Nadere informatie

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

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

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

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

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

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

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

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

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

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

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

Nadere informatie

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

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

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

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

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

Usage guidelines. About Google Book Search

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

Nadere informatie

Over dit boek. Richtlijnen voor gebruik

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

Nadere informatie

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

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

Nadere informatie

Functioneel Ontwerp / Wireframes:

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

Nadere informatie

Cameramanager LSU Installation Guide

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

Nadere informatie

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

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

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

Nadere informatie

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

Intermax backup exclusion files

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

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Analyse 8 december 203, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe. Als jeeen 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

Plotten. technisch tekenwerk AUTOCAD 2000

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

Nadere informatie

Installatie instructies

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

Nadere informatie

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

Synergia - Individueel rapport

Synergia - Individueel rapport DOELSTELLING : Ensuring sufficient funding for projects in cost-generating departments of 16.04.2014 16.04.2014 13:53 1. Inleiding Deze inleiding is vrij te bepalen bij de aanmaak van het rapport. 16.04.2014

Nadere informatie

Buy Me! FILE 5 BUY ME KGT 2

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

Nadere informatie

Workflow en screenshots Status4Sure

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

Nadere informatie

Tester, hoe word jij geschikt voor de toekomst?

Tester, hoe word jij geschikt voor de toekomst? Tester, hoe word jij geschikt voor de toekomst? Testnet voorjaarsevent Marieke Brinkman en Marieke Mouwe Wie zijn wij Marieke B Marieke M 2010 Capgemini. All rights reserved. 1 Insert "Title, Author, Date"

Nadere informatie

Leeftijdcheck (NL) Age Check (EN)

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

Nadere informatie

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

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

Nadere informatie

Tentamen Objectgeorienteerd Programmeren

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

Nadere informatie

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

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

Nadere informatie

Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest.

Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest. WAT IS EEN UNIT TEST? Een unit test is een test om de functionaliteit van stukken code te controleren. Een goede unit test waarborgt een consistente werking van een klein onderdeel (een unit ) van de broncode.

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

WWW.EMINENT-ONLINE.COM

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

Nadere informatie

beginnen met bloggen (kleine workshop Wordpress)

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

Nadere informatie

Y.S. Lubbers en W. Witvoet

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

Nadere informatie

CHROMA STANDAARDREEKS

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

Nadere informatie

Mobile Devices, Applications and Data

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

Nadere informatie

ATOS Viewer for Dental Frameworks User Manual

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

Nadere informatie

Cameramanager LSU Installation Guide

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

Nadere informatie

LDA Topic Modeling. Informa5ekunde als hulpwetenschap. 9 maart 2015

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

Nadere informatie

Grammatica uitleg voor de toets van Hoofdstuk 1

Grammatica uitleg voor de toets van Hoofdstuk 1 Grammatica uitleg voor de toets van Hoofdstuk 1 Vraagzinnen: Je kunt in het Engels vraagzinnen maken door vaak het werkwoord vooraan de zin te zetten. Bijv. She is nice. Bijv. I am late. Bijv. They are

Nadere informatie

MobiDM App Handleiding voor Windows Mobile Standard en Pro

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

Nadere informatie

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

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

Nadere informatie

Aim of this presentation. Give inside information about our commercial comparison website and our role in the Dutch and Spanish energy market

Aim of this presentation. Give inside information about our commercial comparison website and our role in the Dutch and Spanish energy market Aim of this presentation Give inside information about our commercial comparison website and our role in the Dutch and Spanish energy market Energieleveranciers.nl (Energysuppliers.nl) Founded in 2004

Nadere informatie

Tim Akkerman - Head of Mobile

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

Nadere informatie

Continuous Delivery. Sander Aernouts

Continuous Delivery. Sander Aernouts Continuous Delivery Sander Aernouts Info Support in een notendop Maatwerk softwareontwikkeling van bedrijfskritische kantoorapplicaties Business Intelligence oplossingen Managed IT Services Eigen Kenniscentrum

Nadere informatie

Omnichannel klantcommunicatie. Roberto Nagel M-EDP Solutions Manager Document Dialog

Omnichannel klantcommunicatie. Roberto Nagel M-EDP Solutions Manager Document Dialog Omnichannel klantcommunicatie Roberto Nagel M-EDP Solutions Manager Document Dialog Inhoud Wat is omnichannel? Hoe kom je er? Wat betekent dit voor de documentprofessional? Omnichannel retail Winkel website

Nadere informatie

Beste ouder / verzorger, Welkom bij Mijnschoolinfo, het communicatie platform voor basisonderwijs.

Beste ouder / verzorger, Welkom bij Mijnschoolinfo, het communicatie platform voor basisonderwijs. Handleiding Registratie Mijnschoolinfo en App Nederlandstalig pagina 1-7 Registration Procedure Mijnschoolinfo and App English version see page : 8-16 Beste ouder / verzorger, Welkom bij Mijnschoolinfo,

Nadere informatie

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

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

Nadere informatie

CREATING VALUE THROUGH AN INNOVATIVE HRM DESIGN CONFERENCE 20 NOVEMBER 2012 DE ORGANISATIE VAN DE HRM AFDELING IN WOELIGE TIJDEN

CREATING VALUE THROUGH AN INNOVATIVE HRM DESIGN CONFERENCE 20 NOVEMBER 2012 DE ORGANISATIE VAN DE HRM AFDELING IN WOELIGE TIJDEN CREATING VALUE THROUGH AN INNOVATIVE HRM DESIGN CONFERENCE 20 NOVEMBER 2012 DE ORGANISATIE VAN DE HRM AFDELING IN WOELIGE TIJDEN Mieke Audenaert 2010-2011 1 HISTORY The HRM department or manager was born

Nadere informatie

Ontpopping. ORGACOM Thuis in het Museum

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

Nadere informatie

Windows Server 2003 EoS. GGZ Nederland

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

Nadere informatie

Scripting 2 TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. ellipse(screenwidth/2, screenheight/2, 140,140); DOOR THIERRY BRANDERHORST

Scripting 2 TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. ellipse(screenwidth/2, screenheight/2, 140,140); DOOR THIERRY BRANDERHORST Scripting 2 ellipse(screenwidth/2, screenheight/2, 140,140); TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. DOOR THIERRY BRANDERHORST ANDROID APPLICATIES Tegenwoordig zijn er duizenden applicaties

Nadere informatie

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

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

Nadere informatie

Virtual Enterprise Centralized Desktop

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

Nadere informatie

Systeem Wand Samenstellings Applicatie. Cabinet configuration tool. Nederlandse handleiding

Systeem Wand Samenstellings Applicatie. Cabinet configuration tool. Nederlandse handleiding Systeem Wand Samenstellings Applicatie Cabinet configuration tool Nederlandse handleiding 1 Handleiding bylsma wand configuratie tool... 2 1.1 Disclaimer... 2 2 Wand samenstellen... 2 2.1 Applicatie lay-out...

Nadere informatie

Invloed van het aantal kinderen op de seksdrive en relatievoorkeur

Invloed van het aantal kinderen op de seksdrive en relatievoorkeur Invloed van het aantal kinderen op de seksdrive en relatievoorkeur M. Zander MSc. Eerste begeleider: Tweede begeleider: dr. W. Waterink drs. J. Eshuis Oktober 2014 Faculteit Psychologie en Onderwijswetenschappen

Nadere informatie

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE. Toets Inleiding Kansrekening 1 22 februari 2013

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

Nadere informatie

Quick scan method to evaluate your applied (educational) game. Validated scales from comprehensive GEM (Game based learning Evaluation Model)

Quick scan method to evaluate your applied (educational) game. Validated scales from comprehensive GEM (Game based learning Evaluation Model) WHAT IS LITTLE GEM? Quick scan method to evaluate your applied (educational) game (light validation) 1. Standardized questionnaires Validated scales from comprehensive GEM (Game based learning Evaluation

Nadere informatie

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

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

Nadere informatie

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

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

Nadere informatie

Model driven Application Delivery

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

Nadere informatie

Datum 15 juni 2006 Versie 1.0.6. Exchange Online. Handleiding voor gebruiker Release 1.0

Datum 15 juni 2006 Versie 1.0.6. Exchange Online. Handleiding voor gebruiker Release 1.0 Datum 1.0.6 Exchange Online Handleiding voor gebruiker Release 1.0 1.0.6 Inhoudsopgave 1 Instellingen e-mail clients 2 1.1 Gebruik via Outlook 2003 2 1.2 Gebruik via ActiveSync 15 1.3 Gebruik via andere

Nadere informatie

Meet your mentor and coach

Meet your mentor and coach Young Professional Program The importance of having a mentor in business Meet your mentor and coach What do Larry Page, and Steve Jobs have in common? They ve all received guidance from mentors. Yes even

Nadere informatie

De Samenhang tussen Dagelijkse Stress en Depressieve Symptomen en de Mediërende Invloed van Controle en Zelfwaardering

De Samenhang tussen Dagelijkse Stress en Depressieve Symptomen en de Mediërende Invloed van Controle en Zelfwaardering De Samenhang tussen Dagelijkse Stress en Depressieve Symptomen en de Mediërende Invloed van Controle en Zelfwaardering The Relationship between Daily Hassles and Depressive Symptoms and the Mediating Influence

Nadere informatie

Things to do before you re 11 3/4

Things to do before you re 11 3/4 Counting Crows 1 Things to do before you re 11 3/4 Lees de tekst en beantwoord de vragen. - Maak deze zin af: De schrijver van de tekst vindt dat kinderen - Welke dingen heb jij wel eens gedaan? Kruis

Nadere informatie

Icoon/Icon Betekenis Description. Change scheduling Online. Gaat offline op (datum/tijd) Online. Going offline on (date/time)

Icoon/Icon Betekenis Description. Change scheduling Online. Gaat offline op (datum/tijd) Online. Going offline on (date/time) Algemeen/General Gepubliceerd maar gewijzigd Published but changed Meer acties op geselecteerde content More actions on selected content Gepubliceerd en niet gewijzigd Published and not changed Terugdraaien

Nadere informatie

Next Generation Poultry Health Redt Innovatie de Vleeskuikenhouder?

Next Generation Poultry Health Redt Innovatie de Vleeskuikenhouder? Next Generation Poultry Health Redt Innovatie de Vleeskuikenhouder? Paul Louis Iske Professor Open Innovation & Business Venturing, Maastricht University De wereld wordt steeds complexer Dit vraagt om

Nadere informatie

1. In welk deel van de wereld ligt Nederland? 2. Wat betekent Nederland?

1. In welk deel van de wereld ligt Nederland? 2. Wat betekent Nederland? First part of the Inburgering examination - the KNS-test Of course, the questions in this exam you will hear in Dutch and you have to answer in Dutch. Solutions and English version on last page 1. In welk

Nadere informatie

Fans talking about Martin

Fans talking about Martin Fans about Martin Wat vind jij van Martin Garrix? 1 read Fans talking about Martin Martin Garrix is a world famous DJ from Holland. Yesterday we interviewed two of Martin s fans. This is what they said.

Nadere informatie

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

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

Nadere informatie

Ervaringen met begeleiding FTA cursus Deployment of Free Software Systems

Ervaringen met begeleiding FTA cursus Deployment of Free Software Systems Ervaringen met begeleiding FTA cursus Deployment of Free Software Systems Frans Mofers Nederland cursusmateriaal & CAA's alle cursusmateriaal vrij downloadbaar als PDF betalen voor volgen cursus cursussite

Nadere informatie

Dutch survival kit. Vragen hoe het gaat en reactie Asking how it s going and reaction. Met elkaar kennismaken Getting to know each other

Dutch survival kit. Vragen hoe het gaat en reactie Asking how it s going and reaction. Met elkaar kennismaken Getting to know each other Dutch survival kit This Dutch survival kit contains phrases that can be helpful when living and working in the Netherlands. There is an overview of useful sentences and phrases in Dutch with an English

Nadere informatie

Maillijsten voor medewerkers van de Universiteit van Amsterdam

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

Nadere informatie

NEDERLANDS. Display Instructies. Knoppen. Geeft afwisselend Tijd, Datum en Temperatuur weer, kan ook ingesteld worden op enkel tijd

NEDERLANDS. Display Instructies. Knoppen. Geeft afwisselend Tijd, Datum en Temperatuur weer, kan ook ingesteld worden op enkel tijd NEDERLANDS Het ziet eruit als een simpel blokje hout, maar maak een geluid (knip met je vingers, kuch, klap in je handen, of tip op de bovenkant) en het geeft onmiddelijk en afwisselend tijd, datum en

Nadere informatie

Agile Project Management volgens Scrum. David Griffioen 21 mei 2007

Agile Project Management volgens Scrum. David Griffioen 21 mei 2007 Agile Project Management volgens Scrum David Griffioen 21 mei 2007 Agenda Agile Scrum Proces verbetering in Scrum Verbeteren bij Planon Vragen Een aantal vragen hand opsteken graag Wie is bekend met Agile

Nadere informatie

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

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

Nadere informatie

Digital municipal services for entrepreneurs

Digital municipal services for entrepreneurs Digital municipal services for entrepreneurs Smart Cities Meeting Amsterdam October 20th 2009 Business Contact Centres Project frame Mystery Shopper Research 2006: Assessment services and information for

Nadere informatie

! GeoNetwork INSPIRE Atom!

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

Nadere informatie

Prove Everything or Die. Presentatie meetbaarheid Woensdag 9 mei 2012 Robin den Hoed

Prove Everything or Die. Presentatie meetbaarheid Woensdag 9 mei 2012 Robin den Hoed Prove Everything or Die Presentatie meetbaarheid Woensdag 9 mei 2012 Robin den Hoed Een stelling Met een PR- budget van 20.000 hebben we een mediawaarde gerealiseerd van 60.000 en 500 nieuwe fans op Facebook

Nadere informatie

Healthy people want everything, sick people want only one thing. would love to see a Hospital Teacher

Healthy people want everything, sick people want only one thing. would love to see a Hospital Teacher Healthy people want everything, sick people want only one thing. would love to see a Hospital Teacher Consultant Education Sick Pupils Educational Service Centre University Medical Centre The Netherlands

Nadere informatie

Dit document beschrijft belangrijke aandachtspunten voor de installatie van Deep Defender. Ook omschrijft dit document hoe de beheerder kan omgaan

Dit document beschrijft belangrijke aandachtspunten voor de installatie van Deep Defender. Ook omschrijft dit document hoe de beheerder kan omgaan Dit document beschrijft belangrijke aandachtspunten voor de installatie van Deep Defender. Ook omschrijft dit document hoe de beheerder kan omgaan met Threat meldingen, driver problemen en hoe het product

Nadere informatie

Researchcentrum voor Onderwijs en Arbeidsmarkt The role of mobility in higher education for future employability

Researchcentrum voor Onderwijs en Arbeidsmarkt The role of mobility in higher education for future employability The role of mobility in higher education for future employability Jim Allen Overview Results of REFLEX/HEGESCO surveys, supplemented by Dutch HBO-Monitor Study migration Mobility during and after HE Effects

Nadere informatie

Als u dit dan probeert te doen dan zal hij zeggen dat de versie van Silverlight al geïnstalleerd is.

Als u dit dan probeert te doen dan zal hij zeggen dat de versie van Silverlight al geïnstalleerd is. GPS-eSuite werkt niet meer in Google Chrome versie 42. Indien uw Google Chrome een update heeft gehad naar de laatste versie 42 of hoger dan zal u merken dat hij constant komt vragen om Microsoft Silverlight

Nadere informatie

Next-Generation Youth Care If we knew what we are doing, we wouldn t call it innovation!

Next-Generation Youth Care If we knew what we are doing, we wouldn t call it innovation! Next-Generation Youth Care If we knew what we are doing, we wouldn t call it innovation! Paul Louis Iske Professor Open Innovation & Business Venturing, Maastricht University Internationaal Instituut voor

Nadere informatie

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

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

Nadere informatie

SharePoint intranet bij Barco Beter (samen)werken en communiceren

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

Nadere informatie

Handleiding Nederlands leren. in de bibliotheek NT2 SCHOOL NT2. Natuurlijk Nederlands leren en inburgeren

Handleiding Nederlands leren. in de bibliotheek NT2 SCHOOL NT2. Natuurlijk Nederlands leren en inburgeren Handleiding Nederlands leren in de bibliotheek NT SCHOOL NT Natuurlijk Nederlands leren en inburgeren Nederlands leren in de bibliotheek In Bibliotheek Zuid-Kennemerland kun je Nederlands leren met boeken

Nadere informatie