<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">edjez&amp;#39;s WebLog</title><subtitle type="html">A better today, one brick at a time - Edward Jezierski</subtitle><id>http://blogs.msdn.com/b/edjez/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/edjez/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2006-05-10T17:03:00Z</updated><entry><title>Something new, something different, and I am moving my blog - http://edjez.instedd.org</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2008/03/06/lastpost.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2008/03/06/lastpost.aspx</id><published>2008-03-07T03:50:00Z</published><updated>2008-03-07T03:50:00Z</updated><content type="html">&lt;P&gt;This is a strange post in many ways. First, I didn't post for a looong time at p&amp;amp;p. Second, I moved on and went to a group where it was too early to blog about what we were dong. And third, now I'm not even a Microsoft employee. &lt;/P&gt;
&lt;P&gt;My new blog address is&amp;nbsp;&amp;nbsp;&lt;A href="http://edjez.instedd.org/"&gt;http://edjez.instedd.org&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;I left &lt;A class="" href="http://www.microsoft.com/practices" mce_href="http://www.microsoft.com/practices"&gt;patterns &amp;amp; practices&lt;/A&gt;&amp;nbsp;in 2007. After having started its .NET efforts,&amp;nbsp;started and&amp;nbsp;grew the "bluebricks" program that allowed us to ship all the 'guidance' (what a fluffy word!) as source code you could take into production, which eventually evolved into the Application Blocks, EntLib, GAT/GAX, Software Factories, etc... Of course it went many iterations in the very able hands of the amazing people that are at, or&amp;nbsp;passed through, patterns &amp;amp; practices. The people that worked at p&amp;amp;p&amp;nbsp;and the&amp;nbsp;user communities with which we built close ties are the fondest memories of that time.&lt;/P&gt;
&lt;P&gt;When I left p&amp;amp;p I went to an internal group near Ray Ozzie, doing prototyping and putting together approaches for 'innovation' at Microsoft. You won't see much&amp;nbsp;about it yet but I hope they eventually get an external identity, because it was the coolest thing to hit Microsoft in my almost 9 years there. There's just random &lt;A class="" href="http://www.realinnovation.com/commentary/archive/microsoft_national_innovation_forum_part_iii_innovation_practices.html" mce_href="http://www.realinnovation.com/commentary/archive/microsoft_national_innovation_forum_part_iii_innovation_practices.html"&gt;tidbits&lt;/A&gt; leaked over the web, and I couldn't blog at all about what was going on, but even like that it was worth it.&amp;nbsp;It was a dynamic and energetic team led by people who know what they are doing but also crazy enough to break the molds that don't work. &lt;/P&gt;
&lt;P&gt;But there was something constantly tugging at my heartstrings and I left Microsoft on October 2007 to join a technology non-profit called &lt;A class="" href="http://www.instedd.org/" mce_href="http://www.instedd.org/"&gt;InSTEDD&lt;/A&gt;. We do advanced technologies for disaster response and global health. Using and doing Open Source. From SMS-based applications for data sharing&amp;nbsp;to visualization and data mining.&amp;nbsp;Although I had a great time at Microsoft, i am having a blast every day working with Google, Facebook, Linux, SalesForce.com, Sun, (...and Microsoft) taking technology as the means, not the end - and it is fulfilling to be working directly with communities where technology holds so much potential. &lt;/P&gt;
&lt;P&gt;And you know what? It's challenging all my assumptions of architecture, design, and the economics of software development and use.&amp;nbsp;In a way, I feel like I've jumped some years into the future, and now I am living every day what I felt a glimpse of some years ago (see my 2006&amp;nbsp;blog post - &lt;A class="" href="http://blogs.msdn.com/edjez/archive/2006/08/26/728758.aspx" mce_href="http://blogs.msdn.com/edjez/archive/2006/08/26/728758.aspx"&gt;Forerunners of tomorrow's enterprise architectures&lt;/A&gt; ). There's a lot of patterns to be mined here. I hope I do a good job of communicating them.&lt;/P&gt;
&lt;P&gt;InSTEDD is&amp;nbsp;inherently cross-platform, but for some fluke reason we have a lot of .NET stuff going on right now, so you might want to check it out (&lt;A href="http://www.instedd.org/"&gt;http://www.instedd.org&lt;/A&gt;). Of course, we'll make the right chunks&amp;nbsp;run&amp;nbsp;on Mono.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;My new blog&lt;/STRONG&gt;&amp;nbsp;: &lt;A href="http://edjez.instedd.org/"&gt;http://edjez.instedd.org&lt;/A&gt;. This is my last post here. &lt;/P&gt;
&lt;P&gt;My new 'customers' live very different lives, but I think there is something to be learnt from every one. To Microsoft and patterns &amp;amp; practices chaps - thanks. Please forward folks to my new blog if you think there's value.&lt;/P&gt;
&lt;P&gt;To all customers I've ever worked with - I hope&amp;nbsp;what I've done has&amp;nbsp;been of good use - and it's been a privilege working with you. And if you have a Corporate Social Responsibility angle or have an aching need to donate to what probably is the only humanitarian NGO doing TDD on the planet, you know where to find me.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8084738" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author><category term="goodbye" scheme="http://blogs.msdn.com/b/edjez/archive/tags/goodbye/" /><category term="p&amp;amp;p" scheme="http://blogs.msdn.com/b/edjez/archive/tags/p_2600_amp_3B00_p/" /><category term="instedd" scheme="http://blogs.msdn.com/b/edjez/archive/tags/instedd/" /><category term="announcement" scheme="http://blogs.msdn.com/b/edjez/archive/tags/announcement/" /><category term="nonprofit" scheme="http://blogs.msdn.com/b/edjez/archive/tags/nonprofit/" /></entry><entry><title>Policy Injection App Block - Behind the Scenes</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspx</id><published>2007-02-23T20:53:00Z</published><updated>2007-02-23T20:53:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Georgia size=3&gt;Tom and I are making a set of simultaneous posts about a recent addition to the EntLib 3.0 family of Application Blocks - the Policy Injection Application Block (PIAB). His post is an introduction and high-level description, but in this one I wanted to get a little bit behind the scenes and expose the 'why' behind its existence and design.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;This post will make little sense as a first&amp;nbsp;introduction, so &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;1. Go read&lt;A class="" href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx" target=_blank mce_href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx"&gt; Tom's post&lt;/A&gt; for a quick overview&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;2. Read this post for a behind-the-scenes look at this new block&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;Our work is still a Community Technology Preview (CTP) and we are looking for feedback! So please don't be shy.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Georgia size=3&gt;What's the goal?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;At patterns &amp;amp; practices we realize that a huge part of helping make enterprise applications easier to build is having good separation of concerns (SoC). Separation of concerns is about allowing the right people work in the right areas at the right time. This also allows different parts of your systems evolve at different paces. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;In other words, a system that has bad separation of concerns makes it hard for people with same or different responsibilities to work in parallel, makes it hard to maintain a body of code without affecting other pieces of code, and forces decisions to be made at times that may not be the best for the team building the solution. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;There are many ways to help separate concerns - via tools, platforms, methodologies, programming languages, etc. Our observation is that when the platform supports some level of separation of concerns, it is simpler for the tools and methodologies to follow suit.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;Essentially the PIAB allows you to specify code that will run before and after members of your components in your application, as specified in a model, with no real code change requirements in your apps. It implements the common Composition Filters pattern.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;The scenarios where this can help range from common ones - such as exception shielding, adding&amp;nbsp;perfmon counters around method calls and other types of instrumentation, security checks - to quite interesting ones - versioning, multiple dispatch, parameter validation,&amp;nbsp;interception for test stub assertions,&amp;nbsp;and so on. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;&lt;STRONG&gt;This sounds familiar...&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;People familiar with Aspect Oriented Programming (AOP), Aspect Oriented Software Development (AOSD) and Composition Filters (CF)&amp;nbsp;should be familiar with this concept, and should resonate with many of the concepts in the PIAB. Over the years I have been personally involved in many discussions about SoC within Microsoft, including an AOSD summit we held last year. For many years I have been collecting a list of challenges customers solve with these approaches, and I can tell you it goes beyond 'instrumentation' which tends to be the first use people imagine.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;I also hear many people express that this approach only applies to, and should maybe be constrained to, 'hard' boundaries in the application, such as service boundaries. The issue here is, these boundaries are quite subjective - they could be layers in an application that are not physically distributed, or they could defined by runtime usage -e.g. within a WorkItem or Module in CAB. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;For example, &lt;SPAN lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: en; mso-fareast-language: en-us; mso-bidi-language: ar-sa"&gt;&lt;FONT color=#000000&gt;WCF has Behaviors for adding functionality at service boundaries, and p&amp;amp;p has been providing blocks and examples on how to use these, if they fulfill your need. With the approach of the PIAB you can apply policies at boundaries that&amp;nbsp;make sense in your design,&amp;nbsp;or apply policies regardless of whether they fall on a conceptual 'boundary' or not.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;So I want this to be an in-depth tour of the PIAB exposing some key design decisions, and what drove them. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;&lt;STRONG&gt;What's the overall design?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;The design of the PIAB can be described quite succinctly. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;Imagine we have a target object with a member that we want to add some behaviors/policies to. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;We use an &lt;U&gt;interception mechanism&lt;/U&gt; to get in the way of calls going to that member, collect a list of policies that apply using a &lt;U&gt;matching&amp;nbsp;rules&lt;/U&gt;&amp;nbsp;mechanism, run the chain of &lt;U&gt;handlers&lt;/U&gt; specified by those policies in a &lt;U&gt;chain of responsibility&lt;/U&gt; and at the other end dispatch the call to the target. Once the target is done - successfully or with exceptions - the stack unwinds, returning through each handler and finally back to the caller. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;A policy is a set of handlers in a specific order, and a set of matching rules that specify to what targets it should apply.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;Let's drill down into the specifics.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Georgia size=3&gt;What is the interception mechanism and why?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;First of all let me tell you that I am all for having better transparent interception in .NET as a platform. As the CLR and our languages continue to evolve, I expect this to become easier. However as of now the situation is pretty much a pick your poison scenario. Each option&amp;nbsp;forces nontrivial&amp;nbsp;tradeoffs. So here is one of our design choices: &lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=3&gt;&lt;FONT face=Georgia&gt;&lt;FONT size=4&gt;&lt;EM&gt;All the infrastructure to gather and run policies is independent of the interception choice. We just provide a default.&lt;/EM&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;That is, while we chose a default, you can use other interception/'weaving' mechanisms and re-use the rest of the design. Or we might ship others after the fact, if there is demand. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;We chose remoting proxies as our default, and you will see that in the CTP.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;Choosing a default was a hard thing. Here are some of the alternatives we evaluated. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;&lt;U&gt;Remoting proxies&lt;/U&gt; : Using Real/TransparentProxy&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Requires construction with a special factory &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Requires class to derive from MBRO, or to have an explicit interface.&lt;/FONT&gt;&amp;nbsp; 
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Proxy is treated as the real type by the type system (.NET special cases type identity checks around these objects)&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;&lt;U&gt;Context Bound Objects&lt;/U&gt; : Using ContextBoundObject and attributes&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Allows interception of ‘new’ &lt;/FONT&gt;
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Not recommended for customer code - therefore p&amp;amp;p won't ship it as part of guidance!&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;&lt;U&gt;Assembly rewriting&lt;/U&gt; : Taking the IL of your assembly and injecting more IL into your classes&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Eliminates the need for proxy classes&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Completely compatible with the type system and ‘new’&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Can’t be used for external strong-named assemblies without delay-signing (pros and cons)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=3&gt;Not supportable by Microsoft Product Support (PSS) as of today--&amp;gt; ouch&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;FONT size=3&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;U&gt;Generating derived classes&lt;/U&gt; : Taking your classes and generating wrapping classes that derive from them&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia&gt;Requires construction with a special factory&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Only works for virtual methods on non-sealed classes&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Could result in type system issues &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;U&gt;Generating inline interception code&lt;/U&gt; : Taking your classes and adding C#/VB code 'around' method bodies&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia&gt;Requires code to be written in a special way&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Interception code is explicit, rather than “magic” (which has pros and cons)&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Requires source code for intercepted objects&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;U&gt;Other more obscure mechanisms we discarded&lt;/U&gt; : Things that work but we wouldn't like to ship and you wouldn't like to maintain&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia&gt;Using CLR profiler APIs&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Using CLR JIT Debugger callbacks for runtime IL rewriting&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;Of course we aren't the first ones to go through these decisions. But being p&amp;amp;p we have to be careful and explicit about our choices as they are Microsoft's recommendation on how to tackle the problem for enterprise production environments, and we get a very broad usage. This doesn't mean other options are wrong or disrecommended,&amp;nbsp;just that our tradeoffs may be driven by different forces. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;The approach requires the use&amp;nbsp;of a factory instead of just &lt;EM&gt;new&lt;/EM&gt; for objects that have policy, which can be frustrating. If you are using our Software Factories or&amp;nbsp;specifically&amp;nbsp;Composite UI (CAB), Composite Web UI&amp;nbsp;(CWAB)&amp;nbsp;or a future Web Service Software Factory v3 preview, you are probably already using Object Builder under the hood for dependency injection, and we will provide an Object Builder strategy to make the addition of this PIAB functionality transparent to the rest of the app.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;We will be running perf tests against our Reference Implementations and other real-world apps and getting impact numbers, to share performance data with you. Needless to say, using Hello World as a test scenario with this interception choice yields predictably terrible perf results. Then again&amp;nbsp;, Hello World doesn't need separation of concerns; and the PIAB will not wrap classes if they don't have policy that should apply to them.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;Again, you could take any other mechanism of your choice (e.g. assembly rewriting) and use the rest of the infrastructure as is. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;Let's move on to the next important design element&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Georgia&gt;How do you specify which policies apply to what targets?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;Which policies apply to which target members is informed&amp;nbsp;by a set of 'matching rules',&amp;nbsp;which can be set up at runtime programmatically, or from XML config (with tool support), or from attributes (not in this CTP).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;A matching rule is essentially a predicate that answers the question - does a policy apply to this member? A namespace matching rule allows you to say something like 'apply this policy if: the namespace of the class containing this method starts with MyCompany.MyApp.BusinessOperations'. You can add matching rules which get ANDed.&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Georgia&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;Why these matching rules and not just an xml schema that says &lt;EM&gt;these&lt;/EM&gt; members of &lt;EM&gt;these&lt;/EM&gt;&amp;nbsp;types, or something like it? &lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Georgia size=4&gt;&lt;EM&gt;The matching rules allow you to define what applies where in an&amp;nbsp;expressive way, for simple or complex criteria - avoiding a one-size-fits-all model that is&amp;nbsp;hard to learn&amp;nbsp;for simplest cases a hard to scale to complex cases.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;One of our challenges was getting a level of expressiveness in "what applies where" for cases that were application architecture specific - e.g. "All classes that are Services in CAB" or specific to usage patterns - e.g. "all classes that are presenters in view-presenter pairs". We collected a list of common criteria and two things became clear: One, our xml schema for matching rules was growing beyond what we wanted and two, by looking down our product roadmap, we were confident we didn't have all the types of criteria we wanted. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;So, by having this matching rules design, each matching rule can have its own schema that is expressive and makes sense for the context. We are providing matching rules implementations for common criteria out-of-the-box, such as matching namespaces, base classes, method signatures&amp;nbsp;etc.&amp;nbsp;You can create matching rules that use your own XML schemas, custom languages&amp;nbsp;(like those used for pointcuts by some AOP frameworks)&amp;nbsp;and DSLs if you fancy. All you need to do is implement &lt;/FONT&gt;&lt;FONT face="Trebuchet MS"&gt;IMatchingRule.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;We also have a Tag attribute and matching rule that allows you to define your own semantics of members. For example, "Apply Audit policy to every method marked as&amp;nbsp; 'Critical'" is as simple as defining the Audit policy with a logging handler, and using the Tag("Critical") or your own 'Critical' attribute type&amp;nbsp;on the appropriate methods:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;[&lt;FONT color=#008080&gt;Tag&lt;/FONT&gt;&lt;FONT color=#800000&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;"Critical"&lt;/FONT&gt;)]&lt;BR&gt;&lt;FONT color=#0000ff&gt;public void&lt;/FONT&gt; DoSomethingImportant()&lt;BR&gt;{ }&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;I am not personally a fan of matching based on string comparisons of class and method names, but there is a matching rule for that too.&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;STRONG&gt;What are policies, handlers and what can they do?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;A policy is a set of handlers in a specific order, and a set of matching rules that specify to what targets it should apply.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;For example you can define an&amp;nbsp; "Exception Shielding" policy, with an Exception Handler and a Validation Handler. You can then define matching rules that say that "Exception Shielding" applies to "all methods of classes in the data layer"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;One of the challenges in these Composition Filters (CF) or Chain of Responsibility (CoR) style of&amp;nbsp;designs that can have multiple handlers, is how do you know which is the effective order of all the handlers around an object? E.g. obviously, returning cached responses before authorization is not the same as authorizing before checking the cache....&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;We looked at how customers dealt with this, and in many cases this ended up not being a real problem as they were willing to explicitly, manually, set the order of the handlers to make sense for the outcome. This means there is no automagic sequencing/sorting of handlers, and you define their sequence inside the policy definition in the config tool. Also, policies are ordered themselves, so if more than one policy applies to a target then you can predict the order of handlers. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;A handler is the actual object that sits in the call chain before the method gets invoked. These are some interesting characteristics about handlers:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia&gt;Handlers are executed as a chain of responsibility. This means that handlers will be on the stack by the time the target gets called. This also means handlers can decide if and when to call the next handler. For example, a validation handler may decide to return an exception without continuing the call chain. Handlers also can do work on the way in to the target, or on the way out, or both.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Handlers get access to the call member info, parameter infos, actual argument values, and out/return values. This means you can inspect, log and even change incoming/outgoing arguments as needed&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Handlers can get access to exceptions, to log them, etc as appropriate.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Handlers have access to the target object, so they can check its state, or even do operations on it as needed.&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia&gt;Handlers can keep/share information in a loosely coupled way via a dictionary which is associated with the call. This is important as there is only one instance of configured handler per policy per appdomain. We set up the chain of responsibility behavior using delegates, so instead of keeping a pointer to the 'next' handler, handlers get a delegate&amp;nbsp;reference to the Execute of the next handler, allowing us to reuse the handlers in more scenarios.The shared dictionary allows you to keep track of data not part of the call - e.g. the start time of the call; to compute total execution time on the way back.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;As you see, we had a design principle, that&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT face=Georgia size=4&gt;Handlers are powerful and can inspect and manipulate the call deeply. We won't&amp;nbsp;try to protect handler authors from making mistakes by removing usefulness&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;STRONG&gt;What can I do with this out of the box?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;We are planning to&amp;nbsp;include some handlers to add utility out of the box: Validation, Logging, Exception Handling, Performance Counters, Authorization, and Caching.&amp;nbsp; &lt;/FONT&gt;&lt;FONT face=Georgia&gt;We also plan to have some common matching rules.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;STRONG&gt;Common Questions&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;EM&gt;This is all very scary. I can't know what will happen by looking at the code!&lt;/EM&gt; YES - That is the whole point of separating the concerns!. If you want to have hints about what will happen in your code, you can use the tagging attributes to remind you that certain things will happen - but how they happen is up to policy.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;EM&gt;How will this impact my debugging?&lt;/EM&gt; Hopefully the existence of policies can assist your support and troubleshooting by providing information to help you isolate problems. Once you are debugging the code, as of now&amp;nbsp;you will see extra goop. We haven't looked into providing VS tools to help abstract this out, but it is possible to build compelling tools that make you aware of the extra handlers without forcing you to step around foreign code.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;EM&gt;Do I have to use factory methods to create my objects?&lt;/EM&gt; Yes, with the interception mechanism we provide. You can avoid this requirement if you do the extra work of implementing another mechanism. If you do, please share back into the community!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;EM&gt;Why don't you call this AOP?&lt;/EM&gt; If you know about AOP, you can see where it is similar and where it differs from AOP solutions out there. The handlers fulfill the role of 'advice', the matching rules replace 'pointcut languages', and&amp;nbsp;the 'weaving' is black-box based on&amp;nbsp;interception. However the reality is most of our customers have not heard of AOP or AOSD. Please put yourself in their shoes for a second. We wanted a name that was reflective of the use and benefit the block brings, rather than using an unfamiliar term that only the exceptions understand. We also wanted to have no implicit expectations on the design that may be inherited from AO solutions. However, if you think this is a dumb move, please holler on our CodePlex community.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;EM&gt;OK, If I use this now what is the road moving forward, how will other pieces of the .NET&amp;nbsp;platform/language support this scenario?&lt;/EM&gt; This is where I remind you that p&amp;amp;p is not the CLR team, and there is nothing specific announced to date targeting this scenario as part of the .NET platform.&amp;nbsp;One could imagine using C# partial methods for some cases where&amp;nbsp;you need to call out to&amp;nbsp;PIAB handlers in-line, and maybe&amp;nbsp;simplify code-generation of wrapper classes. Dynamic languages provide some runtime manipulation of members, e.g. replacing a member implementation with a wrapping member implementation, or augmenting the implementation with the code that today resides in the handlers. All these just would be enabling technologies to simplify creation of PIAB like infrastructure pieces.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;EM&gt;I am using an AOP solution today. Do I care about this? &lt;/EM&gt;Great! You might find in the provided handlers some useful sample code that can help you plug EntLib blocks into your own infrastructure. Keep using what you have if you are happy with it! Also, if you have built infrastructure pieces&amp;nbsp;yourself for similar purposes, check our EULA and if all is well feel free to reuse pieces, or feel free to post handlers you may have built adapted for the PIAB,&amp;nbsp;or other code, in Codeplex.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;STRONG&gt;Wrapping up...&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;We hope you will find this to be a useful addition to your toolkit. Sorry for not announcing this earlier, but we did start development&amp;nbsp;3 weeks ago and we weren't sure this would make it in until this week.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;Thanks a lot to Christa Schwanninger (&lt;A href="http://w4.siemens.de/ct/en/technologies/se/index.html" target=_blank mce_href="http://w4.siemens.de/ct/en/technologies/se/index.html"&gt;Siemens Corporate Technology&lt;/A&gt;) for her feedback and refinements to this blog post.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Garamond size=4&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1748384" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author><category term="Enterprise Library" scheme="http://blogs.msdn.com/b/edjez/archive/tags/Enterprise+Library/" /><category term="Separation Of Concerns" scheme="http://blogs.msdn.com/b/edjez/archive/tags/Separation+Of+Concerns/" /></entry><entry><title>Software Factories: report from the trenches, and thoughts from p&amp;p</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2007/02/01/software-factories-report-from-the-trenches-and-thoughts-from-p-p.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2007/02/01/software-factories-report-from-the-trenches-and-thoughts-from-p-p.aspx</id><published>2007-02-02T06:56:00Z</published><updated>2007-02-02T06:56:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;Daniel wrote a nice little post about status of building Software Factories today - using DSLs to express intent around common models and Guidance Automation Extensions (GAX) to automate common use cases. &lt;/FONT&gt;&lt;A href="http://clariusconsulting.net/blogs/kzu/archive/2007/01/08/BuildingSoftwareFactoriesToday.aspx" mce_href="http://clariusconsulting.net/blogs/kzu/archive/2007/01/08/BuildingSoftwareFactoriesToday.aspx"&gt;&lt;FONT size=3&gt;See his perspective here&lt;/FONT&gt;&lt;/A&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;As the team who has shipped most of the Software Factories from Microsoft, patterns &amp;amp; practices continuously tries to help you build better applications using less effort by applying these technologies. Once the rubber meets the road,&amp;nbsp;we all&amp;nbsp;learn, and we build infrastructure to support better experiences today and at the same time provide feedback to the VS.NET folks building next versions, so they can add features that will make p&amp;amp;p's and your lives easier down the road. Entlib Config and&amp;nbsp;GAT/GAX was an example of such infrastructure.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;But where is it going?&amp;nbsp; We think there are many opportunities in the following areas:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;1. Integration of multiple models - obviously you can express parts of your application with models, but the moment you start adding different domains - especially crosscutting ones, think authorization; or models at different levels of abstraction- you obvioulsy require to have dependencies, relationships and interoperability/integration of models. A good infrastructure for model integration would allow you to yuxtapose concepts around workflow, and manageability events, for example, without having any unecessary dependencies that wouldn't allow you to use that same manageability model around a totally different concept like web service calls or business data state transitions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;2. Bringing in the team to the factory&amp;nbsp;- Right now the factory experience is a lonely one - you build a thing, move on. Artifacts like models and code survive, but beyond this sharing there is no &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;coordination&lt;/SPAN&gt;&lt;/EM&gt; to the collaboration. Just like GAX can be used to automate 'atomic' use cases that are done by one dude/dudette sitting at Visual Studio, we think that something akin to small team workflows can be used to express outcome-centric activities that coordinate many smaller actions. These are not end-to-end processes, rather small pieces of activities that can't be done all at once - like setting up an environment for mobile app testing, or building/reviewing/checklisting against a threats &amp;amp; countermeasures model.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;3. Specializing aspects of the software engineering process - we have ways of expressing with VSTS the process (workitem templates, content, etc) that you use for building &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;stuff&lt;/SPAN&gt;&lt;/EM&gt;. What happened if the process could be specialized in the right areas to help you build not just &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;stuff &lt;/SPAN&gt;&lt;/EM&gt;but a special shape of &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;stuff&lt;/SPAN&gt;&lt;/EM&gt;? Are there templates in requirements, bugs, development tasks etc that would be more valuable to you if they were specially built to&amp;nbsp;help teams build (for example)&amp;nbsp;web services? &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;Of course a key concern I hear is - &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;wow, with all this stuff won't things just become heavier and more context-dependent to the point I won't be able to use anything just because I'm not living in your little world? &lt;/SPAN&gt;&lt;/EM&gt;- and I understand it. My hope is that we can work on our packaging (which isn't precisely a beauty right now!) so that you can take the parts that you need, yet at the same time have&amp;nbsp;a&amp;nbsp;great&amp;nbsp;experience with the whole. And all of&amp;nbsp;what I blogged about&amp;nbsp;is just the work&amp;nbsp;needed to give your team a &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;guided&lt;/SPAN&gt;&lt;/EM&gt;&amp;nbsp;&lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-family: Arial"&gt;experience&lt;/SPAN&gt;&lt;/EM&gt; when building solutions. Every team&amp;nbsp;in p&amp;amp;p&amp;nbsp;building a factory has to make a balance between&amp;nbsp;distilling the proven-practice guidance itself, and expressing that guidance in&amp;nbsp;runtime, tooling and content. I hope that, as we continue to roll out more of these, you out there in the community will keep us honest and help us make the right tradeoffs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Georgia','serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1579688" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author><category term="MSF" scheme="http://blogs.msdn.com/b/edjez/archive/tags/MSF/" /><category term="Software Factories" scheme="http://blogs.msdn.com/b/edjez/archive/tags/Software+Factories/" /></entry><entry><title>Web Client Software Factory Ships!!!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2007/01/12/web-client-software-factory-ships.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2007/01/12/web-client-software-factory-ships.aspx</id><published>2007-01-13T03:20:00Z</published><updated>2007-01-13T03:20:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;We just released the Web Client Software Factory to Codeplex. &lt;/FONT&gt;&lt;A href="http://www.codeplex.com/websf" mce_href="http://www.codeplex.com/websf"&gt;&lt;FONT size=3&gt;Go get it&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;I thoroughly enjoyed this project. The team rocked, we had to deal with new technologies and we did a large set of deliverables targeting web apps specifically, which I felt we were slightly behind on compared to other technical areas.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;And we obsoleted UIP (finally) with the new PageFlow application block that uses Worflow Foundation by default to let you design flow-rich use cases. There's guidance for UIP users to simplify migration; including a re-do of the old UIP quickstart using the new page flow block (Michael Stuart- are you listening?)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;And we have a first cut at composite web apps in the CWAB (Composite Web Application Block), putting in a container model (courtesy of Object Builder) that allows you to do dependency injection to acheive patterns like MVP and MVC, as well as simplify dealing with state and so on. It starts covering the scenarios of composing modules that make up a site - not composing across&amp;nbsp;sites - and allows us to start building a foundation for future scenarios you require more guidance on.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;And we have a full reference app that shows all this together.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;And documentation explaining the essential design concepts and activities that come together building an app like it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;And visual studio extensions that simplify the job of creating apps imitating the design of the RI using all of the above.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;FONT size=3&gt;There you go. Enjoy! Now we will&amp;nbsp;listen to your feedback and observe usage patterns to see what opportunities we should tackle in the next release... which may come out sooner than you think. There's areas where we would like to push the ball forward and areas where we may need to cover gaps. Let us know.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;A href="http://www.codeplex.com/websf"&gt;&lt;FONT size=3&gt;http://www.codeplex.com/websf&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;Please note we shipped it because it was ready - not because we ran out of stickies for iteration planning... :)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Georgia','serif'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Arial"&gt;&lt;A class="" href="http://www.flickr.com/photos/edjez/343864404/in/set-72157594456345743/" target=_blank mce_href="http://www.flickr.com/photos/edjez/343864404/in/set-72157594456345743/"&gt;&lt;IMG style="WIDTH: 500px; HEIGHT: 332px" height=332 src="http://farm1.static.flickr.com/139/343864404_daf0598dd2.jpg?v=0" width=500 mce_src="http://farm1.static.flickr.com/139/343864404_daf0598dd2.jpg?v=0"&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1462224" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author><category term="&amp;quot;Web Client Software Factory&amp;quot; &amp;quot;Ship It&amp;quot; UIP PageFlow &amp;quot;Workflow Foundation&amp;quot; &amp;quot;Object Builder&amp;quot; &amp;quot;Composite Web&amp;quot;" scheme="http://blogs.msdn.com/b/edjez/archive/tags/_2600_quot_3B00_Web+Client+Software+Factory_2600_quot_3B00_+_2600_quot_3B00_Ship+It_2600_quot_3B00_+UIP+PageFlow+_2600_quot_3B00_Workflow+Foundation_2600_quot_3B00_+_2600_quot_3B00_Object+Builder_2600_quot_3B00_+_2600_quot_3B00_Composite+Web_2600_quot_3B00_/" /></entry><entry><title>I'm it!!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2007/01/04/i-m-it.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2007/01/04/i-m-it.aspx</id><published>2007-01-05T09:01:00Z</published><updated>2007-01-05T09:01:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;OK - now I'm it - in this fascinating game of &lt;A class="" title="You are it!" href="http://pulverblog.pulver.com/archives/006087.html" target=_blank mce_href="http://pulverblog.pulver.com/archives/006087.html"&gt;blog-tag&lt;/A&gt; via &lt;A class="" title=TOM href="http://blogs.msdn.com/tomholl/archive/2007/01/04/i-m-it.aspx" target=_blank mce_href="http://blogs.msdn.com/tomholl/archive/2007/01/04/i-m-it.aspx"&gt;Tom Hollander&lt;/A&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;I like this game - &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;You need to reveal five things about me that most people don’t know, and tag 5 more folks. I'm going to add my own spin and add 5 pictures.&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;Here we go:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I am from Argentina, with a Polish family and went to a Scottish school. I played the bagpipes. In a kilt. It is there that..&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...I was able to see my first programs run about a year after I wrote them, once I had access to a computer - I had written them on paper. But now I use computers (sometimes) and&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... I am a private pilot, and love flying around the US pacific northwest.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...but a lousy snowboarder, and broke my spine in the midst of entlib v1. I somehow used the infinitesimal chance I had of recovering well, so I’m fine. When I think things are bad, I wiggle my toes and the smile returns.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I believe in spending time making this a better place and that individuals can change the world, which has led me to multiple engagements with environmental, education and humanitarian scenarios. That is a set of tough problems. I spend time on that when I can. For example, recently&amp;nbsp;at &lt;A class="" title="Strong Angel 3" href="http://strongangel3.org/" target=_blank mce_href="http://strongangel3.org/"&gt;Strong Angel III&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=3&gt;Here are my 5 pictures - &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;A class="" title="Teaching how to use a mouse with a stone" href="http://www.flickr.com/photos/edjez/269557481/in/set-72157594328124794/" target=_blank mce_href="http://www.flickr.com/photos/edjez/269557481/in/set-72157594328124794/"&gt;&lt;IMG title=aaa style="WIDTH: 277px; HEIGHT: 186px" height=332 alt=aaa src="http://farm1.static.flickr.com/115/269557481_da64512c61.jpg?v=0" width=500 mce_src="http://farm1.static.flickr.com/115/269557481_da64512c61.jpg?v=0"&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;A class="" title="Telemedicine Truck" href="http://www.flickr.com/photos/edjez/225719377/in/set-72157594328732851/" target=_blank mce_href="http://www.flickr.com/photos/edjez/225719377/in/set-72157594328732851/"&gt;&lt;IMG title="Telemedicine truck" style="WIDTH: 147px; HEIGHT: 186px" height=500 alt="Telemedicine truck" src="http://farm1.static.flickr.com/83/225719377_30f42ee34c.jpg?v=0" width=375 mce_src="http://farm1.static.flickr.com/83/225719377_30f42ee34c.jpg?v=0"&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;A class="" title="Flying - in open cocpkit this time" href="http://www.flickr.com/photos/edjez/275489870/in/set-72157594226523217/" target=_blank mce_href="http://www.flickr.com/photos/edjez/275489870/in/set-72157594226523217/"&gt;&lt;IMG title=Flying style="WIDTH: 255px; HEIGHT: 186px" height=375 alt=Flying src="http://farm1.static.flickr.com/106/275489870_fa9ee513d2.jpg?v=0" width=500 mce_src="http://farm1.static.flickr.com/106/275489870_fa9ee513d2.jpg?v=0"&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;A class="" title=FooBar href="http://www.flickr.com/photos/edjez/343865465/" target=_blank mce_href="http://www.flickr.com/photos/edjez/343865465/"&gt;&lt;IMG title=FooBar! style="WIDTH: 289px; HEIGHT: 188px" height=375 alt=FooBar! src="http://farm1.static.flickr.com/154/343865465_1d61dee960.jpg?v=0" width=500 mce_src="http://farm1.static.flickr.com/154/343865465_1d61dee960.jpg?v=0"&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;A class="" title="Lake Bill" href="http://www.flickr.com/photos/edjez/343864735/" target=_blank mce_href="http://www.flickr.com/photos/edjez/343864735/"&gt;&lt;IMG title=MSFT style="WIDTH: 291px; HEIGHT: 187px" height=332 alt=MSFT src="http://farm1.static.flickr.com/154/343864735_48e8df1fb5.jpg?v=0" width=500 mce_src="http://farm1.static.flickr.com/154/343864735_48e8df1fb5.jpg?v=0"&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Georgia&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Georgia&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;So who is "it"&amp;nbsp;now?&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;&lt;A class="" title=John href="http://www.socha.com/blogs/john/" target=_blank mce_href="http://www.socha.com/blogs/john/"&gt;John Socha-Leialoha&lt;/A&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT face=Georgia size=3&gt;&lt;A class="" title=JD href="http://blogs.msdn.com/jmeier/default.aspx" target=_blank mce_href="http://blogs.msdn.com/jmeier/default.aspx"&gt;J.D. Meier&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Georgia size=3&gt;&lt;A class="" title=Eugenio href="http://blogs.msdn.com/eugeniop/" target=_blank mce_href="http://blogs.msdn.com/eugeniop/"&gt;Eugenio Pace&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Georgia size=3&gt;&lt;A class="" title=Chris href="http://www.simplegeek.com/" target=_blank mce_href="http://www.simplegeek.com/"&gt;Chris Anderson&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;FONT face=Georgia size=3&gt;&lt;A class="" title=kzu href="http://clariusconsulting.net/blogs/kzu/" target=_blank mce_href="http://clariusconsulting.net/blogs/kzu/"&gt;Daniel "Kzu" Cazzulino&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1" mce_keep="true"&gt;&lt;FONT face=Georgia&gt;You don't need to post pictures...that's just me&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face=Georgia&gt;Have fun! Enjoy the Entlib 3 CTP and Upcoming Web Client Software Factory - with an full-new " Page flow"&amp;nbsp; application block that replaces UIP for web apps&amp;nbsp;and uses WF as the default workflow engine.&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1415194" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author><category term="blogtag 5facts" scheme="http://blogs.msdn.com/b/edjez/archive/tags/blogtag+5facts/" /></entry><entry><title>Web Client Software Factory on CodePlex!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2006/09/15/756795.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2006/09/15/756795.aspx</id><published>2006-09-16T03:57:00Z</published><updated>2006-09-16T03:57:00Z</updated><content type="html">&lt;P&gt;We have just released oour first community drop of the Web Client Software Factory. &lt;A href="http://www.msdn.microsoft.com/webclientfactory"&gt;www.msdn.microsoft.com/webclientfactory&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;As we continue working on the project, we expect to provide:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Give best practices for web app development on .NET 2.0&lt;/LI&gt;
&lt;LI&gt;Guidance around pageflow and eventually migration assistance from UIP to the new guidance&lt;/LI&gt;
&lt;LI&gt;Some guidance on AJAX&lt;/LI&gt;
&lt;LI&gt;Integration of the Security &amp;amp; Perf &amp;amp; Scale best practices&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It is also one of the first projects we'll try to keep on CodePlex instead of GotDotNet, so please provide feedback on the site experience as well.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=756795" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Distributed, mesh-based source code control with SSE?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2006/09/08/747077.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2006/09/08/747077.aspx</id><published>2006-09-09T02:55:00Z</published><updated>2006-09-09T02:55:00Z</updated><content type="html">We were discussing the &lt;A href="http://msdn.microsoft.com/xml/rss/sse/"&gt;Simple Sharing Extensions&lt;/A&gt; (SSE) usage at &lt;A href="http://www.strongangel3.net"&gt;Strong Angel 3&lt;/A&gt; in our team and &lt;A href="http://www.peterprovost.org/"&gt;Peter&lt;/A&gt; came up with an intriguing direction question: What if SSE was applied in source-code control? The mind reels...&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=747077" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>2 new CAB (Composite UI) resources</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2006/09/06/745385.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2006/09/06/745385.aspx</id><published>2006-09-06T23:52:00Z</published><updated>2006-09-06T23:52:00Z</updated><content type="html">&lt;P&gt;1. &lt;A href="http://www.cabpedia.com"&gt;www.cabpedia.com&lt;/A&gt;&amp;nbsp; - started by&amp;nbsp;John Socha-Leialoha.&amp;nbsp;John worked with us on the Mobile Client Software Factory and is currently doing some prototype work for a requirements gathering tool, and has set up this excellent community wiki so that folks can update and contribute content. The body of knowledge in there is already impressive!&lt;/P&gt;
&lt;P&gt;2. An overview of CAB for those using it in the smart client software factory.... &lt;SPAN class=292075423-01092006&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&lt;A title=http://msdn.microsoft.com/library/en-us/dnpag2/html/SCSFOverviewOfCompositeUIAppBlock.asp href="http://msdn.microsoft.com/library/en-us/dnpag2/html/SCSFOverviewOfCompositeUIAppBlock.asp"&gt;http://msdn.microsoft.com/library/en-us/dnpag2/html/SCSFOverviewOfCompositeUIAppBlock.asp&lt;/A&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=745385" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Forerunners of tomorrow's enterprise architectures</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2006/08/26/728758.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2006/08/26/728758.aspx</id><published>2006-08-27T05:28:00Z</published><updated>2006-08-27T05:28:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Georgia size=2&gt;Just returned from &lt;/FONT&gt;&lt;A href="http://www.strongangel3.net"&gt;&lt;FONT face=Georgia size=2&gt;Strong Angel III&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Georgia size=2&gt; - a week-long excercise and demonstration in the use of ICT (Information and Communication Technology) for humaitarian and first-response missions. I was there to learn many things, and one of the things I brought back are many requirements that systems must fulfill in order to work in&amp;nbsp;complex, emotionally vexing environments. I beleive that the solutions that work in these constrained and dynamic situations have inside certain elements that are indicative of the enterprise needs of tomorrow...so I try to pay attention.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;It ended being a mixture of&amp;nbsp; 'jazz and lego blocks' as Nigel Snoad would say, with collaboration with the Microsoft team around SSE (&lt;A href="http://msdn.microsoft.com/xml/rss/sse/"&gt;Simple Sharing Extensions&lt;/A&gt;), building a model-driven dynamic forms generator for mobile apps for data collection built around an SSE distribution model, and writing glue code&amp;nbsp;for demonstrations of&amp;nbsp;interoperability with Google Earth and Sahana, an open-source web site.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;Here are my key takeways that are relevant to this blog's audience. My first one is a vent on the utter complexity our user have to deal with when using&amp;nbsp;most software being built today regardless of the platform it is built on.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;My observation is - The tools, languages etc. we&amp;nbsp;use&amp;nbsp;to build enterprise applications are getting better - however we are using them to build quite disempowering systems. Essentially, we are getting better at building the same old stuff. I believe a quantuum leap is needed in applicationas architecture if we want to build systems that empower the users.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;Here are some characteristics that I would expect from the next generation of applications:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;- User-driven UI customization,&amp;nbsp;integration and mashups. We took a small step with CAB and other composable architectures, but that accounts for a small percentage of what is needed. Imagine being able to take data flows, drive UIs out of them, tie them into worklows, on the same client app you use with no code. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;- Interoperability over the use of standard protocols and to the maximum extent possible standard data schemas over the wire. Across platforms.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;- Greater usability. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;- No need to predict the data flow topology (as long as you can govern it and secure it). i.e. the same app can be configured to work in client-server, 3-tier, peer to peer, and other modes. The decentralization of state management and data flow&amp;nbsp;could even be followed by a decentralization of&amp;nbsp;manageability, and security features.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;I expect to see some of the learnings incorporated into p&amp;amp;p deliverables over time. I'll see if where I can post my code about the forms and the SSE library so folks can use it. It is quite primitive but it is a start.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;If you want to read more about Strong Angel III you can see news articles all over the web. Here is one good for techies: &lt;A href="http://blogs.zdnet.com/BTL/?p=3545"&gt;http://blogs.zdnet.com/BTL/?p=3545&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=728758" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Mobile Client Software Factory debuts @ MEDC</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/edjez/archive/2006/05/10/595020.aspx" /><id>http://blogs.msdn.com/b/edjez/archive/2006/05/10/595020.aspx</id><published>2006-05-11T03:03:00Z</published><updated>2006-05-11T03:03:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Georgia size=2&gt;This week most of the Mobile Client Software Factory dev&amp;nbsp;team is at &lt;A href="http://www.medc2006.com/"&gt;MEDC&lt;/A&gt;, in Las Vegas, presenting the cool stuff we've built over the last few months. (You guys should bee proud!)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;It includes a loosely coupled collection of application blocks, some guidance packages, and documentation to help you build an end-to-end mobile application with guidance around some critical areas.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;The guidance we've put together so far -since around January?- includes:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;A Mobile version of CAB&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;A Connection Management app block to detect connection state, and a block to help you manage configuration for application endpoints for different networks&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;A mobile DAAB with a super-simple DB data access mapping helper&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;A Disconnected Service Agent Block + Guidance Package to help you build apps that work when disconnected and that roam networks; queuing requests; configuring web service proxies appropriately and all that&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;A SQL Server replication block that simplifies how you create and manage data replication to your device; if you choose to use this as a way of getting reference data into the app&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;An &lt;A href="http://clariusconsulting.net/blogs/kzu/archive/2006/05/09/OrientationAwareIntroduction.aspx"&gt;Orientation Aware control &lt;/A&gt;that allows you to design different layouts for different screen sizes and orientations and form factors (square, rectangular, etc) directly in the VS.NET designer&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;A Unit Test Runner that allows you to write tests for the full framework using VSTS tools but then runs them in the emulator without changing your test code&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Georgia size=2&gt;A Reference Implementation app that shows you a simple application using all these areas together illustrating good design patterns for your business logic&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;In the upcoming 2 months we plan to formalize the Reference Implementation design patterns into Guidance Packages; and depending on how well we do on velocity add a couple of more domains (self-updating mobile apps could be one such area, or Pin-based authentication and key storage). You can stay up to date by &lt;A href="http://www.gotdotnet.com/codegallery/codegallery.aspx?id=5bef2b5f-476a-488c-8d55-9d41666a36f3"&gt;getting weekly drops from our community&lt;/A&gt; (which include code, docs and presentations about the topic).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;We have a great team, and an awesome&amp;nbsp;Expert Advisors board including people from large enterprises, ISVs, MVPs, and &lt;A href="http://www.opennetcf.org/CategoryView.aspx?category=Home"&gt;OpenNetCF&lt;/A&gt;. We will disclose the names of the advisors, as we get their permission :)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;This has also been a great experiment for Microsoft in which a product team is building a Microsoft SKU in collaboration with p&amp;amp;p. (You can read about the precursor to this&amp;nbsp;&lt;A href="http://www.microsoft.com/presspass/press/2005/oct05/10-17MBSMobilePilotPR.mspx"&gt;here&lt;/A&gt;) The collaboration is&amp;nbsp;fun, as we learn how to integrate a p&amp;amp;p team doing XP on weekly iterations in the west coast of the US; with a Dynamics team doing monthly&amp;nbsp;SCRUMs in Denmark. It's involved some travelling to keep things together but we have been doing great by attending each others iteration planning, having a shared team blog, and capturing tidbits of info in a shared wiki. The Dynamics team is building a specific Composite UI&amp;nbsp;shell for Mobile apps, and a way to have model-driven orchestration of WorkItems as a way of allowing extensibility and customization of the apps they will build. Pretty darn cool!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;Please go and &lt;A href="http://www.gotdotnet.com/codegallery/codegallery.aspx?id=5bef2b5f-476a-488c-8d55-9d41666a36f3"&gt;join the community &lt;/A&gt;to see the p&amp;amp;p project; and let us know whether it will help you build your next mobile app!&lt;/FONT&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=595020" width="1" height="1"&gt;</content><author><name>MSDNArchive</name><uri>http://blogs.msdn.com/MSDNArchive/ProfileUrlRedirect.ashx</uri></author></entry></feed>