Techorama 2019

Hoogtepunten van Techorama 2019

29 oktober 2019 door Danny Schalken

Bijna het voltallige Dev-team heeft op 1 en 2 oktober Proxsys weer mogen vertegenwoordigen op Techorama 2019 in bioscoop Pathé te Ede. Wat een mooie ervaring was dit weer!

Parkeren leverde even wat gedoe op, maar eenmaal binnengekomen en aangemeld, hebben we onze “agenda’s” gesynct en zijn we naar de eerste sessies gegaan.

Hierbij praten we je bij over de hoogtepunten:

What’s new in ASP.Net Core 3.0

Microsoft heeft in de loop der jaren een aantal programmeertalen ontwikkeld, waarbij C# en het bijbehorende .Net Framework (eenvoudig gezegd, de grote code bibliotheek) door Proxsys dagelijks gebruikt wordt. Enkele weken geleden is van C# versie 8.0 uitgekomen en van het .Net Core framework versie 3.0.

Naast meerdere andere sessie die we gevolgd hebben over dit onderwerp, legt Scott Allen in deze sessie duidelijk de verschillend uit met de voorgaande frameworks. In 3.0 zit een benchmark tool opgenomen en Scott laat hier duidelijk het verschil zien qua performance op verschillende vlakken. Het blijkt meteen dat deze nieuwe versie vele malen leaner (& meaner) is dat de voorgaande. Voorheen werden vele bibliotheken al ingeladen voordat je ook maar een onderdeel uit een bibliotheek had aangeroepen. Nu is dit niet meer het geval en krijg je een uitgeklede versie en kun je zelf bepalen welke elementen ingeladen worden.

ASP.Net (Core) maakt gebruikt van het zogenaamde MVC model en dit zal steeds verder op de achtergrond verdwijnen, althans wat Scott betreft wel. Hij geeft duidelijk de voorkeur aan de zogenaamde “Razor” pages en ook aan de nieuwe “Blazor” engine. Interessante aan die laatste is dat, waar normaliter Javascript (en TypeScript) in de front-end gebruikt wordt; het nu mogelijk is om de back-end programmeertaal te gebruiken bij front-end ontwikkeling.

Een andere interessante verandering is dat Newtonsoft niet meer gebruikt wordt als de JSON engine, maar Microsoft een eigen variant heeft gemaakt die, naar eigen zeggen, vele malen sneller is. Ook is het mogelijk om (realtime) hele grote bestanden te gebruiken zonder deze volledig in het geheugen te laden. In een voorbeeld gebruikte Scott een (.json-)bestand van 1GB.

Een laatste interessante en zeer bruikbare feature is “nullable reference types”. Om niet te technisch te worden… Maar het komt het er op neer dat de compiler je code nakijkt, voortijdig advies geeft en er voor zorgt dat mogelijke fouten (exceptions) voor lege waarden gevonden worden, waarbij je nog beter leert nadenken waarom je een bepaalde waarde teruggeeft (code-quality).

Er is nog veel meer over te vertellen, maar op deze pagina (https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8) is veel meer informatie te vinden voor de geïnteresseerden onder ons.

Ook is er een sessie gevolgd over Visual Studio 2019 en de nieuwe features die daar in zitten. Die zijn hier te vinden: https://docs.microsoft.com/en-us/visualstudio/ide/whats-new-visual-studio-2019?view=vs-2019

Learn to say “NO!” without being a Jerk

Deze sessie werd gegeven door Christina Aldan. Christina is een TEDx speaker, trainer en digital advertising consultant. Zij praat in deze sessie veel vanuit haar eigen ervaring en met name dan de (fysieke) pijn die zij heeft ervaren om iedereen op elk moment altijd “blij” te proberen te maken. “Here’s Christina, I’m here to save your day”. Ze was overcommitted, altijd aan het rennen, altijd laat aan het werk, zei nooit “Nee” en op een gegeven ogenblik wordt dat gedrag een gewoonte en schept bij andere een verwachting. Het gaat namelijk altijd zo. Mooie is dat waarschijnlijk er niemand om gevraagd heeft. Je creëert het dus zelf.

Uiteindelijk heeft ze geleerd om even een pauze te nemen, even rustig te zitten, na te denken, “Nee” te zeggen. Ze had o.a. altijd pijn in de handen (o.a. carpaal-tunnel syndroom en andere delen van het lichaam). Ze werd door een vriendin teruggefloten die vroeg “Wat ga je er aan doen? Wat gaan we samen doen?” Die vriendin confronteerde haar met een film, waarin mensen zonder handen (die ze verloren waren door ziekte) voorkwamen. “Is dit wat je wil?”. “NO!”

Niet “Nee” kunnen zeggen, is altijd (op een vorm van) angst gebaseerd:

  • Je wilt iets niet missen (FOMO).
  • Je wilt (altijd) aardig gevonden worden.
  • Ik “wil” helpen, want ik wil hier blijven (werken).
  • Etc.

Tips die bijgebleven zijn, zijn:

  • Fysieke klachten goed op letten. Passie mag nooit belangrijker zijn dan je pijn.
  • Kijk hoe belangrijk JIJ zelf bent.
  • “Take a minute!”. Neem eens tijd voor jezelf om na te denken, jezelf vitaal te houden.
  • Identificeer je probleem en los het op.
  • Het is altijd je EIGEN keuze!
  • Focus en (gezamenlijk) doel bepalen.
  • Duidelijke grenzen stellen (“Goede schuttingen maken goede buren”).
  • “Slow down”.

Het doel is om je brein te hacken en opnieuw te bekabelen. Dus veel oefenen.
Hoe dan?

  • Blok tijd (in je agenda) en gebruik die tijd ook voor het onderwerp wat je bedacht hebt. Niet weggeven aan andere zaken.
  • Stel jezelf de vraag “voel ik mezelf verplicht?”.
  • Kan ik van de vraag die gesteld wordt, een volmondig “JA” maken? M.a.w. sta ik er zelf achter?
  • Oefenen! “Gamify it”. Maak er spelletje(s) van, met als doel “Nee” te zeggen.
  • Beslis! Maak een keuze!
  • Herhaal tegen jezelf (duizenden keren): “Ik ben een expert in NEE zeggen” (hack your brain).

Let’s talk about Mental Health

Deze sessie werd gegeven door Arthur Doler. Arthur is al vele jaren software-engineer en, zoals hij zelf zegt, een echte “nerd”.

In deze sessie vertelde Art over zijn eigen situatie hoe hij als (klein) kind zichzelf niet hetzelfde voelde als andere kinderen. Ook is bij de diagnose ADHD gesteld. Hij heeft zelf traumatische ervaringen gehad en is uiteindelijk er bovenop gekrabbeld.

Zijn voornaamste tip is: “Zoek naar de menselijke kant, iedereen is uniek. Respecteer elkaar.”

Zijn held is Brad Warner. Voor de geïnteresseerden onder ons, staat een video online op YouTube: https://www.youtube.com/watch?v=bp9tRNH0FtM

Building Trust in Teams

Richard Campbell spreekt in deze sessie vol overgave over zijn ervaringen in het leiden en zelf samenwerken in teams. We praten natuurlijk niet over Microsoft Teams, de applicatie, maar over teams met mensen die een gezamenlijk doel (zouden moeten) hebben.

Dit was een geweldig energieke sessie. Richard vertelt heel natuurlijk en het is een genot om naar hem te luisteren.

Belangrijk is om samen een gezamenlijk doel te hebben. Weten wat de waarde is van je team in de organisatie of binnen een project. Als je niet weet waarom je iets doet, zal er ook nooit 100% commitment zijn. Zoek naar de juiste motivator.

De conclusie is dat vertrouwen de lijm is dat een team sterk maakt. Zonder vertrouwen zijn we maar personen die bij elkaar zitten en (op eilandjes) werken. Laat collega’s aan elkaar zien hoe elkaar werk is, wat men doet. Vaak is onwetendheid de reden dat we niet snappen waarom iemand iets wel of juist niet doet. Creëer begrip!

Op een gegeven ogenblik wordt gevraagd of iemand weet wat de beste vorm van communicatie is. Er komen allerlei antwoorden, maar het antwoord wat Richard heeft is verrassend. Hij begint met WhatsApp. Je kunt hier mee communiceren, maar vaak zijn de berichten en informatie beperkt en er is geen emotionele lading en zeer gevoelig voor verkeerde interpretatie. Dan gaan we naar e-mail. Hier kunnen we al wat meer informatie (zoals bijlagen etc.) toevoegen, maar ook dit is niet bedoeld om uitvoerig te communiceren. Dit soort berichten zijn, hoe korter hoe beter. Vervolgens is samen (face-to-face) gaan zitten en praten misschien wel de beste vorm, vinden de meesten. Maar de beste vorm is … “Pizza”! Die had niemand aan zien komen, de hele zaal lag krom van het lachen.
Richard legt uit waarom… Als mensen voedsel met elkaar delen ontstaat er vertrouwen. Een van de voorbeelden was: vroeger werd voedsel weleens vergiftigd om een (belangrijk) persoon te doden en als men dan samen een maaltijd deelde wist je (redelijk) zeker dat je veilig was. Tevens kan het voorkomen dat er wat op je gezicht zit wat je kwetsbaar maakt.

Conclusie:

  • Lunch regelmatig samen met als doel communicatie. Hoeft niet perse over werk te gaan, beter nog is van niet zelfs.
  • Zoek naar de juiste motivator! Geld hoeft bijvoorbeeld niet altijd de primaire reden te zijn waarom iemand iets doet.
  • Manage Energy”. Zorg voor positieve energie. Ban negatieve energie uit.
  • Wat is de “Customer Value” van het team/project/opdracht? Waarom doen we dit?
  • Ga alleen off-site voor moeilijke beslissingen.
  • Zet voor meetings een duidelijke agenda op met zo min mogelijk punten. 1 of 2 is meer dan voldoende.
  • Respecteer, help en leer elkaar dingen.
  • Zeg nooit dat iets “simpel” is. Wat voor jou eenvoudig is, kan voor een ander moeilijk zijn waardoor die ander een heel ander gevoel uit het gesprek over houdt dan bedoeld was.
  • “Lead Yourself!”

Cryptography for newcomers

In deze sessie werd globaal uitgelegd wat en hoe cryptography was, er werden verschillende methodes doorgenomen voor het beveiligen van data. O.a. Hashing, certificate en TLS/SSL beveiliging langs.

Erg jammer was dat het high-level bleef en niet de diepte in ging; wel even weer wat opgefrist.

API security with oAuth 2 and openid connect in depth

API Security is een belangrijk onderwerp, in deze sessie werd vooral gekeken naar IdentityServer 4 van Microsoft en de connectie van API naar API endpoint.

Voor een leek was deze sessie prima te volgen door de eenvoud waarmee de spreker presenteerde.

De spreker legde het concept als volgt uit: “Stel meneer A maakt een api call naar endpoint1, maar endpoint1 heeft informatie nodig van endpoint2. Je wilt niet dat endpoint2 niet weet wie vraagt om data, je wilt dat endpoint2 hetzelfde weet als endpoint1, namelijk dat meneer A dit opvraagt. Als endpoint2 deze informatie ook heeft kan je makkelijker zoeken in je logs mocht er iets mis zijn gegaan”.

Al met al een erg interessante sessie.

Integrating health checks in your .Net core solutions

Dit was voor een van ons de leukste en interessantste sessie van beide dagen, in deze sessie ging het over “wat zijn nu health checks en hoe maak je ze” en werd verteld door Alex Thissen.

Hij begon basic met wat is nu een health check, dit deed hij door middel van een gesprek met een dokter; hier kwam uit dat je meestal zelf naar de dokter gaat als het niet goed met je gaat en de dokter meet dan bijvoorbeeld je hartslag (dit werd vergeleken met een processor) en zegt hoe het met je gaat, maar het idee van health checks is dat de dokter periodiek gaat vragen hoe het met je gaat en dat je zelf dan de waardes terug geeft.

Health checks worden altijd gedaan met een API endpoint in je code, bijvoobeeld “/health” als er een request naar dit endpoint wordt gedaan begint er een check te draaien op de node waar dit endpoint op draait. Deze check begint met een 200 OK response, mocht er een check te laat reageren dan blijft veranderd dit naar een warning status maar dit is nog voldoende om de code te laten draaien, mocht er een check helemaal niet reageren komt er een 500 error code terug en is het aan degene die de health check heeft gedaan wat voor acties er gedaan moeten worden.

Deze health checks werden in een live demo gedaan; erg interessant, hij liet ook nog een GUI zien voor health checks namelijk “Xabaril/BeatPulse”. Dit is een erg gave GUI waar veel informatie van checks terug kan worden gezocht. Bij Xabaril/Beatpulse worden veel services ondersteund oa. RabbitMq, Redis, Elasticsearch, MySQL, PostgreSql en nog veel meer.

Een klein stukje van deze sessie werd nog besteed aan het dashboarden van health checks in Grafana, dit werd gedaan door middel van Prometheus, Prometheus “schraapt” meestal data van endpoints maar omdat er bij health checks soms geen data snel terug komt werd er vanuit de node waar de health check op draait een push gedaan naar de Prometheus Push gateway waarna het bericht verder ging naar Prometheus. Hierna werd er in Grafana data uit Prometheus gehaald en in een mooi dashboard gestopt waaraan weer een trigger gekoppeld kon worden om andere systemen op de hoogte te brengen.

Het laatste stuk van de sessie ging over health/readiness probes in Kubernetes. Dit was reuze interessant en zeer leerzaam. Alex deed nog een rolling update en je zag hoe Kubernetes wachtte met het het down halen van een oude node totdat de nieuwe node met zijn readiness/health probe ready was.

Dit was echt een super gave en leerzame sessie.

What is go and why should .net developers care?

Tijdens deze sessie werd er door Rainer Stropek uitgelegd wat go (Golang) is, hij begon zijn sessie met de uitleg waarom Golang een goed alternatief was ten opzichte van .Net.

Hier kwam uit dat het minder overhead heeft en dus sneller is ten opzichte van .Net, hij kwam ook met een voorbeeld in Docker, 1 Go container met “hello-world” was 1,55 MB om hetzelfde met een .Net container te doen heb je 219 MB nodig dit is echt een groot verschil.

Hierna ging Rainer basic uitleggen hoe Go in elkaar zat qua mappenstructuur, libraries en de taal zelf, dit was erg goed te volgen en goed uitgelegd.

Deze sessie is ook opgenomen en staat op YouTube (https://www.youtube.com/watch?v=KEMYSh3VxBI)

Building smarter solutions with machine learning

In deze sessie werd uitgelegd wat machine learning in hield en waar het tegenwoordig voor gebruikt wordt.

Het was gaaf om voorbeelden (zoals sales prediction en probability prediction) te krijgen die konden worden gerelateerd aan zaken die we binnen onze eigen organisatie.

De spreker liet zien dat er drie manieren zijn van machine learning bouwen.

  1. De eerste kost een paar dagen en hierbij koop je de techniek in en hoef je alleen de data op te sturen.
  2. De tweede manier was het zelf bedenken van een model maar het berekenen laten gebeuren op de servers.
  3. De derde manier was van scratch alles zelf bedenken.

Build IoT and Embedded solutions with Miscrosoft technology and more

Deze sessie werd gegeven door Pete Brown. Pete is een ervaren spreker en zit vol energie. Hij zou zo uit een rock band op het podium gestapt kunnen zijn.

In deze sessie werd er gepraat over Windows 10 IoT Core/Enterprise en waarvoor deze bedoeld waren. Je raadt het misschien al de Core editie was voor minder krachtige devices zoals een Raspberry Pi en de Enterprise variant was voor krachtigere servers/computers.

Pete liet een voorbeeld zien met wat relais en een webcam voor gezichtsherkenning. Leuk om te zien.

Verder legde hij uit hoe je de code naar een board kon uploaden door middel van een connectie in Visual Studio naar het windows 10 IoT Core board.

Leuke sessie en goed uitgelegd maar jammer genoeg niet heel veel deep-diven in het IoT gedeelte.

A piece of git

Git wordt al veel gebruikt binnen Proxsys. Toch blijft het altijd leuk om te bekijken hoe andere git gebruiken op hun codebase. Tijdens deze sessie hebben we gekeken naar 2 minder bekende functionaliteiten in git, namelijk git-lfs en git-recover.

Git-lfs staat voor git large file system. Normaal staat de volledige repository van git lokaal op de pc/laptop. Wanneer grote bestanden gebruikt worden (denk aan afbeeldingen) kan dit veel data opleveren omdat van elke afbeelding versie de volledige afbeelding in de repository zit. Dit in tegenstelling tot tekst files.

Git-lfs maakt het mogelijk van bepaalde bestanden (bijv. afbeeldingen) alleen de meest recente versie binnen te halen. Dit voorkomt dus dat de lokale data op de machine onnodig groot wordt.

Zelfs met git kan het wel eens mogelijk zijn dat werk verloren gaat door een iets te enthousiaste reset bijvoorbeeld. Op het moment dat het git commando “add” wordt uitgevoerd worden de objecten toegevoegd aan de zogenoemde “object database”. Mocht dan vervolgens dit bestand verwijderd of gereset worden blijft dit object wel in de object database staan. Met git recover kunnen we vervolgens in de object database zoeken naar het gewijzigde object om deze terug te halen.

Het is dus een best practice om regelmatig “git add” te gebruiken. Ook als er geen commit gemaakt wordt.

Azure Cosmos

Azure Cosmos wordt binnen proxsys gebruikt als backend voor de logging gegenereerd door het LMP. Aangezien we hier de laatste tijd tegen wat meer performance issues aanlopen leek het ons erg interessant om de ze sessies te volgen om te kijken of er tips tussen zaten die wij zelf kunnen toepassen. Tijdens de sessie werden verschillende tips gegeven die wij ondertussen ook zelf geïmplementeerd hebben.

Binnen Cosmos wordt data opgeslagen binnen partities. Hoe meer partities aanwezig hoe meer het systeem moet gaan zoeken naar de data. En hoe meer RU’s dit dus kost. Wij hebben hier nu zelf optimalisaties aan doorgevoerd waardoor we met minder RU’s meer berichten per seconde kunnen verwerken.

In Cosmos kan op een record een Time to live (TTL) gezet worden. Dit zorgt ervoor dat een record automatisch verwijderd wordt na de opgegeven periode. Sommige logging is niet meer relevant na een x periode. Deze kunnen we nu automatisch laten verwijderen. Dit is per record in te stellen dus kunnen we ook logging voor een langere periode vasthouden. Dit is nu in onze eigen logging oplossing verwerkt en zal veel data verbruik gaan schelen. Om een beeld te schetsen, sinds februari hebben wij meer dan 400gb aan logging verzameld vanuit het LMP.

Sql injection how it works how to stop it

In deze sessie gegeven door Grant Fritchey, werd verteld over wat zijn Sql injecties en hoe gaan we deze tegen.

Hij gaf een paar voorbeelden van hoe sql injectie werkt en waarom hij er data uit kon halen.

Het belangrijkste wat steeds terug kwam om dit te voorkomen waren: “gebruik geparameteriseerde velden, valideer alle user input, gebruik error handling, maak gebruik van rechten op users”.

Het was een leuke sessie maar we hadden er meer van verwacht.

Kick start! Sql Server 2017/2019 performance

Dit was een erg leuke sessie.

De spreker heet Pinal Dave. We hebben van hem vorig jaar ook een aantal sessies gevolgd en die waren geweldig.

Pinal is een enorm energieke en vrolijke kerel en zoekt veel interactie met het publiek.

De informatie die hij deelde was heel interessant. We hebben een aantal queries gehad die we kunnen gebruiken maar helaas gebruiken wij Entity Framework dus kunnen we ze niet echt gebruiken in code, maar wel kunnen we de performance verbeteren rechtstreeks op onze database via de beheer tool.

GraphQL

In deze sessie werd uitgelegd hoe je relatief snel met Apollo een GraphQL server kunt opzetten. GraphQL is een zoektaal, ontwikkeld door Facebook. Het vormt een alternatieve manier om over meerdere REST API's heen te zoeken in graph gebaseerde data. Dit betekend dat je één endpoint hebt waar je data vandaag kunt halen op een zelfde generieke manier, namelijk via de query taal.

Er werden voorbeelden getoond van verschillende functionaliteiten. Een voor ons nieuwe functie was subscriptions. Met subscriptions kun je een verbinding met de server opzetten waarmee je een update krijgt wanneer data is aangepast. Bijvoorbeeld een nieuw nieuwsartikel dat beschikbaar is. Dit alles zonder extra te “pollen” naar de webserver, hierdoor wordt er dus minder load gegenereerd op de server waardoor de algemene performance ook beter wordt.

Binnen Proxsys draait op het moment al een PoC met GraphQL en de opgedane kennis inzake subscriptions gaan we zeker proberen toe te passen.

Op naar Techorama 2020

Deze editie van Techorama was in vergelijking met die van vorig jaar, meer high-level was. Er was niet heel veel deep-diven in de techniek bij, wat voor sommige van ons een kleine teleurstelling was.

Maar al met al twee fantastische dagen! Op naar volgend jaar!

Delen via

Altijd en overal Ongestoord en ongemerkt veilig werken

De beste ICT leveren, dat doen we niet alleen