<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Steve Strong's Blog</title>
        <link>http://blogs.imeta.co.uk/sstrong/Default.aspx</link>
        <description>Blog.Post(GetRandomMusings());</description>
        <language>en-GB</language>
        <copyright>Steve Strong</copyright>
        <generator>Subtext Version 2.1.1.1</generator>
        <image>
            <title>Steve Strong's Blog</title>
            <url>http://blogs.imeta.co.uk/images/RSS2Image.gif</url>
            <link>http://blogs.imeta.co.uk/sstrong/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>TekPub's Mastering LINQ Challenge</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2010/01/09/828.aspx</link>
            <description>&lt;p&gt;Just saw a good little &lt;a href="http://www.codethinked.com/post/2010/01/08/TekPubs-Mastering-LINQ-Challenge.aspx"&gt;LINQ quiz&lt;/a&gt; on Justin Etheredge's blog - I saw it way too late to get the &lt;a href="http://www.tekpub.com/"&gt;TekPub&lt;/a&gt; subscription, but thought it looked fun anyhow. Here's my solution:&lt;/p&gt;&lt;code&gt;   static void Main(string[] args)&lt;br /&gt;
   {&lt;br /&gt;
     int max = 100;&lt;br /&gt;
&lt;br /&gt;
     var primes = Enumerable.Range(1, max)&lt;br /&gt;
      .Where(i =&amp;gt; i &amp;gt; 1)&lt;br /&gt;
      .Aggregate(Enumerable.Range(2, max - 1).ToArray(), (sieve, i) =&amp;gt;&lt;br /&gt;
      {&lt;br /&gt;
        if ((i &amp;gt; Math.Sqrt(max)) || (sieve[i - 2] == 0)) return sieve;&lt;br /&gt;
        for (int m = 2; m &amp;lt;= max / i; m++)&lt;br /&gt;
          sieve[i * m - 2] = 0;&lt;br /&gt;
        return sieve;&lt;br /&gt;
      })&lt;br /&gt;
      .Where(n =&amp;gt; n != 0)&lt;br /&gt;
      ;&lt;br /&gt;
&lt;br /&gt;
     foreach (var p in primes)&lt;br /&gt;
     {&lt;br /&gt;
       Console.WriteLine(p);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;&lt;/code&gt;
&lt;p&gt;Arguably it's not pure LINQ; there's more going on inside the aggregate lambda than I'd like, but it does the job and for those into this sort of thing you should recognise it as an implementation of the &lt;a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes"&gt;Sieve of Eratosthenes&lt;/a&gt;.&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/Linq" rel="tag"&gt;Linq&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/828.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2010/01/09/828.aspx</guid>
            <pubDate>Sat, 09 Jan 2010 21:06:31 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/828.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2010/01/09/828.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/828.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/828.aspx</trackback:ping>
        </item>
        <item>
            <title>Using the new Linq to NH Provider and migrating from the old one</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/12/16/824.aspx</link>
            <description>&lt;p&gt;Using the new Linq provider is pretty simple. It all hangs of a Query() extension method on ISession, so you can do things like the following:&lt;/p&gt;&lt;code&gt;  from c in session.Query&amp;lt;Customer&amp;gt;() select c&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;In my tests, I've tended to wrap the session.Query() call behind a simple facade, along the lines of:&lt;/p&gt;&lt;code&gt;  public class Northwind&lt;br /&gt;
  {&lt;br /&gt;
   private readonly ISession _session;&lt;br /&gt;
&lt;br /&gt;
   public Northwind(ISession session)&lt;br /&gt;
   {&lt;br /&gt;
   _session = session;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public IQueryable&amp;lt;Customer&amp;gt; Customers   { get { return _session.Query&amp;lt;Customer&amp;gt;(); }&lt;br /&gt;
  }&lt;br /&gt;&lt;/code&gt;
&lt;p&gt;Of course, that's entirely optional, but I find the resulting code easier to read:&lt;/p&gt;&lt;code&gt;  from c in db.Customers select c&lt;/code&gt;&lt;br /&gt;
&lt;p&gt;Once you know how to hook into the session (which as you can see is pretty simple), the rest is just straightforward Linq code, and entirely up to you! Right now I'm not exposing any extension points, but they'll be coming soon (plus another post to describe how to use them).&lt;/p&gt;
&lt;p&gt;The version 1 provider used an ISession extension method call Linq() to provide its hook. I purposefully used a different name, since there's no reason at all why you can't use both providers within the same project or, indeed, within the same session. So that gives a couple of migration options for folk that want to move to the new provider:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Leave all your current queries using .Linq(), and start using .Query() for new ones.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Start changing existing queries from .Linq() to .Query(), just by changing them or by a simple search &amp;amp; replace. The rest of the expression will (hopefully!) just work.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Drop your reference to the original Linq provider assembly, and create your own extension method:&lt;br /&gt;
  &lt;br /&gt;
  &lt;code&gt;  public static IQueryable&amp;lt;T&amp;gt; Linq&amp;lt;T&amp;gt;(this ISession session)&lt;br /&gt;
    {&lt;br /&gt;
      return session.Query&amp;lt;T&amp;gt;();&lt;br /&gt;
    }&lt;/code&gt;&lt;br /&gt;
  &lt;br /&gt;
  This lets you switch to the new provider without changing a line of your code - and if you find it all goes to hell, you just re-add the V1 reference and comment out your extension method. Should work like a treat.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other than that, I don't think there's much to tell - usage really should be pretty simple. Oh, one thing that springs to mind - although you can use the V1 provider and the new provider within the same project (or session), don't try to compose queries from them together; that's really going to do weird stuff!&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/Linq" rel="tag"&gt;Linq&lt;/a&gt;, &lt;a href="http://technorati.com/tag/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/824.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/12/16/824.aspx</guid>
            <pubDate>Wed, 16 Dec 2009 22:56:51 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/824.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/12/16/824.aspx#feedback</comments>
            <slash:comments>15</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/824.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/824.aspx</trackback:ping>
        </item>
        <item>
            <title>Linq to NHibernate Progress Report - A Christmas Gift?</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/12/16/823.aspx</link>
            <description>&lt;p&gt;Time for another progress report, and this one's a biggie :)&lt;/p&gt;
&lt;p&gt;Barring a couple of pretty minor things that won't take much fixing, all the original Linq tests have now been ported over to the new provider and are all passing. That means the new provider is now (from the perspective of the tests, at least) in better shape that the version 1 provider. It can do everything the original provider could, plus a whole bunch more. A couple of example queries that now work just fine are:&lt;/p&gt;&lt;code&gt;  from e in db.Employees&lt;br /&gt;
  from et in e.Territories&lt;br /&gt;
  where e.Address.City == "Seattle"&lt;br /&gt;
  select new {e.FirstName, e.LastName, et.Region.Description};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  from c in db.Customers&lt;br /&gt;
  join o in db.Orders on c.CustomerId equals o.Customer.CustomerId into orders&lt;br /&gt;
  select new {c.ContactName, OrderCount = orders.Average(x =&amp;gt; x.Freight)};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  from o in db.Orders&lt;br /&gt;
  from p in db.Products&lt;br /&gt;
  join d in db.OrderLines on new {o.OrderId, p.ProductId} equals new {d.Order.OrderId, d.Product.ProductId}&lt;br /&gt;
   into details&lt;br /&gt;
  from d in details&lt;br /&gt;
  select new {o.OrderId, p.ProductId, d.UnitPrice}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;  from c in db.Customers&lt;br /&gt;
  join o in db.Orders on c.CustomerId equals o.Customer.CustomerId&lt;br /&gt;
  group o by c into x&lt;br /&gt;
  select new { CustomerName = x.Key.ContactName, Order = x }&lt;br /&gt;&lt;/code&gt;
&lt;p&gt;(ignore whether those queries make any real sense, it's just the form of them that matters)&lt;/p&gt;
&lt;p&gt;So, more importantly, what doesn't work? Well, out of the tests that we've currently got, not a huge amount. Some important areas that are missing are:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Nested selects to produce hierarchical output. I've got some prototype code for doing this, so it will be supported at some point but isn't there right now. Of course, since NH already understands relationships, nested selects are far less important than they are for something like Linq to SQL.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Group joins that produce hierarchical output - these essentially boil down to the same code as the nested select case, so support for these will probably come at around the same time. Group joins that don't introduce a hierarchy should work just fine.&lt;br /&gt;&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Set operations, such as Union and Intersect. Union you can obviously do yourself in client code with no particular overhead. Intersect would really be better in the provider :)&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Left outer join style queries, such as:&lt;br /&gt;
  &lt;br /&gt;
  &lt;code&gt;from e in db.Employees&lt;br /&gt;
  join o in db.Orders on e equals o.Employee into ords&lt;br /&gt;
  from o in ords.DefaultIfEmpty()&lt;br /&gt;
  select new {e.FirstName, e.LastName, Order = o};&lt;br /&gt;
  &lt;br /&gt;&lt;/code&gt; This is a fairly widely used construct, so is close to top of the list for future support&lt;br /&gt;&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Let expressions, such as:&lt;br /&gt;
  &lt;br /&gt;
  &lt;code&gt;from c in db.Customers&lt;br /&gt;
  join o in db.Orders on c.CustomerId equals o.Customer.CustomerId into ords&lt;br /&gt;
  let z = c.Address.City + c.Address.Country&lt;br /&gt;
  from o in ords&lt;br /&gt;
  select new {c.ContactName, o.OrderId, z};&lt;br /&gt;
  &lt;br /&gt;&lt;/code&gt; Again, this is quite high on the TODO list.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Support for custom functions. This is actually fully implemented internally, but I just want to review the API usage before I tell you all how to use it - it probably needs a little cleanup from it's current state, but I don't anticipate any major changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I've also got a number of TODOs, but mainly cleanup rather than functional, plus I need to work through the error handling to ensure that any queries that are passed in that the provider &lt;b&gt;can't&lt;/b&gt; handle are rejected gracefully rather than just barfing (which is the likely case right now).&lt;/p&gt;
&lt;p&gt;The only gotcha that I know of is a query that runs just fine but doesn't necessarily return the correct number of results. Specifically, queries like this:&lt;/p&gt;&lt;code&gt;  from user in db.Users&lt;br /&gt;
  select new&lt;br /&gt;
  {&lt;br /&gt;
    user.Name,&lt;br /&gt;
    RoleName = user.Role.Name&lt;br /&gt;
  };&lt;br /&gt;&lt;/code&gt;
&lt;p&gt;Right now, this generates a &lt;b&gt;join&lt;/b&gt; to the Role table, so any users that &lt;b&gt;don't&lt;/b&gt; have a role are not returned. This differs from Linq to SQL where a &lt;b&gt;left join&lt;/b&gt; is generated, giving a null RoleName for any users without a role. I believe the Linq to SQL implementation to be correct - the above query doesn't explicitly have any form of filtering (where clause, join clause etc), so you should get back all the users in the database. This one is top of the list, and hopefully will be fixed soon (it's not hard, I've just run out of time!).&lt;/p&gt;
&lt;p&gt;In summary, I'm getting pretty happy with the state of the provider and think that it's now ready for general usage - although there are still some important query forms to support, I think there's sufficient there now to do useful work. If you've got good test coverage, then I'd even be happy for it to go live. If you don't have good coverage, then don't come crying to me :)&lt;/p&gt;
&lt;p&gt;Of course, this is all in the trunk, so anyone wanting to play either needs to get the trunk source and build it, or take the much easier option of having &lt;a href="http://www.hornget.net/packages/orm/nhibernate/nhibernate-trunk"&gt;Horn&lt;/a&gt; do the work. Horn builds the trunk on a daily basis, so look for a package built after around 2300GMT on the 16/12/2009 (the package URL on Horn has the datetime stamp in it, so it's pretty easy to spot).&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;I'm on holiday for the next couple of weeks, and will only have intermittent internet access. However, ping me either by email or twitter with comments / bugs / suggestions, and I'll do my best to reply. Normal service (whatever that is) will return around Jan 4th.&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/Linq" rel="tag"&gt;Linq&lt;/a&gt;, &lt;a href="http://technorati.com/tag/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/823.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/12/16/823.aspx</guid>
            <pubDate>Wed, 16 Dec 2009 22:32:41 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/823.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/12/16/823.aspx#feedback</comments>
            <slash:comments>22</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/823.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/823.aspx</trackback:ping>
        </item>
        <item>
            <title>Similarities between directing a film &amp; running a software team?</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/11/23/811.aspx</link>
            <description>&lt;p&gt;The other day I was listening to an interview with film director &lt;a href="http://en.wikipedia.org/wiki/Joseph_Strick"&gt;Joseph Strick&lt;/a&gt;, and was particularly struck by two comments he made that, to me at least, resonated with my thoughts about running skilled software teams:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Always let them do something first without telling them what to do, because they may do something fantastic, and if you give them direction before you hear them you may be crushing something that could have been much better.&lt;/p&gt;
&lt;/blockquote&gt;and

&lt;blockquote&gt;
  &lt;p&gt;Nations advance in proportion to their freedom... the more free the culture, the more people are encouraged to think, and thinking means leaving them alone to think.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm a big proponent of getting a team of highly intelligent, motivated individuals and essentially letting them get on with it. The level to which creativity is crushed through any type of micromanagement with these type of people is incredible, and I quite like hearing similar sentiments from such a different sphere of life. I'd be interested in hearing other views on this...&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/Teams" rel="tag"&gt;Teams&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Software%20Development" rel="tag"&gt;Software Development&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/811.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/11/23/811.aspx</guid>
            <pubDate>Mon, 23 Nov 2009 13:35:28 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/811.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/11/23/811.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/811.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/811.aspx</trackback:ping>
        </item>
        <item>
            <title>Linq to NHibernate Progress Report</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/10/22/791.aspx</link>
            <description>&lt;p&gt;Another sprint finished (although with the amount of other stuff I've been doing lately, a "crawl" may be a better description), so time for brief update.&lt;/p&gt;
&lt;p&gt;This one doesn't really add any visible functional improvements, rather I've been concentrating on improving the interaction between the Linq provider and the NHibernate core. So what has changed? Firstly, the Linq expressions now tie into the NHibernate HQL Query cache correctly. So running a query for the second (and subsequent) time results in a cache hit for the NH query plan, resulting in &lt;b&gt;considerably&lt;/b&gt; less processing taking place prior to us actually hitting the database.&lt;/p&gt;
&lt;p&gt;Secondly, and vital for the first to be useful, automatic parameterisation of queries now takes place. By this, I mean that a query such as:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;from c in Customers where c.Address.City = "London"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;now generates HQL of:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;select c from Customers c where c.Address.City = :p1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;which in turn generates parameterised SQL that gets cached within the database (at least, it does for SQL Server)&lt;/p&gt;
&lt;p&gt;Hence, a subsequent query of&lt;/p&gt;
&lt;p&gt;&lt;code&gt;from c in Customers where c.Address.City = "Madrid"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will result in cache hits right through the chain, and so should give great performance. Back to getting more queries working tomorrow.&lt;/p&gt;&lt;br /&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/Linq" rel="tag"&gt;Linq&lt;/a&gt;, &lt;a href="http://technorati.com/tag/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/791.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/10/22/791.aspx</guid>
            <pubDate>Thu, 22 Oct 2009 20:55:05 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/791.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/10/22/791.aspx#feedback</comments>
            <slash:comments>20</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/791.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/791.aspx</trackback:ping>
        </item>
        <item>
            <title>VS2010 "Add Reference" Dialog Box</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/10/22/790.aspx</link>
            <description>&lt;p&gt;The Add Reference dialog box has to be one of the most hated things of Visual Studio; certainly, it seems to get more than its fair share of tweets along the lines of "Agghh, hit 'Add Reference' by mistake. I'm off for a coffee"!&lt;/p&gt;
&lt;p&gt;The reason for the hatred was that the dialog's default tab was the full list of .Net assemblies available on your machine. That's quite a bunch of metadata for VS to go and read and unfortunately it blocked the UI whilst doing so. What made this doubly frustrating, at least for me, is that I rarely wanted that tab - I'm normally after either the Project or Browse tabs.&lt;/p&gt;
&lt;p&gt;Well, this week has seen the release of VS2010 Beta 2, and I think there will be much rejoicing. Finally, Add Reference has had some good loving. Here are some of its better bits:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The default tab when starting VS is now the Projects tab. As a result, it loads pretty much instantly.&lt;/li&gt;

  &lt;li&gt;It now remembers which tab you were on last for this VS session.&lt;/li&gt;

  &lt;li&gt;It now remembers the size of the dialog and any adjustments made to column sizes within each tab, even across restarts of VS.&lt;/li&gt;

  &lt;li&gt;It now has a new "Recent" tab. You can guess what that's for. And the contents survive restarts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's not quite perfect (for example, &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=498811&amp;amp;wa=wsignin1.0"&gt;here&lt;/a&gt; are some issues that relate to the .Net tab), but it's a vast improvement.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;img src="http://blogs.imeta.co.uk/images/blogs_imeta_co_uk/sstrong/200910221105.jpg" width="480" height="404" alt="200910221105.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;UPDATE: It would appear that I'm blind, since the Recent tab has apparently been around since VS2005. And I've just check on my VS2008 install and, sure enough, there it is. I'm now doubting everything I thought I knew :)&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/VS2010" rel="tag"&gt;VS2010&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/790.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/10/22/790.aspx</guid>
            <pubDate>Thu, 22 Oct 2009 09:06:36 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/790.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/10/22/790.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/790.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/790.aspx</trackback:ping>
        </item>
        <item>
            <title>Sporadic Digest of Interesting Stuff</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/10/20/789.aspx</link>
            <description>&lt;p&gt;There's a ton of stuff for this digest, which is hardly a surprise considering it's now around 6 months since the last! So, in no particular order:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Here's a good &lt;a href="http://googlecode.blogspot.com/2009/09/video-introduction-to-html-5.html"&gt;video&lt;/a&gt; highlighting some of the key aspects of HTML 5. It's around an hour long and, particularly if you're an HTML5 noob, well worth the watch.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;And whilst on the topic of HTML5, here's some info on &lt;a href="http://decafbad.com/blog/2009/07/15/html5-drag-and-drop"&gt;Drag 'n' Drop&lt;/a&gt; support. And in the interests of impartiality, here's a &lt;a href="http://www.quirksmode.org/blog/archives/2009/09/the_html5_drag.html"&gt;great rant&lt;/a&gt; on some problems with it. Note that I've not tried this API yet, so I've no opinion on its quality.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Still web-based, here's an &lt;a href="http://devlicio.us/blogs/sergio_pereira/archive/2009/09/19/javascript-and-its-love-for-zeroes.aspx"&gt;interesting gotcha&lt;/a&gt; on how JavaScript manages zeros. It makes perfect sense once you know, but I could see it being a great source of bugs for the uninformed.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;More web, and this time very out of date, and that's a &lt;a href="http://dotnetslackers.com/articles/aspnet/A-First-Look-at-ASP-NET-MVC-2.aspx"&gt;First Look at ASP.NET MVC&lt;/a&gt;. Hey - there might be someone out there who's not seen it!&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;And another old web thing, but again possibly of use to someone, and that's the "new" &lt;a href="http://blogs.msdn.com/somasegar/archive/2009/09/24/announcing-websitespark.aspx"&gt;Website Spark&lt;/a&gt; program from MS that provides (amongst some other things) a pile of licences to qualifying companies.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Here's a funky &lt;a href="http://etherpad.com/"&gt;collaborative web-based text editor&lt;/a&gt; - I've used it with a couple of colleagues, and it does exactly what it says on the tin. Of course, now the Google Wave invites are coming out, perhaps it's just a relic of yesteryear whose only use is to provide another "when I were a kid, it were all fields" story to bore your grandkids with :)&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Is it time to abandon online banking? I'm guessing not yet, but those &lt;a href="http://www.newscientist.com/article/dn17736-codebreaking-quantum-algorithm-run-on-a-silicon-chip.html?DCMP=OTC-rss&amp;amp;nsref=online-news"&gt;quantum computers&lt;/a&gt; do seem to be making slow but steady progress.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;If you follow the OSS world at all, you may have heard the odd rumour about some new kid on the SCM block with the catchy name of Git. For those that don't know, Git's not actually that new - he was sired by none other than Mr. Torvalds in 2005; I particularly like Linus' first design criteria, as described on &lt;a href="http://en.wikipedia.org/wiki/Git_(software)"&gt;Git's Wikipedia page&lt;/a&gt;. &lt;a href="http://ayende.com/"&gt;Ayende&lt;/a&gt; has been playing with Git for a while, and a couple of interesting posts can be found &lt;a href="http://ayende.com/Blog/archive/2009/09/04/why-git.aspx"&gt;here&lt;/a&gt; &amp;amp; &lt;a href="http://ayende.com/Blog/archive/2009/09/27/distributed-source-control.aspx"&gt;here&lt;/a&gt;. For those that want to learn more, there's a free online book available &lt;a href="http://progit.org/book/"&gt;here&lt;/a&gt;.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;And whilst talking OSS (you could be fooled into thinking that these posts have thought applied to them!), here's an &lt;a href="http://kozmic.pl/archive/2009/09/06/how-to-contribute-to-open-source.aspx"&gt;intro&lt;/a&gt; and the &lt;a href="http://kozmic.pl/archive/2009/09/09/how-to-contribute-to-open-source-without-writing-a-single-again.aspx"&gt;first post&lt;/a&gt; on How to Contribute to OSS projects by &lt;a href="http://kozmic.pl/Default.aspx"&gt;Krzysztof Koźmic&lt;/a&gt;. Now in his intro, he promises three posts but I only see one to date so @kkozmic, if you're listening, get typing :)&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;More from &lt;a href="http://ayende.com/"&gt;Ayende&lt;/a&gt;, this time on &lt;a href="http://ayende.com/Blog/archive/2009/09/06/soft-deletes-arenrsquot-append-only-model.aspx"&gt;Soft Deletes vs Append Only models&lt;/a&gt;. Getting stuff like this correct (whatever that means) is critical since the ramifications tend to ripple throughout the codebase, making it a relatively hard decision to change in the future. Also be sure to read the comments, since they link to a couple of other good sources of information, particularly &lt;a href="http://www.infoq.com/presentations/greg-young-unshackle-qcon08"&gt;this presentation&lt;/a&gt; from &lt;a href="http://codebetter.com/blogs/gregyoung/"&gt;Greg Young&lt;/a&gt; and &lt;a href="http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan"&gt;this one&lt;/a&gt; from &lt;a href="http://www.udidahan.com/"&gt;Udi Dahan&lt;/a&gt;.&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;For anyone doubting the ability of OSS projects to provide support, here's an awesome thread on the &lt;a href="http://groups.google.com/group/castle-project-users/browse_thread/thread/3ab3f57f4c2d1483"&gt;responsiveness of a (good) oss project&lt;/a&gt;. Of course, this might seem an odd thing to blog about since my company offers &lt;a href="http://www.imeta.co.uk/professional_nhibernate_support.aspx"&gt;commercial NHibernate support&lt;/a&gt;, but I don't see it as a conflict - although the OSS support for a lot of projects (NHibernate included) is fantastic, some companies simply need more. In particular, they need someone that they can shout at, and we're happy to provide that service :)&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;On a completely different topic, here why you should &lt;a href="http://www.reghardware.co.uk/2009/09/17/iphone_update_problems/"&gt;test updates from your platform vendors&lt;/a&gt; before pushing them across all your machine. I didn't, and my iPhone suffered from the described problems for a number of weeks before the fixes were released :(&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Anyone fancy transferring a Blu-Ray movie in 30 seconds? Then perhaps the Light Peak optical interconnect being developed by Intel is what you need. Of course, what devices you can stick at the end of the interconnect to handle that sort of bandwidth is another question :)&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Finally, and this one is up to date, I'm sure you've all heard that &lt;a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;VS2010 has just gone to Beta 2&lt;/a&gt;, with public downloads available on Wednesday. To tie in with this, there's a &lt;a href="http://blogs.msdn.com/ricom/archive/tags/History+of+Visual+Studio/default.aspx"&gt;great series on the history of Visual Studio&lt;/a&gt; from &lt;a href="http://blogs.msdn.com/ricom/default.aspx"&gt;Rico Mariani&lt;/a&gt; which is well worth a read. Plus, &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx"&gt;John Robbins&lt;/a&gt; has done a set of posts of various aspects of VS2010:&lt;/li&gt;

  &lt;li style="list-style: none"&gt;&lt;br /&gt;&lt;/li&gt;

  &lt;li style="list-style: none"&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-debugger-in-depth-first-look.aspx"&gt;Debugger In-Depth First Look&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-intellitrace-in-depth-first-look.aspx"&gt;IntelliTrace In-Depth First Look&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-code-analysis-in-depth-first-look.aspx"&gt;Code Analysis In-Depth First Look&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-sampling-and-instrumentation-profiling-in-depth-first-look.aspx"&gt;Sampling and Instrumentation Profiling In Depth First Look&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;

      &lt;li&gt;&lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-concurrency-resource-profiling-in-depth-first-look.aspx"&gt;Concurrency Resource Profiling In Depth First Look&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/Interesting%20Stuff" rel="tag"&gt;Interesting Stuff&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/789.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/10/20/789.aspx</guid>
            <pubDate>Tue, 20 Oct 2009 15:11:56 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/789.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/10/20/789.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/789.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/789.aspx</trackback:ping>
        </item>
        <item>
            <title>Linq to NHibernate Progress Report</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/09/25/765.aspx</link>
            <description>&lt;p&gt;Just done another commit to the trunk with a bit more functionality working. Here's a couple of tests that now pass:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;var q = from c in db.Customers&lt;br /&gt;
join o in db.Orders on c.CustomerId equals o.Customer.CustomerId&lt;br /&gt;
select new { c.ContactName, o.OrderId };&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;var q = from c in db.Customers&lt;br /&gt;
join o in db.Orders on c.CustomerId equals o.Customer.CustomerId into ords&lt;br /&gt;
join e in db.Employees on c.Address.City equals e.Address.City into emps&lt;br /&gt;
select new {c.ContactName, ords = ords.Count(), emps = emps.Count()};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;var q = from c in db.Customers&lt;br /&gt;
join o in db.Orders on c.CustomerId equals o.Customer.CustomerId into orders&lt;br /&gt;
select new {c.ContactName, OrderCount = orders.Average(x =&amp;gt; x.Freight)};&lt;/code&gt;&lt;/p&gt;As before, I'm just working to get the tests passing and it currently wouldn't be hard to get variations of these to fail; for example, I don't yet handle joins on compound keys. However, also as before, I'm getting more confident with the structure and things seem to be moving along nicely.&lt;br /&gt;
Next steps are to look at parameterization and polymorphism - the Linq side of things actually does pretty much everything it does here, the changes I need to do are within the HQL parsing subsystem. They shouldn't be hard, so I'm hoping to get them nailed quite quickly.

Oh yeah, also need to get some Asserts into the tests.  Right now, they are a pretty fragile safety net :)  I know how to do this now in a fairly simple way, so this should also be simple.

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/Linq" rel="tag"&gt;Linq&lt;/a&gt;, &lt;a href="http://technorati.com/tag/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/765.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/09/25/765.aspx</guid>
            <pubDate>Fri, 25 Sep 2009 21:18:42 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/765.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/09/25/765.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/765.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/765.aspx</trackback:ping>
        </item>
        <item>
            <title>Professional NHibernate Support</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/09/17/761.aspx</link>
            <description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;As most of you probably know, iMeta has been actively participating in the &lt;a href="http://nhforge.org/Default.aspx"&gt;NHibernate&lt;/a&gt; project for most of this year, firstly with porting the AST parser over from Hibernate and now with active development on a new Linq provider. Around early May, we started discussing ways that we could derive some commercial benefit from our involvement in a way that would provide benefit to the community and income for iMeta. As a result we are pursuing a number of options, one of which is to offer a support package.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Due to time constraints (we have paying customers, and they have a nasty habit of taking priority!), we hadn't launched this yet, but following &lt;a href="http://ayende.com/Blog/archive/2009/09/09/commercial-support-for-nhibernate.aspx"&gt;Ayende's announcement&lt;/a&gt; a few days ago now feels like an appropriate time to do so. We have had a good discussion with Ayende about what we're doing, and I'm happy to say that he fully supports us. A bit of competition is, after all, a good thing for both customers and NHibernate. Although we are slightly gutted that he beat us to it :)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Fortunately, we have taken a different approach to Ayende, so this does offer the community a real choice about how they best support their NHibernate-based developments. See &lt;a href="http://www.imeta.co.uk/professional_nhibernate_support.aspx"&gt;here&lt;/a&gt; for details on the program, pricing information, how to sign up etc.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;As well as announcing our package, I'm also delighted to say that it comes with the backing and support of Fabio Maulo - although iMeta has a great deal of NHibernate experience, we're the first to admit that we don't know it all and having Fabio behind us to assist with the thornier problems is a great asset. Plus it's also great to see someone who has dedicated so much of his own time to the project getting something back in return.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;I hope that between the great community support through places like the &lt;a href="http://groups.google.com/group/nhusers"&gt;NHUsers mailing list&lt;/a&gt; and &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;, &lt;a href="http://www.nhprof.com/CommercialSupport"&gt;Ayende's support offering&lt;/a&gt; and now &lt;a href="http://www.imeta.co.uk/professional_nhibernate_support.aspx"&gt;ours&lt;/a&gt;, there is a real choice for NHibernate users out there and less of a barrier for adopting this great product.&lt;/span&gt;&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/761.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/09/17/761.aspx</guid>
            <pubDate>Thu, 17 Sep 2009 11:59:52 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/761.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/09/17/761.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/761.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/761.aspx</trackback:ping>
        </item>
        <item>
            <title>Linq to NHibernate Progress Report</title>
            <link>http://blogs.imeta.co.uk/sstrong/archive/2009/09/15/756.aspx</link>
            <description>&lt;p&gt;I've been busy for the last 3 or 4 weeks getting back into the swing of things with the new Linq to NHibernate parser, based on the HQL AST parser that went live in NHibernate 2.1.&lt;/p&gt;
&lt;p&gt;Right now, I am getting some basic structures in place and getting familiar with the &lt;a href="http://www.re-motion.org/blogs/team/archive/2009/04/23/introducing-re-linq-a-general-purpose-linq-provider-infrastructure.aspx"&gt;re-linq QueryModel&lt;/a&gt;. This certainly helps things along, removing a lot of the niggely issues that dealing with a raw Linq expression tree brings. It is, however, a large library itself and takes some getting your head around.&lt;/p&gt;
&lt;p&gt;In contrast with the discovery process that I was going through back in June, where all the code I wrote was very much throw-away and nothing got committed, this time it's all for real. Anyone interested can take a look at the latest NH trunk, and I'd welcome any feedback that folk may have.&lt;/p&gt;
&lt;p&gt;As anyone who has written a Linq provider surely knows, Linq is a big beast. So rather than trying to solve the whole problem at once, I'm very much taking a TDD-style approach of just writing enough to get a set of tests working. I've no doubt that there will be some queries that cause significant internal changes, but I'm also happy that the structure that's gradually building will be fairly easy to adapt / refactor.&lt;/p&gt;
&lt;p&gt;For those interested on the test side of things (which will give a good guide as to the current capabilities), take a look at &lt;a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/NHibernate.Test/Linq/LinqQuerySamples.cs?revision=4712&amp;amp;view=markup"&gt;LinqQuerySamples.cs&lt;/a&gt;. Note that there are some tests that are still marked with the Ignore attribute, but all the others are working. Also note that the tests themselves still need some work - most of them don't have any form of assertions, so the only reason I'm happy with them is that I know (from visual inspection) that they are generating the correct HQL. One of the jobs in the next few days is to get the assertions in place so that the tests start forming my safety net.&lt;/p&gt;
&lt;p&gt;On previous posts, some people were asking how they could contribute. As far as the core provider itself goes, there probably isn't much that another pair of hands can do - it's pretty dense code and I think we'd just keep stepping on each others toes. The other side of the project, however, is to get a substantial number of test cases together - if you want to help move this forward, then contributions on that side would be much appreciated. Ping me either by email or Twitter and we can work out how to move that forward.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;What else to say? Well, I wouldn't plan on using this in production for the next couple of months, but after that I think it might well be viable. Today, it's very much "just for fun" - if you've got serious work that needs to go live in the near future, then stick with the existing 1.0 provider. Hopefully they'll be more to report in the next couple of weeks.&lt;/p&gt;

&lt;div class="posttagsblock"&gt;&lt;a href="http://technorati.com/tag/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Linq" rel="tag"&gt;Linq&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.imeta.co.uk/sstrong/aggbug/756.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Steve Strong</dc:creator>
            <guid>http://blogs.imeta.co.uk/sstrong/archive/2009/09/15/756.aspx</guid>
            <pubDate>Tue, 15 Sep 2009 18:36:57 GMT</pubDate>
            <wfw:comment>http://blogs.imeta.co.uk/sstrong/comments/756.aspx</wfw:comment>
            <comments>http://blogs.imeta.co.uk/sstrong/archive/2009/09/15/756.aspx#feedback</comments>
            <slash:comments>18</slash:comments>
            <wfw:commentRss>http://blogs.imeta.co.uk/sstrong/comments/commentRss/756.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.imeta.co.uk/sstrong/services/trackbacks/756.aspx</trackback:ping>
        </item>
    </channel>
</rss>