Rants, rambles, news and notes from another geek

Geek Notes 2004-07-01

I’m off to see Shrek 2 with my wife and daughter in a couple of minutes. Should be fun. We all loved the first movie, especially the kid. This will be our first attempt to take her to a movie, so we are fully expecting that we will have to bail out after an hour. We’ll see.

BizTalk Orchestration Organization

Boy, that sure is a mouthful, eh?

I’ve been talking with some BizTalk folks, and have uncovered three main ways that you can organize your larger BizTalk orchestrations:

  1. Large, monolithic orchestrations
  2. Chained organization
  3. Master-child organization

Large Monolithic Orchestrations

I don’t think this is what the folks on the BizTalk product team would call them, but that is my name for them. This is the situation where you have a large business process that is entirely defined in one orchestration. If you’ve done the BizTalk tutorial, then you know the kind of orchestration I’m talking about.

This bothers me for the same reason that great big classes or methods bother me in code. I prefer things to be highly cohesive, and big orchestrations, like big classes and methods, have a tendency to do lots of different things.

Chained Orchestrations

Chaining orchestrations seems to be a popular way to partition these things… at least among the people I’ve talked to. The idea here is to break the big process down into smaller components (which sounds good) and then chain them together (which doesn’t sound so good).

So, the message comes into A&nbsp_place_holder;who then passes on to B who passes on to C etc. You can even imagine scenarios where you could have branches, but that starts to frighten me.

I’ve been told by some of the advocates of this system that it provides better performance than the master-child strategy (see below), but I have concerns about the coupling that happens here. Modifying the chain could be very difficult to do, because you might not know exactly where to put something.

I am thinking that in this scenario, I would want to have special orchestrations on the beginning and end that do nothing other than interface with the external world. Then I would use “Start Orchestration” at the end of each intermediate process to glue the chain together. Does this sound right? Sure seems brittle to me.

Additionally, I wonder how one would document this kind of organization. I would prefer to have my orchestrations self-document themselves like my code does. But in this scenario there is no central place to describe the flow of things. No master document…

Master-Child Organization

This is the organization strategy that feels right to me, but I’ve been told it performs terribly in the real world.

The idea here is to have a Master orchestration that is responsible for communicating with the external ports and then it delegates all further processing to a set of child orchestrations. These child orchestrations could be called either serially or in parallel, using either blocking (call)&nbsp_place_holder;or non-blocking (start) calls.

This just feels so right to me that I have to ask the world what kind of organizations you have used in your orchestrations. Is there another organization scheme that I have missed? Are there other pros or cons that need to be considered?

Please post comments here or use trackback if you would rather post them on your own blog.


VS2005 Enterprise Architect Beta 1 on MSDN Subscriber Downloads

It’s up there folks. Let the rush begin!

UPDATE 2004-07-01 16:15: Mine is pulling a whopping 50KB/sec. This is gonna take a while. Reminds me of when Everett went live. That took days.

UPDATE 2004-07-01 22:35: I’m pulling between 80KB and 140KB/sec here at home. Hopefully I’ll have much of it by morning.

Test Post From BlogJet

So on ScottWater’s recommendation, I’m giving BlogJet a try and the only thing I can’t do is “Post as Draft” and then later edit and publish.

Other than that, this is a nice little app. I may keep it.

UPDATE: I can’t do any edits and republish. Too bad. Anyone else had luck with that on .TEXT?

UPDATE: It seems it was a problem in my .Text. ScottWater send me an updated DataHelper.cs that solved the problem. This will be fixed in the next release and has already been fixed on most public (e.g. weblogs.asp.net) servers.

Geek Notes 2004-06-30

Still working on BizTalk. I spent today refreshing my mind by reviewing the BTS04 Tutotial and Updated Product Documentation (it has been a while since I worked with it).

I also started collecting information from Covast about their EDI Accelerator. Looks sweet.

  • BizTalk Core Engine’s WebLog - Looks like some of the BTS Team has started a group blog. I wonder if they’ve heard my cry for a unit testing solution? Sure would be nice to see a post from them on that front.
  • CDex - I have been using Windows Media Player for a while, but I recently went back to WinAMP. So I needed a good way to rip my CDs. I used to use EAC+LAME, but Brad Wilson showed me this free tool which works like a charm.
  • Unit Testing With a Database - Jim Newkirk posts a couple of articles about the problems of database testing. I would also recommend Jim’s book as a reference on that topic.
  • To Throw or Not To Throw - That is the question.
  • Interactive Source Code - Lutz Roeder wrote this Powerpoint deck a few years ago about source code, IDEs, Reflector and other fun stuff. [via Sam Gentile]
  • Property Grid in Reflector - I don’t know how Peli has time to write all of these. I thought he was going to work for MS soon!
  • NAnt and Multiple .NET Versions - Scott Hanselman shows us how to make sure NAnt runs with the version you expect.
  • Using Test Data Files in NUnit - I always thought everyone did this, but apparently they don’t. They should.
  • Cleansweep - I don’t think I can do this. In fact even looking at their list of “100 things you should do to make your life better” makes me unhappy. Perhaps #1 on the list should be “stop reading this list”. [via SecretGeek]

Add-Ins in Visual Studio 2005 Express

WARNING: This could fire up the whole unit testing debate again, but I have to share this. I can’t help myself!

Jamie Cansdale (author of NUnit Add-in) just pointed out a message on the VSNetAddin Yahoo Group. The post was by Craig Skibo (who owns the extensibility stuff in VS) and since not everyone who reads my blog subscribes to that list, I will post it here for you to read.

In response to this question by Arild Fines (author of AnkhSVN):

I have heard some rumors that the VS Express editions won’t support addins - at all. Can someone with their ear a little closer to the ground than me confirm or deny this?

Craig replied:

For Beta 1, we did no special work to enable or disable Add-ins - they are available because the Express editions derive from the core Visual Studio DLL. However, future releases of the Express editions may not support Add-ins,
Macros, or VSIP packages. Each AppID (our internal terminology - VS, Express C#, Express Web, etc. is each an AppID) has the ability to turn extensibility features on or off, and the current plan of record is that the Express SKUs will
turn this off. There are a couple reasons for this decision, some to control the download size, some are marketing related. The intent of an Express edition is to support hobbyists, and while I know many of you on this list can be
considered hobbyist extensibility developers (some do it for a living, some to just make their jobs easier), the focus of the Express edition is on a certian set of scenarios that extensibility development does not support.

So. Given the earlier discussion about unit testing being included in all versions of Visual Studio, it sounds like this will actually prevent Express users from taking advantage of things like NUnit Addin which fill the gap. So now we really are saying that the lower end developers (hobbyists, students, etc.) can’t have good, integrated unit testing.


Visual Studio 2005 Beta 1

It looks like Beta 1 is out, although you do have login with Passport so it may be limited. Not sure yet. You can try to download it from here:


Mine is downloading now… we’ll see how different it is from the May preview we got at TechEd.

They’ve also got downloadable betas of the new Express Editions of these products:

  • Visual Basic
  • Visual C#
  • Visual C++
  • Visual J#
  • Visual Web Dev
  • SQL Server

Now I’m not 100% sure of this, but I had heard that the Express versions will be Free once the Visual Studio ships. That would certainly be a nice way to get hobbyest and students working with the products without having to spend an arm and a leg.


UPDATE: As&nbsp_place_holder;a few comments have pointed out, it appears that the download isn’t actually there yet. I’m sure it will be soon.

Unit Testing BizTalk 2004 Orchestrations

After roughly 6 hours of using Reflector to look at the BizTalk 2004 assemblies, I have been completely unable to figure out how to even contruct a new instance of my very simple orchestration. The dependencies are insane. I think that if I could get one “new-ed” then I might be able to talk to its ports, but until I can actually try it, I can’t be sure.

So I’m going to take a different approach. I firmly believe that we can’t think of BizTalk as a developers tool until we can treat it like one and that includes important tasks like unit testing and verification.

I started thinking about the services that NUnit provides for us. Using NUnit we write classes in C# that test other classes written in C# (no VB bashing intended… I’m just a semicolons and curly braces kind of guy).

So why not test BizTalk Orchestrations the same way? With other BizTalk Orchestrations?

I figure this is at least worth a try. My thought is that I may be able to write an Orchestration that acts as a test running. I will pass stuff into it (maybe an XML document to tell it which tests to run). It then runs other “Test Orchestrations” that play the role of [Test] methods in traditional unit testing.

We can expect that such a framework would have the test runner and many Test Orchestrations for each real Orchestration.

The more I think about this, the more I think it will work. We’ll see. I will report back as soon as I have an answer.

Geek Notes 2004-06-26

So we are in the middle of our non-drought here in Colorado. We are only allowed to water our lawns twice a week for 15 minutes, but for the last few weeks we’ve been getting rain a few times a week. Which is very nice. I hate having to pay for water.

  • The Middle Tier Is Dead (Again) - Scott Colestock wrote this a while back, and it is in keeping with my thoughts on the matter. You want to use multiple machines? Cluster them. Don’t distribute your application. Run the UI layer and the Business Logic layer (or whatever you call it) in one process.
  • BizTalk Orchestration Naming Conventions - As you know by now, I’m in the early stages of a large BizTalk implementation so this posting caught my eye.
  • NAnt for BizTalk 2004 - I’m picking up tons of jems going through Scott Colestocks backlog. In this post he provides some targets for NAnt that help us work with BTS04 objects and then in a follow-up post he updates it with some fixes. Thanks Scott. I will certainly be using this.
  • Bad Library Sign - I love this sign… does the arrow point to the Children’s room or to the Adult Video room?

Geek Notes 2004-06-24

Whew. Busy getting my head around BizTalk again. It has been a while, so I’ve got some catching up to so. Don’t be too surprised if I start posting a bunch of BTS04 stuff…

  • Transformers - Yes… those Transformers. The ones you (or your little brother) played with back in the 80s. Except this time it is a 3D rendered video with techno music backing it. A great way to waste 3 minutes. [via AaronX]
  • Organizing Your Source Code - Unlike Java, .NET doesn’t require a relationship between the file system and the code’s namespace. But as Brad Abrams points out here, there are probably some very good reasons to encourage something like that on your projects.
  • AirPort Express - Everyone noticed this little beauty from Apple. What is it? An 802.11 bridge… an audio source provider… optical output… a print server… WOW! As Scott Hanselman says, “This is a Leatherman for the geek, and it fits in your hand.”
  • Reflector Add-in Tutorial - Peli shows us how to make Reflector add-ins like all the cool&nbsp_place_holder;ones he’s bee making lately.
  • PsExec - I thought I knew all of the cool SysInternals tools, but I missed this one. Very cool. It lets you (among other things) open a command prompt on a remote machine. Tres cool. [cia Craig Andera]
  • Quick and Dirty NUnit Compatibility - Jim newkirs shows how to get the NUnit attributes to work with VS2K5TS Unit Testing.