<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>MS Mvc</title>
        <link>http://sean-lynch.net/category/14.aspx</link>
        <description>Posts about the Microsoft Mvc framework</description>
        <language>en-US</language>
        <copyright>Sean Lynch</copyright>
        <managingEditor>slynch13@gmail.com</managingEditor>
        <generator>Subtext Version 2.0.0.9</generator>
        <item>
            <title>Lazy list</title>
            <link>http://sean-lynch.net/archive/2008/05/21/lazy-list.aspx</link>
            <description>&lt;p&gt;I have been following &lt;a href="http://blog.wekeroad.com/" target="_blank"&gt;Rob Conery's&lt;/a&gt; posts on the MVC Storefront, and trying the repository/pipes-filters for data access that he has been using.&lt;/p&gt; &lt;p&gt;While trying out the implementation of a LazyList he was using, I had noticed that the example table was being joined onto the category table. At the time however, I really had not thought much of it, until I read &lt;a href="http://blog.wekeroad.com/mvc-storefront/mvcstore-intermission2/" target="_blank"&gt;MVC Storefront: Brainbender Intermission&lt;/a&gt; which got me thinking. &lt;/p&gt; &lt;p&gt;Admittedly, I don't really have to much of a problem with it loading all of the examples for all the categories at one time at the moment. However, I figured it would be nice to have it work the way intended, and query the database for the examples in a category only when asked for.&lt;/p&gt; &lt;p&gt;I liked the idea of the LazyList, and since I was already using a Service class for all data access, along with setting up the category hierarchy I moved the creation of the LazyList of examples property into the the GetCategories method of the service class.&lt;/p&gt; &lt;p&gt;It seems that as long as the LazyList is created after the categories .ToList() call it properly works. So I ended up with this code:&lt;/p&gt;&lt;pre class="code"&gt;            categories.ForEach(category =&amp;gt;
            {
                category.Examples =
                    &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;LazyList
&lt;/span&gt;                        &amp;lt;DevExamples.Data.&lt;span style="color: rgb(43,145,175)"&gt;Example&lt;/span&gt;&amp;gt;(
                        &lt;span style="color: rgb(0,0,255)"&gt;from&lt;/span&gt; e &lt;span style="color: rgb(0,0,255)"&gt;in&lt;/span&gt; repository.GetExamples()
                        &lt;span style="color: rgb(0,0,255)"&gt;where&lt;/span&gt; e.CategoryId == category.ID
                        &lt;span style="color: rgb(0,0,255)"&gt;select&lt;/span&gt; e);

                &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; subCategories = (&lt;span style="color: rgb(0,0,255)"&gt;from&lt;/span&gt; sub &lt;span style="color: rgb(0,0,255)"&gt;in&lt;/span&gt; categories
                                     &lt;span style="color: rgb(0,0,255)"&gt;where&lt;/span&gt; sub.ParentId == category.ID
                                     &lt;span style="color: rgb(0,0,255)"&gt;select&lt;/span&gt; sub).ToList();
                category.SubCategories = subCategories;

                subCategories.ForEach(c =&amp;gt; c.Parent = category);

            });
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b2911609-4a75-4f29-a40f-6f2131b013b6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/aspnetmvc" rel="tag"&gt;aspnetmvc&lt;/a&gt;&lt;/div&gt;&lt;img src="http://sean-lynch.net/aggbug/56.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Lynch</dc:creator>
            <guid>http://sean-lynch.net/archive/2008/05/21/lazy-list.aspx</guid>
            <pubDate>Wed, 21 May 2008 12:34:18 GMT</pubDate>
            <wfw:comment>http://sean-lynch.net/comments/56.aspx</wfw:comment>
            <comments>http://sean-lynch.net/archive/2008/05/21/lazy-list.aspx#feedback</comments>
            <wfw:commentRss>http://sean-lynch.net/comments/commentRss/56.aspx</wfw:commentRss>
            <trackback:ping>http://sean-lynch.net/services/trackbacks/56.aspx</trackback:ping>
        </item>
        <item>
            <title>ABCs scare me</title>
            <link>http://sean-lynch.net/archive/2008/02/22/abcs-scare-me.aspx</link>
            <description>&lt;p&gt;I had a whole post about this, in my mind, but as I was typing, I kept poking holes in my points as to why I hope that in the end IHttpContext stays around. &lt;/p&gt;
&lt;p&gt;However, since am trying get into the habit of actually sleeping at night I'm just going to put a couple of sentences in. &lt;/p&gt;
&lt;p&gt;In &lt;a target="_blank" href="http://haacked.com/archive/2008/02/21/abstract-base-classes-have-versioning-problems-too.aspx"&gt;Abstract Base Classes Have Versioning Problems Too&lt;/a&gt; Haacked gave an example that of a problem with ABCs, that at some point later a virtual method would be added, and throw a not implemented exception. This in itself seems to be a breaking change to me, its just a matter of where it breaks. &lt;/p&gt;
&lt;p&gt;Now instead of stopping my program from working if an ISV's customer decides to run it on the new framework. It will fail in some completely unexpected way, causing extra support calls, and possibly causing sever side effects. &lt;/p&gt;
&lt;p&gt;So while I am all for putting the ball in the developers court, putting the ball in my customers court scares the crap out of me. And that is essentially what I see using an abstract base classes to allow for extensibility and then adding virtual methods, since they cannot be actual abstract methods or we are in the same boat as interfaces, that throw not implemented exceptions does. &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1b203989-87d8-4489-b30b-12e6bb1c3473" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/Microsoft%20MVC"&gt;Microsoft MVC&lt;/a&gt;&lt;/div&gt;&lt;img src="http://sean-lynch.net/aggbug/51.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Lynch</dc:creator>
            <guid>http://sean-lynch.net/archive/2008/02/22/abcs-scare-me.aspx</guid>
            <pubDate>Fri, 22 Feb 2008 17:29:07 GMT</pubDate>
            <wfw:comment>http://sean-lynch.net/comments/51.aspx</wfw:comment>
            <comments>http://sean-lynch.net/archive/2008/02/22/abcs-scare-me.aspx#feedback</comments>
            <wfw:commentRss>http://sean-lynch.net/comments/commentRss/51.aspx</wfw:commentRss>
            <trackback:ping>http://sean-lynch.net/services/trackbacks/51.aspx</trackback:ping>
        </item>
        <item>
            <title>Got my nice Urls working</title>
            <link>http://sean-lynch.net/archive/2007/12/24/got-my-nice-urls-working.aspx</link>
            <description>&lt;p&gt;Its amazing how fast things can be done when not fighting bad assumptions. In this case it was that my admin URLs needed to use the nice descriptive URLs, instead of just /[Controller]/[Action]/[id] type routing.&lt;/p&gt; &lt;p&gt;Once I realized I was making things overly complicated I, I ended up with a set of routing functions that are actually a bit less complicated then what I would have come up with if I had been able to extend the RouteTable the way I had planned originally.&lt;/p&gt; &lt;p&gt;I also decided that I didn't like the idea of having the make every category and example name unique. Most of this was that I'm not the creative, but I also realized that it would be really ugly I wanted to have namespaces as categories. For example, it would not have been possible to have both C/System/Windows/Forms/Control and C/System/Web/UI/Control since Control would have had to be unique.&lt;/p&gt; &lt;p&gt;I also decided that I was going to set a limit to the depth of categories that the site was going to have, though it is easy to update this. First I made a function that would generate routes similar to those &lt;a href="http://myheadsexploding.com/archive/2007/12/13/routing-revisited.aspx"&gt;previously posted&lt;/a&gt;. &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; CreateRouteSet(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; baseRoute, &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; baseName
    , &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; maxDepth, &lt;span style="color: rgb(0,0,255)"&gt;object&lt;/span&gt; Defaults)
{
    &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt; sb = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt;();
    &lt;span style="color: rgb(0,0,255)"&gt;for&lt;/span&gt; (&lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; i = 0; i &amp;lt; maxDepth; i++)
    {
        &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (sb.Length &amp;gt; 0)
            sb.Append(&lt;span style="color: rgb(163,21,21)"&gt;"/"&lt;/span&gt;);

        sb.AppendFormat(&lt;span style="color: rgb(163,21,21)"&gt;"[{0}{1}]"&lt;/span&gt;, baseName, i);

        &lt;span style="color: rgb(43,145,175)"&gt;RouteTable&lt;/span&gt;.Routes.Add(&lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Route&lt;/span&gt;{
         
            Url = &lt;span style="color: rgb(43,145,175)"&gt;String&lt;/span&gt;.Format(baseRoute,sb.ToString()),
            Defaults = Defaults,
            RouteHandler = &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;MvcRouteHandler&lt;/span&gt;)
        });
    }
}

&lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Application_Start(&lt;span style="color: rgb(0,0,255)"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43,145,175)"&gt;EventArgs&lt;/span&gt; e)
{

    CreateRouteSet(&lt;span style="color: rgb(163,21,21)"&gt;"C/{0}"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"Category"&lt;/span&gt;, 6,
        &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; { Action = &lt;span style="color: rgb(163,21,21)"&gt;"Index"&lt;/span&gt;, Controller = &lt;span style="color: rgb(163,21,21)"&gt;"Categories"&lt;/span&gt; }
        );

    &lt;span style="color: rgb(0,128,0)"&gt;//Other routes using the standard [Controller]/[Action]/[Id]&lt;/span&gt;

}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;This will setup routes to handle category hierarchies up to 6 deep.  And add Category1,Category2... into the RouteData.Values collection in the controller.&lt;/p&gt;
&lt;p&gt;Next I set up the code to allow me to handle the route, which I did in the model, adding a method that takes an IDictionary&amp;lt;string,object&amp;gt;. &lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Category&lt;/span&gt; GetCategoryFromRouteData(&lt;span style="color: rgb(43,145,175)"&gt;IDictionary&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;String&lt;/span&gt;,&lt;span style="color: rgb(0,0,255)"&gt;object&lt;/span&gt;&amp;gt; data)
{
&lt;span style="color: rgb(0,128,0)"&gt;    //Grab just the category data&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; navList = &lt;span style="color: rgb(0,0,255)"&gt;from&lt;/span&gt; route &lt;span style="color: rgb(0,0,255)"&gt;in&lt;/span&gt; data
               &lt;span style="color: rgb(0,0,255)"&gt;where&lt;/span&gt; route.Key.IndexOf(&lt;span style="color: rgb(163,21,21)"&gt;"Category"&lt;/span&gt;) == 0
               &lt;span style="color: rgb(0,0,255)"&gt;orderby&lt;/span&gt; route.Key
               &lt;span style="color: rgb(0,0,255)"&gt;select&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt;{Key = route.Key, Value = route.Value.ToString()};

    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; sqlSelect = &lt;span style="color: rgb(163,21,21)"&gt;@"
        SELECT {0}.* 
        FROM Category {0}
        {1}
        WHERE {0}.Name = {{0}}"&lt;/span&gt;;
&lt;span style="color: rgb(0,128,0)"&gt;    &lt;br /&gt;    //{{{2}}} will be replaced with {{&amp;lt;param index&amp;gt;}}&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; join = &lt;span style="color: rgb(163,21,21)"&gt;@"INNER JOIN Category {0} ON {0}.[Key] = {1}.ParentKey 
                    AND {0}.[Name] = {{{2}}}

&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;    //This is the name of the category I am actually interested in&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; mainCat = navList.Last();

    &lt;span style="color: rgb(0,128,0)"&gt;//Build a list of category values to for parameterized query&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;&amp;gt; values = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;&amp;gt;();
    values.Add(mainCat.Value);
    &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt; sb = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt;();
    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; lastCategory = mainCat.Key;

    &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; i = 1;
    &lt;span style="color: rgb(0,0,255)"&gt;foreach&lt;/span&gt; (&lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; item &lt;span style="color: rgb(0,0,255)"&gt;in&lt;/span&gt; navList.Reverse().Skip(1))
    {
        sb.AppendFormat(join, item.Key, lastCategory,i++);
        values.Add(item.Value);
        lastCategory = item.Key;
    }

    &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; sql = &lt;span style="color: rgb(43,145,175)"&gt;String&lt;/span&gt;.Format(sqlSelect,mainCat.Key, sb.ToString());
    &lt;span style="color: rgb(43,145,175)"&gt;Category&lt;/span&gt; cat = &lt;span style="color: rgb(0,0,255)"&gt;this&lt;/span&gt;.ExecuteQuery&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;Category&lt;/span&gt;&amp;gt;(sql, values.ToArray()).Single();&lt;br /&gt;
&lt;span style="color: rgb(0,128,0)"&gt;&lt;br /&gt;&lt;br /&gt;    //GetDisplayCategory skips over categories that have only 1 subcategory &lt;br /&gt;    //and no examples, allowing me to have the planned Url structure without &lt;br /&gt;    //&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;requiring the user to navigate through several empty categories.&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; GetDisplayCategory(cat);
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;I had planned on having doing it all LINQ to SQL expressions, but it was taking more time then it was worth to figure out how to do the hierarchy lookup from the category names.  I need to add some caching of the key lookups at some point, since the joins look like they might get a bit nasty for deep categories, but that can wait.&lt;/p&gt;
&lt;p&gt;I added a few overloads to the HtmlHelper ActionLink extension methods to handle making the nice Url links.&lt;/p&gt;
&lt;p&gt;Now I need to figure out how to deploy the usercontrols that will contain the executable part of the example. I have had some problems with compilation sometimes when I had the website directly upload the usercontrols. Plus I would like them to go into source control when I add them.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ec42d13d-48c0-4c3f-87a9-08d17c181005" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/aspnetmvc" rel="tag"&gt;aspnetmvc&lt;/a&gt;&lt;/div&gt;&lt;img src="http://sean-lynch.net/aggbug/44.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Lynch</dc:creator>
            <guid>http://sean-lynch.net/archive/2007/12/24/got-my-nice-urls-working.aspx</guid>
            <pubDate>Mon, 24 Dec 2007 15:44:26 GMT</pubDate>
            <wfw:comment>http://sean-lynch.net/comments/44.aspx</wfw:comment>
            <comments>http://sean-lynch.net/archive/2007/12/24/got-my-nice-urls-working.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://sean-lynch.net/comments/commentRss/44.aspx</wfw:commentRss>
            <trackback:ping>http://sean-lynch.net/services/trackbacks/44.aspx</trackback:ping>
        </item>
        <item>
            <title>Temp service provider implementation</title>
            <link>http://sean-lynch.net/archive/2007/12/18/temp-service-provider-implementation.aspx</link>
            <description>&lt;p&gt;Well, Bill Pierce in his post about making the &lt;a href="http://blechie.com/WPierce/archive/2007/12/16/On-the-Extensibility-of-ASP.Net-MVC.aspx"&gt;HttpContext wrapper use the application as a service provider&lt;/a&gt; got me to a good enough solution for the script service I had wanted in my &lt;a href="http://myheadsexploding.com/archive/2007/12/16/generic-beginend-html-tag-extension-method.aspx"&gt;previous post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While not quite as clean as adding it to the HttpContext, I think an extension method on HttpApplication like this will work well for now. &lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;public static object &lt;/span&gt;GetService(&lt;span style="COLOR: blue"&gt;this &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;HttpApplication &lt;/span&gt;application,&lt;span style="COLOR: #2b91af"&gt;Type &lt;/span&gt;service)
{
    &lt;span style="COLOR: #2b91af"&gt;IServiceProvider &lt;/span&gt;provider = application &lt;span style="COLOR: blue"&gt;as &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;IServiceProvider&lt;/span&gt;;
    &lt;span style="COLOR: blue"&gt;if &lt;/span&gt;(provider == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)
        &lt;span style="COLOR: blue"&gt;return null&lt;/span&gt;;

    &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;provider.GetService(service);
}
&lt;/pre&gt;
&lt;p&gt;Then add/implement the IServiceProvider on the Global class. Allowing me to get an instance of the script service using  &lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: #2b91af"&gt;IScriptService &lt;/span&gt;scriptSvc &lt;br /&gt;    = &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.HttpContext.ApplicationInstance.GetService(&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;IScriptService&lt;/span&gt;))
    &lt;span style="COLOR: blue"&gt;as &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;IScriptService&lt;/span&gt;;
&lt;/pre&gt;
&lt;p&gt;Though though the more I think of it, the more likely I am to stick this method on the Ajax and Html helper classes. I wonder how hard it would be to add an interface like IMvcHelper to both the AjaxHelper and HtmlHelper Classes my extension method would be available to both, without duplicating code. &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5b7d24d4-583f-43bb-bb38-8a159374e46f" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/aspnetmvc"&gt;aspnetmvc&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Service%20Provider"&gt;Service Provider&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Extension%20Method"&gt;Extension Method&lt;/a&gt;&lt;/div&gt;&lt;img src="http://sean-lynch.net/aggbug/43.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Lynch</dc:creator>
            <guid>http://sean-lynch.net/archive/2007/12/18/temp-service-provider-implementation.aspx</guid>
            <pubDate>Tue, 18 Dec 2007 23:06:34 GMT</pubDate>
            <wfw:comment>http://sean-lynch.net/comments/43.aspx</wfw:comment>
            <comments>http://sean-lynch.net/archive/2007/12/18/temp-service-provider-implementation.aspx#feedback</comments>
            <wfw:commentRss>http://sean-lynch.net/comments/commentRss/43.aspx</wfw:commentRss>
            <trackback:ping>http://sean-lynch.net/services/trackbacks/43.aspx</trackback:ping>
        </item>
    </channel>
</rss>