<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">mikechampion's weblog</title><subtitle type="html" /><id>http://blogs.msdn.com/mikechampion/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/mikechampion/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2006-11-13T00:48:00Z</updated><entry><title>Lots of Stonehenge News: Initial release, Sun contribution, JavaOne keynote</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2009/06/05/lots-of-stonehenge-news-initial-release-sun-contribution-javaone-keynote.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2009/06/05/lots-of-stonehenge-news-initial-release-sun-contribution-javaone-keynote.aspx</id><published>2009-06-05T05:10:57Z</published><updated>2009-06-05T05:10:57Z</updated><content type="html">&lt;p&gt;There’s lots of news about &lt;a href="http://incubator.apache.org/stonehenge/"&gt;Apache Stonehenge&lt;/a&gt; today.&amp;nbsp; First, the effort passed a significant milestone – its first release from the Apache incubator. This means that the code was updated to use the Apache license headers, the source control and build environment translated to those used at Apache, documentation was written, and new people tested everything to make sure it works. Finally, there were rounds of &lt;a href="http://www.apache.org/foundation/voting.html"&gt;voting&lt;/a&gt; by the Podling Project Management Committee to certify that everything was up to the foundation’s high standards. This was a fair amount of work; look around in the &lt;a href="https://issues.apache.org/jira/secure/BrowseProject.jspa"&gt;issues browser&lt;/a&gt; to see all the issues that were reported and fixed.  &lt;p&gt;You can download this release from the &lt;a href="http://incubator.apache.org/stonehenge/download.html"&gt;project site&lt;/a&gt; or one of the &lt;a href="http://www.apache.org/dyn/closer.cgi/incubator/stonehenge"&gt;mirrors&lt;/a&gt;.&amp;nbsp; I hope you will take a look and let us know what you think. We know it's not everything you could possibly hope for, so please &lt;a href="https://issues.apache.org/jira/browse/STONEHENGE"&gt;report issues and make suggestions&lt;/a&gt;. Do these code samples help you understand how to solve the problems you might have had building SOA applications with the web services standards and toolkits?&amp;nbsp; What's missing? What challenges are you facing that a multi-platform sample application and best practices project could better illustrate how to solve? &lt;p&gt;This is only the first step toward Stonehenge becoming a full-fledged Apache project.&amp;nbsp; Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful Apache Software Foundation projects. This milestone shows evidence that the community and codebase is up and running, but both will have to become more mature before the project can be fully endorsed by the ASF. &lt;p&gt;&amp;nbsp; &lt;p&gt;The first milestone release builds from code contributed by WSO2 and Microsoft late last year.&amp;nbsp; Today&amp;nbsp; &lt;strong&gt;Sun&lt;/strong&gt; &lt;strong&gt;Microsystems contributed an implementation of the StockTrader sample application&lt;/strong&gt; services built with &lt;a href="https://metro.dev.java.net/"&gt;Metro&lt;/a&gt;, the web services stack in &lt;a href="https://glassfish.dev.java.net/"&gt;Glassfish&lt;/a&gt;. The announcement came during Microsoft's keynote address at the JavaOne confernce.&amp;nbsp; As &lt;a href="http://blogs.msdn.com/stevemar/archive/2009/06/04/microsoft-keynoting-at-javaone.aspx"&gt;co-presenter Steven Martin&lt;/a&gt; put it: &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;This is important for two reasons. First, it means that Stonehenge will deliver even more value by providing best practice guidelines and reference implementations across an even broader range of scenarios and platforms, including Java, .NET, PHP, etc. The more samples and real world guidance we can give the community the better since it gives customers the ability to choose the best ones for their specific business requirements. It also makes it easier to pinpoint potential interoperability problems.&lt;/em&gt; &lt;p&gt;&lt;em&gt;In addition, it represents another step forward in our ongoing work with Sun. As we all know, today’s IT environments are heterogeneous; whether it’s a single organization that runs both.NET and Java apps or multiple organizations that seek to collaborate with each other.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Going forward, it would be great to get even more individuals, projects, and companies involved in Stonehenge.&amp;nbsp; The focus so far has been on the StockTrader services-oriented sample application originally developed for IBM WebSphere but now has interoperating versions running on several technologies including .NET, PHP, and a couple of Java SOA frameworks. Future work can both deepen and broaden what we've started with.&amp;nbsp; For example, there has been much joint Sun / Microsoft work to&amp;nbsp; support interoperability across our identify federation products, and it would be good so see this in Stonehenge.&amp;nbsp;&amp;nbsp;&amp;nbsp; It would also be great to get implementations for a broader set of platforms and frameworks ... Apache CXF?&amp;nbsp; Oracle Fusion?&amp;nbsp; A new improved WebSphere implementation at Apache?&amp;nbsp; How about showing us how to implement this security-focused scenario with REST?&amp;nbsp; Or maybe one or more of the emerging Cloud platforms?&amp;nbsp; All would be welcome.&amp;nbsp; &lt;p&gt;But we hope there will be more to Stonehenge than just StockTrader.&amp;nbsp; We're thinking about what other realistically complex and challenging -- but manageable! -- service-oriented scenarios would lend themselves to a set of interoperable sample implementations.&amp;nbsp; Please join the conversation on the &lt;a href="http://incubator.apache.org/stonehenge/mail-lists.html"&gt;Stonehenge mailing list&lt;/a&gt; or &lt;a href="https://issues.apache.org/jira/browse/STONEHENGE"&gt;issues tracker&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9700789" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Microsoft and the Apache Stonehenge Project</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2008/11/24/microsoft-and-the-apache-stonehenge-project.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2008/11/24/microsoft-and-the-apache-stonehenge-project.aspx</id><published>2008-11-24T22:09:12Z</published><updated>2008-11-24T22:09:12Z</updated><content type="html">&lt;p&gt;Several of us at Microsoft have signed up to actively participate in the &lt;a href="http://wiki.apache.org/incubator/StonehengeProposal"&gt;Apache Stonehenge Project&lt;/a&gt; that was accepted into the incubator recently.&amp;nbsp; This is only the latest in a number of &lt;a href="http://port25.technet.com/archive/2008/11/07/open-source-interoperability-projects-at-microsoft.aspx"&gt;open source interoperability projects&lt;/a&gt; in which Microsoft is active.&lt;/p&gt; &lt;p&gt;So, what is Stonehenge and why am I participating?&amp;nbsp; This project is championed by &lt;a href="http://pzf.fremantle.org/"&gt;Paul Fremantle&lt;/a&gt;, co-founder and CTO of &lt;a href="http://wso2.com/"&gt;WSO2&lt;/a&gt;, which has been a great partner in helping to improve and demonstrate the interoperability of the WS-* standards across platforms.&amp;nbsp; For example, at TechEd 2008, &lt;a href="http://video.msn.com/video.aspx?mkt=en-us&amp;amp;vid=7019fbb8-4d12-4f56-93a1-a39b9d2ccb00"&gt;Jonathan Marsh of WSO2 and Greg Leake of Microsoft demonstrated&lt;/a&gt; how separate &lt;a href="http://wso2.org/interop/stocktrader"&gt;WSO2&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/netframework/bb499684.aspx"&gt;Microsoft&lt;/a&gt; components implementing a mutlti-tier stock trading application can interoperate and be substituted for one another.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;StockTrader is just the starting point for the broader goals of Stonehenge.&amp;nbsp; As the project proposal puts it:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;The aim of the Stonehenge project is to develop a set of sample applications to demonstrate seamless interoperability across multiple underlying platform technologies by using currently defined W3C and OASIS standard protocols. &lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;We are proposing this incubator project because we believe that a project that includes a set of sample applications, with multiple language and framework implementations will become a useful and important part of the SOA landscape. It will: &lt;/em&gt; &lt;p&gt;· &lt;em&gt;illustrate and develop best practice for interoperable applications that communicate via distributed protocols, &lt;/em&gt; &lt;p&gt;· &lt;em&gt;demonstrate interoperability between platforms, &lt;/em&gt; &lt;p&gt;· &lt;em&gt;provide sample code upon which SOA developers can build, &lt;/em&gt; &lt;p&gt;· &lt;em&gt;help identify interoperability issues and their solutions, and &lt;/em&gt; &lt;p&gt;· &lt;em&gt;build confidence in cross-platform deployment of SOA technologies&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;More generally, we believe that Stonehenge can help wire up the "last mile" between the standardized web services &lt;strong&gt;infrastructure&lt;/strong&gt; that is now implemented across key platforms, and a new generation of service oriented &lt;strong&gt;applications&lt;/strong&gt; that will span them. Existing WS-* interoperability work such of the sort done by &lt;a href="http://ws-i.org/"&gt;WS-I&lt;/a&gt; and in our "plugfests" will continue to solidify the platform-level interoperability.&amp;nbsp; The new work, exemplified by Apache Stonehenge, should attract a wider community of users who can exploit the hard standardization and platform interoperability work without having to wallow in as many nasty details as in the past.  &lt;p&gt;We've gotten clear direction from customers that sample applications based on real-world scenarios and challenges will help them realize the potential of these technologies which have been developed and standardized for the last 8 years or so. Likewise, the initial response from the Apache community has been quite favorable.&amp;nbsp;&amp;nbsp; I have a personal commitment to invest in helping make Stonehenge a success, and look forward to digging in.  &lt;p&gt;For more information on Stonehenge and other Microsoft work with the Apache Foundation, see:  &lt;ul&gt; &lt;li&gt;Sam Ramji's &lt;a href="http://port25.technet.com/archive/2008/11/06/apachecon-keynote.aspx"&gt;ApacheCon keynote&lt;/a&gt; and the &lt;a href="http://www.eweek.com/c/a/Linux-and-Open-Source/Microsoft-Pushes-Interoperability-at-ApacheCon/"&gt;writeup at eWeek&lt;/a&gt;  &lt;li&gt;Paul Fremantle's &lt;a href="http://pzf.fremantle.org/2008/11/stonehenge.html"&gt;blog post on Stonehenge&lt;/a&gt;, Kamaljit Bath's &lt;a href="http://port25.technet.com/archive/2008/11/10/apachecon-and-the-stonehenge-proposal.aspx"&gt;report from ApacheCon&lt;/a&gt;, and the Apache &lt;a href="http://feathercast.org/?p=68"&gt;Feathercast&lt;/a&gt; featuring the two of them.  &lt;li&gt;Subscribe to the mailing list &lt;a href="mailto:stonehenge-dev-subscribe@incubator.apache.org"&gt;stonehenge-dev-subscribe@incubator.apache.org&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://wooga.drbacchus.com/apache-incubator---stonehenge"&gt;&lt;/a&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://feathercast.org/?p=68"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9139189" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Web Services Standards and .NET Interoperability</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2008/04/01/web-services-standards-and-net-interoperability.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2008/04/01/web-services-standards-and-net-interoperability.aspx</id><published>2008-04-01T22:25:01Z</published><updated>2008-04-01T22:25:01Z</updated><content type="html">&lt;p&gt;Successive versions of the .NET framework closely track the evolution of the WS-* specs as they progress from publication, to submissions to W3C or OASIS, and ultimately as W3C Recommendations or OASIS Standards. See for example the list of &lt;a href="http://msdn2.microsoft.com/en-us/library/ms734776(VS.85).aspx"&gt;supported interoperability specs in .NET 3.0&lt;/a&gt; (which shipped with Vista) and .&lt;a href="http://msdn2.microsoft.com/en-us/library/ms730294.aspx"&gt;NET 3.5&lt;/a&gt; (which shipped with Visual Studio 2008), noting how the later release referenced the final standard for several specs whereas the earlier versions referenced the original submission.&amp;#160; &lt;/p&gt;  &lt;p&gt;Not only does Microsoft closely track the standard version of specifications, Microsoft invests in helping other companies do similarly.&amp;#160; One way is by sponsoring&amp;#160; &amp;#8220;&lt;a href="http://tech.groups.yahoo.com/group/soapbuilders/message/10812"&gt;plugfests&lt;/a&gt;&amp;#8221; where implementers can get together and test what works and what doesn&amp;#8217;t while products are still being developed.&amp;#160; Don&amp;#8217;t believe me, take a look at accounts of the recent web services plugfest from other &amp;#8220;coop-etitors&amp;#8221; in the SOA industry.&amp;#160; For example Stefan Tilkov&amp;#160; interviewed Harold Carr to assess the state of &lt;a href="http://www.infoq.com/news/2008/03/wcf-metro-interop"&gt;interoperability between Sun&amp;#8217;s Metro product and WCF&lt;/a&gt;.&amp;#160; Harold notes: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;.NET 3.5 (which is released) is based on the standard versions. Metro 1.x (which will ship later in 2008) will be based on the standard versions also.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Harold's own &lt;a href="http://weblogs.java.net/blog/haroldcarr/archive/2008/03/metro_web_servi_2.html"&gt;blog has details on exactly which of the ratified standards&lt;/a&gt; were used successfully to interoperate with .NET 3.5.&amp;#160; &lt;/p&gt;  &lt;p&gt;These ongoing&amp;#160; Plugfests are a great way to increase real world interoperability, and we hope to see even broader participation in the future. See the &lt;a href="http://mssoapinterop.org/ilab/"&gt;scenarios and frequently asked questions&lt;/a&gt; page for details on how to participate. All interested parties are invited irrespective of which platform they develop for and whatever their business relationship (or not!) with Microsoft might be, with no legal agreements to be signed. &lt;/p&gt;  &lt;p&gt;Here is a list of Web Services &lt;i&gt;standard&lt;/i&gt; specifications (i.e. the versions of these specs that are OASIS standards or W3C Recommendations) that are &lt;i&gt;shipping today&lt;/i&gt; in WCF, Microsoft&amp;#8217;s application platform framework:&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SOAP 1.2 &lt;/li&gt;    &lt;li&gt;W3C Web Services Addressing 1.0 - Core, SOAP binding, WSDL binding &lt;/li&gt;    &lt;li&gt;MTOM &lt;/li&gt;    &lt;li&gt;WS-ReliableMessaging 1.1 &lt;/li&gt;    &lt;li&gt;WS-Security 1.1 (also SAML Token Profile 1.1) &lt;/li&gt;    &lt;li&gt;WS-Policy 1.5 / WS-PolicyAttachment 1.5 &lt;/li&gt;    &lt;li&gt;WS-SecurityPolicy 1.2 &lt;/li&gt;    &lt;li&gt;WS-SecureConversation 1.3 &lt;/li&gt;    &lt;li&gt;WS-Trust 1.3 &lt;/li&gt;    &lt;li&gt;SAML 1.1 Token Format &lt;/li&gt;    &lt;li&gt;WS-Addressing 1.0 &lt;/li&gt;    &lt;li&gt;WS-Coordination 1.1 &lt;/li&gt;    &lt;li&gt;WS-AtomicTransaction 1.1 &lt;/li&gt;    &lt;li&gt;UDDI 2.0 &lt;/li&gt;    &lt;li&gt;WS-I Basic Profile 1.1 &lt;/li&gt;    &lt;li&gt;WS-I Basic Security Profile 1.0&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Other ratified standards are supported elsewhere in the Microsoft product line, e.g. the DMTF WS-Management standard is supported in Vista.&lt;/p&gt;  &lt;p&gt;It&amp;#8217;s fair to point out that not all potentially relevant specs that can claim to be standards are supported in .NET (or the native Windows XML libraries for that matter).&amp;#160; The clearest example of a ratified version of a spec that Microsoft and many others chose not to implement is XML 1.1.&amp;#160; This was a difficult decision, since some changes in XML 1.1 make it better aligned with the evolving Unicode standard than XML 1.0 is, but others&amp;#160; are &amp;#8220;breaking changes&amp;#8221; that would actually degrade real world interoperability.&amp;#160; In this case, principled pushback on a standards committee has led to a proposed &lt;a href="http://www.w3.org/TR/2008/PER-xml-20080205/"&gt;new edition of XML 1.0&lt;/a&gt; that has improved Unicode alignment without sacrificing interoperability.&lt;/p&gt;  &lt;p&gt;We encourage implementers to participate in the ongoing work to demonstrate and improve real world WS-* interoperability, and for customers to let us know about additional scenarios and specifications where we need to focus in the future in order to make cross-platform services ever more valuable.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8349112" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>WS-Bandwagon or WS-JustRight?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2007/06/05/followup-on-ws-management-comments.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2007/06/05/followup-on-ws-management-comments.aspx</id><published>2007-06-06T00:10:53Z</published><updated>2007-06-06T00:10:53Z</updated><content type="html">&lt;p&gt;My &lt;a href="http://blogs.msdn.com/mikechampion/archive/2007/05/21/ws-and-the-hype-cycle.aspx"&gt;previous post&lt;/a&gt; used &lt;a href="http://www.dmtf.org/standards/wsman"&gt;WS-Management&lt;/a&gt; to illustrate the larger point that&amp;nbsp;&amp;nbsp;"the WS technologies are taking hold, deep down in the infrastructure, doing the mundane but mission critical work for which they were designed."&amp;nbsp; Perhaps because&amp;nbsp; WS-Management is one of the more controversial bits of the WS-* infrastructure, that example stimulated more pushback than the other example I used -- the increasing success of the WS-* based &lt;a href="http://www.identityblog.com/?page_id=355"&gt;identity metasystem&lt;/a&gt;&amp;nbsp;(which is a lot more &lt;a href="http://www.microsoft.com/presspass/press/2007/may07/05-23MetasystemPR.mspx"&gt;newsworthy&lt;/a&gt; at the moment). &amp;nbsp; But it's easy to justify the value of standards and open source work in the identity space, where the prevalence of phishing indicates that the web does not have a good native story that falls out of the REST architecture.&amp;nbsp; Let's look more closely at the harder question of why WS-Management exists and why it is gaining traction. &lt;/p&gt; &lt;p&gt;&amp;nbsp;A couple of points in reply to comments&amp;nbsp;on the earlier post:&amp;nbsp; &lt;ul&gt; &lt;li&gt;It overlaps in functionality with WSDM, another family of specs, and this overlap is a source of friction between the MS and IBM web services stories.&amp;nbsp; I won't get into the history or politics here other than to speculate that WS-Management&amp;nbsp;is a classic example of the &lt;a href="http://en.wikipedia.org/wiki/Pareto_principle"&gt;Pareto Principle&lt;/a&gt; -- it does quite a bit less than WSDM (maybe 20% of the functionality and complexity of WSDM), but its relative simplicity makes it easier to implement while being good enough for 80% of the important use cases.&amp;nbsp; So, even in the allegedly pathological WS ecosystem, evolution favors the simple and functional over the the more highly&amp;nbsp;but complexly designed.  &lt;li&gt;Why didn't something even simpler and more RESTful evolve,&amp;nbsp;which &lt;a href="https://blogs.msdn.com/mikechampion/archive/2007/05/21/ws-and-the-hype-cycle.aspx#3105431"&gt;Patrick Logan's comment&lt;/a&gt; suggests would have been easy?&amp;nbsp; I don't know the history, but it's clear that REST concepts were in fact&amp;nbsp;leveraged to keep the spec relatively simple.&amp;nbsp; Patrick also &lt;a href="http://patricklogan.blogspot.com/2007/06/ws-bandwagon-decision-making.html"&gt;pushed back&lt;/a&gt; that that it is a "shell of a solution with little agreement on what goes into the shell." REST is also a "shell of a solution", and WS-Management adopts the same basic approach to allow late binding to the resources in a catalog rather than tight coupling to a predefined set of objects. &lt;li&gt;Why not just use HTTP rather than WS-Transfer?&amp;nbsp; I created a bit of contention by asserting that WS-Man is designed for use "in&amp;nbsp;situations where the web-scale alternatives&amp;nbsp;really don't fit, such as&amp;nbsp;deep within operating systems or in the firmware of chips".&amp;nbsp; A number of people pointed out (probably correctly, but I don't really know) that an HTTP implementation would "fit" in the same amount of code or memory as a WS-Transfer implementation.&amp;nbsp; That being as it may, I meant "fit" in the architectural sense -- I thought the common REST argument that HTTP is an application protocol indicated that it would not "fit" so deep down in the stack as the firmware on a chip or device.&amp;nbsp; More significantly, HTTP does "fit" on top of TCP/IP, but WS-Management was designed for use in situations where only UDP network services are available. &amp;nbsp;  &lt;li&gt;Whether or not the designers&amp;nbsp;were simply riding the &lt;a href="http://patricklogan.blogspot.com/2007/06/ws-bandwagon-decision-making.html"&gt;WS bandwagon&lt;/a&gt; rather than thinking hard about RESTful alternatives,&amp;nbsp;&amp;nbsp;WS-Management sits on a number of WS specs, not just WS-Transfer.&amp;nbsp; By building on WS-* they could leverage services that HTTP does not provide.&amp;nbsp; WS-Eventing&amp;nbsp;provides asynchronous&amp;nbsp;"push" &amp;nbsp;notifications, WS-Enumeration supports the traversal of collections of resources, and WS-Security, WS-Trust, and WS-SecureConversation provide a security infrastructure. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;WS-Management leverages some&amp;nbsp;key benefits of SOAP such as its protocol neutrality while adopting some of the REST abstractions to avoid&amp;nbsp;the complexity of an&amp;nbsp;RPC API for all possible management service invocations.&amp;nbsp; In other words, it exemplifies what Jon Udell calls &lt;a href="http://blog.jonudell.net/2007/06/05/ws-justright-revisited/"&gt;WS-JustRight&lt;/a&gt;&amp;nbsp;for its intended domain: "I stand by what I’ve been saying all along, in a variety of places including &lt;a href="http://www.infoworld.com/article/05/09/12/37FEsoaevolve_1.html"&gt;this InfoWorld cover story&lt;/a&gt;: there’s WS-Heavy, there’s WS-Lite, and for every situation there’s a WS-JustRight that may rely on elements of one, the other, or both. The Richardson/Ruby book brings much-needed clarity to the WS-Lite end of the tolerance continuum, and that’s a great thing. But when we celebrate one end of the continuum, why must we deprecate the other?"&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3106211" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>WS-* and the Hype Cycle</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2007/05/21/ws-and-the-hype-cycle.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2007/05/21/ws-and-the-hype-cycle.aspx</id><published>2007-05-21T15:24:00Z</published><updated>2007-05-21T15:24:00Z</updated><content type="html">&lt;p mce_keep="true"&gt;There's a persistent theme talked up by WS-*ophobes that it's all just a &lt;a href="http://www.dehora.net/journal/2007/05/district_1.html" mce_href="http://www.dehora.net/journal/2007/05/district_1.html"&gt;fad&lt;/a&gt;, rapidly sliding down toward the "Trough of Dilillusionment" in the &lt;a href="http://www.gartner.com/pages/story.php.id.8795.s.8.jsp" mce_href="http://www.gartner.com/pages/story.php.id.8795.s.8.jsp"&gt;Gartner&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Gartner's_Hype_Cycle" mce_href="http://en.wikipedia.org/wiki/Gartner's_Hype_Cycle"&gt;Hype Cycle&lt;/a&gt;. I've come to the opposite conclusion after six weeks back in the web services world.&amp;nbsp; The WS technologies are taking hold, deep down in the infrastructure, doing the mundane but mission critical work for which they were designed.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Let's consider one example, &lt;a href="http://www.dmtf.org/standards/published_documents/DSP0226.pdf" mce_href="http://www.dmtf.org/standards/published_documents/DSP0226.pdf"&gt;WS-Management&lt;/a&gt;, which I had barely heard of when I started in CSD Interoperability. It's stated purpose is:  &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;To promote interoperability between management applications and managed resources, this specification identifies a core set of Web service specifications and usage requirements that expose a common set of operations central to all systems management. This comprises the abilities to&lt;br&gt;• Get, put (update), create, and delete individual resource instances, such as settings and dynamic values,&lt;br&gt;• Enumerate the contents of containers and collections, such as large tables and logs,&lt;br&gt;• Subscribe to events emitted by managed resources, and&lt;br&gt;• Execute specific management methods with strongly typed input and output parameters.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;At first glance&amp;nbsp;this appears to duplicate widely deployed bits of the web.&amp;nbsp; For example, it depends on the &lt;a href="http://www.tbray.org/ongoing/When/200x/2004/09/18/WS-Oppo" mce_href="http://www.tbray.org/ongoing/When/200x/2004/09/18/WS-Oppo"&gt;oft&lt;/a&gt;-&lt;a href="http://www.mnot.net/blog/2006/03/15/transfer" mce_href="http://www.mnot.net/blog/2006/03/15/transfer"&gt;criticized&lt;/a&gt; WS-Transfer spec, and some are &lt;a href="http://www.tbray.org/ongoing/When/200x/2005/09/21/Atom-Protocol" mce_href="http://www.tbray.org/ongoing/When/200x/2005/09/21/Atom-Protocol"&gt;advocating&lt;/a&gt; using Atom and the Atom Publishing Protocol rather than WS-* for describing collections and subscribing to notifications of their contents.&amp;nbsp; On closer examination,&amp;nbsp;WS-Management is widely used today in&amp;nbsp;situations where the web-scale alternatives&amp;nbsp;really don't fit, such as&amp;nbsp;deep within operating systems or in the firmware of chips.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480728.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa480728.aspx"&gt;For example&lt;/a&gt;:  &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;For IT Professionals, Windows Server and Microsoft Operations Manager will enable the management of heterogeneous software and hardware systems using WS-Management. For consumers, Windows Vista will support the discovery of and interaction with Web services-enabled devices, such as printers, digital cameras, and home control systems.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Those devices may or may not be "on the Web"; increasingly support is built into the firmware of the devices. For that matter, the&amp;nbsp;heterogenous software systems being managed may include HTTP servers.&amp;nbsp;&amp;nbsp;Furthermore, this is not a Windows-specific technology, it is actively developed and supported across platforms&amp;nbsp;by &lt;a href="http://devresource.hp.com/drc/technical_white_papers/soa_stds/index.jsp#wsmanagement" mce_href="http://devresource.hp.com/drc/technical_white_papers/soa_stds/index.jsp#wsmanagement"&gt;HP&lt;/a&gt;, &lt;a href="http://oss.intel.com/en-us/projects/" mce_href="http://oss.intel.com/en-us/projects/"&gt;Intel&lt;/a&gt;, and &lt;a href="http://www.gridtoday.com/04/1018/103995.html" mce_href="http://www.gridtoday.com/04/1018/103995.html"&gt;others&lt;/a&gt;.&amp;nbsp;  &lt;p&gt;Another example where WS standards and technologies are quietly taking root is in the area of identity management.&amp;nbsp;&amp;nbsp; Both the major identity management stacks (&lt;a href="http://xml.coverpages.org/ni2003-07-08-b.html" mce_href="http://xml.coverpages.org/ni2003-07-08-b.html"&gt;WS-Trust / WS-Federation&lt;/a&gt; and &lt;a href="http://www.projectliberty.org/" mce_href="http://www.projectliberty.org/"&gt;Liberty&lt;/a&gt;) depend on Web services technologies, and there is no credible "pure Web" alternative.&amp;nbsp;The "identity metasystem" supported by &amp;nbsp;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480189.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa480189.aspx"&gt;Windows Cardspace&lt;/a&gt; and several other &lt;a href="http://blogs.zdnet.com/microsoft/?p=151" mce_href="http://blogs.zdnet.com/microsoft/?p=151"&gt;vendors and open source projects&lt;/a&gt; that to some extent bridges these stacks is getting real adoption, inching WS-* up toward the "plateau of productivity."  &lt;p&gt;Perhaps we are seeing a repetition of the pattern that made XML ubiquitous.&amp;nbsp; It was &lt;a href="http://xml.coverpages.org/bosak-xmlapps1.html" mce_href="http://xml.coverpages.org/bosak-xmlapps1.html"&gt;originally conceived as "SGML for the Web&lt;/a&gt;", but that vision has &lt;a href="http://www.xml.com/pub/a/2006/03/15/next-web-xhtml2-ajax.html?page=1" mce_href="http://www.xml.com/pub/a/2006/03/15/next-web-xhtml2-ajax.html?page=1"&gt;never materialized&lt;/a&gt; -- non-wellformed HTM, Javascript, &amp;nbsp;and proprietary formats such as PDF and Flash predominate on the Web itself.&amp;nbsp;XML has become pervasive as a&amp;nbsp;convenient format for less glamorous tasks,&amp;nbsp;such as configuration files, summaries of site contents (RSS and Atom), and lists of lists (OPML). &amp;nbsp;Likewise, at the peak of the hype cycle the web services technologies were promoted as part of a &lt;a href="http://www.infoworld.com/articles/hn/xml/01/06/22/010622hnballmer.html" mce_href="http://www.infoworld.com/articles/hn/xml/01/06/22/010622hnballmer.html"&gt;grand vision&lt;/a&gt;.&amp;nbsp; The post-Vista world may not look exactly like the 2001-vintage Longhorn vision, but WS technologies are doing the unglamorous work for which they were actually designed.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In short, from what I have learned recently, the trajectory of WS-* isn't pointing toward oblivion, it looks headed toward the same sort of pragmatic&amp;nbsp;ubiquity that XML has achieved.&amp;nbsp;&amp;nbsp;That's not to say all is rosy; there is&amp;nbsp;lots of confusion and dissension, again just like there was in the early days of the Web and XML.&amp;nbsp;&amp;nbsp;&amp;nbsp;Likewise, "ubiquity" doesn't mean that&amp;nbsp;the WS technologies are the best or the only option across the board, &amp;nbsp;but that it they are increasingly available as a very&amp;nbsp;viable&amp;nbsp;option when developers need protocol-neutrality, security, identity, management capability, etc. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2768743" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>The Secret of LINQ Design</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2007/05/15/the-secret-of-linq-design.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2007/05/15/the-secret-of-linq-design.aspx</id><published>2007-05-15T14:23:58Z</published><updated>2007-05-15T14:23:58Z</updated><content type="html">&lt;p&gt;A team within Microsoft ran an "app week" recently to build applications that implement customer scenarios using a variety of LINQ technologies.&amp;nbsp; The feedback on LINQ to XML was uniformly positive. The participants were not XML geeks, but more like our target audience: developers who come across XML now and then and need to deal with it without undue fuss. This group found that they were immediately productive without having to read the documentation, because the APIs worked the way one intuitively thought they should.&amp;nbsp; This set off an interesting internal thread speculating on why LINQ to XML was successful in achieving its design objectives in a world (and to be honest, a company) where this&amp;nbsp;is not&amp;nbsp;the norm.&lt;/p&gt; &lt;p&gt;I saw &lt;a href="http://www.technologyreview.com/printer_friendly_article.aspx?id=18621"&gt;The Secret of Apple Design&lt;/a&gt; and was struck by some similarities with how LINQ to XML came about. The article quotes extensively from design guru and former Apple exec &lt;a href="http://en.wikipedia.org/wiki/Donald_Norman"&gt;Donald Norman&lt;/a&gt;.&amp;nbsp; For example:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;"[Jobs] had a single, cohesive image of the final product and would not allow any deviation, no matter how promising a new proposed feature appeared to be, no matter how much the team complained. Other companies are more democratic, listening to everyone's opinions, and the result is bloat and a lack of cohesion.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Thie quote points to the first similarity --&amp;nbsp;the existence of a designer with the skill to make hard decisions and the authority to make them stick.&amp;nbsp;In LINQ, the Steve Jobs role&amp;nbsp;is played by &lt;a href="http://channel9.msdn.com/showpost.aspx?postid=159952"&gt;Anders Hejlsberg&lt;/a&gt;. Superficially, the LINQ design teams&amp;nbsp; look a lot like W3C working groups, with regular meetings where requirements are interpreted and fine-tinued, and proposals for alternative ways of achieving the requirements are presented and discussed, sometimes for months. &amp;nbsp;In sharp contrast to the designed-by-committee XML technologies such as DOM, however, LINQ has an architect who makes decisions, not a chair who drives consensus.&amp;nbsp; In the LINQ design meetings, all opinions were considered, and previous decisions open for reconsideration, but there is no pretense of democracy.&amp;nbsp;&amp;nbsp;When it came time end a discussion, there wasn't a vote, or weasel-wording to paper over disagreements, there was a decision.&lt;/p&gt; &lt;p&gt;The quote also highlights the importance of&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;conceptual integrity&lt;/a&gt;.&amp;nbsp;Anders began what is now called LINQ to XML with a clear vision for how a modern XML API could work, with C# functional constructors and LINQ queries providing an essentially functional approach to working with XML.&amp;nbsp; Lots of ideas were proposed, and lots of people complained when they were removed or rejected, but the goal of internal cohesion and alignment with LINQ was paramount.&amp;nbsp; Of course, XML reality intervened in various unavoidably ugly ways, but much design effort was put into minimizing and isolating the ugliness.&lt;/p&gt; &lt;p&gt;The third similarity I noted is an insistence on simplicity over feature richness.&amp;nbsp; Quoting again from the article:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;"The hardest part of design ...is keeping features out." Simplicity,&amp;nbsp;[Norman] says, is in itself a product differentiator, and pursuing it can lead to innovation. &lt;/em&gt; &lt;p&gt;&lt;em&gt;Rolston agrees. "The most fundamental thing about Apple that's interesting to me," he says, "is that they're just as smart about what they don't do. Great products can be made more beautiful by omitting things."&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;A year ago, I wrote a post on what &lt;a href="http://blogs.msdn.com/mikechampion/archive/2006/06/30/652896.aspx"&gt;LINQ to XML would &lt;strong&gt;not&lt;/strong&gt; do&lt;/a&gt;, such as guarantee that a tree in memory is well-formed, support XML 1.1, offer more than bare minimum support for DTDs, round-trip entity references, and so forth.&amp;nbsp; Likewise, the design team decided to &lt;a href="http://blogs.msdn.com/xmlteam/archive/2007/03/05/streaming-with-linq-to-xml-part-1.aspx"&gt;remove the streaming input API&lt;/a&gt; that had been extensively discussed and prototyped.&amp;nbsp; In many such cases, Anders decided that the functionality benefit wasn't worth the complexity cost. &lt;/p&gt; &lt;p&gt;Of course, the real secret to successful design is the skill and tenacity of the designers and the implementers; giving a chief designer the authority to purse cohesiveness and simplicity just enables success, it doesn't assure it. Likewise,&amp;nbsp;LINQ's technical success doesn't guarantee real world success. For example,&amp;nbsp;for all &amp;nbsp;its aesthetic flaws, DOM has been an undeniable success story in helping make XML and dynamic HTML reasonably usable by developers, and has&amp;nbsp;helped the world move from mostly proprietary&amp;nbsp;to interoperable data formats over the last 10 years.&amp;nbsp;&amp;nbsp; It is possible that the same ugly compromises&amp;nbsp;that promote&amp;nbsp;committee consensus actually help overall adoption.&amp;nbsp; Likewise, just as Apple's design aesthetic pays off because it appeals to an upscale market willing to pay a premium for form and fashion on top of functionality, perhaps LINQ to XML will appeal mostly to a niche in the developer community.&amp;nbsp; We shall see ... but I bet a couple of years on this and I'm convinced that this technology will be widely adopted on the Microsoft platform and will spark a round of competitive innovation on other platforms.&amp;nbsp; &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2650168" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Accelerating Evolution: LINQ News from Mix 2007</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2007/05/02/linq-news-shameless-no-longer-self-promotion.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2007/05/02/linq-news-shameless-no-longer-self-promotion.aspx</id><published>2007-05-03T02:49:42Z</published><updated>2007-05-03T02:49:42Z</updated><content type="html">&lt;p&gt;There is a lot of interesting (and once confidential) stuff that came out of the Mix conference this week.&lt;/p&gt; &lt;p&gt;Jon Udell's &amp;nbsp;"&lt;a href="http://blog.jonudell.net/2007/05/01/watching-anders-hejlsberg-reinvent-the-relationship-between-programs-and-data/"&gt;Watching Anders Hejlsberg reinvent the relationship between programs and data"&lt;/a&gt;&amp;nbsp;... offers an enthusiastic summary:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;A lot of the time, when we use the web, we’re effectively performing joins among data sources. You visit one site to look up some data, then you grab some of it and plug it into another site. If you’re lucky, somebody will have built a mashup, on a third site, to facilitate that join. But what if your browser had the data manipulation chops to help you do that mashup directly? I’m hoping that technologies like Silverlight and LINQ will enable things like that to happen.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Jon doesn't elaborate a whole lot&amp;nbsp;on what "reinventing the relationship between programs and data" means.&amp;nbsp; Fortunately, Anders' &lt;a href="http://sessions.visitmix.com/silverlight/v1/videos/DEV04.wmv"&gt;LINQ presentation&lt;/a&gt;&amp;nbsp;itself&amp;nbsp;is now online.&amp;nbsp; Some points he makes about the new relationship between programs and data include:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Data != Objects&amp;nbsp; - Now you can query data without it being in a database ... LINQ offers "native support for queries as a first class concept". C# and VB now offer the same expresive power as SQL and XQuery built right into the languages.&amp;nbsp; LINQ unifies and brings to a higher level of abstraction the whole notion of data-driven programming.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Imperative-&amp;gt;Declarative - Programmers can focus on "what now&amp;nbsp;how" without having to learn a new language such as SQL or XQuery.&amp;nbsp; Imperative approaches have run their course; we won't see 10x productivity improvements anytime soon, nor will compilers be able to automatically adapt imperative code to new hardware.&amp;nbsp; But the declarative approach will support 10x improvements in the performance of data-driven applications and the "what not now" approach allows compilers to adapt to multicore architectures and so forth.&amp;nbsp; The key is to adapt programming styles to a more declarative, query-oriented style.&amp;nbsp; LINQ supports this.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;OO programming languages have no notion of projection, you have to do it with&amp;nbsp;tedious declarations and imperative transformations.&amp;nbsp; LINQ makes this much easier, with&amp;nbsp;anonymous types and functional construction.&amp;nbsp; In the demo, Anders usees this approach to transform XML data into business objects with very little code, and no schemas or code generators.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;I'd elaborate a bit on the last point.&amp;nbsp; Lots of technologies exist that leverage some &lt;em&gt;explicit mapping&lt;/em&gt; from raw data to programming objects; that mapping might be a conceptual model, a schema, an ontology, or an adapter.&amp;nbsp; For example, XQuery is used to integrate and query over diverse data sources, but only after the data has been &lt;em&gt;explicitly&lt;/em&gt; transformed from its native representation (e.g. SQL tables) to an XQuery data model.&amp;nbsp; LINQ to Objects and LINQ to XML,&amp;nbsp;on the other hand exploit the IEnumerable&amp;lt;T&amp;gt;, aka &lt;a href="http://en.wikipedia.org/wiki/Monads_in_functional_programming"&gt;monads&lt;/a&gt;/&lt;a href="http://research.microsoft.com/~emeijer/Papers/XLinq%20XML%20Programming%20Refactored%20(The%20Return%20Of%20The%20Monoids).htm"&gt;monoids&lt;/a&gt;, that is implicit in almost all collections of data, or exposed as axes in XML documents.&amp;nbsp; To me, that's the essence of LINQ's reinvention of the relationship between programs and data: conceptualizing data in an object graph, database, XML document (or &lt;a href="http://weblogs.asp.net/fmarguerie/archive/2006/06/26/Introducing-Linq-to-Amazon.aspx"&gt;Amazon.com catalog&lt;/a&gt;,&amp;nbsp;&amp;nbsp;&lt;a href="http://iqueryable.com/2007/04/16/LINQToLDAP.aspx"&gt;LDAP directory&lt;/a&gt;, &amp;nbsp;ad infinitum) allows developers to write smaller, cleaner, more parallelizable, etc. programs with much less concern for the plumbing. &lt;p&gt;&amp;nbsp; &lt;p&gt;Putting all this into a realistic application, Aaron Dunnington and Tim Scudder of the Data Programmability / XML team gave a &lt;a href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/videos/DEV16.wmv"&gt;Mix Presentation that exploits the XML features in Silverlight&lt;/a&gt; clients and LINQ, etc. on the server.&amp;nbsp; Their demo is called "The Socializer", showing how Silverlight applications can bring all sorts of social networking data together and display it in a visually appealing way. Technologies&amp;nbsp;used in the demo include Silverlight, C# 3.0, &amp;nbsp;LINQ to Objects,&amp;nbsp;LINQ to XML,&amp;nbsp;RDF, FOAF and more.&amp;nbsp;  &lt;p&gt;&amp;nbsp; &lt;p&gt;Needless to say, all this Silverlight &lt;a href="http://dondodge.typepad.com/the_next_big_thing/2007/05/silverlight_get.html"&gt;love from unexpected parties&lt;/a&gt; isn't going unchallenged.&amp;nbsp; The most popular statement of the opposing side seems to be the fine rant from &lt;a href="http://diveintomark.org/archives/2007/05/02/silly-season"&gt;Mark Pilgrim&lt;/a&gt;. His most trenchant bits are unquoteable, but the gist of it seems to be that &lt;a href="http://labs.adobe.com/wiki/index.php/Apollo:Documentation:Introducing_Adobe_Apollo"&gt;Adobe&lt;/a&gt; and Microsoft (and Sun's "&lt;a href="http://www.cio.in/news/viewArticle/ARTICLEID=3198"&gt;alternative to Ajax&lt;/a&gt;") indicate the return to the bad old days of proprietary technology and vendor lockin.&amp;nbsp; Astonishingly enough I see it differently: The purely standards-based web is quite functional and interoperable for relatively static content, but the "Web 2.0" demands for browser-centered applications that are dynamic, attractive, and portable are very difficult to meet with currently standardized technologies.&amp;nbsp; As &lt;a href="http://www.cio.in/news/viewArticle/ARTICLEID=3198"&gt;Dan Ingalls of Sun&lt;/a&gt; put it: &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;AJAX sort of deals with all of the old way of doing things. It makes it simpler, which is great, but underneath it’s still all this junky HTML, Document Object Model, CSS, all that stuff, where 30 years ago, we knew how to do that stuff cleanly with a dynamic programming language and a simple graphics model.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;That's NOT to say that Ajax is dead.&amp;nbsp; As far as I know, there was a lot of Microsoft Ajax support announced at Mix, and more in the pipeline.&amp;nbsp; I hope and pray we (inside and outisde MS) don't repeat the IE6 mistake of declaring "junky HTML, DOM, CSS, all that stuff" obsolete and stop maintaining the standards and implementations.&amp;nbsp; It will live on, and improve for some time... while LINQ/Sliverlight/Apollo/Flair/whatever mature and potentially drive a new generation of web standards.&amp;nbsp; But a new generation of web standards won't be invented by committees,&amp;nbsp;but&amp;nbsp;by developers, then polished&amp;nbsp; by competition ... then committees can come along and tidy up.&amp;nbsp; Just like Web 1.0 came about.&lt;/p&gt; &lt;p&gt;It's interesting watching various pundits and analysts read the tea leaves of the numerous LINQ subprojects, Silverlight versions, and incubation projects such as Volta to figure out the "Microsoft" master plan for pulling it all together.&amp;nbsp; Just as customer pain with today's technology&amp;nbsp;drives diverse innovation across the industry, so it does within Microsoft, and the process resembles evolution in action more than intelligent design by a supreme architect.&amp;nbsp; I don't think we're seeing a silly season so much as a &lt;a href="http://en.wikipedia.org/wiki/Cambrian_Explosion"&gt;Cambrian explosion&lt;/a&gt;&amp;nbsp;of new ideas from all sorts of places, and Father Darwin alone knows how it will end up.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2385329" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Reporting for duty on WS-Deathstar</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2007/05/01/reporting-for-duty-on-ws-deathstar.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2007/05/01/reporting-for-duty-on-ws-deathstar.aspx</id><published>2007-05-01T23:37:51Z</published><updated>2007-05-01T23:37:51Z</updated><content type="html">&lt;p&gt;After an enjoyable and extremely educational 2 1/2 years on the core XML team in SQL Data Programmability at Microsoft,&amp;nbsp;I've moved&amp;nbsp;to a position in the Connected Systems Division's Interoperability unit.&amp;nbsp; Responsibilities include representing Microsoft on the W3C, helping with web services standards partnerships, and generally helping the world understand the method behind the apparent WS-Madness, or at least the subset of it that Microsoft endorses.&lt;/p&gt; &lt;p&gt;"Huh?" you might ask.&amp;nbsp; Why voluntarily join the &lt;a href="http://www.loudthinking.com/arc/000602.html"&gt;doomed crew of WS-Deathstar&lt;/a&gt;?&amp;nbsp; Or maybe the WS-* crowd are not evil, they're&amp;nbsp;&amp;nbsp;&lt;a href="http://bp1.blogger.com/_aOYeAe3Q1wc/RhRp7feSWxI/AAAAAAAAAC4/Pi8Iv6mN2LU/s1600-h/WS+Sand.jpg"&gt;weenies who get sand kicked in their faces&lt;/a&gt;?&amp;nbsp;As with XML itself, the point isn't whether "&lt;a href="http://blog.jclark.com/2007/04/do-we-need-new-kind-of-schema-language.html"&gt;any damn fool could produce a better data format&lt;/a&gt;" it's whether&amp;nbsp;the web services specs provide a pragmatic foundation for&amp;nbsp;actual interoperabiliy. Just as XML quietly became pervasive while its numerous limitations were being flamed by the cognoscenti, the WS technologies are quietly taking root in all sorts of places where interoperable identity, security, reliability, management, etc. concerns trump geek aesthetics.&amp;nbsp; There's no disputing that skillful people can implement systems with all these properties without WS-*, but there is much to be said for building these capabilities into the infrastructure of Windows, .NET, Websphere, Java, Apache, etc., in a standardized and interoperable way. I don't pretend that goal has been achieved, but I'm convinced its achieveable.&lt;/p&gt; &lt;p&gt;&amp;nbsp;Another part of my reason for moving&amp;nbsp;is that &lt;a href="http://download.microsoft.com/download/5/8/6/5868081c-68aa-40de-9a45-a3803d8134b8/xlinq_overview.doc"&gt;LINQ to XML&lt;/a&gt; is close enough to being done that I can declare victory and move on, hoping that its success will rebalance my karma after the &lt;a href="http://search.live.com/results.aspx?q=xml+%22dom+sucks%22"&gt;beating&lt;/a&gt; it &lt;a href="http://www.artima.com/intv/xmlapis.html"&gt;suffered&lt;/a&gt; from my role in DOM :-).&amp;nbsp; I'm still involved in the project to some extent, backing up &lt;a href="http://blogs.msdn.com/ralflammel/"&gt;Ralf&lt;/a&gt; as he assumes the role of LINQ to XML PM and doing my bit to evangelize the LINQ XML story in &lt;a href="http://blogs.msdn.com/xmlteam/archive/2007/04/20/linq-to-xml-changes-in-orcas-beta1.aspx"&gt;Orcas&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/xmlteam/archive/2007/04/30/live-from-mix07-silverlight-and-xml.aspx"&gt;Silverlight&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;But there are some more substantive attractions to WS-Darkness.&amp;nbsp; First, the overall WS-* framework doesn't deserve its bad reputation among XML and Web geeks. It's hard to call anything designed by that many committees elegant, but there is an underlying conceptual integrity in it that I've come to appreciate over the years. That's not exhibited by all the specs, to be sure ...don't ask me to defend XSD or WSDL!&amp;nbsp; There's no disputing that current interoperability above the SOAP level can be problematic, but much of this can be traced to incorrect implementations and problems mapping XSD to underlying object systems. It will take longer to get full interoperability at the higher levels of the WS stack, but I'm convinced that it will be much more practical to complete the work that is underway than to start over with some new paradigm, or to return to the bad old days of one-off data contracts and armies of consultants needed for everything.&lt;/p&gt; &lt;p&gt;&amp;nbsp;The stock&amp;nbsp;phrase in the WS-* specs&amp;nbsp;is that they are "designed to be composed with each other to provide a rich messaging environment".&amp;nbsp; I&amp;nbsp;think&amp;nbsp;the term&amp;nbsp;"&lt;a href="http://ironick.typepad.com/ironick/2003/07/new_soap_reinve.html"&gt;Aspect-oriented messaging&lt;/a&gt;" better captures the underlying architectural principle that the WS specs&amp;nbsp;can work separately or be&amp;nbsp;composed&amp;nbsp;together to provide&amp;nbsp;a variety of message services:&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;[SOAP 1.2] provides a much simpler and more powerful aspect-oriented mechanism for extending the SOAP processing model. New aspect-oriented&amp;nbsp;features can be added to SOAP by defining additional SOAP headers and how to process them. Such features can range from transport-level features such as security and reliable messaging to business-level features such as spending-policy enforcement to personalization and differentiated service. &lt;b&gt;Bottom Line:&lt;/b&gt; Users who consider SOAP to be just a low-level RPC mechanism should review SOAP v1.2 to understand its potentially profound architectural implications for distributed computing.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;"Ironick" indeed, that's by the same Nick Gall whose &lt;a href="http://www.w3.org/2007/01/wos-papers/gall"&gt;Web of Services for Enterprise Computing whitepaper&lt;/a&gt; got so much link love from the WS-skeptics.&amp;nbsp;Gall may or may not have come to regret his previous enthusiasm for SOAP's architectural principles, but in any event the&amp;nbsp;main point of his position paper isn't &amp;nbsp;isn't so much&amp;nbsp;about WS architecture as it is about W3C's&amp;nbsp;philosophy:&amp;nbsp;"While there is nothing wrong with&amp;nbsp;[the various WS-* specs] &amp;nbsp;--in fact there is great value in having the major middleware vendors finally agree on middleware standards after so many years of proprietary middleware protocols--the problem is that such work has nothing to do with web architecture or the W3C."&amp;nbsp; That may be a defensible position, but the fact remains that the W3C management and staff have worked hard to give at least some of the more fundamental and web-related WS specs a home at that organization.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;Which leads to my second point:&amp;nbsp; "&lt;a href="http://www.addsimplicity.com/adding_simplicity_an_engi/2006/12/its_a_tool_not_.html"&gt;It's a tool, not a religion&lt;/a&gt;". &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;I have spent time around job sites. I can promise you that you'll find circular saws, chop saws, and table saws. Is there overlap in functionality and potential application of these saws? Absolutely. Why have all three then? Well, because each is particularly good for certain types of cutting chores and less optimal for others. Contractors, like mechanics, want a broad set of tools available so they can have the optimal tool for each task. &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Why then do we, as software engineers, have to work so hard to reduce our toolbox to the ultimate tool? There is this tendency to look for the Swiss Army language with supporting framework that will be the optimal solution for every problem in the world. The simple reality is that such a language and framework can never be created.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I've always been annoyed by the&amp;nbsp;zealotry manifested in the "SOAP vs REST" debate.&amp;nbsp;&amp;nbsp;The&amp;nbsp;overhyped WS marketing and the RESTifarian pushback in 2001-2002 or&amp;nbsp;so had the&amp;nbsp;effect of people "flipping the bozo bit"&amp;nbsp;on each other wholesale.&amp;nbsp; We're just now seeing&amp;nbsp;some&amp;nbsp;exploration of the sensible middle position -- the native Web technologies are powerful and deserve first class support in&amp;nbsp;the&amp;nbsp;services-oriented tools and specs, and at least some of the WS technologies are useful on the Web as well as the enterprise, especially in the realm of identity and security.&amp;nbsp; People on the WS side are finally understanding the the potential of the SOAP GET binding, and maybe the REST folks are starting to understand the oft-maligned&amp;nbsp;WS-Transfer&amp;nbsp; ("HTTP over SOAP over HTTP") is not quite so pointless in a multi-hop, multi-protocol world.&lt;/p&gt; &lt;p&gt;Finally,&amp;nbsp;the supposed coup de grâce in most &lt;a href="http://blogs.mulesource.com/?p=92"&gt;skewerings&lt;/a&gt; of WS-* is to point out the &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/11/16/WS-Socratic"&gt;complexity&lt;/a&gt; of the &lt;a href="http://tomayko.com/weblog/2004/11/19/sloppy-kisses"&gt;web&lt;/a&gt; of &lt;a href="http://www.infoworld.com/article/06/01/31/74964_HNwebservicesissues_1.html"&gt;specs&lt;/a&gt; and frameworks.&amp;nbsp; The best response I've seen is by &lt;a href="http://yetanothersoftwareblog.blogspot.com/2007/04/no-day-at-beach-for-web-services.html"&gt;Charles Zedlewski&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;But I think the kvetching over the WS-* complexity is pretty overblown. What struck me looking at &lt;a href="http://www.innoq.com/soa/ws-standards/poster/innoQ%20WS-Standards%20Poster%202007-02.pdf"&gt;Innoq’s diagram&lt;/a&gt; is how similar it is to the Java class library (or any other major language’s class library for that matter).&lt;/em&gt;  &lt;p&gt;&lt;em&gt;... &amp;nbsp;you don’t have to learn all the inner workings of either standard to make good use of it. You either:&lt;br&gt;1) Learn and choose to leverage only the most useful bits of the standard that are relevant for your project.&amp;nbsp;... Or you:&lt;br&gt;2) Utilize some combination of tools and platforms that hide the complexity of the underlying standards.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Anyway, I'm having fun getting back up to speed on all this and getting back in the blog debates I swore off awhile ago.&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2365055" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Convergence Zones</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2007/01/12/convergence-zones.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2007/01/12/convergence-zones.aspx</id><published>2007-01-12T20:37:51Z</published><updated>2007-01-12T20:37:51Z</updated><content type="html">&lt;p&gt;I had a &lt;em&gt;lot&lt;/em&gt; of time to think about &lt;a href="http://lists.xml.org/archives/xml-dev/200701/msg00116.html"&gt;Elliotte Harold's call for XML predictions&lt;/a&gt; on the way home from Redmond Wednesday night.&amp;nbsp; We got several inches of snow, which is rare here and the highway folks just can't deal with . There were massive traffic tieups, and lots of time spent staring off into the snowflakes. Most of us commuters were caught off-guard by the snow, since the forecast was something like "cloudy with a chance of snow showers".&amp;nbsp; That's not inaccurate, but not very helpful ... like most of those "successful" beginning-of-2006 predictions pundits are bragging about this month.&lt;/p&gt; &lt;p&gt;Our unexpectedly intense snow yesterday was created by a &lt;a href="http://www.komotv.com/weather/faq/4306427.html"&gt;Puget Sound Convergence Zone&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Those northwest winds will collide with the Olympic Mountains. Part of the air flow will be deflected east down the Strait of Juan de Fuca, while the other part will be deflected down the western side of the Olympics. When the northern branch reaches the I-5 Corridor and the Cascade Mountains, it will then be forced to the south. Meanwhile, when the southern branch reaches the I-5 corridor and Cascade Mountains past the southern side of the Olympics, it will then turn to the north. &lt;/em&gt; &lt;p&gt;&lt;em&gt;Eventually, the south-flowing branch and the north-flowing branch will converge. When that happens, the air has nowhere to go but up. Rising air will lead to convection. That will lead to cloud and storm development.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;That seems like a good metaphor for why technology prediction is hard.&amp;nbsp; The&amp;nbsp;interesting stuff happens&amp;nbsp;in the "convergence zones" where different streams of ideas and technologies collide and create upward convection currents (driven partly by hot air and vapor I suppose).&amp;nbsp; The World Wide Web arose out of a convergence of the internet and SGML-ish markup; &amp;nbsp;the Internet Bubble arose out of a convergence of this enabling technology and the vast numbers of PCs in every home and office; XML arose out of a convergence of the&amp;nbsp;capability for&amp;nbsp;universal interoperability spawned by the SGML and the Web, &amp;nbsp;and the demand for a Web-like experience in a whole range of document and data products that was accelerated by the Bubble.&amp;nbsp;  &lt;p&gt;But not every wind / technology convergence creates a &lt;em&gt;convergence&lt;/em&gt; &lt;em&gt;zone.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/em&gt;See&amp;nbsp;the "Meteorological Mumbo-Jumbo" &lt;a href="http://www.komotv.com/news/5141057.html"&gt;section in this article&lt;/a&gt; about our weather yesterday for an explanation of how this weather pattern was different than the other 20 recent occasions where the winds were about right:  &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;This time, the cold air is, at least initially, coming from the Gulf of Alaska. Normally, that pattern doesn't make for much snow because the air has a long time to moderate over the warmer ocean waters. But the air mass up there is SO cold ...&amp;nbsp;the air was still cold enough to snow by the time it made it here. &lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;In technology, lots&amp;nbsp;of things -- technologies, personalities, zeitgeist -- have to come together at just the right time.&amp;nbsp;&amp;nbsp; Why was "Dynamic HTML" a bit of a yawner in the late '90s but "AJAX" a big hit in 2006? Why did the Newton flop and then the Palm become a hit a few years later?&amp;nbsp; Why is &lt;a href="http://yaml.org/"&gt;YAML&lt;/a&gt; a backwater but &lt;a href="http://json.org/"&gt;JSON&lt;/a&gt; the Next Big Thing this year?&amp;nbsp;I don't pretend to know.&amp;nbsp; I do think, however, that we know&amp;nbsp;enough&amp;nbsp;about the XML technology landscape and the forces that interact with it and each other to at least talk about some likely convergences and divergences.  &lt;p&gt;First, as the weather truism goes, the best &lt;a href="http://iri.columbia.edu/climate/forecast/tutorial/"&gt;prediction of tomorrow's weather is today's weather&lt;/a&gt;.&amp;nbsp; 2007 will look a lot like 2006.&amp;nbsp; Duh.&amp;nbsp; Overall, XML has become a fairly mature and slow-changing technology because there is a 10-year legacy holding back any radical change, e.g. a mass migration to RELAX NG, JSON, LINQ, or whatever.&amp;nbsp; We will see a gradual migration to XSLT 2.0, growing interest and support for XQuery (as a query language!), continued improvements in XML Schema 1.0 interoperability and growing interest in 1.1 as it solidifies, and so on. &lt;p&gt;Second, there's a strong prevailing wind that puts XML almost everywhere, even places where it might not belong (e.g., multi-gigabyte log files!). But the pervasiveness of XML means that the "XML community" has less and less in common.&amp;nbsp;&amp;nbsp; The streams that collided with Mt. NonInteroperable and reconverged to create XML 10 years ago have shifted because Mt. NonInteroperable has been greatly eroded.&amp;nbsp; People care more about interoperable documents OR data OR messages than interoperable documents AND data AND messages, so the fact that XML underlies all of their interop stories is not particularly interesting anymore.&amp;nbsp;What predictions does this pattern imply?  &lt;ul&gt; &lt;li&gt;&amp;nbsp;Assuming that nothing pops up to reconverge these separate streams, we'll probably see a continuing decline in the popularity in generic XML forums, books, conferences, etc., and more integration of domain-focused XML topics into more&amp;nbsp;specialized venues.  &lt;li&gt;Likewise, we'll probably see an increase in the use of niche XML-related technologies, such as RELAX NG for purely textual documents and JSON for web applications, &lt;em&gt;in the domains for which they are well-suited&lt;/em&gt;.&amp;nbsp;  &lt;li&gt;Conversely, we'll see a decline of interest in "one size fits all" approaches.&amp;nbsp; For example, it looks (from the outside) like the &lt;a href="http://www.w3.org/XML/EXI/#News"&gt;W3C Efficient XML Interchange&lt;/a&gt; people are focusing on one problem -- the fact that XML is too bloated for many limited-bandwidth scenarios -- and not trying all that hard to come up with something that is &lt;a href="http://www.w3.org/TR/xbc-characterization/#N102EC"&gt;smaller / faster / cheaper / more universal&lt;/a&gt; than XML for all scenarios.&amp;nbsp;  &lt;li&gt;Finally, the&amp;nbsp;breadth of XML's adoption comes at the expense of depth. This suggests&amp;nbsp;that we'll see more of the pattern that &lt;a href="http://2006.xmlconference.org/proceedings/162/presentation.html"&gt;Jon Bosak decried in his XML 2006 keynote&lt;/a&gt;: "business users will never adopt a solution that depends on an additional XSLT pass because it would require them to learn something new (never mind that this “new” thing had been widely employed in other contexts for years)." Those vendors may know their customers, and suspect that they really don't want to learn yet another XML technology just because it would offer an elegant solution to a somewhat peripheral problem. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Third, like the wind XML is mostly invisible -- it's&amp;nbsp;hidden behind the firewall, embedded in ZIP files, or just called something else. What's more, most people really don't &lt;em&gt;want&lt;/em&gt; to see the XML that surrounds them. They want to see readable documents, updated feeds, processable objects, and delivered services.&amp;nbsp; The better the XML is hidden, the more the bulk of the world likes it. Being out of sight, it's also out of mind.&amp;nbsp; Few noticed that "Asynchronous Javascript And XML" actually refers to the&amp;nbsp;XmlHttpRequest &lt;em&gt;API&lt;/em&gt; much more than XML &lt;em&gt;content&lt;/em&gt;, so the substitution of JSON for XML as the typical bits on the wire format caused little concern. Actually that understates the case -- most people are happy to use more familiar technologies instead of XML or in front of XML.&amp;nbsp;&amp;nbsp;What might we predict from this pattern?  &lt;ul&gt; &lt;li&gt;I'll make a (self serving!) prediction that the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa479865.aspx"&gt;LINQ&lt;/a&gt; approach of focusing on what is common across data formats will get more mainstream traction than will the notion that users want specialized tools for their XML data.  &lt;li&gt;Tools that make it relatively easy to consume XML directly into programming objects such as &lt;a href="http://blogs.msdn.com/xmlteam/archive/2006/11/27/typed-xml-programmer-welcome-to-linq.aspx"&gt;LINQ to XSD&lt;/a&gt; will continue to mature technically and be adopted by pragmatic developers. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;What about some of the XML technologies that have been swirling around out there ...&amp;nbsp; What landfalls may we expect in 2007? Again, the whole point of the argument here is that only incremental change can be foreseen &lt;em&gt;unless&lt;/em&gt; XML technologies get tangled up in some larger crosscurrents.&amp;nbsp; So, the Semantic Web will remain highly domain-specific (e.g., the biomedical arena where well-established taxonomies and ontologies really can be leveraged by OWL inferences, SPARLQ query processors, etc.).&amp;nbsp; I can't think of any larger social forces that might collide to provide upward convection for the semantic web technologies other than some low-probability event such as a major terrorist attack being thwarted as a direct result of Homeland Security's semantic technology investment.&amp;nbsp; How about SVG, or XML 1.1, or some other major XML technology that hasn't gotten mainstream support (ahem, partly because of decisions in Redmond)?&amp;nbsp; I don't foresee any major shifts in the winds here ... but then again I didn't know about the Puget Sound Convergence Zone the other day until the streets near home were iced over.&lt;/p&gt; &lt;p&gt;What great technological, economic, or political forces can you envision changing the XML climate in the next year?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1457075" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Since Don put me up to it ....</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2007/01/02/since-don-put-me-up-to-it.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2007/01/02/since-don-put-me-up-to-it.aspx</id><published>2007-01-02T17:27:20Z</published><updated>2007-01-02T17:27:20Z</updated><content type="html">&lt;p&gt;I don't really want to perpetuate the 5 things meme, but &lt;a href="http://www.donxml.com"&gt;DonXML&lt;/a&gt;&amp;nbsp;asked nicely (and I'll take the opportunity to shamelessly plug some favorite people, products, and organizations):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;I came to the software industry rather late in life after a mis-spent youth in Political Science at the &lt;a href="http://umich.edu/"&gt;University of Michigan&lt;/a&gt;.&amp;nbsp; I discovered that it was more fun writing the code than writing the dissertation, not to mention the fact that the job market for junior programmers was immensely larger and more lucrative than the market for assistant professors circa 1980.&amp;nbsp; Furthermore, programming gave me the luxury of staying in Ann Arbor for 25 more years.  &lt;li&gt;My longest lasting hobby is playing the acoustic guitar.&amp;nbsp;I &amp;nbsp;learned much of what I know from &lt;a href="http://franksalamone.com/"&gt;Frank Salamone&lt;/a&gt;, who sadly is no longer able to play. I spent the accrued vacation pay from my last job on a &lt;a href="http://www.martinguitar.com/guitars/choosing/guitars.php?p=z&amp;amp;g=d&amp;amp;m=000-28"&gt;Martin 000-28&lt;/a&gt; when I started at Microsoft.&amp;nbsp; The piece I most enjoy playing is Leo Kottke's &lt;a href="http://www.amazon.com/6-12-String-Guitar-Leo-Kottke/dp/B000003Z91"&gt;The Fisherman&lt;/a&gt;.&amp;nbsp; I try, with&amp;nbsp;minimal success, to play&amp;nbsp;various stuff by &lt;a href="http://www.john-renbourn.com/"&gt;John Renbourn&lt;/a&gt;. &lt;li&gt;My musical tastes&amp;nbsp;run mostly toward the classical/traditional. A survey of&amp;nbsp;the dying iPod (Apple seems to have rediscovered the virtues of &lt;a href="http://en.wikipedia.org/wiki/Planned_obsolescence"&gt;Planned Obsolescence&lt;/a&gt;) doesn't show a whole lot of written after 1759 (when Handel died) and only a handful&amp;nbsp; after 1827 (Beethoven).&amp;nbsp;&amp;nbsp; All time favorite recordings include &lt;a href="http://www.amazon.com/Christopher-Parkening-plays-Johann-Sebastian/dp/B000002RNJ/sr=1-1/qid=1167753233/ref=pd_bbs_sr_1/103-2026187-2215037?ie=UTF8&amp;amp;s=music"&gt;Parkening Plays Bach&lt;/a&gt;, Trevor Pinnock's &lt;a href="http://www.amazon.com/Bach-Goldberg-Variationen-Johann-Sebastian/dp/B0000057CK/sr=8-1/qid=1167753014/ref=sr_1_1/103-2026187-2215037?ie=UTF8&amp;amp;s=music"&gt;Goldberg-Variationen&lt;/a&gt;, and Derek Bell's &lt;a href="http://www.amazon.com/Carolans-Receipt-Music-Carolan-Vol/dp/B000046S03/sr=1-1/qid=1167753487/ref=pd_bbs_sr_1/103-2026187-2215037?ie=UTF8&amp;amp;s=music"&gt;Carolan's Receipt&lt;/a&gt;.  &lt;li&gt;My current favorite "leisure" activity is, as one of my kids puts it, getting torn up by nasty thorny things.&amp;nbsp; I'd give it a more pretentious label, "natural area restoration", which around here involves a lot of struggle with &lt;a href="http://dnr.metrokc.gov/wlr/lands/weeds/pdf/Blackberry_factsheet.pdf"&gt;Himalayan Blackberry&lt;/a&gt;&amp;nbsp;on behalf of the &lt;a href="http://www.ci.woodinville.wa.us/opportunities/volunteers.asp"&gt;Sammamish River Stewards&lt;/a&gt;. Back in Ann Arbor, is was a struggle with &lt;a href="http://plants.usda.gov/java/profile?symbol=RHCA3"&gt;European Buckthorn&lt;/a&gt; on behalf of the &lt;a href="http://dickenwoods.org/"&gt;Friends of Dicken Woods&lt;/a&gt;.&amp;nbsp;  &lt;li&gt;&amp;nbsp;Based on the countries I've actually visited, if I had my life to live over I might do it in either Norway or Australia.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Being paranoid of &lt;a href="http://www.gapingvoid.com/Moveable_Type/archives/003585.html"&gt;this kind of response&lt;/a&gt;, I won't inflict the meme on anyone else.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1399790" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>The JSON vs XML debate begins in earnest</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2006/12/21/the-json-vs-xml-debate-begins-in-earnest.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2006/12/21/the-json-vs-xml-debate-begins-in-earnest.aspx</id><published>2006-12-21T06:08:50Z</published><updated>2006-12-21T06:08:50Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;After seeing&amp;nbsp;&lt;a href="http://blogs.msdn.com/mikechampion/archive/2006/12/08/xml-2006-observations.aspx"&gt; Douglas Crockford's talk on JSON&lt;/a&gt; at XML 2006 recently, I figured that some sort of great debate between XML and JSON advocates was brewing.&amp;nbsp; I had been waiting for &lt;a href="http://www.cafeconleche.org/oldnews/news2006December6.html"&gt;Elliotte Harold's rebuttal&lt;/a&gt; of what Crockford is missing, but haven't seen it yet.&amp;nbsp; What has happened is that Dave Winer got off a&amp;nbsp; &lt;a href="http://www.scripting.com/2006/12/20.html#godBlessTheReinventers"&gt;rant against JSON as reinventing XML's&lt;/a&gt; (and more specifically XML-RPC's) wheel:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;God bless the re-inventers &lt;/em&gt; &lt;p&gt;&lt;em&gt;Gotta love em, because there's no way they're going to stop breaking what works, and fixing what don't need no fixing&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://scripting.wordpress.com/2006/12/20/scripting-news-for-12202006/#comment-26383"&gt;Crockford gets off a very pithy response:&lt;/a&gt;&amp;nbsp; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;The good thing about reinventing the wheel is that you can get a round one.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There are a lot of other very interesting observations in that &lt;a href="http://scripting.wordpress.com/2006/12/20/scripting-news-for-12202006/#comment-26223"&gt;comment thread&lt;/a&gt;.&amp;nbsp; Some points that hadn't been obvious before to me include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;There seemed to be a lot more JSON fans than XML fans in that thread (maybe because the original post was just a wee bit inflammatory)  &lt;li&gt;JSON may be something like 100x faster to parse than XML in today's browsers (but I doubt very much if the best JSON parsers are anywhere near that much faster than the best XML parsers ... it would be interesting to know!),  &lt;li&gt;JSON parsing ends up with something akin to a&amp;nbsp; typed "business object" rather than an untyped DOM tree  &lt;li&gt;To do that in XML requires yet another layer or two of cruft (a schema and a databinding tool)  &lt;li&gt;The bottom line argument for JSON comes down to elegance -- it does what is does simply and cleanly, and simply refuses to worry about many of the things that complicate XML such as metadata (attributes), comments, processing instructions, a schema language, and namespaces.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;As a 10 year XML veteran, and informal minister of propaganda for the "XML Team", aren't I supposed to leap to XML's defense?&amp;nbsp; I just can't summon the energy.&amp;nbsp; First, XML's lack of elegance,&amp;nbsp;presumably the result of its&amp;nbsp;genesis in a series of committee rooms and compromises, is unarguable. One just can't look at it without remembering the old saw that a "camel is a horse designed by a committee." I'm not sure if that's a problem, since I like the comeback "but a camel is a lot more sturdy beast if you are exploring the unknown."&amp;nbsp; Still, horses' elegance&amp;nbsp;generates a lot more enthusiasm in the rest of the world than camels' sturdy pragmatism does. &lt;/p&gt; &lt;p&gt;Second, it's also hard to argue with the proposition that the XML wheel could be a lot rounder.&amp;nbsp; As far as I can tell, there is just about zero enthusiasm among XML cognoscenti for re-opening the debates from a decade ago about which aspects of XML (or SGML) are "features" and which are "bugs" -- it depends on who is doing what, and whether there are enough people doing it to matter.&amp;nbsp; By making evolution toward something more simple and secure impossible, the XML community made something like the JSON revolution inevitable.&amp;nbsp; That doesn't mean that the revolutionaries will &lt;em&gt;win&lt;/em&gt;; &amp;nbsp;after all, JSON's own limitations will become apparent only once is tested in scenarios that&amp;nbsp;were not anticipated by its designers&amp;nbsp;. At a minimum, a few key victories for the revolutionaries might motivate the old guard to make some needed reforms.&lt;/p&gt; &lt;p&gt;Third, the fact that the argument for JSON comes down to a matter of elegance doesn't bode well for its ultimate success.&amp;nbsp; It's hard to forget the famous lament of a LISP devotee reflecting on its lack of success&amp;nbsp;against the much less elegant C/Unix/etc. competition: &lt;a href="http://www.jwz.org/doc/worse-is-better.html"&gt;Worse is Better&lt;/a&gt;.&amp;nbsp;&lt;em&gt;&amp;nbsp;&lt;/em&gt;I wonder how many of the legitimate challenges that people are finding easier to solve with JSON than XML (especially the infamous cross-domain data mashup problem imposed by XmlHttpRequest's security model) mightn't be solved more expediently with some small tweaks to the XML infrastructure rather than a wholesale adoption of a &lt;a href="http://en.wikipedia.org/wiki/Disruptive_technology"&gt;disruptive innovation&lt;/a&gt; such as JSON.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Finally, in the larger scheme of things it doesn't matter.&amp;nbsp; What does matter is that there be standardized, widely supported means for making data interoperable across applications, platforms, programming languages, and time.&amp;nbsp; Life would be easier for us infrastructure implementers if there were a single, stable standard, but it's unrealistic to expect that XML 1.0 would be the last word on the subject.&amp;nbsp; We will cope with whatever happens -- small tweaks to address critical bugs that JSON illuminates, multiple de facto data interoperability standards, &amp;nbsp;guided evolution of XML to be a better universal data interchange format, or wholesale revolution to produce a better world.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;It would be nice if the JSON vs XML debate does not go the way of the "REST vs Web Services" perma-talking-past-one-another-fest.&amp;nbsp; Ultimately they are very likely to end up in the same place.&amp;nbsp; As &lt;a href="http://blogs.iona.com/newcomer/archives/000431.html"&gt;Eric Newcomer puts it&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;once a technology passes the hype cycle and becomes adopted, all its warts and bumps become more obvious as we find out what it is really good for, and what it is not...we should no more propose Web services as the right solution for everything than we should propose REST as the right solution for everything.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I hope nobody proposes JSON as the right solution for everything, and that the debate reminds us that XML is not the right solution for everything. One way or another,&amp;nbsp;this debate&amp;nbsp;will take us toward either a couple of rounder wheels better fit for their specialized purposes, or inspire a next-generation wheel that really does better than either do well today.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;Quick update with some other interesting links: (Winer's piece made the top of Techmeme while I was typing ...) &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=55b58719-a06b-445e-aa96-b5d395cbdf75"&gt;Dare Obasanjo&lt;/a&gt; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;The obvious reaction was to make the Google and del.icio.us announcements into a REST vs. SOAP or XML vs. JSON story since geeks like to turn every business decision into a technology decision. However if you scratch the surface, the one thing that is slowly becoming clear is that providers of data services would rather provide you their data in ways they can explicitly monetize (e.g. driving traffic to their social bookmarking site or showing their search ads) instead of letting you drain their resources for free no matter how much geek cred it gets them in the blogosphere.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://simonwillison.net/2006/Dec/20/json/"&gt;Simon Willison&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;The sweet spot for JSON is serializing simple data structures for transfer between programming languages. If you need more complex data structures (maybe with some kind of schema for validation), use XML. If you want to do full blown RPC use SOAP or XML-RPC. If you just want a light-weight format for moving data around, JSON fits the bill admirably.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;What do we lose from not using XML? The ability to use XML tools. If you’re someone who breathes XSLT that might be a problem; if like me your approach when faced with XML is to parse it in to a more agreeable data structure as soon as possible you’ll find JSON far more productive.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1338680" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Potential at the Trailing Edge</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2006/12/14/potential-at-the-trailing-edge.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2006/12/14/potential-at-the-trailing-edge.aspx</id><published>2006-12-14T17:28:39Z</published><updated>2006-12-14T17:28:39Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;Lots of people linked to the happy news last week that &lt;a href="http://weblog.infoworld.com/udell/2006/12/08.html#a1574"&gt;Jon Udell was joining Microsoft&lt;/a&gt;, so I didn't bother.&amp;nbsp; I have previously&amp;nbsp;recommended &amp;nbsp;his great &lt;a href="http://weblog.infoworld.com/udell/2006/05/31.html#a1458"&gt;interview with Anders Hejlsberg&lt;/a&gt;.&amp;nbsp;&amp;nbsp;This is a clear, concise, hands-on demonstration of LINQ (including LINQ to XML) that feels like Anders stopped by your office to explain it in person.&amp;nbsp; I have to credit the interviewer for a lot of that.&lt;/p&gt; &lt;p&gt;I met Jon Udell at&amp;nbsp;the XML 2003 conference, and &lt;a href="http://weblogs.java.net/blog/mchampion/archive/2003/12/xml_2003_reflec.html"&gt;blogged about it&lt;/a&gt; in my previous home on the web.&amp;nbsp;I remember one interaction well: I had (a year or so before joining Microsoft) just bought a Mac Powerbook and noticed that he and most of the other really&amp;nbsp;cool people were also using one.&amp;nbsp; I asked if this the first sign of a trend toward OS X... he replied something like "no, just a fad."&amp;nbsp;&amp;nbsp; A&amp;nbsp;couple of years later&amp;nbsp;I noticed that many of the&amp;nbsp;&lt;a href="http://diveintomark.org/archives/2006/05/30/bye-apple"&gt; bleeding edge people seemed to be switching to Ubuntu Linux&lt;/a&gt; and&amp;nbsp;&lt;a href="http://www.tbray.org/ongoing/When/200x/2006/06/15/Switch-From-Mac"&gt;others&lt;/a&gt; were agonizing about whether to switch &amp;nbsp;... so I guess he was right!&amp;nbsp; And I've given the PowerBook to my daughter and&amp;nbsp;gone back&amp;nbsp;to Windows.&amp;nbsp; Oh well.&amp;nbsp; I can't exactly pull off that &lt;a href="http://mymacbuzz.com/wordpress/media/2006/dress_mac_01.jpg"&gt;Mac Guy&lt;/a&gt; style with my age and physique anyway.&amp;nbsp; Maybe I'm worse than uncool; I use a Mac Mini at home now ... but commit the heresy of running Windows Vista on it.&amp;nbsp; [The Mini is a phenomenal piece of equipment: very small physical size, lots of horsepower, extremely quiet, relatively cheap ... I wonder how much of Apple's newfound market share comes from people like me and some colleagues that I know who&amp;nbsp; buy their hardware and run our software?.]&lt;/p&gt; &lt;p&gt;Anyway, the tagline here comes from a &lt;a href="http://blog.jonudell.net/2006/12/12/larry-obrien-serves-up-three-hardball-questions/"&gt;piece in Udell's new weblog&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Part of this career change goes beyond switching employers. The disconnect between the geek world and the civilian world has really been bugging me lately. Leading edge aside, there’s so much potential at the trailing edge that languishes because nobody helps people connect the dots. ,,,&amp;nbsp;&lt;em&gt;Smarter methods of communication. More powerful data analysis and visualization. Surprisingly simple kinds of integration&lt;/em&gt;.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;That really resonated with me.&amp;nbsp; It is similar to the LINQ to XML vision in that we see lots of people&amp;nbsp;in the "civilian world" who could benefit from the data interoperability that XML enables but don't&amp;nbsp;have the tools&amp;nbsp;to use it effectively, and no particular interest in learning a whole set of specialized XML technologies just to do a single job.&amp;nbsp; Although I would hardly call it "trailing edge", LINQ is all about connecting the dots between existing programming languages and the different data sources that one comes across.&lt;/p&gt; &lt;p&gt;More generally, and more to the point of what Udell will be doing, there does seem to be a problem in our rather fad-driven industry:&amp;nbsp; Lots of people are contending over who gets to lead the parades, but not very many are coming along behind to sweep up after the horses and elephants. I can't blame the "civilians" for wanting to avoid those streets until nature does its slow but sure cleanup job, but there are a lot of good ideas that have been generated and proven (not to mention bad ideas that have been discredited) in the debris of yesterday's parades.&amp;nbsp;The example closest to my heart is XML I suppose - it's no longer hip (and the hipsters are off exploring new ideas such as JSON), there is a lot of, uh, compostable material left behind that needs to be disposed of properly, but there's much of value &lt;em&gt;if&lt;/em&gt;&amp;nbsp; users can get the kind pragmatic advice on what works and what is overkill that &lt;a href="http://weblog.infoworld.com/udell/2006/12/13.html#a1578"&gt;Udell does so well.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Bleeding edge geekdom is lots of fun, but working on the trailing edge has a pleasure all its own.&amp;nbsp; What works today will probably still work tomorrow, but it can work better if we incorporate&amp;nbsp;the formerly&amp;nbsp;bleeding edge stuff that actually proved itself. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1287285" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>The Model T and the Prius: Simplicity vs Complexity, yet again</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2006/12/10/the-model-t-and-the-prius-simplicity-vs-complexity-yet-again.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2006/12/10/the-model-t-and-the-prius-simplicity-vs-complexity-yet-again.aspx</id><published>2006-12-11T01:02:40Z</published><updated>2006-12-11T01:02:40Z</updated><content type="html">&lt;p&gt;My favorite conundrum, the&amp;nbsp;&lt;a href="http://blogs.msdn.com/xmlteam/archive/2005/03/08/389531.aspx"&gt;difficulty of being simple&lt;/a&gt;,&amp;nbsp;pops up everywhere I look these days.&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;OpenXML document format vs the Open Document Format&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Point: OpenXML is &lt;a href="http://www.sutor.com/newsite/blog-open/?p=1145"&gt;so complex no one else can implement it&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Counterpoint: Its &lt;a href="http://blogs.msdn.com/brian_jones/archive/2006/12/07/ecma-standard-376-office-open-xml-formats.aspx"&gt;complexity is due to the existing features of MS Office&lt;/a&gt;, which are reflected in the old binary format and faithfully preserved in OpenXML.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;W3C XML Schema vs RELAX NG&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Point: XSD is &lt;a href="http://www.loudthinking.com/arc/000602.html"&gt;hard to read, hard to write, hard to understand&lt;/a&gt; and should be scrapped.&amp;nbsp;&lt;/li&gt; &lt;li&gt;Counterpoint: &lt;a href="http://lists.xml.org/archives/xml-dev/200611/msg00189.html"&gt;Namespaces, URIs, DOM&lt;/a&gt;, and others are also horrible specs, but real people use them all to get the job done.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;WS-* vs REST&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Point: Stand up to the forces of &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/11/16/WS-Socratic"&gt;WS-Complexity&lt;/a&gt;&amp;nbsp;and speak truth to confusion.&lt;/li&gt; &lt;li&gt;Counterpoint: Or stick with WS-* if you value &lt;a href="http://1raindrop.typepad.com/1_raindrop/2006/12/rest_security_o.html"&gt;security&lt;/a&gt;, your &lt;a href="http://service-architecture.blogspot.com/2006/11/want-to-be-cool-learn-rest-want-career.html"&gt;career&lt;/a&gt;, and other such boring enterprisey stuff.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;XML vs JSON&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Point:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.json.org/xml.html"&gt;XML is not well suited to data-interchange&lt;/a&gt; because is ugly, inefficient, and doesn't match the data model of most programming languages. &lt;/li&gt; &lt;li&gt;Counterpoint: XML tools are pervasive; the &lt;a href="http://msdn.microsoft.com/data/ref/linq/"&gt;best ones&lt;/a&gt; don't force developers to confront random complexities unless their features are actually required.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;I had an epiphany shortly after buying a Toyota Prius recently:&amp;nbsp; The thing is an absolute &lt;a href="http://www.rubegoldberg.com"&gt;Rube Goldberg&lt;/a&gt; machine &lt;a href="http://en.wikipedia.org/wiki/Hybrid_Synergy_Drive#Phases_of_operation"&gt;under the hood&lt;/a&gt;, but is if anything simpler to operate than an ordinary car. By contrast, the Ford Model T was so simple in design that it came with all the tools needed to maintain and repair it, and a generation or two of backyard mechanics learned how to do just that.&amp;nbsp; It got 25 miles per gallon, better than Ford's typical product today. The Prius, on the other hand, is so backyard mechanic-unfriendly that the 12 volt battery is sealed away under the trunk; there is apparently no way even to use&amp;nbsp;it to perform that one bit of&amp;nbsp;auto repair that&amp;nbsp;almost anyone can do,&amp;nbsp;jump-start another vehicle.&amp;nbsp; But that complexity returns a big benefit - a Prius has all the interior size and environmental comforts of a conventional&amp;nbsp;midsize sedan, but twice the fuel efficiency of the simple, uncomfortable Model T (and 3-4x that of Ford's current best seller).&amp;nbsp; The complexity is mostly hidden away from the driver; the only&amp;nbsp; &lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html"&gt;leaks in the abstractions&lt;/a&gt; that make it look like an ordinary car&amp;nbsp;are the &lt;a href="http://www.hybridcars.com/gas-saving-tips/maximizi..."&gt;tricks one can use to optimize fuel economy&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I noticed that &lt;a href="http://lamammals.blogspot.com/2006/12/in-defense-of-complexity-end-of-joe.html"&gt;Len Bullard&lt;/a&gt; recently made essentially the same point I&amp;nbsp;am trying&amp;nbsp;to make:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;So it is with the modern combustion engine: it works, it is efficient with respect to the power delivered for the fuel and the weight of the overall vehicle, thus adding more efficiency, but it is not something that the average backyard mechanic can rebuild. The tools required, the parts required and the knowledge of how they work in combination exceed his or her resources, understanding and nerve.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Complexity is just as much in the nature of the evolution of systems as simplicity is desirable. At some point, the demands of an environment or a market require complex solutions. While simplicity is a goal, it can also become a religion just as harmful as fundamentalism when pursued with a sword. Complex systems can do what simple systems cannot do. The goal that all systems be accessible can be met with open standards, but the goal that they be powerful, workable and light might not even as the principles over which they are built remain the same.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now Donald Norman, the guru of high design, &lt;a href="http://www.jnd.org/dn.mss/simplicity_is_highly.html"&gt;weighs in&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;“We want simplicity” cry the people befuddled by all the features of their latest whatever. Do they really mean it?&amp;nbsp; No.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;But when it came time for the journalists to review the simple products they had gathered together, they complained that they lacked what they considered to be “critical” features. So, what do people mean when they ask for simplicity? One-button operation, of course, but with all of their favorite features.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://www.joelonsoftware.com/items/2006/12/09.html"&gt;Joel Spolsky elaborates&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;In the case of the iPod, the way beauty is provided happens to be through a clean and simple design, but it doesn't have to be. The Hummer is aesthetically appealing precisely because it's ugly and complicated.&lt;/em&gt; &lt;p&gt;&lt;em&gt;I think it is a misattribution to say, for example, that the iPod is successful because it lacks features. If you start to believe that, you'll believe, among other things, that you should take out features to increase your product’s success. With six years of experience running my own software company I can tell you that nothing we have ever done at Fog Creek has increased our revenue more than releasing a new version with more features&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://www.gadgetopia.com/post/5677"&gt;Gadgetopia summarizes&lt;/a&gt;&amp;nbsp;--&amp;nbsp;"you need features, but they need to &lt;em&gt;appear&lt;/em&gt;&amp;nbsp; simple to the end users".&amp;nbsp; &lt;/p&gt; &lt;p&gt;There's a name for the discipline of working within a network of complex constraints to produce something simply usable - &lt;em&gt;engineering&lt;/em&gt;.&amp;nbsp; It's not easy to get the complicated system of batteries, motors, charging systems, and drivetrain in a modern hybrid car to work together efficiently, but some very clever engineers managed to do that.&amp;nbsp; Those who dismiss various XML technologies, or XML itself, because of ugly complexities or unpleasant constraints may someday&amp;nbsp;look as prescient as the folks in the auto industry who &lt;a href="http://en.wikipedia.org/wiki/Who_Killed_the_Electric_Car%3F"&gt;killed off the electric car&lt;/a&gt; in the 1990's, only to be humbled by the engineers who made the hybrid system practical a few years later. &lt;/p&gt; &lt;p&gt;OpenXML, WS-*, XSD, and XML for that matter are not doomed because they are complex,&amp;nbsp;nor are they destined for success because they attempt to hide their complexity from the end user.&amp;nbsp; &amp;nbsp;Those&amp;nbsp;who build infrastructures and applications on top of them are &lt;em&gt;challenged to do good engineering&lt;/em&gt; to make&amp;nbsp;their purported features actually work and to appear simple to the ultimate consumers.&amp;nbsp; In the long run we'll probably end up more or less where automobiles are now - complexity under the hood that would inspire Rube Goldberg, but engineering quality that makes it appear simple to the driver. &lt;/p&gt; &lt;p&gt;Reasonable people can disagree on whether&amp;nbsp;we are currently on the right track to making&amp;nbsp;this happen.&amp;nbsp;&amp;nbsp;If we are, the yelping in the blogosphere&amp;nbsp;might be dismissed as&amp;nbsp;backyard mechanics lamenting the fact that "enterprisey" applications can't be built with hand tools anymore.&amp;nbsp; If the critics are right, we could plausibly be in the midst of a disruption akin to the 1970's consumer revolt against Detroit-made gas guzzling behemoths in favor of smaller, better-designed imports. We shall see, but the answer is not at all obvious despite various "Mission Accomplished" declarations by one faction or another.&lt;/p&gt; &lt;p&gt;&amp;nbsp;Here what &amp;nbsp;I (personally ... obligatory disclaimer about not speaking with the xmlteam hat on) think about the technologies listed at the top of this post with respect to the simplicity/complexity dilemma:&lt;/p&gt; &lt;li&gt;OpenXML document format vs the Open Document Format? Nobody&amp;nbsp;wins, neither loses.&amp;nbsp; Specialized libraries and hard work will make OpenXML appear simple enough for most purposes; the underspecification in ODF (e.g. for spreadsheet formulas) will be remedied with spec revisions that add complexity. Actual users will seldom know or care about the underlying formats because modern office apps are already doing a decent job of making all that stuff look simple.&lt;/li&gt; &lt;li&gt;W3C XML Schema vs RELAX NG? There's lots of room for evolution here; neither will win in the long run, but something will emerge that steals ideas from both.&amp;nbsp; XSD 1.1&amp;nbsp;already addresses&amp;nbsp;some of 1.0's&amp;nbsp; more egregious flaws and incorporates a lot of ideas from Schematron.&amp;nbsp; In the "2.0" timeframe I'd expect a hybrid schema language that incorporates the best ideas from all three (although I don't know which organization or company that will come from).&amp;nbsp; It will be as "complex" as XSD measured in features, spec size, etc. but more like RElAX NG in terms of formal underpinnings and readability.&lt;/li&gt; &lt;li&gt;WS-* vs REST? &amp;nbsp;We'll end up with a composite Web/Enterprise architecture that has simple REST-like concepts at the core that will continue to be used by "Web 1.0", but can be&amp;nbsp;more cleanly (than the current WS-* stack) extended to allow multi-hop / multi-protocol reliable messaging, security protocol negotiations, etc.&amp;nbsp; Even if the WS-* stuff disappeared, someone would&amp;nbsp;quickly reinvent something very similar because the REST primitives are just too primitive to appear simple to any but the most zealous backyard mechanics.&lt;/li&gt; &lt;li&gt;XML vs JSON? I'm still undecided about this.&amp;nbsp; I'm feeling just a bit smugly prescient these days&amp;nbsp;because I was once a &lt;a href="http://tech.groups.yahoo.com/group/sml-dev/message/59"&gt;flamethrower&lt;/a&gt; in the "XML is too complex" wars, and people are finally&amp;nbsp;&lt;a href="http://www.xml.com/pub/a/2001/05/02/champion.html"&gt;voting with their feet&lt;/a&gt;&amp;nbsp;against XML's complexity. &amp;nbsp;On the other hand, XML has gotten so pervasive now that I don't see how JSON can achieve success as a data interchange standard (outside the AJAX realm) by the&amp;nbsp;classic disruptive route of&amp;nbsp; &lt;a href="http://en.wikipedia.org/wiki/Disruptive_technology"&gt;competing with non-consumption&lt;/a&gt;.&amp;nbsp; It would be lots of fun to reinvent a JSON-based stack-o-stuff to give it a schema language, transformation language, query language ... not to mention a "LINQ to JSON" API!&amp;nbsp; I'm not so sure that our customers would find it fun to endure that disruption, however.&amp;nbsp;&amp;nbsp;A well known and vocal colleague&amp;nbsp;[hint: he likes to remind me that DOM means 'dumb' in Dutch] thinks I'm a corporate drone wimp&amp;nbsp; :-) for that view ... what do you think?&lt;/li&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1254851" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>XML 2006 Observations</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2006/12/08/xml-2006-observations.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2006/12/08/xml-2006-observations.aspx</id><published>2006-12-08T06:48:31Z</published><updated>2006-12-08T06:48:31Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;I could only attend half the conference due to a family health issue, but here are some thoughts on what I did see.&amp;nbsp; The links are mainly to the conference program; I believe the entries will eventually link to the actual presentation slides and submitted papers.  &lt;p&gt;&lt;a href="http://2006.xmlconference.org/programme/presentations/163.html"&gt;Roger Bamford’s keynote&lt;/a&gt;&amp;nbsp; spent much time showing how the high-level architecture of a typical enterprise application 30 years ago was not that much different than today:&amp;nbsp; 3270 pages vs HTML pages, CICS transaction monitors vs app servers, and a back end DB that is a scarce resource that the rest of the system tries to offload.&amp;nbsp; There was a discussion of how “share nothing” approaches worked then and now to achieve scalability, but he noted that people who truly understand this were scarce then and remain so now.&amp;nbsp;  &lt;p&gt;He got to the main point by arguing that&amp;nbsp;today’s real problems have much to do with a single DB having to support applications with very customized views via side tables to define extended attributes that apply to a customization but are not in the core schema.&amp;nbsp; He noted that XML is more extensible than SQL, and proposed that this core problem could be solved more easily by storing customized data an XML store.&amp;nbsp; That implies XQuery as the query&amp;nbsp; / middle tier programming language … or actually “XML + XQuery(P) + Apache + REST == no middle tier”&amp;nbsp;  &lt;p&gt;His vision of how&amp;nbsp;to bootstrap this seems to be:  &lt;p&gt;- Bamford (personally?) has &lt;a href="http://www.crn.com/showArticle.jhtml?articleId=196602063"&gt;started something called the FLWOR Foundation&lt;/a&gt;&amp;nbsp; to produce an open source XQueryP implementation called Zorba.  &lt;p&gt;- Oracle’s main DB product&amp;nbsp;will be completely interoperable with it at the XQuery code level  &lt;p&gt;- The people with low end requirements use Zorba, and those with enterprise-scale requirements use Oracle.  &lt;p&gt;-&amp;nbsp;I guess the&amp;nbsp;rest of the world will &lt;s&gt;re-engineer to be code compatible with Zorba&lt;/s&gt; "correctly" implement the XQueryP standard, and thus we get interoperability.  &lt;p&gt;Very interesting, especially since I bought into this basic vision big time in 1999, which motivated me to take a job at Software AG because of their &lt;a href="http://www.softwareag.com/Corporate/products/tamino/default.asp"&gt;Tamino XML database&lt;/a&gt;.&amp;nbsp; That hasn't worked out particularly well for Software AG, but obviously Oracle has immensely more resources, and maybe the time is ripe now even if it wasn't then.&amp;nbsp; It's quite different from Microsoft's vision, however.&amp;nbsp; We stress the &lt;a href="http://www.microsoft.com/interop/default.mspx"&gt;interoperability of data&lt;/a&gt;&amp;nbsp;more than attempts to create standards for portable code.&amp;nbsp; We work hard to make our platform and tools the best in the industry, and the fact that many are proprietary is not a drag on interoperability since it is standard &lt;em&gt;data&lt;/em&gt; -- which generally means XML these days -- flowing across applications and platforms.&amp;nbsp;&amp;nbsp;&amp;nbsp; A distributed application may use Java and XOM on one node, Linux and XSLT on another, and Windows and LINQ on another ... and any of them may use XQuery to get data out of a database ... &amp;nbsp;but so long as they speak XML to one another each node has no need to care how the others produce and consume the XML.&amp;nbsp; Let the most productive tool win! &lt;p&gt;I spent the rest of the first day chairing the Enterprise XML Computing sessions. First up, &lt;a href="http://2006.xmlconference.org/programme/presentations/38.html"&gt;Dana Florescu&lt;/a&gt; and &lt;a href="http://2006.xmlconference.org/programme/presentations/91.html"&gt;Ralf Lämmel&lt;/a&gt; shared a session that I introduced as “starting from different ends of the declarative / imperative continuum and ending up in about the same place”.&amp;nbsp; That is, the XQuery people start with a declarative&amp;nbsp;query language and are adding imperative features to make it more easily usable for scripting, etc., whereas the&amp;nbsp;.NET people are taking imperative languages and adding declarative query features to make applications more scalable / streamable / parallelizable / etc. &amp;nbsp;Dana talked about &lt;a href="http://www.ximep-2006.org/papers/Paper-Chamberlin-Carey.pdf"&gt;XQueryP&lt;/a&gt; and gave a&amp;nbsp;great presentation, with concrete use cases, realistic assessments of the competition (including LINQ to XML!), etc.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ralf talked about how the LINQ to XML team is thinking about extending LINQ to XML to gracefully handle streaming use cases.  &lt;p&gt;There were some good audience comments -- and Dana and &lt;a href="http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/k/Kossmann:Donald.html"&gt;Donald Kossman&lt;/a&gt; met with me later to reinforce the point --&amp;nbsp;arguing that&amp;nbsp;XQueryP can do all that stuff in less code (just one nice compact string rather than all those&amp;nbsp;method calls), and will have [someday] an optimizer to figure out whether a particular query can be streamed or not.&amp;nbsp; I think we agreed at the end that we are aiming at different audiences – XQueryP advocates seem to be going&amp;nbsp;after the people who see XML as the center of their data world, like to learn new languages, &amp;nbsp;and demand proper computer science solutions; &amp;nbsp;whereas with LINQ to XML we go after people who use all sorts of data, want to change one thing at a time, get a lot of help from Intellisense to build queries rather than having to type in an arcane string, and not necessarily worry too much about the underlying theory.&amp;nbsp; LINQ to XML is "only" an API and not a declarative language processor / optimizer so we have no option but to ask the programmer to decide whether to write a query over a loaded tree or over a dynamic stream.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;p&gt;Next, &lt;a href="http://2006.xmlconference.org/programme/presentations/49.html"&gt;Ralf&lt;/a&gt; and &lt;a href="http://2006.xmlconference.org/programme/presentations/92.html"&gt;Igor Peshansky&lt;/a&gt; of IBM gave what amounted to compare/contrast talks on how strongly typed XML and web services features are being incorporated into the .NET and Java languages. If you read&amp;nbsp;&lt;a href="http://blogs.msdn.com/ralflammel/default.aspx"&gt;Ralf's blog&lt;/a&gt;&amp;nbsp;you know what we are doing. See &lt;a href="http://alphaworks.ibm.com/tech/xj"&gt;http://alphaworks.ibm.com/tech/xj&lt;/a&gt; &amp;nbsp;for the Java side of things.  &lt;p&gt;My summary (as chair, trying hard to be neutral) was:  &lt;p&gt;Similarities:  &lt;p&gt;- Both start from the position that current XML processing is too hard and the programming language – XML impedance mismatch needs to be bridged.  &lt;p&gt;- Both provide a more OO-ish experience to their users than is possible with existing XML APIs.  &lt;p&gt;- Both provide automated facilities to map XSD types into language types  &lt;p&gt;- Both can be thought of as competing with XQuery in the programming environment, but don’t undermine XQuery’s value as a query language. (Apparently the XJ folks get "I thought that's what XQuery does" questions a lot too!) &lt;p&gt;Differences:  &lt;p&gt;- LINQ is being put into the core of .NET whereas XJ essentially creates a domain specific language for XML on top of Java.  &lt;p&gt;- LINQ &lt;em&gt;is&lt;/em&gt; the query language, XJ incorporates XPath as the query language  &lt;p&gt;- LINQ provides a common programming model for objects and XML, XJ is disconnected from ordinary Java objects,&amp;nbsp;i.e. you can't&amp;nbsp;query over object graphs or join across XML objects and&amp;nbsp;ordinary Java objects.&amp;nbsp; &lt;p&gt;- C# doesn’t incorporate XML syntax into the language, XJ (and VB9 of course) does.  &lt;p&gt;- The LINQ framework doesn’t have any special support for web services, XJ does (that was the focus of Igor’s talk).  &lt;p&gt;&amp;nbsp;  &lt;p&gt;In the last session of the day, &lt;a href="http://2006.xmlconference.org/programme/presentations/43.html"&gt;Paul Downey&lt;/a&gt;&amp;nbsp;described the work of the&amp;nbsp;Schema Patterns for Databinding WG&amp;nbsp;and how it’s doing useful work (but don’t get no respect).&amp;nbsp; One notable quote: &amp;nbsp;“databinding tools don’t all suck, they just suck in different ways so they don’t interoperate.”&amp;nbsp; I'm just not in a position to&amp;nbsp;know much about or comment on Microsoft's thoughts on this ...  &lt;p&gt;Finally, there was a &lt;a href="http://2006.xmlconference.org/programme/presentations/154.html"&gt;panel discussion of XML Pipeline Processing&lt;/a&gt;. &amp;nbsp;Sam Page described the concept and some real world use cases. Norm Walsh described &lt;a href="http://xproc.org/"&gt;XProc&lt;/a&gt;&amp;nbsp;standardization.&amp;nbsp; The canonical use case is for applying the numerous inclusions, validations, and transformations needed to build the DocBook documentation, and having the different people who work on different platforms be able to get the same result.&amp;nbsp; Norm did a good job of deflating some overheated expectations (e.g. that it is a minimalist alternative to BPEL).&amp;nbsp; Still, having attempted to evangelize an &lt;a href="http://developer.softwareag.com/entirex/knowhow/know_how_xml_mediator.htm"&gt;XML pipeline product while at Software AG&lt;/a&gt;, IMHO the principal response in the real world is going to be: “I can do that in 10 lines of C#/Java/Python/Perl/whatever, why on earth should I do it in 100 lines of XML?”&amp;nbsp;&amp;nbsp;Also, the WG has agreed to disagree on what the underlying data model might be, so an actual pipeline may consist of nodes that exchange XML text, DOM trees, PSVI serializations of some sort, or whatever. Thus, anyone wanting to write a pipeline component will have to write it differently for every supported implementation… although pipeline end users could write one “script” and have it produce the same result no matter what the implementation.&amp;nbsp; Nevertheless, this looks like a model W3C effort: they're standardizing existing practice rather than doing a "design by committee", finding the intersection of what is known and needed rather than the union of everyone's hopes and dreams, and working in a fast and focused manner.&amp;nbsp; It looks like it will do one thing well, and if you need that one thing done, this will be the spec for you.  &lt;p&gt;&amp;nbsp;  &lt;p&gt;The only presentation I saw on Wednesday was &lt;a href="http://2006.xmlconference.org/programme/presentations/176.html"&gt;Douglas Crockford’s “JSON: The Fat-free alternative to XML”&lt;/a&gt; (Slides are already online at &lt;a href="http://www.json.org/xml2006.ppt"&gt;http://www.json.org/xml2006.ppt&lt;/a&gt;).&amp;nbsp; A couple of things I took away from the talk:  &lt;p&gt;- JSON took a very different approach than XML in a couple of areas: there is no version number because the spec is declared stable forever; it takes a non-draconian “be liberal in what you accept and conservative in what you produce” philosophy to be friendly to supersets (such as YAML &lt;a href="http://www.yaml.org"&gt;www.yaml.org&lt;/a&gt;, which is big in the Ruby world)  &lt;p&gt;- The JSON folks are agitating for the infrastructure vendors to support a JSONRequest API &lt;a href="http://www.json.org/JSONRequest.html"&gt;http://www.json.org/JSONRequest.html&lt;/a&gt; &amp;nbsp;that addresses some limitations in XmlHttpRequest for AJAX environments.&amp;nbsp;  &lt;p&gt;- The JSON people have an interesting response to the question of why it doesn’t have namespaces, which echoes the feelings of many namespace-haters in the XML world:  &lt;ul&gt; &lt;li&gt;&lt;em&gt;Every object is a namespace. Its set of keys is independent of all other objects, even exclusive of nesting. &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;JSON uses context to avoid ambiguity, just as programming languages do.&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;- There is a JSONT spec that defines a way to declaratively transform JSON to HTML, XML, etc. &lt;a href="http://goessner.net/articles/jsont/"&gt;http://goessner.net/articles/jsont/&lt;/a&gt;  &lt;p&gt;I'm not sure if Crockford was positioning JSON as a better-XML-than-XML for&amp;nbsp;data&amp;nbsp;interoperability across applications.&amp;nbsp;I had thought of JSON as “the real X in AJAX”, i.e. &amp;nbsp;for communicating between browser and server in a Web application, but not a serious contender for interoperability purposes.&amp;nbsp;&amp;nbsp;&amp;nbsp; Will we see JSON substituting for XML in SOAP messages, RSS feeds, etc.?&amp;nbsp;&amp;nbsp; Will people store JSON persistently? That will require JSON-flavored APIs, schema/”data contract” languages, query/transformation languages, apps, etc.&amp;nbsp;&amp;nbsp;If this&amp;nbsp;starts to get momentum (I’m talking about momentum as a data interop and storage format, not the momentum it clearly has for “Web 2.0” server-browser communication), things could get interesting.&amp;nbsp; I'm not even sure how I feel about that ... Maybe the time is ripe for the &lt;a href="http://tech.groups.yahoo.com/group/sml-dev/message/59"&gt;stuff we talked about on the sml-dev mailing list&lt;/a&gt; years ago.&amp;nbsp;&amp;nbsp;YAML evolved out of that list, and JSON is essentially a subset of YAML.&amp;nbsp;&amp;nbsp;I'm sure that lots of us at in the MS Data Programmability team are&amp;nbsp;pondering what we should think and do about JSON.&amp;nbsp;&amp;nbsp;&amp;nbsp;More later.  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1237091" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry><entry><title>Rough Spots in the LINQ to XML Learning Curve</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mikechampion/archive/2006/11/13/rough-spots-in-the-linq-to-xml-learning-curve.aspx" /><id>http://blogs.msdn.com/mikechampion/archive/2006/11/13/rough-spots-in-the-linq-to-xml-learning-curve.aspx</id><published>2006-11-13T05:48:00Z</published><updated>2006-11-13T05:48:00Z</updated><content type="html">&lt;P&gt;[minor editorial updates 11/13]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We've been doing some formal usability testing on all the LINQ components over the last couple of months and have learned a lot about what people find challenging. The results have generally validated LINQ's story as a common programming model for all types of data, but they've also identified some things that people find hard.&amp;nbsp; Some of these may be fixed with API tweaks, but for the most part they indicate what we have to do a better job of explaining. &lt;/P&gt;
&lt;P&gt;I've come up with the following list of things to keep in mind when working with LINQ to XML. Some will be explained in this post, others in subsequent posts, and&amp;nbsp;we'll try to make sure that the documentation calls them out.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Clear your mind of SAX and DOM when approaching LINQ to XML; there are many similarities of course, but they can lead you astray.&amp;nbsp; XPath, XSLT, and XQuery are closer in spirit to LINQ to XML, but of course the details are very different. 
&lt;LI&gt;Remember that XElement and XDocument are similar, but not interchangeable when you are loading a document from a data source.&amp;nbsp; XElement.Load() loads everything under the top-level element, XDocument.Load() also loads any markup before the top-level element. 
&lt;LI&gt;You must grok IEnumerable&amp;lt;T&amp;gt; to use any of the LINQ tools effectively; this abstraction plays essentially the same role in LINQ as the relation does in the relational model.&amp;nbsp; In LINQ to XML, its is the axes of the XML tree, not the nodes of the tree, that expose IEnumerable and hence can be queried. 
&lt;LI&gt;People who see an IEnumerable have a tendency to do a foreach to iterate over it and use lots of if statements to decide what to do with the data values. Avoid that temptation (except when foreach is unavoidable, e.g. when writing to the console), and use the standard LINQ operators to select, filter, sort, join, group, etc. the data.&amp;nbsp; Once you get used to this discipline, we believe you'll be more productive and your code will be more understandable, and more likely to be correct. 
&lt;LI&gt;In most scenarios we have investigated, there is a simple, clean, and CORRECT way to do what you need to do with LINQ queries and functional constructors.&amp;nbsp; If you find yourself writing a lot of tricky imperative code to deal with straightforward XML data, step back and decompose / refactor / reconsider. Remember that the execution of queries is deferred until you actually get the data, so there is no performance penalty to decomposing a complex query / transformation into understandable pieces.&lt;/LI&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;One overall pattern we've detected is worth noting: &lt;EM&gt;The less you know about current XML technologies, the faster you learn LINQ to XML&lt;/EM&gt;.&amp;nbsp; The intuition of participants in our studies who know DOM, SAX, XmlReader, etc. is that the problems we posed them should be hard to solve, so they tended to roll up their sleeves and start writing a bunch of imperative code. Those who didn't know much about XML except that it is a tree of elements and attributes could use their&amp;nbsp;SQL and C# intuition and found more elegant solutions.&amp;nbsp; On the other hand, the &lt;EM&gt;really&lt;/EM&gt; experienced developers fairly quickly learned the core LINQ design patterns and began to apply them effectively to new problems. This was very heartening, since the core LINQ to XML value proposition is supposed to be make XML accessible to mainstream developers who don't want to learn the complex details of its syntax or master the numerous XML processing tools that exist today.&lt;/P&gt;
&lt;P&gt;Getting to the less cheery news,&amp;nbsp;there is plenty of&amp;nbsp;stuff we need to work harder to explain, and to think about making easier in the API.&amp;nbsp; One thing that trips up a &lt;EM&gt;lot&lt;/EM&gt; of people (ahem, including &lt;EM&gt;moi&lt;/EM&gt; as I was working on this post!) concerns the&amp;nbsp;&lt;FONT face="Lucida Console"&gt;XDocument&lt;/FONT&gt; and&amp;nbsp;&lt;FONT face="Lucida Console"&gt;XElement&lt;/FONT&gt; classes.&amp;nbsp; To illustrate this, consider the MSDN &lt;A href="http://blogs.msdn.com/MainFeed.aspx" mce_href="http://blogs.msdn.com/MainFeed.aspx"&gt;blogs RSS feed&lt;/A&gt; as an example.&amp;nbsp; Its top-level format (stripped down a bit for illustrative purposes) is:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;BR&gt;&amp;lt;?xml-stylesheet type="text/xsl" href="rss.xsl" mce_href="rss.xsl" &amp;gt;&lt;BR&gt;&amp;lt;rss version="2.0" xmlns:dc="&lt;/FONT&gt;&lt;A href="http://purl.org/dc/elements/1.1/%22" mce_href='http://purl.org/dc/elements/1.1/"'&gt;&lt;FONT face="Lucida Console"&gt;http://purl.org/dc/elements/1.1/"&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Lucida Console"&gt;&amp;gt;&lt;BR&gt;&amp;lt;channel&amp;gt;&amp;lt;title&amp;gt;MSDN Blogs&amp;lt;/title&amp;gt;&lt;BR&gt;&amp;lt;description&amp;gt;The Blogs of MSDN&amp;lt;/description&amp;gt;&lt;BR&gt;&amp;lt;item&amp;gt;&amp;lt;title&amp;gt;Develop Mental: Game Camp&amp;lt;/title&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;In general, use XElement when you just need to load the tree of elements, and XDocument when you are interested in any doctype information, PIs, etc. between the top of the file and the first element.&amp;nbsp; For example, if you want to get the xml-stylesheet processing instruction, load the XDocument:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;var feed = XDocument.Load(@"&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/MainFeed.aspx%22);" mce_href='http://blogs.msdn.com/MainFeed.aspx");'&gt;&lt;FONT face="Lucida Console"&gt;http://blogs.msdn.com/MainFeed.aspx");&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Lucida Console"&gt;Console.WriteLine(feed.FirstNode);&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This will display the value of the xml-stylesheet PI.&amp;nbsp; On the other hand, ... 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;var feed = XElement.Load(@"&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/MainFeed.aspx" mce_href="http://blogs.msdn.com/MainFeed.aspx"&gt;&lt;FONT face="Lucida Console"&gt;http://blogs.msdn.com/MainFeed.aspx");&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Lucida Console"&gt;Console.WriteLine(feed.FirstNode);&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;... will load only the &lt;FONT face="Lucida Console"&gt;&amp;lt;rss&amp;gt;&lt;/FONT&gt; element and display the contents of the first node beneath it, i.e. the &lt;FONT face="Lucida Console"&gt;&amp;lt;channel&amp;gt;&lt;/FONT&gt; element, but&amp;nbsp;any&amp;nbsp;markup before the&amp;nbsp;&lt;FONT face="Lucida Console"&gt;&amp;lt;rss&amp;gt;&lt;/FONT&gt; element is thrown away.&amp;nbsp; That has a somewhat counterintuitive side effect: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;feed.Element("rss")&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;returns&amp;nbsp;an&amp;nbsp;XElement with the name "rss" when&amp;nbsp;feed is populated via the XDocument object's Load() method, but null&amp;nbsp;when it is populated via XElement.Load().&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Second, it was not always obvious&amp;nbsp;how to&amp;nbsp;apply the LINQ approach based on &lt;FONT face="Lucida Console"&gt;&lt;EM&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/EM&gt;&lt;/FONT&gt; to XML &lt;EM&gt;trees&lt;/EM&gt;. The answer is that queries work over the &lt;EM&gt;axes&lt;/EM&gt; of a tree&amp;nbsp;very much&amp;nbsp;like &lt;A href="http://www.w3schools.com/xpath/xpath_axes.asp" mce_href="http://www.w3schools.com/xpath/xpath_axes.asp"&gt;XPath uses axes&lt;/A&gt;.&amp;nbsp;&amp;nbsp;[1]&amp;nbsp; Thus, a big part of writing a clean and correct LINQ to XML query is in choosing the best axis to query over.&amp;nbsp; For example, if you are querying over the &lt;FONT face="Lucida Console"&gt;&amp;lt;item&amp;gt;&lt;/FONT&gt; elements in an RSS feed, you could do it by brute force by "dotting into" the element hierarchy (in this example, we loaded the XDocument, so you have to include the top level &lt;FONT face="Lucida Console"&gt;&amp;lt;rss&amp;gt;&lt;/FONT&gt; element) and then enumerating over all the &amp;lt;item&amp;gt; elements:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;var feed = XDocument.Load(@"&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/MainFeed.aspx%22);" mce_href='http://blogs.msdn.com/MainFeed.aspx");'&gt;&lt;FONT face="Lucida Console"&gt;http://blogs.msdn.com/MainFeed.aspx");&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Lucida Console"&gt;var items = from i in feed.Element("rss").Element("channel").Elements("item") &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select i;&lt;BR&gt;foreach (var i in items)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(i.Element("title"));&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;Or you could more conveniently&amp;nbsp;use the &lt;FONT face="Lucida Console"&gt;Descendants()&lt;/FONT&gt; axis (and this will work whether we loaded the XElement or the XDocument):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;var feed = XDocument.Load(@"&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/MainFeed.aspx%22);" mce_href='http://blogs.msdn.com/MainFeed.aspx");'&gt;&lt;FONT face="Lucida Console"&gt;http://blogs.msdn.com/MainFeed.aspx");&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;&lt;FONT face="Lucida Console"&gt;var items = from i in feed.Descendants("item")&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;select i;&lt;BR&gt;foreach (var i in items)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(i.Element("title"));&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The former of these examples illustrates another point of confusion,&amp;nbsp;the distinction between Element() vs Elements() and Attribute() vs Attributes().&amp;nbsp; The current naming scheme is that the singular form returns the first matching XElement or the only matching XAttribute object; the plural form returns an IEnumerable over all the elements or attributes.&amp;nbsp; This is, to be frank, creates a dilemma: The naming scheme is quite logical and aligned with English semantics, but&amp;nbsp;can be&amp;nbsp;confusing to real humans who don't necessarily see that they've typed "Element" when they meant to type "Elements".&amp;nbsp; Intellisense can lead people astray here as well; people tend to&amp;nbsp; grab the first option that Intellisense presents, which may not be the one they really need.&amp;nbsp; We could of course make the method names more verbose and less easily confused, e.g. "Element" vs "AllElements" or "ElementsAxis".&amp;nbsp; Some of us guess is that this verbosity will help people during the learning process, but annoy them for the rest of their careers&amp;nbsp;... like the much-hated DOM method GetElementsByTagName() does. &amp;nbsp;We&amp;nbsp;would definitely appreciate some real world feedback here!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Next time I'll dig more into that challenges that people run into when using functional construction to create or reshape XML, and the power that can be achieved by combining the LINQ operators and functional construction.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;[1]&amp;nbsp; OK, maybe it would be better to say that the more you know about imperative XML APIs, the faster you'll learn LINQ to XML .... but knowledge of the more declarative tools such as XPath/XSLT/XQuery is probably a benefit.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1066557" width="1" height="1"&gt;</content><author><name>mikechampion</name><uri>http://blogs.msdn.com/members/mikechampion.aspx</uri></author></entry></feed>