<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB"><title type="html">Charles Young</title><subtitle type="html">Charles is a principal consultant at Solidosft specialising in connected systems, workflow and rules engines.   He has over twenty years experience in IT as a developer, trainer and consultant.   Charles blogs extensively on Microsoft Biztalk and related subjects, and has been appointed as a Microsoft MVP (Most Valuable Professional) for BizTalk.</subtitle><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/atom.aspx</id><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/atom.aspx" /><generator uri="http://communityserver.org" version="2.0.60217.2664">Community Server</generator><updated>2007-03-09T23:52:00Z</updated><entry><title>BizTalk Server 2009 Announced</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/09/05/484.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/09/05/484.aspx</id><published>2008-09-05T20:25:00Z</published><updated>2008-09-05T20:25:00Z</updated><content type="html">&lt;P&gt;&lt;FONT size=2 face=Verdana&gt;Microsoft announced BizTalk Server 2009 today, and gave the green light to talking about the new version.&amp;nbsp;&amp;nbsp;&amp;nbsp; It’s due for release in the first half of next year, and is shaping up nicely.&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft is casting BizTalk Server 2009 as a major new version in its own right, rather than just an updated 'release' of BizTalk Server 2006.&amp;nbsp;&amp;nbsp; This is an important move, and one I strongly welcome.&amp;nbsp;&amp;nbsp; There is certainly enough in BizTalk Server 2009 to warrant thinking of it as a major revision of the product, although it retains the same familiar functionality and tooling we have been using since 2006 (or even 2004).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face=Verdana&gt;I've been fortunate in getting my hands on the current non-public CTP in the last month or so, and putting aspects of the new version through its paces.&amp;nbsp;&amp;nbsp; It's not wise to go into much detail about this first CTP because some of those details will doubtless change in forthcoming betas, driven in part from the feedback Microsoft is getting.&amp;nbsp;&amp;nbsp; However, I will say a little about the new development and build features and expand just a little on the press releases.&amp;nbsp;&amp;nbsp; These are the areas I have been looking at in depth.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face=Verdana&gt;BizTalk Server 2009 will ship with bindings for Visual Studio 2008, and you will need to upgrade to this version of the IDE if you are still using Visual Studio 2005 (which you will be, of course, if you are a BizTalk Server 2006 user).&amp;nbsp; It happens that, in previous months, I've seen more than one BizTalk shop where developers are having to run both versions of the IDE side by side in order to continue developing for BizTalk Server 2006 whilst exploiting features like WCF and WF in .NET 3.5.&amp;nbsp;&amp;nbsp; For many, the changes in BizTalk Server 2009 will come as a relief.&amp;nbsp;&amp;nbsp; This is not a cynical ploy by Microsoft to force people into upgrades for no additional benefit.&amp;nbsp;&amp;nbsp; The move to Visual Studio 2008 is accompanied by a very welcome move to a new project format, bringing BizTalk Server 2009 into line with mainstream .NET development.&amp;nbsp;&amp;nbsp; The new BizTalk project type is defined using MS-Build, just like C# or VB.NET projects.&amp;nbsp;&amp;nbsp; This has major implications in a number of areas.&amp;nbsp;&amp;nbsp; First, it means that, if you use TFS Build, you can now build BizTalk Server 2009 projects without having to write complex scripts that shell out to DevEnv.&amp;nbsp;&amp;nbsp;&amp;nbsp; Just like C# projects, you can let TFS Build do the majority of the grunt work for you, and concentrate your attention more fully on ensuring that your automated build scripts are comprehensive and robust.&amp;nbsp;&amp;nbsp; This is worth the upgrade in its own right, and removes a major source of current irritation.&amp;nbsp;&amp;nbsp; Thanks to the rough edges in the current CTP, one of my colleagues has had the opportunity to get to grips with this side of BizTalk Server 2009 in some depth, and we can report that it is all looking very good indeed, once a few remaining gremlins have been chased out.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face=Verdana&gt;The other aspect of BizTalk Server 2009 which we have spent some time on is unit testing and debugging.&amp;nbsp;&amp;nbsp; In one sense, this is not really so much about new functionality, but more about bringing what has previously been considered 'black-belt' into the mainstrem.&amp;nbsp;&amp;nbsp;&amp;nbsp; In Biztalk Server 2006, we currently use BizUnit to drive black-box (grey-box?), end-to-end testing, but we have also created some additional code of our own to support unit testing of BizTalk maps, schemas and pipelines.&amp;nbsp;&amp;nbsp;&amp;nbsp; Similarly, if you know the undocumented registry key in BizTalk Server 2006, you can get BizTalk to retain the generated C# code for debugging purposes, manually attaching to BtsNtSvc.exe processes in order to debug into orchestrations, etc.&amp;nbsp;&amp;nbsp;&amp;nbsp; This has proved a life saver in certain situations.&amp;nbsp; The new version of BizTalk Server is now designed to support these approaches seamlessly.&amp;nbsp;&amp;nbsp; Of course, it is designed to work with the integrated unit testing features of the IDE, rather than BizUnit.&amp;nbsp;&amp;nbsp; There are currently some outstanding questions with regard to the debugging support which I won't go into here, because they simply reflect the unfinished state of the first CTP.&amp;nbsp;&amp;nbsp; However, unit testing certain works smoothly with BizTalk Server 2009 projects, and will help to raise the bar in terms of the approach that is taken to development of BizTalk solutions.&amp;nbsp;&amp;nbsp; Again, I will avoid going into further here because I will hit issues that are still to be fully resolved, but things are generally looking good.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face=Verdana&gt;I have only mentioned those areas of BizTalk Server 2009 which I have been looking at in any depth.&amp;nbsp;&amp;nbsp; There is a lot, lot more.&amp;nbsp;&amp;nbsp; One thing I will monitor closely is the inclusion of ESB Guidance 2.0.&amp;nbsp;&amp;nbsp; I have some problems with some aspects of ESB Guidance 1.0, like the unfortunate way in which the UDDI resolver violates the UDDI standard!&amp;nbsp;&amp;nbsp;&amp;nbsp; However, having spent the last year doing little else but designing and implementing service bus patterns using BizTalk Server and WCF (or, in one case, WSE), I regard the inclusion of ESB Guidance 2.0 as a really intriguing, and hopefully worthwhile, aspect of the new version.&amp;nbsp;&amp;nbsp;&amp;nbsp; It is also intriguing that Microsoft has decided to release their implementation of UDDI 3.0 as part of the BizTalk package.&amp;nbsp;&amp;nbsp; Let no one tell you that BizTalk has no role to play in building service buses, or that it is to be regarded as 'merely a hub-and-spoke message broker'.&amp;nbsp;&amp;nbsp; In my experience, the exploitation of the dynamic features of BizTalk (dynamic ports, BAM interception, the rules engine, etc.,) in a rigorous, policy-driven fashion provides good support for implementing many of the core patterns described within the world of ESB.&amp;nbsp;&amp;nbsp; The core design of BizTalk Server predates later ESB thinking, but is much better aligned to it that some people will admit.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face=Verdana&gt;Roll on 2009.&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=484" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>IBM to buy ILOG</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/07/28/482.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/07/28/482.aspx</id><published>2008-07-28T22:54:00Z</published><updated>2008-07-28T22:54:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;IBM has announced plans to buy ILOG for $360m, subject to antitrust scrutiny.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ILOG specialises in rules-based processing centred on their JRules engine.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Although it has been obvious for some time that ILOG was interested in being purchased, the news still came as something of a surprise.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;In recent times, they have been pursuing a greater presence in the .NET world, releasing a .NET version of their engine, becoming a Microsoft Global ISV partner and joining Microsoft's prestigious Business Process Alliance.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Not surprising, then, that a few months ago there were rumours circulation of an impending purchase of the company by Microsoft.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;I have to say that, when I put this to a Microsoft contact a few months ago, it was strenuously and unequivocally denied that any such deal was being, or had ever been, considered.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;I have no idea if there was ever any truth in the rumour.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Still, I can't help wondering if an opportunity has been missed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;Now that the company is to be bought by IBM, and their technology is to be incorporated into WebSphere, I wonder what will become of their partnership with Microsoft and their .NET offering.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=482" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>MS BRE: Using Compensation handlers </title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/01/23/456.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/01/23/456.aspx</id><published>2008-01-23T01:11:00Z</published><updated>2008-01-23T01:11:00Z</updated><content type="html">&lt;DIV class=postText&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Being known for my interest in rules processing, I quite often get asked to help with problems with MS BRE.&amp;nbsp;&amp;nbsp; A couple of days ago, I was asked to help investigate an issue occurring in production for a BizTalk Server application.&amp;nbsp;&amp;nbsp; Occasionally, in a fairly high throughput system, BizTalk logs an error stating that a problem has been encountered while executing a rule set.&amp;nbsp;&amp;nbsp; That is the only information provided, with no hint of what the problem might be, and because the issue only occurs intermittently under real-world conditions in the production environment, it was not obvious how to obtain further insight without disrupting live operations.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;A href="http://geekswithblogs.net/cyoung/archive/2008/01/23/118804.aspx"&gt;This article&lt;/A&gt; investigates one way of handling this deilemma through the use of the compensation handling feature of Microsoft's Business Rules Engine.&amp;nbsp;&amp;nbsp; It goes on to discuss the broader use of compensation handling in rule processing.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;A id=ctl00_pageContent_Editor_Edit_hlEntryLink title="view: MS BRE: Using Compensation handlers" href="http://geekswithblogs.net/cyoung/articles/118804.aspx"&gt;http://geekswithblogs.net/cyoung/archive/2008/01/23/118804.aspx&lt;/A&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=456" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>MS BRE: The Rules Engine Update (REU) Service and Policy Execution </title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/01/23/455.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2008/01/23/455.aspx</id><published>2008-01-23T01:09:00Z</published><updated>2008-01-23T01:09:00Z</updated><content type="html">&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;A question came up tonight on BizTalkGurus on my favourite subject of rule engines.&amp;nbsp;&amp;nbsp; I don’t blog enough these days, so this gives me an excuse.&amp;nbsp;&amp;nbsp;&amp;nbsp; Essentially, the question concerned an incorrect, but understandable, suspicion that MS BRE may be using remoting to execute rule sets out-of-process.&amp;nbsp;&amp;nbsp; This is not the case.&amp;nbsp;&amp;nbsp;&amp;nbsp; You can find an article describing what actually happens at:&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A title="view: MS BRE:  The Rules Engine Update (REU) Service and Policy Execution" href="http://geekswithblogs.net/cyoung/articles/118506.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/cyoung/archive/2008/01/13/118506.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=455" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>Using .NET 3.5 and Visual Studio 2005</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/12/01/432.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/12/01/432.aspx</id><published>2007-12-01T11:25:00Z</published><updated>2007-12-01T11:25:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT face=Arial size=2&gt;The recent release of Visual Studio 2008 and .NET Fx 3.5 is causing some confusion.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Microsoft released these two technologies together for good reason.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The wonderful new LinQ technologies introduced in .Net 3.5 rely on explicit compiler-level support, and therefore require LinQ aware compilers in Visual Studio.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The new version of visual Studio provides these compilers, allowing developers to take advantage of the new monadic syntax.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;In addition, Visual Studio has several new features designed to make it easier to exploit NET 3.5 features such as Ajax and the foundation libraries (WCF, WF and WPF).&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT face=Arial size=2&gt;The problem is that by tying the release of .NET 3.5 to Visual Studio 2008, the impression is given that, unless you are ready to upgrade to the new version of the IDE, there is no point thinking about upgrading to the new version of the framework.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;This is simply not the case.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The .NET framework does not have any built-in dependency on Visual Studio, let alone a specific version of Visual Studio.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;More to the point, Microsoft has long since split the versioning of the framework from the versioning of the run-time environment.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;.NET 3.5 continues to exploit version 2.0 of the CLR.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Visual Studio 2005 is perfectly happy to compile your code against .NET 3.5 assemblies.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;They are just assemblies.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Even more compelling is the realisation that most of the assemblies in .NET 3.5 are identical to those in .NET 3.0 (same version number).&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;There are some new assemblies with new features.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;.NET 3.5 is just .NET 3.0 with extra stuff.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT face=Arial size=2&gt;Why is this important?&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Well, not everyone is ready to upgrade to Visual Studio 2008.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Apart from the expense this involves, consider the dilemma of BizTalk Server developers.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Currently, there are no Visual Studio 2008 bindings for BizTalk Server (i.e., you can't create BizTalk Server project types in the new IDE).&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;This, we are assured, will be addressed at some point, but that could be months away.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;For the time being, BizTalk developers are stuck with Visual Studio 2005 :-(&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Hence, some people are currently discounting the possibility of using .Net 3.5 because they believe, quite incorrectly, that it requires an upgrade to Visual Studio 2008.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;FONT face=Arial size=2&gt;There are issues, of course.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;As well as the absence of compiler support for LinQ, Visual Studio 2005 does not have access to various new project and file templates and tools that support the new version of the framework.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Developers may need to do more coding in Visual Studio 2005 than would be necessary in Visual Studio 2008.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;This is often a small price to pay, however, in order to access the improvements in 3.5.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;As an example, consider the new integration between WF and WCF, provided in the new System.WorkflowServices assembly.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;The integration is provided via the new WorkflowServiceHost class and a couple of new activities.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Visual Studio 2008 has new template support for building workflow services, and comes with a very useful new WCF test harness.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;However, exploiting this new functionality in Visual Studio 2005 is trivial.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Create a WF workflow library, add a reference to System.WorkflowServices and add the new activities to your tool box.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Finally, use the WCF Service template to add a service class to your project and you are just about in the same position as you would be in Visual Studio 2008 if you used the new Workflow Service project template.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;You'll need to write a couple of lines of code to use WorkflowServiceHost to host your service, of course.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Off you go, and enjoy .NET 3.5.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=432" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>Microsoft 'Oslo' - the vNext SOA Platform</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/10/30/419.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/10/30/419.aspx</id><published>2007-10-30T22:43:00Z</published><updated>2007-10-30T22:43:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;Noon (Redmond time) on Tuesday 30th October marks the moment in history we can begin to talk publically and openly about Microsoft’s 'Oslo'.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;Oslo is the codename for the next generation of Microsoft's SOA platform...'Microsoft SOA vNext' if you will.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;It is a huge vision, and one which Microsoft is throwing some serious resource at.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Their strategy will unfold over several years, but the first public view has been provided today.&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;SPAN&gt;Get more details&amp;nbsp;at &lt;A id=ctl00_pageContent_Editor_Edit_hlEntryLink title="view: Microsoft 'Oslo' - the vNext SOA Platform" href="http://geekswithblogs.net/cyoung/articles/116456.aspx"&gt;http://geekswithblogs.net/cyoung/archive/2007/10/30/116456.aspx&lt;/A&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=419" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>BizTalk Services: An overview</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/10/09/414.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/10/09/414.aspx</id><published>2007-10-09T12:18:00Z</published><updated>2007-10-09T12:18:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Earlier this year, Microsoft released a CTP version of a new technology stack called 'BizTalk Services'.&amp;nbsp;&amp;nbsp; In July, they updated this with a new release.&amp;nbsp;&amp;nbsp;&amp;nbsp; It is only now, at long last, that I've got around to playing with BizTalk Services, thanks to the gentle pursuasion of my colleague, Andy James (CTO at &lt;A title="SolidSoft Ltd." href="http://geekswithblogs.net/Providers/BlogEntryEditor/FCKeditor/editor/www.solidsoft.com" target=_blank&gt;SolidSoft&lt;/A&gt;).&amp;nbsp;&amp;nbsp; I must say that I am very pleased that Andy applied some pressure.&amp;nbsp;&amp;nbsp; This is a really interesting development in the BizTalk world, and having now had a chance to stub my toe against the tyres (I'll leave the full-blown kicking until a future date), I feel rather excited about the possibilities this technology opens.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I have provided an overview of BizTalk Services at &lt;/FONT&gt;&lt;A href="http://geekswithblogs.net/cyoung/archive/2007/10/09/115944.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/cyoung/archive/2007/10/09/115944.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&amp;nbsp;&amp;nbsp; I have also written an article on the Identity Service that is part of the stack.&amp;nbsp;&amp;nbsp; This is at &lt;/FONT&gt;&lt;A href="http://geekswithblogs.net/cyoung/archive/2007/10/09/115943.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/cyoung/archive/2007/10/09/115943.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&amp;nbsp;&amp;nbsp; I have published some notes on solving problems when installing the SDK.&amp;nbsp;&amp;nbsp; These are at &lt;/FONT&gt;&lt;A href="http://geekswithblogs.net/cyoung/archive/2007/10/09/115942.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/cyoung/archive/2007/10/09/115942.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=414" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>WF Rules and MS BRE - Comparing Performance</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/08/14/389.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/08/14/389.aspx</id><published>2007-08-14T17:27:00Z</published><updated>2007-08-14T17:27:00Z</updated><content type="html">&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;I’ve been asked a few times how the performance of WF (Windows Workflow Foundation) Rules compares with that of the Microsoft Business Rules Engine (MS BRE).&amp;nbsp;&amp;nbsp; Having done no testing, I could only guess at the answer.&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;I’ve now undertaken some initial performance testing to compare WF and MS BRE, and decided to publish the results.&amp;nbsp;&amp;nbsp;&amp;nbsp; You can read my write-up of the results &lt;/FONT&gt;&lt;A href="http://geekswithblogs.net/cyoung/archive/2007/08/12/114597.aspx"&gt;&lt;FONT face=Verdana size=2&gt;here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="http://geekswithblogs.net/cyoung/archive/2007/08/12/114597.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/cyoung/archive/2007/08/12/114597.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=389" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>BizTalk Server or WF for rules and tracking?</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/07/19/379.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/07/19/379.aspx</id><published>2007-07-19T19:12:00Z</published><updated>2007-07-19T19:12:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I got an email today requesting help in deciding the appropriate selection of rule processing technology for a workflow application.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;I’ve got requests like this before, so I’ve decided to post a reply publically.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://geekswithblogs.net/cyoung/archive/2007/07/19/114061.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/cyoung/archive/2007/07/19/114061.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=379" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>MS BRE: Controlling rule side effects</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/04/14/290.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/04/14/290.aspx</id><published>2007-04-14T03:57:00Z</published><updated>2007-04-14T03:57:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;For almost two years now, I've been intending to write an article about the mysterious 'side effects' flag used in Microsoft Business Rule Engine policies.&amp;nbsp; Microsoft documents this feature (see &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa559124.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://msdn2.microsoft.com/en-us/library/aa559124.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;), and describes very briefly how to control it.&amp;nbsp;&amp;nbsp; The mystery that surrounds this flag arises because it is represented by an attribute named 'sideeffects' in Microsoft's BRL (Business Rule Language) although it actually controls a caching mechanism, and because Microsoft has not provided access to the flag in their Rules Composer, thereby giving the impression that it is not a 'first-class' feature of rule definitions.&amp;nbsp;&amp;nbsp; In reality, this flag is an important aspect of the functional approach adopted in Microsoft's Business Rule Language (BRL), and can have a significant effect on both behaviour and performance of your policies.&amp;nbsp;&amp;nbsp;Understanding the flag also requires a greater understanding of the way in which BRL binds functions to custom&amp;nbsp;code, providing a clean mechanism for implementing domain-specific extensions to the rule language.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The article is located at &lt;/FONT&gt;&lt;A href="http://geekswithblogs.net/cyoung/articles/111169.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://geekswithblogs.net/cyoung/articles/111169.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=290" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>Microsoft BRE: Fact Identity in the Microsoft Rules Engine, or how the author chased a non-existant bug</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/04/04/286.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/04/04/286.aspx</id><published>2007-04-04T22:24:00Z</published><updated>2007-04-04T22:24:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I recently had reason to revisit the exact mechanisms Microsoft use when you assert facts to the Microsoft Rules Engine.&amp;nbsp;&amp;nbsp; I was discussing stuff on-line with a fellow rules enthusiast when a terrible thought occurred to me.&amp;nbsp;&amp;nbsp; Can the MS BRE always uniquely identify each different fact, or is there a chance that sometimes it might confuse two facts with each other?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;For a couple of days, I was convinced that I had stumbled on a significant bug.&amp;nbsp;&amp;nbsp; Indeed, at one point, I thought there was such a serious problem that I would have to recommend to my company that we desist from any further use of Microsoft’s rules engine.&amp;nbsp;&amp;nbsp; Melodramatic, huh!&amp;nbsp;&amp;nbsp;&amp;nbsp; Fortunately, after a bit more research, I discovered that I was quite wrong.&amp;nbsp;&amp;nbsp; The MS BRE does not suffer from a terminal flaw and can be trusted to always distinguish correctly between all your facts…except when…well, I’ll get onto that later.&amp;nbsp;&amp;nbsp; It’s worth recording my suspicions, mistakes and eventual enlightenment.&amp;nbsp;&amp;nbsp; There is something useful to learn, here, about the inner workings of the engine, and also about Microsoft’s implementation of the Hashtable class in .NET.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The first point to make is that Microsoft uses the term ‘fact’ rather loosely in MS BRE.&amp;nbsp;&amp;nbsp; A fact is a data item ‘asserted’ to the working memory of a rules engine.&amp;nbsp;&amp;nbsp; The working memory, itself, is simply some mechanism for storing and retrieving facts, and is typically implemented as a set of node-specific collections (a rule set is represented as a node graph at runtime).&amp;nbsp;&amp;nbsp; Microsoft makes extensive use of the non-generic Hashtable class in the MS BRE to implement node memories.&amp;nbsp;&amp;nbsp; In most similar engines, a fact is always a simple data tuple – i.e., a collection of attribute values.&amp;nbsp;&amp;nbsp; The attributes are usually named, though sometimes un-named and ordered.&amp;nbsp;&amp;nbsp; It is also almost always the case that each tuple contains some kind to type identifier.&amp;nbsp;&amp;nbsp;&amp;nbsp; Many engines provide a metadata definition language which rule developers use to define tuple templates.&amp;nbsp;&amp;nbsp; These definitions are called ‘deftemplates’ in several engines.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Microsoft does not support the direct equivalent of deftemplates, and ‘facts’ do not always convert neatly to single tuples.&amp;nbsp;&amp;nbsp; The MS BRE philosophy is to apply set-based rule processing directly to data stored in .NET objects.&amp;nbsp;&amp;nbsp; You can therefore assert any POCO (Plain Old CLR Object) to the engine as a fact.&amp;nbsp;&amp;nbsp; In this case, a POCO is roughly equivalent to a tuple because it provides named properties (MS BRE does not access fields directly).&amp;nbsp;&amp;nbsp; Of course, it also provides normal methods as well, and rules can exploit this by calling methods in order to obtain data values, evaluate predicates or invoke custom actions.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Microsoft provides four ‘Typed Fact’ classes for wrapping specific types of .Net object and asserting them to the engine.&amp;nbsp;&amp;nbsp; These all implement the ITypedFact interface and are as follows:&lt;BR&gt;TypedXmlDocument: wraps an XML document or node&lt;BR&gt;TypedDataTable: wraps an ADO.NET DataTable&lt;BR&gt;TypedDataRow: wraps an ADO.NET DataRow&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;DataConnection: wraps an ADO.NET DataSet and either SQL Server or OLE DB .NET data adapters, connections and transactions.&amp;nbsp;&amp;nbsp; A DataConnection object is used to access a specific table in an external data source via the wrapped data connection.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;A TypedDataRow is the closest equivalent to a data tuple.&amp;nbsp;&amp;nbsp; The other Typed Fact classes are used to instantiate what Microsoft calls ‘facts’, but are, in reality, sources of multiple facts.&amp;nbsp;&amp;nbsp;&amp;nbsp; Once asserted, the engine uses information embedded in the rules in the currently executing policy to internally select and assert the required facts from these fact sources.&amp;nbsp;&amp;nbsp; For example, it uses XPaths to select node sets from XML documents, and then uses additional XPaths to access individual ‘fields’ within these nodes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The important thing to note here is that you only ever assert .NET objects to the engine.&amp;nbsp;&amp;nbsp; In some cases the engine automatically asserts additional .NET objects internally.&amp;nbsp;&amp;nbsp; MS BRE must be able to distinguish between all these objects unambiguously.&amp;nbsp;&amp;nbsp; It must be able to tell when two objects represent two different facts and when they reference the same fact.&amp;nbsp;&amp;nbsp; The only way this can be done generically across all asserted facts is to use some notion of object identity.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Unfortunately, object identity is a rather slippery subject in .NET.&amp;nbsp;&amp;nbsp; There is a good reason for this.&amp;nbsp;&amp;nbsp; In un-managed code, a compiler will normally distinguish between two different objects by using their references.&amp;nbsp;&amp;nbsp; Each object reference maps directly to a memory address at which the object state is located.&amp;nbsp;&amp;nbsp; The exact layout of the state varies from compiler to compiler and may depend of whether the object has a vTable or equivalent.&amp;nbsp;&amp;nbsp; The important point, however, is that once created, an object does not generally move.&amp;nbsp;&amp;nbsp; Hence, references stay valid over time.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Not so in the CLR (the .NET Common Language Runtime).&amp;nbsp;&amp;nbsp; The runtime environment provides automatic garbage collection and memory management.&amp;nbsp;&amp;nbsp; One consequence of this is that objects move.&amp;nbsp;&amp;nbsp; They cannot be guaranteed to remain at the same memory location for any significant period of time.&amp;nbsp;&amp;nbsp; Hence, you cannot depend on an underlying memory reference to provide object identity except in a very limited sense.&amp;nbsp;&amp;nbsp; If you want to test two objects to see if they are identical, you can test their underlying references at a point in time (or, at least, an approximation to a point in time).&amp;nbsp;&amp;nbsp; If the references are equal, the objects are identical.&amp;nbsp;&amp;nbsp; Microsoft supports this via the static ReferenceEquals() method of SystemObject.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In itself, this is simply not adequate to meet MS BREs needs.&amp;nbsp;&amp;nbsp; MS BRE stores fact objects in its working memory over a period of time, and needs to be able to distinguish between existing and new facts unambiguously.&amp;nbsp;&amp;nbsp; Each time you assert a fact to the engine, MS BRE needs to know if this is a new fact of which it has prior knowledge, or if you are reasserting an existing fact.&amp;nbsp;&amp;nbsp; Hence the engine needs some reliable form of identity that persists over time.&amp;nbsp;&amp;nbsp;&amp;nbsp; We might consider using the values of a field in each fact as unique identifiers.&amp;nbsp;&amp;nbsp;&amp;nbsp; A POCO, though, can contain any data, and there is no guarantee that two entirely different POCOs might not contain identical data.&amp;nbsp;&amp;nbsp; In any case, you would have to impose some kind of contract on your POCOs…meaning that they are not really POCOs anymore from the engine’s perspective.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Most .NET developers are aware of the GetHashCode() method.&amp;nbsp;&amp;nbsp;&amp;nbsp; GetHashCode() is inherited from System.Object, and therefore is a member of all .NET objects.&amp;nbsp;&amp;nbsp; It is also callable on value types.&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft provides two default implementations of this method for reference and value types.&amp;nbsp;&amp;nbsp; For value types (structs, in C#), the hash code is provided by calling GetHashCode() of the first field in the value type.&amp;nbsp;&amp;nbsp; Hence, not all fields in a struct are equal.&amp;nbsp;&amp;nbsp; The first one has a special role.&amp;nbsp;&amp;nbsp; For reference types, the default implementation in .NET 2.0 is a randomly-generated 32 bit signed integer.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The hash code is often confused for an object identifier.&amp;nbsp;&amp;nbsp; In many cases, it is almost good enough to be used as such, but not quite.&amp;nbsp;&amp;nbsp; Hash codes, according to Microsoft’s guidance, should be associated with the ‘value’ of an object.&amp;nbsp;&amp;nbsp; This is the value which is tested for equality when you use the Equals() method.&amp;nbsp;&amp;nbsp; If two objects evaluate as equal, they should both return the same hash code.&amp;nbsp;&amp;nbsp; Of course, the ‘value’ of an object may change over time.&amp;nbsp;&amp;nbsp; For example, a string object’s value is the text associated with that object, and the hash code is derived algorithmically from that text.&amp;nbsp;&amp;nbsp; If you change the value of a string, the hash code generally changes as well.&amp;nbsp;&amp;nbsp; The default implementation of GetHashCode() generates a number randomly which is then associated with the object by the runtime and returned on future calls.&amp;nbsp;&amp;nbsp; Hence, it is almost like an object reference.&amp;nbsp;&amp;nbsp; Almost, but not quite.&amp;nbsp;&amp;nbsp; The fundamental problem is that there is a small chance that two entirely different objects could, by chance, have identical hash codes.&amp;nbsp;&amp;nbsp; The default implementation of GetHashCode() does not guarantee uniqueness of hash codes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;One of the reasons I suspected there might be bug in MS BRE is that the implementation of GethashCode() in System.Object was different in .NET 1.x.&amp;nbsp;&amp;nbsp; In the earlier version of the framework, Microsoft returned the index of the object’s sync block as a 32-bit positive integer.&amp;nbsp;&amp;nbsp; A sync block is a structure used to manage thread synchronisation, and the index value is incremented each time a sync block is created.&amp;nbsp;&amp;nbsp; If you called GetHashCode(), and there was no sync block, the object would create one internally in order to obtain a hash code.&amp;nbsp;&amp;nbsp; Because the indexes were incremented, and because (I believe) index numbers were recycled only when objects were garbage collected, there was no chance that two hash codes would collide.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; However, this was never part of the hash code contract, and Microsoft, from day one, reserved the right to change this behaviour.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;No doubt you can begin to see why I entertained suspicions about MS BRE.&amp;nbsp;&amp;nbsp; MS BRE was originally written for .NET 1.x, and apart from a few bug fixes and minor enhancements, it has hardly changed in the .NET 2.0 version.&amp;nbsp;&amp;nbsp; When I used Reflector to inspect how Microsoft handles fact identity, I realised that the approach is based on calls to GetHashCode().&amp;nbsp;&amp;nbsp; It therefore occurred to me that Microsoft might have incorrectly depended on the coincidental nature of the default implementation of GetHashCode in .NET 1.x, and not realised that this behaviour had changed in .Net 2.0.&amp;nbsp;&amp;nbsp; I suspected that, because hash codes can collide in .NET 2.0, facts might sometimes be confused.&amp;nbsp;&amp;nbsp; The engine might think you had reasserted an existing fact when you had actually asserted a new fact.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I needn’t have worried.&amp;nbsp;&amp;nbsp; The issue is robustly dealt with within MS BRE by using the Hashtable class.&amp;nbsp;&amp;nbsp; I had a reasonable idea of how this class works, but there was one detail of which I was not aware, although in hindsight it appears blindingly obvious that this is the only sensible way in which Microsoft could implement this class.&amp;nbsp;&amp;nbsp; I’m sure many developers are aware of this feature, although I haven’t yet come across any detailed discussion or documentation that describes the exact behaviour.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;When you assert a fact to the engine, its type is tested, and it is handed off to a ‘class node’.&amp;nbsp;&amp;nbsp; This is a type-specific node object in the Rete.&amp;nbsp;&amp;nbsp; A Rete is a node graph that provides an efficient and executable run-time representation of a rule set.&amp;nbsp;&amp;nbsp;&amp;nbsp; Class nodes first test to see if a fact is already stored in working memory.&amp;nbsp;&amp;nbsp; A class node implements its working memory as a simple hashtable, and it uses the object itself as the key value.&amp;nbsp;&amp;nbsp; It tests the hashtable to see if the object already exists in the collection.&amp;nbsp;&amp;nbsp; If the hashtable determines that the fact is not in the memory, it wraps it in an instance of a class called ‘WorkingMemoryElement’ (WME), and then adds the WME to the hashtable.&amp;nbsp;&amp;nbsp; Incidentally, the WorkingMemoryElement class overrides GetHashCode() in order to delegate to the GetHashCode() method of the fact it wraps.&amp;nbsp;&amp;nbsp;&amp;nbsp; If the hashtable already contains the fact, the engine assumes that you are re-asserting an existing fact.&amp;nbsp;&amp;nbsp; It retracts the existing fact, and then asserts the new version of the fact.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Now, as I say, it is blindingly obvious with the benefit of hindsight that this must be implemented as a robust mechanism.&amp;nbsp;&amp;nbsp; After all, imagine what life would be like if, when you exploit a .NET 2.0 hashtable that uses objects as keys, it sometimes fails to distinguish between the objects it stores.&amp;nbsp;&amp;nbsp; This would be terrible, and we would all have heard about it.&amp;nbsp;&amp;nbsp; It would break huge amounts of code causing strange, arbitrary and infrequent exceptions.&amp;nbsp;&amp;nbsp; The trouble is that I knew just enough to know that, when you use an object as a key, the hashtable calls GetHashCode() internally.&amp;nbsp;&amp;nbsp; You can see why I was worried.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Hashtables compute an internal hash code by calling GetHashCode() and ensuring that the negation bit is set to 0.&amp;nbsp;&amp;nbsp; This is necessary because the negation bit (the first high-order bit in the 32-bit integer) is used for collision detection purposes.&amp;nbsp;&amp;nbsp; Hashtables detect hash code collisions and use an approach called ‘rehashing’ to deal with this.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;When the MS BRE tests for an existing fact, the hashtable calls GetHashCode() on the fact and computes the internal hash code.&amp;nbsp;&amp;nbsp; It then looks this hashcode up in the collection to see if it is already used for a given fact.&amp;nbsp;&amp;nbsp; If it isn’t, the hashtable knows unambiguously that this is a new fact.&amp;nbsp;&amp;nbsp; However, if it does find the hash value, it cannot be certain if it already contains that fact, or if a collision has occurred.&amp;nbsp;&amp;nbsp; This brings us to the feature of which I was unaware.&amp;nbsp;&amp;nbsp; Very simply, if it finds an existing item with the hash code, the hashtable performs an additional test.&amp;nbsp;&amp;nbsp; It tests the equality of the fact object, using the instance Equals() method, against the object it already contains (the one with the same hash value).&amp;nbsp;&amp;nbsp; For performance purposes, it only performs this additional test when needed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The default implementation of the Equals() method, inherited by all reference types from System.Object, internally does a ReferenceEquals() check to discover, unambiguously, if the two objects are actually identical.&amp;nbsp;&amp;nbsp; So, if your facts use the default implementation of Equals(), the hashtable will always correctly distinguish one object from another.&amp;nbsp;&amp;nbsp; The ‘TypedFact’&amp;nbsp; wrapper classes all use the default implementation, and your POCO facts will also use the default implementation unless you have overridden it, or are using a class that overrides this method.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In conclusion, therefore, we can see that MS BRE safely handles fact identity as long as you never assert .NET objects that have a poor or incorrect implementation of Equals().&amp;nbsp;&amp;nbsp; For a long time, I have wondered if I ought to recommend overriding GetHashCode() and Equals() on fact classes.&amp;nbsp;&amp;nbsp; My conclusion is that I should definitely recommend that, unless you have a very good reason to do so, you should NOT override these methods.&amp;nbsp;&amp;nbsp; For safety, use the default implementations, or existing overrides on classes you trust (like ‘System.String’, for example).&amp;nbsp;&amp;nbsp;&amp;nbsp; If you do have a reason to provide overrides, make sure you fully understand the characteristics of the code that you implement and ensure that you code conforms rigorously to the ‘rules’ specified by Microsoft.&amp;nbsp;&amp;nbsp; If you don’t, you may well live to regret it.&amp;nbsp;&amp;nbsp; And, unlike me, don’t worry…Microsoft developers really do have some idea (generally) of what they are doing &lt;SPAN&gt;&lt;SPAN&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=286" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>MVP Global Summit Day 3</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/15/278.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/15/278.aspx</id><published>2007-03-15T14:06:00Z</published><updated>2007-03-15T14:06:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Day three of the MVP summit was held at the Microsoft Campus.&amp;nbsp;&amp;nbsp; Things started badly with a long and slow bus ride through heavy traffic leaving me with no time for breakfast when I finally arrived at the conference centre.&amp;nbsp;&amp;nbsp; I boarded the shuttle for building 43 to find most of my fellow BizTalk MVPs (the ones who have been staying in downtown Seattle since the weekend) equally late, and we arrived en masse about 15 minutes into the first session.&amp;nbsp;&amp;nbsp;&amp;nbsp; Jesus Rodriguez was on his feet presenting the forthcoming WCF adapter SDK with a particular focus on building LOB adapters with metadata harvesting and dynamic, consumer-orientated contracts.&amp;nbsp;&amp;nbsp; Sonu Arora presented code examples.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;After a frantic and barely successful search for coffee, I sat through the next session with Gruia Pitigoi-Aron.&amp;nbsp;&amp;nbsp; This continued the focus on the new adapter framework, discussing the development of custom WCF channels from the perspective of BizTalk developers.&amp;nbsp;&amp;nbsp; Custom channels can be exploited in BizTalk land using the WCF Custom Binding adapter that will ship with R2.&amp;nbsp;&amp;nbsp; Gruia sees this as a new extension approach to be used alongside custom code in orchestrations and pipeline components.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I need to do more thinking at some point about this approach.&amp;nbsp;&amp;nbsp; Although the adapter allows custom channels to interact with the BizTalk message box, this does not mean that you automatically get the recoverability and tracking you might need in a real-world solution.&amp;nbsp;&amp;nbsp; The appropriate use of this new facility will, I trust, become clear as we begin to apply it for real.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Next up was Marty Wasznicky discussing the BizTalk Server disaster recovery model and support for high availability.&amp;nbsp;&amp;nbsp; Microsoft has certainly improved this side of things, and we saw a good demo (slightly cursed by the demo gods at the end) of a BizTalk installation being recovered.&amp;nbsp;&amp;nbsp; Marty had to present under the eagle-eye d scrutiny of Lee Graber who, although now working with the SQL Server product team, joined us for part of the day.&amp;nbsp; I was amused by Lee’s comments about BizTalk’s feature history.&amp;nbsp;&amp;nbsp;&amp;nbsp; ‘No’, he said on more than one occasion, ‘that feature wasn’t introduced in BTS 2006; it was in BTS 2004 SP2’.&amp;nbsp;&amp;nbsp; Ah, the voice of authority.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Not being a system administrator, I was suitably impressed by the DR features that Marty demonstrated.&amp;nbsp;&amp;nbsp; This was, however, the subject of some discussion later in the day, with alternative viewpoints and strategies being discussed.&amp;nbsp;&amp;nbsp;&amp;nbsp; The inability to support SQL Server mirroring was a matter of some concern.&amp;nbsp;&amp;nbsp;&amp;nbsp; Again, BizTalk DR is a subject I need to look more deeply into.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;After lunch, we were briefly back to adapter-land with a presentation by Tapas Nayak looking at Microsoft’s new WCF SAP adapter.&amp;nbsp;&amp;nbsp; This was especially interesting in terms of seeing the application of dynamic contract creation features in the new framework.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The direction of the day now changed with a fascinating presentation by Pravin Indurkar on the next release of WF.&amp;nbsp;&amp;nbsp; This will be part of .NET 3.5 which will ship in the ‘Orcas’ time frame.&amp;nbsp;&amp;nbsp; Pravin discussed and demonstrated a number of extensions that more closely integrate WF and WCF, allowing workflows to be exposed as services via WCF bindings and behaviours.&amp;nbsp;&amp;nbsp; WF will include new Send and Receive activities, and will support a context exchange protocol that will support a wide spectrum of service-orientated interaction patterns, including ‘conversations’ similar to patterns used in SQL Server Service Broker.&amp;nbsp;&amp;nbsp; This is very powerful, and I couldn’t help thinking that, conceptually at least, we were seeing something of a stepping stone on the way to integrating .NET 3 into a future version of BizTalk.&amp;nbsp;&amp;nbsp;&amp;nbsp; WF 2.5 will support durable services via a persistence provider, and may even offer BizTalk-like features such as property promotion.&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Next up was Paul Andrews, a Microsoft product manager, who discussed the drivers for choosing between different integration and workflow technologies (specifically BizTalk and WF).&amp;nbsp;&amp;nbsp; We’ve all sat through presentations were an attendee annoys us by reacting visibly and negatively to the presentation.&amp;nbsp;&amp;nbsp; On this occasion, I was that attendee, so I apologise to Paul if I made his life difficult.&amp;nbsp;&amp;nbsp; However, I profoundly disagree with the line he took.&amp;nbsp;&amp;nbsp; A major aspect of my work as a BizTalk consultant is to help clients understand how to best select and fit available technologies to their requirements, and I therefore want to see a Microsoft approach that is grounded in a solid understanding of the nature of specific technologies.&amp;nbsp;&amp;nbsp; To me, Paul’s approach would be analogous to comparing and contrasting the IP stack to Internet Explorer, and suggesting that while IE might be suitable technology for use by ‘enterprise’ customers, an ISV would probably want to install the stack.&amp;nbsp;&amp;nbsp; After all, draw up a tick-box list of features offered by IE and the IP stack, and you will see that the stack essentially offers a subset of the features you can access via your browser.&amp;nbsp;&amp;nbsp;&amp;nbsp; So, if you don’t have ‘enterprise’ requirements, you only need the IP stack to access the Internet.&amp;nbsp;&amp;nbsp; Enterprise clients, of course, don’t need the stack.&amp;nbsp;&amp;nbsp; Huh?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;For IE, read BizTalk, and for the IP stack, read WF, and you may begin to understand where I am coming from on this.&amp;nbsp;&amp;nbsp; Try to imagine how many minutes I would be allowed to stay in a client’s building before being marched back to the entrance if I was to take this approach in helping them to select appropriate technologies.&amp;nbsp;&amp;nbsp; Maybe three?&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The point, surely is that WF is foundational.&amp;nbsp;&amp;nbsp; It is a framework on which we build.&amp;nbsp;&amp;nbsp; It is not a ‘product’ to be compared and contrasted with other products.&amp;nbsp;&amp;nbsp; BizTalk will, in future, build on this foundation.&amp;nbsp;&amp;nbsp; K2 ‘Black Pearl’ will build on this foundation.&amp;nbsp;&amp;nbsp; MOSS has already built on this foundation.&amp;nbsp;&amp;nbsp; MIIS is building on this foundation.&amp;nbsp;&amp;nbsp; Developers will build on this foundation when implementing custom workflow solutions.&amp;nbsp;&amp;nbsp; Edge servers will exploit this foundation and then interact with BizTalk which builds on this foundation and integrates with other services which build on this foundation.&amp;nbsp;&amp;nbsp; You’ve got to understand the foundational nature of WF before you can realistically advise clients in regard to technology selection.&amp;nbsp;&amp;nbsp; This is not enabled by plugging WF into a tick-box product comparison matrix.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;OK, I bet (and hope) I get some kick-back on that.&amp;nbsp;&amp;nbsp; Let’s move on.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Brad Paris and Tiho Tarnavski were next up with a session on the WCF and WF BAM interceptor extensions in BizTalk R2.&amp;nbsp;&amp;nbsp; A few months ago, a colleague and I spent a couple of hours reflecting on WF in order to work out how its tracking infrastructure works.&amp;nbsp;&amp;nbsp; I won’t discuss here, but it is suitably impressive.&amp;nbsp; At the time, we compared and contrasted this with the instrumentation you would need to do if using the BAM interceptor APIs directly.&amp;nbsp;&amp;nbsp; I was therefore delighted to discover that the WF BAM interceptor is built on the tracking infrastructure, which means that it should prove really powerful.&amp;nbsp;&amp;nbsp; There are a couple of caveats though.&amp;nbsp;&amp;nbsp; The point was well made that Microsoft does not offer anything like TPE (the BizTalk Tracking profile Editor) in order to exploit interception in WF workflows.&amp;nbsp;&amp;nbsp; This means that configuration must be done long-hand by editing verbose XML, and that this makes BAM instrumentation difficult.&amp;nbsp;&amp;nbsp; A good point, which is, of course (yet again) a tooling issue.&amp;nbsp;&amp;nbsp; I hope Microsoft takes note.&amp;nbsp;&amp;nbsp; A second point is that the interceptors do not use buffered event streams.&amp;nbsp;&amp;nbsp; This is potentially a killer.&amp;nbsp;&amp;nbsp; I do not understand why Microsoft persists in coupling BAM buffered event streams so closely to the BizTalk message box.&amp;nbsp;&amp;nbsp; Why not re-factor the technology to allow persisted events to be streamed out to any persistence provider.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Anush Kumar presented the next session on RFID.&amp;nbsp;&amp;nbsp; I’m very familiar with this subject thanks to the focus we have in Solidsoft, and many conversations with Simon Holloway who heads up our efforts in this area.&amp;nbsp;&amp;nbsp; I wanted to question Anush more closely on Microsoft’s story with regard to simulation and the current lack of support for ALE.&amp;nbsp;&amp;nbsp; However, there was so much interest from others that I didn’t get the chance after the presentation.&amp;nbsp;&amp;nbsp; Maybe I will email my questions.&amp;nbsp;&amp;nbsp; I did, at least, get to raise my concerns briefly about the lack of support for rules development when using the BRE event handler, and was later able to explain this in more depth to Jon Flanders and others.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The day finished with a session on Identity Management from Richard Turned and an extra session on MIIS which is built around WF.&amp;nbsp;&amp;nbsp; I’ve known Richard for many years, and I spent some time last year building a managed card demonstrator using CardSpace which we demonstrated at the Microsoft Security Summit last year, so am familiar with the technology and Kim Cameron’s laws of identity on which it is based.&amp;nbsp;&amp;nbsp; I am less familiar with MIIS, so was very interested to see this demonstration.&amp;nbsp;&amp;nbsp; MIIS certainly appears to provide a flexible approach to identity management and process governance.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In the evening, we got to share some quality time with members of the product team.&amp;nbsp;&amp;nbsp; I met with some of the guys working the next version of BizTalk orchestration, and also had a long conversation with Clemens Vasters who, years ago, sparked my initial interest in BizTalk.&amp;nbsp;&amp;nbsp; A group of us were able to articulate some of our concerns and questions about the future of BizTalk, and Clemens promised to look more closely at how roadmap information can be shared more effectively with the MVP community.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I’d love to add more and more names to my emerging list of BizTalk MVPs who I have met, but time does not allow.&amp;nbsp;&amp;nbsp; It’s great to meet all you guys.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=278" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>MVP Global Summit Day 2</title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/14/277.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/14/277.aspx</id><published>2007-03-14T08:18:00Z</published><updated>2007-03-14T08:18:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Day two of the MVP summit is over.&amp;nbsp;&amp;nbsp; We were at the Washington State Convention &amp;amp; Trade Centre all day, but will be decamping to the Redmond campus tomorrow.&amp;nbsp;&amp;nbsp; The day started with an unscheduled bout of ‘pre-match’ chanting from the Canadian MVPs.&amp;nbsp;&amp;nbsp; They are an excitable crowd, and have spent much of the day ensuring that we all know which country they come from (Canada, I believe).&amp;nbsp;&amp;nbsp;&amp;nbsp; It appears that all Canadian MVPs (with the exception, I am glad to report, of Brian Loesgen) wear identical clothing.&amp;nbsp;&amp;nbsp; Very strange.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;VP Richard Kaplan got things underway informing us that the conference is being attended by 1,700 MVPs from 90 countries.&amp;nbsp;&amp;nbsp; The MVP community is certainly a very diverse group which helps give the conference a rather different feel than, say, the PDC.&amp;nbsp;&amp;nbsp; Bill Gates was up next, and provided us with a typical Gatesian keynote tour de force.&amp;nbsp;&amp;nbsp; He talked about the implications of moving to 64 bit computing and painted lots of cameo pictures of possible technology futures, emphasising some of his favourite topics along the way such as ink, recognition, etc.&amp;nbsp;&amp;nbsp; It’s interesting to note his acceptance of the ongoing transition of the programming ‘backbone’ to the Internet.&amp;nbsp;&amp;nbsp; He also discussed what was to become something of a recurrent theme during the day; namely the move to multi-core parallel processing, and the implications on software.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Wisely, Bill kept the speech fairly short, and then moved on to a Q&amp;amp;A session.&amp;nbsp;&amp;nbsp; There were too many questions to record here, but they included topics such as the problems faced by the IT in western countries due to the lack of graduate entrants into the industry, philanthropy, ‘Software as a Service’, the role of blogging, how to improve IT support for dealing with natural disasters, his all-time favourite Microsoft product, low-cost computing in the third world, the future of Live Search and a fascinating, but all too brief discussion on the evolution of technologies from tools to social insignia (yes, I’m serious).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;One rather sour note was the reaction of a handful of attendees to some of the questioners whose first language was not English.&amp;nbsp;&amp;nbsp; I would like to see them attempt to ask a question publically in, say, Japanese, and cope with the same level of sniggering and rude comments.&amp;nbsp;&amp;nbsp; Not good, guys.&amp;nbsp;&amp;nbsp; Where I come from, we consider this attitude to be a form of racism&amp;nbsp;and regard its practitioners as social pariahs.&amp;nbsp;&amp;nbsp; The MVP community is a global community, and should be respected as such.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Sean O’Driscoll then finished off the session by announcing the dates for the 2008 MVP summit – 14th-17th April.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;After the break, I attended the Developer Division roadmap session led by S Somasegar (Soma) who is the Developer Division corporate VP.&amp;nbsp;&amp;nbsp; He introduced us to the highlights of the Orcas release of Visual Studio.&amp;nbsp; Eric Carter demonstrated the Tools for Office and the way in which Outlook can be easily extended using Form Regions.&amp;nbsp;&amp;nbsp;&amp;nbsp; Soma talked about friction-free deployment and the introduction of cross-platform WPF/e.&amp;nbsp;&amp;nbsp; Brian Goldfarb then demonstrated the use of ink overlaid on graphics and videos in WPF.&amp;nbsp;&amp;nbsp; WPF is certainly impressive.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Soma finished the session by discussing some of the future directions for Team Foundation Server.&amp;nbsp;&amp;nbsp; There will be an emphasis on testing tools and the capture and tracking of business requirements.&amp;nbsp;&amp;nbsp; He also briefly discussed the challenges of multi-core programming and talked about the investment Microsoft is making in this area.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;After lunch, I attended a session with Anders Hejlsberg.&amp;nbsp;&amp;nbsp; Anders, despite suffering the wrath of the software demo gods, provided us with an intensive introduction to LINQ.&amp;nbsp;&amp;nbsp; I’ve played a bit with this technology, but there is surely nothing better than to sit in on an introduction from Anders himself.&amp;nbsp;&amp;nbsp; LINQ is fabulous.&amp;nbsp;&amp;nbsp; I realise the functional programming crowd probably find it little amusing that the rest of the development world is just now discovering monadic coding, but after years of using datasets, XML DOM and the like, the advent of LINQ in its various forms is truly exciting.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Anders graciously demonstrated the Literal XML features of VB.NET 9.0, leaving the C# developers feeling distinctly uncomfortable for a minute or so as we realised that perhaps there is a point to VB.NET after all!&amp;nbsp;&amp;nbsp; He then salvaged our faith in C# by demonstrating a Visual Studio add-in that auto-generates C# XLINQ code directly from XML.&amp;nbsp;&amp;nbsp; We sat through a huge number of demonstrations, but the overall themes were the declarative nature of the technology, the reduction in coding this brings, the clarity of the code in focussing on the ‘what’ rather than the ‘how’ and the clear and logical factored structure of the LINQ stack.&amp;nbsp;&amp;nbsp; All very good stuff indeed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The third, and final, session of the day was with Don Box and Chris Anderson.&amp;nbsp;&amp;nbsp; Don did the talking and Chris provided a kind of silent running commentary by typing a stream of consciousness in Notepad.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chris also wrote the code for the demos.&amp;nbsp;&amp;nbsp; The session was the subject of some discussion over dinner this evening, and everyone seemed to have a different view and interpretation.&amp;nbsp;&amp;nbsp; My perspective is that Don was inviting us to think a certain way about XAML.&amp;nbsp; Specifically, he described how XAML and the .NET 3.0 framework can be perceived as a platform for building DSLs (Domain Specific Languages).&amp;nbsp;&amp;nbsp; Don took us through an example where he defined a domain-specific schema as a set of C# classes, and created XAML to act as a model within that domain.&amp;nbsp;&amp;nbsp; He ‘interleaved interpretations’ of the domain with the schema definition (in plain English, he implemented additional functionality within the classes), and created transformational code in order to transform from the ‘newer to the older’ – i.e., from the domain model to actual run-time code.&amp;nbsp;&amp;nbsp; As part of this, Don showed how C# 3.0 lambda expressions and expression trees could be used effectively to represent and transform abstract syntax trees (ASTs).&amp;nbsp;&amp;nbsp; Don also showed us a simple graphical tool that represents any XAML in a generic fashion and provides a simple graphical DSL interface.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I am not well acquainted with the world of XAML, so the session provided some food for thought in the lead up to the forthcoming release of Orcas.&amp;nbsp;&amp;nbsp; I’ve played with Microsoft’s DSL toolkit which is a core component if their software factory initiative, but Don’s approach is quite separate to that, and is really a kind to general pattern for thinking about, designing and implementing code in .NET 3.0.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In the evening, we were taken to the Seattle Museum of Flight for the evening meal.&amp;nbsp;&amp;nbsp; I spent the evening chatting to various MVPs including Jeffrey Juday whom I met for the first time today.&amp;nbsp;&amp;nbsp; I also met Joao Martins from Portugal this morning, and, very briefly, Abhilash Shanmugan.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Well, time again to sleep.&amp;nbsp;&amp;nbsp; Tomorrow is an early start up at the campus.&amp;nbsp;&amp;nbsp; Goodnight.&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=277" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>Name-dropping in Seattle - Day one of the 2007 MVP Global Summit </title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/13/272.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/13/272.aspx</id><published>2007-03-13T07:20:00Z</published><updated>2007-03-13T07:20:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I'm in soggy Seattle at the MVP Global Summit, and, like so many of my fellow MVPs, it seems appropriate to keep some kind of daily journal - you know the form - let you know how fortunate I am to be on a big Microsoft freebie, and how unfortunate you are to, er..., not be...and, of course, get a bit of name-dropping in as well.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The first round of name-dropping has nothing to do with the summit.&amp;nbsp; A week ago I was at the Microsoft Architect Insight conference at the Celtic Manor outside Newport, Wales.&amp;nbsp;&amp;nbsp; The Celtic Manor is famous for golf and is the venue for the 2010 Ryder Cup.&amp;nbsp;&amp;nbsp; It is also famous, these days, for software architects working on the Microsoft platform.&amp;nbsp;&amp;nbsp; This was the second year of the conference, and Solidsoft, having attended last year, was a co-sponsor of the event this year.&amp;nbsp;&amp;nbsp; The conference started with a keynote from Merlin Hay who, later in the bar, entertained a group of us with his views on hereditary peerage and 'breeding' (what else - he is the 24th Lord Erroll!), and, more seriously, provided some interesting insights into the way that political decision-making happens at a national level.&amp;nbsp;&amp;nbsp; Later that evening, the Solidsoft team had the pleasure of a couple of hours with Ivar Jacobson, one of the 'three amigos' (the gentlemen responsible for UML) and an early advocate of component development.&amp;nbsp; Perhaps the best thing was that, instead of deep discussions on the applicability of agile methodologies in enterprise integration, we instead talked love, live and the pursuit of happiness.&amp;nbsp;&amp;nbsp; Hey, we do have lives!&amp;nbsp;&amp;nbsp; I enjoyed the final plenary with Ivar, Jack Greenfield (the software factory guy) and Colin Bird sharing their collective insights and views on a range of architecture and methodological subjects.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;It was nice to briefly meet Ed Gibson again.&amp;nbsp; Ed is Microsoft's Chief Security Advisor in the UK, and always a great pleasure to talk to.&amp;nbsp; I was also glad to, oh so briefly, catch up with Planky (Steve Plank) from Microsoft who fronted a series of sessions on security and identity management.&amp;nbsp;&amp;nbsp; Well done to Matt Deacon and Daniel Nissel who made the whole event happen.&amp;nbsp;&amp;nbsp; It was good to see my old colleague, James Saul, and I enjoyed his session on real world architecture (I left the heckling to Andrew Rivers ;-) ).&amp;nbsp;&amp;nbsp; Most embarrassing moment was parading the Solidsoft corporate train set (don't ask!) in front of rival companies' stands.&amp;nbsp;&amp;nbsp; The train set did fulfil its role, though, as a talking point around RFID, and Simon Holloway did a great presentation on the subject at the end of the conference.&amp;nbsp;&amp;nbsp; Thanks to Andy James for keeping the Solidsoft team on the straight and narrow, and well done to Pam McClelland who fronted the Solidsoft stand.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The conference, itself, was very worthwhile.&amp;nbsp;&amp;nbsp; Software, infrastructure and enterprise architecture covers very wide territory.&amp;nbsp;&amp;nbsp; Real effort was made to focus the conference on a range of architectural issues, and to capture the collective wisdom of the delegates.&amp;nbsp;&amp;nbsp; I have personally never attended an IT conference that was so interactive, and hope that this aspect is continued and built on in future years.&amp;nbsp;&amp;nbsp; Listening to discussions on issues like the development of IT skills in higher education or the effective presentation of enterprise architectures to business stakeholders took me into unfamiliar territory which broadened my horizons and provided food for thought.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Well, that’s a lot of name-dropping from the Welsh event.&amp;nbsp;&amp;nbsp; Now back to Seattle.&amp;nbsp;&amp;nbsp; Today was the first day of the conference, and has mainly been a matter of registration and networking.&amp;nbsp;&amp;nbsp; However, things really got underway yesterday evening when a group of BizTalk MVPs got together at Kells, an Irish pub in downtown Seattle.&amp;nbsp;&amp;nbsp; Mike Woods, the BizTalk Server Senior Technical Product Manager, was there, and he surprised us by paying for the meal - thanks to him for that.&amp;nbsp;&amp;nbsp; I had already spent a pleasant couple of hours with Gregory Van de Wiele in the hotel bar (mainly drinking orange juice, honest), and Kells provided the opportunity to meet a whole lot of people I know via their blogs - Alan Smith, Paul Somers, Jon Flanders, Brian Loesgen, Romualdas Stonkus, Jon Fancey and Evangelos Hadjichristodoulou.&amp;nbsp;&amp;nbsp; We were amused by the live Irish music - roughly equivalent to several rounds of 'Old MacDonald had a farm...' sung with Irish accents.&amp;nbsp;&amp;nbsp; We eventually decided to head off to the relative quiet of one of the hotels where we discussed all the things we would like to raise with the BizTalk product team while we are here.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Today, after registration, I attended the expo.&amp;nbsp;&amp;nbsp; It was nice to see Lorna Williamson, our UK MVP lead.&amp;nbsp; I still need to introduce myself to Akim Boukhelif who I saw from a distance.&amp;nbsp;&amp;nbsp; Much to my delight, I ran into Mick Badran.&amp;nbsp;&amp;nbsp; I've know Mick for ages, but haven't seen him since he moved back to Australia four or five years ago.&amp;nbsp;&amp;nbsp; He now has two kids and a thriving business based on BizTalk and MOSS training and consulting.&amp;nbsp;&amp;nbsp; Fantastic.&amp;nbsp;&amp;nbsp; I always felt Mick and I saw technology from a similar perspective, and after all this time we soon fell into sharing development experiences and violently agreeing with each other.&amp;nbsp;&amp;nbsp;&amp;nbsp;Romualdas joined us after a while, and he and I got some late lunch.&amp;nbsp; Romualdas is Lithuanian and works closely with Microsoft in that corner of Europe.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This evening, Microsoft hosted various regional dinners.&amp;nbsp;&amp;nbsp; The EMEA dinner was well attended, and buzzing.&amp;nbsp;&amp;nbsp; After a couple of hours the EMEA BizTalk MVPs decided to gatecrash the Americas dinner, which meant walking past or through the APAC and Japan regional dinners.&amp;nbsp;&amp;nbsp; I am therefore in a position to authoritatively state that, of the four groups, it was the EMEAns who clearly were in the lead in terms of party spirit, despite being uniformly jet-lagged.&amp;nbsp; The other regions have some catching up to do.&amp;nbsp;&amp;nbsp; By about 11:00 pm, though, we had all had enough for one day.&amp;nbsp;&amp;nbsp; Tomorrow kicks off with breakfast and a keynote from Bill Gates.&amp;nbsp;&amp;nbsp; For now, it’s time to stop the name-dropping and get some sleep.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=272" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry><entry><title>Rules engines and dependancy injection - a response to Nick Malik </title><link rel="alternate" type="text/html" href="http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/09/271.aspx" /><id>http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/archive/2007/03/09/271.aspx</id><published>2007-03-09T23:52:00Z</published><updated>2007-03-09T23:52:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;Nick Malik published a thought-provoking article on rules engines recently.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;You can read it at &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/nickmalik/archive/2007/03/06/perhaps-it-is-time-to-declare-victory-in-the-battle-of-rules-engines-vs-dependency-injection.aspx"&gt;&lt;FONT face=Verdana size=2&gt;http://blogs.msdn.com/nickmalik/archive/2007/03/06/perhaps-it-is-time-to-declare-victory-in-the-battle-of-rules-engines-vs-dependency-injection.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;He adopts a fairly negative attitude to rules engines in general, suggesting various reasons why he considers that they are not often useful.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;His preferred route is to use dependency injection patterns, implementing rule logic in code components that are then loaded in some dynamic or configurable fashion into consuming applications.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Verdana size=2&gt;I believe Nick is quite wrong to contrast rules engines and dependency injection in this way.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;In reality, many modern rules engines provide the ideal mechanism for implementing and managing dependency injection patterns.&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;You can read my response at &lt;/FONT&gt;&lt;A title="view: Rules engines and dependancy injection - a response to Nick Malik" href="http://geekswithblogs.net/cyoung/articles/108411.aspx" target=_blank&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;http://geekswithblogs.net/cyoung/articles/108411.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blog.solidsoft.com/aggbug.aspx?PostID=271" width="1" height="1"&gt;</content><author><name>CharlesYoung</name><uri>http://blog.solidsoft.com/members/CharlesYoung.aspx</uri></author></entry></feed>