<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>ASP.NET</title>
        <link>http://www.kowitz.net/category/14.aspx</link>
        <description>ASP.NET</description>
        <language>en-AU</language>
        <copyright>Brendan Kowitz</copyright>
        <managingEditor>brendan@kowitz.net</managingEditor>
        <generator>Subtext Version 2.0.0.43</generator>
        <item>
            <title>Upgrading to subtext 2.0-fail</title>
            <link>http://kowitz.net/archive/2008/08/15/upgrading-to-subtext-2.0-fail.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;It's been a long time in between &lt;a href="https://sourceforge.net/project/showfiles.php?group_id=137896"&gt;updates&lt;/a&gt; for &lt;a href="http://subtextproject.com/"&gt;subtext&lt;/a&gt;, but, has it actually been worth it? Well, kinda. Compared to the 1.9.5 release this one seems a little rough around the edges.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;If you're on a shared host WITHOUT full trust, beware! Things will break in multiple places, including:&lt;/font&gt;&lt;/p&gt;
&lt;font face="Arial"&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;strike&gt;DTP.aspx (The homepage) (tag "st" undefined, needed to add back 'Register TagPrefix="st" Namespace="Subtext.Web.UI.WebControls"')&lt;/strike&gt; (My web.config merge error)&lt;/li&gt;
    &lt;li&gt;/admin/Posts/  (EnclosureMimetypes config section missing requirePermission="false" attribute) &lt;/li&gt;
    &lt;li&gt;/admin/Feedback/ ("FeedbackStatusFlag" undeclared, needed to prefix with the namespace) &lt;/li&gt;
    &lt;li&gt;Subtext.Framework.UrlManager.UrlReWriteHandlerFactory.GetHandlerForUrl(string url) also breaks from a security permission when calling UrlAuthorizationModule.CheckUrlAccessForPrincipal(), had to recompile Subtext.Framework to get around this. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; I don't mean to blast subtext, but I might as well lay a few more issues out there:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;The call to "&lt;font face="Arial"&gt;/Admin/Services/Ajax/AjaxServices.ashx?proxy" throws an "&lt;font face="Arial"&gt;Operation could destabilize the runtime" exception, haha I must say this is the first time I've seen that, fixed by generating the &lt;font face="Arial"&gt;AjaxServicesProxy.js file locally.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;/li&gt;
    &lt;li&gt;In the Feedback admin area, when hovering the URL icon the "title" tag shows the email address. &lt;/li&gt;
    &lt;li&gt;Forgot to add this last night: Had to remove the OpenID stuff from the login page, errors with "Cannot be called from Untrusted assembly". &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The problems in this upgrade mostly appear to be stemming from carelessness regarding restrictions in medium trust. I guess the question is - "Is subtext venturing away from medium trust on purpose?"&lt;/p&gt;
&lt;p&gt;Looking to the future. From what I recall I don’t think it’s actually possible to run .net 3.5 applications without full trust, features such as anonymous types simply don’t work.&lt;br /&gt;
&lt;/p&gt;
&lt;/font&gt;&lt;img src="http://kowitz.net/aggbug/89.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2008/08/15/upgrading-to-subtext-2.0-fail.aspx</guid>
            <pubDate>Fri, 15 Aug 2008 13:55:40 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/89.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2008/08/15/upgrading-to-subtext-2.0-fail.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/89.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/89.aspx</trackback:ping>
        </item>
        <item>
            <title>NHibernate Compatible Shared Hosts</title>
            <link>http://kowitz.net/archive/2008/03/28/nhibernate-compatible-shared-hosts.aspx</link>
            <description>&lt;p&gt;NHibernate is a remarkable ORM, however with all the magic comes a few caveats, these being the difficulties running NHibernate apps in a shared hosting environment. I'm still convinced that it's entirely possible, so I've decided to start compiling a list of success and failures that others (and myself) have had in getting things working.&lt;/p&gt;
&lt;h2&gt;Compatible Shared Hosts&lt;/h2&gt;
&lt;table width="400" cellspacing="0" cellpadding="2" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="134" valign="top"&gt;&lt;strong&gt;Host Name&lt;/strong&gt;&lt;/td&gt;
            &lt;td width="145" valign="top"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/td&gt;
            &lt;td width="119" valign="top"&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="134" valign="top"&gt;&lt;a href="http://www.webhost4life.com/" target="_blank"&gt;Webhost4life&lt;/a&gt; &lt;/td&gt;
            &lt;td width="157" valign="top"&gt;Reportedly works with "no hacks"&lt;/td&gt;
            &lt;td width="151" valign="top"&gt;[&lt;a href="http://www.gavaghan.org/blog/2007/08/21/nhibernate-in-a-medium-trust-environment/" target="_blank"&gt;ref&lt;/a&gt;]&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="vertical-align: top;"&gt;&lt;a href="http://www.discountasp.net/" target="_blank"&gt;DiscountAsp&lt;/a&gt;&lt;/td&gt;
            &lt;td style="vertical-align: top;"&gt;I think this should work with IIS7 / Win 2008&lt;/td&gt;
            &lt;td style="vertical-align: top;"&gt;[&lt;a href="http://kb.discountasp.net/article.aspx?id=10574"&gt;ref&lt;/a&gt;]&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="vertical-align: top;"&gt;&lt;a href="http://www.xhostsolutions.com/" target="_blank"&gt;XHostSolutions&lt;/a&gt;&lt;/td&gt;
            &lt;td style="vertical-align: top;"&gt;Simply email support and ask to have your application run as Full Trust&lt;br /&gt;
            &lt;/td&gt;
            &lt;td style="vertical-align: top;"&gt; This is the host I use.&lt;br /&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Shared Hosts known &lt;strong&gt;not&lt;/strong&gt; to work&lt;/h2&gt;
&lt;table width="400" cellspacing="0" cellpadding="2" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="132" valign="top"&gt;&lt;strong&gt;Host Name&lt;/strong&gt;&lt;/td&gt;
            &lt;td width="133" valign="top"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/td&gt;
            &lt;td width="133" valign="top"&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="132" valign="top"&gt;&lt;a href="http://www.godaddy.com/" target="_blank"&gt;Godaddy&lt;/a&gt; &lt;/td&gt;
            &lt;td width="149" valign="top"&gt; &lt;/td&gt;
            &lt;td width="165" valign="top"&gt;[&lt;a href="http://forum.hibernate.org/viewtopic.php?t=980538&amp;amp;highlight=medium+trust" target="_blank"&gt;ref&lt;/a&gt;]&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="132" valign="top"&gt;&lt;a href="http://www.crystaltech.com/" target="_blank"&gt;Crystaltech&lt;/a&gt; &lt;/td&gt;
            &lt;td width="149" valign="top"&gt; &lt;/td&gt;
            &lt;td width="165" valign="top"&gt;
            &lt;p&gt;[&lt;a href="http://forum.castleproject.org/viewtopic.php?t=3104" target="_blank"&gt;ref&lt;/a&gt;]&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Untested / Unknown&lt;/h2&gt;
&lt;table width="400" cellspacing="0" cellpadding="2" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="133" valign="top"&gt;&lt;strong&gt;Host Name&lt;/strong&gt;&lt;/td&gt;
            &lt;td width="133" valign="top"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/td&gt;
            &lt;td width="133" valign="top"&gt;&lt;strong&gt;Reference&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="133" valign="top"&gt;&lt;a href="http://www.discountasp.net/" target="_blank"&gt;DiscountAsp&lt;/a&gt;&lt;/td&gt;
            &lt;td width="133" valign="top"&gt; &lt;/td&gt;
            &lt;td width="133" valign="top"&gt; &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Useful References / Alternate Ideas&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://blechie.com/WPierce/archive/2008/02/17/Lazy-Loading-with-nHibernate-Under-Medium-Trust.aspx"&gt;Lazy Loading with nHibernate Under Medium Trust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://kowitz.net/aggbug/84.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2008/03/28/nhibernate-compatible-shared-hosts.aspx</guid>
            <pubDate>Fri, 28 Mar 2008 13:21:04 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/84.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2008/03/28/nhibernate-compatible-shared-hosts.aspx#feedback</comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/84.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/84.aspx</trackback:ping>
        </item>
        <item>
            <title>Graffiti Cms by Telligent</title>
            <link>http://kowitz.net/archive/2008/02/21/graffiti-cms-by-telligent.aspx</link>
            <description>&lt;p&gt;There are a fair few CMS solutions floating around in .NET at the moment, a good general comparison tool can be found at &lt;a href="http://www.cmsmatrix.org/"&gt;CmsMatrix.org&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cuyahoga&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the past, the &lt;a target="_blank" href="http://www.cuyahoga-project.org/"&gt;Cuyahoga Website Framework&lt;/a&gt; has looked always fairly interesting, it is also built on &lt;a target="_blank" href="http://www.nhibernate.org/"&gt;NHibernate&lt;/a&gt; which to me is a plus. Most things I've done with NHibernate have generally "just worked", maybe it's because NHibernate development is pounded with unit tests, whatever it is, it works.&lt;/p&gt;
&lt;p&gt;I haven't had any experience developing any extensions for Cuyahoga, so I don't know exactly how extensible it is yet. In terms of usability, I did find the interface a little confusing at first. The admin section is only used to configure modules/pages..etc.. but to actually edit the content I needed to visit the actual page in admin mode and click edit module (DNN Style).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Graffiti&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://graffiticms.com"&gt;Graffiti CMS&lt;/a&gt; has only recently come to my attention. I remember only in the later half of last year reading about &lt;a target="_blank" href="http://telligent.com/"&gt;Telligent&lt;/a&gt; acquiring Dozing Dogs CMS and wondering at the time, what they were going to do with it, well, now days, there is no sign of Dozing Dogs. Instead, earlier this week Telligent released Graffiti CMS which appears to be completely new as a full version 1.0.&lt;/p&gt;
&lt;p&gt;Graffiti supports a variety of databases including VistaDB (default), MS Sql and MySql. Not only that, but they claim its mono-compatible, so it is able to be run on linux and other mono supported platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test Run of Graffiti&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Setup was really simple, xcopy, run. With not much more thought then that, your away. &lt;/p&gt;
&lt;p&gt;The dashboard of Graffiti looks fantastic. I've always been a fan of having an area dedicated to admin tasks, as opposed to having admin controls stuffed into a site's design, as done by DNN. The only thing that wasn't obvious in Graffiti is the fact that there are no "pages". All content appears to be considered a "post". The "posts" are configurable in a way that is easy to set them up in a blog style behavior, or leave them detached, essentially making them pages.&lt;/p&gt;
&lt;p&gt;Some of the highlights that stood out to me immediately&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Seems to use NVelocity templates to render out HTML, meaning it's lean and clean &lt;/li&gt;
    &lt;li&gt;Supports a programmable API -- MetaWeblog &lt;/li&gt;
    &lt;li&gt;Supports its own extensibility though Widgets &lt;/li&gt;
    &lt;li&gt;Widgets can be installed in literally 2 clicks &lt;/li&gt;
    &lt;li&gt;Admin dashboard is slick &lt;/li&gt;
    &lt;li&gt;Free express version &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Again, from observation, there are a couple of cons too&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;"Posts" appear to be rendered out into files on the disk, (like MovableType) this certainly got people that owned large blogs into trouble. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel="lightbox" href="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/GraffitiCmsbyTelligent_137A9/image_4.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="248" alt="Graffiti Dashboard" width="496" border="0" src="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/GraffitiCmsbyTelligent_137A9/image_thumb_1.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;I did get the feeling that I'd seen an admin area that looked similar...Graffiti even has fading panels at the top of the screen when you make a change...&lt;/p&gt;
&lt;p&gt;&lt;a rel="lightbox" href="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/GraffitiCmsbyTelligent_137A9/image_6.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="216" alt="Wordpress Dashboard" width="499" border="0" src="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/GraffitiCmsbyTelligent_137A9/image_thumb_2.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In any case, Graffiti seems like something that should be watched in future. It may already be a great solution for a small - medium site. I do think that a site with a lot of pages may become a little unwieldy in the current interface, especially if changes need to be made across many pages, or you want to switch to a new theme. &lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/83.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2008/02/21/graffiti-cms-by-telligent.aspx</guid>
            <pubDate>Thu, 21 Feb 2008 12:16:05 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/83.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2008/02/21/graffiti-cms-by-telligent.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/83.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/83.aspx</trackback:ping>
        </item>
        <item>
            <title>IDataErrorInfo for ASP.NET</title>
            <link>http://kowitz.net/archive/2007/11/08/idataerrorinfo-for-asp.net.aspx</link>
            <description>&lt;p&gt;As far as I'm aware ASP.NET doesn't support &lt;a href="http://msdn2.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo(vs.80).aspx"&gt;IDataErrorInfo&lt;/a&gt;, I've asked about this in many places, including Tech.Ed '07 with no success. The closest things I've seen in terms of Business Object level validation is from Enterprise Library validation block (which is attribute based and can render out with custom EntLib web controls) and another example in the Futures &lt;a href="http://www.asp.net/downloads/futures/"&gt;Dynamic Data Controls&lt;/a&gt; using Linq (I have no idea how this magic validation magically appears). &lt;/p&gt;
&lt;p&gt;It all just seems overly complicated, so, have a look at the IDataErrorInfo interface the methods are:&lt;/p&gt;
&lt;p&gt;string this [ string columnName ] { get; }&lt;br /&gt;
string Error { get; }&lt;/p&gt;
&lt;p&gt;Simple and generic. I've been playing around with an idea about how to get this into a generic web control, introducing:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://systembusinessobjects.googlecode.com/svn/trunk/System.BusinessObjects.Framework/Validation/WebValidationControl.cs"&gt;WebValidationControlExtender&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is an example of the control in design mode:&lt;/p&gt;
&lt;p&gt;&lt;a rel="lightbox" atomicselection="true" href="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/IDataErrorInfoforASP.NET_14BFC/image_1.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="344" alt="image" width="393" border="0" src="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/IDataErrorInfoforASP.NET_14BFC/image_thumb_1.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Here is an example of the control in action using an ObjectDataSource and a plain old DetailsView:&lt;/p&gt;
&lt;p&gt;&lt;a rel="lightbox" atomicselection="true" href="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/IDataErrorInfoforASP.NET_14BFC/image.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="275" alt="image" width="492" border="0" src="http://kowitz.net/images/kowitz_net/WindowsLiveWriter/IDataErrorInfoforASP.NET_14BFC/image_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Here's what's going on under the hood.&lt;/p&gt;
&lt;p&gt;All you need to do is tell WebValidationControlExtender what ObjectDataSource to hook in to.&lt;br /&gt;
When the page is executing and the user tries to insert a record, the DetailsView control builds up an object and sends it into the ObjectDataSource.&lt;br /&gt;
WebValidationControlExtender is already listening for Insert and Update events, all it does is check if the object being passed through implements IDataErrorInfo.&lt;br /&gt;
If it does, WebValidationControlExtender interrogates the object's columns/properties for errors. &lt;br /&gt;
If errors are found, it adds CustomValidators back to the page then goes searching for controls that are using that object datasource (in this case the DetailsView). &lt;br /&gt;
When it finds the details view it searches for BoundFields that are bound to the properties with the error, then inserts the red * like in the picture above.&lt;/p&gt;
&lt;p&gt;The point is, you could go an implement whatever validation library suites your needs, as long as the object implements IDataErrorInfo the validation works. I just don't understand why ASP.NET doesn't already use something like this, there are so many complicated implementations for validation, I hope this brings some fresh light.&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/80.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2007/11/08/idataerrorinfo-for-asp.net.aspx</guid>
            <pubDate>Thu, 08 Nov 2007 13:42:42 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/80.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2007/11/08/idataerrorinfo-for-asp.net.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/80.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/80.aspx</trackback:ping>
        </item>
        <item>
            <title>Another SubText Blog</title>
            <link>http://kowitz.net/archive/2007/06/09/hello-subtext.aspx</link>
            <description>&lt;p&gt;Yes, I'm one of the crowd now, all because my old host Jumba is turning off the last of their Windows boxes, and coincidentally, the one I was hosted on. This has happened &lt;a href="http://www.kowitz.net/archive/2006/10/12/server-move-sub-and-mysql-dataprovider.aspx"&gt;previously&lt;/a&gt; when they shut down some legacy Windows servers and forced everyone on it to upgrade.&lt;/p&gt;
&lt;p&gt;Since Jumba is now no longer offering HELM windows hosting they have &lt;a href="http://forums.whirlpool.net.au/forum-replies.cfm?t=758042"&gt;recommended&lt;/a&gt; &lt;a href="http://www.xhostsolutions.com.au/"&gt;xHostSolutions&lt;/a&gt; who have pretty comparative deals to what I was previously on, only better. This now gives me access to an MS Sql Server database, so I thought I'd take the opportunity to install &lt;a href="http://subtextproject.com/"&gt;SubText&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I still think that &lt;a href="http://www.codeplex.com/SUB"&gt;Single User Blog&lt;/a&gt; is a great place to start when you want to start sinking your teeth into ASP.NET 2.0, its very easy to get your head around and start using all the cool features that ASP.NET has to offer. This is one thing, but I'm now itching to try something a little more feature rich such as SubText. I do admire what wordpress has achieved in the blogging world, but I just can't seem to stray away from .NET, and not to mention the fact that wordpress is written in &lt;a href="http://www.youtube.com/watch?v=p5EIrSM8dCA"&gt;PHP&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/72.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2007/06/09/hello-subtext.aspx</guid>
            <pubDate>Sat, 09 Jun 2007 11:14:22 GMT</pubDate>
            <comments>http://kowitz.net/archive/2007/06/09/hello-subtext.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/72.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/72.aspx</trackback:ping>
        </item>
        <item>
            <title>Stopping ASP.NET web.config inheritance</title>
            <link>http://kowitz.net/archive/2007/05/16/stopping-asp.net-web.config-inheritance.aspx</link>
            <description>&lt;p&gt;If you are only ever running one ASP.NET application on a website this is not an issue. However, if you are running a site which may have an application at the root and other separate applications running in sub or virtual directories, then Settings inheritance could be a problem.&lt;/p&gt;
&lt;p&gt;You can read more about how config files get inherited &lt;a href="http://msdn2.microsoft.com/en-us/library/ms178685.aspx"&gt;on msdn&lt;/a&gt; but here's a tip for stopping settings in the root app from getting inherited. The &amp;lt;location&amp;gt; tag is the only tag I've come across which has the inheritInChildApplications attribute. So to target the main &amp;lt;system.web&amp;gt; just wrap it in the location tag as seen below. &lt;/p&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;location path="." inheritInChildApplications="false"&amp;gt;
&amp;lt;system.web&amp;gt;
 ...
&amp;lt;/system.web&amp;gt;
&amp;lt;/location&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Other Notes:&lt;/strong&gt;&lt;br /&gt;
Although I think the inheritance is in general a good feature to have, especially for inheriting down things such as security settings.  It can even support locking certain settings for child applications, but things can be problematic if the child application doesn't share the same libraries, modules, handlers, masterpages or themes.&lt;/p&gt;
&lt;p&gt;Most collections in the web.config have the &amp;lt;remove&amp;gt; tag or &amp;lt;clear&amp;gt; tag to remove irrelevant modules or handlers in the child app.  The problems I've found occur with settings relating to the &amp;lt;pages&amp;gt; tag, which most items in it don't support &amp;lt;remove&amp;gt;. This means if your child applications doesn't share or have the same registered controls, masterpages or themes then you are probably going to have issues or be forced to specify the settings on a per-page basis.  This is where the inheritInChildApplications="false" really comes in handy.&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/71.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2007/05/16/stopping-asp.net-web.config-inheritance.aspx</guid>
            <pubDate>Wed, 16 May 2007 03:11:23 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/71.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2007/05/16/stopping-asp.net-web.config-inheritance.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/71.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/71.aspx</trackback:ping>
        </item>
        <item>
            <title>A Free, FreeTextBox Alternative</title>
            <link>http://kowitz.net/archive/2007/02/21/a-free-freetextbox-alternative.aspx</link>
            <description>&lt;p&gt;I don't know why but &lt;a href="http://freetextbox.com/" target="_blank"&gt;FreeTextBox&lt;/a&gt; has just never cut it for me.  It's wonderful and easy to install and it comes as a nice control in a .NET assembly.  &lt;span style="font-weight: bold;"&gt;But &lt;/span&gt;it doesn't give you the nicest HTML back, in fact I'd go as far as to say, it mutates GOOD HTML you put in there yourself, this is bad.  Luckily there are some other free alternatives such as &lt;a href="http://tinymce.moxiecode.com/" target="_blank"&gt;TinyMCE&lt;/a&gt;, which is a nice little editor.  The only catch is it's pure javascript and requires a little manual intervention to work with your serverside code.&lt;br /&gt;
&lt;br /&gt;
On a side note: The guys over at &lt;a target="_blank" href="http://code.communityserver.org/?path=CS+Tree%5cCS+2.1%5cControls%5cEditor%5cITextEditor.cs"&gt;CommunityServer&lt;/a&gt; probably saw this problem and thought; no matter which editor you pick someone was going to complain, so they implemented the editor control in a Provider model. Clever.&lt;br /&gt;
&lt;br /&gt;
I'm not using CommunityServer so changing my little SUB editor still requires two lines of code change and a recompile, but the flavor of the week for me is &lt;a href="http://www.obout.com/editor_new/index.aspx" target="_blank" rel="nofollow"&gt;Obout's HTML Editor&lt;/a&gt;.  This little beauty is free for personal use, and commercial use requires only a small registration fee.&lt;br /&gt;
&lt;br /&gt;
This editor not only gives better HTML then FTB but also has some cool things like a Built-in spell checker, quick-formatting and bunches of other little options.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;UPDATE(29-Mar-07): &lt;/span&gt;I have now had a change to try out &lt;a target="_blank" href="http://www.fckeditor.net"&gt;FCKEditor&lt;/a&gt;, and it does seem to work very smoothly.  Also I did notice an option when using it under Mozilla to format 'span' tags rather then the out dated 'font' tags.&lt;/p&gt;
&lt;p&gt;It also appears that Obout may have changed their policy since I've made this post because I can no longer see any indication that they want anyone to use the editor for free, they seem to now be pushing downloading it as part of their new suite.  So in light of this, FCKEditor may be your best alternative.&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/67.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2007/02/21/a-free-freetextbox-alternative.aspx</guid>
            <pubDate>Tue, 20 Feb 2007 23:57:36 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/67.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2007/02/21/a-free-freetextbox-alternative.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/67.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/67.aspx</trackback:ping>
        </item>
        <item>
            <title>Hello IronPython for ASP.NET</title>
            <link>http://kowitz.net/archive/2007/02/04/hello-ironpython-for-asp.net.aspx</link>
            <description>&lt;p&gt;Although this is not new news (released November 2006 I think), I'd like to point out how cool having &lt;a href="http://www.asp.net/ironpython/default.aspx?tabid=62"&gt;Python run ASP.NET&lt;/a&gt; is.  I don't actually know how to program python...yet...but programming Python appears intuitive be nature. &lt;/p&gt; &lt;p&gt;To get an HelloWorld IronPython ASP.NET application running, it took me all of about 5 minutes, 3 to download and install the add-in, 1 to open Visual Studio, then another minute to type in some stuff and run it.  Sweet.  At this point the intellisense has nothing of your other standard languages like C#, but I'm sure that's coming.&lt;/p&gt; &lt;p&gt;One of the biggest issues I see with a a large number of languages is a good IDE.  Not to say that Python doesn't already have a number of good IDEs, but, I haven't used an IDE yet that actually beats Visual Studio.  So since IronPython can make the effort to actually integrate with Visual Studio and be compatible with all my existing .NET libraries, maybe I'll just have to make more of an effort to check it out.&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/66.aspx" width="1" height="1" /&gt;</description>
            <guid>http://kowitz.net/archive/2007/02/04/hello-ironpython-for-asp.net.aspx</guid>
            <pubDate>Sun, 04 Feb 2007 11:14:35 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/66.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2007/02/04/hello-ironpython-for-asp.net.aspx#feedback</comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/66.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/66.aspx</trackback:ping>
        </item>
        <item>
            <title>Search Engine Optimization for .NET</title>
            <link>http://kowitz.net/archive/2006/12/17/search-engine-optimization-for-.net.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Search Engine Bot Detection&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So after I &lt;a href="http://www.kowitz.net/2006/12/7/Cleaning+Up+ASPNET+Sessions+in+Google.aspx"&gt;first noticed&lt;/a&gt; a large build up of strange session Urls in Google searches for my domain I've then done a little bit of &lt;a href="http://www.kowitz.net/2006/12/11/ASPNET+20+Mozilla+Browser+Detection+Hole.aspx"&gt;research&lt;/a&gt; into the issue and discovered it was .NET not detecting that the search engine spider was Mozilla/5.0 compliant and inserting some rubbish session id into the url. &lt;/p&gt;
&lt;p&gt;It's been nearly a week since my changes to correct this and there's already a small indication of the 'healing' process. The pages are not out of the index yet, (and yes I do know that I 'could' &lt;a href="http://services.google.com/urlconsole/controller"&gt;remove them manually&lt;/a&gt;) but there are a lot of urls, and I'm in no rush.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fSearchEngineOptimizationfor.NET_FDE0%2fasp_net_url_cleanup%5b6%5d.jpg" rel="lightbox"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="161" alt="ASP.NET Url Cleanup" width="240" src="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fSearchEngineOptimizationfor.NET_FDE0%2fasp_net_url_cleanup_thumb%5b4%5d.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note on Webparts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another change I have made this week was completing stripping webparts out of my template. Now even though I think webparts are extremely cool...they render HTML Soup. So I'd probably recommend that if you have a site where you are trying to get it to rank via the content, don't use webparts. If its an admin section / personalisation portal / intranet site or any other scenario when content ranking is not important, then by all means, feel the &lt;strike&gt;soup&lt;/strike&gt; power!&lt;/p&gt;
&lt;p&gt;Apart from dropping 20k from my page here's another unexpected result:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fSearchEngineOptimizationfor.NET_FDE0%2fthis_page_validates_as_xhtml_1_0_transitional%5b1%5d.jpg" rel="lightbox"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="161" alt="Frontpage validates as XHTML 1.0 Transitional" width="240" src="http://www.kowitz.net/Attachment.ashx?id=WindowsLiveWriter%2fSearchEngineOptimizationfor.NET_FDE0%2fthis_page_validates_as_xhtml_1_0_transitional.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Yey I pass &lt;a href="http://validator.w3.org/"&gt;validation&lt;/a&gt; on W3C!!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evil ViewState&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well I think viewstate is fantastic, its a set-and-forget automagic keep-state for all things on your form. Only problem is it renders before the content. This is a bad thing because search phrases gain more significance the closer they are to the top of the document, so the idea is to keep the soup at the bottom. A bit of Googling shows there are &lt;a href="http://www.hanselman.com/blog/MovingViewStateToTheBottomOfThePage.aspx"&gt;various&lt;/a&gt; methods that have been implemented to move it to the bottom. The method I kind of agreed with (although I've lost the link d'oh) was where a basepage class simple overrides handling the viewstate and uses the LosFormatter to store it in the session. Now I only half agree with this, I like the idea of overriding the handling of the viewstate but not putting it in the session. I simply used this but added my own HiddenControl (i.e. __VIEWSTATE_SEO) to the bottom of the form on pre-render, easy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Blog Category&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In respect of all these new things that appear to be common SEO problems I have created to new &lt;a href="http://www.kowitz.net/Posts/PostsByCategory.aspx?categoryId=1017"&gt;category&lt;/a&gt; for SEO.NET (Search Engine Optimisation for .NET) blog posts. And in addition to this I will be trying to starting a small toolkit of classes and resources that should be able to be applied to any ASP.NET 2.0 application to make it more SEO friendly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Move ViewState to the bottom of the form &lt;a href="http://www.kowitz.net/files/BasePage.zip"&gt;BasePage.cs&lt;/a&gt; or view &lt;a href="http://www.kowitz.net/files/source/BasePage.cs.txt"&gt;Source&lt;/a&gt; online&lt;/p&gt;&lt;img src="http://kowitz.net/aggbug/65.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2006/12/17/search-engine-optimization-for-.net.aspx</guid>
            <pubDate>Sat, 16 Dec 2006 15:42:36 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/65.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/12/17/search-engine-optimization-for-.net.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/65.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/65.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET 2.0 Mozilla Browser Detection Hole</title>
            <link>http://kowitz.net/archive/2006/12/11/asp.net-2.0-mozilla-browser-detection-hole.aspx</link>
            <description>&lt;p&gt;It has recently come to my attention that there is something drastically wrong with the way search engines have been indexing my ASP.NET 2.0 blog.&lt;/p&gt;
&lt;p&gt;As I've started to &lt;a href="http://www.kowitz.net/2006/12/7/Cleaning+Up+ASPNET+Sessions+in+Google.aspx"&gt;explain previously&lt;/a&gt;, this is because of the way the browser detection is set up. To give a brief rundown ASP.NET 2.0 has a default &lt;a href="http://msdn2.microsoft.com/en-us/library/ms228122(VS.80).aspx"&gt;browser definition&lt;/a&gt; which seems to assume that the default browser is fairly capable and supports common things such as javascript and cookies. A browser definition can get inherited into other definitions which can then override specific properties to update it for that specific browser or browser version.&lt;/p&gt;
&lt;p&gt;Apparently in around &lt;a href="http://www.mattcutts.com/blog/q-a-thread-march-27-2006/"&gt;March 2006&lt;/a&gt; Google started rolling out updates that changed the Googlebot's useragent string from:&lt;/p&gt;
&lt;p&gt;"Googlebot/2.1 (+http://www.googlebot.com/bot.html)" to&lt;br /&gt;
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"&lt;/p&gt;
&lt;p&gt;Now the reason for this is so the Googlebot could identify itself as being Mozilla/5.0 compliant which should allow it to be accepted by more webservers. However this breaks the detection pattern in ASP.NET. (And was always broken in Yahoo Slurp, I just don't know if anyone ever noticed).&lt;/p&gt;
&lt;p&gt;When the useragent was just "Googlebot/2.1" it wasn't able to be matched and used the "default.browser" detection file which defaulted to a browser of reasonable capabilities. After the change it found itself in the "mozilla.browser" file because it was detected on the "Mozilla" word. So all the following sets of instructions in the "mozilla.browser" file try to establish exactly what platform and variant of Mozilla it is, for example, if its Firefox running on OSX, or if it's the older Mozilla Gecko rendering engine. But because there is no definition for a Generic Mozilla/5.0 compatible browser it gets the most relevant match, being the lowest Mozilla/1.0 compatible settings. Bad!&lt;/p&gt;
&lt;p&gt;Because of this bad detection the default Mozilla/1.0 settings assume NO COOKIES and insert the session ID into the url then issues a response status 302 (content temporarily moved). What makes this situation even worse is that the default behavior of search engines is to &lt;a href="http://www.mattcutts.com/blog/seo-advice-discussing-302-redirects/"&gt;follow these redirects&lt;/a&gt; and index the content on the other side. So basically everytime some random User-agent that claims to be Mozilla/5.0 compliant hits the site it gets Mozilla/1.0 capabilities. What is needed is something to bridge this gap.&lt;/p&gt;
&lt;p&gt;Fortunately there is something that can be done that won't even require a recompile of your ASP.NET 2.0 application. Simply create a "genericmozilla5.browser" file in your "/App_Browsers" folder in the root of your application with the following in contents:&lt;/p&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;browsers&amp;gt;
&amp;lt;browser id="GenericMozilla5" parentID="Mozilla"&amp;gt;
&amp;lt;identification&amp;gt;
&amp;lt;userAgent match="Mozilla/5\.(?'minor'\d+).*[C|c]ompatible; ?(?'browser'.+); ?\+?(http://.+)\)" /&amp;gt;
&amp;lt;/identification&amp;gt;
&amp;lt;capabilities&amp;gt;
&amp;lt;capability name="majorversion" value="5" /&amp;gt;
&amp;lt;capability name="minorversion" value="${minor}" /&amp;gt;
&amp;lt;capability name="browser" value="${browser}" /&amp;gt;
&amp;lt;capability name="Version" value="5.${minor}" /&amp;gt;
&amp;lt;capability name="activexcontrols" value="true" /&amp;gt;
&amp;lt;capability name="backgroundsounds" value="true" /&amp;gt;
&amp;lt;capability name="cookies" value="true" /&amp;gt;
&amp;lt;capability name="css1" value="true" /&amp;gt;
&amp;lt;capability name="css2" value="true" /&amp;gt;
&amp;lt;capability name="ecmascriptversion" value="1.2" /&amp;gt;
&amp;lt;capability name="frames" value="true" /&amp;gt;
&amp;lt;capability name="javaapplets" value="true" /&amp;gt;
&amp;lt;capability name="javascript" value="true" /&amp;gt;
&amp;lt;capability name="jscriptversion" value="5.0" /&amp;gt;
&amp;lt;capability name="supportsCallback" value="true" /&amp;gt;
&amp;lt;capability name="supportsFileUpload" value="true" /&amp;gt;
&amp;lt;capability name="supportsMultilineTextBoxDisplay" value="true" /&amp;gt;
&amp;lt;capability name="supportsMaintainScrollPositionOnPostback" value="true" /&amp;gt;
&amp;lt;capability name="supportsVCard" value="true" /&amp;gt;
&amp;lt;capability name="supportsXmlHttp" value="true" /&amp;gt;
&amp;lt;capability name="tables" value="true" /&amp;gt;
&amp;lt;capability name="vbscript" value="true" /&amp;gt;
&amp;lt;capability name="w3cdomversion" value="1.0" /&amp;gt;
&amp;lt;capability name="xml" value="true" /&amp;gt;
&amp;lt;capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" /&amp;gt;
&amp;lt;/capabilities&amp;gt;
&amp;lt;/browser&amp;gt;
&amp;lt;/browsers&amp;gt;
&lt;/pre&gt;
&lt;p&gt;This will match generic Mozilla compatible browsers and spiders with user-agents strings such as:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) &lt;/li&gt;
    &lt;li&gt;Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) &lt;/li&gt;
    &lt;li&gt;Mozilla/5.0 (compatible; AbiLogicBot/1.0; +http://www.abilogic.com/bot.html) &lt;/li&gt;
    &lt;li&gt;Mozilla/5.0 (compatible; AnyApexBot/1.0; +http://www.anyapex.com/bot.html) &lt;/li&gt;
    &lt;li&gt;Mozilla/5.0 (compatible; BecomeBot/3.0; MSIE 6.0 compatible; +http://www.become.com/site_owners.html) &lt;/li&gt;
    &lt;li&gt;Mozilla/5.0 (compatible; MojeekBot/2.0; http://www.mojeek.com/bot.html) &lt;/li&gt;
    &lt;li&gt;Mozilla/5.0 (compatible; Scrubby/2.2; +http://www.scrubtheweb.com/) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Other Notes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The MSNBOT also never had this problem because it like the original Googlebot string was never detected and thus received the "default.browser" file settings which support the cookies.&lt;/p&gt;
My solution is not a complete fix, I think Microsoft could have done one thing better here. Because the browser string goes into the "mozilla.browser" file, they need another level where when it knows its Mozilla/5.0 compliant it gets the appropriate defaults before it starts to figure out exactly what browser it is. Even though with this approach the exact browsing useragent wouldn't be established, it would at least support future browsers claiming to be compliant at a higher level then just "Mozilla".
&lt;p&gt;&lt;strong&gt;Downloads&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.kowitz.net/files/genericmozilla5.zip"&gt;genericmozilla5.browser&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;&lt;img src="http://kowitz.net/aggbug/64.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Brendan Kowitz</dc:creator>
            <guid>http://kowitz.net/archive/2006/12/11/asp.net-2.0-mozilla-browser-detection-hole.aspx</guid>
            <pubDate>Mon, 11 Dec 2006 02:58:54 GMT</pubDate>
            <wfw:comment>http://kowitz.net/comments/64.aspx</wfw:comment>
            <comments>http://kowitz.net/archive/2006/12/11/asp.net-2.0-mozilla-browser-detection-hole.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://kowitz.net/comments/commentRss/64.aspx</wfw:commentRss>
            <trackback:ping>http://kowitz.net/services/trackbacks/64.aspx</trackback:ping>
        </item>
    </channel>
</rss>