A typedef is a keyword in both C and C++ used to introduce new names for existing types. A simple typedef declaration lets you define your own names that can be used in place of type specifiers such as int, float, and double. Surprisingly, some people have started applying typedefs to well-understood concepts, resulting in confusion and debates about the very concepts they are trying to explain.
Jason Bloomberg from ZapThink recently published a briefing entitled "Process Isomorphism: The Critical Link between SOA and BPM". Anything being positioned as a critical link between two trendy yet poorly understood topics is probably worth learning about, right? Imagine my surprise when I realized that "process isomorphism" is nothing more than "process reification", a concept that has been with us for many decades. Process reification refers to the transformation (or "reification") of an abstract process into a concrete or executable process. John Zachman wrote about the concept of process reification during the mid-1980s in his classic paper "A Framework for Information Systems Architecture". Zachman's framework consists of a six by six matrix with the columns representing stakeholder interests and the rows representing views of the architecture. Moving from the uppermost abstract views (Scope, Business Model) to lower, more concrete views (System, Technology Model) is sometimes called reification. Zachman himself used this term to explain the relationship of the upper to lower layers when I met him many years ago.

As stated earlier, process reification is the transformation of an abstract process into an executable one. Process reification is one of the Holy Grails of BPM and has existed long before SOA became a popular acronym. The ebXML Business Process group developed a methodology for process reification that later evolved into UN/CEFACT's Business Collaboration Framework (BCF) (BCF later became the foundation of the UN/CEFACT Modeling Methodology (UMM)). Its important to realize that all these frameworks have one fundamental concept in common - process reification.
The concept of process reification also appears in the Business Process Execution Language standard (BPEL). The original intent for BPEL was to provide a standards-based approach for communicating public (abstract) and private (executable) processes. When I was co-chair of the BPEL group at OASIS there seemed to be much confusion over the concept of an abstract process. I tended to explain the concept using three scenarios:
- The 800-lb gorilla in the value chain (e.g. Wal-Mart) dictates to its suppliers how to interact with it using an abstract BPEL template. Suppliers import the abstract BPEL and map their private (executable) processes into it.
- An industry standards organization (e.g. a RosettaNet or HL7) could provide BPEL templates to its members as a set of "best practices" to ensure they implement the standardized process properly
- A distributed organization like a bank could provide abstract BPEL templates to its branch offices, showing how the branches should interact with the corporate office for a given process. (This is much like #1 except its within a single organization)
The biggest challenge we faced with BPEL was that it was not expressive enough to model a complex business process. This is the reason that most of today's tools treat BPEL like a programming language instead of a tool for process reification. While some tools attempt to map standards like BPMN to BPEL, the mapping is a lossy effort due to limitations in BPEL itself. BPEL is missing some fundamental concepts and many vendors have extended their implementations in a proprietary manner to support more detailed business process scenarios. This fact is surprisingly overlooked and leads many people to falsely believe that a BPMN modeling tool can generate executable BPEL that fully complies with the original process model. If business uses one modeling standard for process design and IT uses another for implementation the gap between business and IT could grow wider, especially if we rely on technology alone to close the gap.
The solution to narrowing the gap between business and IT is a complex one and will never be solved by technologies, standards, vendor-specific tools or open source. Narrowing the gap between business and IT is a people problem that requires collaboration, visibilty and accountability to eliminate miscommunications and reduce risk. The scope of such an effort is far beyond the capabilities of any modeling tool or process standard.
Whether its called process reification, "process isomorphism" or some other new term, the concept of using standards to transform an abstract process into an executable one has yet to be fully realized. Despite ths fact there are some promising efforts emerging (most notably BPMN 2.0 and XPDL).
PS: Don't miss out on a chance to see John Zachman speak - he's quite entertaining and very informative.
PPS: JP recently wrote a wonderful blog entry about why SOA and BPM are not necessarily related here: http://www.jpmorgenthal.com/morgenthal/?p=103
Most peculiar mama (whoa).
The December issue of the Harvard Business Review contains a compelling article on "Why You Shouldn't Go Global" (excerpeted here for free). While the article is worth reading, a sidebar in the article raises some excellent points which we might be able to apply to SOA. Since the sidebar is not available in the free excerpt I'll provide a brief overview of it here.
The name of the sidebar is "The Susceptibility to Managerial Fads" and is only a page in length.. While SOA is not necessarily a managerial fad (is it?), the authors Marcus Alexander and Harry Korine provide insights into issues facing IT trends today - namely, popular trends (or "bandwagons") may lead to sloppy thinking.
According to the sidebar, one example of "sloppy thinking" is that labels used to describe a trend get stretched far beyond their original meaning. SOA was intially described by Gartner back in 1996 (SSA Research Note SPA-401-068, 12 April 1996, "'Service Oriented' Architectures, Part 1" and SSA Research Note SPA-401-069, 12 April 1996, "Service Oriented' Architectures, Part 2"). In that original article SOA was described as "a style of multitier computing that helps organizations share logic and data among multiple applications and usage modes". Seems fairly straightforward, right? If we jump back to 2008 SOA has been stretched, pulled and prodded to mean many things, of which multitier computing is only a small part. People have defined SOA in so many different ways that its become almost meaningless. Industry pundits have only added to this confusion by assigning version numbers (SOA 1.0, SOA 2.0). defining segments (WOA, POA, etc) and creating maturity models (far too many to list here).
As the authors note, the original insight (in this case SOA) and context that gave rise to it gets lost as people scramble to jump on the bandwagon. This leads to people focusing on things that are often irrelevant or unrelated to the benefits the insight promised to deliver. I've seen far too many people attempt to classify a solution as "not SOA" while completely ignoring the benefits the solution delivers to the organization. Are we implementing solutions or buzzwords? Far too often it seems like the latter.
Alexander and Korine observe that just because a trend follows this pattern doesn't necessarily mean the original idea was wrong. Problems arise when people are more interested in jumping on the bandwagon instead of delivering value to the organization.
SOA is about loosely coupled system integration.
Sorry, I meant to say that SOA is about enabling loosely coupled business processes.
On the other hand SOA is about reuse, except that its actually not about reuse.
Hang on a minute, SOA is like event driven architecture (EDA). No, scratch that – SOA is different from EDA but it still manages to complement it.
On second thought, SOA has nothing to do with technology at all – SOA is about business transformation. But lets not confuse SOA with Enterprise Architecture because its not. Or is it?
Whatever SOA is, if you think you’ve implemented it, adopted it or deployed it, you’re wrong. In fact you don’t even have a clue about what SOA is. Just ask a consultant or an analyst firm – they will be quite happy to bill you tell you how wrong you are about SOA and why you haven’t properly implemented it / adopted it / deployed it / whatever.
I recently completed work on an internal Silverlight app. The project was a blast – it really reminded me of how coding could be fun again. One of the surprising gaps I found in Sliverlight was the inability to get the current user context (e.g. determine the login domain and userid of the person viewing the page). I checked with the product team and they confirmed that this is not (yet?) a feature of Silverlight. While this feature may be provided at a later date, I needed it now. I was able to develop a workaround using ASP.NET’s LOGON_USER server variable using the following:
<%
String userName = Request.ServerVariables["LOGON_USER"];
UID.Value = userName;
%>
<form id="form1" runat="server" style="height:100%;">
<input type="hidden" name="userContext" id="UID" runat="server" />
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<center>
<table border="0">
<tbody>
<tr>
<td width="10"></td>
<td width="auto">
<div id="silverlightControlHost">
<script type="text/javascript">
document.write ("<object data=\"data:application/x-silverlight,\" type=\"application/x-silverlight-2-b1\" width=\"1150px\" height=\"810px\">");
document.write ("<param name=\"source\" value=\"ClientBin/MyApp.xap\"/> ");
document.write ("<param name=\"background\" value=\"white\" />");
document.write ("<param name=\"onerror\" value=\"onSilverlightError\" />");
document.write("<param name=\"initParams\" value=\"userID=" + form1.UID.value + "\"");
document.write("<\object>");
</script>
</div>
</td>
<td width="10"></td>
</tr>
</tbody>
</table>
</center>
</form>
It ain’t pretty but it works. :)
Apparently Lucas is up to his old tricks again. How sad. I was hoping that Spielberg might diminish Lucas’ influence on the film.
*sigh* I’ll probably go see it anyway.

On the upside Iron Man was surprisingly good and Prince Caspian looks to be good as well.
The World Wide Telescope (WWT) is amazing - I can't wait to show my son. You can see a demo of it from TED here. I'm not sure when this will be available but I hope its soon. This is a great application of the Deep Zoom effect.

BTW - if you're an astronomer wannabe like myself I highly recommend APOD's desktop of the day tool (I've been using it for years).
I'm not really doing anything BPEL related these days but a post by Jesper Joergensen caught my eye. Since I'm not focused on BPEL I haven't kept up with some of the developments in the BPM-related blogosphere. Apparently Bruce wrote a post illustrating some of the fundamental differences between BPMN and BPEL. BPMN is much more expressive so representing a BPMN process as BPEL is not necessarily an easy task. Jesper makes a point in his post that should not be taken lightly:
BPEL is not suitable for business process modeling because it's too restrictive and machine oriented.
BPEL was never intended for process modeling - it's an orchestration language, not a process modeling language. Using an orchestration language for process modeling is like trying to drive a nail with a screwdriver.

Dave Linthicum recently blogged about not attending SOA conferences because he is able to determine the core trends and messages they would be promoting. I've thought this about SOA books, reports, trade magazines and online articles for well over a year. Does this mean SOA is dead? Is it time for yet another IT crisis? Hell no.
The answer here is simple - SOA is no longer a mysterious concept that we need conferences, presentations, books and articles to clarify for us. We get it and many of us are actually designing and implementing it. A couple years ago I stated that the tools were mature enough and it was time to roll up our sleeves and get to work. Apparently there are still an awful lot of people that would rather talk and write about SOA than actually implement it. We get it already - stop debating what it is and go build something already.
I'm building out a website using Silverlight. The more I learn about Silverlight the more I love it - I haven't had this much fun writing code in a long time. This is seriously addicting stuff.
One of the things that frustrated me is that many of the Silverlight 2 samples were not very useful. How many people are really interested in writing a video game with Silverlight? I needed an exciting (and easily implemented) menu effect for my web page. I searched everywhere but didn't find much. Many of the menus were simple block-style fly-out menus or were based upon the 1.1 (or older) release. I finally found the effect I wanted on the silverlight.net community page. The page features a menu that uses mouseenter/mouseleave highlighting and a little indicator that follows your mouse back an forth to illustrate which menu option you clicked. A screenshot of the menu appears below:

I recreated this menu in Silverlight 2 by defining a simple XAML file for the menu and handling the animation in C# (instead of embedding it in the XAML):
private void StackPanel_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
this.Cursor = Cursors.Hand;
// Create two DoubleAnimations and set their properties.
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
// Create a duration of 2 seconds.
Duration duration = new Duration(TimeSpan.FromSeconds(0.4));
myDoubleAnimation.Duration = duration;
Storyboard sb = new Storyboard();
sb.Duration = duration;
sb.Children.Add(myDoubleAnimation);
Storyboard.SetTarget(myDoubleAnimation, selectionPointer);
// Set the attached properties of Canvas.Left and Canvas.Top
// to be the target properties of the two respective DoubleAnimations
Storyboard.SetTargetProperty(myDoubleAnimation, "(Canvas.Left)");
StackPanel sp = (StackPanel)sender;
switch (sp.Name)
{
case "Home":
homeGlow.Visibility = Visibility.Visible;
myDoubleAnimation.To = 380;
break;
case "Services":
servicesGlow.Visibility = Visibility.Visible;
myDoubleAnimation.To = 528;
break;
case "HowTo":
howtoGlow.Visibility = Visibility.Visible;
myDoubleAnimation.To = 665;
break;
case "Technology":
technologyGlow.Visibility = Visibility.Visible;
myDoubleAnimation.To = 810;
break;
case "SignUp":
signupGlow.Visibility = Visibility.Visible;
myDoubleAnimation.To = 960;
break;
}
// Make the Storyboard a resource.
LayoutRoot.Resources.Add(sb);
// Begin the animation.
sb.Begin();
}
private void StackPanel_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
this.Cursor = Cursors.Arrow;
StackPanel sp = (StackPanel)sender;
switch (sp.Name)
{
case "Home":
homeGlow.Visibility = Visibility.Collapsed;
break;
case "Services":
servicesGlow.Visibility = Visibility.Collapsed;
break;
case "HowTo":
howtoGlow.Visibility = Visibility.Collapsed;
break;
case "Technology":
technologyGlow.Visibility = Visibility.Collapsed;
break;
case "SignUp":
signupGlow.Visibility = Visibility.Collapsed;
break;
}
}
I used a graphic for the background glow because Silverlight doesn't (yet?) provide this option. Here is the final look and feel of my menu (without the glow):
I've attached the XAML I used for the menu (which includes the scrolling indicator). Enjoy!
By popular demand, here is the graphic I used to make the menu glow. Enjoy!
Update: After many promises, here is an update. This zip below contains the XAML and code for the menu system described above. Note that you will see some code in the xaml.cs file as follows:
IBasePage pageToUnload;
pageToUnload = (IBasePage)p3.Spotlight.Children[0];
pageToUnload.ActivatePageFadeOut();
This is because all of my pages inherit a common set of Storyboards for fading pages in and out when they get loaded or unloaded. Comment out any and all references to base pages if you having a problem with the code.
One other thing: I'm not proud of the code - you'll see some hard-coded stuff that could have been avoided were we working with a dynamic language. Ah well, at least it works. Ping me if you have any questions.
Seen this yet? Take a walk or a drive around Seattle or San Francisco. Very cool.

Seen this yet? Interesting to see it pop up on Yahoo News of all places.
I had a feeling something like this was going to happen.
There is a FileWatcher WF activity sample that ships with the Windows SDK. I initially thought this might be of value to me but when I tried to open the workflow I ran into the following error: “Theme properties can only be changed in the Theme Configuration Dialog.” Very intuitive right?
Actually it is an intuitive message, it just requires some knowledge about how custom activities are built. The original version of the FileWatcher Activity included some code in the designer initialization to make the icon for the Activity look cooler in the toolbox. This code causes problems if you try to open anything using the activity (e,g, the workflow that comes with the example).
If you've run into this problem you can comment out the following code in the initialization activity (found in FileSystemEventDesigner.cs):
protected override void Initialize(Activity activity)
{
base.Initialize(activity);
// Change the designer theme for this activity -- This is the offending code
// this.DesignerTheme.BackColorStart = Color.White;
// this.DesignerTheme.BackColorEnd = ColorTranslator.FromHtml("#F9CB5A");
// this.DesignerTheme.BackgroundStyle = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
// this.DesignerTheme.BorderColor = ColorTranslator.FromHtml("#BF8311");
}
Once you comment that code out you'll be able to open the workflow and work with the designer (note that there may be other issues worth considering if you want to use this in a State Machine - the sample only uses a simple sequential workflow).
Interesting story popped up on ComputerWorld today about the Microsoft offer to Yahoo. Here's what made it most interesting to me (emphasis mine):
According to the Post, the discord revolves around Yang and his followers being so opposed to selling the company to Microsoft that Bostock and his group fear they will act out of emotions rather than their fiduciary duty to Yahoo shareholders. Such an action could expose the board to lawsuits by shareholders.
I thought it was nothing more than simple greed that motivated the initial "thanks but no thanks" response from Yahoo.
I was part of a start-up that wound up getting acquired for a fairly paltry sum compared to an offer earlier in the year. Our board rejected the initial, far larger offer because it "significantly undervalued the company". Sound familiar?
OK - I promise try to stay on topic and avoid gossip in future posts... I just couldn't resist since this brought back such painful memories.
Word of warning: the CW page is full of annoying Flash ads. The guys behind the amazing SlickRun tool have a simple IE plug-in that makes pages like CW's easier to read.

Today the XML Editor team released the XSLT Profiler Addin for VS 2008, a quick and reliable performance analysis profiler tool that assists in the development and debugging of XSLT documents. The XSLT Profiler allows developers to measure, evaluate, and target performance-related problems in XSLT code by creating detailed XSLT performance reports. The XSLT Profiler Addin for VS 2008 includes a wealth of useful hints for XSL and XSLT style sheet optimizations, which are essential for XSLT-based applications that demand maximum performance.
See a webcast demonstrating the tool here.