Centric connect.engage.succeed

Techorama 2019: lessons learned

Geschreven door Niek de Gooijer - 22 oktober 2019

Niek de Gooijer
Dit jaar werd Techorama voor de tweede keer in Nederland georganiseerd. En ik was erbij! Het technologie-event vond plaats van 30 september tot en met 2 oktober in Cinema Ede. In die drie dagen heb ik veel kennis opgedaan, heerlijk gegeten en vooral: genoten! In dit artikel informeer ik je graag over de meest noemenswaardige thema’s en nieuwtjes die tijdens het event de revue passeerden. Uiteraard is dit maar het puntje van de ijsberg van wat ik gezien en geleerd heb.

Workshop

Op de eerste dag konden we een workshop volgen. Ik koos voor de workshop Become a Better C# Developer van Kathleen Dollard. Tijdens deze workshop kwamen belangrijke thema’s aan bod, zoals de toekomst van .NET, veelvoorkomende fouten en valkuilen, optimalisatie én refactoring. Ook mooi was dat Kathleen haar inkomsten van haar workshop op Techorama doneerde aan de KWF.

Toekomst van .NET

We zitten nu op .NET framework 4.8 en .NET Core 3.0. Maar wat gaat er gebeuren in de toekomst? Hiervoor heeft Microsoft een plan opgesteld.

.NET framework 4.8

Kathleen vertelt dat dit framework nagenoeg niet meer wordt bijgewerkt, afgezien van security-updates. Ook wordt dit niet het platform voor crossplatformondersteuning. Maar omdat het .NET framework sterk in Windows is verweven, is de kans groot dat het altijd deel blijft uitmaken van Windows. Kortom, je hoeft niet bang te zijn dat je huidige projecten over twee jaar niet meer werken. Officieel zijn er geen harde data genoemd, maar je kunt er meer over lezen op de website van Microsoft.

.NET Core 3.0

.Net Core heeft het volgende schema:

Microsoft wil elke drie maanden een nieuwe versie uitbrengen. De versie zonder Long Time Support (LTS) en versie met LTS wisselen elkaar af. Als je nu een nieuw project begint, is het verstandig te overwegen om .NET Core te gebruiken. Maar naar welke versie ga je dan? Kathleen zegt daar - in het kort - het volgende over:

Als je software regelmatig wordt bijgewerkt, ga dan mee met de driemaandelijkse releases. Verwacht je dat je software minder vaak wordt bijgewerkt, kies dan voor een LTS-versie. .NET Core wordt namelijk niet meer bijgewerkt via een Windows-update.

Veelvoorkomende fouten en valkuilen

Tijdens dit deel van de workshop geeft Kathleen tips en vertelt ze over veelgemaakte fouten (sommige zullen je misschien nog verassen). De voorbeelden zijn in C# maar gaan in veel andere talen ook op.

Doe geen berekeningen met data

Dit gaat er vooral om dat je niet gaat proberen te rekenen met data, maar hiervoor bekende bibliotheken gebruikt. Stel je voor dat je een berekening moet doen voor een verloopdatum die twee jaar in de toekomst ligt. Mogelijk maak je dan de volgende functie:

  public DateTime getExpiration()
  {
      var now = new DateTime();
      return new DateTime(now.Year + 1, now.Month, now.Day);
  }

Dit werkt prima. Behalve op de schrikkeldag. Want dan krijg je een System.ArgumentOutOfRangeException.

In de plaats daarvan kun je beter het volgende doen:

  public DateTime getExpiration()
  {
      return new DateTime().AddYears(1);
  }

Mix nooit datatypes

Gaat er vooral om dat je bij berekeningen float, single en double niet moet mengen, omdat je dan onverwachte resultaten kunt krijgen.

Single en double hebben infinity en geven nooit een exception

Double geeft nooit een foutmelding. Je kunt bijvoorbeeld delen door 0 zonder dat je een exception krijgt.       

double a = 3;
double b = 0;
double c = a / b; //Geeft geen foutmelding maar infinity

Ook is double belachelijk groot. Veel groter als int.

Checkbox voor integer overflow/underflow

Of je een exceptie krijgt bij de max overschrijden van een integer is op projectbasis in te stellen. Dit is een default die bij visual basic anders staat.

Floats zijn snel. Decimal is precies. Neem het volgende voorbeeld:

double a = 0.1;
double b = 0.2;
bool c = a + b == 0.3; //false
decimal x = 0.2;
decimal y = 0.1;
decimal z = x + y == 0.3; //true

Dit toont aan dat je nooit double moet gebruiken als de uitkomst precies moet zijn. Denk hierbij aan berekeningen van uren en valuta voor facturen of rapporten. Als de uitkomst niet precies hoeft te zijn, maar snel, dan is float prima. Denk hierbij aan pixelberekeningen voor een grafische weergave. 

Async heeft toegevoegde waarde op de server

Iedereen kent het voorbeeld en gebruik van async om de client reactief en snel te houden. Dit zorgt ervoor dat het scherm niet bevriest als je een langlopend proces aanroept met een knop. Server side heeft toegevoegde waarde, omdat een langlopend proces het mogelijk maakt ondertussen een andere client te helpen.

Optimalisatie

Hier ging de workshop in op optimalisatie voor je code. Hoe je objecten door de garbage collector worden opgeruimd.

Stack, Heap, Garbage collector

Veel mensen zijn al bekend met het fenomeen van stack en heap voor het geheugen. Wat minder bekend is, is dat .NET een grote en een kleine heap heeft. De kleine heap is snel en vluchtig, de grote heap is trager. De kleine heap is voor objecten tot 85k en objecten van de 1e en 2e generatie. De grote heap is voor de 3e generatie van een object en grotere objecten. Ga voor meer informatie hierover naar de website van Microsoft.

Dag 1 en keynote

Naast de workshop viel er op dag een nog veel meer te beleven, zoals de keynote van Steven Van Belleghem over customer experience in the age of AI platforms. Daarbij ging hij in op hoe techniek de wereld verovert. In China, bijvoorbeeld, wordt bijna uitsluitend betaald via WeChat Pay. Zelfs de zwervers hebben daar een QR-code om giften te krijgen via dit programma. Contant geld wordt niet meer gebruikt en pinnen is ook bijna uitgestorven. Ondertussen hebben we allemaal een slimme assistente in de broekzak en volgen we blindelings de navigatie om van A naar B te komen. Technologie is hier en gaat niet meer weg. Bovendien gaan de technologische ontwikkelingen sneller dat we eigenlijk kunnen bijhouden.

Eerste sessie: cryptografie

Na de keynote, een koffie en een croissant ging ik op weg naar de eerste sessie. Ik ben altijd geïnteresseerd geweest in cryptografie en beveiliging, dus mijn eerste keuze ging uit naar Cryptography for newcomers: the hitchhiker's guide to cipher in devsm4dz. Deze sessie is eigenlijk zeer kort samen te vatten. Maak gebruik van moderne en hedendaagse bibliotheken om je gegevens te versleutelen. Hier hebben al veel mensen over nagedacht en gediscussieerd, en het is bijna onmogelijk om zelf een beter systeem te maken. Of zoals de spreker adviseerde: never be a sorcerers apprentice.

Git

Mijn tweede sessie ging over mijn favoriete versiebeheersysteem: git. Edward Thompson vertelde hoe je met minder problemen in git kunt werken.

Regeleinden

Een veelvoorkomend probleem in git, is dat de regeleinden van Windows en Unix-systemen verschillen. Edward gaf de tip om dit te normaliseren. Hij legt het ook uit in zijn blog.

Stage je werkzaamheden vaker

Git staging area kan een bron van geschiedenis zijn. Bestanden die je ooit gewijzigd hebt, verwijderd hebt weer revert hebt en toch weer terug wilt hebben. Hier kun je Git recover voor gebruiken. Ook hierover heeft Edward een blog geschreven.

LFS

Git LFS (Large File System)is een manier om efficiënt om te gaan met grote bestanden. Hierover kun je meer lezen op de website van git.

Null safety in C# 8.0

Iedereen die weleens een bug-melding gezien heeft met de tekst NullReferenceException kan over dit onderwerp mee praten. In C# 8 kun je nu compile time veel strikter omgaan met nulls. Dit verkleint de kans op NullReferenceExceptions enorm en zorgt voor stabielere en betere code. Microsoft heeft hierover een blog geschreven. 

Correcting Common Async/Await Mistakes

Hier kan ik alles over vertellen, maar je kunt zijn presentatie ook direct hier bekijken. Deze presentatie is opgenomen op de NDC Oslo, maar is dezelfde als in Ede.

IT depends: loving .NET Core dependency injection or not

Dependency Injection(DI); hiervoor heb je veel verschillende bibliotheken. Maar je kunt het ook zelf maken. In .NET Core zit het tegenwoordig namelijk ingebakken via de nieuwe HostBuilder. Hier zitten een aantal diensten in, waaronder DI. Bij het opzetten van de HostBuilder heb je de mogelijkheid om je DI te configureren. Je kunt hier bijvoorbeeld afhankelijk van je omgeving/build andere diensten inladen, lifetime van je objecten bepalen en nog veel meer. Je hebt ook de mogelijkheid om bij het opstarten van je applicatie te valideren dat alle dependencies goed geladen kunnen worden. Dit kun je doen via ValidateOnBuild en voorkomt vervelende runtimefouten.

Dag 2 Get out of (Technical) Debt

Veel programmeurs kennen de SOLID-principles wel. Dit levert goede, uitbreidbare en onderhoudbare code op. Toch kun je nog altijd een Technical Debt krijgen. Voor degene die er nog niet bekend mee zijn. Elke keer als je een keus maakt om iets snel, maar slordig op te lossen neem je eigenlijk een kleine schuld op je. Je leent tijd. Dit kun je zien als Technical Debt. Maar niet alle geleende tijd is even waardevol. Soms leen je tijd om iets te proberen op een slordige manier, zoals bij een proof of concept. Als het concept niet aanslaat, gooi je het daarna weer weg en is de schuld niet hoog. Maar soms bezorgt een slordige manier je een enorme last. Dan is de schuld hoger. Om op deze schuld grip te krijgen, kun je een Technical debt register gebruiken. En van het acroniem stable:

S: Smell your code

T: Tiny problems first

A: Augment your tests

B: Back up

L: Leave it better than you found it

E: Expect good reasons

Cool things you can do with .NET Core tooling

.NET Core wordt ingezet als bibliotheek om software mee te ontwikkelen. Maar .NET Core komt ook met een hoop tools die je hierbij helpen.

Try.NET als documentatie

Op de website https://try.dot.net kun je met dotnet experimenteren zonder .NET te installeren. Wat nog cooler is, is dat je dit kunt gebruiken om je code te documenteren. Je kunt via markdown-bestanden stukken code weergeven en draaien in je browser.

.NET Core CLI extensies

.NET Core CLI is een krachtige tool op zichzelf. Maar je kunt het zelf uitbreiden met nog veel meer mogelijkheden. Hier heeft iemand op Github al een uitgebreide lijst voor gemaakt.

dotnet new

Als je een nieuw project start, vind je het vast handig om te weten wat je er allemaal mee kunt. Hier heeft Microsoft een handige lijst van aangeleverd. Deze is ook te vinden op Github.

HttpRepl

API's ontdekken en verkennen kan soms veel werk zijn. Hiervoor zijn dan ook al veel programma's op de markt, zoals Postmen en SOAPUI. .NET Core komt nu met een eigen variant in de vorm van een REPL (Read Evaluate Print Loop). Met de HttpRepl verken je op speelse wijze een rest API. Je maakt verbinding en je verkent de API alsof je op je bestandssysteem navigeert. Je kunt endpoints weergeven via ls . Navigeren via cd en op de juiste endpoints commando’s sturen via GET, POST en ander http verbs.

Performance monitoren in .NET Core

Je kunt nu in .NET Core je performance monitoren en diagnosteren via de CLI.Zo kun je memory dumps en traces maken. Microsoft heeft hier een blog over geschreven.

From EventStorming to CoDDDing

De laatste sessie van de conference was voor mij ook de meeste inspirerende. Ik had nog niet van EventStorming gehoord en ben maar een klein beetje bekend met Domain Driven Design. In deze sessie kwamen veel pijnpunten voorbij, waar ik dagelijks tegen aanloop. EventStorming is een manier om complexe problemen vanuit een businessperspectief om te zetten naar een model die in de software goed werkt. Tijdens de sessie werd dit uitgebreid met voorbeelden in Domain Driven Design. Met deze concepten ga ik zeker nog aan de slag. Bezoek voor meer informatie de website voor EventStorming.

Ending keynote

Richard Campbell sloot de conference af met een presentatie over ruimtereizen naar de maan en verder. Als trouwe luisteraar van de DotNetRocks podcast was ik zeer benieuwd naar deze keynote. En zoals hij in zijn Geek outs al veel over de ruimte verteld heeft, was ook dit weer een zeer vermakelijke eindkeynote met leuke en unieke inzichten.

Partner expo

Behalve het volgen van workshops en sessies waren er ook nog andere dingen te doen. Zo was er een grote partnerexpo waar ook Centric van de partij was.

Tags:.NET

     
Schrijf een reactie
  • Captcha image
  • Verzenden