It's 2008. Where's my flying car? RSS 2.0
 Tuesday, October 12, 2004

Five weeks already. No pain, no tricks. I simply quit.

Tuesday, October 12, 2004 4:11:51 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [5] - Trackback
Other Stuff

Michael Willers really got his blog going while I was on vacation.

Tuesday, October 12, 2004 2:28:06 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Monday, October 11, 2004

Today is a great day. Awesome day. Wonderful day. Significant day. Life changing day. Happily-ever-after day. Life is good.

Monday, October 11, 2004 2:57:12 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [6] - Trackback

Microsoft seems to be struggling with the Messenger service in the past two days. Right now I cannot sign in, I got booted frequently yesterday and yesterday night I could see everybody but chat with noone. What really sucks about that is that I realize how much some parts of work and life have become a dependent on Messenger working - and switching to another service or between services is not really a good answer to the problem. What's the Messenger SLA (Service-Level Agreement), anyways? 

Monday, October 11, 2004 9:59:36 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [4] - Trackback
Other Stuff
 Friday, October 08, 2004

Microsoft created a new category in their MVP program for “Solution Architects” and coming back from my vacation I was happy to find out that they awarded me with the 2004 “Most Valuable Professional” title in that new category. Thank you, Microsoft! (…and thanks for the MP3 player gift, too)

Friday, October 08, 2004 7:32:21 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [8] - Trackback
Blog


4 straight weeks are the longest time I have been offline and off work (cheating only for 3 smaller speaking engagements that were “on the way”) in the last 6 years or so. In fact, I don’t think I’ve really been offline and not working for more than 10 days straight in the last 6 years either. Together with my best-ever travel buddy and best friend Jen, I had some of the best weeks ever. We went to catch the end of the beach season on the Turkish west-coast for a week and also went to see the ancient sites of Troy, Assos and Pergamon as well as the WWI battlegrounds of Gallipolli at the Dardanells strait (all those pictures are still on – undeveloped – film).

With less than 24h turnaround at my house, we packed the car and then went on to Berlin (1st speaking engagement) for a day, and proceeded to Munich (2nd speaking engagement) on a smooth and relaxed 180 km/h evening trip. After I was done working, we celebrated the evening at Oktoberfest (including rollercoaster ride, the essential sausage treats and plenty of beer) with a bunch of people we instantly made friends with. Next day we crossed “this is all way too green” Austria into Slovenia for two great days in the wonderful Slovenian capital of Ljubljana (“Their stuff is cute!”).

From Slovenia the road took us through a tiny bit of Croatia and then back onto EU territory in Hungary where we drove along the magnificent Lake Balaton towards the next stop at Budapest for 2 days of sightseeing, wining (!), dining and then also a bit of sightseeing and wining and dining.

The following road day we went to Bratislava, the capital of Slovakia. The city center of Bratislava is an amazing place in that it is a maze in which you can always find a new little street and new places whenever you think you found them all. Yet, you can go once around the center in 20 minutes. (And someone really needs to develop their river front with bars and restaurants!).

Bratislava is also where we shot the most politically loaded picture of the tour.

Jen thinks its totally appropriate and great symbolism and I think it’s a little too much. Note how the rainbow ends right in the embassy of the United States of America.  

The next day we went on a great hike for a few hours in the hills around Bratislava, which sits at the foot of the Carpathian mountain range.

Next day, next drive: onwards to Poland and Krakow.

Even though all places were awesome, Krakow turned out to be our favorite city and we stayed 3 nights. Krakow is not only full of historic sights and other great things to see, but is also an amazing place for people watching at the grand market square (the biggest in Europe) and for great food.

Part of the Krakow experience were also a necessary yet very disturbing visit at the museum and memorial in Auschwitz and, much happier, a visit to my aunt Elli who lives in nearby Katowice.


The man who made our Krakow experience absolutely perfect was fellow Microsoft Regional Director Tadeusz Golonka who I called just an hour before we got to Krakow to say Hello and who immediately dropped all work to give us an impressive tour through Krakow’s center (better than any professional tour guide could do it) and also went to dinner with us on two nights. Thank you!  

After Krakow we made a fairly quick drive westward to Wroclaw, where we first documented several instances of one of the recurring people watching themes of the tour (“serious case of white shoes”) and then later got totally trashed in a nightclub right at Wroclaw’s main market square after a fabulous dinner.  

After a rather late check out the next morning, we went back to Germany and to Dresden, where we went to see Puccini’s opera Madame Butterfly in the world famous “Semperoper” opera house and were impressed by the energy (and money) put into the ongoing reconstruction of Dresden’s Frauenkirche and other great old buildings after the WWII destruction and Communist neglect.

Even though it would have been great to spend more time in Dresden, we had to move on to my brother’s house near Hannover the next day (for beers) and then onwards to Hamburg (my 3rd speaking engagement).  

In Hamburg we did the obligatory tour through the sea port, strolled through the wild red-light district in St. Pauli at night and went shopping in the classy Jungfernstieg area.

With my talks in Hamburg done, we packed up and went back my house near Düsseldorf, completing a 3800km driving loop through Central Europe.

We had an awesome time at all the places we went to. Europe is a great place, isn’t it?

Ah, and: I am back! ;-)

 

 

 

Friday, October 08, 2004 2:48:21 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [2] - Trackback
Other Stuff
 Wednesday, September 08, 2004

Achim found a wonderful picture that we've dropped on our nonsense blog. Schröder and finance minister Eichel. The picture takes a little while to sink in ;-)

Wednesday, September 08, 2004 1:00:57 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Tuesday, September 07, 2004

A little while ago a new build of Indigo found its way onto my desk. On thing that’s interesting about this particular interim milestone (don’t hope for juicy details here on the blog) is that it doesn’t support WSDL. No. Calm down. It’s not what you think. It just happens that the WSDL support wasn’t included in this particular version; it’ll be there, no worries.

Such interim binary drops that the Microsoft product groups give out to very early adopters are really only meant for the bravest of the brave with too much time on their hands. Therefore, the documentation is not entirely in synch with the feature set – and that’s a stretch. (Hey, I am not complaining.) So until someone told me “yeah, there’s no WSDL or Metadata exchange worth talking about in this build” I tried to find how contract works in this build and of course I couldn’t find it. Well, not really true. It turns out that contract works just like with ASP.NET 1.0 or ASP.NET 1.1 Web Services. At runtime, WSDL usually doesn’t play any role, at all. Unless you use some funky dynamic binding logic, WSDL is just a design-time metadata container and that’s the basis for generating CLR metadata and code. Although there is an implementation aspect to it when you generate proxies or server skeletons, the most important job of WSDL.EXE is to perform a conversion of the WSDL rendering of the message contract into a format that the ASMX infrastructure can readily understand. That format happens to be classes with methods and attribute annotations. Here is a client and a server I just typed up with Notepad:

Contract.asmx

Client.cs

<% @WebService class="MyService" language="C#"%>

using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace="http://tempuri.org")]
public class MyService
{
    [WebMethod]
    public string Hello( string Test )
    {
       return "Hello "+Test;
    }
}

using System;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebServiceBinding(Namespace="http://tempuri.org")]
public class MyService : SoapHttpClientProtocol
{
    [SoapDocumentMethod]
    public string Hello( string Test )
    {
       return (string)Invoke("Hello", new object[]{Test})[0];
    }
}

public class MainApp
{
   static void Main()
   {
       MyService m = new MyService();
       m.Url = "http://localhost/contract.asmx";
       Console.WriteLine("Result: "+ m.Hello("Test"));
   }
}

Drop the contract.asmx into x:\inetpub\wwwroot, compile the client with “csc client.cs” and run it. No WSDL ever changed hands, no “Add Web Reference”, it just works. Ok, ok, it’s the year ‘04 now and there’s really no magic there anymore. Now here’s a tiny bit of refactoring:

Contract.asmx

Client.cs

<% @WebService class="MyService" language="C#"%>

using System.Web.Services;
using System.Web.Services.Protocols;


public interface IMyService
{
    string Hello( string Test );
}


[WebService(Namespace="http://tempuri.org")]
public class MyService : IMyService
{
    [WebMethod]
    public string Hello( string Test )
    {
       return "Hello "+Test;
    }
}

using System;
using System.Web.Services;
using System.Web.Services.Protocols;


public interface IMyService
{
    string Hello( string Test );
}


[WebServiceBinding(Namespace="http://tempuri.org")]
public class MyService : SoapHttpClientProtocol, IMyService
{
    [SoapDocumentMethod]
    public string Hello( string Test )
    {
       return (string)Invoke("Hello", new object[]{Test})[0];
    }
}

public class MainApp
{
   static void Main()
   {
       MyService m = new MyService();
       m.Url = "http://localhost:8080/contract.asmx";
       Console.WriteLine("Result: "+ m.Hello("Test"));
   }
}

Extracting the interface from server and proxy makes it very, very clear that we’re dealing with the very same message contract. Mind that we only have source-code level contract equivalence between client and server here. The compiled code on either side yields distinct IMyService types and that’s supposed to be that way. In the case I am illustrating here, the language C# serves as the metadata language (and the clipboard is the mechanism) for sharing contract between client and server (or endpoints).

There are two things I find (mildly) annoying about ASP.Net Web Services 1.x and they also become quite apparent in this example: #1 the server side and the client side have a different minimum set of required attributes and #2 ASP.NET’s ASMX support doesn’t look at inherited method-level attributes. The following does not even compile:

Contract.asmx

Client.cs

<% @WebService class="MyService" language="C#"%>

using System.Web.Services;
using System.Web.Services.Protocols;

[WebServiceBinding(Namespace="http://tempuri.org")]
[WebService(Namespace="http://tempuri.org")]
public interface IMyService
{
    [SoapDocumentMethod][WebService]
    string Hello( string Test );
}

public class MyService : IMyService
{
    public string Hello( string Test )
    {
       return "Hello "+Test;
    }
}

using System;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebServiceBinding(Namespace="http://tempuri.org")]
[WebService(Namespace="http://tempuri.org")]
public interface IMyService
{
    [SoapDocumentMethod][WebService]   
    string Hello( string Test );
}

public class MyService : SoapHttpClientProtocol, IMyService
{
    public string Hello( string Test )
    {
       return (string)Invoke("Hello", new object[]{Test})[0];
    }
}

public class MainApp
{
   static void Main()
   {
       MyService m = new MyService();
       m.Url = "http://localhost:8080/contract.asmx";
       Console.WriteLine("Result: "+ m.Hello("Test"));
   }
}

And, frankly, it’s probably not bad that it doesn’t compile, because the half of the attributes on the resulting interface declaration are useless on either side.

Indigo pulls both sides together into the notion of a service contract that’s good for either side (I am using a simple variant of the “publicly known” notation here)

[ServiceContract]
public interface IMyService
{
    [ServiceMethod]
    string Hello( string Test );
}

If you want to see it that way, this is Indigo’s IDL (Interface Definition Language). There’s an equivalence transformation from and to WSDL, if you want to share the contract with folks who program on other platforms or who use another programming language. There are just no angle brackets here and it’s much easier to read, too.

So if you see code that I wrote and you find (even today) seemingly unnecessary interface declarations that are implemented on a single web service class within a project and nowhere else and are also not referenced from anywhere – they might not be unnecessary as they seem. It’s simply IDL!

More confusingly, you might find those declarations replicated! in source code! in another service! Yes, because services are designed to be evolved independent of each other. So while the target service is already in V4, the consumer may still be on the level of V2. Moving up to the V4 interface version is a conscious choice by the developer of the service consumer – and at that point in time he/she imports the most recent contract. Whether that’s copy/paste of a C#/VB/C++ declaration or clicking “Update” on some menu in Visual Studio that turns WSDL into proxy code is not very important; it’s just a matter of tool preference.

Using explicit interface declarations with Web Services is strictly a “contract first” model. It’s just not using WSDL, that’s all.

Tuesday, September 07, 2004 4:09:18 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [1] - Trackback
SOA

I just saw this cry for help over on weblogs.asp.net and thought it'd make sense to answer with Elvis. ;-)

Tuesday, September 07, 2004 1:40:54 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Other Stuff
 Thursday, September 02, 2004

I wonder when "the Americans" (sorry for making a horribly generalizing statement here) will understand that creating an edit control with a mask

(###)-###-####

is a thoroughly bad idea.

Thursday, September 02, 2004 2:36:43 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [4] - Trackback
Other Stuff

We set up a new blog here - primarily for our own amusement. Expect no seriousness there.

Thursday, September 02, 2004 8:35:26 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Other Stuff
 Tuesday, August 31, 2004

Doh! ;-)

Tuesday, August 31, 2004 12:00:38 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Monday, August 30, 2004

Ok, ok. I've said this over and over to Microsoft people over the past year and I can finally say it out loud. Ah, no, I won't. I'll just link.

Monday, August 30, 2004 2:55:28 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Longhorn
Monday, August 30, 2004 2:08:01 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Other Stuff

I had the dubious pleasure to fly with Northwest to Seattle last week and for me, Northwest is now finally blacklisted. Not only do they still fly hopelessly outdated DC-10s (I am not qualified to make a judgement about the airframe, but I am qualified to make a judgement about the cabin), but I also really have a problem with the cabin crew attitude. There's nothing wrong with the cabin crew's average age being well above 50, but I do have a problem with them acting as if they're looking after a kindergarten. Point in case: "Madam, can I have a 7up please?" Answer: "Son, the galley is up there in front and you may want to stretch your legs anyways".

Monday, August 30, 2004 1:32:46 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [3] - Trackback
Other Stuff

Security expert Dominick Baier made me aware of a security vulnerability in dasBlog at the beginning of last week. Dominick will post a concrete advisory later this week for reasons of completeness, but we want to give everyone a chance to patch their systems, because exploits are embarrassingly simple to write.

The problem affects all versions of dasBlog and allows a specially crafted cross-site scripting attack that would potentially and under certain circumstances allow an attacker to gain temporary access to the blog user’s credentials. The problem does not allow an attacker to gain any further control over the server or compromise system-level security.

The suggested workaround is to install the patch that can be found here (direct link). The patch archive contains four subdirectories (named 1.3, 1.4, 1.5, and 1.6) with replacement binaries for the newtelligence.DasBlog.Runtime.dll assembly for the respective version.

1.      Back up your existing assembly from your blog’s /bin subdirectory,

2.      Replace it with the new assembly for your version from the respective directory of the patch archive

3.      Open and save “web.config” with notepad to restart the site

4.      You are again safe.

The changes are minimal and should not have any adverse effects, but if you experience any odd behavior after applying the patch, please let me know.

Spread the word!

[The GotDotNet workspace source trees for 1.3-1.6 contain the modified sources for the respective versions. The “CurrentWork” tree is not yet patched.]

Monday, August 30, 2004 12:55:22 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [2] - Trackback
dasBlog
Stuff
About the author/Disclaimer

The content of this site are my own personal opinions and do not represent my employer's view in anyway. In addition, my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent point in time snapshot you should not consider out of date posts to reflect my current thoughts and opinions.

© Copyright 2008
Clemens Vasters
Sign In
Statistics
Total Posts: 717
This Year: 11
This Month: 0
This Week: 0
Comments: 1220
Themes
Pick a theme:
All Content © 2008, Clemens Vasters
DasBlog theme 'Business' created by Christoph De Baene (delarou)