Friday, November 28, 2008

Bad news packaged well

Ofcourse I never have bad news....

But if you do, make sure you package it well...

Make damn sure you are able to explain - plain and simple - how we got there, what the benefits are of our current unwanted situation, and how to get out.

Packaging does make a difference...

I guess I made my point... ;)

Unity versus Microsoft Workflow Runtime

Being a true Framework designer I love Inversion Of Control (IOC).

Microsoft's current tool of choise for IOC is Unity.

The other Day, I wanted to use my IOC-container inside the Microsoft Workflow Runtime. The reason for this is that I wanted my custom activities to support IOC;

Although the implementation is straightforward, it might save you some time.

public class UnityDefaultWorkflowSchedulerService: DefaultWorkflowSchedulerService
  private IUnityContainer _container;
  public UnityDefaultWorkflowSchedulerService (IUnityContainer container)
      _container = container;

   protected override void OnStarted()
      //wrap the container in a singleton to make it global

Please note that the example uses the IUnitityContainer directly. However, I like to wrap unity in my own IOC-container thus making the Inversion Of Control Container Inversionable. Get it?

Happy Inversioning.

Thursday, November 27, 2008

Anger is a gift (quote)

if you're not outraged, you're not paying attention. If you witness someone suffer undeservedly, that ought to madden. If you see someone profit through malice or fraud, that ought to infuriate. When you see cruelty, when you see pain, when you see injustice, and you know it would sacrifice nothing of moral consequence to end that cruelty, to soothe that pain, or right that wrong, and yet it persists, something has to explode inside you if you've got anything resembling a soul.

Tuesday, November 25, 2008

Stop Unittesting Its A waste Of Time!?

Ever noticed that some professionals (dedicated people most of the time) can have fatigues for certain attitudes or situations?

You know what I am talking about... Just think of Gordan Ramsy for example.

Today, I noticed that I am about to have some fatigues myself!
  • Don't tell me that working with a version control system takes way too much time making it impossible to meet your deadlines! Just don't!
  • Don't tell me that spreading (not adding) your code out over an interface, baseclass and factory takes way much more time! Don't!
  • Don't tell me that managers won't give you extra time to write unittests for your project! Don't, Don't, Don't!
In a desperate attempt to lose these fatigues and, to be honest, in the unrealistic hope to not have these discussions over and over again I will try to explain why this just is not true!

"Managers won't give you extra time to write unittests...?"

If you don't get extra time to write unittests it is probably a very good thing! I mean, why do you ask your manager for this in the first place? Are you asking your manager for extra time to have sensible variable names in the code you write? Are you asking for extra time for something "exotic" as comments? Ofcourse you are not! Same goes for (unit)testing! When your manager asked you how long it would take to develop that piece of software he ment "How much time will it take to develop the software in a sensible way!". Asking for extra time for comments or testing  or anything else that is normal when it comes to software development is your own attempt to get everybody frustrated... If this would be your attitude I bet that if you would get this mysteriously needed extra time in the first place , your software would still not meet quality standards only to find another excuse... but that's a different story.

"Unittesting takes way too much time?"

The first thing that pops into my mind is what do you compare it to? Changes are that you are comparing a well (unit) tested software system with a hardly tested at all software system. Sure testing takes a fair amount of time but this has nothing to do with unittesting or any other testing methodology.

To make this point extra crystal clear I will give you an example:

Today is your lucky day! Your are asked to extend your Acme-company's intranet with a way too simple news-part. 

Your current "timesaving" scenario:

You create the table in your database, write some queries and code to get the data in and out the database, some helper functions probably and finally the User Interfaces. Not using any sensible (unit)testing strategy you probably test the application by inserting, updating and deleting minimal news articles (subject=a, body=a, startdate=select from calendar, department=select from list) as long as it takes for the simple scenario to work. Tired of "testing" you do another test with a large newsarticle. You call it a day and a finished application ready to take into production... only for the nightmare (maybe not your nightmare but definitely mine). When users start using your application bug reports are being made to the helpdesk by phone and by email to be answered, added and forwarded via the bugtrackingsystem only to be discussed with the manager what to do and when. You find the bug, change your code again you do some simple and random testing, do a release (with all the overhead that comes with), close the bug and tell the manager and helpdesk for them to inform the original user.

Why did all these bugs hit you in the face? Because you did not test at all... If this is what you call testing I suggest you buy a book about testing software... I call it a waist of time....

Your new "timesaving" scenario:
Instead of doing those random dataentry scenarios that usually involve endless logins and selecting the needed menu buttons and options... I will write three simple test that do a "way too simple" insert, update and delete. I know that doing those will save me a lot of time compared to your scenario. I will run the tests and modify my code until it works. The time I have left I spent on writing some extra simple tests for my code (test principle: find defects early). Now that everything works I tie things up to my user interface and do some simple but serious Blackbox testing because the user interface contains hardly any code (test principle: software that is easy to test is easy to maintain).

Now when a bug report comes in I check it against my unittests to see why that situation is not covered. If it is covered it's simply a user interface problem easily fixed.

Unittesting does not take extra time if you don't do extra testing. It does save time because you can just repeat and repeat your tests with one press of a button untill things work.

Of course, even if you would compair proper repetitive manual testing in comparison to proper unitesting, unittesting will saveyou time right from the strart (even before you start refactoring). Not to mention that unittesting not only results in less defects but also leads to better designs....

Happy UnitTesting, Today !

P.S.: I know the example is not UnitTesting by the book its more integration testing but that's not what this article is about...

Friday, November 21, 2008

What is Architecture (Quote)

"Architecture is the continues quest for finding, keeping and sharing the perfect balance between philosphy and pragmatism through continuous evaluation of all stakes in blind justice by utilizing all available creativity and knowledge ."

Marcel van Eijkel -Eindhoven, 21 November 2008

Thursday, November 6, 2008

Whats new in DotNet 4.0 (pdf)

Take a look at this .pdf to get a good but quick impression about the new types and namespaces included asof Dotnet 4.0 (and 3.5 servicepack 1).

I think there is enough for everybody to benefit.

For me I particularly like:
  • the new biginteger datatype that is part of the new core;
  • the new concurrent-collection;
  • the mvc framework that is included;
  • the many new classes for the workflow framework;

What I like less about this release:

  • the entity framework seems part of this release. My experiences sofar before it was included in this release were disappointing;
  • in my opinion, the unity should have been part of the core;
  • new ajax stuff, but i would bet my money on jquery. No microsoft ajax for me anymore for a while;

Monday, November 3, 2008

My Favorite Code Snippets (Visual Studio)

Below, my ever growing list of my favorite Code Snippets:

happy Snippeting!

Friday, October 31, 2008

Visual Studio Unittest Inheritance

As your project thus your unittests grow and get more complex you might have to use every Object Oriented "trick" in the book to keep your UnitTests lean/mean/fast and flexible. Of course you don't want any redundant (unittest)code so applying inheritance to your unittests might seem a natural step (especially with provider/Inversion Of Control/Plugins beging used more and more).

Inheritance of UnitTests for Visual Studio however, still, is only partly supported by Visual Studio 2005 and Visual Studio 2008 (all editions). You can't define your baseclass/derivedclass in seperate assemblies.

To me this is a big limitation and the "obvious" solutions offered by Microsoft (copy/paste or add twice) for me are no option. I rather go for sharing in my version control system.

Just an other example of why UnitTesting as offered by Visual Studio so far "feels" a bit unmature. Speaking of which: the atrributename of "fixture" is so much more right then "testmethod"...

======== From MSDN =============

A test class is any class that is marked with the TestClass attribute. Test classes can now inherit members from other test classes. This means that you can create reusable tests in base test classes; derived test classes can inherit tests from base test classes. This feature eliminates duplicated test code and gives developers more flexibility while unit-testing production code.
A test class cannot inherit from a class that is in a different assembly. You can circumvent this limitation in the following way:
  • Define your base test class in a source code file and add the file to Project A.
  • Add the same source code file to a different project, Project B. To do this, right-click the project in Solution Explorer, click Add, click Existing Item, and then use the Add Existing Item dialog box to select the file.
    Although Project B builds into a different assembly, it includes the base test class. Other test classes in Project B can inherit from that base test class


For more information:

Visual Studio 2005:
Visual Studio 2008:

Happy Testing!

Thursday, October 30, 2008

Bad Architects (Quote)

"We would not discuss so abstract about Architecture if we were not such bad Architects."

Marcel van Eijkel, 30 oktober 2008 (based on a quote of Friedrich Nietzsche)

Wednesday, October 22, 2008

ASP.Net Ajax Update Panel Quirks

Mainly as a reference for myself, when working with the ASP.Net UpdatePanel remember the following limitations, I have encountered sofar:

For now, I am a big fan of the updatepanel because it gives me the user experience benefits of Ajax without the (architectural) impact.

Microsoft's Ajax Strategy

With only a bugrich codeplex AJAX Toolkit available, professional ASP.Net Developers were forced to count their options outside the Microsoft playfield. Fast amounts of time were and are invested in encorperating Ajax-frameworks into Just think of Backbase, Dojo, Prototype and Yahoo to name a few.

But there is hope If you are a fan of Scott Guthrie it can't be a suprise, Microsoft future direction for their Ajax strategy will be "JQuery". Atleast that is what I expect given the influence that Scott has and the recent beta release of the mvc-framework heavily depending on JQuery.

My experiences with JQuery are amazin: in the very first place it is very very practical. Its amazing what one can accomplish with a few, intuitive, lines of code.

Secondly, the availability of ready-to-use components build on "JQuery" is rapidly increasing.

So my advise: start experimenting with "JQuery" today, and learn the basics.


Tuesday, October 21, 2008

Quote about recognizing a leader

Iedereen met een doel, die van anderen afhankelijk is om dat te bereiken, is een leider.

21 oktober 2008, Marcel van Eijkel


Anyone, who has a goal being dependent on others to accomplish it, is a leader.

Monday, October 20, 2008

Null Column Values in Linq2SQL ( isNull, Linq )

Just wanted to share that a common mistake using Linq2SQL is to use the "equals operator" if you want to find a row that has null-values in certain columns.

From table in context.Table where (searchValue == table.Column)
Results in "from Table where Column=null"

From table in context.Table where (Object.Equals(searchValue, table.Column))
Results in "from Table where Column is null";

Happy Linqing!

PS: the reason I am using Linq2Sql and not Linq2Entities because of the current lack of disconnected entities support. I tried it but it was way too time consuming to use the conceptual layer as a business/object layer.

Saturday, October 18, 2008

Decorator Pattern using the Unity Framework

Realizing the decorator pattern in the DotNet-Framework has always been easy.

But, with the arrival of the new Unity (Inversion Of Control) Framework setting this up is less intuitive.

Below a config-based example (mainly for my own reference) copied from a codeplex discussion see:

Happy decorating!

Thursday, October 9, 2008

WCF Windows Service (Debugging)

Seeing the popularity of SOA rising, Microsoft's WCF services are rightfully being used more and more. Ofcourse, those services need to be hosted somewhere. One of the options for this is in a Windows Service (or technically speaking in a Process Service).

But, with the development of Windows Services comes the, generally accepted, burdon of deploying (compiling, installing, starting, attaching debugger, stopping, uninstalling) these services with every change we make, atleast if we do this by the book.

Not settling for that situation I counted my (too many) options and choose the following stratagy:

1) As goes without saying, allways make sure your service has hardly any "guts". Have all the logic in a seperate class that is seperately and indepentdently unittested.

2) Add a "program.cs" to your WindowsService-project, change its type to "Console Application" finally have Visual Studio start that project up when you start debugging your solution. (see source here: Run-windows-service-as-a-console-program.

Happy Servicing


  • Don't worry, by changing the type to "Console Application" you only tell Visual Studio to start (technically speaking "exec"-buildtask) the main-function of the program.cs you can still deploy your services without any changes to the sources/binaries.

  • Try to group your Services in one Windows Services (technically speaking adding multiple appdomains to the process). If applicable this does save a significant amount of memory.

  • Microsoft's upcoming OSLO concept might make this approach less needed;

  • Add the following configuration block to your "app.config" to get usefull Console output:

  <trace autoflush="false" indentsize="4">
    <add name="configConsoleListener"

Monday, October 6, 2008

Quote about being reasonable

The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man.

Friday, September 26, 2008

The world of business (Quote)

The world is a dangerous place, not because of those who do evil, but because of those who look on and do nothing.

Albert Einstein

Its unmistakable that that business is an eminent part of that same world.

Tuesday, July 22, 2008

Quote about energy through patience

In the sweet exile of labour we first of all learn patience. Patience teaches us energy and energy gives us eternal youth composed of receptivity and enthousiasm.

Tuesday, July 15, 2008

Plain Agility (Project Management)

I just found an excellent (pdf)article on the Microsoft website exaplaing basic Agility concepts in the first place and the role of tooling second.

Although it is written for Microsoft the author keeps the role of tooling general. I just love articles like that.

Easy to read, hard for anyone (other than purists) to disagree.

Its written by Kent Beck from Three Rivers Institute.

You can find the document here.

Happy Reading!

Sunday, July 6, 2008

Hollands own technology TV Station!

The last few years, I have been watching the t.v. less and less! Except for the discovery channel it has really rock-bottomed for me.

But I expect things to change the first of October! A date to put in your calendar. That date will be te start for Holland's Technology / Inovation / Internet TV-Station.

Check it out at:

Supported by Hollands Boris Veldhuis van Zanten!

Happ Watching...

Microsoft Arrowhead (DotNet)

Finally, I just found the time to download, install and play a bit with the DotNet Framework 3.5 Service Pack 1 (beta).

Part of this service pack seems to be something called "ArrowHead". As we are used from Microsoft, this is still the codename of course.

As I understand this "ArrowHead"is about supporting occasional connected clients.

Let me know what your experiences when you have taken the time to play with it. There is not much information available to me yet, but have a look at wiki:

Happy Playing (with your arrow-head :)

Tuesday, July 1, 2008

Linq Examples (Cheat Sheet)

Just came across this webpage from Microsoft where you can find 101 neatly categorized Linq examples:

Happy Linking!

Monday, June 30, 2008

Extension Properties? (DotNet)

I was just wondering...

Its been allready a while since extension methods have been introduced. Hence, many of us hardly actively remember not having those methods available to us.

But I was wondering:
  • Where are the extension properties?
  • Do extension methods go against the Object Orentation principles?

What do you think?

Friday, June 27, 2008

Quote about success and failure

Success is failure turned inside out....

For me, true success is about failing, failing, failing and yet sticking to it. Making? No demanding success. Its oke to rest but not to quit....

Stay focused, in the end you will succeed...

Tuesday, June 24, 2008

Microsoft WCF Tools (Test, Configure, UI)

With SOA and Web v2.0 everything is about services.

As you know for Microsoft the current strategic tool of choice for services is WCF. However, testing / configuring with WCF, among things can be tricky. Knowing what tool to use in what situation is essential. As it turns out still not everybody knows about the currently available tools from Microsoft, so just as a reminer below a list:

  • ServiceModel Metadata Utility Tool (Svcutil.exe): Generates service model code from metadata documents and metadata documents from service model code;
  • Find Private Key Tool (FindPrivateKey.exe): Retrieves the private key from a specified store.
  • ServiceModel Registration Tool (ServiceModelReg.exe): Manages the registration and un-registration of ServiceModel on a single machine. COM+
  • Service Model Configuration Tool (ComSvcConfig.exe): Configures COM+ interfaces to be exposed as Web services.
  • Configuration Editor Tool (SvcConfigEditor.exe): Creates and modifies configuration settings for WCF services.
  • Service Trace Viewer Tool (SvcTraceViewer.exe): Helps you view, group, and filter trace messages so that you can diagnose, repair, and verify issues with WCF services.
  • WS-AtomicTransaction Configuration Utility (wsatConfig.exe): Configures basic WS-AtomicTransaction support settings using a command line tool.
  • WS-AtomicTransaction Configuration MMC Snap-in: Configures basic WS-AtomicTransaction support settings using a MMC snap-in.
  • WorkFlow Service Registration Tool (WFServicesReg.exe): Registers a Windows Workflow service.
  • WCF Service Auto Host: Hosts WCF services contained in libraries (*.dll) files
  • WCF Test Client: GUI tool that allows you to input parameters of arbitrary types, submit that input to the service, and view the response the service sends back.
You can find all information about there tools here.

There are also a few Debugger Visualizers for WCF available aswell:

Be aware though, Oslo is coming up about to change this big time!

Happy Serviceing!

Wednesday, June 18, 2008

The Business-IT-Gap has a face

With all the current hypes, just think about the Architecture, SOA and SaaS hype, you might think that agility, stability and interoperability are goals in itself. That they are specific magical ingredients recently discovered about to solve all IT related problems. This would not be an unlogical conclusion. After all, that's what is being promised you will need and get an agile business because that is what everybody needs.

Is it not? No, not at all!

In fact you just met the "Business-IT-Gap" in person. It might be the manager asking a developer for an application that should (obviously) be flexible and stable. Or it might be a sales person or consultant explaining a client that they really need to go for a SOA-solution for agility reasons. Either way you are actually physically facing a (e.g.: talking/listening to) person embodying the Business-IT-Gap.

Really? Explain!

The whole reason why the Business-IT-Gap exists is because managers have lacked to provide enough guidance about what kind of flexibility and interopability and the dagree of stability is that was needed (a responsibility now being hijacked by people calling themselves Architects).

Lacking this guidance resulted in systems lacking flexibility or the wrong kind of flexibility (thus maintainability) and interoperability. Moreover, because every developer has its own personal view on the type of flexibility needed, changes are that what is flexible in one application is fixed in another. Thus in fact lacking this guidance cannibalized the overall investments in flexibility. Believe me this is not theoretically speaking, this is what I see day in and out! I can't believe nobody else notices this...

So what should I do?

Of course, it's not only you. It's the whole branch! Developers should demand more guidance. Sales people and consultants should not propagate agility, interoperability and stability etc. "pur sang". They should explain that it is about Just Enough and about Just Right and that divers from situation to situation and company to company. You just can't and don't want to be totally agile either given a solution or given an total enterprise. It's about finding the right balance between what can be fixed and what should be flexible. Because flexibility comes with a big cost that can only be returned (roi) if it will be used sooner or later. Just think about architecting a house. Realizing all your dreams and whishes (read: requirements) in a totally agile structure would have you end up with something crazy like a hyper expensive stretchable balloon!

But now that you know, you can and should close the gap by asking the right questions and demanding a reasonable answer!

Happy closing the gap!

Monday, June 9, 2008

Compare Assemblies (ALM)

To get your build and release procedures right you need to know and inform about what has been changed in this release compared to the last (major)release.

As far as I know there are three tools that can be used to compare assembly versions:
  • Microsoft's LibCheck which might be incorporated into your build server to have a document generated with your release that lists all the differences; This application outputs a xml-file with the differences;
  • For ad-hoc investigation you should you ndepend;
  • For simplicity you might use the free opensource Framework Design Studio; Which can also be incorperated into your build server using the "fxdiff.exe" found in the install folder. This application gives you a visual SourceSafe-like comparison.

I recommend using nDepend today! If you are not using it allready.

Happy comparing!

P.S. If you can't find the download for the Framework Design Studio click here.

Tuesday, June 3, 2008

Welcome.doc (Project Management)

Every now and then a new person will join the project. It maybe because somebody got sick or will go on a holiday, because a specialist is hired for a specific task or because we want to speed up things. What ever the reason the same questions are asked over and over again:
  • What database do we use and where is it?
  • What servers are do we use?
  • What does the develop / test / production environment look like?
  • Do we use SourceSafe?
  • What version of Visual Studio do we use?
  • Etc. etc
Its my experience, that the first time someone joins the project is the perfect moment to write a "Welcome.doc" - document. Next time somebody joins the project you are more then prepared. I always ask the new person to write them down which I then review.

A typicle "Welcome.doc" document for me looks like this:

Brief introduction (1 page)

  • Vision: it is mission ciritical and why?
  • Basic description of the functionality;
  • Logical position of the application;
  • Main technologies used;

Meet the application (Chapter 1)

  • Size and complexity;
  • Basic architecture;

Meet the users (Chapter 2)

  • Grapphical context diagram (users versus elementary use cases);
  • Main usescases and a brief description;

Logical System Description (Chapter 3)

  • Logical parts;
  • Logical main process (value chain);

How we develop (Chapter 4)

  • Tooling;
  • Enviroment;
  • Known shortages;
  • Proces (preperation, execution, finilization);

How we test (Chapter 5)

  • Tooling;
  • Enviroment;
  • Known shortages;
  • Proces (preperation, execution, finilization);

How we release (Chapter 6)

  • Tooling;
  • Enviroment;
  • Known shortages;
  • Proces (preperation, execution, finilization);

Daily activities (Chapter 7)

Many projects come with daily activities. This might be to check a log file, build server or to check a dashboard.

First Aid for Production Problems (Chapter 8)

If you join the team its just a matter of time before somebody runs into your office to ask you for your help with something that is thought of a high priority production problem. This chapter describes the basic checks.

Plan to get up and running (Chapter 9)

This chapter describes what to do after reading the "welcome.doc" - document to get you up and running as fast as possible. This might be to make a few "fake" changes and go throught different applications layers, the test procedure and release procedure.

Settings and Locations (Chapter 10)

This chapter describes the main settings (for example a flag in a config file to set debug on or off) and the locations of the main parts like the dashboard, the intranet, certain folders on the network where tooling can be found.

Relevant documents and applications (Chapter 11)

Any other, more in depth, documentation about the current system or referenced applications should be referenced here.

Frequently Asked Questions (Chapter 12)

Frequently asked questions and their answers of course, about this document can be listed in this chapter.

Happy Welcoming!

Thursday, May 29, 2008

How to get the best? (Quote)

"You only get the best by refusing the rest..."

For me, this is how I have always tried to live my life, I guess as from my twenties...

Good luck persuing!

Monday, May 26, 2008

Microsoft Posters (Biztalk, Visual Studio, DotNet)

Did you know that there are several excellent posters you can download from the Microsoft website? There are posters on many major topics including DotNet, Biztalk, Silverlight and Visual Studio.

Go check them out and download them here.

Below, as a preview, a list of the most populair posters.

Security & Reliability Co-Partner Marketing Poster 1
This contains marketing material which can be used by Microsoft Partners in the Microsoft Security and Reliability campaign. This download contains Poster 1.

BizTalk Server 2006 Capabilities
Lists BizTalk Server 2006 capabilities

BizTalk Server 2006 Runtime Architecture
Illustration of the modules and components of BizTalk Server 2006.

PnP Overview Poster pdf
PnP Overview Poster pdf

Security & Reliability Co-Partner Marketing Poster 2
This contains marketing material which can be used by Microsoft Partners in the Microsoft Security and Reliability campaign. This download contains Poster 2.

Microsoft® Silverlight™ 1.1 Developer Reference Poster
Microsoft® Silverlight™ 1.1 Developer Reference Poster

Smart Client Poster pdf
Smart Client Poster pdf

BizTalk Server 2006 R2 Scale-Out Configurations
This poster illustrates typical scale-out configurations and options.

Visual C++ 2008 Keybinding Poster
List of keybidings for Visual C++ language within Visual Studio and Visual C++ Express 2008

BizTalk Server 2006 R2 Database Infrastructure Poster
This poster depicts BizTalk Server databases and associated components, jobs, services, UI, and events.

2007 Office System Document: Open XML Developer Map
Download this poster to learn more about Open XML File Formats.

Visual C++ 2005 Keyboard Shortcut Reference Poster
This poster contains the default keybindings for Visual C++ 2005, and is available as a PDF download in either color or grayscale for you to print.

BizTalk Server 2006 R2 Poster
This poster lists the BizTalk Server 2006 R2 capabilities.

BAM Poster for Microsoft BizTalk Server 2006 R2
The BAM poster for BizTalk Server 2006 R2 enables both new and experienced users to better understand the concepts, processes, and management of BAM.

TechNet Magazine Active Directory Component Jigsaw Poster
Active Directory Component Jigsaw poster, originally printed in the March-April 2006 issue of TechNet Magazine.

BizTalk Server 2006 R2 Runtime Architecture Poster
This poster provides a detailed illustration of the modules and components that make up the BizTalk Server 2006 R2 runtime architecture. It shows typical message flow and data flow that occurs between these components at run time.

Windows Server 2008 Component Posters
Windows Server 2008 Component Posters, originally printed in the July 2007 issue of TechNet Magazine.

NET Namespaces Poster
The .NET Framework 3.5 Common Namespaces and Types Poster

Visual Basic 2008 Keybinding Poster
Printable wall poster containing list of useful keyboard shortcuts for Visual Basic 2008 developers

2007 Office System: Developer Posters
Download these posters to learn more about the new features and enhancement to the 2007 Microsoft Office System.

Tuesday, May 20, 2008

Windows Updates Downloader (Windows)

If you love control and simplicity just like me then you will like the Windows Updates Downloader.

With Windows Updates Downloader, Windows Updates have never been easier to download. With the simple interface that Windows Updates Downloader provides, you can quickly and efficiently download all of the Windows Updates for your version of Windows in your language. You can then either install the updates, slipstream them to an existing Windows source, use them for network installations or on computer who are not connected to the internet. You can even collect them to store them for achival purposes.


Happy Downloading!

Sunday, May 18, 2008

Defensive Programming (Spec#, DotNet)

Do you apply Defensive Progamming techniques?

Based on my experience, changes are good that you are not.
If so you may be missing out on many benefits such as:
  • Producing easier to use, understand, and maintain class-libraries;
  • Havinging applications that are much easier to support and test;
  • And last but not least, having more secure code.
In other words: defensive programming makes your solutions more easy from many viewpoints. Which, to me, in itself is a goal.

So what is this defensing technique about?

Defensing is a concept that has many aspects to it (see WikiPedia here) but in this article I will focus on the ensuring that the so called "pre-conditions" are met instead of assuming they will be met.

I am sure you know what I am talking about we have to deal with this every day all of the time! Just think about all those function parameters that might have an invalid value when that function is being called. That integer parameter* that should not be zero or negative or that object-reference parameter that just should not be null for example. With defensing you always check those pre-conditions first and immediately throw an exception if one of them is not met.

In any application there are thousands of those "pre-conditions" that could and should be checked. Sure that sounds like lot but in fact when you do it from the start it is hardly any extra work and you start enjoying the benefits almost immediately returns your small investment . And with the help of a small (existing) library the equation is even more interesting! Let me explain what I mean:
  • For anybody, including yourself after a while, maintaining your code it is immediately crystal clear what your function cannot do or handle! In many cases there is no need to test if this new situation is supported, anymore;
  • If one of your methods is called with an invalid value a clear exception is thrown immediately. No more “Null Reference Exceptions”, for example, deeper in your library that are all too hard to trace! Which is only possible by developers nothing to do for the support department, over and over again.
  • Many security issues originate from an unforeseen use of an application or library. By making sure that all your, assumed ,preconditions are checked it becomes much less likely to have your methods begin misused.

Should I really use this? It sound like a lot of work!

Sure it sounds like it, but when you do this right this is certainly one of those so called "Low Hanging Fruits". Quick wins with huge benefits. If you would ask me just do it! Apply from the start of a new project or add when changing a function that already exists. A good programmer is a lazy programmer so make defensing more easy for yourself using Macro's, Tooling and a small library of perhaps extention methods!?

Oke, I am convinced! What do I need to do to start defensing, Today?

One of the first things we need to do is have a library that helps us easily check parameter values and throw the appropriate clear exceptions. You basically have three options here:

  • One option is of course to write your own; This has the benefit that the exceptions that you fully control the messages and types of exceptions that are thrown;
  • Another option is to use the assertion classes from any Unit Tests framework. The, architectural, downside to this is that you are using Unit Test classes and libraries in a production environment. Conceptually this is not wrong but as far as I know there are no practical downsides.
  • The last, certainly not the least, option is to use the upcoming, but already available, Spec# framework from the Microsoft Research department. Which has the huge benefit of having a framework specifically for this use on one side which comes with integrated Visual Studio support as well!

Spec# sounds really interesting! Where can I find more?

I will soon write an introductionairy article about this, so stay tuned!

How do you look at Defensing from an architectural point of view?

Architecture is about how things relate and about meeting stakeholder stakes:

  • The library classes that help to make your defensing easy should be part of your Core;
  • The information about the valid and invalid use of your methods should be part of your technical (generated) documentation. This is something, spec# nor sandcastle or nDoc, does not yet take into account but possibly could.
  • Defensing makes your class-libraries more easy to use, to maintain, to support and more secure. This is someting that should be in the interest of every stakeholder but in particular to the CTO and ICT (support)Managers.

We have been talking about defensing, but can’t I just see what it looks like?

Sure thing! To wrap things up I have included some examples below using my own practical little defensing framework. After all, we should not talk too much about coding, coding is something that you “just” should do!

public void example1(object parameter)



protected void example2(object valueToAdd)
Defence.Boolean.ShouldBeFalse(_collection.IsReadOnly );


Does not look difficult does it? I told you so! The best things in live are the simple things...

Happy Defensing!


*) I know we might use an Unsigned Integer here, but this is not CLS-Complient thus in many not recommended to be used.

Saturday, May 17, 2008

Remote Desktop Management Heaven

Are you an contracter working for different companies like me?
Or, do you have an heterogeneous environment to work with?

Then "Terminals" might be the application you have been waiting for!

"Terminals" allows to manage all your remote desktop connections. No matter if they are RDP, VNC, VMRC, RAS, Telnet, SSH or Citrix and moreover with all the options you can dream of.

Its open source thus free! And you can find it on codeplex here.

Other features include :

1. Ability to import files such as MuRD and RDP files.
2. Tagging connections (grouping)
3. Shortcuts (to external tools) and Favorites
4. Some toolbar customization
5. Full Screen mode, multiple screen sizes and color depths supported
6. Minimize to tray
7. Single application instance
8. Execute before connect
9. Completely secure password storage
10. Screen capture of entire terminal window

Happy Managing!

Wednesday, May 14, 2008

My Architectural debate on attributes (DotNet)

I really like the concepts of object orientation. Still, the longer I work with it the more and deeper my appreciation gets.

But lately, I have this tug that just won't go away. Something that is bothering me more and more. Something that just doesn't feel right. It is where Microsoft is going with the usage of attributes in the DotNet Framework.

Isn't "seperation of concerns" one of the main concepts of object orientation? Isn't one of the nice things of this that an object is or at least should be unaware of how it is used?

So why is it than that I have to add more and more attributes to my classes just to be able to use them? You must know what I am talking about. Just think about the "Serializable"-attribute. I don't change anything to the class. It was serializable allready but now I have to decorate it just to be able to use it in that way. Why? Same for exposing objects as services but also something trivial as security or needed permissions. Sure I can live with this but it really seems to be hot to use attributes these days. Think about the Enterprise Application validation block. I really consider those attributes to be a poor mans solution. (Note to myself: publish a proper concept for validation. Without attributes that is.)

What's wroning with "old fashioned" interfaces or exceptions?

If you would aks me I would have them ask Scott for permission for every attribute they want to add to ever wildgrowing list of attributes in the DotNet Framework.

That reminds me, the same is happening with .config-files. But fortunately that has been noticed by the community and Martin Fowler wrote an excellent article about this abuse.

Tuesday, May 13, 2008

Auto Implemented Properties (DotNet v3)

I just came across the option of using something called "Auto Implemented Properties" which is new to DotNet version 3.0.

The nice thing about this feature is that not only saves a lot of code in the simple scenarion where you only have a "dumb" property passing and returning a private field value in and out. But it is more conceptally right.

For example: public string Name { get; set; } will return a "true" property.

It is conceptually more right becauseit makes sure nobody access your fields instead of your properties like it should for an avarage application which makes it more readable and more maintainable. And there is less type redundancy aswell. Thus in my opinion this is more conceptually and practically right!

Just for the record: in many cases it is obvious (for sake of Anticipation Af Change) that you want to use a property and not just a field.

An example to fall in love with:

public class Contact
public string Name { get; set; }
public string Address { get; set; }
public int ContactNumber { get; set; }
public int ID { get; private set; } // readonly

Friday, May 9, 2008

Crazy Windows Versions (Mobile)

The other day, I got this excellent new cool toy from the Samsung i780.

But henever I want to download a program I have to select the following distributions:
  • Mobile 6.0 Classic & Professional (Not Standard!)
  • Windows Mobile 5.0
  • Windows Smartphone 5.0
  • Windows CE 5.0
  • Windows Mobile 2003/SE

Then when I try to install the "right" distribution my "Phone" Windows tells me that it is not a valid "Pocket PC"-application! I thought regular Windows distributions could be confusing but this is crazy!

Try to explain that you your grandmother!

Thursday, May 8, 2008

The role of an architect (Architectural Journal)

The debate of what an architect is, what he should do and how to become one seems to go on and on and on. Still some people I meet struggling with these questions have not learned about the Architectural Journal and the excellent issue about "The Role Of An Architect".

So, again, you can read all about this role here (English PDF Version).


Articles in This Issue
We Don't Need No Architects
by Joseph Hofstader
This article presents a defense of the practice of architecture in software development, and examines widely held perceptions of architects and some of the mistakes that they make that contribute to negative perceptions.

Becoming an Architect in a System Integrator
by Amit Unde
In this article, the author attempts to crystallize the wisdom that he has gathered from his work in a program in which he grooms aspiring architects into full-fledged architects.

Architecture Journal Profile: Paul Preiss
Paul Preiss is the founder of a nonprofit group called IASA (International Association of Software Architects). Read about the goal of the organization, as well as some of Paul's thoughts about the profession.

The Open Group's Architect Certification Programs
by Leonard Fehskens
How do you know if someone is really an architect? This article describes The Open Group Architecture Framework (TOGAF); the TOGAF certification program; and certification levels, programs, and process.

The Need for an Architectural Body of Knowledge
by Miha Kralj
This article covers why an Architectural Body of Knowledge (ArcBOK) is an important building block in professionalization of IT Architecture, and how the Microsoft Certified Architect community drives the creation of an ArcBOK through its Special Interest Group.

A Study of Architect Roles by IASA Sweden
by Daniel Akenine
In this article, we examine the need for IT architects, describe a study by IASA Sweden to better understand IT architecture, and discuss four architect roles that IASA Sweden recommends for a typical organization.

The Softer Side of the Architect
by Joe Shirey
This article outlines a framework that the author developed for defining "soft skills" and strategies for the architect, based on his experiences and interactions with architects that he admires.

An A-Z Guide to Being an Architect
by Mark Bloodworth and Marc Holmes
These days, an architect has a lot of diverse responsibilities. In this article, the authors provide a handy A-Z guide to being an architect, and wish that all your architectures be "n-tier".

Architecture? Who needs it!

I just read an blog-post that contained a knifesharp graphical summary that seemed all too familiair to me. I just had to share it.

Source: Nick Malik.

RDP Port Blocked!? (Windows Terminal Server)

Many corporate networks have blocked the Remote Desktop Client-port (3389).

For most developers having their own servers at home having this port blocked can be really annying and inconvenient for too many reasons.

With the arrival of Windows 2008 Server the help is at hand. Windows 2008 allows you to connect via the "https"-port using a feature called "Terminal Services Gateway".

There are two ways to use this new feature:
  • Upgrade to Windows 2008 Server which in many cases sounds easier that it actually is;
  • Create a new virtual machine (don't we just love virtualization), install windows 2008 server and have that Windows instance act as a Terminal Server Gateway to your Windows 2003 server only. Its hard to find information about this scenario because it is nowhere explictly written but since this is a true Gateway I am sure this will work.

More information at technet here.

For me this will keep me bizzy for one other night ;)

PS: Setting this up last night was pretty straight forward. The only somewhat challenging part was setting up the ssl-part in the IIS Server of Windows 20008 because this requires you to setup a certificate. Since this is my home server I had to use a self-singed-certificate which adds some extra work.

Wednesday, May 7, 2008

Using Keyword (Using the Using)

I just had a small discussion about the "Using"-Keyword. A topic that everybody seems to have a slightly different, sometimes evan magical, view on. But what does it really do?

The "Using" keyword makes sure if an exception occurs during the life of an objectinstance or when that objectinstance goes out of the using-scope (thanks Edward Bakker) that the IDisposble.Dispose() method is called.

Nothing more, nothing less. That's all folks.

Because the IDisposble-interface is mostly implemented on objects that use managed resources it is often thought that it the "using"-keyword magically cleans up these resources but that is clearly not the case nor does it magically close open databaseconnections for example!

As a rule of thumb, you might want to use the "Using"-keyword for all objects that implement the IDisposable interface. Because this can be easyilly forgotton and because this should be part of every codereview this is an excellent candidate for a "CodeAnalysis"-rule. If it not allready is?

Happy cleaning!

Tuesday, May 6, 2008

Projectmanagement oneliners

Some Projectmanagement oneliners:

  • To estimate a project timeframe, work out how long it would take one person to do it then multiply that by the number of people on the project;
  • If an IT project works the first time, it is wrong;
  • A user is somebody who tells you what they want the day you give them what they asked for
  • Good project management is not so much knowing what to do and when, as knowing what excuses to give and when;
  • The first 90% of a project takes 90% of the time, the last 10% takes the other 90%;
  • Warning: Dates in a calendar are closer than they appear to be;
  • The real name for a projectmanager is a clientmanager;

Monday, May 5, 2008

EventHandler serializable?

I really can't think of any good explanation why the EventHandler Generic is marked as serializable.

Sure I can think of exotic situations where this can be usefull but it would make more sence to mark the individual eventhandlers as serializable in those rear situations where when you need them to be serializable.

There must be a good reason for it I am sure, but I still haven't found it.

Do you know any? Let me know!

Friday, May 2, 2008

Archive Live (Microsoft Webcasts)

Gevonden op de Microsoft website:

Welcome to "Archive Live", the archive page for MSDN Webclass. We have gathered together the essential elements of our previous webclasses so you can catch up on any you missed or refresh your memory on those you attended. Just scroll through the archives to see which webclasses interest you. Happy learning!

Bron: Microsoft Hong Kong.

Friday, April 25, 2008

Het leerplan van een IT Architect (IASA)

Het IASA heeft een heel leuk grafisch overzicht van hoe het leerplan van een IT Architect er globaal uitziet:

De belangrijkste conclusies die je als IT Architect "Wannabe" op basis van dit model zou kunnen trekken zijn:
  • Vertel overal waar mogelijk dat je een IT Architect wilt worden; Zorg dus dat je communiceert maar ook publiceert. Zowel formleel als informeel (denk aan een blog!);
  • Zorg dat je sponsors krijgt voor jouw ambities bijvoorkeur in het management en bij mensen die reeds IT Architect zijn;
  • Zorg dat je een certificeringstraject start;



Full Skills Package For The IT architect (IASA)

De "International Association of Software Architects" (IASA) is bezig met het inventariseren van de kwaliteiten en kennis die een IT Architect zou moeten hebben.

Met deze lijst kun je vrij snel afvinken op welke onderdelen je sterk bent en aan welke onderdelen je eventueel nog zou kunnen werken: cursussen moet volgen en ervaring moet opdoen. Ook kan het uistekend dienen voor het vormgeven van je eigen (toekomstige) functie want veel bedrijven hebben de functie nog niet opgenomen in hun functiehuis is mijn ervaring.

Business-Technology Strategy
· Business and Technology Strategy Rationalization
· Business Capability Mapping
· Business Fundamentals
· Business Process Engineering and Business Process Management (BPE/BPM)
· Business Valuation
· Contracts
· Industry Analysis
· Intellectual Property
· Investment Prioritization and Planning
· Requirements and Constraints Analysis
· Technology Capability Projections and Planning

Design Skills
· Architectural Description
· Architecture Styles
· Architecture Viewpoint and Views
· Context
· Design Diagramming, Notation and Deliverables
· Design Methodologies
· Design Methodology Evaluation and Review Practices
· Domain-Specific Modeling Languages
· Optimization Techniques During Design
· Patterns and Best Practices
· Prototypes
· Reuse
· Synthesis and Problem Solving
· Traceability Throughout The Life Cycle

Human Dynamics
· Conflict Management
· Crisis Management
· Customer Relations
· Leadership
· Mentorship
· Negotiation Skills
· Peer Interaction
· Politics
· Presentation Skills
· Selling Skills
· Situational Awareness
· Team Building and Management

Infrastructure Architecture
· Access and Identity Management
· Capacity Planning
· Common Application Services
· Device Management and Provisioning
· Messaging Standards
· Network Design
· Support Processes and Tools
· System Tuning

IT Environment
· Capability Development, Training and Management
· Capability Mix Identification
· Compliance: Audits, Certification, Licensing and Regulation
· Cost Estimation and Tracking
· Dependency Identification and Management
· Engineering
· Governance
· Infrastructure Landscape
· Knowledge Management
· Maintenance and Support
· Operational Management
· Operations
· Organizational Dynamics
· Organizational Structure
· Outsourcing
· Resource Balancing and Management
· Stakeholder Definition
· Vendor Management
· Virus and Patch Management

Quality Attributes
· Implementing Quality Attributes
· Manageability, Maintainability and Supportability
· Monitoring Quality Attributes
· Performance, Extensibility, Flexibility
· Quality Attribute Auditing
· Reliability, Availability, Scalability
· Security
· Usability, Localization, Accessibility, Personalization/Customizability

Solution Architecture
· Application Layering
· Asset Management Systems
· Business Intelligence
· Change Control
· Customer Information and Relationship Management (CIM/CRM)
· Development and Build Environments
· End-to-End (E2E) Test Design and Implementation
· Implementing the User Experience
· Information Architecture
· Integrated Development Environments (IDEs) and Modeling Tools
· Localization
· Mainframe Development and Design
· Messaging Technology
· Mobile Platforms and Frameworks
· Personalization
· Programming Languages
· Proof of Concept Design
· Service Network
· Solution Architecture Design Methodologies
· Solution Architecture Design Patterns
· Solution Architecture Development Methodologies
· Solution Architecture Specialities
· Solution Architecture Tools
· Technology Frameworks
· Transactions
· User Experience
· Workflow


Thursday, April 24, 2008

Microsoft Workflow en ASP.Net

Wanneer je de workflowruntime direct vanuit wilt gebruiken dan zijn er een aantal zaken die je goed in de gaten moet houden:

  • Tenzij je de "ManualWorkflowSchedulerService" gebruikt wordt er voor iedere "PageRequest" en voor iedere "Workflow"-instantie een aparte "thread" gemaakt wat dus leidt tot een verdubbeling;
  • Maak een singleton-wrapper om de Workflow-runtime heen die je wilt gebruiken zodat je maximaal een instantie per webapplicatie kan bestaan.
  • Alle workflowinstanties blijven in het geheugen van je webserver tenzij je de "SqlWorkflowPersistenceService" gebruikt.


P.S. Om deze "SqlWorkflowPersistenceService" te gebruiken heb je een SqlServer-database nodig met de juiste objecten. Deze kun je aanmaken met de scripts "SqlPersistenceService_Logic.sql" en "SqlPersistenceService_Schema.sql" die te vinden zijn op de locatie: "C:\windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN".

Event "<eventname>" on interface type "interfacename" for instance id "<guid>" cannot be delivered (StateWorkflow)

Exception of type 'System.Workflow.Activities.EventDeliveryFailedException' occurred in System.Workflow.Activities.dll.Additional information: Event "<eventname>" on interface type "interfacename" for instance id "<guid>" cannot be delivered.

Het is niet echt voor de hand liggend hoe je deze foutmelding moet oplossen maar toch is de oplossing eenvoudig:
  1. Kijk naar de InnerException. Meer dan logisch maar wordt te vaak vergeten;
  2. Zorg dat jouw afgeleide EventArgs klasse gemarkeerd is als "Serializable";
  3. Zorg dat alle klassen die gebruikt worden in jouw EventArgs-klasse "Serializable" zijn;
  4. Zet in de constructor van jouw EventArgs-klasse de eigenschap "WaitForIdle" op "true";
  5. Werkt dit allemaal niet dat zit er een fout in je Statemachine Workflowontwerp, bestudeer je workflow extra goed in de "desginer"; Om achter het probleem te komen kun je. Eventueel kun je de instantie van de "StateMachineWorkflowInstance" klasse besturderen kijk dan met name naar de ""CurrentState" en de "PossibleStateTransitions"-eigenschap.


Monday, April 21, 2008

Succesvol software ontwikkelen (Agile)

Slechts sporadisch kom je een boek tegen dat zo praktisch en zo realistisch beschrijft hoe je succesvol software zou kunnen ontwikkelen dat je niet kan begrijpen dat dit niet veel eerder bestond.

Dit is dus ook het geval met het boek "Getting Real". Hierin staat dit op een werkelijk fantastische manier in 16 actiegerichte hoofdstukken beschreven.

Voor iedereen die met softwareontwikkeling te maken heeft een echte aanrader en voor iedereen die ambities heeft een eigen softwarebedrijfje te beginnen een absolute must!

Het boek is volledig publiekelijk beschikbaar. Zie:

(Bedankt voor de tip Gerard Doeswijk)

Thursday, April 10, 2008

Architectuur zonder Architectuur!

De afgelopen tijd is het onderwerp architectuur echt een hype geworden en het einde is nog lang niet inzicht: nooit eerder werden er zoveel seminars over dit onderwerp gehouden. Nooit eerder werden er meer boeken en artikelen over dit onderwerp gepubliceerd.

Maar waarom eigenlijk?
Is architectuur nieuw? Dat toch zeker niet.
Is architectuur een doel? Ook dat toch niet.

De belangrijkste reden voor al deze aandacht voor dit onderwerp heeft te maken met het feit dat iedereen dagelijks geconfronteerd wordt met de gevolgen van slechte en toevallig tot stand gekomen structuren. Denk bijvoorbeeld aan eilandautomatisering en het ratjetoe aan verschillende technologieën die van project tot project gebruikt zijn. Om nog maar niet te spreken van de totaal verschillende bouwstijlen die gehanteerd zijn van ontwikkelaar tot ontwikkelaar en van project tot project.

Logisch dus dat er totaal geen sprake is van synergie tussen de verschillende projecten. Dat het beheer op langere termijn een onmogelijke taak is. Dat inwerktijden de spuigaten uitlopen en dat het maken van aanpassingen zolang duurt dat niemand het meer wil en durft uit te leggen. Dat dus de ICT een blok aan het been is van menige organisatie en dus niet de bedrijfsstrategie ondersteund laat staan aanvult is logisch.

Aan de ontwikkelaars lag het zeker niet. De zeer goed opgeleide en ervaren ingenieurs die doorgaans de projecten realiseren begrijpen maar al te goed welke keuzes er moeten worden gemaakt en wat de consequenties daarvan zijn. Ze doen dat alleen steeds vanuit hun eigen projectdoelstellingen en vanuit hun eigen ervaringen.

Aan de acceptatietesters lag het ook niet: zij controleerden keurig of de applicatie werkt zoals het moet als het wordt opgeleverd. Wat er op de achtergrond gebeurd en hoe dat is ingericht kunnen en willen zij natuurlijk niets van weten.

De oorzaak is eenvoudig: vanuit het IT Management zijn er nauwelijks inhoudelijke eisen gesteld aan de manier waarop de verschillende projecten *inhoudelijk* werden uitgevoerd en die paar eisen die wel werden gesteld kwamen vaak niet verder als het dicteren van welke versie van Visual Studio en SQL Server er gebruikt moest worden en heel af en toe zelfs een zogenaamde Coding Standard. Misschien begrijpelijk want de projecten schoten als paddenstoelen uit de grond en nieuwe technologieen boden zich sneller dan ooit aan.

Nee, bij kleinere automatiseringsafdelingen is het juist de IT Manager die de meeste kennis heeft van de organisatie als geheel en het IT landschap bovendien en daarom is juist hij bij uitstek de juiste persoon om zich hiermee bezig te houden.

IT Managers, laat de architectuurkaas niet van je brood eten!

Start vandaag met het inhoudelijk opstellen van wat tijdens de beruchte seminars populair 'beleid' wordt genoemd. Zorg dat je weet op wat voor soort veranderingen je wilt inspelen en hoe (denk aan adaptief/perfectief/proactief onderhoud) . Oja, vergeet ook niet om te testen of dergelijke veranderingen echt beter te realiseren zijn. Want als er een ding is wat we de afgelopen periode hebben geleerd dan is dat het wel.

Want architectuur is iets waar je niet al te veel over moet praten,
het is iets wat je gewoon moet doen.

Tuesday, April 8, 2008

"Sharepoint Search" Instructievideo's

Op de volgende website is een op indrukwekkende verzameling van publieke Sharepoint instructievideo's te vinden.


De instructievideo's bestaan uit 14 modules:
  • Module 1 - IntroductionThis module introduces the full three-day class.

  • Module 2 - Enterprise Search OverviewThis module provides some astounding figures as to why organizations require Enterprise Search Solutions! We recommend that you do not skip this module.

  • Module 3 - SharePoint Search WalkthroughThis module is more than an overview. It cuts through the marketing hype in an informed, intelligent manner! We recommend that you do not skip this module.

  • Module 4 - Search Architecture and DeploymentThis module provides essential insights, discussions, and very deep technical information on architecture and server layouts.

  • Module 5 - Crawl and Query ProcessesThis module provides the 'under-the-hood' story about what happens at crawl and indexing time, and follows up with essential information about the query-time processes. This is how Search in SharePoint actually works, regardless of what you see in the user interfaces.

  • Module 6 - Relevance RankingIf relevance ranking is perceived to be inaccurate by your users, they will simply stop using your solutions. This module explains in detail how you can tune the relevance ranking subsystem.

  • Module 7 - Customizing the End-User ExperienceThis module shows you ALL that can be achieved by customizing Search Center in Microsoft Office SharePoint Server 2007, without requiring additional development effort. It is the definitive guide to customizing Search Center.

  • Module 8 - Developing Search SolutionsWhere Search Center cannot be customized sufficiently to suit your needs, you might need to develop your own solutions. This module shows you how! Developer topics include the KeywordQuery syntax, the FullTextSQLQuery syntax, the Search object model, the Search Web service, and the Search Administration object module.

  • Module 9 - Business Data Catalog SearchThis module shows you how to set up BDC search from scratch. It also highlights some common pitfalls.

  • Module 10 - Extensibility and Integration for SearchThis module provides more information about the crawl and indexing process by focusing on iFilters and Protocol Handlers. It also discusses full and incremental crawls, as well as providing guidance around 32-bit/64-bit architecture.

  • Module 11 - Search AdministrationThis module provides a comprehensive discussion of search administration.

  • Module 12 - Security for SearchThis module covers a variety of topics from search accounts, through Information Rights Management, to crawling Forms-based authenticated sites.

  • Module 13 - Performance, Scalability, and Capacity PlanningThis module provides invaluable discussions of indexer requirements, query server requirements, and other scalability approaches. Most importantly, it discusses how you can plan disk space requirements for indexing large corpuses.

  • Module 14 - Search OperationsThis module concludes the class by discussing operations and management tasks for enterprise search solutions.

Wednesday, April 2, 2008

Architectuur is de oplossing, maar wat was het probleem?

Als Architect kom je maar al te vaak in een situatie dat je moet uitleggen wat een Architect doet en wat de voordelen van Architectuur zijn.

Als je, net als ik, hiervoor een presentatie mag maken dan komt de volgende presentatie van het IMN (Informatie Management Nederland) je vast goed van pas!

De presentatie is in twee delen opgebouwd:
- Deel 1 geeft de algemene lijn van de IMN visie op architectuur-toepassing weer
- Deel 2 gaat concreet in op het gebruiken van de IMN-visie bij het toepassen van architectuur voor een specifieke probleemsituatie

Klik hier voor de PowerPoint.

Sunday, March 30, 2008

Slopen onder Architectuur (Document)

Zojuist vond ik een document genaamd "Slopen onder architectuur".

Ik vind het een verfrissend document vooral omdat het ons het eens totaal ongebruikelijk architectuurprincipes laat lezen.

Ik vraag me alleen af in hoeverre er echt aandacht voor dit onderwerp gewenst is. Definieren we niet altijd de gewenste situatie en bepalen we niet daarna niet zoals het veranderingstraject? Dat een architectuurverandering vaak leidt tot een stuk vervaning en daarmee sloop lijkt mij vanzelfsprekend.

Voor mij is het vanzelfsprekend dat er vanuit een beheer perspectief altijd goed gekeken wordt naar de hoeveelheid onderhoud dat nodig voor bepaalde deelsystemen. En dat wanneer dit niet meer acceptabel is gekeken wordt naar een oplossing hiervoor. Dient hier echt seperaat vanuit de architectuur discipline aandacht voor te zijn? Vooralsnog lijkt mij dat een symptoom van het ontbreken van de juiste procedures die zouden moeten voortvloeien uit principes over eenvoud, flexbiliteit en onderhoudbaarheid.

Wat denk jij?

Het betreffende pdf-document kun je hier vinden.

Tuesday, March 25, 2008

Alle modellen op een rij

Opzoek naar de juiste manier om jouw idee over te brengen?

Als je de volgende website hebt bezocht niet meer!

Wedden dat je hem meteen aan je favorieten toevoegd, net als ik?

Klik hier om snel te gaan kijken.

eBooks verzameling / collection

Zojuist vond ik een website met daarop een interessante publiekelijk beschikbare verzameling van eBooks van onder andere Microsoft boeken maar ook Cisco en andere bekenden.

Zie: voor bijvoorbeeld...

Altijd handig om bij de hand te hebben.

Monday, March 24, 2008

SOA In the real world

Een prachtig 'boek' over de concepten en de praktijk van SOA kun je hier downloaden.

Wat mij betreft een 'must read' voor iedereen die niet weet wat SOA is en een 'should read' voor iedereen die met SOA te maken heeft.

Sunday, March 23, 2008

Plan van aanpak (sjabloon)

Een goed Nederlands sjabloon voor een plan van aaanpak voor het ontwikkelen van een informatiesysteem kun je hier downloaden (bron:

Sterk punt van dit sjabloon is dat ieder hoofdstuk een inleiding heeft, hier en daar voorbeelden en tips worden gegeven maar dat het toch een heel beknopt en praktisch sjabloon is gebleven.

Uit de inleiding

Het standaard plan van aanpak, dat in dit artikel is weergegeven, heeft met name betrekking op de ontwikkeling van informatiesystemen.Daarnaast is het dermate generiek, dat het ook voor andersoortige trajecten gebruikt kan worden. De specifieke detailpunten kunnen dan enigszins afwijken.

De inhoudsopgave (samenvatting)

0. Management samenvatting
1. Introductie
2. Projectopdracht
3. Aanpak
4. Projectinrichting en voorwaarden
5. Plannen
6. Kwaliteitsborging
7. Overige plannen
8. Bijlagen

Saturday, March 22, 2008

Project Start Architectuur Sjabloon (DYA)

Het sjabloon "Project Start Architectuur" als onderdeel van de architectuur methode "DYA" van Sogeti kun je hier vinden (pdf).

Een publiek beschikbaar uitgewerkt voorbeeld heb ik helaas nog niet kunnen vinden.

Uit de inleiding

Dit document bevat de project start architectuur voor het project . De PSA wordt gemaakt om te waarborgen dat nieuwe ontwikkelingen enveranderingen in samenhang worden gerealiseerd en passen binnen de toekomstiggewenste informatievoorziening. De PSA is de vertaling van de totale architectuurnaar de specifieke situatie van het project.

De inhoudsopgave

1.1 Inleiding
1.2 Doel project
1.3 Business drivers
1.4 Architectuur drivers

2.1 Afbakening
2.2 Projectoverstijgende ontwerpkeuzen
2.3 Architectuurrichtlijnen

3.1 Afbakening
3.2 Projectoverstijgende ontwerpkeuzen
3.3 Architectuurrichtlijnen

4.1 Afbakening
4.2 Projectoverstijgende ontwerpkeuzen
4.3 Architectuurrichtlijnen

5.1 Business architectuur
5.2 Informatie architectuur
5.3 Technische architectuur

6.1 Business architectuur
6.2 Informatiearchitectuur
6.3 Technische architectuur

IBM's Referentie Architectuur - Best Practices (RUP)

Een prachtig inleidend document over referentie architectuur in het algemeen en de relatie met RUP in het bijzonder; door IBM.

ICT is onbelangrijk!

Ken je dat gevoel: je komt bij een organisatie binnen en je hebt het idee dat alles zoveel beter en efficienter kan maar je krijgt geen voet aan de grond. Je praat als Brugman, je haalt voor je gevoel alles uit de kast maar niets lijkt te werken.

Grote kans dat de manier waarop jij tegen I.C.T. aankijkt compleet verschillend is dan die van de "Business". Niet voor niks is het artikel "IT Doesn't matter" uitgeroepen tot het beste artikel van Harverd Business Review aller tijden.

Door het lezen en begrijpen van dat artikel is het eenvoudiger om de zaak ook eens van de andere kant te bekijken en daardoor kun je beter een brug te slaan (een van de taken van een Architect).

Het artikel kun je hier vinden.

De belangrijkste conclusies, die volledig door de "Business" worden onderkend:

  • geef minder geld uit aan ict;
  • volg de markt maar loop niet voorop;
  • richt je op gevaren niet op kansen;

Thursday, March 20, 2008

Biztalk Architectuur in een notendop

Heb je dadelijk een gesprek met een Biztalk-ontwikkelaar maar heb je daar tot op heden nog nooit iets mee gedaan?

Lees dan snel het volgende artikel om snel grip te krijgen op de basisterminologie en basisarchitectuur.


Componenten zijn concepten

Bij architectuur gaat het om concepten!

Ik beschouw de volledige architectuur van een systeem als een groot concept. En omdat zo'n architectuur is opgebouwd uit (logische)componenten beschouw ik deze als deelconcepten.

Mijn ervaring leert dat de voordelen om een (logisch)component te introduceren als een op zichzelf staand concept zeer groot zijn, namelijk:

  • Mensen (klanten, sponsors, collega's etc.) worden makkelijk enthousiast van een concept. Denk maar eens aan het alternatief: een lange droge lijst met features;

  • Concepten zijn precies voldoende abstract om als uitgangspunt te dienen voor de functionele en technische uitwerking.

Maar waar zou zo'n concept nu aan moeten voldoen? Wat zou een formele definitie van zo'n architectuur-deelconcept kunnen zijn, vroeg ik me vandaag af?

Opeens moet ik aan de standaard (ANSI1471) 'architectuurdefinitie' denken: "The fundamental organization of a system, embodied in its components, their relationships to each other and the environment and the principles governing its design and evolution".

Volgens mij zijn dat precies de eisen die je aan zo'n concept moet stellen:
  • Verduidelijking van de logische plaats in het geheel door het benoemen van de relaties met andere componenten en zijn omgeving;
  • Verduidelijking van ten minste een principes betreffende het ontwerp en evolutie.
Ook moet ik denken aan de IEEE1471 definitie van een 'architectuurbeschrijving': "... The architectural description can be divided into one or several views. Each view covers one or more stakeholder concerns. View is defined as “a representation of a whole system from the perspective of a related set of concerns”...."Op basis hiervan kunnen we een derde formele eis benoemen, namelijk geschreven op een manier die aansluit op de belevenis van de klant voor wie we dit doen.

Een voorbeeld: het logische component "Logging"

Je zou kunnen zeggen voor logging gebruiken we de Microsoft Enterprise Library. Maar van Logging kun je ook een concept maken namelijk.


Ontmoet Marcel's Logging!

Marcel's logging is gebaseerd op de ervaring van jarenlange softwareontwikkelervaring die wij inmiddels hebben opgedaan. Zo leert de ervaring ons dat het verstandig is om onderscheid te maken in rollen en soort. Bijvoorbeeld technische informatie voor de systeembeheerder en technische informatie voor de ontwikkelaar. Maar ook bedrijfskundige informatie waar alleen de "business analyst" iets aan heeft. Gegevensinhoudelijke waarschuwingen bijvoorbeeld.

De staat van de betreffende applicaties worden steeds op een dashboard middels stoplichten getoond. Bij oranje of rode stoplichten kan direct op het probleem worden ingezoomd.
Normaal gesproken staat de gehele applicatie in een diagnosestand (met alle gevolgen voor snelheid en gebruiksvriendelijkheid) of niet. Maar bij onze loggingstrategie is het mogelijk om per zogenaamde sessie deze diagnosestand aan te zetten.

Ook voor onze logging geldt het principe: technologie moet uitwisselbaar zijn en we beginnen met de Enterprise Library.Technologie is nu eenmaal een van de meest veranderlijke zaken (anticipation of change).

Verder dient het afhandelingsproces vrij inregelbaar te zijn. Bij een bepaalde freqentie van bepaalde fouten moet geëscaleerd worden totdat ze bevestigd zijn. In andere gevallen is een email naar bijvoorbeeld de supportdesk voldoende. Welke gevallen welke route bewandelen is iets wat in de loop van de tijd steeds duidelijker wordt (lerende organisatie)In de flexibele afhandeling dient een extern systeem te kunnen worden aangeroepen zodat er automatisch een issue kan worden aangemaakt in het issuetrackingsysteem.



  • Blijkbaar was het belangrijk voor de klant om de ervaring te borgen;
  • Het is duidelijk hoe het component gebruikt gaat worden in zijn omgeving;
  • Het is duidelijk hoe het component samenwerkt met andere componenten;
  • Het is duidelijk hoe het component zich gedraagt;
  • Het is duidelijk welke principes van toepassing zijn;
  • De conceptuele beschrijving kan uistekend dienen als uitgangspunt voor de verdere uitwerking.

Wednesday, March 19, 2008

Microsoft Infrastructure Optimization (Maturity) Model

Zojuist kwam ik op technet een interessant "maturity model" voor de infrastructuur tegen. Ik vind dit model vooral interessant van wegen zijn "no-noncense" karakter dat ook prima dienst kan doen in een niet-infrastructuur context.


Voorbeeld van de "no-nonsense" beschrijving:

Basic: “We Fight Fires”

The Basic IT infrastructure is characterized by manual, localized processes; minimal central control; and nonexistent or unenforced IT policies and standards regarding security, backup, image management and deployment, compliance, and other common IT practices. There is a general lack of knowledge regarding the details of the infrastructure that is currently in place or which tactics will have the greatest impact to improve upon it. Overall health of applications and services is unknown due to a lack of tools and resources. There is no vehicle for sharing accumulated knowledge across IT. Customers with Basic infrastructure find their environments extremely hard to control, have very high desktop and server management costs, are generally very reactive to security threats, and have very little positive impact on the ability of the business to benefit from IT. Generally, all patches, software deployments, and services are provided high touch and high cost.

Customers benefit substantially by moving from this type of Basic infrastructure to a Standardized infrastructure, helping them to dramatically reduce costs through:
  • Developing standards, policies, and controls with an enforcement strategy.
  • Mitigating security risks by developing a "defense in depth" posture: a layered approach to security at the perimeter, server, desktop, and application levels.
  • Automating many manual and time-consuming tasks.
  • Adopting best practices, such as those of the IT Infrastructure Library (ITIL); the SysAdmin, Audit, Network, and Security Institute (SANS); and so on.
  • Aspiring to make IT a strategic asset rather than a burden.
Does This Sound Like You?
Find out how to make your Basic infrastructure more Standardized.