Software development

Interfacing in style

I tend to give the same talks to clients whenever I enter another project, mostly to get everybody up to speed when there are deficits. In writing everything down, I hope to make the knowledge transfer a little easier, so that I can refer to this and other similar articles in the future. Interfaces are a very useful and important construct in C#, and I believe that any developer worth their salt is going to agree. But they can also be one of the biggest flaws behind an error-prone architecture or a hard to maintain code base. I will start by describing the two basic kinds of interfaces and then describe the typical situation in the code base of most clients. The focus will be on how to… Continue Reading…

Software developmentSoftware testing

Nuclear testing done right

This is a post that I had hoped to write for almost a year and that has been burning under my finger nails. It’s about the latest release of my test platform Nuclear.Test, that I uploaded a few days ago. I’m talking about that magic version 2.0, the very first product grade release. Version 1.0 was made available to the public last summer, but that wasn’t much more than a documented prototype. There were bugs and quirks, and it was a quick and dirty state that I just wanted to get out the door quickly before my son was born. But the first public version of a software is hardly ever any good. It’s there to give the project some traction and for getting to know it a… Continue Reading…

Software developmentVisual Studio

Resolving cached NuGet packages at runtime

Roughly seven months ago I came across an odd behaviour of Visual Studio that I thought wasn’t possible and that broke my code at runtime. I asked on Stack Overflow hoping that someone could point me in the right direction, but that didn’t happen and Google wasn’t very helpful either. Curiosity finally made me tackle the issue myself once I found the time for it. This article is basically Helmuth von Moltke’s theory of war set in a programming scenario, and it serves as a good example of how important it is to adapt your design during development. No design or architecture extends with certainty beyond the first encounter with a user or a working prototype. Helmuth von Moltke the Elder (if he had been a nerd) Before… Continue Reading…

CryptographySoftware developmentVisual Studio

A kingdom for a strong name

We all have become increasingly paranoid when dealing with computers and software in any way and most of us run some kind of firewall and antivirus software to feel safer on the internet. I won’t go into details on this very wide subject, but I want to elaborate on what we as the developers of software can do about it. I’ll stick to my little .NET world to demonstrate how we can achieve higher security with applications. As already hinted at by the title, today’s topic is strong name signing. Quick refresher on strong-naming A good resource is the Microsoft page on strong-named assemblies, and you should definitely read that. But I’m going to outline the matter any ways so read on if you wish. Strong-naming an assembly… Continue Reading…

Software development

Making mistakes: Part 1

Publish your code. This is by far my biggest mistake, and it took me roughly ten years to realize it. As it turns out, it’s responsible for a wide range of mistakes and problems further down the line. I wish our professors had told us to publish everything, but at the time programming was treated more like a craft than a science. Then of course, publishing your own code is terrifying as it is. Everyone can see it and judge you based on its quality. Your name will be all over it and the internet never forgets. That thought alone is a big obstacle and the less experience you have, the harder it is to overcome. However, it’s not so much about how everyone else will perceive your… Continue Reading…

Software development

Making mistakes: Introduction

All developers will eventually make their share of mistakes during their careers, and that’s OK. We all learn from defeat and evolve through experience. Naturally, the bigger portion of that process will happen at the very beginning when everything is new and exiting, and we tend to bite off more than we can chew. Most mistakes are temporary flaws in our skill set and will be ironed out quickly while we learn. But there is the other kind that is a little harder to shake, mostly because they are harder to figure out or are just hiding well enough. That last kind is the one I find the most interesting and the most dangerous, which is why I’d like to talk about it for a bit. I had… Continue Reading…