<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>edjez's WebLog</title><link>http://blogs.msdn.com/edjez/default.aspx</link><description>A better today, one brick at a time - Edward Jezierski</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Something new, something different, and I am moving my blog - http://edjez.instedd.org</title><link>http://blogs.msdn.com/edjez/archive/2008/03/06/LastPost.aspx</link><pubDate>Fri, 07 Mar 2008 03:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8084738</guid><dc:creator>edjez</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/edjez/comments/8084738.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=8084738</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8084738" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/goodbye/default.aspx">goodbye</category><category domain="http://blogs.msdn.com/edjez/archive/tags/p_2600_amp_3B00_p/default.aspx">p&amp;amp;p</category><category domain="http://blogs.msdn.com/edjez/archive/tags/instedd/default.aspx">instedd</category><category domain="http://blogs.msdn.com/edjez/archive/tags/announcement/default.aspx">announcement</category><category domain="http://blogs.msdn.com/edjez/archive/tags/nonprofit/default.aspx">nonprofit</category></item><item><title>Policy Injection App Block - Behind the Scenes</title><link>http://blogs.msdn.com/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspx</link><pubDate>Fri, 23 Feb 2007 20:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1748384</guid><dc:creator>edjez</dc:creator><slash:comments>38</slash:comments><comments>http://blogs.msdn.com/edjez/comments/1748384.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=1748384</wfw:commentRss><description>&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;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/Enterprise+Library/default.aspx">Enterprise Library</category><category domain="http://blogs.msdn.com/edjez/archive/tags/Separation+Of+Concerns/default.aspx">Separation Of Concerns</category></item><item><title>Software Factories: report from the trenches, and thoughts from p&amp;p</title><link>http://blogs.msdn.com/edjez/archive/2007/02/01/software-factories-report-from-the-trenches-and-thoughts-from-p-p.aspx</link><pubDate>Fri, 02 Feb 2007 06:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1579688</guid><dc:creator>edjez</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edjez/comments/1579688.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=1579688</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1579688" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/MSF/default.aspx">MSF</category><category domain="http://blogs.msdn.com/edjez/archive/tags/Software+Factories/default.aspx">Software Factories</category></item><item><title>Web Client Software Factory Ships!!!</title><link>http://blogs.msdn.com/edjez/archive/2007/01/12/web-client-software-factory-ships.aspx</link><pubDate>Sat, 13 Jan 2007 03:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1462224</guid><dc:creator>edjez</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edjez/comments/1462224.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=1462224</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1462224" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/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_/default.aspx">&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;</category></item><item><title>I'm it!!</title><link>http://blogs.msdn.com/edjez/archive/2007/01/04/i-m-it.aspx</link><pubDate>Fri, 05 Jan 2007 09:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1415194</guid><dc:creator>edjez</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/edjez/comments/1415194.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=1415194</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1415194" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/blogtag+5facts/default.aspx">blogtag 5facts</category></item><item><title>Web Client Software Factory on CodePlex!</title><link>http://blogs.msdn.com/edjez/archive/2006/09/15/756795.aspx</link><pubDate>Sat, 16 Sep 2006 03:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:756795</guid><dc:creator>edjez</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/edjez/comments/756795.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=756795</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=756795" width="1" height="1"&gt;</description></item><item><title>Distributed, mesh-based source code control with SSE?</title><link>http://blogs.msdn.com/edjez/archive/2006/09/08/747077.aspx</link><pubDate>Sat, 09 Sep 2006 02:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:747077</guid><dc:creator>edjez</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edjez/comments/747077.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=747077</wfw:commentRss><description>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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=747077" width="1" height="1"&gt;</description></item><item><title>2 new CAB (Composite UI) resources</title><link>http://blogs.msdn.com/edjez/archive/2006/09/06/745385.aspx</link><pubDate>Wed, 06 Sep 2006 23:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:745385</guid><dc:creator>edjez</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/edjez/comments/745385.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=745385</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=745385" width="1" height="1"&gt;</description></item><item><title>Forerunners of tomorrow's enterprise architectures</title><link>http://blogs.msdn.com/edjez/archive/2006/08/26/728758.aspx</link><pubDate>Sun, 27 Aug 2006 05:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:728758</guid><dc:creator>edjez</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/edjez/comments/728758.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=728758</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=728758" width="1" height="1"&gt;</description></item><item><title>Mobile Client Software Factory debuts @ MEDC</title><link>http://blogs.msdn.com/edjez/archive/2006/05/10/595020.aspx</link><pubDate>Thu, 11 May 2006 03:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:595020</guid><dc:creator>edjez</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/edjez/comments/595020.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=595020</wfw:commentRss><description>&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=595020" width="1" height="1"&gt;</description></item><item><title>Mindstorms NXT and Working with communities throughout development</title><link>http://blogs.msdn.com/edjez/archive/2006/05/02/588473.aspx</link><pubDate>Tue, 02 May 2006 19:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:588473</guid><dc:creator>edjez</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/edjez/comments/588473.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=588473</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Georgia size=2&gt;Great news and great approach - Lego opens up its Mindstorms NXT toolkit, and their board of 'Expert Advisors' will be able to&amp;nbsp;share their experiences with the community.&amp;nbsp;It must be an exciting day for the NXT team -&amp;nbsp;if I were to draw a parallel to patterns &amp;amp; practices process, it is&amp;nbsp;the day when you let your advisors tell your&amp;nbsp;future users what they really think - no PR tweaks, fidgety marketing folks or controlled messages in the way.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;It is excting to see the approach of involving users throughout the product development be used in a product I care about. Here's the link:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://mindstorms.lego.com/press/2057/Open%20Source%20Announcement.aspx"&gt;&lt;FONT face=Georgia size=2&gt;http://mindstorms.lego.com/press/2057/Open%20Source%20Announcement.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Georgia size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;To quote (highlights mine):&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;“&lt;FONT color=#0000ff&gt;Most often, innovation comes from the core community of users&lt;/FONT&gt;. Our ongoing commitment to enabling our fan base to personalize and enhance their MINDSTORMS experience has reached a new level with our decision to release the firmware for the NXT brick as open source,” said Søren Lund, director of LEGO MINDSTORMS. “When we launched the legacy MINDSTORMS platform in 1998, the community found ways to do these things on their own, and we were faced with the question of whether to allow it, which we decided to embrace and encourage. Now, given the strong user base and versatility and power of the NXT platform, the right to hack is a ‘no brainer.’ We’re excited to see how our open approach will push new boundaries of robotic development and are eager for all enthusiasts to share their creations with the community.” &lt;BR&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#0000ff&gt;Today also marks the first time that the original 14 MINDSTORMS Users Panel members and 100 recruited members of the MINDSTORMS Developer Program, an exclusive group of enthusiasts charged with helping guide the product development process, can publicly share their initial experiences and experiments with the NXT platform.&lt;/FONT&gt; During a four-month process, participants have had access to a secure Web forum where they can communicate with one another, learn more about the project, debate issues, create solutions and support the ultimate launch of LEGO MINDSTORMS NXT in August.&lt;/FONT&gt; "&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=588473" width="1" height="1"&gt;</description></item><item><title>Invoking the ghost</title><link>http://blogs.msdn.com/edjez/archive/2006/04/28/InvokingTheGhost.aspx</link><pubDate>Fri, 28 Apr 2006 23:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:586420</guid><dc:creator>edjez</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/edjez/comments/586420.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=586420</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Let’s say you are talking about a program with someone. Imagine stakes are somewhat high. Suddenly one of these two phrases gets thrown out:&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-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;1. "&lt;I style="mso-bidi-font-style: normal"&gt;It could be faster&lt;/I&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-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;In any but the healthiest of teams, these are great words to&amp;nbsp;put folks on defensive&amp;nbsp;and stop rational conversations about code.&amp;nbsp;Suddenly the neurons spin (?) and we wonder- is there something we missed? Is my code &lt;I style="mso-bidi-font-style: normal"&gt;wrong&lt;/I&gt;? Did I screw it up &lt;I style="mso-bidi-font-style: normal"&gt;all over the place&lt;/I&gt;? Does this guy/gal have some &lt;I style="mso-bidi-font-style: normal"&gt;privileged&lt;/I&gt; piece of information? When someone tells you "It could be faster" - what's your typical reaction…?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;2. "&lt;I style="mso-bidi-font-style: normal"&gt;It's for security reasons&lt;/I&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-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;That's another one. And it's funny I even dare to bring this up, being from Microsoft and all that. Who would be brave enough enter a debate about&amp;nbsp;code being written&amp;nbsp;for such an honorable purpose? Who would be enough of a&amp;nbsp;security&amp;nbsp;expert to dare question the existence of code that is there to protect us from evil, shame and regret?&amp;nbsp;Do you&amp;nbsp;want&amp;nbsp;your grandchildren to remember&amp;nbsp;you for being the dude/dudette that left that gaping security hole open? That was exploited by that worm that took civilization back to the 19th century in one fell swoop? I know &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;I&lt;/SPAN&gt;&lt;/EM&gt; don't want to be associated with an accidental return to hunter/gatherer lifestyle&amp;nbsp;...so we block the issue in our heads and move 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-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;What's going on here?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;These are just two examples of what I call 'invoking ghosts' in discussions about software. We bring up a topic that is vague, crosscutting, obscure, to 1) provide an excuse to do&amp;nbsp;work or not do work, independently of how sensible it is&amp;nbsp;to do it or not&amp;nbsp;2) win a debate against The Other Idea 3) raise FUD levels and gain control of the situation or reduce others' credibility 4) basically steer the conversation away from the code and into people manipulation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Now, don't get me wrong. Perf and security are important (Doh! I sound like an idiot....I guess you can quote me on that...No, the first phrase) Things &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;can&lt;/SPAN&gt;&lt;/EM&gt; be faster and you &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;could&lt;/SPAN&gt;&lt;/EM&gt; be doing things for real security measures - but how to tell? What do you do if in a conversation someone invokes these topics as ghosts, and steer it back into a productive place?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Fortunately, I think there are good patterns and tools to communicate around these issues. A huge one is to be transparent about the goals and unknowns. This basically puts on the table 1. What is it that you are trying to achieve, and 2. An acknowledgment that the understanding of the problem and the shape of the solution are still evolving. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;What has helped me is to get to a shared (implicit or explicit) commitment to an approach:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;1) Establish the needs &amp;amp; the priorities&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;2) Analyze current situation and set a goal for an improvement&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;3) Work on improving the system, checkpoint against goals&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;4) do it all again&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;This actually sounds quite obvious, but it has helped me bring sanity to discussions about quality attributes such as performance &amp;amp; scalability, security, manageability, maintainability, and other areas where 'ghosts' tend to live. Quality attributes tend to be particularly good 'haunted houses' because of their crosscutting, distributed nature, and because we tend to have less than ideal tools to think about tests of success.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;If you look at the 4 steps above the first one is about establishing needs - figuring out your tests, if you will. There has been a lot of work for many years around helping people figure out their tests/needs for quality attributes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;For security you have Threat Modeling, for manageability you have Health Modeling, for performance you have Perf Modeling, and I hope good frames come up for other quality attributes as well. But what I particularly like about these models is that they aren't models about the solution, but models for &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;tests &lt;/SPAN&gt;&lt;/EM&gt;(and steps 2, 3 &amp;amp; 4&amp;nbsp;are just&amp;nbsp;process guidance to help us make them pass…the “green and refactor” of the “red, green, refactor” cycle). &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&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-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;In my opinion the focus on tests first for these complex areas&amp;nbsp;makes these approaches and tools intrinsically suitable for expressing partial, incomplete or overlapping goals (which tends to happen whenever humans are involved..), and helping people iteratively collaborate around defining, verifying and refining them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;By starting with tests, we support an inductive approach to building the solution, akin to what you do with TDD. Now maybe we still don't have good tools to automatically test our systems based on all these testing models, but I hope that's just&amp;nbsp;a matter of time (base DSL for tests that can be specialized for specific domains, anyone?). Eventually, these tools could become part of the suite of tests that drive the creation of the solution, treated as acceptance tests tied to business needs, and maybe even verifiable against systems at runtime.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;…In the meantime it takes toil, tinkering, and a dabbling with mental experiments. But most of all I think it takes clear communication between people. Here’s some resources around these topics that I’ve used to help me scare the ghosts away from the conversations, and keep them productive, collaborative, and smart:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A HREF="/jmeier/archive/2005/12/01/499078.aspx"&gt;&lt;FONT size=2&gt;What makes a good threat model&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; – by J.D. Meier&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A HREF="/jmeier/archive/2006/04/12/575374.aspx"&gt;&lt;FONT size=2&gt;Performance &amp;amp; Scalability Checkpoint to improve your software engineering&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; – by JD too&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A href="http://msdn.microsoft.com/security/securecode/threatmodeling/default.aspx"&gt;&lt;FONT size=2&gt;MSDN page having lots of things threat model&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; (the generic portal)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A href="http://blogs.gotdotnet.com/ricom/archive/2004/04/28/122503.aspx"&gt;&lt;FONT size=2&gt;Rico Mariani’s blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; – Entry with the foreword of the p&amp;amp;p perf &amp;amp; scale guide with a quote of Donald Knuth quoting Tony Hoare saying ‘&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A href="http://www.microsoft.com/windowsserversystem/dsi/designwp.mspx"&gt;&lt;FONT size=2&gt;Health Modeling&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; - whitepaper on the Windows Server. They’ve done us all the favor of dumping the health model of a printer in XML. Whee! (But can you write a test runner for 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-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;(Whither my simplicity model paper? Related to maintainability of code? I digress)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Kudos: It’s clear that J.D. has done a lot of work in this area. He’s the best I know at distilling these areas in significant, actionable, and insightful ways.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;FONT size=2&gt;(OK, My cereal is going something like "Ed - W-T-F-is-this-fluffy-post? Why don't you tell us about&amp;nbsp;dependency injection, aspects, executable models, Object Builder, using XAML to define types dynamically,&amp;nbsp;gps, CAB running in mobile devices, workflow and UI or concurrency or whatever?"&amp;nbsp; A: "I believe writing software is a social activity.&amp;nbsp;I&amp;nbsp;believe that&amp;nbsp;if&amp;nbsp;we learn to communicate, improve how we &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;reason, become more self-aware,&amp;nbsp;and question assumptions in more effective ways we will plain simply write much better software and enjoy it more along the way. Plus -&amp;nbsp;it's my blog. And my doctor&amp;nbsp;told me&amp;nbsp;I shouldn't talk to cereal.)&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=586420" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/_2F00_etc_2F00_other/default.aspx">/etc/other</category><category domain="http://blogs.msdn.com/edjez/archive/tags/Off+the+deep+end_2E002E002E00_/default.aspx">Off the deep end...</category></item><item><title>What's in a name? What's an "Application Block"</title><link>http://blogs.msdn.com/edjez/archive/2006/04/24/WhatsInAName.aspx</link><pubDate>Mon, 24 Apr 2006 18:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:582224</guid><dc:creator>edjez</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/edjez/comments/582224.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=582224</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Often I get the question 'what is an application block' and 'why that name'? We have lots of articles, &lt;A href="http://msdn.microsoft.com/practices/Webcasts/"&gt;webcasts &lt;/A&gt;etc describing them how we've built them and how to extend them or build your own. Then people&amp;nbsp;ask 'what is the difference between a block or a library or a framework' and I&amp;nbsp;remind them that we use the Application Block name to reflect a set of expectations around packaging, design and how they could be&amp;nbsp;used. &lt;/SPAN&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Using the word “blocks” was done to evoke a set of patterns about how p&amp;amp;p -and hopefully eventually more of MS - chooses to distribute reusable chunks of bits, without constraining them too much a priori. The approach&amp;nbsp;has allowed our team, communities and others to participate in their evolution rather than try to invent something different altogether. There is an existing&amp;nbsp;taxonomy of chunks of reusable code, and using the word&amp;nbsp;"Blocks" was not done to&amp;nbsp;try to introduce a new item in this taxonomy (that would be arrogant) or redefine existing terms. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;There's plenty that's been written about code libraries (things you can use), frameworks (things that affect the architecture of your code a bit more), app containers and the likes, so I won't go there. I'll just say why I didn't think this would be a good distinction to revolve around when you are creating names for a new&amp;nbsp;product line.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;I&amp;nbsp;believe good names tend to be:&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Unspecific enough that you can accept variability of the named thing. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Short&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Metaphorical. The concept of the name evokes visual, physical/physiological and metabolic actions.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Associative and work by metonymy, just like 'White House' represents a government, a president, and a big dome, and not a building.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;I believe a good name does not need to reflect every detail, or every characteristic, or the complete position in the taxonomy, of the thing it describes. For engineers it causes some heartburn (to realize that better names are not necessarily better for classification) but it's easy to embrace once you understand why. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;(If you are interested in this you can read Lakoff or cognitive science papers from the last&amp;nbsp;couple of&amp;nbsp;decades. The one thing that strikes me&amp;nbsp;the most is the impact of physical evolution on the brain's workings, which is one of those conclusions that just strikes me as insightful. What&amp;nbsp;dictates the shape of the box we tend to think in?&amp;nbsp;&amp;nbsp;Thanks &lt;A href="http://c2.com/"&gt;Ward&lt;/A&gt; for recommending this author)&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Back to code. You can read plenty about&amp;nbsp;the distinctions most of the experts in the community put forward between libraries and frameworks. I will oversimplify, but in the end libraries are things I can use, and frameworks tend to mess with the architecture and design of my own code. Maybe containers implementing DI tend to&amp;nbsp;clarify the edges a&amp;nbsp;little bit, by allowing an otherwise hefty-framework-author have better boundaries between what you use and what affects you. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;The one difficulty I find when trying to classify blocks in terms of "libraries" of "frameworks" is that folks will not understand application architecture in objective ways. For example, enterprise library is IMO a great example of "Library" chunks. However, if you ask around many folks consider EntLib to 'deeply affect the architecture of their app'. One man's library is another man's framework. On the other hand, CAB has lots of pieces which are canonical "framework" chunks and a gentle sprinkling of "library" pieces. It has both gentle and forceful ways of suggesting a design for some areas of your code. I do think we could have packaged CAB up a bit better by breaking out specific pieces, but we all have constraints. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;So to summarize them, the name "Application Block" does not reflect a precise place in the taxonomy of reuse, rather, a loose metaphor that encompasses a family of assets, and how you use them. Using blocks should be a matter of choice, they work together, they can be piled up, you can use many or a few, they will probably have commonality internally and externally as dictated by efficiency and usability, and they should be fun.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=582224" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/Off+the+deep+end_2E002E002E00_/default.aspx">Off the deep end...</category></item><item><title>New Blog Section - "Off the deep end..."</title><link>http://blogs.msdn.com/edjez/archive/2006/04/24/OffTheDeepEnd.aspx</link><pubDate>Mon, 24 Apr 2006 18:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:582223</guid><dc:creator>edjez</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edjez/comments/582223.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=582223</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Disclaimer: JD Meier suggested I get to blogging and after some discussion why I haven't been doing this, I decided to create a section for 'off the deep end' posts. The description is is a reference to &lt;A href="http://en.wikipedia.org/wiki/Godel"&gt;Gödel&lt;/A&gt;: &lt;EM&gt;Thoughts, Ramblings, and content not computable through predicate calculus.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;My hope is that I&amp;nbsp;can put things in this section with an implicit disclaimer. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=582223" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/Off+the+deep+end_2E002E002E00_/default.aspx">Off the deep end...</category></item><item><title>EntLib 2.0 Shipped!</title><link>http://blogs.msdn.com/edjez/archive/2006/01/26/entlib2ships.aspx</link><pubDate>Thu, 26 Jan 2006 23:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:518007</guid><dc:creator>edjez</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/edjez/comments/518007.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=518007</wfw:commentRss><description>&lt;DIV class=Section1&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Nuff said already! Just go get it!&lt;/SPAN&gt;&lt;/FONT&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/EntLib2.asp?frame=true"&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/EntLib2.asp?frame=true&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;It includes the following favorites:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Caching Application Block&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Cryptography Application Block&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Data Access Application Block&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Exception Handling Application Block&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Logging Application Block&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;LI class=MsoNormal style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1"&gt;&lt;B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Security Application Block&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;U&gt;Migration &amp;amp; Compatibility&lt;/U&gt;: As you know in p&amp;amp;p we can't guarantee 100% compatibility of APIs between releases. But we will strive to change as little as possible; and many blocks have the same API as in the .NET 1.1. releases. Specifically, we try to have the&amp;nbsp;least impact on&amp;nbsp;APIs used by business logic&amp;nbsp;developers first, then least impact&amp;nbsp;on extensions, and finally we won't worry about changing&amp;nbsp;deep hidden internals.&amp;nbsp;In this release of entlib includes migration documentation to move from the previous version of a block to the new one, if there were any changes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;U&gt;Internals&lt;/U&gt; In addition EntLib includes &lt;STRONG&gt;&lt;B&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;ObjectBuilder&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/STRONG&gt; which is the dependency injection foundation for how the Application Blocks wire up internally and get affected by config and instrumentation, and is the container architecture on which other p&amp;amp;p deliverables (such as the Composite UI Application block) are based. The dependency injection&amp;nbsp;is an important characteristic of the internals. You don't care about this&amp;nbsp;if all you are doing is using the blocks as-is. You care if you are building your own blocks, or extending our blocks in involved ways. It's good becuase it assists an internal design that is decoupled, which allow us/you to version configuration, instrumentation, and all blocks independently. And that is good because improvements, updates and fixes have less widespread impact - which shortens the dev, test and release time; and that's good of you. It does mean that the internals aren't easy to just look at and follow, because the 'red thread' that ties all together is spread in more places. I know many people miss the internal simplicity of the original application blocks from many years ago. I do want to dhare the observation all that the tradeoff has accelerated our team- which means more stuff for you - and allowed more extensibility and customization by partners and companies and the community. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;U&gt;THANKS&lt;/U&gt;! I wanted to thank all the partners, customers and community members who have been relentless in&amp;nbsp;giving us feebdack and who 'keep us honest' with their feedback from applying early bits and the finished blocks in their apps. Please keep doing so - you are the reason why we come to work every!&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;(Sorry to my team for the delay in getting this out&amp;nbsp;- I realized I was 'saving' and not 'posting' the entry)&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=518007" width="1" height="1"&gt;</description></item></channel></rss>