Docker – Containers versus Virtual Machines

05 June 2015

There is a lot of talk in the industry at the moment about Docker (and containers in general). But, there also seems to be a lot of confusion about what Docker is, why you would use it, and how it is different than any other virtualization framework such as VirtualBox, VMWare, or Parallels. This confusion is especially prevalent in the developer community where systems administration work is often delegated to another team. Docker is a different kind of virtualization that solves common problems that software teams face everyday. Docker, and more generally a container, is something that every developer should learn about as they are likely going to need to use them in the coming years.


Principles of Aspect Oriented Programming in C#

01 June 2015

Aspect Oriented Programming (AOP) has been around for a long time. It is a powerful concept that allows for the separation of “crosscutting” concerns that has always been widely misunderstood by developers and managers alike in my experience. This confusion has largely been due to the mismatch between AOP theory, terminology, and implementation. Recently, I have seen a renewed interest in it, and I hope this article can help to demystify some of the confusions.

Read more... on Ubuntu 14.04

14 October 2014

I recently tried to get MEAN running on Ubuntu 14.04 and I ran into problems. Here are the issues that I ran into, what I did wrong to respond to the errors, and how you can easily resolve the problems.


Mitigating Incomplete Dependencies

09 September 2014

As a consultant, I frequently encounter projects where assumed dependencies are not in place before the beginning of the project. Sometimes, these items might not even be available for months after I am expected to finish and leave. This is especial true of anything related to data (e.g. data services, data access libraries, databases, and sample data). But, it could also be related to non-functional requirements such as authentication and logging frameworks. Despite this, even when estimates were based on these items being ready and the customer knowingly signed off on those assumptions, customers have a hard time understanding the impact to the project schedule and will often argue not to move the target release date. I am not advocating that your team should give in to these unreasonable demands. In fact, I would argue the opposite. However, whether you are waiting on dependencies that should have been completed or had planned to work in parallel from the start, I do recommend architecting your application in such a way as to minimize the damage caused by incomplete dependencies.


Bad Method Cohesion

25 August 2014

In a previous post, I talked about bad coupling through injecting too many dependencies into a class. Developers should also be concerned with the cohesion within individual methods. In the 1993 classic Code Complete (which is great, but a little dated), it said that a method should be under 200 lines of code (LoC). In more recent years, after test driven development methodologies have taken hold, we find that the LoC metric is not as good of an indicator as it was in the past. Therefore, methods with 200 lines are absurdly large in today's world. Large methods have the following problems: