<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Mickey Williams @ Neudesic</title><subtitle type="html" /><id>http://blogs.neudesic.com/blogs/mickey_williams/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.neudesic.com/blogs/mickey_williams/atom.aspx" /><generator uri="http://communityserver.org" version="2.0.60217.2664">Community Server</generator><updated>2005-12-01T06:19:00Z</updated><entry><title>Follow-up Post for my Denver VSTS Presentation</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2008/06/03/72528.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2008/06/03/72528.aspx</id><published>2008-06-03T14:39:00Z</published><updated>2008-06-03T14:39:00Z</updated><content type="html">&lt;P&gt;I had a few questions in Denver at the Adopting VSTS 2008 event – I took some of them offline due to the timeline – here’s the info:&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: How do I enlist a unit test into a performance profiling session?&lt;/B&gt; &lt;BR&gt;In the Test Results window, right-click on any test and select Create Performance Session from the context menu. The Performance Wizard will be displayed, which enables you to kick of the performance session and profile the unit test’s execution.&lt;/P&gt;
&lt;P&gt;From that point, it’s just like running any other performance session. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: How do I test a web service in an automated test?&lt;/B&gt; &lt;BR&gt;Steve Lange has just posted a great description of how to do this: &lt;A href="http://blogs.msdn.com/slange/archive/2008/05/23/creating-a-data-driven-web-test-against-a-web-service.aspx"&gt;http://blogs.msdn.com/slange/archive/2008/05/23/creating-a-data-driven-web-test-against-a-web-service.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: How do I spin up a web test from IIS logs?&lt;/B&gt; &lt;BR&gt;&lt;A href="http://blogs.msdn.com/joshch/archive/2006/07/03/655518.aspx"&gt;http://blogs.msdn.com/joshch/archive/2006/07/03/655518.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: How do I test an InfoPath form in SharePoint using a VSTS Web Test?&lt;/B&gt; &lt;BR&gt;If you’re working with the InfoPath Forms Server, you need to create a custom extractor. In a nutshell, the issue is that InfoPath posts a bag of fairly opaque data back to the server. Some of this data is contextual, and some of it is not. A good description and sample code that we have leveraged can be found on CodePlex at:&lt;BR&gt;&lt;A href="http://www.codeplex.com/ipfswebtest"&gt;http://www.codeplex.com/ipfswebtest&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;It turns out that MOSS will also use the forms server even in scenarios that don’t seem to use InfoPath. Mike Pham and I ran into this recently for a client, and I had to write a custom extractor that used a different index than used in the above article. I’ll try to clean up the code for an external post, but the only significant change I made from the above project is that I changed the CurrentFormData.CanaryValue to 24 instead of 25. If you stumble onto this blog post via a web search, feel free to drop me an email. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: What does an event subscription for a check-in policy override look like?&lt;/B&gt; &lt;BR&gt;As I said in my presentation, there are a rather limited set of notification alerts available from the Explorer GUI. You can use bissubscribe.exe to create more sophisticated subscriptions, as described here:&lt;BR&gt;&lt;A href="http://blogs.msdn.com/darrenj/archive/2006/06/08/621902.aspx"&gt;http://blogs.msdn.com/darrenj/archive/2006/06/08/621902.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The idea behind an alert that is triggered for a policy override is that the comment will be non-empty. A command-line for bissubscribe will look like:&lt;/P&gt;&lt;PRE&gt;bisSubscribe.exe /eventType CheckinEvent /userId corp\myuserid /address mickey@servergeek.com /deliveryType EmailHtml /filter "PolicyOverrideComment &amp;lt;&amp;gt;''"
&lt;/PRE&gt;
&lt;P&gt;A more convenient approach is to use Naren’s event subscription tool available here, which takes care of some of the plumbing, and just requires you to supply the filter expression (PolicyOverrideComment &amp;lt;&amp;gt;''):&lt;BR&gt;&lt;A href="http://blogs.msdn.com/narend/archive/2006/07/26/679440.aspx"&gt;http://blogs.msdn.com/narend/archive/2006/07/26/679440.aspx&lt;/A&gt;&lt;BR&gt;or the newer tool available on CodePlex here:&lt;BR&gt;&lt;A href="http://www.codeplex.com/tfseventsubscription"&gt;http://www.codeplex.com/tfseventsubscription&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: Multiple servers?&lt;/B&gt; &lt;BR&gt;I have no idea what that comment means in my notes. I’m sure that at least one person would like information on multiple servers, but I have no idea what the context is. If you know, send me a note at first.last@neudesic.com, and I’ll post a follow-up. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: Where’s the TFS migration blog?&lt;/B&gt; &lt;BR&gt;&lt;A href="http://blogs.msdn.com/tfs_migration/"&gt;http://blogs.msdn.com/tfs_migration/&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: Where is the tool for SVN-&amp;gt;TFS migration?&lt;/B&gt; &lt;BR&gt;It seems to have disappeared. If you’re a Neudesic person and you’re looking for a side project, see me. &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Q: Where are your slides?&lt;/B&gt; &lt;BR&gt;I’ve posted PDFs of my slides on skydrive at:&lt;BR&gt;&lt;A href="http://cid-d00ef348fc8a6f04.skydrive.live.com/self.aspx/VSTS-Denver%20May%202008"&gt;http://cid-d00ef348fc8a6f04.skydrive.live.com/self.aspx/VSTS-Denver%20May%202008&lt;/A&gt; &lt;BR&gt;or&lt;BR&gt;&lt;A href="http://snurl.com/2c7wg"&gt;http://snurl.com/2c7wg&lt;/A&gt; &lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=72528" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>Microsoft Search Server Available (for free!)</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2007/11/06/20207.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2007/11/06/20207.aspx</id><published>2007-11-06T14:22:00Z</published><updated>2007-11-06T14:22:00Z</updated><content type="html">&lt;P&gt;Microsoft has released Microsoft Search Server (MSS) 2008 and&amp;nbsp;MSS Express. Both of these server products are &lt;STRIKE&gt;free&lt;/STRIKE&gt; enterprise search products that are useful in scenarios where a full installation of MOSS is overkill -- you just want to have the enterprise search capability.&lt;/P&gt;
&lt;P&gt;Info about the new products is here:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/enterprisesearch/products.aspx"&gt;http://www.microsoft.com/enterprisesearch/products.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;And MSS Express is free. Get it here:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/enterprisesearch/serverproducts/searchserverexpress/download.aspx"&gt;http://www.microsoft.com/enterprisesearch/serverproducts/searchserverexpress/download.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Updated to make clear that only MSS Express is free.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=20207" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>October Orcas CTP is now available</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/11/01/570.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/11/01/570.aspx</id><published>2006-11-01T15:02:00Z</published><updated>2006-11-01T15:02:00Z</updated><content type="html">&lt;P&gt;The October VPC image for Orcas is now available:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C09B5A2D-EB6A-44B6-8BBD-3764A2FDA9CE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=C09B5A2D-EB6A-44B6-8BBD-3764A2FDA9CE&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=570" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>Team Foundation Server SP1 Beta</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/10/01/335.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/10/01/335.aspx</id><published>2006-10-01T15:55:00Z</published><updated>2006-10-01T15:55:00Z</updated><content type="html">&lt;P&gt;The beta drop of TFS SP1 is &lt;A href="http://connect.microsoft.com/VisualStudio/content/content.aspx?ContentID=3311"&gt;available&lt;/A&gt;, including bug fixes and new features like:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Support for &lt;A href="http://blogs.msdn.com/vstsue/archive/2006/09/27/777554.aspx"&gt;custom controls in workitems&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Remote HTTP access without the need for a VPN&lt;/LI&gt;
&lt;LI&gt;Support for Office 2007&lt;/LI&gt;
&lt;LI&gt;Support for moving the data warehouse to a separate server&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;However -- be aware that this is a beta drop, and the list of known problems is fairly nasty -- you should probably only install it on a pre-dogfood VPC image running on your oldest external drive during non-production hours. And wear gloves.&lt;/P&gt;
&lt;P&gt;List of bugs fixed here:&lt;BR&gt;&lt;A href="http://blogs.msdn.com/bharry/archive/2006/09/28/775891.aspx"&gt;http://blogs.msdn.com/bharry/archive/2006/09/28/775891.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Features here:&lt;BR&gt;&lt;A href="http://blogs.msdn.com/bharry/archive/2006/09/26/772371.aspx"&gt;http://blogs.msdn.com/bharry/archive/2006/09/26/772371.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Beta issues here:&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/vstudio/teamsystem/tfsknownissues_sp1.aspx"&gt;http://msdn.microsoft.com/vstudio/teamsystem/tfsknownissues_sp1.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=335" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>Best. WPF Book. Evar.</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/09/30/333.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/09/30/333.aspx</id><published>2006-09-30T18:16:00Z</published><updated>2006-09-30T18:16:00Z</updated><content type="html">&lt;P&gt;I learned to build 16-bit Windows apps with an 8088 and a copy of Petzold's "Programming Windows". I remember thinking that I would never learn the Windows API -- back then there were at least 300 or so method calls. I bought&amp;nbsp;my first&amp;nbsp;mouse, a hard drive (I was the first person I knew with a harddrive -- it was 5 megabytes of glorious luxury.)&lt;/P&gt;
&lt;P&gt;As time went on, both Petzold and Microsoft reelased updates, and frankly Petzold stopped being my refeerence of choice. But his new WPF book is the best thing I've read in years, and is easily the best introduction to writing WPF applications.&lt;/P&gt;
&lt;P&gt;Go. Buy it now:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.amazon.com/Applications-Code-Markup-Presentation-Foundation/dp/0735619573"&gt;http://www.amazon.com/Applications-Code-Markup-Presentation-Foundation/dp/0735619573&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=333" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>String.IsNullOrEmpty is broken</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/09/29/329.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/09/29/329.aspx</id><published>2006-09-30T05:48:00Z</published><updated>2006-09-30T05:48:00Z</updated><content type="html">&lt;P&gt;If you're using string.IsNullOrEmpty, be aware that there is a fatal bug in the JIT compiler that causes a null reference exception:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=113102"&gt;http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=113102&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;This means that String.IsNullOrEmpty is not safe for use in any production .NET 2.0 project.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Note that the "workaround" effectively amounts to "don't use string.IsNullOrEmpty" -- write your own version, and slap a MethodImpl attribute on the method to prevent JIT optimization.&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=329" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>Side Effects with Caching and PreviousPage in ASP.NET 2.0</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/08/28/272.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/08/28/272.aspx</id><published>2006-08-29T05:56:00Z</published><updated>2006-08-29T05:56:00Z</updated><content type="html">&lt;P&gt;I've been working on a project that has some fairly aggressive performance requirements, and believe me, some of the behavior I've seen with ASP.NET 2.0 caching is a bit odd, especially when you use output caching and cross-page posting at the same time.&lt;/P&gt;
&lt;P&gt;In brief, if you use cross-page posts, the destination page uses the cache policy for the original page sometimes. And sometimes not. And sometimes raises an exception. I have discovered why this happens, and can demonstrate it with a three-page demo project (available &lt;A href="http://www.neudesic.com/uploads/mickey_williams/cachevsprevpage.zip"&gt;here&lt;/A&gt;.) The bug was reported to Microsoft&amp;nbsp;&lt;A href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=161534"&gt;here&lt;/A&gt;. 
&lt;P&gt;In general, cross-page posts and caching work as expected. If each page is accessed directly, the cache policy for the page is properly evaluated. If the first page executes a cross-page post to either of the other pages, the cache policy for the destination page is used. Again, this is as expected.&lt;/P&gt;
&lt;P&gt;However, if you simply access the PreviousPage property on any destination page, the cache policy for the previous page is used -- not the cache policy for the destination!&lt;/P&gt;
&lt;P&gt;If the previous page and destination page both utilize a cache policy that involves varyByCustom, any attempt to access the PreviousPage property will cause an exception (because we attempt to overwrite the cache policy, causing a change to the VaryByCustom value.)&lt;/P&gt;
&lt;P&gt;There are several problems here: 
&lt;UL&gt;
&lt;LI&gt;The cache policy should not be spun up just because I'm checking to see if the previous page is null (frankly this is an argument for Eiffel's &lt;A href="http://en.wikipedia.org/wiki/Command-query_separation"&gt;command-query separation&lt;/A&gt; principle) 
&lt;LI&gt;In fact, I argue that the cache policy should be predictable, and the current situation is certainly not. 
&lt;LI&gt;And the exception just blows chunks.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I'll try to post more about cache wierdness and internals as time permits.&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=272" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>Bad Design Decisions in TFS: XML passed as a string</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/07/03/186.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/07/03/186.aspx</id><published>2006-07-03T14:52:00Z</published><updated>2006-07-03T14:52:00Z</updated><content type="html">&lt;P&gt;I try not to whine too much on the blog, but I've been working on a side project that involves extending TFS eventing, and one of the first things I saw when I peeked under the covers was the definition of the notification web service method:&lt;/P&gt;&lt;PRE&gt;[WebMethod]
public void Notify(string eventXml, string tfsIdentityXml) 
{
  ...
} 
&lt;/PRE&gt;
&lt;P&gt;Now, not using WS-Eventing is certainly annoying, especially to those of us in the WS-* Breakfast Club, but the signature is downright embarrassing. Passing XML content as a string screams, "I'm really not sure I know what the hell I'm doing", and not in that cool punk-rock garage-band way. It's a key part of the extensibility plumbing. Could nobody have caught this in an SDR or something?&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=186" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>Custom Checkin Policies for Team Foundation Server</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/06/23/178.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/06/23/178.aspx</id><published>2006-06-23T13:41:00Z</published><updated>2006-06-23T13:41:00Z</updated><content type="html">&lt;P&gt;One of my talks tomorrow is on TFS source code control, and as part of the discussion, I'll be demonstrating custom checkin policies. A custom checkin policy runs when you attempt to modify the source archive, and is given veto power over your checkin. Well, it's really not a veto, but that's a long story... Anyhow, the Evaluate method is the core of a checkiin policy, and this one ensures that the source file has only one top-level type: 
&lt;P&gt;&lt;PRE&gt;public override PolicyFailure[] Evaluate()
{
    List&amp;lt;PolicyFailure&amp;gt; changes = new List&amp;lt;PolicyFailure&amp;gt;();

    PendingChange[] pendingChanges = PendingCheckin.PendingChanges.CheckedPendingChanges;
    foreach (PendingChange change in pendingChanges)
    {
        if (Path.GetExtension(change.FileName) == ".cs")
        {
            if ((change.ChangeType == ChangeType.Edit) || 
                (change.ChangeType == ChangeType.Add))
            {
                if (!FileHasOneType(change.LocalItem))
                {
                    string msg = string.Format(Constants.FailureMessage, change.LocalItem);
                    PolicyFailure failure = new PolicyFailure(msg, this);
                    changes.Add(failure);
                }
           }
       }
   }
   return changes.ToArray();
}&lt;/PRE&gt;
&lt;P&gt;The basic idea of Evaluate is that it returns an array of PolicyFailure instances. If the array is empty, the policy has succeeded. If the array has elements, they are reported back to the user. &lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=178" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>XLINQ and a Suggestion</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/06/22/176.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/06/22/176.aspx</id><published>2006-06-22T02:57:00Z</published><updated>2006-06-22T02:57:00Z</updated><content type="html">&lt;P&gt;If you're planning to be at my XLINQ talk this weekend at the San Diego CodeCamp, you might consider attending the C# 3.0 session first, where I'll be dicussing anonymous types, lambdas, and other topics. In the XLINQ talk, I'll be dicussing the differences between these two queries, and when one is more useful that the other:&lt;/P&gt;&lt;PRE&gt;from i in customers.Descendants("country").Select(x=&amp;gt;x.Value).Distinct()
orderby i
select new XElement("country", new XAttribute("name", i),
       from c in customers.Element("customers").Elements("customer")
       where i == (string)c.Element("country")
       select new XElement("customer", c.Element("name"))
                    )
       );
&lt;/PRE&gt;
&lt;P&gt;Versus this query:&lt;/P&gt;&lt;PRE&gt;from i in customers.Descendants("country").Select(country=&amp;gt;country.Value).Distinct()
join c in customers.Element("customers").Elements("customer")
       on i equals (string)c.Element("country")
orderby i
select new XElement("customer", c.Element("name"),new XAttribute("country", i))
);
&lt;/PRE&gt;
&lt;P&gt;They both return XML content, but you'll want to understand how to shape the content to match your needs. More at the talk... &lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=176" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>XLINQ at Code Camp</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/06/18/173.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/06/18/173.aspx</id><published>2006-06-17T23:01:00Z</published><updated>2006-06-17T23:01:00Z</updated><content type="html">&lt;P&gt;In preparation for&amp;nbsp;my (6) code camp talks&amp;nbsp;next weekend, I'mupdating my samples. One thing that's changed slightly is the LINQ syntax. The code below thumbs through the Northwind database, and displays all customers in London, nesting the orders for each customer:&lt;/P&gt;&lt;PRE&gt;var orders = new XElement("CustomerOrders", new XAttribute("city", "london"),
        from c in db.Customers
        where c.City == "London"
        select new XElement("Customer", new XAttribute("id", c.CustomerID),
                             from o in db.Orders
                             where o.CustomerID == c.CustomerID
                             select new XElement("order", new XAttribute("id", o.OrderID))
                           )
                         );
&lt;/PRE&gt;
&lt;P&gt;The resulting XML looks something like:&lt;/P&gt;&lt;PRE&gt;&amp;lt;CustomerOrders city="london"&amp;gt;
  &amp;lt;Customer id="AROUT"&amp;gt;
    &amp;lt;order id="10355" /&amp;gt;
    &amp;lt;order id="11016" /&amp;gt;
  &amp;lt;/Customer&amp;gt;
  &amp;lt;Customer id="BSBEV"&amp;gt;
    &amp;lt;order id="10289" /&amp;gt;
    &amp;lt;order id="11023" /&amp;gt;
  &amp;lt;/Customer&amp;gt;
  &amp;lt;Customer id="CONSH"&amp;gt;
    &amp;lt;order id="10435" /&amp;gt;
    &amp;lt;order id="10462" /&amp;gt;
    &amp;lt;order id="10848" /&amp;gt;
  &amp;lt;/Customer&amp;gt;
  &amp;lt;Customer id="EASTC"&amp;gt;
    &amp;lt;order id="10364" /&amp;gt;
    &amp;lt;order id="11047" /&amp;gt;
    &amp;lt;order id="11056" /&amp;gt;
  &amp;lt;/Customer&amp;gt;
&amp;lt;/CustomerOrders&amp;gt;
&lt;/PRE&gt;
&lt;P&gt;There's more where that came from... My total talk gluttony includes talks on: 
&lt;UL&gt;
&lt;LI&gt;C# 3.0 
&lt;LI&gt;WinFS (with Pete Orologas) 
&lt;LI&gt;Creating Custom Controls for ASP.NET 2.0 
&lt;LI&gt;Taking Advantage of Team System Version Control 
&lt;LI&gt;Creating Team Foundation Server Add-ins 
&lt;LI&gt;Using XLINQ &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;If/when you get tired of listening to me prattle on, other Neudesic speakers include Chris Rolon, David Pallmann, Steve Saxon, David Barkol, Brian Loesgen, Phil Scott, Robert Atland, and Ashish Agarwal.&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=173" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>New LINQ and C# 3.0 Preview Available</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/05/11/118.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/05/11/118.aspx</id><published>2006-05-11T14:46:00Z</published><updated>2006-05-11T14:46:00Z</updated><content type="html">&lt;P&gt;The new LINQ bits are available here:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=66144"&gt;http://go.microsoft.com/fwlink/?LinkId=66144&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=118" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>VB Examples Preferred on MSDN?</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/02/04/32.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2006/02/04/32.aspx</id><published>2006-02-04T16:53:00Z</published><updated>2006-02-04T16:53:00Z</updated><content type="html">&lt;P&gt;Tom Archer posts about MSDN preferring (or not) one language over another (link from &lt;A href="http://geekswithblogs.net/bloesgen/"&gt;Brian Loesgen&lt;/A&gt;):&lt;BR&gt;&lt;A href="http://blogs.msdn.com/tomarcher/archive/2005/11/21/495282.aspx"&gt;http://blogs.msdn.com/tomarcher/archive/2005/11/21/495282.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;My thoughts (I posted similar comments on Tom's blog):&lt;BR&gt;I definitely prefer C# for my daily programming&amp;nbsp;over VB.NET. Actually, the unordered list of programming languages I&amp;nbsp;prefer is:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.eiffel.com"&gt;Eiffel&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://research.microsoft.com/specsharp/"&gt;Spec#&lt;/A&gt; 
&lt;LI&gt;C# 
&lt;LI&gt;Scheme &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;However, the selection of programming language needs to fit the task at hand, and Eiffel and Spec# are not practical for most of my daily work. This has nothing to do with the quality of the languages -- I think Eiffel may be the perfect method and language for OO programming. However, I tend to be more productive in a team consulting environment for my current projects using Visual C#. However, after the revolution comes, you're all going to be using Eiffel. Or at least Spec#. So get ready.&lt;/P&gt;
&lt;P&gt;I've used Visual Basic and Visual Basic.NET, and I've recently presented webcasts on Visual Basic.NET language features. I tend to think of Visual Basic the way I think of Escondido. It's alright and not completely unpleasant&amp;nbsp;-- but I'm not going there unless someone needs me to be there.&lt;/P&gt;
&lt;P&gt;As for examples, when I use C#, Spec# or Eiffel, I can express my examples better, there's less chance of error, and you're much more likely to get the content in a timely manner ;) So if you take into account marketplace realities and the relative audiences for all programming languages, you'll typically see my examples in C#.&lt;/P&gt;
&lt;P&gt;The one issue I would raise is that there are language features in C# that do not map easily to VB, and I see many dual-code examples where the C# code is simply a literal translation of the VB. I've seen many C# examples that didn't employ the using(...){} syntax -- apparently because it didn't match the adjacent VB code (or maybe the author was more familiar with VB).&amp;nbsp; I would definitely prefer that examples in any language leverage the language rather than being presented in some weird common subset. Frankly, I'd be happy with examples in F# if it illustrated a better approach to solving the problem at hand.&lt;/P&gt;
&lt;P&gt;And I'll try to add more Eiffel, Spec#, Scheme (and maybe Haskell) examples going forward.&lt;/P&gt;
&lt;UL&gt;&lt;/UL&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=32" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>FAQ: How do I serialize an arbitrary object into an XML document</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2005/12/30/15.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2005/12/30/15.aspx</id><published>2005-12-30T21:35:00Z</published><updated>2005-12-30T21:35:00Z</updated><content type="html">&lt;P&gt;Although most of the examples that you see in MSDN and elsewhere online assume a hardcoded type for an object being serilized, it's fairly easy to use a generic method that's parameterized for the object to be serialized:&lt;/P&gt;&lt;PRE&gt;void SerializeToXml&amp;lt;T&amp;gt;(T thing, string path)
{
    using (XmlWriter writer = XmlTextWriter.Create(path, null))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(writer, thing);
    }
}
&lt;/PRE&gt;
&lt;P&gt;The client-side usage pattern is straight-forward:&lt;/P&gt;&lt;PRE&gt;       SerializeToXml(myObj, @"c:\xml\myObj.xml");
&lt;/PRE&gt;
&lt;P&gt;You can use similar code to deserialize:&lt;/P&gt;&lt;PRE&gt;T DeserializeFromXml&amp;lt;T&amp;gt;(string path)
{
    using (XmlReader reader = XmlTextReader.Create(path, null))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        return (T)serializer.Deserialize(reader);
    }
}
&lt;/PRE&gt;
&lt;P&gt;As the type of T is not discoverable in the actual parameter list, the consumer of this method must explicitly parameterize the call (note that a cast is not required):&lt;/P&gt;&lt;PRE&gt;       MyObj theObj = DeserializeFromXml&amp;lt;MyObj&amp;gt;(@"c:\xml\myObj.xml");
&lt;/PRE&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=15" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry><entry><title>Threading Futures</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/mickey_williams/archive/2005/12/01/7.aspx" /><id>http://blogs.neudesic.com/blogs/mickey_williams/archive/2005/12/01/7.aspx</id><published>2005-12-01T06:19:00Z</published><updated>2005-12-01T06:19:00Z</updated><content type="html">&lt;P&gt;If you're the type of person that's interested in high-perf multi-threading and you're also open to more academic programming languages&lt;SUP&gt;1&lt;/SUP&gt;, a great paper on lock-free threading in Haskell is available &lt;A href="http://research.microsoft.com/%7Esimonpj/papers/stm/lock-free.htm"&gt;here&lt;/A&gt; (via &lt;A href="http://lambda-the-ultimate.org/node/view/1151"&gt;LtU&lt;/A&gt;). I talked to &lt;A href="http://research.microsoft.com/~tharris/"&gt;Tim Harris&lt;/A&gt; briefly at the PDC after his excellent talk on threading and transaction futures (FUN323 if you have the DVD set), and some of the work that's ongoing at MSR is very cool indeed. Although I'm also fond of the declarative&amp;nbsp;&lt;A href="http://www.eiffel.com/"&gt;Eiffel &lt;/A&gt;approach using SCOOP (the ETH .NET implementation&amp;nbsp;is available &lt;A href="http://se.ethz.ch/research/scoop.html"&gt;here&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;P.S. Visual Haskell is available &lt;A href="http://www.haskell.org/visualhaskell/"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;[1]&lt;/B&gt;&lt;I&gt;There are more things on heaven and earth than are dreamt of in your massive C# books, Horatio.&lt;/I&gt;&lt;/P&gt;&amp;nbsp;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=7" width="1" height="1"&gt;</content><author><name>Mickey Williams</name><uri>http://blogs.neudesic.com/members/Mickey+Williams.aspx</uri></author></entry></feed>