Learn Angular and JavaScript

My upcoming project is being developed with a client-side framework called AngularJS. It is currently rather popular partly through the popularity of the Singe Page Application model. (https://en.wikipedia.org/wiki/Single-page_application)

The backend relies on ASP.NET built using C#, but AngularJS is new for me so it calls for a course.

However AngularJS works with JavaScript and not with C#, and during my day-to-day work in ASP .NET MVC I use JavaScript very little.

Now and again I do something small using jQuery but I cannot do much more than the very basics.
Therefore at the top of my list was: improve my knowledge of JavaScript.

At Code School (Codeschool.com) I found a good course and I started it with much enthusiasm.
The course consists of 4 parts: 3 modules of basic knowledge and 1 of “best practices”.
Starting with Part 1 I quickly got the feeling that my lack of knowledge wasn’t as bad as I had thought. Basic knowledge about variables, scoping, concatenation and use in HTML were explained , things I already knew.

Confidently I moved to Part 2: for and while loops, prompt and confirm, if-else, functions and the array: a couple of refreshers but mainly knowledge I already have.
I was already half way through the course: actually my knowledge of JavaScript wasn’t too bad!

On to Part 3: Where things start to get a bit tougher.
Function expressions (good to know), closures, (“so closures work like this” and “oh, so that can go wrong”), hoisting (wow, I’d never thought about it), objects (object literals, I felt just like a real JavaScript programmer with objects) and finally classes, constructors and prototypes.

This last section on how to work with objects in JavaScript in particular was very educational.
At that moment I felt a little more familiar with JavaScript. The good thing about the course is that not only do you get taught theory but between the videos you can type out things to see whether you have understood. In my case that last part was very educational: If you watch a video containing theory then anything quickly begins to sound logical, but if you start coding yourself then the think tank really gets started.

And finally: JavaScript best practices
To round off the course there is a long list of topics that show the difference between good and bad code and finally a nice final exercise about numbers in JavaScript.


Starting a freelance partnership

Seven ye64f9fbe2881c9ce633366b4e8b17991fars ago I started working as a .NET freelancer. In those seven years I learned to love the advantages of freelancing and I have learned to live with its slight disadvantages. Last year however, during a conversation with Martijn Tetteroo, we wondered if we could do something about the “lonely” existence of the freelancer. “Lonely” is deliberately written between quotation marks because naturally you are not totally alone. On your projects you have colleagues and on some projects you are seen and treated as a “normal” colleague but nonetheless you can still feel a bit alone. Martijn and I both had a desire to coordinate with other like-minded freelancers about life as a freelancer: about admin, finding contracts, sharing knowledge, technical challenges, insurance, corporate ideas etc. It is also useful to be part of a professional .NETters’ club where you trust each other and where you know you can rely on each other. These sorts of topics are more easily discussed with a group of “trustworthy” fellow freelancers than with any random freelancer or a freelance colleague from 6 years ago.

Then came the idea to set up a partnership in order to make all this possible. Together we analyzed our networks and we started up last year under the name Freece with 6 members. This year we have welcomed 2 new members and so there are now 8 of us.

And was it worth the effort? The answer is a definite yes.

Every other month we will get together for a pleasant evening of chat, food, a technical presentation and to discuss all matter of subjects that we members of Freece experience. We also noticed that a collection of experienced and valued professionals has created a strong group that is greatly valued by the rest of the market. In conclusion: a freelancer doesn’t need to feel alone. So if you are a freelancer in any industry then perhaps starting a partnership is for you!

Book review of “Soft Skills: The software developer’s life manual” by John Sonmez (in English)

Summertime, on holiday, by the pool with a good book. For me that’s the bee’s knees. What book to read first is always a bit exciting? This time I had chosen to read this book by John Sonmez

I have listened to john several times on his podcasts and I have always found he usually says sensible things. And in anticipation of this review, he does the same in this book too.

This book starts with the question why this book is different from all other books.

The answer is that this book isn’t about design patterns or writing better code. It is also not about unit tests, TDD or SOLID.

No, this book is about how you can better manage your career, how to design your life, how to take control of your finances, how to keep your body in shape, how to eat well and much more.

The book consists of 71 chapters and a few appendices, divided into 7 sections.

The 1st section is about career and work
Do you think enough about these topics?
About your CV, interviews and intakes, work, working from home, professionalism?
Whether you stay in full-time employment or if you become a freelancer, whether you go on to make your own software product.

The author encourages you to do so!

A few quotations from this section: “Make sure you are a problem solver” and “Don’t be too religious about technology.

The 2nd section is about marketing yourself.
This is not only important for freelancers but also for those in paid employment: you should see yourself as a business that is hiring itself out to a client that happens to be hiring itself to one client.

The difference between a small-, large- and medium-sized business and a start-up is clearly described here.

The 3rd section is about life as a professional, with an emphasis on “continuous learning”
This section deals with the action plan “how to learn effectively”.

This will sound very basal but as an IT professional you often have to gain more knowledge, but have you already thought about how you can best do that or how do you find out what knowledge you are actually missing?

The 4th section is about productivity.
There have been many books written on this subject but if you have not yet read those this book will provide a good summary. If you have read those books this section is good revision.

Since greater productivity involves changing habits, reminding yourself of this material is absolutely necessary. Here not only is theory discussed but also the ways in which the author himself has implemented it in his own work and career.

Topics that appear are focus, the pomodoro technique and internal/external motivation.

The 5th section is about finances.
Not a section that provided me with much new knowledge but a useful part of the book nonetheless about what to do with your finances.

If like the author and I you work in IT and earn a good living you’ll ask yourself what to do with your earnings: do you spend or do you invest?

He also talks about the dangers of debt, investing in real estate and the theory behind shares and options.

The 6th section is about fitness.
An unexpected section but certainly interesting to read. Isn’t there the old saying “a sound mind in a sound body”?

Topics that appear are muscles (how to grow muscles), muscle development (3 types of muscle growth), burning fat, calories and health.

Here the author demonstrates that he knows how to succinctly describe the topics in such a way that you feel like you get a lot of information from each section and that the chapters never feel tedious.

This section also provides a good summary of the theories about this topic such as those of Weight Watchers or Herbalife.

The 7th and last section is about spirit and the conclusion of the book.
A less developed section but Chapter 67 (Building a positive self-image: Programming your brain) is definitely worth it.

An appropriate saying therefore: “failure isn’t a defect; it is the road to success.”

My conclusion
A pleasantly readable, useful and interesting book for people with an (office) job who want to be engaged with their work, their professionalism, their knowledge and their career.

Sometimes you get the feeling that you are knocking on open doors or that you think that everything sounds logical: sometimes however you only need that in order to set things in motion.

New features in Visual Studio 2015

I’ve been reading the Visual Studio 2015 releasenotes (https://www.visualstudio.com/en-us/news/vs2015-vs.aspx) and while I am waiting for the ASP.Net vNext, here are some things which I find are nice improvements:


Nameof provides a refactoring-safe way of getting the name of e.g. a parameter, member or type as a string.
Finally a typesafe way of referencing the name of a variable!

Here’s the old code:stringformat1


and here is the new code:



No more referencing the wrong variable name when the refactoring missed the “variabele name by string”!

String interpolation

From the docs: “An interpolated string expression looks like a template string that contains expressions. An interpolated string expression creates a string by replacing the contained expressions with the ToString represenations of the expressions’ results.”

Here’s an example:
Code before:


Code with string interpolation



And the compiler checks the expressions in the string text!

null-conditional operator

Copied from here (https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6) which contains a good explanation:

Sometimes code tends to drown a bit in null-checking. The null-conditional operator lets you access members and elements only when the receiver is not-null, providing a null result otherwise:

int? length = customers?.Length; // null if customers is null
Customer first = customers?[0]; // null if customers is null

The null-conditional operator is conveniently used together with the null coalescing operator  ?? :

int length = customers?.Length ?? 0; // 0 if customers is null

The null-conditional operator exhibits short-circuiting behavior, where an immediately following chain of member accesses, element accesses and invocations will only be executed if the original receiver was not null:

int? first = customers?[0].Orders.Count();

This example is essentially equivalent to:

int? first = (customers != null) ? customers[0].Orders.Count() : null;

Except that  customers  is only evaluated once.

Lambda Expressions in Debugger Windows

You can now use lambda expressions in the Watch, Immediate, and other debugger windows in C# and Visual Basic.
Lambda expressions are used so frequently that this feature is highly welcomed during debugging sessions!

JSON Editor Improvements

Un-minify context menu. You can right-click the JSON editor and select Un-minify context menu to un-minify any long arrays in the JSON file.


Tooling support for AngularJS. Now, when you are writing apps using AngularJS, IntelliSense provides suggestions for Angular controllers, services, factories, directives, and animations.

Boek review van “Soft Skills: The software developer’s life manual” geschreven door John Sonmez

51WiLueukSL._SX396_BO1,204,203,200_Van de zomer, lekker op vakantie, aan het zwembad met een goed boek. Dat is voor mij goed vermaak. Welk boek als eerste gelezen gaat worden is altijd een beetje spannend. Dit keer had ik echter goed gekozen door dit boek van John Sonmez te lezen.

Ik heb John een aantal keer gehoord op zijn podcasts en ik vind dat hij vaak zinnige dingen zegt. En alvast vooruitlopend op deze review: dat doet hij in dit boek ook.

Waar dit boek mee start is de vraag waarom dit boek anders is dan alle andere boeken.

Het antwoord is dat dit boek niet gaat over design patterns of het schrijven van betere code. Ook gaat het boek niet over unit tests, TDD of SOLID.

Nee, dit boek gaat over hoe je beter je carrière kunt managen, je leven kunt inrichten, je financiën kunt beheren, je lichaam in vorm kunt houden, goed kunt eten en nog veel meer.

Het boek bevat 71 hoofdstukken en een aantal appendices, onderverdeeld in 7 secties.

De 1e sectie gaat over carrière en werken
Denk jij wel genoeg over deze onderwerpen na?
Over je CV, interviews en intakes, werken, thuis werken, professionaliteit?
Blijf je in loondienst werken of word je freelancer, of ga je een eigen (software)product maken.

De auteur moedigt je aan om dit wel te doen!

Een paar quotes uit deze sectie: “Zorg dat jij de probleemoplosser bent” en “Don’t be to religious about technology.”

De 2e sectie gaat over de marketing van jezelf.
Dit is niet alleen belangrijk als je freelancer bent maar ook als je in loondienst bent: ook dan moet je jezelf zien als een bedrijf, dat zich toevallig aan 1 opdrachtgever verhuurt.

Op een duidelijke manier wordt het verschil in werken in een klein-, groot-, middelgroot bedrijf of bijvoorbeeld een startup hier beschreven.

De 3e sectie gaat over het leven als professional, met de nadruk op ‘altijd leren’.
In deze sectie wordt ook het stappenplan “hoe leer je effectief” behandeld.

Dat klinkt heel basaal, maar als IT’er moet je heel vaak nieuwe kennis opdoen, maar heb jij nu al eens nagedacht over hoe je dat het beste kunt doen, of hoe je er achter komt welke kennis je nu eigenlijk mist?

De 4e sectie gaat over productiviteit.
Daar zijn al veel boeken over geschreven maar als je die nog niet hebt gelezen dan staat in dit boek een mooie samenvatting. Heb je hier al wel over gelezen dan is deze sectie een mooie herhaling.

Aangezien productiever worden ook het veranderen van gewoontes inhoudt is een herhaling van deze materie erg nuttig. Daarnaast wordt hier niet alleen de theorie behandeld maar vaak ook de manier waarop de auteur het in zijn eigen werksituatie heeft geïmplementeerd.

Onderwerpen die aan bod komen zijn focus, pomodoro techniek en interne- en externe motivatie.

De 5e sectie gaat over financiën.
Niet een onderdeel dat voor mij persoonlijk veel nieuwe kennis toe voegt, maar wel terecht een onderdeel van dit boek: Wat doe je met je financiën.

Als je zoals de auteur en ik in de IT werkzaam bent dan verdien je een goede boterham en zul je jezelf af kunnen vragen wat je met de verdiensten gaat doen: ga je consumeren of investeren?

Ook vertelt hij over het gevaar van schuld, het investeren in vastgoed en de theorie achter aandelen en opties.

De 6e sectie gaat over fitness.
Een onverwacht onderdeel, maar wel heel interessant om te lezen. En zegt een bekende uitspraak niet dat een gezonde geest vaak huist in een gezond lichaam?

Onderwerpen die aan bod komen zijn spieren (hoe groeien spieren), spieren kweken (3 soorten spiergroei), vetverbanden, calorieën en gezondheid.

Ook hier geldt dat de auteur de onderwerpen kort en bondig weet te beschrijven waardoor je het gevoel hebt dat je heel veel informatie per sectie tot je krijgt en de hoofdstukken nooit langdradig worden.

Deze sectie biedt een goede samenvatting van de theorie over dit onderwerp zoals deze ook door bijvoorbeeld Weight Watchers en Herbalife wordt gezien.

De 7e en laatste sectie gaat over spirit en de afsluiting van het boek.
Een wat minder uitgebreide sectie en het onderwerp moet je wel liggen maar hoofdstuk 67 (Building a positive self-image: Programming your brain) is zeker de moeite waard.

Daarnaast een mooie uitspraak: “failure isn’t defect, it is the road to succes.”

Mijn conclusie
Een aangenaam leesbaar, nuttig en interessant boek voor mensen met een (kantoor-)baan die bezig willen zijn met hun werk, hun professionaliteit, hun kennis en hun carrière.

Soms krijg je het gevoel dat er open deuren worden ingetrapt of denk je dat het allemaal logisch klinkt: soms heb je echter niet meer dan dat nodig om in beweging te komen.


Problem Steps Recorder




Ik hoorde er voor het eerst over op runas radio (http://www.runasradio.com/default.aspx?showNum=410), en ik dacht: zou het zo simpel kunnen zijn?
Een programma dat (vanaf Windows 7) in Windows zelf zit, waarmee je op een simpele manier acties die je uitvoert kan ‘opnemen’?

Nou, het bleek dus inderdaad zo simpel te zijn.
Ok, verwacht geen vervanger van een uitgebreide screencapture solution, maar als je op een simpele manier de acties die je uitvoert (of die iemand anders moet uitvoeren) wilt opnemen, dan is dit een handige tool.
En in mijn vakgebied, software development, komt het best vaak voor dat je even wilt delen wat een klant moet doen, of dat een tester wil laten zien hoe een issue tot stand is gekomen.

Hoe te starten?

In Windows 7 WIN-R en type ‘psr

of in Windows 8: ga naar de tile modus en type ‘psr

Er komt dan een klein window waarin je kiest voor ‘start record’.
Vanaf dat moment worden je acties opgeslagen. Na elke actie wordt een schermafdruk gemaakt die wordt bewaard.
Je kunt ook met de ‘Add comment’ knop een sectie in het scherm markeren en daar een tekst bij typen om iets te verduidelijken.








Als je klaar bent klik je op ‘stop record’ en wordt alles in 1 gebundelde (.mht) file opgeslagen.

What to do when the testsuite is broken

So you have a suite of unit testskeep-calm-and-unit-test.

Ok, to be honest, they are not all unit tests, some are integration tests.

But hey, you can’t have it all, after all, you’ve almost got a 1000 tests in place, great!

The only downside: when time went by, only two thirds of the test nowadays pass, the rest doesn’t.

The consequence is that nobody runs the tests, and on the build server they don’t run either.

Developers are discouraged to create new tests because they will never be run again.

What to do now?

Basically there are three options:

  1. fix the failing tests;
  2. ignore the failing tests;
  3. delete the failing tests;

The first option is not a real option: who can and wants to fix 300 failing tests?

The second option is tempting: all the code is kept so the remaining unit tests still run and no code is thrown away. And maybe, later, when we have spare time, they all get fixed.

As tempting as the second option is, I choose for the third option: delete all the failing tests. I think all the ignored tests just creates noise in your code, and the spare time to fix them… that will be the day!

And the longer you work on your production code, the more out of sync the testcode will be. So you maybe have to comment out some code in your ignored tests (yikes) in the future to prevent from compile errors.

Yes I understand, removing so much code from your project feels like throwing away money, but I think it will save you money in the future, and you can start right now with a clean base of unit tests.



Omzetten van de Affinno.nl website van ASP.Net webforms naar ASP.Net MVC 4


Vorige week had ik wat tijd over, dus heb ik wat tijd gestoken in het ombouwen van de eigen Affinno website van ASP.Net webforms naar ASP.Net MVC.

Aangezien ik best tevreden was over de look and feel, heb ik besloten om deze ongemoeid te laten en alleen wat admin functionaleit in te bouwen, zodat het wat gemakkelijker wordt om content aan te passen.

De laatste projecten die ik heb uitgevoerd waren ook MVC projecten, dus daar waren geen problemen te verwachten. Wel maakte ik de stap van MVC 3 naar MVC 4. Daar verwachtte ik weinig problemen mee; overstappen naar een hogere versie is meestal niet veel meer dan de releasenotes tot je nemen (Release notes MVC 4) en kijken wat er voor goodies in zitten. Voor mijn site was alleen de bundling en minification een meerwaarde, dus die heb ik gebruikt.

Na het aanmaken van het nieuwe project met de internet template viel me gelijk op dat deze meer dan voorheen al onderdelen include; zo zit bv Modernizer er al standaard in. Je hebt dus wel al vanaf scratch een groot aantal referenties en Javascripts in je project. Aan te raden is om deze even te doorlopen en te kijken welke je hier echt van nodig hebt.

Een meevaller was dat ook het inloggen via external services erg gemakkelijk is gemaakt: de voorbeeld code zit er al uitgecommentarieerd in. Zo was het een fluitje van een cent om het inloggen via Google mogelijk te maken.

Toen kwam de eerste kennismaking met Visual Studio 2012; ook hier verwachtte ik geen issues mee omdat overgangen van de ene versie van Visual Studio naar de volgende tot nu toe ook geen verrassingen hebben opgeleverd.

Deze keer heb ik de Express versie eens geprobeerd, om te kijken wat de stand daar van is ten opzichte van de professional versie. Ik moet zeggen: ik ben onder de indruk, ik heb geen moment het idee gehad met een of andere uitgeklede versie te maken te hebben. Wel is er een belangrijk nadeel aan de Express versie: het ondersteunt geen plugins dus ik moest het doen zonder mijn hulpje Resharper, en dat was wel een groot gemis!

Met een vers project heb ik als eerste de masterpage van de oude site overgezet naar de nieuwe _layout pagina. Daarna een actionmethod op de controller, een statische .aspx pagina gekopieerd naar een view, de css’s en js’s gekopieerd van het ‘oude’ project en voila: de eerste pagina was al te zien.

En dan stap je toch al snel in de valkuil die je op projecten ook vaak ziet als je zo snel iets zichtbaar hebt: je denkt bij jezelf “bijna klaar”. En dat is nou net wat te snel gedacht, want ik had natuurlijk nog geen errorhandling, 404 redirects, omleidingen van de oude url’s, content editing, caching, contact edit pagina’s etc. etc.

Uiteindelijk heeft het omzetten iets meer dan 2 dagen gekost. Grote meevaller was dat in de ‘oude’ site de logica al in een aparte laag zat waardoor ik veel code 1 op 1 kon kopiëren. De views moeten natuurlijk wel opnieuw worden aangemaakt (geen ASP.Net panel, ASP:Textbox etc. meer) en omdat de abstractielaag van webforms er niet meer is moet je toch wel voor elke pagina wat code aanpassen; weliswaar meestal niet al te veel, maar wel voor bijna elke pagina. Gebruik je echter veel server componenten zoals de grid, bereid je dan maar voor op redelijk wat ombouwtijd.

Wat ik nog niet eerder had gedaan was het automatisch deployen vanuit Visual Studio naar de server. Ik heb dat nu via een FTP deploy gedaan, wat goed werkte. Hierbij heb ik ook kennis gemaakt met de automatische web.config transformatie waarbij direct de juiste server web.config settings worden gemaakt vanuit je development omgeving.

Op aanraden van oud collega André heb ik ook T4MVC gebruikt. Deze vernuftige T4 template maakt voor elke controller en controlleraction strongtyped strings aan zodat je altijd strongtyped naar controllers en actions kunt verwijzen. Erg handig.

Al met al een leuk project waar je goed kan zien dat als je een goed uitzicht hebt op het eindresultaat je snel meters kunt maken.

In Dutch: “Delen door nul is flauwekul”, which means “dividing a number by zero is nonsense“.

When you start programming you have probably experienced this: the .Net DivideByZeroException. You get this when, for instance, you want to calculate the average of a values list, and you divide it by the number of items, but then the list is empty, so you divide by zero. The .Net framework then throws a nice DivideByZeroException, which points you to the place in the code were you did not check for the denominator to be zero.

So, then all is well. Until you start calculating with doubles in stead of integers. Then you do not get an exception when you divide by zero. Instead, the double gets one of the following three values:

  • PositiveInfinity
  • NegativeInfinity
  • NaN

The first you get by dividing a positive value by zero, the second by deviding a negative value by zero and the last one by deviding zero by zero. Following the docs, when you want to check whether a double has one of these three values, you cannot check it this way:

d == Double.PositiveInfinity, d == Double.NagativeInfinity,  d == Double.NaN

But you have to use these methods instead:

  • Double.IsPositiveInfinity(d)
  • Double.IsNagativeInfinity(d)
  • Double.IsNaN(d)



Affinno compenseert CO2 uitstoot

Vandaag geen development onderwerp, maar een milieu onderwerp.
Om een klein beetje te helpen tegen de uitstoot van CO2 in de wereld heb ik besloten om de CO2  die ik zelf uit stoot in mijn werkzame leven te compenseren.
Dit gebeurt door het financieren van Goldstandard projecten waarmee niet alleen de CO2 uitstoot wordt gecompenseerd maar die ook nog een bijdrage aan duurzame ontwikkeling leveren.
Meer informatie lees je hier.