<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.haacked.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">
    <channel>
        <title>you've been HAACKED</title>
        <link>http://haacked.com/Default.aspx</link>
        <description>...and you like it.</description>
        <language>en-US</language>
        <copyright>Haacked</copyright>
        <generator>Subtext Version 2.2.0.0</generator>
        <image>
            <title>you've been HAACKED</title>
            <url>http://haacked.com/images/RSS2Image.gif</url>
            <link>http://haacked.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.haacked.com/haacked" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="haacked" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><geo:lat>34.03056</geo:lat><geo:long>-118.398043</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/</creativeCommons:license><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">haacked</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
            <title>Headed To Austin and Speaking at the .NET User&amp;rsquo;s Group</title>
            <category>Personal</category>
            <category>Software Development</category>
            <link>http://haacked.com/archive/2010/02/07/visiting-austin.aspx</link>
            <description>&lt;p&gt;The stars at night, are big and bright – clap clap clap clap – &lt;strong&gt;deep in the heart of Texas&lt;/strong&gt;! &lt;/p&gt;  &lt;p&gt;Hold onto your ten gallon hats, I’m visiting Texas for the first time! I’m very excited to visit the &lt;em&gt;second&lt;/em&gt; largest state in the union. ;)&lt;/p&gt;  &lt;p&gt;&lt;a title="Austin, Texas from Lady Bird Lake by Shane Pope - CC licensed" href="http://www.flickr.com/photos/shanepope/2661195611/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="austin" border="0" alt="austin" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/HeadedToAustinandSpeakinga.NETUsersGroup_12E13/austin_3.jpg" width="524" height="351" /&gt;&lt;/a&gt; The purpose of my trip is to meet with some developers at Dell doing interesting things and to give a talk there as well.&lt;/p&gt;  &lt;p&gt;But since I’ve heard such good things about the vibrant tech community in Austin, I am trying to make the most of my short trip. &lt;strong&gt;On Thursday, February 25, I’ll be speaking at Austin .NET User Group meeting at 5:30 PM CST &lt;/strong&gt;(&lt;em&gt;Location TBD, I’ll post it here when I find out or follow @ehexter on Twitter&lt;/em&gt;)&lt;strong&gt;. &lt;/strong&gt;So be sure to come by and say hello.&lt;/p&gt;  &lt;p&gt;I’m also going to visit my good friends at &lt;a title="Headspring" href="http://www.headspringsystems.com/"&gt;Headspring&lt;/a&gt; as well as &lt;a title="Dovetail Software" href="http://www.dovetailsoftware.com/"&gt;Dovetail Software&lt;/a&gt; to jabber about technology and see what cool things they’re doing with ASP.NET and ASP.NET MVC.&lt;/p&gt;  &lt;p&gt;And of course, a trip to Austin wouldn’t be complete without a night out on the town with &lt;a title="Scott Bellware" href="http://blog.scottbellware.com/"&gt;Bellware&lt;/a&gt;. I expect chaos. ;)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:25791012-096e-4418-ad04-1b8d16240c62" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://haacked.com/tags/austin/default.aspx" rel="tag"&gt;austin&lt;/a&gt;, &lt;a href="http://haacked.com/tags/texas/default.aspx" rel="tag"&gt;texas&lt;/a&gt;, &lt;a href="http://haacked.com/tags/.net+user+group/default.aspx" rel="tag"&gt;.net user group&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18684.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=gIRsIkcNS5g:bEO1cCVykm4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=gIRsIkcNS5g:bEO1cCVykm4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=gIRsIkcNS5g:bEO1cCVykm4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=gIRsIkcNS5g:bEO1cCVykm4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=gIRsIkcNS5g:bEO1cCVykm4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/02/07/visiting-austin.aspx</guid>
            <pubDate>Mon, 08 Feb 2010 05:36:36 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/02/07/visiting-austin.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18684.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET MVC 2 RC 2 Released</title>
            <link>http://haacked.com/archive/2010/02/04/aspnetmvc2-rc2.aspx</link>
            <description>&lt;p&gt;Today I’m pleased to announce the availability of &lt;strong&gt;&lt;a title="Download Details Page" href="http://go.microsoft.com/fwlink/?LinkID=182483"&gt;Release Candidate 2 for ASP.NET MVC 2&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a title="thumbs up by richkidsunite - creative commons by attribution" href="http://www.flickr.com/photos/89186997@N00/3396410350/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="thumbs-up" border="0" alt="thumbs-up" align="right" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/ASP.NETMVC2RC2Released_E8E6/thumbs-up_3.jpg" width="240" height="239" /&gt;&lt;/a&gt;After receiving feedback from our last release candidate back in December, we decided it would be prudent to have one more release candidate that incorporated the feedback. You can &lt;strong&gt;&lt;a title="ASP.NET MVC 2 RC 2 Release Notes" href="http://go.microsoft.com/fwlink/?LinkID=182482"&gt;read the release notes&lt;/a&gt;&lt;/strong&gt; for everything that changed, there’s not a whole lot.&lt;/p&gt;  &lt;p&gt;The biggest change in this release was described by Brad Wilson in his blog post on &lt;a title="Input Validation vs Model Validation" href="http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html"&gt;Input Validation vs. Model Validation in ASP.NET MVC&lt;/a&gt;. Also included in this release are an assortment of bug fixes and performance improvements.&lt;/p&gt;  &lt;p&gt;The window to provide feedback on this release is going to be very short as we are closing in on the RTM. If you want to provide input into this release, please do take the bits for a spin as soon as possible. I’m pretty excited about this release as I can see the end of the tunnel fast approaching. :)&lt;/p&gt;  &lt;p&gt;At this point, we’ll only be taking recall class bugs for ASP.NET MVC 2. All other bug reports will be filed against ASP.NET MVC 3. Sometime in the near future, I’ll start sharing some of our planning around that. How exciting!&lt;/p&gt;  &lt;p&gt;Oh, and if you missed the link to the Download Details page at the beginning of this post, &lt;a title="ASP.NET MVC 2 RC 2 Download Details" href="http://go.microsoft.com/fwlink/?LinkID=182483"&gt;&lt;strong&gt;here it is again&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We also posted the &lt;strong&gt;&lt;a title="ASP.NET MVC 2 RC 2 Source Code" href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=39978"&gt;source code and futures assembly on our Codeplex Site&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f12f8ebc-e4bb-409f-845d-cd3084962b63" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://haacked.com/tags/aspnetmvc/default.aspx" rel="tag"&gt;aspnetmvc&lt;/a&gt;, &lt;a href="http://haacked.com/tags/asp.net/default.aspx" rel="tag"&gt;asp.net&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18683.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=9KGMHxEkCww:43mayhNVB5I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=9KGMHxEkCww:43mayhNVB5I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=9KGMHxEkCww:43mayhNVB5I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=9KGMHxEkCww:43mayhNVB5I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=9KGMHxEkCww:43mayhNVB5I:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/02/04/aspnetmvc2-rc2.aspx</guid>
            <pubDate>Fri, 05 Feb 2010 05:10:05 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/02/04/aspnetmvc2-rc2.aspx#feedback</comments>
            <slash:comments>30</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18683.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Can You Really Measure Customer Satisfaction?</title>
            <category>Personal</category>
            <category>Software Development</category>
            <link>http://haacked.com/archive/2010/02/04/measuring-customer-satisfaction.aspx</link>
            <description>&lt;p&gt;One question that came up recently during my mid-year review is how am I measuring customer satisfaction with the products that I work on? For example, how can I measurably demonstrate that customers are happy with the work we are doing on ASP.NET MVC and that my team is responding to customer feedback?&lt;/p&gt;  &lt;p&gt;Umm, I can’t?&lt;/p&gt;  &lt;p&gt;At least not right now in a &lt;em&gt;measurable&lt;/em&gt; manner. I don’t have any such metric and I’m not sure how reliable any metric I might come up with will be.&lt;/p&gt;  &lt;p&gt;&lt;a title="Wooden Ruler on sxc.hu by Bubbels" href="http://www.sxc.hu/photo/174738"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="ruler" border="0" alt="ruler" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/MeasuringCustomerSatisfaction_CD25/ruler_3.jpg" width="520" height="390" /&gt;&lt;/a&gt;But perhaps that’s simply due to a lack of imagination on my part. &lt;/p&gt;  &lt;p&gt;In the past, we’ve tried various unscientific online twitter polls. One thing we did was ask the world for a list of ASP.NET pain points and compile them into one big list. Then at the end of the product cycle, we could show that we were able to address 10% of those pain points.&lt;/p&gt;  &lt;p&gt;Personally, I feel that’s a bit contrived, but if it satisfies the muckety mucks, it works for me. ;)&lt;/p&gt;  &lt;p&gt;Well actually, I’m not satisfied with that. At least not until I’ve tried to come up with something better. So I started thinking about what are ways to measure this and apart from simply using &lt;a title="SurveyMonkey" href="http://www.surveymonkey.com/"&gt;SurveyMonkey&lt;/a&gt;, I’ve sort of hit a wall. &lt;/p&gt;  &lt;p&gt;This is where I ask you the question. If you were in my shoes what would you do? How have you quantitatively measured your effectiveness in responding to customer input? I’d love to hear your ideas.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UPDATE 2/4 1:06 AM&lt;/strong&gt; By the way, I didn’t mean to give the impression that this is the only metric I need to collect. This is just the one I need help with. I think the number of downloads, installations, and clients is a much more important metric. However, some of those numbers are hard to collect with any accuracy. That’s why I think some of these other metrics might be useful as corroborating evidence. At least that’s my theory.&lt;/p&gt;  &lt;div class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://haacked.com/tags/project+management/default.aspx" rel="tag"&gt;project management&lt;/a&gt;, &lt;a href="http://haacked.com/tags/metrics/default.aspx" rel="tag"&gt;metrics&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18682.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=2y2dhEwZm-c:qtkznAqxC4Q:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=2y2dhEwZm-c:qtkznAqxC4Q:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=2y2dhEwZm-c:qtkznAqxC4Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=2y2dhEwZm-c:qtkznAqxC4Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=2y2dhEwZm-c:qtkznAqxC4Q:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/02/04/measuring-customer-satisfaction.aspx</guid>
            <pubDate>Thu, 04 Feb 2010 08:43:35 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/02/04/measuring-customer-satisfaction.aspx#feedback</comments>
            <slash:comments>38</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18682.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Speaking At Mix10</title>
            <category>Software Development</category>
            <link>http://haacked.com/archive/2010/01/28/speaking-at-mix10.aspx</link>
            <description>&lt;p&gt;It’s that time of year again when a young man’s thoughts turn to Las Vegas! Yep, it’s another year and another &lt;a title="Mix Website" href="http://live.visitmix.com/"&gt;Mix conference&lt;/a&gt; (March 15-17, 2010), but this time they’ve changed locations to Mandalay Bay.&lt;/p&gt;  &lt;p&gt;&lt;a title="Photo by ErinKhoo CC license by attribution" href="http://www.flickr.com/photos/23563020@N08/3959425596/"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="mandalay-bay" border="0" alt="mandalay-bay" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/SpeakingAtMix10_13596/mandalay-bay_3.jpg" width="504" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It looks like &lt;a title="Mix Conferences End At 09" href="http://haacked.com/archive/2006/09/21/The_Mix_Conferences_Will_End_With_09.aspx"&gt;my prediction that the Mix conferences would end at Mix 09&lt;/a&gt; did not pan out. ;)&lt;/p&gt;  &lt;p&gt;As I &lt;a title="Speaking at Mix09" href="http://haacked.com/archive/2009/03/01/speaking-at-mix09.aspx"&gt;did last year&lt;/a&gt;, I’ll be giving two talks at Mix 10 this year, one of them with the irrepressible &lt;a title="Scott Hanselman's Blog" href="http://hanselman.com/" rel="friend met co-worker"&gt;Scott Hanselman&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;a title="ASP.NET MVC 2 Talk at Mix" href="http://live.visitmix.com/MIX10/Sessions/FT04"&gt;What’s new in ASP.NET MVC 2&lt;/a&gt;&lt;/h4&gt;    &lt;p&gt;Come see and hear about the latest innovations in ASP.NET MVC 2 and the tooling support in Visual Studio 2008 and 2010. We'll introduce you to a range of productivity (and extensibility) enhancements such as template helpers, model validation, and the new “Areas” feature, which enhances the team development of large Web sites. With template helpers you can get your website up and running for any data entity type without having to create UI. With improved server side validation and brand new client side validation support, your business data model can define the behavior of your application automatically. All this and more!&lt;/p&gt;    &lt;h4&gt;&lt;a href="http://live.visitmix.com/MIX10/Sessions/FT05"&gt;THE HAAHA SHOW: ASP.NET MVC SECURITY WITH HAACK AND HANSELMAN&lt;/a&gt;&lt;/h4&gt;    &lt;p&gt;Join Phil Haack and Scott Hanselman for this dynamic and unusual security session. The HaaHa brothers will take turns implementing features on an ASP.NET MVC Web Site. Scott will write a feature, and Phil will exploit it and hack into the system. We’ll analyze and discuss the exploits live on stage and then close them one by one. You’ll learn about XSS, CSRF, JSON Hijacking and more. Is *your* site safe from the Haack?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Mix10_LoveTheWeb_blk_240" border="0" alt="Mix10_LoveTheWeb_blk_240" align="left" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/SpeakingAtMix10_BF88/Mix10_LoveTheWeb_blk_240_3.jpg" width="184" height="244" /&gt; Lest you think Scott and I &lt;a title="Forehead Edition" href="http://twitpic.com/1zt30"&gt;have big heads&lt;/a&gt; and self inflated egos, I should explain the title of the second talk. Last year Scott and I were supposed to give a talk together at &lt;a title="NDC 2009" href="http://haacked.com/archive/2009/06/28/ndc2009-trip-report.aspx"&gt;the Norwegian Developer’s Conference&lt;/a&gt;, but we were very late in submitting a talk and abstract. As in, we had nothing a week before the conference.&lt;/p&gt;  &lt;p&gt;So Rune (the organizer) simply put in the title “The Haacked and Hanselman Show” as a placeholder, and it stuck. This talk will follow in the footsteps of that talk, but in some cases it may be more difficult to give because of security improvements in ASP.NET.&lt;/p&gt;  &lt;p&gt;Right now I’m prepping for the talk by attempting to discover a 0 day exploit that I can reveal live as the finale for the talk. Won’t that be fun! ;)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(Yes, I’m kidding you humorless security experts out there)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Anyways, if you’re going to be at Mix, be sure to come by and say hello! Don’t be shy.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26a69815-394a-4345-be70-b2c39ffc61a9" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/mix10" rel="tag"&gt;mix10&lt;/a&gt;,&lt;a href="http://technorati.com/tags/mix" rel="tag"&gt;mix&lt;/a&gt;,&lt;a href="http://technorati.com/tags/las+vegas" rel="tag"&gt;las vegas&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18681.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=LX9FvaQq54M:au4fE71FYrM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=LX9FvaQq54M:au4fE71FYrM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=LX9FvaQq54M:au4fE71FYrM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=LX9FvaQq54M:au4fE71FYrM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=LX9FvaQq54M:au4fE71FYrM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/01/28/speaking-at-mix10.aspx</guid>
            <pubDate>Fri, 29 Jan 2010 06:59:57 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/01/28/speaking-at-mix10.aspx#feedback</comments>
            <slash:comments>13</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18681.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Editable Routes Using App_Code</title>
            <category>ASP.NET</category>
            <category>ASP.NET MVC</category>
            <category>Software Development</category>
            <link>http://haacked.com/archive/2010/01/18/editable-routes-in-medium-trust.aspx</link>
            <description>&lt;p class="update"&gt;UPDATE: I’ve updated the &lt;a title="Editable Routes" href="http://haacked.com/archive/2010/01/17/editable-routes.aspx"&gt;original post&lt;/a&gt; for editable routes to work in medium trust and not require a full app domain reload like this approach does. I think that approach may supersede this approach until I learn otherwise. :)&lt;/p&gt;  &lt;p&gt;Yesterday I wrote about a technique &lt;a title="Editable Routes" href="http://haacked.com/archive/2010/01/17/editable-routes.aspx"&gt;using dynamic compilation to allow editing routes&lt;/a&gt; after you’ve deployed an application without having to manually recompile your application.&lt;/p&gt;  &lt;p&gt;I made use of a FileSystemWatcher to monitor a Config directory and dynamically recompiled code when the code file changed. This has one advantage over using the App_Code directory in that the whole App Domain doesn’t need to get recycled when you make changes to your routes.&lt;/p&gt;  &lt;p&gt;Today, my co-worker &lt;a title="Angle Bracket Percent" href="http://blogs.msdn.com/davidebb/" rel="friend met co-worker"&gt;David Ebbo&lt;/a&gt; (who’s a master at ASP.NET Build and Compilation system) pointed out one gaping flaw with my approach. &lt;strong&gt;It doesn’t work in Medium Trust because the &lt;code&gt;&lt;a title="FileSystemWatcher Class" href="http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx"&gt;FileSystemWatcher class&lt;/a&gt;&lt;/code&gt; demands full trust&lt;/strong&gt;. Doh!&lt;/p&gt;  &lt;p&gt;For many business systems, that may not be a concern. But for my blog engine, it’s a huge concern. There are workarounds to the &lt;code&gt;FileSystemWatcher&lt;/code&gt; issues, but I decided to take the easy way out and use the &lt;em&gt;App_Code&lt;/em&gt; directory approach, since it handles all that crufty logic for watching the file system for me.&lt;/p&gt;  &lt;p&gt;In this case, I simply added a new folder named &lt;em&gt;App_Code&lt;/em&gt; to my project and copied &lt;em&gt;Routes.cs&lt;/em&gt; to that folder.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="routes-in-app_code" border="0" alt="routes-in-app_code" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/EditableRoutesInMediumTrust_9C13/routes-in-app_code_3.png" width="325" height="364" /&gt; &lt;/p&gt;  &lt;p&gt;I then added a new method to &lt;code&gt;RouteRegistrationExtensions&lt;/code&gt;. (Note that the actual code has some null reference checking which I omitted here.)&lt;/p&gt;  &lt;div class="dropshadow code"&gt;   &lt;div class="innerbox"&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterAppCodeRoutes(&lt;span class="kwrd"&gt;this&lt;/span&gt; RouteCollection routes) {
  var type = BuildManager.GetType(&lt;span class="str"&gt;"Routes"&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;&lt;span class="rem"&gt;/*throwOnError*/&lt;/span&gt;);
  var registrar = Activator.CreateInstance(type) &lt;span class="kwrd"&gt;as&lt;/span&gt; IRouteRegistrar;
  registrar.RegisterRoutes(RouteTable.Routes);
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p class="clear"&gt;So instead of the method I wrote in my previous post, I call this method. The nice thing here is that this method doesn’t have to worry about attaching a &lt;code&gt;FileSystemWatcher&lt;/code&gt; or handling events and reloading routes.&lt;/p&gt;

&lt;p&gt;Any time the &lt;em&gt;Routes.cs file&lt;/em&gt; is changed, the entire App Domain is restarted and &lt;code&gt;Application_Start&lt;/code&gt; is called again.&lt;/p&gt;

&lt;p&gt;I want to also point out that a long while ago, I showed a &lt;a title="Defining ASP.NET MVC Routes and Views in IronRuby" href="http://haacked.com/archive/2008/04/22/defining-asp.net-mvc-routes-and-views-in-ironruby.aspx"&gt;different approach for editable routes using IronRuby&lt;/a&gt; that you might be interested in.&lt;/p&gt;

&lt;p&gt;You can &lt;strong&gt;&lt;a title="Editable (Medium Trust) Routes Sample" href="http://code.haacked.com/mvc-2/EditableRoutesDemo-MediumTrust.zip"&gt;download the sample project here&lt;/a&gt;&lt;/strong&gt; which includes both methods for doing editable routes. &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0cd8e956-8840-499d-a9c4-1b9c7d7da61d" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/aspnetmvc" rel="tag"&gt;aspnetmvc&lt;/a&gt;,&lt;a href="http://technorati.com/tags/routes" rel="tag"&gt;routes&lt;/a&gt;,&lt;a href="http://technorati.com/tags/app_code" rel="tag"&gt;app_code&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18680.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=SQsW-7ekIT8:i1y2ja-vZAc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=SQsW-7ekIT8:i1y2ja-vZAc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=SQsW-7ekIT8:i1y2ja-vZAc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=SQsW-7ekIT8:i1y2ja-vZAc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=SQsW-7ekIT8:i1y2ja-vZAc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/01/18/editable-routes-in-medium-trust.aspx</guid>
            <pubDate>Mon, 18 Jan 2010 19:17:01 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/01/18/editable-routes-in-medium-trust.aspx#feedback</comments>
            <slash:comments>15</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18680.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Editable Routes</title>
            <category>ASP.NET MVC</category>
            <category>ASP.NET</category>
            <category>Software Development</category>
            <link>http://haacked.com/archive/2010/01/17/editable-routes.aspx</link>
            <description>&lt;p class="update"&gt;UPDATE: I’ve updated this to work in Medium Trust without having to restart the entire App Domain using a technique proposed by my co-worker &lt;a title="Angle Bracket Percent" href="http://blogs.msdn.com/davidebb/" rel="friend met co-worker"&gt;David Ebbo&lt;/a&gt;. I am no longer using the &lt;code&gt;FileSystemWatcher&lt;/code&gt; which had problems in Medium Trust&lt;/p&gt;  &lt;p&gt;In general, once you deploy your ASP.NET MVC application, you can’t change the routes for your application without recompiling the application and redeploying the assembly where your routes are defined.&lt;/p&gt;  &lt;p&gt;&lt;a title="Vias 2 by L Avi at sxc.hu" href="http://www.sxc.hu/photo/732646"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="routes" border="0" alt="routes" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/EditableRoutes_12F42/routes_3.jpg" width="524" height="394" /&gt;&lt;/a&gt;This is partly by design as routes are generally considered application &lt;em&gt;code&lt;/em&gt;, and should have associated unit tests to verify that the routes are correct. A misconfigured route could seriously tank your application.&lt;/p&gt;  &lt;p&gt;Having said that, there are many situations in which the ability to change an application’s routes without having to recompile the application comes in very handy. This is the situation I find myself in as I build a &lt;a title="Subtext Project Website" href="http://subtextproject.com/"&gt;blog engine&lt;/a&gt; where the folks who will install may want to tweak the routes without having to recompile the blog’s source code.&lt;/p&gt;  &lt;p&gt;In this post, I’ll demonstrate an approach that’ll allow you to define your routes in a content file &lt;em&gt;as code &lt;/em&gt;(no XML here!) which you deploy with your application as in the screenshot.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Routes File In Soultion" border="0" alt="Routes File In Soultion" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/EditableRoutes_12F42/solution-explorer_3.png" width="289" height="330" /&gt; &lt;/p&gt;  &lt;p&gt;In my implementation, you need to place the routes in a &lt;em&gt;Config&lt;/em&gt; folder in your web root. Note that I used Visual Studio’s Properties dialog to mark the file’s &lt;em&gt;Build Action&lt;/em&gt; as “Content” so that it’s not compiled into my application.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Properties" border="0" alt="Properties" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/EditableRoutes_9EFD/Properties_3.png" width="373" height="359" /&gt; &lt;/p&gt;  &lt;p&gt;What this means is that the code in the &lt;em&gt;Routes.cs&lt;/em&gt; file is &lt;em&gt;not&lt;/em&gt; compiled with the application. Instead, we will dynamically compile it. First, let’s look at the contents of that file. It shouldn’t be too surprising.&lt;/p&gt;  &lt;div class="dropshadow code"&gt;   &lt;div class="innerbox"&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Mvc;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Routing;
&lt;span class="kwrd"&gt;using&lt;/span&gt; EditableRoutesWeb;

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Routes : IRouteRegistrar
{
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterRoutes(RouteCollection routes)
  {
    routes.IgnoreRoute(&lt;span class="str"&gt;"{resource}.axd/{*pathInfo}"&lt;/span&gt;);

    routes.MapRoute(
      &lt;span class="str"&gt;"Default"&lt;/span&gt;,
      &lt;span class="str"&gt;"{controller}/{action}/{id}"&lt;/span&gt;,
      &lt;span class="kwrd"&gt;new&lt;/span&gt; { controller = &lt;span class="str"&gt;"Home"&lt;/span&gt;, action = &lt;span class="str"&gt;"Index"&lt;/span&gt;, id = &lt;span class="str"&gt;""&lt;/span&gt; }
    );
  }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p class="clear"&gt;One thing you’ll notice is that this class implements an interface named &lt;code&gt;IRouteRegistrar&lt;/code&gt;. This is an interface I created and added to my web application (though it could be defined in another assembly).&lt;/p&gt;

&lt;p&gt;The code in &lt;em&gt;Global.asax.cs&lt;/em&gt; for this application simply calls an extension method I wrote.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Application_Start()
{
  AreaRegistration.RegisterAllAreas();
  RouteTable.Routes.RegisterRoutes(&lt;span class="str"&gt;"~/Config/Routes.cs"&lt;/span&gt;);
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It’s the code in this extension method where the real magic happens.&lt;/p&gt;

&lt;p&gt;Before I show the code, there are two concepts at work here that make this work. The first is using the &lt;code&gt;BuildManager&lt;/code&gt; to dynamically create an assembly from the &lt;em&gt;Routes.cs&lt;/em&gt; file. From that assembly, we can create an instance of the type &lt;code&gt;Routes&lt;/code&gt; and cast it to &lt;code&gt;IRouteHandler&lt;/code&gt;.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;var assembly = BuildManager.GetCompiledAssembly(&lt;span class="str"&gt;"~/Config/Routes.cs"&lt;/span&gt;);
var registrar = assembly.CreateInstance(&lt;span class="str"&gt;"Routes"&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; IRouteRegistrar;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p class="clear"&gt;Once we have an instance of a route registrar, we can call &lt;code&gt;RegisterRoutes&lt;/code&gt; on that instance.&lt;/p&gt;

&lt;p&gt;The second concept is being able to get notification when the &lt;em&gt;Routes.cs&lt;/em&gt; file changes. The clever trick that David told me about is using the ASP.NET Cache object to do that. When you add an item to the cache, you can give it a cache dependency pointing to a file &lt;em&gt;and&lt;/em&gt; a method to call when the cache is invalidated.&lt;/p&gt;

&lt;p&gt;With those two pieces, we can add a cache dependency pointing to &lt;em&gt;Routes.cs&lt;/em&gt; and a callback method which will reload the routes when &lt;em&gt;Routes.cs&lt;/em&gt; is changed.&lt;/p&gt;

&lt;p&gt;Here’s the full listing for &lt;code&gt;RouteRegistrationExtensions&lt;/code&gt;.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; RouteRegistrationExtensions
{
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterRoutes(&lt;span class="kwrd"&gt;this&lt;/span&gt; RouteCollection routes, 
      &lt;span class="kwrd"&gt;string&lt;/span&gt; virtualPath)
  {
    ConfigFileChangeNotifier.Listen(virtualPath, 
      vp =&amp;gt; routes.ReloadRoutes(vp));
  }

  &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ReloadRoutes(&lt;span class="kwrd"&gt;this&lt;/span&gt; RouteCollection routes, &lt;span class="kwrd"&gt;string&lt;/span&gt; virtualPath)
  {
    var assembly = BuildManager.GetCompiledAssembly(virtualPath);
    var registrar = assembly.CreateInstance(&lt;span class="str"&gt;"Routes"&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; IRouteRegistrar;
    &lt;span class="kwrd"&gt;using&lt;/span&gt;(routes.GetWriteLock())
    {
      routes.Clear();
      registrar.RegisterRoutes(routes);
    }
  }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p class="clear"&gt;This uses a class called &lt;code&gt;ConfigFileChangeNotifier&lt;/code&gt; which is based on some code David wrote for Dynamic Data.&lt;/p&gt;

&lt;div class="dropshadow code"&gt;
  &lt;div class="innerbox"&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ConfigFileChangeNotifier
{
  &lt;span class="kwrd"&gt;private&lt;/span&gt; ConfigFileChangeNotifier(Action&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; changeCallback)
    : &lt;span class="kwrd"&gt;this&lt;/span&gt;(HostingEnvironment.VirtualPathProvider, changeCallback)
  { 
  }

  &lt;span class="kwrd"&gt;private&lt;/span&gt; ConfigFileChangeNotifier(VirtualPathProvider vpp, 
      Action&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; changeCallback) {
    _vpp = vpp;
    _changeCallback = changeCallback;
  }

  VirtualPathProvider _vpp;
  Action&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; _changeCallback;

  &lt;span class="rem"&gt;// When the file at the given path changes, &lt;/span&gt;
  &lt;span class="rem"&gt;// we'll call the supplied action.&lt;/span&gt;
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Listen(&lt;span class="kwrd"&gt;string&lt;/span&gt; virtualPath, Action&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; action) {
    var notifier = &lt;span class="kwrd"&gt;new&lt;/span&gt; ConfigFileChangeNotifier(action);
    notifier.ListenForChanges(virtualPath);
  }

  &lt;span class="kwrd"&gt;void&lt;/span&gt; ListenForChanges(&lt;span class="kwrd"&gt;string&lt;/span&gt; virtualPath) {
    &lt;span class="rem"&gt;// Get a CacheDependency from the BuildProvider, &lt;/span&gt;
    &lt;span class="rem"&gt;// so that we know anytime something changes&lt;/span&gt;
    var virtualPathDependencies = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
    virtualPathDependencies.Add(virtualPath);
    CacheDependency cacheDependency = _vpp.GetCacheDependency(
      virtualPath, virtualPathDependencies, DateTime.UtcNow);
      HttpRuntime.Cache.Insert(virtualPath &lt;span class="rem"&gt;/*key*/&lt;/span&gt;,
        virtualPath &lt;span class="rem"&gt;/*value*/&lt;/span&gt;,
        cacheDependency,
        Cache.NoAbsoluteExpiration,
        Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable,
        &lt;span class="kwrd"&gt;new&lt;/span&gt; CacheItemRemovedCallback(OnConfigFileChanged));
  }

  &lt;span class="kwrd"&gt;void&lt;/span&gt; OnConfigFileChanged(&lt;span class="kwrd"&gt;string&lt;/span&gt; key, &lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, 
    CacheItemRemovedReason reason) {
    &lt;span class="rem"&gt;// We only care about dependency changes&lt;/span&gt;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (reason != CacheItemRemovedReason.DependencyChanged)
      &lt;span class="kwrd"&gt;return&lt;/span&gt;;

    _changeCallback(key);

    &lt;span class="rem"&gt;// Need to listen for the next change&lt;/span&gt;
    ListenForChanges(key);
  }
}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p class="clear"&gt;With this in place, you can now change routes within the &lt;em&gt;Routes.cs&lt;/em&gt; file in the &lt;em&gt;Config&lt;/em&gt; directory after you’ve deployed the application. Note that technically, a recompilation is happening, but it’s happening dynamically at runtime when the file changes and there’s no need to restart your entire App Domain, which is one benefit of this approach over using the code in &lt;em&gt;App_Code&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you want to try this code out, you can &lt;strong&gt;&lt;a title="Editable Routes Demo" href="http://code.haacked.com/mvc-2/EditableRoutesDemo.zip"&gt;download a sample project here&lt;/a&gt;&lt;/strong&gt;. The sample app is compiled against ASP.NET MVC 2 RC, but the same principles and code can be used with an ASP.NET MVC 1.0 application. In fact, it can also be used in an ASP.NET 4 Web Forms application since we now support page routing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note, if you want to see the old version of this code, &lt;a title="Old FileSystemWatcher version of this code" href="http://code.haacked.com/mvc-2/EditableRoutesDemo-FileSystemWatcher.zip"&gt;I’ve archived it here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a1b3e75b-6299-4661-8288-7c03be4facd7" class="wlWriterSmartContent"&gt;Tags: &lt;a href="http://haacked.com/tags/aspnetmvc/default.aspx" rel="tag"&gt;aspnetmvc&lt;/a&gt;, &lt;a href="http://haacked.com/tags/routes/default.aspx" rel="tag"&gt;routes&lt;/a&gt;, &lt;a href="http://haacked.com/tags/buildmanager/default.aspx" rel="tag"&gt;buildmanager&lt;/a&gt;, &lt;a href="http://haacked.com/tags/assembly/default.aspx" rel="tag"&gt;assembly&lt;/a&gt;, &lt;a href="http://haacked.com/tags/filesystemwatcher/default.aspx" rel="tag"&gt;filesystemwatcher&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18679.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=VVL4tyh5QkM:xsRq_2mivio:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=VVL4tyh5QkM:xsRq_2mivio:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=VVL4tyh5QkM:xsRq_2mivio:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=VVL4tyh5QkM:xsRq_2mivio:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=VVL4tyh5QkM:xsRq_2mivio:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/01/17/editable-routes.aspx</guid>
            <pubDate>Mon, 18 Jan 2010 06:24:21 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/01/17/editable-routes.aspx#feedback</comments>
            <slash:comments>24</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18679.aspx</wfw:commentRss>
        </item>
        <item>
            <title>If You&amp;rsquo;re Graduating Soon, Consider Working For The ASP.NET Team</title>
            <category>ASP.NET</category>
            <link>http://haacked.com/archive/2010/01/13/hiring-college-grads-in-2010.aspx</link>
            <description>&lt;p&gt;This is the second job posting in two days for positions on the ASP.NET team, how exciting! This one is a developer position for upcoming graduates.&lt;/p&gt;  &lt;p&gt;Before I continue, I need to fulfill a promise to a co-worker to include a barely relevant stock photograph in this blog post.&lt;/p&gt;  &lt;p&gt;&lt;a title="Cap &amp;amp; Diploma at sxc.hu by marygrober" href="http://www.sxc.hu/photo/533027"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" border="0" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/IfYoureGraduatingSoonConsiderWor.NETTeam_1248E/cap-gown_3.jpg" width="550" height="360" /&gt;&lt;/a&gt; Good, with that out of the way, allow me to continue.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you are in college or grad school, graduating in 2010, and are looking for a great job writing code for ASP.NET, we have a position available!&lt;/strong&gt;  Send me your resume and I’ll forward it along to the proper people.&lt;/p&gt;  &lt;p&gt;My email address is philha at (my company).com where (my company) is Microsoft. If you can’t figure out based on that where to email your resume, you probably shouldn’t bother applying ;)&lt;/p&gt;  &lt;p&gt;Once again, this is for college or graduate school students graduating in 2010. If you’re not an upcoming graduate, consider we also have &lt;a title="QA Position" href="http://haacked.com/archive/2010/01/13/aspnet-team-is-hiring-qa.aspx"&gt;a QA position available&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I look forward to seeing you roam the halls of building 42.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6482c566-1958-440f-842e-68665575179f" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/aspnet" rel="tag"&gt;aspnet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/jobs" rel="tag"&gt;jobs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/careers" rel="tag"&gt;careers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hiring" rel="tag"&gt;hiring&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18678.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=QGASO85MzUA:hBPx7meHPRc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=QGASO85MzUA:hBPx7meHPRc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=QGASO85MzUA:hBPx7meHPRc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=QGASO85MzUA:hBPx7meHPRc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=QGASO85MzUA:hBPx7meHPRc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/01/13/hiring-college-grads-in-2010.aspx</guid>
            <pubDate>Thu, 14 Jan 2010 04:51:18 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/01/13/hiring-college-grads-in-2010.aspx#feedback</comments>
            <slash:comments>24</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18678.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Join My Team And Help Us Produce Higher Quality Products</title>
            <category>ASP.NET</category>
            <link>http://haacked.com/archive/2010/01/13/aspnet-team-is-hiring-qa.aspx</link>
            <description>&lt;p&gt;The ASP.NET Team is still looking for that QA person out there who shares our passion for technology and improving the means by which software is made. &lt;/p&gt;  &lt;p&gt;Keep in mind that the QA position on our team is not someone who mindlessly follows a script hoping by sheer random luck to find bugs. Oh no no no my friends.&lt;/p&gt;  &lt;p&gt;This is considered a software development position in which you will be responsible for improving the processes and tools we have in place for ensuring quality software. You’d be involved in improving the quality of &lt;em&gt;all phases&lt;/em&gt; of product development as a valued member of a feature crew. Think broadly about the idea of software quality. Your role is to question whether we’re building the &lt;em&gt;right&lt;/em&gt; product as much as it is to test the product once it is built.&lt;/p&gt;  &lt;p&gt;&lt;a title="Matt Osborn" href="http://blog.osbornm.com/" rel="friend met co-worker"&gt;Matt Osborn&lt;/a&gt;, a member of the ASP.NET MVC feature crew &lt;a title="We want you (again) if you're a test ninja" href="http://blog.osbornm.com/archive/2009/12/01/we-want-you-again-if-yoursquore-a-test-ninja.aspx"&gt;has a description of the position&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;That’s right you read the title right the ASP.NET QA team is once again hosting ninja try outs. We are looking for someone who is able to help evolve the team processes, improve our tooling, and join us in the trenches as we test one of the best technologies out there. Overall the team is responsible for ASP.NET WebForms, ASP.NET MVC, Microsoft AJAX, and a whole slew of &lt;a href="http://www.codeplex.com/aspnet"&gt;other technologies&lt;/a&gt;. Our technologies can be found in numerous large scale web sites such as &lt;a href="http://www.myspace.com"&gt;MySpace.com&lt;/a&gt;, &lt;a href="http://www.dell.com"&gt;Dell.com&lt;/a&gt; and&lt;a href="http://deals.woot.com/"&gt;Deals.Woot.com&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Once again we would like to find someone that shares our passion for our technology and our trade and someone that has spent sometime in the trenches. So if this sounds like something you’re interested in polish your nun chucks, practice your disappearing skills, and slice your way through our &lt;a href="https://careers.microsoft.com/JobDetails.aspx?ss=&amp;amp;pg=0&amp;amp;so=&amp;amp;rw=1&amp;amp;jid=9679&amp;amp;jlang=EN"&gt;job posting&lt;/a&gt;. In the meantime while your sword is out for sharpening send Mark Berryman (one of our managers) an &lt;a href="mailto:markberr@microsoft.com?subject=SDET Position"&gt;email&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;PS: If you listen to the &lt;a href="http://www.codingqa.com/"&gt;Coding QA&lt;/a&gt; podcast you can get a good feel for what it is like being the frontline testing ninjas for ASP.NET. We had a great turn out last time and please feel free submit your resume again it can’t hurt.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Keep in mind we’re not looking for “test” ninjas as in “sample” ninjas. We’re looking for the &lt;em&gt;real deal&lt;/em&gt;, brimming with throwing stars of bug finding. Ok, the analogy breaks down a bit there. But you get the picture.&lt;/p&gt;  &lt;p&gt;And before I forget, here’s the &lt;a title="Job Description on MS Careers" href="https://careers.microsoft.com/JobDetails.aspx?ss=&amp;amp;pg=0&amp;amp;so=&amp;amp;rw=1&amp;amp;jid=9679&amp;amp;jlang=EN"&gt;&lt;strong&gt;direct link to the job description&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;on the Microsoft careers site.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:caf3e141-7035-44b2-8490-9c1cda520858" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://haacked.com/tags/aspnet/default.aspx" rel="tag"&gt;aspnet&lt;/a&gt;, &lt;a href="http://haacked.com/tags/qa/default.aspx" rel="tag"&gt;qa&lt;/a&gt;, &lt;a href="http://haacked.com/tags/jobs/default.aspx" rel="tag"&gt;jobs&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18677.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=vTqVyLPBpqM:Rhq0tbjyufA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=vTqVyLPBpqM:Rhq0tbjyufA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=vTqVyLPBpqM:Rhq0tbjyufA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=vTqVyLPBpqM:Rhq0tbjyufA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=vTqVyLPBpqM:Rhq0tbjyufA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/01/13/aspnet-team-is-hiring-qa.aspx</guid>
            <pubDate>Wed, 13 Jan 2010 08:59:47 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/01/13/aspnet-team-is-hiring-qa.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18677.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Do Not Adjust Your Browser</title>
            <category>Subtext</category>
            <category>Software Development</category>
            <link>http://haacked.com/archive/2010/01/12/do-not-adjust-your-browser.aspx</link>
            <description>&lt;p&gt;This blog is experiencing technical difficulties. Do not adjust your browser.&lt;/p&gt;  &lt;p&gt;Hi there. If you’ve tried to visit this blog recently you might have noticed it’s been down a lot in the last two days. My apologies for that, but hopefully you found what you needed via various online web caches.&lt;/p&gt;  &lt;p&gt;I’ve been dogfooding the latest version of Subtext and as CodingHorror points out, &lt;a title="The Difficulty of Dogfooding" href="http://www.codinghorror.com/blog/archives/000287.html"&gt;dogfood tastes bad&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’ve done a lot of testing on my local box, but there are a class of bugs that I’m only going to find on a high traffic real site, and boy have I found them!&lt;/p&gt;  &lt;p&gt;Some of them might be peculiar to my specific data or environment, but others were due to assumptions I made that were wrong. For example, if you use &lt;code&gt;ThreadPool.QueueUserWorkItem&lt;/code&gt; to launch a task, and that task throws an unhandled exception, that can bring your entire App Domain down. Keep that in mind if you think to use that method for a fire-and-forget style task.&lt;/p&gt;  &lt;p&gt;In any case, the point of this post is to say that we’re not going to release the next version of Subtext until it’s rock solid. My blog going down occasionally is the cost I’m incurring in order to make sure the next version of Subtext is a beast that won’t quit.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:801db587-b165-4209-9450-3fe22c675afe" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Subtext" rel="tag"&gt;Subtext&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Dogfooding" rel="tag"&gt;Dogfooding&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18676.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=jjkysgIblps:MHZEoz3rvVQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=jjkysgIblps:MHZEoz3rvVQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=jjkysgIblps:MHZEoz3rvVQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=jjkysgIblps:MHZEoz3rvVQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=jjkysgIblps:MHZEoz3rvVQ:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/01/12/do-not-adjust-your-browser.aspx</guid>
            <pubDate>Tue, 12 Jan 2010 18:17:06 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/01/12/do-not-adjust-your-browser.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18676.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Ambiguous Controller Names With Areas</title>
            <category>ASP.NET</category>
            <category>ASP.NET MVC</category>
            <link>http://haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx</link>
            <description>&lt;p class="notice"&gt;&lt;em&gt;Note: This describes the behavior of ASP.NET MVC 2 as of the release candidate. It’s possible things might change for the RTM.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When using areas in ASP.NET MVC 2, a common problem you might encounter is this exception message.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The controller name 'Home' is ambiguous between the following types: &lt;br /&gt;
AreasDemoWeb.Controllers.HomeController &lt;br /&gt;
AreasDemoWeb.Areas.Blogs.Controllers.HomeController &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This message is telling you that the controller factory found two types that match the route data for the current request. Typically this happens when you have a controller of the same name in an area and in the main project. &lt;/p&gt;
&lt;p&gt;For example, in the screenshot below, notice that we have a &lt;code&gt;HomeController&lt;/code&gt; in the main &lt;em&gt;Controllers&lt;/em&gt; folder as well as in the &lt;em&gt;Blogs&lt;/em&gt; area.&lt;/p&gt;
&lt;p&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="area-with-ambiguous-controller" border="0" alt="area-with-ambiguous-controller" width="295" height="535" src="http://haacked.com/images/haacked_com/WindowsLiveWriter/AmbiguousControllerNames_8573/area-with-ambiguous-controller_3.png" /&gt;&lt;/p&gt;
&lt;p&gt;If you make a request for the area such as &lt;em&gt;/Blogs/Home&lt;/em&gt;, you’ll find that everything works &lt;a title="Definition of 'hunky-dory' from Merriam-Webster" href="http://www.merriam-webster.com/dictionary/hunky-dory"&gt;hunky-dory&lt;/a&gt;. However, if you make a request for the root HomeController, such as &lt;em&gt;/Home&lt;/em&gt;, you’ll get the ambiguous controller exception.&lt;/p&gt;
&lt;h3&gt;Why is that?&lt;/h3&gt;
&lt;p&gt;When you register routes for an area, they get a namespace associated with each route. That ensures that only controllers within the namespace associated with that area can fulfill the request. Thus the request that matches an area will have that namespace and the namespace is used to disambiguate controllers.&lt;/p&gt;
&lt;p&gt;But by default, the routes in the main application don’t have a namespace associated with them. That means the controller factory will scan all types looking for a match, and in this case finding two types which match the controller name “Home”.&lt;/p&gt;
&lt;h3&gt;The Fix&lt;/h3&gt;
&lt;p&gt;There are two very simple workarounds. The simplest falls in the “If it hurts, stop doing that” camp which is to simply avoid naming two controllers the same name.&lt;/p&gt;
&lt;p&gt;For many situations, this is not a satisfactory answer. The other workaround, as you might guess from my explanation of why this happens, is to give the route in the main application a specific namespace. Here’s an example of the default route in &lt;em&gt;Global.asax.cs&lt;/em&gt; which has the fix.&lt;/p&gt;
&lt;div class="dropshadow code"&gt;
&lt;div class="innerbox"&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute(&lt;span class="str"&gt;"{resource}.axd/{*pathInfo}"&lt;/span&gt;);

  routes.MapRoute(
    &lt;span class="str"&gt;"Default"&lt;/span&gt;,                                              &lt;span class="rem"&gt;// Route name&lt;/span&gt;
    &lt;span class="str"&gt;"{controller}/{action}/{id}"&lt;/span&gt;,                           &lt;span class="rem"&gt;// URL&lt;/span&gt;
    &lt;span class="kwrd"&gt;new&lt;/span&gt; { controller = &lt;span class="str"&gt;"Home"&lt;/span&gt;, action = &lt;span class="str"&gt;"Index"&lt;/span&gt;, id = &lt;span class="str"&gt;""&lt;/span&gt; }, &lt;span class="rem"&gt;// Defaults&lt;/span&gt;
    &lt;strong&gt;&lt;span class="kwrd"&gt;new&lt;/span&gt;[]{&lt;span class="str"&gt;"AreasDemoWeb.Controllers"&lt;/span&gt;}                       &lt;span class="rem"&gt;// Namespaces&lt;/span&gt;
&lt;/strong&gt;  );
}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="clear"&gt;In the code above, I added a fourth parameter which is an array of namespaces. The controllers for my project live in a namespace called &lt;code&gt;AreasDemoWeb.Controllers&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Follow Up&lt;/h3&gt;
&lt;p&gt;In a follow-up post, I’ll walk through more details about areas and how namespaces play into routing and controller lookup. For now, I hope this gets you unstuck if you’ve run into this problem before.&lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d013d772-e2e6-4542-89ff-0b8fa495ee6c" class="wlWriterEditableSmartContent"&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/routing"&gt;routing&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/areas"&gt;areas&lt;/a&gt;&lt;/div&gt;&lt;img src="http://haacked.com/aggbug/18675.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.haacked.com/~ff/haacked?a=U35fXBqPdkk:uStVSG06wBE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=U35fXBqPdkk:uStVSG06wBE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=U35fXBqPdkk:uStVSG06wBE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?i=U35fXBqPdkk:uStVSG06wBE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.haacked.com/~ff/haacked?a=U35fXBqPdkk:uStVSG06wBE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/haacked?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
            <dc:creator>Haacked</dc:creator>
            <guid isPermaLink="false">http://haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx</guid>
            <pubDate>Tue, 12 Jan 2010 17:52:07 GMT</pubDate>
            <comments>http://haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://haacked.com/comments/commentRss/18675.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
