Inspiring people. Excellent results.

Gedreven door ICT willen wij samen meer bereiken. Als betrokken partner in Noord-Nederland. Dat is wie wij zijn. Wij zijn Get There.

  • Deel:

Prijswinnaar bekend! Gefeliciteerd Betty!

 

Zit jij ook wel eens vast om een beslissing te nemen? Vanaf vandaag niet meer! Ons standmateriaal op de beurs van Connect.frl bestond uit grote en kleine decision dices. De kleine variant (de stress-kubus) gaven we weg én was onderdeel van onze prijsvraag ‘hoeveel zitten in de grote glazen vaas’. Alle bezoekers mochten het aantal raden en inzenden. Er werd geteld, gerekend en gegokt door meer dan 130 aanwezigen. Maar er was er maar één met het juiste antwoord: 88.

En de winnaar is Betty!

Gefeliciteerd Betty. We wensen je veel plezier met de bon en het verrassingspakket. Succes met je studie en laat nog eens wat van je horen!

Het team van Get There

 

 

 

  • Deel:

Partnerdag studievereniging Cover

Op 1 mei waren we als partner van studievereniging Cover (Artificial Intelligence en Computing Science van de RuG) te gast op de partnerborrel.

Awesooooooome people gesproken! Bedankt voor de toffe middag!

  • Deel:

Kennisdeling op TEQnation

  • Deel:

Nieuw PR Marathon Rotterdam

Niet alleen is Bert trainer van ons ‘4-Mijl van Groningen’-loopgroepje, je kunt hem ook tegenkomen bij survivalruns en marathons. Dus ook bij de marathon van Rotterdam. En tussendoor werkt hij bij ons.

Met gemak zwaait hij nog lachend naar de camera, waar anderen de man met de hamer al zijn tegengekomen. Petje af voor 3 uur en 44 minuten in dat warme weer!

(Maar de volgende keer wel graag ons logo wat beter in beeld, Bert, als je op de foto komt….).

  • Deel:

NDC London was een feest!

NDC London is een uitvloeisel van de Norwegian Developer Conference in Oslo. De conferentie was zo succesvol dat ze tegenwoordig ook in Londen, Sydney en Massachusetts worden gehouden.

Waarom ze zo succesvol zijn? Een combinatie van dingen denk ik: de locatie, de sprekers, de organisatie, de sfeer en het eten.

TL;DR

Conferenties zijn de allerbeste besteding van je tijd en je geld als je geïnspireerd wilt worden om je dagelijkse werk met een frisse blik te bekijken. De NDC conferenties staan bij mij daarbij op nummer 1!

Eten

Om maar bij het laatste te beginnen: na de eerste sessie staan er diverse stands met warm eten; Indiaas, Thais, Engels, Italiaans. Elke dag anders en elke dag lekker. En voor iemand zoals ik met een gluten-allergie erg prettig om veel keuze te hebben. En misschien wel het allerbelangrijkste: er is een echte barista die perfecte espresso’s en cappuccino’s maakt.

Grote namen

Onder de sprekers waren dit jaar absolute toppers zoals Scott Hanselman, Scott Guthrie, Rob Conery, Jon Skeet (de man met een miljoen punten op StackOverflow) en de mannen van .NET Rocks. Maar daarnaast ook wat mindere goden met verhalen van hoge kwaliteit, zoals van onze eigen Delftse professor Felienne die de opening Keynote mocht doen.

Verrassingen

Er waren behoorlijk wat verhalen die niet persé over de nieuwste technologische snufjes gingen, maar over meer alledaagse dingen waar je als software maker mee te maken krijgt. Kevlin Henney vertelde bijvoorbeeld over  “Refactoring to Immutability”, Troy Hunt over security (You’ve been pwned), Rob Conery over zelfstandig worden en Scott Hanselman over het leven met diabetes-1.

Eén van onze favoriete verhalen was over Cake. Dat is een C# Make taaltje dat je kunt gebruiken ter vervanging van al je batch scripts en Powershell of al je aanklik-taken in Visual Studio Online. Het is verrassend aangenaam om je favoriete programmeertaal te zien in de context van een build script. Het wordt direct duidelijk wat er gebeurt:

var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");

// Define directories.
var buildDir = Directory("./src/Example/bin") + Directory(configuration);

Task("Clean")
    .Does(() =>
{
    CleanDirectory(buildDir);
});

Task("Restore-NuGet-Packages")
    .IsDependentOn("Clean")
    .Does(() =>
{
    NuGetRestore("./src/Example.sln");
});

Task("Build")
    .IsDependentOn("Restore-NuGet-Packages")
    .Does(() =>
{
   // Use MSBuild
   MSBuild("./src/Example.sln", settings =>
        settings.SetConfiguration(configuration));
});

Natuurlijk uitbreidbaar met je eigen C# code en ook beschikbaar als Task in Visual Studio Online; dat betekent dat je hele CI opzet uit één taak bestaat met daarin een Cake script dat zich weer prettig laat versioneren in je favoriete source control system (Git uiteraard…).

Sfeer

De sfeer bij de NDC conferenties is geweldig. De sprekers bijvoorbeeld zijn zeer toegankelijk; ik heb geprobeerd met al mijn helden even te babbelen en dat kan heel makkelijk.

NDC heeft ook strikte gedragsregels. Op andere tech conferenties hebben vrouwen regelmatig last gehad van “Brogrammer” gedrag; bij NDC wordt je dan direct op straat geschopt. In de lezingen mogen geen vrouwonvriendelijke grappen gemaakt worden en er is hard gewerkt om de aantallen vrouwelijke sprekers en vrouwelijke bezoekers omhoog te krijgen. Het komt ons vrijgevochten Nederlanders misschien wat zwaar over, maar de sfeer is mijns inziens daardoor echt relaxed.

Conclusie

Dit soort conferenties zijn zeer inspirerend. Het is zo belangrijk om af en toe even een paar dagen uit de sleur te stappen en je helemaal te laten verfrissen door het enthousiasme van de mensen wiens boeken je leest en wiens videos je kijkt op Pluralsight.

In juni is er weer een NDC Oslo. Gaan!

  • Deel:

Winnaar dag rijden in volledig elektrische auto

Ons standmateriaal op de beurs van Connect.frl bestond uit een volledig elektrische auto met een laadpaal.

Waarom? Omdat wij een rol vervullen in het softwareproces om alle betrokken partijen (stroomleverancier, laadppaalbeheerder, laadpasleverancier) real-time met elkaar te laten communiceren.

Tijdens de beurs kon je een dag in een volledig elektrische auto rijden winnen. En de winnaar is Willem!

Gefeliciteerd Willem, en we weten inmiddels dat je een leuke dag hebt gehad.

 

  • Deel:

Strings: the root of all evil

Richard de Zwart, 31-12-2017

Okay, de titel is een beetje click-bait. Strings zijn niet de oorzaak van ALLE kwaad in software; we hebben immers ook nog “Magic Numbers”, “Code Duplication”, “Premature Optimization” en geld (volgens de Bijbel, 1 Timoteüs 6). Maar we gebruiken strings wel te vaak op plekken waar we beter iets anders kunnen gebruiken.

Strings zijn lekker makkelijk, er mag immers van alles in. Het maakt niet uit of je een string hebt met het sprookje van Roodkapje, een bedrag, een datum, een postcode of een BSN.

Het probleem is dan alleen dat die dingen die voor het menselijk oog herkenbaar zijn en betekenis hebben, meteen betekenisloos worden. Een compiler kent niet het verschil tussen een string met een datum en een string met een postcode. En die compiler is nou net onze vriend als het gaat om het voorkomen van bugs: hoe beter de compiler weet wat voor informatie we -bijvoorbeeld als een parameter- doorgeven hoe beter hij kan helpen voorkomen dat we het verkeerde doorgeven.

Stringly typed code

Er is een term die opgetekend werd door Jeff Atwood op zijn blog Coding Horror: stringly typed code:

A riff on strongly typed. Used to describe an implementation that needlessly relies on strings when programmer & refactor friendly options are available.

  • . parse it and create an enum, then you have strong typing throughout the rest of your codebase).
  • Message passing without using typed messages etc.

Excessively stringly typed code is usually a pain to understand and detonates at runtime with errors that the compiler would normally find.

De laatste zin is voor mij waar het om gaat: code die veel strings gebruikt is moeilijk te begrijpen en faalt pas tijdens het runnen. Is dat zo? Dat het moeilijk te lezen is? var person = FindPerson("Jan", "Janssen"); is vrij duidelijk. De parameters zijn een voornaam en een achternaam. En normaliter zou je variabelen doorgeven  en als je die meer beschrijvende  namen geeft dan p1 en p2 dan is het nog duidelijker wat de functie verwacht.

Enums

Wat is dan code die beter zou kunnen? Allerlei typeringen zoals “Eenrichtingverkeer” (typefout met opzet) voor een straat of “Granen” voor een stuk uit de schijf van vijf. Die typeringen kun je altijd modeleren als een  enum. En dan is de compiler weer in staat om voor je te controleren of je wel een geldige waarde gebruikt. Maar dit soort informatie komt vaak als string je systeem binnen; soms als een keuze van een dropdown op een scherm, soms als een waarde uit een database of uit een API van een derde partij.

Die moet je dus op de plek waar ze binnen komen omzetten naar een enum zodat de rest van je code getypeerd kan zijn.

Helaas hebben Enums wat nare eigenschappen. De belangrijkste is dat het eigenlijk een  int is  (well actually: het kan ook een long of een byte zijn…). Het ziet eruit als een leesbare tekst, maar het is een getal. Dat was 400 jaar geleden toen computers nog op stoom liepen misschien heel slim en efficient, maar ik zou best blij zijn geweest met een implementatie die meer op die van Java lijkt. Je moet dus her en der dat getal omzetten naar een tekst. En daarmee komen we op de tweede nare eigenschap van  enum in C#: de ondersteuning voor die omzetting  is niet geweldig. We hebben allemaal te vaak dit soort code geschreven:

var rijrichting = (Rijrichting) Enum.Parse(typeof(Rijrichting), "Eenrichtingsverkeer", true);

In .NET Core is het gelukkig zoals je het zou willen:

var rijrichting = Enum.Parse<Rijrichting>("Eenrichtingsverkeer");

Datum velden

Datum velden hebben natuurlijk al problemen genoeg van zichzelf. De omzetting van de ene tijdzone naar de andere, het feit dat een DateTime in C# altijd een tijd heeft ook als je alleen maar een datum nodig hebt, maar vooral natuurlijk het parsen van verschillende formaten. Is “1-12-2017” nou 1 december of 12 januari?

Ook hier geldt natuurlijk dat je de string zo snel mogelijk omzet naar een DateTime voordat je de informatie verder je applicatie in stuurt. Maar datum velden hebben altijd ook nog een andere betekenis dan alleen maar een punt in de tijd. Het kan een geboortedatum zijn, of een ShipBeforeDate of een combinatie van twee datums die samen een periode vormen. Daar zit altijd bepaalde business-logica aan vast. Een ShipBefore datum mag misschien nooit meer dan 14 dagen na een OrderPaidAt datum liggen. Die business-logica hoort vaak bij de datum en verdient een eigen class. Maar dat is eigenlijk een heel ander verhaal dat valt onder de Primitive Obsession code smell.

Postcodes

Eerlijk gezegd heb ik nog nooit een Postcode class gezien in een systeem. Niet zo heel raar omdat je deze meestal alleen maar via een formulier van een gebruiker door krijgt, opslaat in je database en misschien weer eens ophaalt om een brief (zo’n papieren ding met een envelop eromheen en een postzegel erop) te kunnen samenstellen. Maar als je ook maar enige validatie op een postcode doet is het al voor de hand liggend om een Postcode class te maken. En NIET een PostcodeValidator class… Je maakt het je leven in eerste instantie niet makkelijker, omdat je dan ook moet nadenken over postcodes in andere landen. Met een string-veld kun je alle varianten aan van over de hele wereld. Tja, heeft iemand je ooit beloofd dat progammeren makkelijk zou zijn?

EAN, IBAN, BSN, E-mail

Ik werk nu aan een project waar heel veel EANs worden gebruikt. Dat zijn getallen van 13 of 18 cijfers die bijvoorbeeld een elektriciteitsmeter in je meterkast identificeren. Deze worden als string in de applicatie verwerkt. De validatie zit in aparte validatie-helper classes. Je komt dat ook tegen met IBANs en BSNs: allemaal tekenreeksen die absoluut niet willekeurig zijn en smeken om in aparte classes te worden opgenomen. Het is geen tekst, het is een IBAN. Het is geen tekst, het is een e-mail adres.

Veel werk? Welnee, alleen verplaatsen van code die je toch al hebt. Je komt er dan ook achter hoe vaak je die code gedupliceerd hebt in je systemen. En het zijn ook van die zeldzame objecten in je systeem die je daadwerkelijk misschien nog wel over projecten heen kunt hergebruiken.

Samenvattend (TL;DR)

Als het werkelijk om een willekeurige reeks tekens gaat (zoals een sprookje of een achternaam) mag je een string gebruiken. In alle andere gevallen verdient het (en verdien jij als vakman) een echte class.

Kwaden

  • Deel:

Connect.frl; jezelf opladen met inspiratie

Inspireren en zelf geïnspireerd worden door andere IT professionals? Het gebeurde allemaal op Connect.frl, 6 december 2017!

Connect.frl is een stichting die als doel heeft het aanwezige IT-talent in het noorden te inspireren en te behouden voor de regio. Middelen? Events, kennissessies, netwerkbijeenkomsten, traineeprogramma’s en nog veel meer.

Hoogtepunt elk jaar is het event in december. Thema 2017? Jezelf opladen met inspiratie.

Get There is niet alleen partner (ontmoet ons eind dit jaar weer op onze stand!), maar we hebben ook wat te vertellen! Lees hier meer over de presentatie van Arnoud en Richard ‘laad je auto op met inspiratie’.

Hou hier de aanmelding voor het aankomende event in de gaten.

 

Goed bezochte sessie van Arnoud en Richard