Recent posts

DevDays 2010 wildcard proposal: Is Entity Framework 4.0 ready for the real thing?

Introduced in the 2009 edition, this year’s Microsoft Developer Days is again offering wildcard sessions to anyone who posted a proposal on their Facebook site. Obviously I posted a proposal as well, and partly thanks to the community and partly because there were only eight proposals, my proposal is now available on the DevDays site for voting. Support me by going over here and voting for my session.

Published: 01-02-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

TFS Development Practices Part 2: Peer Reviews

What is it?

A formal review of all code and artifacts related to a requirement or task by another person than the original developer. Rework because of review comments must be revalidated afterwards.

Why would you do that?

  • Because the average developer
    • introduces 10-50 bugs per 1000 lines of code (at least, according to Moore’s Law)
    • is not always aware of the potential pitfalls of particular code constructs (hence coding guidelines)
    • is not always up to date with all available constructs in a new C# version
    • does not have full awareness of all the out-of-box solutions offered by the .NET Framework, open-source sites or commercial vendors
    • often does not realize that an ingenious and elegant solution may be too complex to understand by others.
    • sometimes loses sight of the overall solution and the initial goal when working on a some piece of code too long.
  • Because it helps improve the awareness of, and the understanding behind your company’s coding guidelines.

Notice that the amount of necessary review work can be reduced by introducing the Pair Programming practice.

What’s the bare minimum you need to do?

  • Find issues in the interpretation of the functional requirements.
  • To verify compliance against your coding guidelines or standards.
  • If you don’t have one, consider the Aviva Solutions C# 3.0 Coding Guidelines. Notice that these are an extension to Visual Studio’s Code Analysis, so the latter is still worthwhile.
  • To find any loose ends such as TODOs or incomplete code. Resharper 4.5 includes a nice tool window that quickly shows an overview of all TODOs in your current solution. Resharper 5.0 even includes solution-wide analysis that finds dead code.
  • To ensure that all code is easy to read and understand. For instance, all members and types have a comprehensive name and non-trivial code is annotated with code comments.
  • To ensure that each and every check-in improves the code base, rather than introducing software rot.

What’s the usual thing to do?

  • To ensure that all naming of code elements matches those of the functional design, preferably using Domain Driven Design’s Ubiquitous Language.
  • To check for the usual pitfalls such as God classes or methods that are way too long.
  • To find any redundant code or code that is unnecessarily complex and requires refactoring.
  • To find any code constructs that may put other developers on the wrong foot and therefore jeopardize future maintenance.
  • To find code constructs that can be replaced with a simple call to a previously developed generic class or .NET Framework construct.
  • To stimulate the use of design principles such as S.O.L.I.D. or the design patterns defined by the likes of Martin Fowler and Eric Gamma so that the overall code quality increases.

 How do you do that?

  • It is important to make sure that all files related to a particular piece of functionality can be easily found. Use a Check-in Policy to associate each and every change with a corresponding work item such as a Scenario, Task or Bug. Since a major change may involve multiple check-ins, especially in a larger team where multiple developers work in the same areas of your code base, Change Sets provide insufficient traceability.
  • Use a logging form or something similar to review every piece of code related to a particular work item and store it on the project’s team site.
  • Alternatively, copy and paste the code into Microsoft Word, and use its reviewing features to annotate the code with comments and improvements.
  • Or even better, install TeamReview and its corresponding Review Response work item and add review comments directly from inside Visual Studio’s code editor, while keeping them together under the associated work item. Also check-out this poster illustrating the underlying review workflow.

Published: 01-02-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

SharePoint Connections 2010

The SPC 2010 event seems to have been taking place ages ago, in actual fact it was only last Monday and Tuesday. Anyway I was too busy to report on this straight away, trying to finish two stressful projects at the same time this week.In short, it was a good one. Not ground breaking, but useful because it filled some essential gaps in my knowledge and it was good to take a timeout to focus on SharePoint 2010. The running theme of every session was, “the real product has yet come out, don’t come crying back if it turned out to be different”. My guess is, looking at the SharePoint 2010 Beta, that there shouldn’t be that many surprises.

As a developer, I tried not to focus too much on the developer aspects, thinking that this will come to pass anyway. I went to an intro session and session on unit testing Sharepoint by Peli de Halleux. Here at Aviva Solutions all internal projects use TDD where possible and useful. Peli showed how he is able to make SharePoint development unit testable by using Pex and Moles. Moles allows making test stubs of any .NET code and that way might even make the file system testable. As a showcase Peli and his team made a comple Mole-d SharePoint. Recommended!

Development with Visual Studio 2010 will be fundamentally different, no more manifest.xml, feature.xml and copy/paste of GUIDS. The question is now if this is a good thing in all respects, because a session by Serge van den Oever and Mirjam van Olst showed that VS 2010 flattens out all components of your solution into separate features. Large solutions, like complete site definitions, end up completely unstructured. New opportunities for WSPbuilder!

However, the major surprise for me was the shift of focus for development to SharePoint Designer. SharePoint designer now  allows you to save changes as reusable solutions, WSPs. When imported into VS2010, these could be good starting points for your development. Do not expect too much yet, the WSP import in VS 2010 seems to be messy and broken for now. Microsoft has made Designer more powerful to cater for Power Users. In absence of Power Users I think developers should not be shy and use Designer to quickly get from A to B. If the WSP import works that is. Designer failed in sessions on more than one occasion during the event.

When trying to sum up the remaining goodies of this event, Claims based Authentication is worth mentioning. Or this is at least something that caught my attention. How to finally get rid of the annoying logon popup when opening Office documents. Also a new way to cross process boundaries without having to elevate to administrator rights.  Spencer Harbar pointed out the highlights, but could not really show it hands on unfortunately. Otherwise the way SharePoint 2010 will be more scalable and less restrictive in implementations showed up throughout all sessions.


Published: 24-01-2010 by Wim The | 0 Comments | 0 Links to this post
 

Software Development Practices from the Real World; On Repeat

On Saturday February 27th, the Dutch DotNED user group, Aviva Solutions and Oosterkamp Training & Consultancy will be hosting a full day session on software quality. The session will be mostly held by myself, but I will be accompanied by my colleagues Jonne Kats and Peter Hesseling.

Unfortunately, due to popular demand, the session was fully booked within 24 hours. But now, we are seriously considering repeating the session in the beginning of April. So if you’re still interested, go to the DotNED registration page and click the link at the bottom of the page to send us an email.


Published: 19-01-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

Storyotypes in Visual Studio 2010

Storyotypes are stereotypes for user stories that can help to define the right scope for your user stories. You can read more about these in the article Using Storyotypes to Split Bloated XP Stories and these slides. Team Foundation Server 2010 includes a new VSTS for Agile process template closely following the Scrum practices and supporting a user story WIT. However, Storyotypes are not supported, so I decided to change the standard work item template to add that field.

Doomen_UserStories_02

You can download the modified WIT template from here. You can install them into an existing project using the witadmin.exe tool (available if you open a Visual Studio 2010 Command Prompt), but it’s much easier to use the TFS Power Tools.


Published: 08-01-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

TFS Development Practices Part 1: An Introduction

As part of my many assignments, I’m compiling a bunch of best practices into a set of development guidelines for bootstrapping our internal projects using TFS. I’ve decided to share these with the community so that others may benefit from it as well. Beware that these practices are not new nor in any way invented by myself. I'm merely trying to get some good resources together in a nice compact format.

So what are my goals?

  • To provide insight into the benefits of applying well known best practices on software development projects.
  • To provide examples of applying those practices on new and ongoing projects and explain how to gain the most of out them.
  • To help you jumpstart a new project or professionalize running projects.

And what do you gain?

The goal of these posts is to end up with a set of development practices that provide the following benefits:

  • Allows you to more quickly and accurately assess the impact of new requirements.
  • Promotes building well designed software that allows changing functionality with lesser risks (even during a running project).
  • Promotes a consistent code-base that solves similar problems using similar solutions, everywhere.
  • Strives for a functionally consistent software system. For instance, ensuring that date fields look the same all over the application).
  • Attempts to prevent code duplication so that you never have to make changes at multiple locations if you change a particular piece of behavior or logic.
  • Eases the effort for deploying a new release by removing as many human actions as possible.
  • Provides traceability on where a particular piece of functionality has been realized technically.
  • Improves the developer experience when working on an existing or shared code-base (e.g. readability, purpose and goal of a block of code).
  • Provides a safety net that reduces and possible prevents the chance of running into regression problems.
  • Attempts to prevent common mistakes or misinterpretations by introducing common rules and recommendations.
  • Strives to a situation where each and every member of the team is aware of the project’s affairs.
  • Promotes any endeavors that improve the self-education and self-organization of teams.

Published: 04-01-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

Assignment at Microsoft in Stockholm, Sweden

stockholm From the end of August until the end of October 2009 I fulfilled an assignment for Microsoft in Sweden. Microsoft was working on a large extension on top of Microsoft Dynamics CRM for Nestlé. For years now Nestlé is the largest CRM customer of Microsoft.

The system that Microsoft developed for Nestlé is called MDMS (Medical Delegate Management System). This system, which is based on CRM 4.0, is used world wide by Nestlé Nutrition. I was working at the head office of Microsoft Sweden in Akala, Stockholm. My work consisted of the improvement and preparing for deployment of a migration tool for the migration of data from the previous version of the MDMS system, based on CRM 3.0, to the new system.

To do this I had to take into account all the custom extensions and plug-ins, which form part of MDMS. Part of the work was improving the tool with functionality and to make it bug free. After that the tool had to be accepted via an extensive testing phase.

The period at Microsoft was very instructive. It was the first time for me to work abroad for a longer period of time. The working environment was very pleasant, as well as the city of Stockholm as the colleagues I worked with. I would immediately accept another such assignment.

CRM is the customer relationship management system of Microsoft. It is besides a complete product also a very flexible product. The functionalities can be extended with so called extensions and plug-ins.

In CRM everything is based on entities. An entity for example is a contact or an account. These entities have properties which can be changed or extended with new properties. Also new entities can be created. This is what is called in CRM extensions.

Plug-ins are small peaces of code which can be attached to CRM in the form of plug-ins. Plug-ins can be written in every language available through Visual Studio, like c# or Visual Basic. Plug-ins are mostly used to take action when an event takes place that is fired by CRM.

You could for example attach a plug-in to a 'pre save' event. Before a contact is then saved, the plug-in is fired. In this way you are able to change things under water before CRM saves the contact. With plug-ins it is possible to have CRM completely the way you want it.

At the moment of writing, the project was delivered successfully by Microsoft to Nestlé Nutrition.

Check this blog also at: www.reinoboonstra.com.


Published: 17-12-2009 by Reino Boonstra | 0 Comments | 0 Links to this post
 

The ups and downs of the final PDC 2009 day

In addition to the WCF 4.0 session I blogged about earlier, I also attended some more sessions. The first one, Hybrid Cloud Computing with Azure and the Service Bus by Clemens Vasters was quite cool. One of the challenges that you may have if you move only a part of your system to an Azure server , is how to communicate with your on-premise systems. His team wrote a nice tool called the Port Bridge that you can use to create a very efficient secure tunnel between the cloud-based website and the firewalled on-premise application server or database. It understands many of the protocols and can tunnel both TCP/IP as well as Named Pipes. Check out a more detailed description on Clemens' blog.

I then continued to the Workflow Services and Window Server AppFabric session, but left halfway. The speaker was British and had a horrible accent that made it very difficult to follow him. Anyhow, in addition to the WCF statistics, AppFabric's IIS extensions also provide in-depth information on the whereabouts of individual Workflow instances and its contained activities.

After the lunch, I dropped in a XAML/Silverlight Futures talk, but left after ten minutes because it was only dealing with advanced XAML parsing. I then moved to the Mastering RIA Services session but was disappointed as well. The first half hour was just an intro of what happens under the hood, followed by some best practices. However, the term "mastering" was rather misleading since it never touched the advanced topics I was expecting. Definitely not on par with the remainder of the PDC sessions.

I concluded the day with an awesome talk on all the aspects Team Foundation Server 2010 offers for getting a piece of functionality completely done. It included aspects such as gated check-in, automatic deployment, and managing your entire test lab using the System Center Virtual Machine Manager and the Test and Lab Manager. The host, Brian Randal, is a very good and enthusiastic speaker. I attended his full-day pre-conference session on last year's PDC.

As of now, all sessions should be available in normal quality as well as HD from the PDC website here.


Published: 22-11-2009 by Dennis Doomen | 0 Comments | 0 Links to this post
 

Routing and service discovery in WCF 4.0

This year, the PDC 2009 lasts only four days (if you include the preconference day) so today I tried to attend as many sessions as possible. It's amazing to see how fast this week passed by. And I don't know how Microsoft does it, but this PDC has been full of novelties and amazing moments (and with that I'm not even mentioning all the social aspects of such a conference).

For instance, when I decided to attend a WCF 4.0 session, I didn't expect to see so many improvements and innovations, First of all, they've significantly reduced the amount of configuration needed to get your services running. Default bindings and behaviors, inheritance of bindings and behaviors, and listing services in the web.config rather than individual .svc files all make configuration easier. Another improvement is the advanced health monitoring and tracing functionality that they’ve integrated in the IIS manager. This takes the form of a dashboard providing live information on the WCF services running on a server, including extensive visualization and deep diving features for analyzing what is really going on in your service. So you no longer need to fiddle with configuration settings in the web.config to get some tracing.

Another new feature is service discovery. I'm not really sure what happened with the UDDI protocol, but in WCF 4.0 they’ve introduced new behaviors that will make your service discoverable through an UDP multi-cast network package. Using the new DynamicEndPoint class you can simply provide the contract definition of the service you're looking for, and WCF will look for a running service on the network. Really cool. And it supports both this kind of ad-hoc discovery as well as managed discovery facilitated by a dedicated discovery service running somewhere in your company.

However, the most impressive feature of WCF 4.0 is the built-in routing service that you can host just like any other service. Its feature set includes a routing engine that uses customizable filters to determine how to route what service operations to which service. It also has built-in support for bridging different transport/bindings, different SOAP versions, and even handle different authentication mechanisms. In addition to that, it can automatically reroute messages to an alternate endpoint if the preferred one is not available le. And finally, even though I'm against distributed transactions, the transaction scope will flow over the routed channel.


Published: 20-11-2009 by Dennis Doomen | 0 Comments | 0 Links to this post
 

Teched 2009 – Berlin Day 5 and summary

DEV307 - Parallel computing for managed developers

Until a few years ago computers were equipped with single core computers and the processing power of that single core would grow every year. Nowadays the computer power is still growing but not by making the single core faster, but by adding more cores to a computer. For programmers that means that if you want to leverage the true power of a computer you will have to change the way you write your applications.

image You will have to parallelize your software where you can but it hasn't been easy.

As you can see in the

example in the manual parallel solution. The are a lot of threading issues to take in account.

 

 

 

 

 

 

 

 

 

 

image

PLinq to the rescue! As you can see the in the PLinq example you are back focusing on the business value and not the concurrency side of programming. Besides PLinq the new parallel library offers a first class citizen programming model for parallel programming.  When programming in tasks you get a more think in “Unit-of-Work”way of working instead of “Paths of execution” when working with Threads. What I found very cool is the support for parallelism in the tooling. VS2010 offers a separate window to view tasks and to selectively freeze the execution of tasks, which makes debugging a lot easier.

 

DEV301 - Architecting Microsoft Silverlight applications with MVVM

Very good session on Silverlight, RIA services and combining them in with the Model View ViewModel pattern to get a good separation of concerns. Shwan Wildermuth part of the Silverlight promo team gave us a begin to end demo of building a small application, without the use of resharper or code snippets, showing of his xaml  ninja skills.

ARC309 – Patterns for cloud computing

IMG_0074 Having visited other sessions on cloud computing I still hadn’t had a clear overview to cloud computing, until this session. Simon  Guest had setup his presentation in such a way it encapsulated a lot of questions I had, giving me clear answer. In essence he described the five mayor ways cloud computing can be utilized.

Using the Cloud for Scale

Using the Cloud for Multi Tenancy

Using the Cloud for Compute

Using the Cloud for Storage

Using the Cloud for Communications

Teched 2009 – Summary

 

Well It been a busy week, lot of walking around in the beautiful city of Berlin and even though it’s a week ago that Teched 2009 ended my head still hurts on the information overload! First of I would like to thank my TechEd buddies Marko Mansi, Justin van Beijeren and Bastiaan Wout for keeping me company this week. Our conversations and discussions during the day and especially during the evenings were a great way to put things in perspective.

This years TechEd was different compared to last years, there where some pro’s and con’s which I like to summarize.

The food was great and the German punktlichheit was a very big improvement over last years Spanish mañana.,mañana. The venue however could have been put to better use, lots of stairs to go up and down not to mention when you wanted a drink you had to go back to the exhibitors hall (which partly changed during the week, so feedback works!). The content of the sessions was just like last year’s, excellent!  This year’s TechEd also combined IT Pro and Developers, something I was skeptical about before hand. My skepticism was proven warranted, many sessions where only given once and many of the sessions were full. Which left a lot of TechEd attendee pissed of, I witnessed a couple of heated discussions between the TechEd people and attendees wanting to attend a session. I stood in front of three of those closed doors and none of those sessions were repeated :-(.  Luckily I can view most of the sessions online. But I hope that next years TechEd is better organized.

I also would like to thank the organizers of this year’s Dutch country drink, it was awesome! And a special thanks to our waiter at club Dante for recommending Block House restaurant, very very very very good quality meat!

I also recommend to visit Berlin for a city trip, the city’s architecture and culture are great! This year mark the 20th year anniversary of the fall of the Berliner wall, which was celebrated and we were happy to party along with our German neighbors! That a for me about this years TechEd, until next time!

IMG_0051 IMG_0014 IMG_0041 IMG_0017 

 

 

IMG_0061 IMG_0006 IMG_0086


Published: 19-11-2009 by Hans ter Wal | 0 Comments | 0 Links to this post
 
 Next >>