﻿<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>AspNetResources.com articles, news and updates</title><description>Stay tuned for AspNetResources.com updates</description><link>http://aspnetresources.com</link><item><title>Being the People's Voice in Usability Debates</title><link>http://aspnetresources.com/blog/being_peoples_voice_in_usability_debates.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/being_peoples_voice_in_usability_debates.aspx</guid><pubDate>Sun, 20 Jul 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;What happens when you get a bunch of people to discuss construction of User Interface (UI) is best depicted by Steve Krug in Don&amp;#8217;t Make Me Think:&lt;/p&gt;

&lt;p&gt;&lt;img alt="Usability religious debates" class="framed"
src="http://aspnetresources.com/images/religious-debates-small.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;This phenomenon is called &amp;#8220;Religious Debates.&amp;#8221; Someone will inevitably assume the role of The People&amp;#8217;s Commissar and affirm that &amp;#8220;the people like / don&amp;#8217;t like [blah]&amp;#8221;. Often times, he is a person the most removed from UI design: biz, marketing, sales, etc. He is usually a person with the most endowed power. (I&amp;#8217;m going to refer to the unidentified speaker as &amp;#8220;he.&amp;#8221; Please address protests to William Safire.)&lt;/p&gt;

&lt;p&gt;Someone asked me at a recent geek meet-up whether I thought the new ribbon bar in Office 2007 was a failure because I couldn&amp;#8217;t find the right button. That&amp;#8217;s an interesting question because there are two of me: a &lt;strong&gt;developer&lt;/strong&gt; and an &lt;strong&gt;end-user&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The UI fails me, an &lt;strong&gt;end-user&lt;/strong&gt;, if I can&amp;#8217;t figure it out and get it to do
what I want.&lt;/p&gt;

&lt;p&gt;Business books are full of stories about production disasters. Even after gazillions of dollars of market research, some products still fail miserably (think &lt;a href="http://en.wikipedia.org/wiki/Edsel"&gt;Ford Edsel&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;This is similar to UI design. What &lt;strong&gt;&lt;em&gt;I&lt;/em&gt;&lt;/strong&gt; think may very well turn out to be wrong once the UI is beat up by real people in the wild. The best I can do is &lt;em&gt;take an educated guess&lt;/em&gt; based on my experience. The better the tools you have under your belt, e.g. &lt;a href="http://blog.eyetools.net/eyetools_research/"&gt;eye tracking research&lt;/a&gt;, the more educated the guess. The only way to know if
you&amp;#8217;re on target is to put the UI in front of real users, see how they drive it, go back and fix it, then repeat the cycle.&lt;/p&gt;

&lt;p&gt;Feel free to anonymously email this post to the Big Cheese who sabotages your UI design meetings. ;)&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/being_peoples_voice_in_usability_debates.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?586</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/586.aspx</trackback:ping><slash:comments>1</slash:comments></item><item><title>The Book Is Here!</title><link>http://aspnetresources.com/blog/the_book_is_here.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/the_book_is_here.aspx</guid><pubDate>Sun, 06 Jul 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;The book I&amp;#8217;m referring to is &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0321514440/aspnetresourc-20"&gt;Advanced ASP.NET AJAX Server Controls For .NET Framework 3.5&lt;/a&gt; (I know, long title) by Adam Calderon and Joel Rumerman. No, I&amp;#8217;m not crazy enough to write a book. I was a technical reviewer on this project with Addison-Wesley. Doing a thorough technical review takes &lt;strong&gt;a lot of time&lt;/strong&gt; (part of the reason I&amp;#8217;ve been so quiet lately). Writing a programming book takes an &lt;strong&gt;insane amount of time&lt;/strong&gt; and brings no money.&lt;/p&gt;

&lt;p&gt;The book focuses on:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;behaviors and script controls&lt;/li&gt;
  &lt;li&gt;the client-side &amp;#8220;page&amp;#8221; life cycle&lt;/li&gt;
  &lt;li&gt;developing controls in a postback environment (hardly ever discussed elsewhere!)&lt;/li&gt;
  &lt;li&gt;writing controls on top of the &lt;a href="http://www.asp.net/ajax/ajaxcontroltoolkit/"&gt;ASP.NET AJAX Toolkit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;calling WCF web services via JavaScript proxies (my favorite
  subject)&lt;/li&gt;
  &lt;li&gt;and, of course, lots more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img alt="Advanced ASP.NET AJAX Server Controls for .NET 3.5"
class="framed rai" src="http://aspnetresources.com/images/books/0321514440.png" /&gt;When I went through the first couple of chapters of the yet-raw manuscript, I didn&amp;#8217;t believe the book would amount to much. As work progressed, I became a believer. I do think the book turned out really well! My only regret is that AW failed to give proper recognition to all four reviewers contrary to what was promised.&lt;/p&gt;

&lt;p&gt;AW sent me a couple of copies which I intend to give out at my
presentations at Code Camps and user groups (hint: please attend).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d love to hear what you think about the book.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/the_book_is_here.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?585</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/585.aspx</trackback:ping><slash:comments>0</slash:comments></item><item><title>Live.com: Where Is Alignment?</title><link>http://aspnetresources.com/blog/live_com_where_is_alignment.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/live_com_where_is_alignment.aspx</guid><pubDate>Sun, 29 Jun 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Since the last redesign of &lt;a href="http://live.com"&gt;Live.com&lt;/a&gt;, I kept waiting for them to do something about the apparent lack of alignment. &lt;strong&gt;Alignment&lt;/strong&gt; is one of the very basic principles of UI design. I discussed it back when I &lt;a href="http://www.aspnetresources.com/blog/how_to_fix_microsoft_home_page.aspx"&gt;had fun&lt;/a&gt; with the latest rendering of Microsoft.com.&lt;/p&gt;

&lt;p&gt;&lt;img class="framed" alt="Live.com home page: broken alignment" src="http://aspnetresources.com/images/live_search_home.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;The search box, with all its accompanying adornment, is just hanging nowhere, without visual connection to anything. As much as I appreciate good examples of proverbial &amp;#8220;out of the box thinking,&amp;#8221; this isn&amp;#8217;t it. This is sloppiness.&lt;/p&gt;

&lt;p&gt;I would be remiss to not make an obvious comparison with Google.com:&lt;/p&gt;

&lt;p&gt;&lt;img class="framed" alt="Google home page: proper alignment"
src="http://aspnetresources.com/images/google_home.png" /&gt;&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/live_com_where_is_alignment.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?584</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/584.aspx</trackback:ping><slash:comments>2</slash:comments></item><item><title>Is This An Error?</title><link>http://aspnetresources.com/blog/is_this_an_error.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/is_this_an_error.aspx</guid><pubDate>Sun, 29 Jun 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Here&amp;#8217;s a dialog box from Visual Studio 2008 Team System:&lt;/p&gt;

&lt;p&gt;&lt;img class="framed" alt="No checkins: is this an error?"
src="http://aspnetresources.com/images/no_checkins.png" /&gt;&lt;/p&gt;

&lt;p&gt;This begs the question: is this an error? No, it isn&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;The last time I was giving my &lt;a href="http://www.aspnetresources.com/blog/usability_presentation_slides.aspx"&gt;usability
presentation&lt;/a&gt; at the Philly Code Camp, a gentlemen in the audience pointed out that messages displayed in red, the word &amp;#8220;error&amp;#8221; and aggressive visual cues tend to cause psychological distress to users, e.g. increase their heart rate. This is very true. &lt;/p&gt;

&lt;p&gt;Something to keep in mind when designing UIs.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/is_this_an_error.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?583</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/583.aspx</trackback:ping><slash:comments>3</slash:comments></item><item><title>MVC + Traditional ASP.NET = Deadly Combination</title><link>http://aspnetresources.com/blog/traditional_aspnet_with_mvc.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/traditional_aspnet_with_mvc.aspx</guid><pubDate>Fri, 20 Jun 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;A couple of years ago Billy McCafferty &lt;a href="http://www.codeproject.com/KB/architecture/ModelViewPresenter.aspx"&gt;wrote about an approach&lt;/a&gt; to bring the Model-View-Presenter pattern (MVP) to the ASP.NET. Since then I&amp;#8217;ve seen a couple of permutations of the technique, and numerous attempts to actually make it work.&lt;/p&gt;

&lt;p&gt;Having gotten frustrated with the &lt;a href="http://msdn.microsoft.com/en-us/library/ms998548.aspx"&gt;Page Controller
&amp;#8220;pattern&amp;#8221;&lt;/a&gt; of ASP.NET, I dabbled with Billy&amp;#8217;s approach too. It worked pretty good with simple pages, but would get complicated really fast with anything beyond a trivial page.&lt;/p&gt;

&lt;p&gt;As of late, I&amp;#8217;ve been working quite a lot with REST support in WCF 3.5, when it finally dawned on me:&lt;/p&gt;

&lt;p class="note"&gt;If you can&amp;#8217;t treat everything in your application as an addressable resource in the spirit of REST, MVP won&amp;#8217;t work for you.&lt;/p&gt;

&lt;p&gt;The bane of MVP/MVC are postbacks and view state. As soon as you need more or less sophisticated interaction with the user, this pattern breaks down. This kind of interaction is prevalent, which is why MVP/MVC fits only a small number of projects.&lt;/p&gt;

&lt;p&gt;I still believe that you can practice responsible separation of concerns in ASP.NET, but unit testing becomes almost impossible, among other things. Choose your weapon sensibly.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/traditional_aspnet_with_mvc.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?582</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/582.aspx</trackback:ping><slash:comments>0</slash:comments></item><item><title>Seventh Beta of The Seventh Beta</title><link>http://aspnetresources.com/blog/seventh_beta_of_the_seventh_beta.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/seventh_beta_of_the_seventh_beta.aspx</guid><pubDate>Fri, 20 Jun 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;I simply can&amp;#8217;t resist posting this graphic from &lt;a href="http://connect.microsoft.com/"&gt;Microsoft Connect&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img class="framed" alt="Add-on of release candidate of a beta"
src="http://aspnetresources.com/images/ms_beta_craziness.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;First version of an add-on, which is a forth release
&lt;strong&gt;&lt;em&gt;candidate&lt;/em&gt;&lt;/strong&gt;, which is still&amp;#8230; uumm&amp;#8230; a beta?&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/seventh_beta_of_the_seventh_beta.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?581</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/581.aspx</trackback:ping><slash:comments>0</slash:comments></item><item><title>In Search Of Best Methodology</title><link>http://aspnetresources.com/blog/in_search_of_best_methodology.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/in_search_of_best_methodology.aspx</guid><pubDate>Fri, 20 Jun 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;There was a time when Agile &lt;del&gt;nazis&lt;/del&gt; zealots used to make me feel bad. I&amp;#8217;d feel guilty about not following The Agile by the book. We did not do stickies with user stories, had no burn&amp;#8211;down chart, did not calculate velocity, etc. We had a similar, less intricate process, and it worked reasonably well for our needs.&lt;/p&gt;

&lt;p&gt;Over the past couple of years I realized this: &lt;strong&gt;it makes little sense to follow any methodology &amp;#8220;by the book.&amp;#8221;&lt;/strong&gt; Oh, there will be people instilling a sense of guilt if you don&amp;#8217;t have a love relationship with Rhino Mocks or don&amp;#8217;t write unit tests first. They would gladly bite your head off and scream that you&amp;#8217;re doing disservice to the community and should therefore apologize.&lt;/p&gt;

&lt;p&gt;Tom DeMarco (of &lt;a href="http://www.aspnetresources.com/blog/peopleware_books_review.aspx"&gt;Peopleware&lt;/a&gt; fame) has a great essay on the subject of processes and management in &lt;a 
href="http://www.amazon.com/exec/obidos/ASIN/093263334X/aspnetresourc-20"&gt;Why Does Software Cost So Much?&lt;/a&gt; (hat tip to &lt;a href="http://www.michaelnygard.com/blog/2008/06/social_factors.html"&gt;Michael Nygard&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The bread-and-butter mechanism by which an organization improves is simple enough: People identify best practices that are already working somewhere within an organization and propagate them. This involves no great breakthrough, no new theory. It is basic hygiene. Companies that can do it survive and prosper, and those that can&amp;#8217;t don&amp;#8217;t.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a
href="http://www.amazon.com/exec/obidos/ASIN/0596527357/aspnetresourc-20"&gt;Head First Software Development&lt;/a&gt; (love their books!) has a similar theme about the illusion of silver-bullet processes:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There&amp;#8217;s no single process that magically makes software development succeed. A good software process is one that lets
  &lt;strong&gt;&lt;em&gt;your&lt;/em&gt;&lt;/strong&gt; development team be successful.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In general, I&amp;#8217;m a proponent of iterative development; I don&amp;#8217;t believe in Big Up-Front Design (BFUD). However, I treat agile methodology only as a good starting point, not the be all and end all.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/in_search_of_best_methodology.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?580</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/580.aspx</trackback:ping><slash:comments>1</slash:comments></item><item><title>Error Conditions and Little Typos</title><link>http://aspnetresources.com/blog/error_conditions_and_little_typos.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/error_conditions_and_little_typos.aspx</guid><pubDate>Thu, 22 May 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;A friendly reminder from &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0596527357/aspnetresourc-20"&gt;Head First Labs&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Error conditions are usually the &lt;strong&gt;last&lt;/strong&gt; thing most
developers think about, but it&amp;#8217;s the &lt;strong&gt;first&lt;/strong&gt; thing most
customers notice.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Customers don&amp;#8217;t usually make huge mistakes&amp;#8212;they make
&lt;strong&gt;little&lt;/strong&gt; typos, and those are the things you&amp;#8217;re testing for here.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Michael Nygard echoes it in &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0978739213/aspnetresourc-20"&gt;Release It!&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;In the lab, all the tests are contrived by people who know what answer they expect to get. In the real world, the tests aren&amp;#8217;t designed to have answers. [&amp;#8230;]&lt;/p&gt;
&lt;p&gt;Enterprise software must be cynical. Cynical software expects bad things to happen and is never surprised when they do. Cynical software doesn&amp;#8217;t even trust itself.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Can I get an &amp;#8220;Amen&amp;#8221;? It&amp;#8217;s so comforting to test intended scenarios that we overlook the unintended ones.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/error_conditions_and_little_typos.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?579</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/579.aspx</trackback:ping><slash:comments>1</slash:comments></item><item><title>The Easiest Thing to Do Should Be the Right Thing to Do</title><link>http://aspnetresources.com/blog/easiest_thing_to_do_should_be_right_thing_to_do.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/easiest_thing_to_do_should_be_right_thing_to_do.aspx</guid><pubDate>Thu, 15 May 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;If you haven&amp;#8217;t read Michael Nygard&amp;#8217;s book &lt;a
href="http://www.amazon.com/exec/obidos/ASIN/0978739213/aspnetresourc-20"&gt;Release It!&lt;/a&gt;, you absolutely need to! It&amp;#8217;s heavy on the infrastructure side of things, which isn&amp;#8217;t my strength, but it&amp;#8217;s an eye-opener to a lot of real-world issues I never considered. It&amp;#8217;s also just fun to read.&lt;/p&gt;

&lt;p&gt;Michael&amp;#8217;s &lt;a href="http://www.michaelnygard.com/blog/2008/05/the_jvm_is_great_but.html"&gt;recent blog post&lt;/a&gt; caught my attention:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Normal attrition means that the largest population of developers will always be the youngest and least experienced. This is not a training problem: in the post-commoditization world, the majority of code will always be written by undertrained, least-cost coders. That means we need platforms where the easiest thing to do is also the right thing to do.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I fully agree with his statement that the easiest thing to do should be the &lt;strong&gt;right&lt;/strong&gt; thing to do. The reason I&amp;#8217;m growing so frustrated with Microsoft is that they do just the opposite. &lt;/p&gt;

&lt;p&gt;ASP.NET AJAX (read UpdatePanel) is the easy thing to do, but it&amp;#8217;s also the
wrong thing to do from the standpoint of performance and resource hogging.&lt;/p&gt;

&lt;p&gt;LINQ to SQL is the easy thing to do, but also the wrong thing to do because it&amp;#8217;s meant for the RAD crowd. I often hear the misleading assertion that what the designer surface gives you, once you drag tables on it, is your domain model (which is incorrect). At the same time, the Entity Framework project has been on the ropes for god knows how long.&lt;/p&gt;

&lt;p&gt;The Enterprise Library creates an illusion of easily applied building
blocks, but it&amp;#8217;s a horrible monstrosity I prefer not to even touch anymore. EntLib is definitely not &amp;#8220;the right thing to do.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Frameworks need to do the right thing out-of-the-box, not pander to the incompetent crowd.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/easiest_thing_to_do_should_be_right_thing_to_do.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?578</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/578.aspx</trackback:ping><slash:comments>2</slash:comments></item><item><title>New Approach to Usability: Annoy Users</title><link>http://aspnetresources.com/blog/new_approach_to_usability_annoy_users.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/new_approach_to_usability_annoy_users.aspx</guid><pubDate>Sun, 27 Apr 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;When I saw this article, &lt;a href="http://www.crn.com/software/207100934?cid=CRNFeed"&gt;Microsoft Exec: UAC Designed To &amp;#8217;Annoy Users&amp;#8217;&lt;/a&gt;, (via &lt;a href="http://blogs.sqlxml.org/bryantlikes/archive/2008/04/24/don-t-tell-me-how-to-run-my-laptop.aspx"&gt;Bryant Likes&lt;/a&gt;), I thought, &amp;#8220;Nah, one of those April Fool&amp;#8217;s jokes.&amp;#8221; Then I looked at the date&amp;#8212;April 10&amp;#8212;and realized it wasn&amp;#8217;t a joke. In fact, David Cross is quoted saying:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#8220;The reason we put UAC into the platform was to annoy users. I&amp;#8217;m serious.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was floored. First you create buggy operating systems for years and years, they expose people to all kinds of threats, and now you &amp;#8220;fix&amp;#8221; it by&amp;#8230; annoying them?&lt;/p&gt;

&lt;p&gt;Hey, Vista team, great job! I can express my annoyance with your product only in expletives.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/new_approach_to_usability_annoy_users.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?577</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/577.aspx</trackback:ping><slash:comments>11</slash:comments></item><item><title>Communal Decision Making Sucks</title><link>http://aspnetresources.com/blog/communal_decision_making_sucks.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/communal_decision_making_sucks.aspx</guid><pubDate>Thu, 24 Apr 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Here&amp;#8217;s something revolting I&amp;#8217;ve experienced dealing with recently: board of directors. What comes to mind immediately is this excerpt from &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0452286751/aspnetresourc-20"&gt;The Fountainhead&lt;/a&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Have you ever known a board to do anything? [&amp;#8230;] A board of directors is one or two ambitious men&amp;#8212;and a lot of ballast. I mean that groups of men are vacuums. Great big empty nothings. They say we can&amp;#8217;t visualize a total nothing. Hell, sit at any committee meeting. The point is only who chooses to fill that nothing.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Focus groups are that way. Committee meetings are that way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;No work is ever done collectively, by a majority decision. Every creative job is achieved under the guidance of a single individual thought.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This isn&amp;#8217;t a warrant for lack of planning or development discipline. My point is, when you rely on communal decision making, what you get is a Frankendog&amp;#8212;an ugly creature made of patches.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/communal_decision_making_sucks.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?576</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/576.aspx</trackback:ping><slash:comments>1</slash:comments></item><item><title>Bait Station Ahead</title><link>http://aspnetresources.com/blog/bait_station_ahead.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/bait_station_ahead.aspx</guid><pubDate>Sun, 13 Apr 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Rick is asking, &lt;a href="http://feeds.feedburner.com/~r/RickStrahl/~3/260658614/295840.aspx"&gt;What can you keep in your head?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This isn&amp;#8217;t going to be &amp;#8220;an open letter to Rick.&amp;#8221; I have a ton of respect for Rick. He runs an honest, helpful blog which pulled me out of a hole on many occasions. His post got me to finally distill my observations and opinions for those who feel the same way. &lt;/p&gt;

&lt;p class="note"&gt;Disclaimer: it took me a day to write this post and two weeks to &amp;#8220;sleep on it.&amp;#8221; I&amp;#8217;m not naming names, pointing fingers, or settling score with anyone. These are general observations. Take them with a grain of salt.&lt;/p&gt;

&lt;h2&gt;What are your goals?&lt;/h2&gt;

&lt;p&gt;It all depends on what you want to do and where you want to be in the long run. In the words of &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0452286751/aspnetresourc-20"&gt;The Fountainhead&lt;/a&gt; protagonist (I will quote the book liberally here),&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Most of the time will be spent working. I&amp;#8217;ve chosen the work I want to do. If I find no joy in it, then I&amp;#8217;m only condemning myself to sixty years of torture. And I can find the joy only if I do my work in the best way possible to me. But the best is a matter of standards&amp;#8212;and I set my own standards.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Time is a very limited resource. If you spend all your time chasing every technological fad, you&amp;#8217;ll end up nowhere. How do you decide what&amp;#8217;s worth pursuing? Read on.&lt;/p&gt;

&lt;h2&gt;Specialist or generalist?&lt;/h2&gt;

&lt;p&gt;It depends on your worldview. Do you want to be really good at one thing, or know a wide range of subjects in less depth? I prefer to be a generalist, although I know some things much deeper than others. However, it takes a substantial effort to be a generalist. You have to read a lot and keep your ear to the ground.&lt;/p&gt;

&lt;h2&gt;Basics don&amp;#8217;t change (that much)&lt;/h2&gt;

&lt;p&gt;The term &amp;#8220;bubble&amp;#8221; has existed in finances for at least a couple of &lt;strong&gt;centuries&lt;/strong&gt;. In the grand scheme of things, the latest dot-com bubble was nothing new. It had the same age-old mechanisms, and yet a lot of people made a trip to the loony bin.&lt;/p&gt;

&lt;p&gt;Compared to finance, the field of computing is &lt;strong&gt;very&lt;/strong&gt; young. Over the years, the same basic principles migrated from one language to another, yet they stayed mostly the same. If you read Steve McConnell&amp;#8217;s &lt;strong&gt;Code Complete&lt;/strong&gt; and look at the bibliographical references, some of them go way back. &lt;/p&gt;

&lt;p&gt;Knowing technology-agnostic principles of software construction is absolutely essential. The &lt;a href="http://www.nikhilk.net/Personas.aspx"&gt;Mort&lt;/a&gt; crowd doesn&amp;#8217;t get this. They focus on what&amp;#8217;s shiny. At the end of the day, the choice of technology
matters very little. You can do amazing things with Java, .NET, Ruby, Python, etc. Knowing the principles, you will be an outstanding developer regardless of the technological fads.&lt;/p&gt;

&lt;p&gt;A lot of people are stressed out over the torrential downpour of new technologies and tools. Do you have to know them all? No, of course not. What about all those alphas (euphemistically called &amp;#8220;CTPs&amp;#8221;) and betas? Ignore them. I see people who jump on the bandwagon early and rewrite their stuff over and over with each CTP release. If you&amp;#8217;re not yet sick of such a chaotic and unfocused life style&amp;#8212;fine. Otherwise tune out!&lt;/p&gt;

&lt;p&gt;Case in point: a good friend of mine was presenting at a Code Camp not long ago. He tried to explain the Singleton pattern and drew blank stares from the audience. Now, come. On! This is what the drag-and-drop mentality does to you: you miss the essentials.&lt;/p&gt;

&lt;h2&gt;&amp;#8220;Evangelists&amp;#8221; of various stripes and colors&lt;/h2&gt;

&lt;p&gt;The mission of Evangelists (pun fully inteded) is to sell you on some technology and its tooling. They are in the business of converting and bringing you into &amp;#8220;the fold&amp;#8221;. It&amp;#8217;s not about educating you. Have you ever heard an evangelist give a talk on object composition, separation of responsibilities, refactoring, inversion of control, and such? Not likely.&lt;/p&gt;

&lt;p&gt;Microsoft has plenty of marketing dollars to spend, and they do so by way of evangelists creating noise and pitching the latest shiny toy. It&amp;#8217;s marketing, not education. Next thing you know, &lt;a
href="http://weblogs.asp.net/bleroy/archive/2008/03/11/a-case-for-partial-rendering.aspx"&gt;Betrand laments&lt;/a&gt; that book authors badmouth &lt;code&gt;UpdatePanel&lt;/code&gt; for its abysmal performance and resource hogging. Bertrand, you never told us the whole story about its performance implications. You let the marketing gang do
the talking. But smart people filled in the blanks and got pissed off. Do you expect loyalty for sweeping crap under the carpet?&lt;/p&gt;

&lt;p&gt;Understand this relationship. Evangelists are good people, but their priorities are fundamentally different from yours. The better they do their job, the further they will advance within the Microsoft org chart.&lt;/p&gt;

&lt;p&gt;Think about it: you refuse to sign up for an extra credit card when a solicitor calls. But you keep imbibing everything evangelists serve you, whether you need it or not. Why?&lt;/p&gt;

&lt;p&gt;Case in point: Silverlight. In political terms, Microsoft is playing safe here by going to their base (that&amp;#8217;s you) instead of Rich Media professionals (the Flash/AIR crowd). The majority of developers don&amp;#8217;t work with Rich Media, so the bet is that &lt;em&gt;you&lt;/em&gt; &lt;strong&gt;&lt;/strong&gt;will peddle Silverlight in &lt;em&gt;your&lt;/em&gt; company.&lt;/p&gt;

&lt;p&gt;Understand that you&amp;#8217;re being pitched. If you need to master a specific technology, pursue it. Otherwise tune out!&lt;/p&gt;

&lt;h2&gt;Glory hounds&lt;/h2&gt;

&lt;p&gt;Recognize also that there will always be people proclaiming the virtues of a new technology or methodology at the top of their lungs. Not because it&amp;#8217;s good (it may as well be), but because it&amp;#8217;s new and shiny and because they need to generate consulting gigs. Recognize also what keeps them going:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;He&amp;#8217;d see that all his wishes, his efforts, his dreams, his ambitions are motivated by other men. He&amp;#8217;s not really struggling even for material wealth, but for the second-hander&amp;#8217;s delusion&amp;#8212;prestige. A stamp of approval, not his own.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Does it have to stress you out of your wits that there isn&amp;#8217;t enough time in the day to follow each loud voice? &lt;em&gt;I&lt;/em&gt; prefer to &amp;#8220;lead useful, active private [life] in public silence.&amp;#8221; This kind of stress doesn&amp;#8217;t get to me anymore.&lt;/p&gt;

&lt;h2&gt;Certifications&lt;/h2&gt;

&lt;p&gt;In my opinion, certs are meaningless. Don&amp;#8217;t kid yourself: certs do not intend to educate you. Prep books are intended to coach you how to pass exams. Of all geek literature, prep books are the most useless.&lt;/p&gt;

&lt;p&gt;If you ever come to an interview and all they want to see are your certifications, do yourself a favor and walk out. No need to swim in that cesspool.&lt;/p&gt;

&lt;h2&gt;Your name is your brand&lt;/h2&gt;

&lt;p&gt;In them ol&amp;#8217; days, a person could finish high school, go work at the same factory his entire adult life, retire and live on factory pension. Our generation doesn&amp;#8217;t get this luxury. Instead, too many employers of today bemoan the lack of &amp;#8220;loyalty.&amp;#8221; If they only saw their companies were stale and boring they wouldn&amp;#8217;t complain.&lt;/p&gt;

&lt;p&gt;In this day and age, &lt;strong&gt;your name is your brand&lt;/strong&gt;. You don&amp;#8217;t build this brand by joining a crowd of &lt;a href="http://www.nikhilk.net/Personas.aspx"&gt;Morts&lt;/a&gt;. You need to work on your brand. It takes time and effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;You know how most people are, they stick to the beaten path, they pay three times the price for the same thing, just to have the trademark. Courage [&amp;#8230;], they lack courage.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And again,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;It&amp;#8217;s the hardest thing in the world&amp;#8212;to do what we want. And it takes the greatest kind of courage.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is, by the way, one of the reasons I don&amp;#8217;t join &amp;#8220;blogging gangs&amp;#8221; (an ensemble of bloggers under one URL). I don&amp;#8217;t want to dilute my brand. Neither do I want to dilute that of others.&lt;/p&gt;

&lt;h2&gt;Where do I go from here?&lt;/h2&gt;

&lt;p&gt;Read good books and blogs. Go to user groups and Code Camps. Take paid training with a reputable company, if you can afford it. Find an angle you like (mine is web standards and usability) and work it. Develop your individuality and your own brand&amp;#8212;your name.&lt;/p&gt;

&lt;p&gt;If you have read to this point, congratulations! You now know what Morts never will.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/bait_station_ahead.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?575</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/575.aspx</trackback:ping><slash:comments>4</slash:comments></item><item><title>Slides from My Presentation on Usability</title><link>http://aspnetresources.com/blog/usability_presentation_slides.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/usability_presentation_slides.aspx</guid><pubDate>Sun, 13 Apr 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;This is a presentation I gave back in March at the &lt;a
href="http://fairfieldwestchester.net/PreviousEvents/tabid/58/Default.aspx"&gt;Connecticut .NET User Group&lt;/a&gt;, and in April at the &lt;a href="http://groups.msn.com/lidotnetusersgroup/general.msnw?action=get_message&amp;amp;mview=0&amp;amp;ID_Message=211&amp;amp;LastModified=4675665030706009826"&gt;Long
Island .NET User Group&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Usability is a subject that is almost never discussed in the Microsoft community so obsessed with drag and drop. &lt;strong&gt;I intend to change this&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been promoting web standards for the past four years, which led me to a much broader subject of usability. I see it an as umbrella over web standards, UI design, graphics design, copywriting, typography, etc.&lt;/p&gt;

&lt;p&gt;I intend to give this presentation at a couple of upcoming Code Camps. In the meantime, feel free to &lt;a href="http://aspnetresources.com/downloads/Usability%20presentation%20-%20web.pdf"&gt;grab the &amp;#8220;slide deck.&amp;#8221;&lt;/a&gt; I rolled it into a ~7Mb PDF so you wouldn&amp;#8217;t need PowerPoint.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/usability_presentation_slides.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?574</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/574.aspx</trackback:ping><slash:comments>3</slash:comments></item><item><title>Read Good Books to Be a Better Developer</title><link>http://aspnetresources.com/blog/read_good_books.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/read_good_books.aspx</guid><pubDate>Thu, 03 Apr 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Oren has published a list of his &lt;a href="http://www.ayende.com/Blog/archive/2008/03/15/Recommended-Books.aspx"&gt;recommended
reading&lt;/a&gt; and it reminded I wanted to write a post about this for some time. At the bottom on his post, Oren points to an observation that almost none of his books are on a specific technology. Let me come back to this point in a second.&lt;/p&gt;

&lt;p&gt;Remember a &lt;a href="http://www.aspnetresources.com/blog/learning_curve_2.aspx"&gt;picture of my stack of books&lt;/a&gt; from three years ago? As I look at my bookshelf now, I see hardly any of them left. At one point, I simply threw away those huge ADO.NET and ASP.NET volumes. &lt;/p&gt;

&lt;p&gt;I have a nice library of the patterns books (GoF, Fowler, Kerievsky, Chen, etc), and a few MS AJAX books (gotta know your tools, after all). But the rest are along the lines of &lt;strong&gt;Don&amp;#8217;t Make Me Think&lt;/strong&gt;, &lt;a href="http://www.aspnetresources.com/blog/better_usability_with_silverlight_yeah_right.aspx"&gt;Prioritizing
Web Usability&lt;/a&gt;, &lt;a href="http://www.aspnetresources.com/blog/will_erlang_become_the_next_java.aspx"&gt;Programming Erlang&lt;/a&gt;, Code Complete, &lt;a href="http://awww.aspnetresources.com/blog/stop_stealing_sheep_book_review.aspx"&gt;Stop Stealing Sheep&lt;/a&gt;, &lt;a
href="http://www.aspnetresources.com/blog/peopleware_books_review.aspx"&gt;Peopleware&lt;/a&gt;, &lt;strong&gt;Release It!&lt;/strong&gt; (review coming), etc.&lt;/p&gt;

&lt;p&gt;The time came when I noticed I was switching my focus from web standards topics&amp;#8212;CSS, XHTML, JavaScript&amp;#8212;to a much broader topic of usability. Usability is not about how this or that technology functions. It&amp;#8217;s about how people function. The Microsoft camp pays little attention to the aspect of people. This is when I realized those thick volumes you see on the picture on the left weren&amp;#8217;t helpful. They were putting tooling first.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s just wrong.&lt;/p&gt;

&lt;p&gt;I also realized that to become a better developer you need to lay off of geek literature and read good books. Granted, you need to stay up to date. But try to strike up a conversation with a geek about anything outside of software. Seriously, try it.&lt;/p&gt;

&lt;p&gt;What&amp;#8217;s a good book? It depends on your mindset and world view. Read about typography&amp;#8212;it affects people in powerful ways. Read about accessibility&amp;#8212;gain appreciation for people with disabilities. Read about design&amp;#8212;it&amp;#8217;s about communication and problem solving. Read &lt;strong&gt;Peopleware&lt;/strong&gt; and &lt;strong&gt;Release It!&lt;/strong&gt;. Read &lt;strong&gt;Don&amp;#8217;t Make Me Think&lt;/strong&gt; so you don&amp;#8217;t start or get yourself involved in religious debates.&lt;/p&gt;

&lt;p&gt;My approach is to read one book pertaining to my industry, alternated with a non-geek title.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/read_good_books.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?573</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/573.aspx</trackback:ping><slash:comments>4</slash:comments></item><item><title>The Best Design Coding Guidelines Ever</title><link>http://aspnetresources.com/blog/best_design_coding_guidelines_ever.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/best_design_coding_guidelines_ever.aspx</guid><pubDate>Sun, 30 Mar 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;This must be &lt;a href="http://www.youtube.com/watch?v=a0qMe7Z3EYg"&gt;the best video presentation&lt;/a&gt; on web standards and SEO. If you are so astounded by the clarity of the material that you can&amp;#8217;t remember a thing, below are a few points to take away:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Do your layout with &lt;code&gt;div&lt;/code&gt;s&lt;/li&gt;
  &lt;li&gt;Please don&amp;#8217;t use tables even though they work fine&lt;/li&gt;
  &lt;li&gt;Describe the &lt;code&gt;DOCTYPE&lt;/code&gt; so the browser can relate&lt;/li&gt;
  &lt;li&gt;Check in all browsers&lt;/li&gt;
  &lt;li&gt;Title everything including links and images&lt;/li&gt;
  &lt;li&gt;Don&amp;#8217;t use &lt;code&gt;&amp;lt;b(old)&amp;gt;&lt;/code&gt;, please use &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; &amp;#8217;cause
    if you use &lt;code&gt;&amp;lt;b(old)&amp;gt;&lt;/code&gt; then it&amp;#8217;s all then wrong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go watch now and enjoy!&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/best_design_coding_guidelines_ever.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?572</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/572.aspx</trackback:ping><slash:comments>5</slash:comments></item><item><title>How Does MS AJAX Manage to Crash Firefox?</title><link>http://aspnetresources.com/blog/ms_ajax_crashes_firefox.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/ms_ajax_crashes_firefox.aspx</guid><pubDate>Wed, 12 Mar 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Another day, another idiosyncrasy. I&amp;#8217;m implementing the
&lt;code&gt;IScriptControl&lt;/code&gt; interface and have the following line which crashes Firefox upon page unload:&lt;/p&gt;

&lt;pre class='coloredcode'&gt;&lt;span class='kwd'&gt;public&lt;/span&gt; IEnumerable&amp;lt;&lt;span class='gen'&gt;ScriptReference&lt;/span&gt;&amp;gt; GetScriptReferences ()
{
   &lt;span class='kwd'&gt;yield return new&lt;/span&gt; ScriptReference (
      &lt;span class='st'&gt;"MyNamespace.MyScriptControl.Panelbar.js"&lt;/span&gt;, 
      &lt;span class='kwd'&gt;this&lt;/span&gt;.GetType ().Asembly.FullName);
}&lt;/pre&gt;

&lt;p&gt;Firefox crashes cold with this:&lt;/p&gt;

&lt;p&gt;&lt;img alt="Microsoft AJAX crashing Firefox"
src="http://aspnetresources.com/images/ms_ajax_ff_crash.png" class="framed" /&gt;&lt;/p&gt;

&lt;p&gt;By trial and error, I figured that the following line &lt;strong&gt;does not&lt;/strong&gt; cause crashes:&lt;/p&gt;

&lt;pre class='coloredcode'&gt;&lt;span class='kwd'&gt;public&lt;/span&gt; IEnumerable&amp;lt;&lt;span class='gen'&gt;ScriptReference&lt;/span&gt;&amp;gt; GetScriptReferences ()
{
 &lt;span class='kwd'&gt;yield return new&lt;/span&gt; ScriptReference (
   Page.ClientScript.GetWebResourceUrl (
     &lt;span class='kwd'&gt;typeof&lt;/span&gt; (MyControl), &lt;span class='st'&gt;"MyNamespace.MyScriptControl.Panelbar.js"&lt;/span&gt;));
}&lt;/pre&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Go figure. On a scale of 1 (a hiccup) to 10 (absolutely weird), this issue
scores a 10.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/ms_ajax_crashes_firefox.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?571</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/571.aspx</trackback:ping><slash:comments>5</slash:comments></item><item><title>Extender Control Just Won't Pick Up Localization</title><link>http://aspnetresources.com/blog/extender_wont_pick_up_localization.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/extender_wont_pick_up_localization.aspx</guid><pubDate>Sun, 24 Feb 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Imagine my surprise when, having gone through the &lt;a
href="http://www.asp.net/AJAX/Documentation/Live/overview/LocalizingResources.aspx"&gt;AJAX localization tutorial&lt;/a&gt; and &lt;a
href="http://msdn.microsoft.com/msdnmag/issues/08/01/InternationalizingASPNETAJAX/"&gt;this MSDN article&lt;/a&gt; up, down and sideways, I couldn&amp;#8217;t get my extender control to see resource strings on the client! &lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the extender skeleton:&lt;/p&gt;

&lt;pre class='coloredcode'&gt;[assembly: WebResource (
    &lt;span class='st'&gt;"[blah].js"&lt;/span&gt;,
    &lt;span class='st'&gt;"text/javascript"&lt;/span&gt;)]

[assembly: ScriptResource (
    &lt;span class='st'&gt;"[blah].js"&lt;/span&gt;, 
    &lt;span class='st'&gt;"[blah recources]"&lt;/span&gt;, 
    &lt;span class='st'&gt;"ClientResources"&lt;/span&gt;]

&lt;span class='kwd'&gt;namespace&lt;/span&gt; MyControls
{
 &lt;span class='kwd'&gt;public class&lt;/span&gt; MyExtender : ExtenderControl
 {
  &lt;span class='cmt'&gt;// Lots of stuff skipped&lt;/span&gt;
  &lt;span class='kwd'&gt;protected 
      override&lt;/span&gt; IEnumerable&amp;lt;&lt;span class='gen'&gt;ScriptReference&lt;/span&gt;&amp;gt; GetScriptReferences()
  {
   &lt;span class='kwd'&gt;yield return new&lt;/span&gt; ScriptReference (
       Page.ClientScript.GetWebResourceUrl (
                 &lt;span class='kwd'&gt;typeof&lt;/span&gt; (MyExtender), &lt;span class='st'&gt;"[blah].js"&lt;/span&gt;)
    );
  }
 }
}&lt;/pre&gt;

&lt;p&gt;I don&amp;#8217;t remember why I chose &lt;code&gt;GetWebResourceUrl&lt;/code&gt;, but that&amp;#8217;s precisely where the problem lies. Change the line to this and everything magically works:&lt;/p&gt;

  &lt;pre class='coloredcode'&gt;&lt;span class='kwd'&gt;yield return new&lt;/span&gt; ScriptReference (&lt;span class='st'&gt;"[blah].js"&lt;/span&gt;,
                        &lt;span class='kwd'&gt;this&lt;/span&gt;.GetType ().Assembly.FullName);
&lt;/pre&gt;

&lt;p&gt;Gotta love obscure edge-cases.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/extender_wont_pick_up_localization.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?570</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/570.aspx</trackback:ping><slash:comments>0</slash:comments></item><item><title>Usability Blooper: Dollar, You Ain't Helping</title><link>http://aspnetresources.com/blog/usability_blooper_dollar.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/usability_blooper_dollar.aspx</guid><pubDate>Sun, 24 Feb 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Here&amp;#8217;s an interesting screenie from &lt;a href="http://dollar.com"&gt;Dollar&lt;/a&gt; rent-a-car:&lt;/p&gt;

&lt;p&gt;&lt;img class="framed" alt="Dollar doesn't help with either the message or the interface" src="http://aspnetresources.com/images/dollar_rental_wtf.png" /&gt;&lt;/p&gt;

&lt;p&gt;Two issues jump out.&lt;/p&gt;

&lt;h2&gt;Poor copywriting&lt;/h2&gt;

&lt;p&gt;The message is clear as mud. Too wordy. Also, displaying internal error codes (&amp;#8220;Message Business100&amp;#8221;) is a sin unto death, figuratively speaking.&lt;/p&gt;

&lt;h2&gt;UI disconnect&lt;/h2&gt;

&lt;p&gt;The error message refers to something the UI doesn&amp;#8217;t actually display. There is &lt;strong&gt;no&lt;/strong&gt; list to select from. I can kinda-sorta quess I need to start typing because I&amp;#8217;m familiar with AJAXy auto-completes, but still&amp;#8230;&lt;/p&gt;

&lt;p&gt;&amp;#8220;Location&amp;#8221; up there is ambiguous because I don&amp;#8217;t know their location codes. &amp;#8220;Location&amp;#8221; is an implementation detail from the jargon of Dollar&amp;#8217;s IT peeps.&lt;/p&gt;

&lt;p&gt;If it were up to me, I&amp;#8217;d go with &amp;#8220;Type the city or airport where you&amp;#8217;d like to pick up the vehicle.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Any favorite usability bloopers you&amp;#8217;d like to share?&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/usability_blooper_dollar.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?569</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/569.aspx</trackback:ping><slash:comments>0</slash:comments></item><item><title>One Interesting Use of Explicitly Implemented Interfaces</title><link>http://aspnetresources.com/blog/one_interesting_use_of_explicitly_implemented_inte.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/one_interesting_use_of_explicitly_implemented_inte.aspx</guid><pubDate>Sun, 24 Feb 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;When you see a discussion of &lt;a href="http://msdn2.microsoft.com/en-us/library/ms173157(vs.80).aspx"&gt;explicit
interfaces&lt;/a&gt;, it is usually about resolving clashes in their signatures (see &lt;a href="http://msdn2.microsoft.com/en-us/library/aa288461.aspx"&gt;Explicit Interface Implementation Tutorial&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;To rehash, you&amp;#8217;d implement an interface explicitly to&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;simulate variance (change parameters or return type in &amp;#8220;overridden&amp;#8221; methods);&lt;/li&gt;
  &lt;li&gt;hide a member and add an equivalent member with a better name;&lt;/li&gt;
  &lt;li&gt;force the client to call members only through the interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, here&amp;#8217;s another interesting use case very briefly mentioned in &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0321246756/aspnetresourc-20"&gt;Framework Design Guidelines&lt;/a&gt;. An explicit interface comes in handy when it &amp;#8220;includes mainly members supporting framework infrastructure, such as data binding or
serialization.&amp;#8221; A good example is an interface whose members are almost never accessed directly.&lt;/p&gt;

&lt;p&gt;This got me thinking. Recently, we had a discussion at work whether our domain classes should be aware of their caching environment. Should a domain class implement a (hypothetical) &lt;code&gt;ICacheable&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;In the Domain Driven Design canon, you don&amp;#8217;t mix persistence to the domain and thus keep it persistence-ignorant as much as possible. Caching is infrastructure, however, so it seems we can implement &lt;code&gt;ICacheable&lt;/code&gt; explicitly as a necessary evil and still feel good about it, eh? I don&amp;#8217;t know yet. I&amp;#8217;m curious how this is going to shape.&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/one_interesting_use_of_explicitly_implemented_inte.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?568</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/568.aspx</trackback:ping><slash:comments>3</slash:comments></item><item><title>Two Press Releases and Bad Copywriting</title><link>http://aspnetresources.com/blog/two_press_releases_and_bad_copywriting.aspx</link><guid isPermaLink="true">http://aspnetresources.com/blog/two_press_releases_and_bad_copywriting.aspx</guid><pubDate>Fri, 22 Feb 2008 00:00:00 GMT</pubDate><description>&lt;p&gt;Compare these two artifacts that came from the gods of corporate communication:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;We strive to quickly leverage existing competitive data to allow us to interactively restore long-term high-impact opportunities to meet our customer&amp;#8217;s needs. The customer can count on us to interactively engineer cost effective information in order to seamlessly simplify high-quality data to set us apart from the competition.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Microsoft today announced a set of broad-reaching changes to its technology and business practices to increase the openness of its products and drive greater interoperability, opportunity and choice. These changes are codified into four new interoperability principles and corresponding actions: 1) ensuring open connections; 2) promoting data portability; 3) enhancing support for industry standards; and 4) fostering more open engagement with
customers and the industry, including open source communities.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The former is from the Dilbert &lt;a href="http://www.dilbert.com/comics/dilbert/games/career/bin/ms.cgi"&gt;Mission Statement Generator&lt;/a&gt;, the latter&amp;#8212;&lt;a href="http://www.microsoft.com/presspass/presskits/interoperability/default.mspx"&gt;from Microsoft&lt;/a&gt; (hat tip to Bill Zack). I am thoroughly enlightened now.&lt;/p&gt;

&lt;p&gt;Will those people ever learn to speak like humans?&lt;/p&gt;</description><comments>http://aspnetresources.com/blog/two_press_releases_and_bad_copywriting.aspx#comments</comments><wfw:commentRss>http://aspnetresources.com/blog/postcomments.aspx?567</wfw:commentRss><trackback:ping>http://aspnetresources.com/blog/trackback/567.aspx</trackback:ping><slash:comments>0</slash:comments></item></channel></rss>