October 2005 - Posts
Microsoft has introduced a new certifications program. We all knew this was coming, but it was still a bit of a mystery what was actually going to change. Today, Microsoft has released the information about the next level of certifications on it's web site. I won't go into details here, because all the information is right here!
The new certification offers the following three levels:
- The Technology Series. These certifications are technology oriented. You will have to show that you have in-depth knowledge of a certain Microsoft Technology. There are currently 5 areas, but more will be added.
- The Professional Series. In this series, the certifications are role oriented. You will have to show that you have what it takes to perform a certain role.
- The Architect Series. This is the highest level. You'll need to be a really experienced IT professional to get to this level.

But what happens it you're already trying to get one of the current certifications. Well, according to the information provided in the FAQ, you should continue to pursue this. Microsoft will in time provide upgrade exams which will enable you to get the new certifications quicker. Microsoft will also continue to recognize the current certifications, so everything you've done so far to prove you're a Microsoft Expert is not lost. For example, if you're an MCAD then you will only need to take one exam to be recognized as an Microsoft Certified Professional Developer, or MCPD. These upgrade exams should be available by mid-2006.
There's a lot more to tell about the new certifications program. Check out the web site!
Not entirely on topic, but I was amazed by the following news items today.
- Electronic Frontier Foundation (EFF) has published a list of color laser printers that print microscopic yellow dots. These yellow dots can be used by forensic police to find the serial number of the printer that was used to print certain documents.
- Some guy in Sweden actually gave his new born son the name Google! And to prove it, a picture of the official birth certificate is on the web site.
The november 2005 issue of MSDN magazine features an article by Guy Eddon about Phoenix. Phoenix is the code name for an internal Microsoft project that will in the end provide an extensible framework for the analysis, optimization, and modification of code during compilation. It will be the basis of the new compiler back end (C2.exe) and the .Net JIT compiler. Phoenix, when finished, will allow you to write compiler extensions. Say for example that you want the compiler to output each procedure it is processing. You can write your own class that extends the standard compiler. Guy Eldon describes how he has used Phoenix to integrate transaction processing in C# and Java. Just imagine, your code fails and all modifications made by the code are rolled back!
It is a short article, but you can find more information about the Phoenix project at Microsoft Research. Looks cool.
The provider model is used throughout ASP.NET 2.0. It is a means of writing each of the technologies used so that new versions can easily be created and plugged in. For example, if you need to access a different database or authentication server, you can create a provider for it. ASP.NET 2.0 will then work with that provider just as it works with the existing features.
Last year, I was in a project together with Dennis. One of the challenges was to provide SQL Server and Oracle support. To solve that problem, Dennis introduced the provider model. We had one generic interface specification for which we then created two separate implementations, one for SQL server and one for Oracle. And if we would need MySql, all we had to do was provide a new implementation for that. We got it to work, although with a lot of cursing on my part and others, because it does have some drawbacks. But still, the provider model can be an interesting design pattern to introduce some flexibility in your development.
Brian Goldfarb has finished a 10-part, 120-page whitepaper about the provider model in ASP.Net 2.0. The startpage for this whitepaper can be found here. But you can go directly to each part using the following table which I copied from Brian's original post:
Introduction to the Provider Model
Membership Providers
Role Providers
Site Map Providers
Session State Providers
Profile Providers
Web Event Providers
Web Parts Personalization Providers
Custom Provider-Based Services
Hands-on Custom Providers: The Contoso Times
With the birth of my daughter Lisa three weeks ago, my wife and I thought it was time to buy a new digital camera. Our choice was the new Konica Minolta Dynax 5D, because we already owned 2 Minolta SLR camera's and the prospect of using our existing lenses was very appealing. And we weren't disappointed! One of the features of this camera is in-body Anti-Shake, which is absolutely brilliant. Some sample pictures, although dramatically reduced in size, can be found at my daughter's weblog. Yep, 4 weeks old and already has her own weblog.

But we also needed something to manage our growing collection of digital images, as well as a tool to improve some of the pictures we'd taken. I downloaded and installed Picasa, available for free from Google! And I have to say, if you need something that's simple to use that is capable of performing the most basic edit's, then Picasa is definitely worth checking out. Check-out the guided tour to see the features this application has to offer, or simply download the software.

Most of us use Daemon tools to use ISO image files for CD's. And so do I.
But I never knew that Microsoft offers a free version of such a tool as well, called Virtual CD-Rom Control panel. I found out when I received my daily SqlServerCentral.com update. That email featured a link to an article on SqlServerCentral which explains how to install and use it. When you download and run the file, it will be clear what you need to do though. It's unsupported by Microsoft, but it's free. Below is the contents of the readme that comes with Virtual CD-Rom Control panel.
Readme for Virtual CD-ROM Control Panel v2.0.1.1
THIS TOOL IS UNSUPPORT BY MICROSOFT PRODUCT SUPPORT SERVICES
System Requirements
===================
- Windows XP Home or Windows XP Professional
Installation instructions
=========================
1. Copy VCdRom.sys to your %systemroot%\system32\drivers folder.
2. Execute VCdControlTool.exe
3. Click "Driver control"
4. If the "Install Driver" button is available, click it. Navigate to the %systemroot%\system32\drivers folder, select VCdRom.sys, and click Open.
5. Click "Start"
6. Click OK
7. Click "Add Drive" to add a drive to the drive list. Ensure that the drive added is not a local drive. If it is, continue to click "Add Drive" until an unused drive letter is available.
8. Select an unused drive letter from the drive list and click "Mount".
9. Navigate to the image file, select it, and click "OK". UNC naming conventions should not be used, however mapped network drives should be OK.
You may now use the drive letter as if it were a local CD-ROM device. When you are finished you may unmount, stop, and remove the driver from memory using the driver control.
Earlier this week, our company organized an event together with Microsoft to inform all Microsoft consultants about new products and technologies. One of the things shown was, of course, the new Windows Vista. I was looking at the different product editions that Microsoft will be selling when Vista goes commercial. The full list can be seen here.
But just check out the different features Microsoft will be delivering in each edtion, especially the Home Premium Edition. This version, which looks to me to be the ideal version for most of my home PC's, contains among other Windows Media Center and DVD ripping support! Or as Paul Thurrott, the author of the document, puts it: "DVD ripping support (yes, you read that right)". Still, should be available somewhere next year.
Note to self. Buy more RAM for PC!
The project I'm working on at this moment involves writing a number of webservices. Not that difficult using .Net as we all know. But I came accross something I cannot quite explain while looking at the information shown for each method when you select the View in Browser option on the ASMX file. Let me show you, hopefully some of you can explain this for me:
In this project, all webservices will return at least two values in the response object. This is a company standard here. So we have created the following class which we can include in all other response objects we need to build:
///
/// Response object for all webservice responses
///
public class GeneralResponse
{
private string _result;
private string _detail;
public GeneralResponse()
{
_result = "OK";
_detail = string.Empty;
}
///
/// Get/Set the result. OK indicates success, NOK indicates failure.
///
public string Result
{
get
{
return _result;
}
set
{
_result = value;
}
}
///
/// Get/Set a descriptive error message when the web method fails (Result == MOK)
///
public string Detail
{
get
{
return _detail;
}
set
{
_detail = value;
}
}
}
Next I created a web method which returns this object as the result. I then select the ASMX file and select View in browser from the context menu. It then shows me the following SOAP response information, which is correct:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<MethodAResponse xmlns="http://Test.com/webservices/">
<MethodAResult>
<Result>string</Result>
<Detail>string</Detail>
</MethodAResult>
</MethodAResponse>
</soap:Body>
</soap:Envelope>
This is exactly what I expected. So the next thing I did was to create a new response object for a second method in my webservice. In addition to the Result and Detail values, this method needs to return another value. So let's build a new response object:
///
/// Response object for a specific method
///
public class Method1Response : GeneralResponse
{
private string _someValueA;
public Method1Response()
{
_someValueA = "SomeValue A";
}
///
/// Get/Set some value
///
public string SomeValueA
{
get
{
return _someValueA;
}
set
{
_someValueA = value;
}
}
}
Nothing special as you will agree. But now take a look at the SOAP information shown for this method in the "View in browser" option in Visual Studio 2003:

Now where are the Result and Detail in this response? It appears to be missing, right? When you look at the code, you might have expected the information shown below. I know I did:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<MethodBResponse xmlns="http://Test.com/webservices/">
<MethodBResult>
<Result>string</Result>
<Detail>string</Detail>
<SomeValueA>string</SomeValueA>
</MethodBResult>
</MethodBResponse>
</soap:Body>
</soap:Envelope>
I hope one of you might have an explanation. I've checked the WSDL and that information is correct. When I invoke the methods, I get the responses I need. So why is it that the information appears to be missing in the response information displayed in the browser? For those of you interested. The code in this post is from a test webservice I created to reproduce this. You can download that code here.
I'm looking forward to your explanations!
I ran into a list of add-ins that can be used with Lutz Roeders's Reflection. The list contains a number of very interesting add-ins:
- CodeMetrics. Analyses .NET assemblies and shows design quality metrics.
- Reflector.SQL2005Browser. This add-in allows you to browse .NET assemblies stored in SQL Server 2005 (Yukon) databases.
- Reflector.Diff. This add-in shows differences between two versions of the same assembly.
- Reflector.VSDisassembler. This add-in can be used to dump the disassembler output to files and create a Visual Studio project file.
And there are several others that might be useful. Just have a look here.