<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Caffeinated Software Blog</title>
        <link>http://blog.caffeinatedsoftware.com/Default.aspx</link>
        <description>Brain droppings from an ex-Microsoftie, Issaquah Highlands resident, IDX vendor, Rain City Guide contributor, software engineer, and all around good guy</description>
        <language>en-US</language>
        <copyright>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</copyright>
        <managingEditor>robbiep@caffeinatedsoftware.com</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <image>
            <title>Caffeinated Software Blog</title>
            <url>http://blog.caffeinatedsoftware.com/images/RSS2Image.gif</url>
            <link>http://blog.caffeinatedsoftware.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Games of the 2008 Browser Olympiad - Chrome is the new Bronze</title>
            <category>Software</category>
            <category>DHTML / CSS / HTTP / AJAX</category>
            <category>Software Industry</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2008/09/13/games-of-the-2008-browser-olympiad---chrome-is-the.aspx</link>
            <description>&lt;p&gt;&lt;img align="right" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/091308_2019_Gamesofthe21.png" alt="" /&gt;During the course of my day job on the &lt;a href="http://blog.caffeinatedsoftware.com/archive/2008/02/13/return-of-a-jedi.aspx"&gt;OWA team&lt;/a&gt;, I've had the opportunity to play with all the new browsers. I thought I'd share my opinions and see what my fellow web developers think. We already know &lt;a href="http://www.alleyinsider.com/2008/9/walt-mossberg-pees-on-google-chrome-worse-than-microsoft-ie8"&gt;what Walt Mossberg thinks&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gold - &lt;a href="http://www.mozilla.com/en-US/firefox/?from=getfirefox"&gt;Firefox 3.0&lt;/a&gt; 		&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It's pretty fast, it's pretty stable, has more goodies per square inch than the Halloween candy section at Costco, it runs on every desktop OS that matters and most of the world's web sites support it. &lt;/p&gt;
&lt;p&gt;Despite my fondness for Firefox, there's still room for improvements. &lt;a href="http://code.google.com/p/fbug/issues/detail?id=770"&gt;Firebug 1.2 is so slow it's unusable when dealing with large AJAX applications&lt;/a&gt;. It's odd because Firefox runs large web apps fine, but Firebug is still suffering some teething pains right now. However, it looks like the &lt;a href="http://getfirebug.com/releases/firebug/1.3/"&gt;forthcoming Firebug 1.3&lt;/a&gt; will ease my pain in the near future. &lt;/p&gt;
&lt;p&gt;Aside from my Firebug issues, &lt;a href="http://royal.pingdom.com/?p=339"&gt;I don't like how Firefox 3 deals with self-signed certificates&lt;/a&gt; (UI is too cumbersome). Seriously, it takes something like 7 mouse clicks to accept a site with self-signed cert what is 1 or 2 click task in IE &amp;amp; Safari. Another thing that &lt;a href="http://www.urbandictionary.com/define.php?term=Grinds%20my%20Gears"&gt;grinds my gears&lt;/a&gt;, Firefox's &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=contenteditable"&gt;contenteditable implementation&lt;/a&gt; rather is rough around the edges, (which probably only effects me &amp;amp; 3 other web developers at the moment). However, despite my gripes, I still like Firefox the best. I just hope they fix their &lt;a href="http://www.w3.org/html/wg/html5/"&gt;contenteditable&lt;/a&gt; bugs in their next release.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Silver - &lt;a href="http://www.microsoft.com/ie"&gt;Internet Explorer 8&lt;/a&gt; 		&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I've been using Beta 2 lately and I'm pleasantly surprised. It's not Firefox fast, but it's noticeably faster than IE 7 was. It's not the most standards compliant browser, but renders 99% of the web perfectly. It doesn't have the heap fragmentation issues or stability issues that Chrome or Safari seem to. The new development tools seem to be competitive with Firebug, even if the plug in support isn't. If the IE team keeps up the good work, they might be able to stop losing market share to Firefox by the time IE 9 ships. &lt;/p&gt;
&lt;p&gt;Despite, the marked improvement, I think IE still has 3 major hurdles they need to clear before they can get gold again. &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Openness – &lt;a href="http://blogs.msdn.com/ie/"&gt;The IE blog&lt;/a&gt; helps, and I know MS is unlikely to make IE open source, but they should do more. How about giving IE an open bug list like &lt;a href="https://bugzilla.mozilla.org/"&gt;Mozilla's Bugzilla&lt;/a&gt; or &lt;a href="https://bugs.webkit.org/"&gt;Webkit's&lt;/a&gt;? That way the web developer community knows what bugs exist, is more directly involved with the product evolution, and can help Microsoft by providing feedback, bugs &amp;amp; test cases. For example, when is IE going to allow me to call the &lt;a href="http://msdn.microsoft.com/en-us/library/aa769893(VS.85).aspx"&gt;IDM_AUTOURLDETECT_MODE command&lt;/a&gt; via &lt;a href="http://msdn.microsoft.com/en-us/library/ms536419(VS.85).aspx"&gt;execCommand&lt;/a&gt; in Javascript? Having an HTTP or SMTP address turn into an A tag behind my back, in every single rich text editor I run in IE is really annoying. &lt;/li&gt;
    &lt;li&gt;Trust – Microsoft killed IE for Mac &amp;amp; Unix permanently. Microsoft put IE for Windows on ice for 4+ years and Windows Mobile IE is so bad that Microsoft's mobile carrier partners are shipping Opera with their Windows Mobile phones! That plan of inaction cost Microsoft at least 5 years of developer good will &amp;amp; untold amounts of credibility. Put simply, &lt;a href="http://en.wikipedia.org/wiki/Austin_Powers:_The_Spy_Who_Shagged_Me"&gt;Microsoft lost their web client mojo&lt;/a&gt;. Maybe &lt;a href="http://www.adweek.com/aw/content_display/news/agency/e3ibd93dba87a9330a31a9b8a8fc3bc5a93"&gt;Bill Gates &amp;amp; Jerry Seinfeld&lt;/a&gt; can help web developers forgive MS of its past sins and they'll get it back. &lt;/li&gt;
    &lt;li&gt;Leadership – During browser war 1.0, IE was hands down the better browser. During war browser 2.0, IE hasn't yet done anything that Firefox or Chrome hasn't done already or is actively working on. It'd be interesting to see IE will become a leader again or just be a fast follower. At any rate, it's good to see the &lt;a href="http://www.codinghorror.com/blog/archives/001006.html"&gt;IE team participating in the browser wars&lt;/a&gt; again and &lt;a href="http://www.arcanology.com/2008/06/17/ie-sends-mozilla-a-new-cake-for-firefox-3/"&gt;sending cakes&lt;/a&gt;. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Bronze – &lt;a href="http://www.google.com/chrome"&gt;Google Chrome&lt;/a&gt; 		&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This newcomer shows a lot of promise. It's based on the &lt;a href="http://webkit.org/"&gt;Webkit rendering engine&lt;/a&gt;, so that's a good thing. Granted, I still feel &lt;a href="http://en.wikipedia.org/wiki/Trident_(layout_engine)"&gt;Trident&lt;/a&gt; &amp;amp; &lt;a href="http://en.wikipedia.org/wiki/Gecko_(layout_engine)"&gt;Gecko&lt;/a&gt; are still better from an end user app compatibility, developer tool support &amp;amp; plug-in support stand point (despite their comparatively lower ACID scores), but at least they get the benefit of Apple's Safari work to date and &lt;a href="http://webkit.org/blog/173/webkit-achieves-acid3-100100-in-public-build/"&gt;WebKit has good standards support&lt;/a&gt;. It's one of the fastest browsers I've used. It's lets you use add search engines easily (I've added Live just to mess w/ the Google-ites). The &lt;a href="http://www.google.com/googlebooks/chrome/"&gt;Chrome comic&lt;/a&gt; was a cool introduction to Chome's features. &lt;/p&gt;
&lt;p&gt;All in all, I'm impressed. It proves that Google knows more about Windows app development than Apple does.  The ultimate test will be if they steel Microsoft's or Mozilla's browser market share. I don't think it'll happen in the near future, but this baby has potential. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4&lt;sup&gt;th&lt;/sup&gt; place – &lt;a href="http://www.opera.com/products/desktop/"&gt;Opera 9.5&lt;/a&gt; 		&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It's a nice browser to use and frankly it deserves a larger share than it has. Unfortunately, since the rise of Firefox, the reincarnation of IE, and the birth of Chrome, I can't think of a compelling reason to use it instead of one of the leaders. OK, it is currently the best web browser for Windows Mobile, but Mozilla &amp;amp; Microsoft are working on changing that story. It's developer tool &amp;amp; add-on support has improved in recent releases, but it's still not competitive with the Top 2. Oh well, it's got a bigger following in Europe and it's been around since the first browser war. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5&lt;sup&gt;th&lt;/sup&gt; place – &lt;a href="http://www.apple.com/safari/download/"&gt;Apple Safari 3.1.2&lt;/a&gt; 		&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On Windows, Safari has all of Chrome's faults and too few of its virtues. The &lt;a href="http://www.codinghorror.com/blog/archives/000884.html"&gt;font rendering is fuzzier&lt;/a&gt; than a &lt;a href="http://www.ty.com"&gt;beanie baby&lt;/a&gt;. The UI controls stick out like a &lt;a href="http://www.nflshop.com/product/index.jsp?productId=3128210"&gt;Pink Tony Romo Cowboys jersey&lt;/a&gt; at an &lt;a href="http://www.sportsline.com/nfl/story/10946993"&gt;NFC East&lt;/a&gt; road game.  I can't add other search engines to it which sucks rocks (not be confused with &lt;a href="http://sucks-rocks.com/"&gt;sucks-rocks&lt;/a&gt;). Google Chrome let's me add Windows Live, but yet can't Apple bundle something like &lt;a href="http://www.inquisitorx.com/safari/index_en.php"&gt;Inquisitor&lt;/a&gt; with Safari for Windows so I can't easily search Windows Live, Wikipedia or Amazon (&lt;a href="http://www.youtube.com/watch?v=k0VGcbnOaQ4"&gt;LAME&lt;/a&gt;)? Then again, &lt;a href="http://news.cnet.com/8301-1009_3-10039038-83.html?tag=mncol;txt"&gt;Apple isn't known for their high quality Windows applications&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;OK, if you want to test your apps on Safari without buying a &lt;a href="http://www.codinghorror.com/blog/archives/001044.html"&gt;Mac dongle&lt;/a&gt; or an iPhone, use Safari for Widows. Aside from that, nobody who uses Windows is going to use it as their preferred browser.&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/37.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2008/09/13/games-of-the-2008-browser-olympiad---chrome-is-the.aspx</guid>
            <pubDate>Sat, 13 Sep 2008 20:19:30 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/37.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2008/09/13/games-of-the-2008-browser-olympiad---chrome-is-the.aspx#feedback</comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/37.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/37.aspx</trackback:ping>
        </item>
        <item>
            <title>Is Flanagan’s “Rhino book”, the Petzold of the web era?</title>
            <category>Software</category>
            <category>C# / ASP.net</category>
            <category>DHTML / CSS / HTTP / AJAX</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2008/03/08/is-flanagans-rhino-book-the-petzold-of-the-web-era.aspx</link>
            <description>&lt;p&gt;&lt;img align="right" alt="" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/030908_0753_IsFlanagans1.png" /&gt;10 or so years ago, when one wanted to write a Windows application, you had a choice to make. Does one take the easy way, or the hard way?  Were you a real Windows Software Engineer or a wanna be? Did you use Visual Basic, or did you take the time master all the nuances of &lt;a href="http://msdn2.microsoft.com/en-us/library/ms632597(VS.85).aspx"&gt;HWNDs&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/ms533241.aspx"&gt;HDCs&lt;/a&gt;, and &lt;a href="http://msdn2.microsoft.com/en-us/library/ms644950.aspx"&gt;SendMessage&lt;/a&gt;? Was  &lt;a href="http://www.charlespetzold.com/"&gt;Charles Petzold's&lt;/a&gt; seminal &lt;a href="http://books.google.com/url?client=ca-google-gppd&amp;amp;format=googleprint&amp;amp;num=0&amp;amp;channel=BTB-ca-google-gppd+BTB-ISBN:157231995X&amp;amp;q=http://www.amazon.com/exec/obidos/ASIN/157231995X&amp;amp;usg=AFQjCNEmAnUTjM4NIL-hpzzqmDmjQUxeFg&amp;amp;source=gbs_buy_r"&gt;Programming Windows&lt;/a&gt; book on your bookshelf or not? Did you enjoy the &lt;a href="http://www.youtube.com/watch?v=zSgIb0xBQhk"&gt;Get a Mac - Gift Exchange ad&lt;/a&gt; in which PC gives Mac a copy of the "C++ GUI Programming Guide"? &lt;/p&gt;
&lt;p&gt;Today, it seems the web programming world has a evolved into a similar dicotemy. It seems there are lot of ASP.net programmers who are more like the VB programmers of yore, than the C/C++ programmers of eras past. &lt;/p&gt;
&lt;p&gt;There are those who avoid getting their hands dirty with Javascript and really don't understand the full power of the browser's DOM. You know the ones that don't even know &lt;a href="http://blog.caffeinatedsoftware.com/archive/2008/01/11/best-asp.net-interview-question-ever-part-1.aspx"&gt;what byte bloat ASP.net web forms can create&lt;/a&gt;, let alone how or why they should avoid it.  &lt;/p&gt;
&lt;p&gt;Granted, like old Visual Basic, ASP.net web forms is a great tool for writing applications quickly. But the native tongue of Windows is the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa383749(VS.85).aspx"&gt;C/C++ Win32 API&lt;/a&gt;, and the best application developers are fluent in it. Likewise, the native tongue of the Web is the &lt;a href="http://www.w3.org/DOM/"&gt;Javascript HTML DOM API&lt;/a&gt;, and the best application developers exploit every byte of power the web platform can offer application developers and &lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html"&gt;avoid platform abstractions&lt;/a&gt;. Like the Windows developers of yore, the best ASP.net applications are written a little closer to the metal than most people are able or willing to go.  &lt;/p&gt;
&lt;p&gt;I don't know if I really have a point, other than sometimes large frameworks filled with time saving abstractions get in your way, more than they help. Sometimes, you need to get under the hood and get your hands dirty. Sometimes, I wish more developers had the opprotunity to build fast applications, instead of merely developing applications fast.&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/36.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2008/03/08/is-flanagans-rhino-book-the-petzold-of-the-web-era.aspx</guid>
            <pubDate>Sun, 09 Mar 2008 07:53:14 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/36.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2008/03/08/is-flanagans-rhino-book-the-petzold-of-the-web-era.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/36.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/36.aspx</trackback:ping>
        </item>
        <item>
            <title>The Internet Super Bowl - Microsoft Giants vs Google Patriots</title>
            <category>Software Industry</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2008/02/22/the-internet-super-bowl---microsoft-giants-vs-google-patriots.aspx</link>
            <description>&lt;p&gt;When, I first heard about Microsoft's $40+ billion (1/2 cash + 1/2 stock) offer to buy Yahoo, my first reaction what similar to &lt;a href="http://minimsft.blogspot.com/2008/02/microsoft-yahoo-microsoft-44600000000.html"&gt;Mini Microsoft's&lt;/a&gt;. To put that figure into perspective, that's enough to buy over 2,000 &lt;a href="http://www.trulia.com"&gt;Trulias&lt;/a&gt; (at $20 million each) or 500 &lt;a href="http://www.zillow.com"&gt;Zillows&lt;/a&gt; (at $80 million each). That number is &lt;a href="http://www.futureofflight.org/planavisit.html"&gt;like visiting the Boeing factory&lt;/a&gt; in Everett, after seeing it; you just walk away with a sense of awe. &lt;/p&gt;
&lt;p&gt;Put another way, it will drain Microsoft of its cash reserves and put &lt;a href="http://blog.seattlepi.nwsource.com/microsoft/archives/130975.asp"&gt;the company into debt for the first time in its history&lt;/a&gt;. Fortunately, Microsoft earned about &lt;a href="http://moneycentral.msn.com/investor/invsub/results/hilite.asp?Symbol=US:MSFT"&gt;nearly $17 billion last year in income&lt;/a&gt;, so I suspect Microsoft has an excellent credit rating w/ the banks. Perhaps, the low interest rates and the upcoming recession also factored into Microsoft's decision. &lt;/p&gt;
&lt;p&gt;However, during the past week or so, I've come to the conclusion that desperate times call for desperate measures, and great rewards sometimes only come with great risks and regardless of how it turns out, it'll be a great story to be taught in business schools for generations to come… Perhaps, the idea isn't as crazy as it sounds… &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wall Street knows Google is only human &lt;/strong&gt;– After &lt;a href="http://publications.mediapost.com/index.cfm?fuseaction=Articles.san&amp;amp;s=75593&amp;amp;Nid=38924&amp;amp;p=260111"&gt;Google's last quarterly earnings report&lt;/a&gt;, the share price plunged by $40 / share. Granted, Microsoft's chart for the past 3 months doesn't look much better. But the fact that &lt;a href="http://www.alleyinsider.com/2008/2/google_very_exposed_to_us_recession__expert"&gt;Google has shown a marked deceleration in paid click growth&lt;/a&gt; and difficulties with moving social network inventory, shows it is still a &lt;a href="http://www.businessweek.com/technology/content/mar2005/tc2005033_5789_tc024.htm"&gt;one trick pony&lt;/a&gt; (albeit one with a $150 billion market cap). Furthermore, &lt;a href="http://www.cio.com/article/166050/What_s_in_Store_for_IT_and_the_CIO_in"&gt;Google still doesn't have any enterprise street credibility&lt;/a&gt; and &lt;a href="http://www.passingnotes.com/archives/2007/11/12/does-google-eat-its-own-dog-food/"&gt;I'm not the only one who thinks so&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;img height="262" alt="" width="616" src="/images/blog_caffeinatedsoftware_com/022308_0703_TheInternet1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Microsoft knows Google is only human&lt;/strong&gt; – For years Microsoft has invested heavily in search, and technology wise I think Microsoft is finally starting to catch up. Note: catching up technologically is NOT the same is catching up in market share, traffic, and perception (that takes much longer). For the past year, I've found MS Live &amp;amp; Google to be roughly equivalent, or Google to be slightly better. However, to beat entrenched competitors, you need to deliver superior products, not just equivalents.&lt;br /&gt;
&lt;br /&gt;
Earlier this week, I finally ran into a situation in which &lt;a href="http://search.live.com/results.aspx?q=how+does+a+CDN+work&amp;amp;src=IE-SearchBox"&gt;the search results Live returned&lt;/a&gt; were not only &lt;a href="http://www.google.com/search?q=how+does+a+CDN+work&amp;amp;rls=com.microsoft:*:IE-SearchBox&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;sourceid=ie7&amp;amp;rlz=1I7GGIH"&gt;better than Google&lt;/a&gt;, but significantly so. I was looking for more information on &lt;a href="http://en.wikipedia.org/wiki/Content_delivery_network"&gt;Content Delivery Networks&lt;/a&gt; (CDN as us web geeks call them), and Google gave me a bunch irrelevant information on the Canadian Champions League, and random Canadian food/drug related topics (Canadian Viagra anyone?). Google earned a perfect 0 out of 10 on relevance. Microsoft's results weren't perfect, but 7 of the top 10 results were related to the topic I was interested in and the unrelated topics were less random. I was shocked Google would screw up this badly. Google should know that 1) I'm a software geek 2) 90% of my searches are on geek related topics, and 3) it should have a bias toward geek related things, all things being equal, because Google is at its heart, a company run by software geeks. &lt;/p&gt;
&lt;p&gt;BTW – My search on Yahoo, included information on CDs (Compact Discs) &amp;amp; CDNs (Content Delivery Networks) and allowed to me &lt;a href="http://search.yahoo.com/search?p=how+does+a+cdn+work&amp;amp;ei=UTF-8&amp;amp;fr=moz2"&gt;filter my back to my original query&lt;/a&gt;. The &lt;a href="http://search.yahoo.com/search?ei=UTF-8&amp;amp;p=how+does+a+%2Bcdn+work"&gt;filtered results&lt;/a&gt; were roughly equivalent in relevance to Microsoft's, so I'd give Yahoo a good grade as well. Granted, this was just one obscure search out of billions possible, but the fact Google fumbled something so badly, that usually it nails was a bit, how should I say it, encouraging for those of us who don't want to see Google own the internet. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Google knows Microsoft + Yahoo could beat them&lt;/strong&gt; (or more likely, force them to &lt;a href="http://blog.kryptiva.com/2008/02/good-enough-vs.html"&gt;start playing defense&lt;/a&gt;) – I didn't say Microsoft + Yahoo will beat them. Heck, the Yahoo + Microsoft merger is probably &lt;a href="http://www.marketwatch.com/news/story/some-advice-larry-ellison-might/story.aspx?guid=%7B42A8E51D-7B3F-4C46-AF9D-4A3FC8FABA39%7D"&gt;the best thing to happen Larry Ellison&lt;/a&gt; in the past 5 years. It might end up being the best thing that ever happened to Google too. One thing is certain, separately, Microsoft &amp;amp; Yahoo will not catch up to Google. &lt;a href="http://bigtech.blogs.fortune.cnn.com/2008/02/14/microsofts-sumo-match-with-google/"&gt;Google has a critical mass that Microsoft &amp;amp; Yahoo separately do not&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;But if &lt;a href="http://money.cnn.com/2008/02/21/technology/Google_microsoft.ap/"&gt;Darth Brin finds the takeover unnerving&lt;/a&gt; and &lt;a href="http://www.passingnotes.com/archives/2008/02/03/dr-microhoo-or-how-i-stopped-worrying-and-learned-to-love-the-bomb/"&gt;Google's head lawyer is publically whining&lt;/a&gt; about the deal, perhaps the Microsofties in &lt;a href="http://minimsft.blogspot.com/"&gt;Redmond&lt;/a&gt; &amp;amp; the Yahoos &lt;a href="http://www.techyouruniverse.com/"&gt;Sunnyvale&lt;/a&gt;, should be a little more optimistic about their chances and open minded about the possibilities. Granted, I completely agree with the skeptics that Google is going play the anti-trust poker game to the best of its ability, integrating Yahoo's alien technology w/ Microsoft's is going to be huge challenge, and finding a way to keep Yahoo's best brands and talent (while simultaneously, not destroying Microsoft's) is a marketing &amp;amp; HR nightmare. &lt;/p&gt;
&lt;p&gt;Will Google lose? Probably not, but to paraphrase &lt;a href="http://www.scripting.com/davenet/1997/08/12/HighRoadsBigPictures.html"&gt;the wise Steve Jobs&lt;/a&gt; "Google doesn't have to lose in order for Microsoft to win." I'll put it another way, I'd take the Giants and the points because they are much better team than some people give them credit for. I believe Microsoft (w/ Yahoo's help) can put Google on the defensive, for the first time, and keep them honest. And if this doesn't work, at least Microsoft can go into the locker room knowing they left it all on the field and gave it their best shot. &lt;/p&gt;
&lt;p&gt;At any rate, get'cha your popcorn ready. It's going to be one hell of a show, &lt;a href="http://www.nfl.com/superbowl/story?id=09000d5d8067ea8a&amp;amp;template=with-video&amp;amp;confirm=true"&gt;just like SuperBowl XLII was&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/35.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2008/02/22/the-internet-super-bowl---microsoft-giants-vs-google-patriots.aspx</guid>
            <pubDate>Sat, 23 Feb 2008 07:04:06 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/35.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2008/02/22/the-internet-super-bowl---microsoft-giants-vs-google-patriots.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/35.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/35.aspx</trackback:ping>
        </item>
        <item>
            <title>Sufferin' Safari</title>
            <category>Software</category>
            <category>DHTML / CSS / HTTP / AJAX</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2008/02/14/surfin-safari.aspx</link>
            <description>&lt;p&gt;&lt;img width="216" hspace="12" height="244" align="left" alt="" src="/images/blog_caffeinatedsoftware_com/021408_1946_SurfinSafar1.png" /&gt;Do any of my fair readers have any experience or advice on Safari development tools, plug-ins, or debuggers? Most of my day to day surfing &amp;amp; debugging is with Firefox and IE on Windows, and I know where most of the toys for those browsers are hiding. &lt;/p&gt;
&lt;p&gt;My knowledge of Safari plug ins &amp;amp; development begins and ends w/ &lt;a href="http://pimpmysafari.com/"&gt;Pimp My Safari&lt;/a&gt;, but I have no idea if the plug-ins are Mac only or run on Windows as well? Furthermore, I have no idea if any of them worth downloading? What are the differences between the Windows &amp;amp; Mac versions of Safari? Is the Mac version of Safari better than its Windows cousin (God, I hope so). How does day to day life as a web developer on Safari compare to that on Firefox or IE? In the Windows world, let's just say Safari, has &lt;a href="http://www.codinghorror.com/blog/archives/000884.html"&gt;its share of issues&lt;/a&gt;, and is &lt;a href="http://www.joelonsoftware.com/items/2007/06/11.html"&gt;unlikely to win any converts on Windows&lt;/a&gt;. I will admit that &lt;a href="http://www.apple.com/safari/download/"&gt;Safari 3.0.4 for Windows&lt;/a&gt; beta was an improvement over their previous beta, but it's still uglier than Opera, and buggier than IE. &lt;/p&gt;
&lt;p&gt;However, I suspect that Apple writes code, like the Seahawks play football. They are &lt;a href="http://www.nfl.com/news/story;jsessionid=8FB596F20613687C23112A68FBB6D8BA?id=09000d5d805b8fe6&amp;amp;template=with-video&amp;amp;confirm=true"&gt;both much better teams at home&lt;/a&gt;, so I suspect Mac Safari is pretty good if you use &lt;a href="http://www.apple.com/"&gt;fruit computers&lt;/a&gt; on a daily basis. And if the rumors are to be believed, &lt;a href="http://blogs.computerworld.com/safari_is_about_to_get_crazy_fast"&gt;Safari is going to become much faster&lt;/a&gt;, which probably means Safari is going to grow its share of the market. Either way, I'm probably looking at larger browser test matrix and a new set of browser bugs to learn about for my applications. &lt;/p&gt;
&lt;p&gt;Perhaps, I should just spelunk on &lt;a href="http://developer.apple.com/internet/safari/faq.html"&gt;Apple's Safari Developer FAQ&lt;/a&gt;, until I find the droids I'm looking for?&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/34.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2008/02/14/surfin-safari.aspx</guid>
            <pubDate>Thu, 14 Feb 2008 19:46:18 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/34.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2008/02/14/surfin-safari.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/34.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/34.aspx</trackback:ping>
        </item>
        <item>
            <title>Return of a Jedi  </title>
            <category>Software</category>
            <category>C# / ASP.net</category>
            <category>Jobs / Career</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2008/02/13/return-of-a-jedi.aspx</link>
            <description>&lt;p&gt;&lt;img alt="" align="left" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/021308_2055_ReturnofaJe1.png" /&gt; It was a long, long time ago… It was a time of a great civil war between the Outlook/Office and the Exchange teams… It was a time of great browser wars and much uncertainty... It was an era in which ancient languages such as C++ ruled the galaxy and web browsers weren't considered application development platforms. &lt;/p&gt;
&lt;p&gt;It was during this time, I had the opportunity to work on a product that would help redefine web based e-mail and more importantly define what web applications were capable of. I was one of the first developers on the Outlook Web Access team (or as it was known back then, the Exchange Web Client). During 1996-1998, I worked with Bob Gering (R.I.P.) and &lt;a href="http://msexchangeteam.com/archive/2005/06/21/406646.aspx"&gt;Jim Van Eaton&lt;/a&gt;, where I created the original appointment / meeting request form, the contact form, and the Java date picker. Needless to say, it was the highlight of my professional career at Microsoft. &lt;/p&gt;
&lt;p&gt;Unfortunately, during this great civil war, my career ended up following a different path, than that of my good friends, and I joined "the confederacy". During this period, I ended up working on random Office apps in native code, as I meandered around aimlessly from group to group, either working on products I wasn't passionate about or working for managers who were mediocre. After a few years of my career going nowhere, I left Microsoft. &lt;/p&gt;
&lt;p style="TEXT-ALIGN: justify"&gt;During this time, my friend Qui-Gon Jim (Van Eaton) became the Jedi Master of the &lt;a href="http://www.microsoft.com/exchange/code/OWA/index.html"&gt;Outlook Web Access&lt;/a&gt; team, and under his stewardship &lt;a href="http://www.alexhopmann.com/story-of-xmlhttp/"&gt;OWA became the first web application to use the XMLHTTP technology&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;which is today referred to as AJAX&lt;/a&gt; and continued to grow its proud legacy into the great application you know and love today. Unless of course, you use a browser &lt;a href="http://www.getfirefox.com"&gt;that doesn't suck&lt;/a&gt;, in which case you'll never know how good OWA really is, which brings us to the present day. &lt;/p&gt;
&lt;p&gt;You see, Microsoft fumbled the ball during the dot com bust. After building a huge market share &amp;amp; mind share lead in the browser wars, Microsoft disbanded the IE team and essentially walked away from improving its client side internet technologies (fortunately, they invented .net during this time, and improved it's server side software, but IE was essentially trapped in a time capsule from 2001-2005). I suppose at the time it seemed like a smart move since AOL purchased Netscape, and neither AOL, Netscape nor the Mozilla foundation were going anywhere. Furthermore, Steve Jobs second coming at Apple was still in its early stages and Google was merely a good search engine and not yet a verb. &lt;/p&gt;
&lt;p&gt;Except, at some point during that era, we hit a strategic inflection point. Firefox got invented, kept improving and kept innovating. All while the majority of the former IE team was trapped in &lt;a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959"&gt;the Vista tar pit&lt;/a&gt;. In a few short years, IE 6 went from first to worst in mind share, due to the Firefox team playing the tortoise to Microsoft's hare. Even worse, Google took advantage of Microsoft's internet client myopia and made a web e-mail client that worked great on IE and Firefox (and gave away gigabytes of storage space to sweeten the deal). Shortly afterward Apple released Safari, Google released Google Maps, Microsoft released Virtual earth, and the Web was re-born. &lt;/p&gt;
&lt;p&gt;Anyway, the OWA team kept innovating during this era of uncertainty, and ended up with a great AJAX client that only worked on IE because when it was designed 1) there were no other browsers that supported AJAX / DHTML except IE and 2) there were no standards to follow because there were no other browsers that had implemented them yet. I suppose myopia played a role as well, but by the time the other browsers gained mind share, the OWA's development plans were already set in &lt;a href="http://starwars.wikia.com/wiki/Carbon_freezing"&gt;Carbonite&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;When I was on the OWA team, we supported IE &amp;amp; Netscape equally well (perhaps equally poorly is a better choice of words, because web browsers and web applications were so much simpler &amp;amp; less complex back then). However, during the past 10 years, we've witnessed the rise and fall of Internet Explorer (and &lt;a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx"&gt;possible redemption&lt;/a&gt;) and the World Wide Web is once again a chaotic and exciting area of uncertainty and innovation. &lt;/p&gt;
&lt;p&gt;So, with that back story, I am now announcing that this epic tale, is taking a new, if small, unexpected twist. Qui-Gon Jim has asked this former Jedi Knight to return to the &lt;a href="http://www.nytimes.com/2005/08/24/technology/24valley.html"&gt;Rebel Alliance&lt;/a&gt;, where we both hope we can defeat &lt;a href="http://thesithari.blogspot.com/"&gt;Darth Page and Darth Brin&lt;/a&gt; of the &lt;a href="http://www.oreillynet.com/windows/blog/2005/08/is_google_evil.html"&gt;Google Empire&lt;/a&gt;. For the past few years, I've been peacefully living on &lt;a href="http://en.wikipedia.org/wiki/Tatooine"&gt;Tatooine&lt;/a&gt;, but Qui-Gon Jim's call to battle was too compelling to resist. &lt;/p&gt;
&lt;p&gt;With a lot of hard work, and a little luck, perhaps I shall become a Jedi Master and re-join the Jedi Council. If nothing else, perhaps I'll merely play Han Solo for a few months and pay off Jabba the Hutt. &lt;/p&gt;
&lt;p&gt;&lt;img alt="" align="right" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/021308_2055_ReturnofaJe2.png" /&gt;One thing is for certain, the light saber fights with the Sith are going to be fun to watch and I'm looking forward to seeing something other than IE 6 bugs for next several months. Wish me luck in my &lt;a href="http://blogs.msdn.com/oldnewthing/"&gt;old / new job&lt;/a&gt; on Microsoft's Outlook Web Access team!&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/33.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2008/02/13/return-of-a-jedi.aspx</guid>
            <pubDate>Wed, 13 Feb 2008 20:55:51 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/33.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2008/02/13/return-of-a-jedi.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/33.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/33.aspx</trackback:ping>
        </item>
        <item>
            <title>Best ASP.net Interview Question Ever (Part 2)</title>
            <category>C# / ASP.net</category>
            <category>Jobs / Career</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2008/01/12/best-asp.net-interview-question-ever-part-2.aspx</link>
            <description>&lt;p&gt;&lt;img align="left" alt="Comic Book Guy thinks &amp;quot;IE 6 - worst browser ever&amp;quot;" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/011208_1759_BestASPnetI1.gif" title="Comic Book Guy thinks &amp;quot;IE 6 - worst browser ever&amp;quot;" /&gt;&lt;a href="http://blog.caffeinatedsoftware.com/archive/2008/01/11/best-asp.net-interview-question-ever-part-1.aspx"&gt;Last time&lt;/a&gt;, I whined about ASP.net byte bloat. As long as I'm bitching about Microsoft's internet platform, I might as well hold nothing back. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Microsoft doesn't care enough about Internet Explorer.&lt;/strong&gt; It is the red headed step child of Microsoft's internet platform. MS seriously lost a lot of client side credibility and goodwill by disbanding the Windows IE team for 3+ years after Windows XP / IE 6 shipped and letting the &lt;a href="http://www.mozilla.com/en-US/about/"&gt;Mozilla / Firefox team&lt;/a&gt; catch up and surpass it.&lt;br /&gt;
&lt;br /&gt;
I'm sure &lt;a href="http://www.theregister.co.uk/2005/12/19/ms_kills_ie_mac/"&gt;killing Mac IE&lt;/a&gt; &amp;amp; &lt;a href="http://www.extremetech.com/article2/0,1697,587342,00.asp"&gt;killing Unix IE&lt;/a&gt; didn't help matters either (not that anybody ever used them). Shipping a mediocre IE 7 along with a &lt;a href="http://blog.caffeinatedsoftware.com/archive/2007/04/15/My-Vista-Test-Drive.aspx"&gt;disappointing Vista&lt;/a&gt; last year, has further hindered Microsoft's ability to convince people that it does have a great server side web platform and annoyed its supporters. I'm also annoyed that after IE 7 shipped, the &lt;a href="http://blogs.msdn.com/ie/"&gt;IE blog&lt;/a&gt; has been less informative during the IE 8 dev cycle than it was during IE 7's. I'm optimistic that after the recent &lt;a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx"&gt;IE 8 Acid Test&lt;/a&gt; post, the group is just being quiet instead of dead. &lt;/p&gt;
&lt;p&gt;However, barring a &lt;a href="http://seattletimes.nwsource.com/html/jerrybrewer/2004109750_brewer06.html"&gt;Seahawk like comeback&lt;/a&gt; by the IE 8 team, my money is on &lt;a href="http://mozillalinks.org/wp/category/subject/firefox3/"&gt;Firefox 3&lt;/a&gt; being the champ in the 2008 browser bowl. Ever since &lt;a href="http://blogs.msdn.com/dmassy/"&gt;Coach Dave Massy left the IE team&lt;/a&gt;, I think they've taken a step backwards. Maybe they need to give IE to Coach &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt; (GM for all things &lt;a href="http://www.iis.net"&gt;IIS&lt;/a&gt;, &lt;a href="http://asp.net/"&gt;ASP.net&lt;/a&gt;, &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;, and all other MS web technologies that don't suck) or perhaps the GM Windows Live team (Did you know &lt;a href="http://weblogs.mozillazine.org/mitchell/archives/2007/01/the_mozilla_foundation_achievi.html"&gt;Firefox development is almost completely funded by Google ad revenue&lt;/a&gt;?) All I know is that IE is too important to be left in the Windows group. Microsoft needs to show more forward progress and give the season ticket holders reason to be hopeful. Otherwise, IE will be like Shaun Alexander, a browser/back that has a great history and a disappointing present.&lt;br /&gt;
&lt;br /&gt;
OK, I got the big 2 gripes off my chest. Here are some minor ones. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why does ASP.net AJAX download so many Javascript files? &lt;/strong&gt;I think there's a new &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2007/06/12/toolkitscriptmanager-there-s-a-new-scriptmanager-in-town.aspx"&gt;ScriptManager on CodePlex&lt;/a&gt; that combines several embedded scripts on a single download. Still, it would've been nice if it was this way by default.&lt;strong&gt;&lt;br /&gt;
&lt;br /&gt;
Why is HTTP compression the best kept secret of IIS? &lt;/strong&gt;Seriously, it seems the vast majority ASP.net programmers don't know about HTTP compression on IIS. Maybe all of my friends read &lt;a href="http://dilbert.com/"&gt;Dilbert&lt;/a&gt; instead of &lt;a href="http://www.codinghorror.com/blog/archives/000059.html"&gt;Jeff Atwood&lt;/a&gt; during their lunch break? OK, it is a &lt;a href="http://www.dotnetjunkies.com/HowTo/16267D49-4C6E-4063-AB12-853761D31E66.dcik"&gt;pain to configure&lt;/a&gt; and providing some UI, like what &lt;a href="http://www.port80software.com/products/zipenable/"&gt;Port 80 Software's ZipEnable&lt;/a&gt; does, would be welcome. People get nervous when I say edit the IIS metabase around them.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Why did I have to wait so long for a real FTP server? &lt;/strong&gt;Oh well, at least &lt;a href="http://www.iis.net/articles/view.aspx/IIS7/Managing-IIS7/Using-FTP-Server-in-IIS7/What-s-New-for-Microsoft-and-FTP-"&gt;things are better in IIS 7&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
As I said, in my first post, on the whole, I'm pretty happy with Microsoft's internet platform. The ASP.net team is adding cool features at a good clip, Silverlight seems like a promising addition to the web developer's tool chest, and IIS 6 has been simple to use &amp;amp; rock solid in deployment. It seems like half of the ASP.net engineering team blogs, so getting that level of transparency is awesome. Visual Studio 2008 &amp;amp; SQL Server 2008 both seem like worthwhile upgrades.  &lt;/p&gt;
&lt;p&gt;And yet, despite all this coolness, I still have to code work-a-rounds for IE 6 bugs in my day to day life! To be fair to Microsoft, IE 6 &lt;em&gt;was&lt;/em&gt; a great browser in 2001. Unfortunately, it's 2008 now and Microsoft fumbled away the web browsing technology dominance it once had. We're all stuck writing apps for a 7 year old web browser, that doesn't compare well to today's best players. Oh well, here's hoping that both IE &amp;amp; 37 will return to All-Pro form next season.&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/32.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2008/01/12/best-asp.net-interview-question-ever-part-2.aspx</guid>
            <pubDate>Sat, 12 Jan 2008 17:59:39 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/32.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2008/01/12/best-asp.net-interview-question-ever-part-2.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/32.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/32.aspx</trackback:ping>
        </item>
        <item>
            <title>Best ASP.net Interview Question Ever (Part 1) </title>
            <category>C# / ASP.net</category>
            <category>Jobs / Career</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2008/01/11/best-asp.net-interview-question-ever-part-1.aspx</link>
            <description>&lt;p&gt;&lt;img border="0" align="right" alt="Comic Book Guy ponders ASP.net" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/011208_0756_BestASPnetI1.gif" title="Comic Book Guy ponders ASP.net" /&gt;I recently I had a job interview w/ &lt;a href="http://www.costco.com"&gt;Costco Wholesale&lt;/a&gt; in the e-Commerce group. I thought the most interesting question they asked was "If you could change one thing about ASP.net, what would it be". It was a hard question, because on the whole, I'm pretty happy with it. Furthermore, on the whole, I'm pretty happy with the direction that Microsoft is going. However, it got me thinking about what I don't like about Microsoft's internet platform and I figured it would make a great blog post (or two), so here I go. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Viewstate + ClientID = HTML Bloat + Slow.&lt;/strong&gt; I don't think the ASP.net forms model is bad; it just makes it much more difficult than necessary to produce small HTML markup in the typical case. For example, let's say I have ASP.net code something like this  &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:Repeater &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="rptCards"&lt;/span&gt;&lt;span style="color: red;"&gt; runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="Server"&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ItemTemplate&lt;/span&gt;&amp;gt;&lt;code&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:Image &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="CardFace"&lt;/span&gt;&lt;span style="color: red;"&gt; runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="CardName"&lt;/span&gt;&lt;span style="color: red;"&gt; runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ItemTemplate&lt;/span&gt;&amp;gt;&lt;code&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:Repeater&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;And then I data bind a playing card to my repeater in the code behind file, which ASP.net proceeds to render it as this…&lt;br /&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="ctl00"&lt;/span&gt;&lt;span style="color: red;"&gt; method&lt;/span&gt;&lt;span style="color: blue;"&gt;="post"&lt;/span&gt;&lt;span style="color: red;"&gt; action&lt;/span&gt;&lt;span style="color: blue;"&gt;="form.aspx"&lt;/span&gt;&lt;span style="color: red;"&gt; id&lt;/span&gt;&lt;span style="color: blue;"&gt;="ctl00"&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="hidden"&lt;/span&gt;&lt;span style="color: red;"&gt; name&lt;/span&gt;&lt;span style="color: blue;"&gt;="__VIEWSTATE"&lt;/span&gt;&lt;span style="color: red;"&gt; id&lt;/span&gt;&lt;span style="color: blue;"&gt;="__VIEWSTATE"&lt;/span&gt;&lt;span style="color: red;"&gt; 					&lt;br /&gt; value&lt;/span&gt;&lt;span style="color: blue;"&gt;="/wEPDwULLTEyODIyNzUwMDAPZBYCAgEPZBYCAgEPFgIeC18hSXRlbUNvdW50AgEWAmYPZBYEAgEPDxY&lt;br /&gt; CHghJbWFnZVVybAUTL2NhcmRzLmFzcHg/Y2FyZD00NmRkAgMPDxYCHgRUZXh0BQ9RdWVlbiBvZiBIZWFydHNkZ&lt;br /&gt; GQAQrEoOi46tPS8NZ9nekUDim2+Mg=="&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/code&gt; &lt;code&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;img &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="rptCards_ctl00_CardFace"&lt;/span&gt;&lt;span style="color: red;"&gt; src&lt;/span&gt;&lt;span style="color: blue;"&gt;="/cards.aspx?card=46"&lt;/span&gt;&lt;span style="color: red;"&gt; style&lt;/span&gt;&lt;span style="color: blue;"&gt;="border-width:0px;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="rptCards_ctl00_CardName"&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;Queen of Hearts&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What's with the &amp;lt;div&amp;gt; surrounding the &lt;span style="color: blue; font-family: Courier New; font-size: 10pt;"&gt;__VIEWSTATE&lt;/span&gt; control? Where did that &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="border-width:0px;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; 		&lt;/span&gt;come from? Why is there so much damn view state? Why do my Image and Label controls render IDs on the client? And why is it named &lt;span style="color: blue;"&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;rptCards_ctl00_CardFace&lt;/span&gt; 		&lt;/span&gt;instead of something shorter, such as &lt;span style="color: blue; font-family: Courier New; font-size: 10pt;"&gt;rptCards_0_CardFace&lt;/span&gt;?  &lt;/p&gt;
&lt;p&gt;Sometimes I have nested repeaters, sometimes I don't. Sometimes I use HTML controls instead of Web Controls, but the issue is the same. The elements in question aren't getting changed on the client and only get changed on the server during the initial HTTP GET during data binding. Normally, the &lt;span style="color: blue; font-family: Courier New; font-size: 10pt;"&gt;__VIEWSTATE&lt;/span&gt; just grows &amp;amp; grows as I add more stuff to the page. OK, you can avoid this by a few well placed &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: red;"&gt;EnableViewState&lt;/span&gt;&lt;span style="color: blue;"&gt;="false"&lt;/span&gt;&lt;/span&gt; or disabling it altogether in web.config. Unfortunately, I don't always know when you really need it, so often times I end up disabling it on a control by control basis in a trial and error fashion, until my app works and my markup is small. Unless you &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ViewState.asp"&gt;truly understand viewstate&lt;/a&gt;, you could end up meeting a fatal end with &lt;a href="http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx"&gt;ViewState-ious of Borg&lt;/a&gt;. Fortunately, I understand that problem. &lt;/p&gt;
&lt;p&gt;What bothers me more is ID bloat, especially when you nest Repeaters, so an innocent looking &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:Hyperlink&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; control ends up with an ID like...&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: Courier New; font-size: 10pt;"&gt;rptMerchants_ctl01_rptShippingMethods_ctl00_rptLineItems_ctl00_ProductName&lt;/span&gt;, &lt;br /&gt;
&lt;br /&gt;
That's ugly, so I end up using shorter IDs for Repeaters. Unfortunately, that's not good enough at times, so I usually end up replacing many of my server controls with &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:Literal&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; controls and controlling my markup directly. Unfortunately, doing that stops you from using the server control you really wanted to use, and makes complex page development a huge pain. &lt;/p&gt;
&lt;p&gt;Ideally, what I'd like is a &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: red;"&gt;RenderClientIDs&lt;/span&gt;&lt;span style="color: blue;"&gt;="false"&lt;/span&gt;&lt;/span&gt; attribute for all ASP.net server controls. After all, the ID isn't sent to the server on the postback (just name / value pairs from form controls). You really only need it on the client if you are doing client side DOM/DHTML manipulation. I know you need a Control ID as a parameter to &lt;span style="color: maroon; font-family: Courier New; font-size: 10pt;"&gt;__doPostBack&lt;/span&gt;, but I usually don't need it on the client side HTML markup. It also seems odd that ASP.net is missing a &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: red;"&gt;RenderClientIDs&lt;/span&gt;&lt;span style="color: blue;"&gt; 			&lt;/span&gt;&lt;/span&gt;attribute since they did have the foresight to create an &lt;span style="color: red; font-family: Courier New; font-size: 10pt;"&gt;EnableViewState&lt;/span&gt; attribute on server controls.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Most of the time, a Hyperlink control is just an &amp;lt;a&amp;gt; HTML tag, a Label control is just a &amp;lt;span&amp;gt; HTML tag, and an Image control is just an &amp;lt;img&amp;gt; HTML tag, so the ID attribute is just byte bloat running up my bandwidth bill. Why is it so hard to just get this instead?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;img &lt;/span&gt;&lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;="/cards.aspx?card=46"&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;Queen of Hearts&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: Arial,Verdana,Sans-Serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Is there a diet control library I don't know about or some magic web.config setting to stop unneeded ClientIDs from rendering? How does one fight ClientID bloat? Should I just wait for an &lt;a href="http://www.infoq.com/news/2007/12/MVC-vs-Web-Forms"&gt;MVC version of ASP.net&lt;/a&gt;? I'm kind of lukewarm on the whole MVC thing because of ignorance and the lingering bad taste of classic ASP. I don't mind paying the ASP.net tax, when it adds more value than byte bloat. It just annoys me, that I have resort to &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:Literal&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; controls to avoid paying the ASP.net tax in some cases. &lt;/p&gt;
&lt;p&gt;So what are the downsides of MVC ASP.net vs Classic ASP.net? Will my &lt;a href="http://www.componentart.com/"&gt;favorite 3rd party ASP.net web control product&lt;/a&gt; work on it? Do I just need to read &lt;a href="http://haacked.com/archive/2007/12/13/thank-you-for-helping-me-with-my-job-with-asp.net.aspx"&gt;Phil Haack's blog&lt;/a&gt; and &lt;a href="http://www.hanselman.com/blog/January2008PADNUGMeetingShouldYouFearMVCForASPNET.aspx"&gt;Scott Hanselman's blog&lt;/a&gt; more often? Any idea when an &lt;a href="http://msdnevents.com/"&gt;MSDN event&lt;/a&gt; will cover MVC ASP.net? Oh well, it beats tracking down memory or COM interface leaks in an ISAPI application for a living.&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/31.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2008/01/11/best-asp.net-interview-question-ever-part-1.aspx</guid>
            <pubDate>Sat, 12 Jan 2008 07:56:42 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/31.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2008/01/11/best-asp.net-interview-question-ever-part-1.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/31.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/31.aspx</trackback:ping>
        </item>
        <item>
            <title>Look at the size of that thing!</title>
            <category>Hardware / Toys</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2007/07/21/look-at-the-size-of-that-thing.aspx</link>
            <description>&lt;p&gt;As some of you know, I've been looking for &lt;a href="http://www.raincityguide.com/2007/05/14/redfin-on-60-minutes-%e2%80%93-something-to-monitor/"&gt;a second monitor for my home workstation&lt;/a&gt; for a while now. I finally coerced my spousal unit to let me buy one, and I finally figured out what make / model I wanted, and saved up enough pennies to get something good. I ended up getting Dell's new &lt;a href="http://accessories.us.dell.com/sna/productdetail.aspx?c=us&amp;amp;l=en&amp;amp;s=bsd&amp;amp;cs=04&amp;amp;sku=320-5647"&gt;2407 WFP-HC 24" Widescreen LCD monitor&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;My former primary monitor (and my new secondary monitor) is a &lt;a href="http://www.neoseeker.com/Articles/Hardware/Reviews/samsung213t/"&gt;Samsung 213T 21" LCD Monitor&lt;/a&gt;. Although, the Samsung was the best monitor available that I could afford a few years ago, it doesn't hold a candle to the new Dell. Literally, the Samsung only has a brightness level of 250 cd/m&lt;sup&gt;2&lt;/sup&gt;, while the Dell measures at 400 cd/m&lt;sup&gt;2&lt;/sup&gt;. It's not night and day, but it's like sunset and mid day (a big difference).&lt;/p&gt;
&lt;img align="right" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/072107_1846_Lookatthesi1.png" alt="" /&gt;
&lt;p&gt;Another difference is the color gamut on this thing is amazing (92% of the NTSC standard). For example, on my Samsung it was hard to tell the difference between the light grey context menu and white window background. On the Dell, the difference is much more noticeable. &lt;/p&gt;
&lt;p&gt;Another data point, &lt;a href="http://www.istartedsomething.com/20070203/interview-hamad-darwish/"&gt;Hamad Darwish's&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/darwishh/358170717/in/set-72157594510047657/"&gt;A Peek at the Peak&lt;/a&gt; Vista wallpaper on the Dell looks very life like. I'm sure with some cold fresh mountain air; I wouldn't be able to distinguish it from reality. On the Samsung, it looks like I'm looking through dark &amp;amp; dirty sunglasses. &lt;/p&gt;
&lt;p&gt;Both monitors have horizontal and vertical tilt adjustable stands. Even better, both monitors support portrait mode The Dell goes beyond that standard, by also supporting a height adjustable stand, a USB hub, 9-in-2 card reader, S-Video, composite, and component video inputs. &lt;/p&gt;
&lt;p&gt;I also considered the &lt;a href="http://www.amazon.com/Samsung-SyncMaster-245BW-LCD-Monitor/dp/B000P6MOG2/ref=pd_bbs_1/103-4915971-6303000?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1185040497&amp;amp;sr=8-1"&gt;Samsung SyncMaster 245BW&lt;/a&gt;, although the picture quality was very good, Samsung cut the portrait mode feature from their new monitor (which was a deal breaker for me, since I've used and liked that feature on my old Samsung 213T). I briefly considered a &lt;a href="http://www.gateway.com/accessories/product/1541000R.php?seg=hm"&gt;Gateway FPD2485W&lt;/a&gt;, which did have portrait mode and many of the features that the 245BW lacked. Unfortunately, the picture quality wasn't as good as the Samsung. I also looked at the &lt;a href="http://computerstop.com/product.aspx?n=moacer038"&gt;Acer AL2416&lt;/a&gt; the local Computer Stop. The picture quality is good, but the Acer lacks every feature desirable (you can't even tilt it) and frankly why get a Hyundai when you can get a Lexus. &lt;/p&gt;
&lt;p&gt;Anyway, I just wanted to let the world know, if you're in the market for a new monitor, I highly recommend the Dell 2407 WFP-HC.&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/30.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2007/07/21/look-at-the-size-of-that-thing.aspx</guid>
            <pubDate>Sat, 21 Jul 2007 18:46:15 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/30.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2007/07/21/look-at-the-size-of-that-thing.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/30.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/30.aspx</trackback:ping>
        </item>
        <item>
            <title>Storing images in the database – good or bad idea?</title>
            <category>Real Estate</category>
            <category>SQL / T-SQL</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2007/06/26/storing-images-in-the-database--good-or-bad-idea.aspx</link>
            <description>&lt;p&gt;&lt;img align="left" alt="" src="http://blog.caffeinatedsoftware.com/images/blog_caffeinatedsoftware_com/062607_1617_Storingimag1.jpg" /&gt;As many of you know, I write real estate web applications for fun and profit. I have to admit it really is an interesting area for innovative web applications. After all, writing a modern IDX solution requires taking advantage of AJAX technologies, mastering a web based mapping platform (like Microsoft Virtual Earth or Google Maps), integration w/ 3&lt;sup&gt;rd&lt;/sup&gt; party APIs and web sites (such as Zillow or Trulia), pretty dynamic SQL, and handling large amounts of graphical images. Needless to say, it can pose some interesting technical challenges at times. &lt;/p&gt;
&lt;p&gt;I'm in the midst of an application architecture upgrade; I'm currently debating how I want store my MLS images. I currently store broker specific images in a database (currently just agent photos and property management photos). My biggest customer (&lt;a href="http://www.rentseattle.com"&gt;Real Property Associates&lt;/a&gt;) has about 70 agent photos and 2000 property images stored in a database, (I currently use ASP.NET HTTP handlers to extract images out of the DB and re-size said image on the fly before I send the response stream to the browser). The NWMLS images are on the file system scattered in one of a thousand subdirectories.  &lt;/p&gt;
&lt;p&gt;Although this arrangement is more efficient than storing all 474,589 or so NWMLS images in a single directory, it's painful to deal with. Deleting photos for sold or expired listings is like &lt;a href="http://en.wikipedia.org/wiki/Spelunking"&gt;going spelunking&lt;/a&gt; instead of doing a DELETE * FROM … WHERE … SQL query. SELECT queries are a lot more flexible that DIR commands. Modifying data only requires one set of DB permissions instead of setting file system permissions on a thousand directories. I don't have to worry about the physical location of my data, since it's just a SELECT query away (regarding of where SQL ends up putting it). Adding meta data is just an ALTER TABLE … ADD COLUMN … SQL command away. In short, even if SQL Server is slower than the file system, the &lt;a href="http://forums.asp.net/p/1096999/1658599.aspx"&gt;benefits of dealing with it&lt;/a&gt; instead are worth the price, &lt;em&gt;so far&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sqlteam.com/article/images-and-sql-server"&gt;Conventional wisdom is that you don't store images in SQL server&lt;/a&gt;. Unfortunately, my good experience with smaller data sets is leading me to believe that conventional wisdom is wrong. Then again, there's a world of difference between 2000 images and a number hovering 25K shy of half a million images. In my case, the images tend to be smaller JPEGs (about 400 x 300 in size) usually hovering around 50K, and I suspect (though I don't know), as long as the size of the images are small-ish, the performance penalty you'll pay &lt;em&gt;appears&lt;/em&gt; to be comparatively is minor. My DBA guru friends have told me as long as the image sizes are small, it should be fine. SQL finding a BLOB via a primary key should be pretty quick. &lt;/p&gt;
&lt;p&gt;Of course, the only way to find out for sure is to go for it (and see if you regret it later). I suppose, I already know the answer I want to hear. I just want to feel good about it before I go ahead and database-tize my NWMLS image set. Rumor has it that &lt;a href="http://blogs.msdn.com/pedram/archive/2007/06/04/store-any-data-in-sql-server-2008-katmai.aspx"&gt;SQL 2008 has a new FileStream datatype&lt;/a&gt;, that stores BLOBs in the file system, but yet remain an integral part of the database with &lt;a href="http://msdn2.microsoft.com/en-us/library/aa363764.aspx"&gt;&lt;em&gt;transactional consistency&lt;/em&gt;&lt;/a&gt;, so perhaps I should wait? Ironically, doing nothing (and waiting for Microsoft to fix the problem) is sometimes the smartest design decision you can make. &lt;/p&gt;
&lt;p&gt;So does anybody have any good or bad experiences with storing images in their DB / Web applications? How big of a dataset are you storing in the DB? How big of a dataset are you displaying in the web browser window? How do the &lt;a href="http://www.flexmls.com/blog"&gt;MLS Vendors&lt;/a&gt; deal with this problem? &lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/29.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2007/06/26/storing-images-in-the-database--good-or-bad-idea.aspx</guid>
            <pubDate>Tue, 26 Jun 2007 16:17:26 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/29.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2007/06/26/storing-images-in-the-database--good-or-bad-idea.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/29.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/29.aspx</trackback:ping>
        </item>
        <item>
            <title>Toy with Sploggers w/ Dynamic Images  </title>
            <category>Blogging</category>
            <category>C# / ASP.net</category>
            <link>http://blog.caffeinatedsoftware.com/archive/2007/05/12/Toy-with-Sploggers-w-Dynamic-Images.aspx</link>
            <description>&lt;p&gt;Over at my &lt;a href="http://www.raincityguide.com/2007/05/11/steel-this-blog-post-friday-fun-with-splog-busters/"&gt;second home&lt;/a&gt;, I talked about how to annoy sploggers w/ a dynamic image. A dynamic image is merely any image generated programmatically at request time. So with a dynamic image, you have total control of the content that will get displayed when the url gets requested. &lt;/p&gt;
&lt;p style="background: white none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Typically, when a splogger copies a blog post, they often times leave all the original hyperlinks and images links intact. Sploggers are lazy folks. If they are too lazy to write their own blog post, they are usually too lazy to edit yours. So if they do hotlink to an image on your server, they are now dependent on your server to serve that image request. And this is why we can change the image out from underneath them and have fun with them. &lt;/p&gt;
&lt;p style="background: white none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;If you're interested in more background on this sort of thing, I'd recommend you check out &lt;a href="http://www.hanselman.com/blog/ABoilerplateHttpHandler.aspx"&gt;Scot Hanselman's Computer Zen&lt;/a&gt; blog post on HttpHandlers. Anyway, here's how my variation worked… &lt;/p&gt;
&lt;p style="background: white none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;This first thing I did is write code to generate a text warning message… Nearly all modern web development frameworks have the ability to generate images on the fly, and put the generated bitmap on the request's response stream. So here's some C# code that draws some text in a solid colored rectangle. &lt;/p&gt;
&lt;div style="background: white none repeat scroll 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: Courier New;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Bitmap&lt;/span&gt; GetSploggerWarning(&lt;span style="color: blue;"&gt;string&lt;/span&gt; text)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Create the objects we need for drawing&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Bitmap&lt;/span&gt; bmp = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Bitmap&lt;/span&gt;(350, 200);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Graphics&lt;/span&gt; gr = System.Drawing.&lt;span style="color: rgb(43, 145, 175);"&gt;Graphics&lt;/span&gt;.FromImage(bmp);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Create our background colored rectangle&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;SolidBrush&lt;/span&gt; fill = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SolidBrush&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Color&lt;/span&gt;.Purple);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Rectangle&lt;/span&gt; rect = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Rectangle&lt;/span&gt;(0, 0, 350, 200);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    gr.FillRectangle(fill, rect);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Draw our text so it's big, centered &amp;amp; anti-aliased&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Font&lt;/span&gt; font = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Font&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Arial"&lt;/span&gt;, 24, &lt;span style="color: rgb(43, 145, 175);"&gt;GraphicsUnit&lt;/span&gt;.Pixel);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;SolidBrush&lt;/span&gt; textbrush = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SolidBrush&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Color&lt;/span&gt;.White);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    gr.TextRenderingHint = &lt;span style="color: rgb(43, 145, 175);"&gt;TextRenderingHint&lt;/span&gt;.AntiAlias;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;StringFormat&lt;/span&gt; stringFormat = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;StringFormat&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    stringFormat.Alignment = &lt;span style="color: rgb(43, 145, 175);"&gt;StringAlignment&lt;/span&gt;.Center;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    stringFormat.LineAlignment = &lt;span style="color: rgb(43, 145, 175);"&gt;StringAlignment&lt;/span&gt;.Center;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    gr.DrawString(text, font, textbrush, rect, stringFormat);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Clean up our mess and return the image&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    gr.Dispose();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; bmp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;!--EndFragment--&gt;OK, now that we have the images we want to use, we need to write code which will generate a different image depending on the circumstance. So, what I did is look at the &lt;a href="http://us.php.net/reserved.variables"&gt;HTTP_REFERER header&lt;/a&gt; from the current request. If a web browser requests an image from a web page, it will usually place the url of the page which is requesting the image in the HTTP_REFERER header. However if a web browser requests the image directly you may not get that header in the request. Also, I've read that &lt;a href="http://www.thescripts.com/forum/thread335224.html"&gt;Norton Internet Security&lt;/a&gt; strips out the header and I'm sure proxy servers that muck with the headers too. In short, you can't count on that header being there. &lt;/p&gt;
&lt;p&gt;Also, it's important to note that the value in this header can't be trusted. If the image is being requested by web browser there's a good chance it'll have the value you expect. However, there's nothing preventing a hacker from creating an HTTP request that is identical to the one a page from your domain would create. So, it's is really only effective if they retrieve the image from a sploggers web page. &lt;/p&gt;
&lt;div style="background: white none repeat scroll 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: Courier New;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; ProcessRequest(&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContext&lt;/span&gt; context)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;HttpRequest&lt;/span&gt; Request = context.Request;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;HttpResponse&lt;/span&gt; Response = context.Response;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Bitmap&lt;/span&gt; bmp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; message = &lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.Empty;       &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; hostingdomain = &lt;span style="color: rgb(163, 21, 21);"&gt;"raincityguide.com"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Request.UrlReferrer == &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: green;"&gt;// Handle the case of the image not being on a web page&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        bmp = GetSploggerWarning(&lt;span style="color: rgb(163, 21, 21);"&gt;"Don't SPLOG!\n Fight SPLOG!"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!Request.UrlReferrer.Host.EndsWith(hostingdomain))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: green;"&gt;// Handle the case of another domain's page, using my image&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        message = &lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.Format(&lt;span style="color: rgb(163, 21, 21);"&gt;"{0} is a SPLOG! Please visit {1}."&lt;/span&gt;,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;            Request.UrlReferrer.Host,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;            hostingdomain);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        bmp = GetSploggerWarning(message);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: green;"&gt;// Handle the case my domain's page, using my image&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        message = &lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.Format(&lt;span style="color: rgb(163, 21, 21);"&gt;"This image was paid for by {0} "&lt;/span&gt; +&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;            &lt;span style="color: rgb(163, 21, 21);"&gt;"and I approve of its hosting."&lt;/span&gt;,            &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;            hostingdomain);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        bmp = GetSploggerWarning(message);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;br /&gt;
&lt;span style="font-size: 10pt; font-family: Courier New;"&gt;&lt;span style="color: green;"&gt;    // To be continued… &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;OK, now that we got our image, we gotta send it across the wire. The only tricky part is that we have to tell the browser not to cache the image, since otherwise; the browser will reuse the image regardless of the domain it's being hosted on. So if somebody visits your blog and then the splog, it's likely the browser would display the same image in both places because the browser cached the original image, and re-uses it if somebody else refers to it. &lt;/p&gt;
&lt;div style="background: white none repeat scroll 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: Courier New;"&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Set the content type and return the image&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    Response.Clear();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    Response.ContentType = &lt;span style="color: rgb(163, 21, 21);"&gt;"image/png"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Check out &lt;a href="http://www.hanselman.com/blog/ABoilerplateHttpHandler.aspx" style="color: green; text-decoration: underline;"&gt;http://www.hanselman.com/blog/ABoilerplateHttpHandler.aspx&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    Response.Cache.SetExpires(&lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.MinValue);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    Response.Cache.SetNoStore();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    Response.Cache.SetCacheability(&lt;span style="color: rgb(43, 145, 175);"&gt;HttpCacheability&lt;/span&gt;.NoCache);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// To Save a bitmap as PNG, we need a seekable stream, otherwise we&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;    // get a GDI exception. Visit &lt;a href="http://authors.aspalliance.com/chrisg/tools/view-png.vb.aspx" style="color: green;"&gt;Asp alliance&lt;/a&gt; for more details &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;MemoryStream&lt;/span&gt; MemStream = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MemoryStream&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    bmp.Save(MemStream, &lt;span style="color: rgb(43, 145, 175);"&gt;ImageFormat&lt;/span&gt;.Png);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    MemStream.WriteTo(Response.OutputStream);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// dispose of our objects&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    bmp.Dispose();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;!--EndFragment--&gt;Anyway, it's not an industrial strength approach but it's enough to stop the causal splogger from stealing content again. For an industrial strength solution, you'd have to combine this approach with IP black/white and IP geo-location and other tricks that products like &lt;a href="http://www.port80software.com/products/linkdeny/"&gt;Port 80 software's LinkDeny&lt;/a&gt; employ. &lt;/p&gt;
&lt;p&gt;And if &lt;a href="http://www.haacked.com/"&gt;Mr. Haack reads&lt;/a&gt; this and gets around to creating a world class plug-in model for &lt;a href="http://subtextproject.com/"&gt;SubText&lt;/a&gt;, I'd be happy to contribute a basic anti-leach / anti-splog plug-in for it. It's not fair that the WordPress kids have all the fun.&lt;/p&gt;&lt;img src="http://blog.caffeinatedsoftware.com/aggbug/24.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>&lt;i&gt;&lt;b&gt;Caffeinated&lt;/b&gt;&lt;/i&gt; Software</dc:creator>
            <guid>http://blog.caffeinatedsoftware.com/archive/2007/05/12/Toy-with-Sploggers-w-Dynamic-Images.aspx</guid>
            <pubDate>Sat, 12 May 2007 16:15:59 GMT</pubDate>
            <wfw:comment>http://blog.caffeinatedsoftware.com/comments/24.aspx</wfw:comment>
            <comments>http://blog.caffeinatedsoftware.com/archive/2007/05/12/Toy-with-Sploggers-w-Dynamic-Images.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.caffeinatedsoftware.com/comments/commentRss/24.aspx</wfw:commentRss>
            <trackback:ping>http://blog.caffeinatedsoftware.com/services/trackbacks/24.aspx</trackback:ping>
        </item>
    </channel>
</rss>