February 10, 2005
@ 10:55 PM

Bruce Williams illustrates how to turn my very simple “Hello World” Indigo sample into a queued service by changing the transport binding from HTTP to MSMQ (I think that’s radically cool). Now, the next step is to illustrate a Duplex conversation to get the response back to the caller. If Bruce or someone else isn’t going to beat me to it, I’ll show that once I get home from Warsaw tomorrow night. [Ah, by the way: Bruce! No need to “Mr.” me ;-)]

Categories: Indigo

February 10, 2005
@ 06:45 AM

Tim Ewald responds (along with a few others) to my previous post about WSDL and states: ”Remember that WSDL/XSD/Policy is the contract, period. Any other view of your contract is just an illusion.

WSDL and XSD and Policy are interoperable metadata exchange formats. That’s just about it. The metadata that’s contained in artifacts compliant with these standards can be expressed in a multitude of different ways. I do care about “my tool” (whatever that is) to do the right thing mapping from and to these metadata standards whenever required and I do care about “my tool” guiding me to stay within the limits of what these metadata formats can express.

But WSDL/XSD/Policy isn’t the contract. If you do ASMX, you can create server and client without you or any of the tools ever looking at or generating WSDL. And it works. If you use Indigo, you can do the same and, in fact, for generating any XML-based metadata from within an Indigo service, it’s even required to explicitly add the respective service behavior at present. The required metadata to make services work comes in many shapes or forms and is, for a given tool, typically richer than what you will find in the related WSDL/XSD/Policy, because not all that metadata is related to the wire format itself.

If I need to tell someone who is not using my tool of choice how to talk to my service, I have my tool generate the respective metadata exchange documents and I want to be able to trust my tool that they’re “right”.

What I am stating here is simply my demand and expectation for the degree of “automatic interoperability” that I expect from the tools. I can read WSDL/XSD/Policy; out there, most people absolutely don’t seem to care about these details and I tend to agree with them that making this stuff work is someone else’s problem.

I don’t need to be able to read and write PDF to use PDF. I use PDF if I know that someone will open my document who is not using Microsoft Word. Still, that PDF doc isn’t the document. My Word source document is the document I edit and revise. The PDF is just one of several possible representations of its contents.

Categories: Indigo

February 9, 2005
@ 06:48 AM

I wish I was at VSLive! in San Francisco to hang out with all of my friends. Instead (and that isn’t too bad, either), I am sitting in my hotel room at the Warsaw Marriott watching the sun rise over the Polish capital. Today and the next two days, my partner Achim Oellers and myself will be teaching a class on service orientation principles, explaining fundamental ideas, patterns, techniques and will go through a lot of concrete implementation guidance for today’s Microsoft MSMQ/WSE/ASMX/ES stack so that our customers can start writing services today. The fundamental principles about data contracts, message contracts and service contracts that we teach will carry forward to Indigo – along with a lot of the implementation techniques (and the resulting source code) that we will suggest. Of course, that has been a bit of a hidden agenda in past workshops, because I couldn’t openly speak about anything that happened to Indigo past PDC03, but now that the Indigo day at VSLive! is over, I can. That makes it even more fun.

Categories: Talks

XML is ugly and angle brackets are for plumbers. Unless you have a good reason to do so, you shouldn’t have to look at WSDL. Sharing this C# snippet here

[ServiceContract]
interface IHello
{
      [OperationContract]
      string SayHello(string name);
}

is a perfectly reasonable way to share contract between server and client, if you’ll be sticking to Indigo. A service can expose all the WS-MetadataExchange and XSD and WSDL you like so that other Web Service clients can bind to your service, but as long as you stay on the System.ServiceModel level and focus on writing a distributed systems solution instead of writing something that “does XML”, you won’t have to worry about all the goo that goes on in the basement. Staring at WSDL is about as interesting as looking at the output of “midl /Oicf”.

Categories: Indigo

February 9, 2005
@ 05:56 AM

using System;
using System.ServiceModel;

namespace IndiHello
{
      [ServiceContract]
      public class Hello
      {
            [OperationContract]
            public string SayHello(string name)
            {
                  return "Hello " + name;
            }
      }

      class Program
      {
            static void Main(string[] args)
            {
                  ServiceHost<Hello> host = new ServiceHost<Hello>(new Uri("http://localhost/hello"));
                  host.AddEndpoint(typeof(Hello), new BasicProfileHttpBinding(), "ep");
                  host.Open();
                  Console.WriteLine("Press ENTER to quit");
                  Console.ReadLine();
                  host.Close();
            }
      }
}

I am told that I can talk, so I do ;-)  Here’s a simple Indigo server. If you looked at the PDC 2003 Indigo bits, you will notice that the programming model changed quite a bit. I think that in fact, every single element of the programming model changed since then. And all for the better. The programming model is so intuitive by now that I am (almost) tempted to say “Alright, understood, next technology, please”.

So up there you have a class with an implicit service contract. An explicit service contract would be a standalone interface (that’s the proper way to do it, but I wanted to keep the first sample simple) with a [ServiceContract] attribute. Here, [ServiceContract] sits right on the class. Note that the class doesn’t derive from any special base class. Each method that you want to expose as an endpoint operation is labeled with [OperationContract]. These and a set of other attributes (along with a bunch of options you could set, but which I am not doing for the moment) control how the class contract is exposed to the outside world via Indigo.

In the Main method, you have a ServiceHost, which hosts the service (the class is parameterized with the implementation type) and which is initialized with the base-adress at which the service shall be hosted. The base address here is “http://localhost/hello” and with that maps into the namespace of http.sys at port 80. The endpoint can exist alongside any IIS-hosted websites, even though this particular app is hosted in its own little console-based app.

Into this host, I map the service contract with a BasicProfileHttpBinding() to the endpoint address “ep”, which means that messages to that particular service that flow through HTTP using the WS-I Basic Profile 1.0 shall be directed to the “http://localhost/hello/ep” endpoint. Once I have a binding in place (that could also be done in config), I Open() the service and the service listens. Once I am done listening, I Close() the service.

Isn’t too hard.

Categories: Indigo

January 29, 2005
@ 12:07 PM

I have been invited to speak at the Denver Visual Studio Usergroup on Monday, March 28th. Because I just happen to be in Denver I am delighted to volunteer and talk about the principles of Service Orientation and how to make it happen for real now (ES, ASMX) and tomorrow (Indigo). Mind that this is after VSLive! and I'll be able to tell things I've been told not to tell.

Categories: Talks

January 26, 2005
@ 04:40 AM

There you go:

 

Happy Stewardesses who like my Alienware notebook (seems to work just as well as driving a Lamborghini)

 

 

And ... chatting with Hanselman and having (economy class ... so much for Lamborghini) food

 

Categories: Other Stuff

January 26, 2005
@ 04:18 AM

I am aboard SK938 (SAS) right now. I am on the Internet. Connexion by Boeing. Chatting with Scott Hanselman using MSN Messenger. Blogging this. If there is something like "geek orgasm", this is it. Eight hrs to go to Copenhagen. This R-O-C-K-S.

Categories: Other Stuff

Categories:

Within the next 48 hours, you will find auctions on eBay. You can buy an hour of consulting time of the wonderful individuals listed below for a minimum bid of US$100. All money will go to IDEP (see below) to aid the Tsunami victims in the Aceh area. I think this is a sensational effort and I am honored that I was asked to participate. Julie Lerman and Stephen Forte have been pulling this off. Once the auctions are up, I'll post links and i assume the other folks will do the same. Go and bid.

 

Michelle Leroux Bustamante, Jonathan Goodyear, Andrew Brust, Richard Campbell, Adam Cogan, Malek Kemmou, Jackie Goldstein, Ted Neward, Kathleen Dollard, Hector M Obregon, Patrick Hynds, Fernando Guerrero, Kate Gregory, Joel Semeniuk, Scott Hanselman, Barry Gervin, Clemens Vasters, Jorge Oblitas, Stephen Forte, Jeffery Richter, John Robbins, Jeff Prosise

 

Since my time will be auctioned, too, I can already promise that I will employ a rather liberal interpretation of "hour" if we get enough money in.

 


 

Who this auction is to benefit?

 

In the long run, the auction is to benefit the people of Aceh Province, Sumatra, who have had their island destroyed and lost nearly 100,000 of their people. The waves may be gone, but the devastation continues and the fear of many more dying from disease continues.

 

We are trying to help, by assisting Aceh Aid at IDEP, an organization that is local and doing amazing work.

 

There is an area on their website devoted to this work: http://www.idepfoundation.org/aceh_aid.html. (www.AcehAid.org will take you right to this page). I recommend that if you are interested in knowing who you are doing this for, you go peruse that website, read the updates, read about the volunteer search, etc.

 

WHAT IS IDEP?

IDEP is a small, Indonesian NGO, based in Ubud, Bali. Completed projects over the years have included community based development, sustainable living initiatives, permaculture training, waste management, organic gardens, recycling, etc. The focus is on helping people to help themselves. IDEP's founding director, Petra Schneider is a US-born, Indonesian citizen. The demonstrated and reproducible success of IDEP's small projects in local communities has earned the team an excellent reputation.

 

IDEP AND DISASTER RESPONSE/RELIEF/RECOVERY

At the time of the Bali bomb, about two years ago, IDEP was an important element of the network of local NGOs and other supporters that quickly responded to the tragedy, in various ways, not only immediately after the bomb, but during the recovery process for the various communities involved. Following shortly thereafter, IDEP received funding from USAid to create a comprehensive set of disaster management materials for Indonesian communities, aimed at children, families, and local leaders (official and unofficial). The materials are in the Indonesian language and suitable for use in rural and urban settings. These materials, including a booklet for children about Tsunami preparedness, were finished just weeks ago, but had not yet been disseminated to communities. Then the tsunami struck.

 

WHAT IS ACEH AID AT IDEP

Only hours after the news of the tsunami reached Bali, the same network of NGOs and individuals in Bali who had been involved in the relief efforts for the Bali bomb, reanimated and went into action. We started something called the "Aceh Aid Bucket Brigade" (see website), creating and deploying one-family-one-bucket multi-material aid packages from the hands of donors in Bali to the field in Sumatra. We began sending highly skilled volunteers, well-matched to the task within two days of the tsunami (Sam Schultz, Lee Downey, Oded Carmi and others). Our relief, and later, recovery programs in response to the Tsunami are now focused on two fronts. One is direct aid from Medan by road to areas around Banda Aceh. The other is this remarkable joint effort (nothing short of heroic), to the islands off the west coast of Sumatra, which as of yet, have not been receiving aid from any other channels that we know of.

Categories: Blog | Other Stuff

Omar is announcing (like Scott) the new newtelligence dasBlog "Community Edition" 1.7. It's so fresh that I am not even running it myself, yet.

What's important is that this is not an XCOPY upgrade and that you must follow the instructions in the dasBlog Upgrader download if you want to upgrade from 1.6 or earlier. Scott and Omar had to change the structure of the content store XML files to improve performance and add new features.

Here is the SourceForge home for the new version, make sure you get the download for the Upgrader if you want to upgrade and -- as always -- make a backup of your old version in case stuff doesn't work.

Categories: Blog | dasBlog

January 17, 2005
@ 08:15 AM

Happy New Year! It's a tiny bit late, but the last year ended and this year started with a flurry of activities that didn't leave me with much energy to blog. Before Christmas I went to New York to see my friend Stephen Forte and his wonderful girlfriend Kathleen, and right after Christmas I flew out to spend a few days with Steve Swartz and his fabulous wife Allison in Venice, Italy where they spent 3 weeks experiencing the wealth of Venetian culture and history (Allison is a scientific authority in Renaissance art history, which makes this even more fun).

And after these little tours I had to lots and lots of intense learning for the German "Whidbey Ascend" training series I am doing with Christian Weyer and Christian Nagel of thinktecture. In this series, which is hosted by Microsoft Germany and open to invited partners, we present a quite complete overview on the Visual Studio 2005 innovations. Of course, if you know me and Christian and Christian, you might be aware that we are all "server guys". So, of course it turned out in a way that I ended up with the complete Smart Client part of the schedule in my hands: Windows Forms, Visual Studio Tools for Office and Device Development. All these topics weren't exactly in my comfort zone for presenting in front of an audience when I committed to do them, but the time investment really paid off last week when we did the training for the first time. And I am actually quite glad that I had to force myself to learn all these things, because I was quite surprised bythe power of much of the new tooling, especially by Visual Studio Tools for Office. My first impression is that with these tools, Office really becomes a viable Smart Client platform.  

My other topic on that training I feel much more comfortable with: Visual Studio Team System. That stuff is good. You'll hear lots more about Team System and the architecture features of Visual Studio here in the upcoming weeks and months.

Next weekend and the beginning of next week I will be spending over in Seattle to play with some new distributed systems technologies at a friend's house and office.

Other developments:

  • Omar Shahine and Scott Hanselman put a heroic effort into completing "newtelligence dasBlog 1.7 Community Edition". I will have to set up the Wiki or a redirect to his Wiki some time this week. Omar and Scott practically own the dasBlog development effort now, since I just couldn't make time in recent months. There are still features I would like to add, but Omar and Scott run the shop now. Hence the "Community Edition" moniker. The new version (which I still need to install here) has dramatically improved performance, scores of fixes and a set of subtle, but good new features. A first shot at referral spam blocking is a regex based exclusion filter.
  • Werner Vogels has been named CTO of Amazon.com, which is amazing (and Amazon could hardly find anybody better).
  • My company has a new web site design. Much simpler and hopefully clearer. It's still a bit of a construction site, but which site isn't.

More later.

Categories: Other Stuff

December 15, 2004
@ 12:37 PM

Just had to figure this out and thought I’d share. With the XmlSerializer (.NET v1.1), one would think that TimeSpan maps to the XML Schema type duration, but it doesn’t – for whatever reason. Anyways … here’s a trick to make it work. Interestingly enough, the XmlConvert class understands TimeSpan. However it does not work correctly with fractional seconds and ignores them. That’s enough for my purposes in the given app and therefore I am ignoring that issue in the snippet below and treat all times of less than one second as equivalent to zero. If it isn’t enough for you, you’d have to write an alternate implementation for the respective XmlConvert functionality or beg Microsoft to fix it. (Doug? ;-)

 

private TimeSpan interval;

[XmlElement("Interval", DataType="duration")]
public string IntervalXml
{
    get
    {
        if (Interval < TimeSpan.FromSeconds(1) )
        {
            return null;
        }
        else
        {
            return XmlConvert.ToString(interval);
        }
    }
    set
    {
        if (value == null )
        {
            interval = TimeSpan.Zero;
            return;
        }
        TimeSpan newInterval = XmlConvert.ToTimeSpan(value);
        if (interval == newInterval)
            return;
        interval = newInterval;
    }
}

[XmlIgnore]
public TimeSpan Interval
{
    get
    {
        return interval;
    }
    set
    {
        if (interval == value)
            return;
        interval = value;
    }
}

 

 

Categories: XML

December 15, 2004
@ 12:13 PM

Was den deutschen Sprachgebrauch angeht ist die IT Branche in Deutschland unfassbar gruselig, wenn's um den Einsatz von Anglizismen angeht. Doch da wird nicht nur aus Gründen der "Coolness" der (fast) passende englische Begiff der deutschen Entsprechung vorgezogen. Nein! Wirklich übel ist, dass man dabei häufig auch noch direkt die Ernsthaftigkeit des gemeinten direkt mit aus dem Fenster wirft. Drei Beispiele:

"Meeting": Lass uns mal hinsetzen und etwas unverbindlich ein bisschen Kaffee trinken, Schnittchen knabbern und labern.
dagegen
"Besprechung": Wir setzen uns um einen Tisch, arbeiten die Agenda durch und nachher weiss jeder was als nächstes zu tun ist.

"Community": Hallo, wir lieben Euch alle. Wir wissen zwar nicht genau warum, ist ja aber auch irgendwie egal, gell?
dagegen
"Interessengemeinschaft": Wir haben alle die gleichen Interessen (und Probleme), arbeiten zusammen dran und haben vielleicht auch Spass dabei.

"Get Together": Bleibt doch nach der Knechterei eben noch 10 Minuten hier. Wir haben auch noch ein Gläschen Prosecco.
dagegen
"Treffen in der Kneipe um die Ecke": Habt Ihr noch Lust auf ein Bier oder 5, damit wir auch mal über was anderes reden können als das Projekt?

Wenn ich über "Service Oriented Architectures" rede und den englischen Begriff auch im Deutschen verwende, dann tue ich dass, damit jeder weiss, worum es geht und mit der gleichen Fachbegriffswelt auch in der englischsprachigen Literatur nachschlagen kann. Dass aber direkt jeder Satz in dieser unserer Branche ohne Einsatz eines einzelnen (englischen) Fremdwortes offenbar gleich als unvollständig oder grammatikalisch falsch (oder zu unaffig?) gilt, ist arg peinlich. Mea culpa. Ich erwische mich auch selbst dabei. Nicht gut.

Categories: Other Stuff