<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7247346857678227238</atom:id><lastBuildDate>Thu, 16 Feb 2012 20:58:33 +0000</lastBuildDate><category>SR+ED Consulting</category><category>Random</category><category>Microsoft</category><category>Velocity</category><category>MS Build</category><category>Amazon</category><category>Network Availability</category><category>Outsourcing Claims</category><category>Network Issues</category><category>System.Reflection</category><category>Latency</category><category>Security</category><category>Blogger SEO</category><category>MVP Designation</category><category>Azure</category><category>ASP.NET</category><category>Content Distribution Networks</category><category>Runtime Resource Provider</category><category>Productivity</category><category>RSS</category><category>SharePoint Lists</category><category>TCP Chimney</category><category>Windbg</category><category>ASP.NET Troubleshooting</category><category>LinkedIn</category><category>Marketing</category><category>Multi-homing</category><category>StackOverflow</category><category>Community Server</category><category>WCM</category><category>IT Recruitment</category><category>CMS Pricing</category><category>MSMQ Exception Database</category><category>Limelight</category><category>Candidate Assessment</category><category>Public-Facing Sites</category><category>Cloud Computing</category><category>The Data Liberation Front</category><category>Yahoo Pipes</category><category>SharePoint</category><category>Gadgets</category><category>Google Outage</category><category>TCP Offload Engine</category><category>Search</category><category>Google</category><category>Google Sharepoint Killer</category><category>Invalid ViewState</category><category>jquery</category><category>SEO</category><category>Engineering Recruitment</category><category>Enterprise Library</category><category>F5 Global Traffic Manager (GTM)</category><category>Collaboration</category><category>Google Apps SLA</category><category>Scientific Research and Experimental Development</category><category>ASP.NET Localization</category><category>IT Claims</category><category>SR+ED</category><category>Exceptions</category><category>Reputation</category><category>Google Apps</category><category>doesnt-work-with-2.x</category><title>OnPreInit.com</title><description>Nariman Haghighi is a .NET, CMS, SEO consultant based in Toronto, Canada. He helps businesses, large and small, define and execute effective internet strategies.</description><link>http://www.onpreinit.com/</link><managingEditor>noreply@blogger.com (Nariman Haghighi)</managingEditor><generator>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/OnPreInit" /><feedburner:info uri="onpreinit" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>43.649010</geo:lat><geo:long>-79.404545</geo:long><image><link>http://www.onpreinit.com</link><url>http://lh5.ggpht.com/_Bxo856Qd3qg/SpxRETcvCxI/AAAAAAAAANo/nnFDVLR-mTo/s800/NarimanLatest.jpg</url><title>Nariman Haghighi</title></image><feedburner:emailServiceId>OnPreInit</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-4696113010654019253</guid><pubDate>Tue, 02 Nov 2010 22:02:00 +0000</pubDate><atom:updated>2010-11-08T11:58:38.173-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">jquery</category><title>Does a policy prohibiting jQuery in Enterprise applications make sense?</title><description>&lt;p&gt;I just don’t get it, I actually couldn’t believe it at first; what possible justification would there be for the all-out prohibition of jQuery within an Enterprise? Believe it or not, this is actually happening, on the doorsteps of 2011, and in larger numbers than I would’ve imagined.&lt;/p&gt;  &lt;p&gt;Whatever the case may be, here’s an ironclad &lt;strong&gt;top 10 list of why avoiding jQuery is a costly mistake&lt;/strong&gt;:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It’s far and away the most &lt;strong&gt;popular&lt;/strong&gt; and &lt;strong&gt;fastest growing &lt;/strong&gt;JavaScript library on the planet [2] &lt;/li&gt;    &lt;li&gt;It’s arguably the &lt;strong&gt;safest&lt;/strong&gt;, &lt;strong&gt;most scrutinized &lt;/strong&gt;library of its kind with &lt;strong&gt;no open vulnerabilities &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;It’s &lt;strong&gt;more pervasive than IIS &lt;/strong&gt;itself –&amp;#160; in use by &amp;gt; 28% of all websites on the internet [2] [3] &lt;/li&gt;    &lt;li&gt;Even the &lt;strong&gt;US government uses it&lt;/strong&gt; at Whitehouse.gov [2] &lt;/li&gt;    &lt;li&gt;It’s &lt;strong&gt;distributed freely&lt;/strong&gt; across the globe through both MS and Google CDN edge-servers [2] &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.jquery.com/2010/03/16/microsoft-to-expand-its-collaboration-with-the-jquery-community/" rel="nofollow" target="_blank"&gt;Microsoft has committed&lt;/a&gt; to &lt;strong&gt;help with QA testing and code development&lt;/strong&gt;. It also includes jQuery as part of Visual Studio and ASP.NET MVC&amp;#160; [2]; on top of that, Microsoft ‘now offers &lt;strong&gt;actual tech support &lt;/strong&gt;for jQuery as part of their Product Support Services (PSS) as jQuery integration has become part of several of the ASP.NET toolkits’ [5]&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Nokia&lt;/strong&gt; &lt;a href="http://blog.jquery.com/2008/09/28/jquery-microsoft-nokia/" rel="nofollow" target="_blank"&gt;is contributing&lt;/a&gt; with testing and has also hired one of the core developers, Brandon Aaron [2] &lt;/li&gt;    &lt;li&gt;It supports &lt;strong&gt;browsers from virtually a decade ago &lt;/strong&gt;– everything&amp;#160; from IE6 and FF2 onward [1] &lt;/li&gt;    &lt;li&gt;jQuery solutions are &lt;strong&gt;far more supportable&lt;/strong&gt; than their raw-JavaScript counterparts&lt;/li&gt;    &lt;li&gt;Forcing enterprise developers to hand-roll JavaScript is not a solution, just a costlier, more error-prone and less-secure alternative &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Hopefully getting the right information in the hands of decision makers is enough to put this to an end. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In what scenarios have you seen jQuery use prohibited?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;[1]&amp;#160; – Compatibility    &lt;br /&gt;&lt;a title="http://docs.jquery.com/Browser_compatibility" href="http://docs.jquery.com/Browser_compatibility" rel="nofollow" target="_blank"&gt;http://docs.jquery.com/Browser_compatibility&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – jQuery’s triumphant march to success    &lt;br /&gt;&lt;a title="http://royal.pingdom.com/2010/03/26/jquery-triumphant-march-to-success/" href="http://royal.pingdom.com/2010/03/26/jquery-triumphant-march-to-success/" rel="nofollow" target="_blank"&gt;http://royal.pingdom.com/2010/03/26/jquery-triumphant-march-to-success/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_Bxo856Qd3qg/TNCKhGYdmAI/AAAAAAAAAUE/qvyI9dByaqE/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_Bxo856Qd3qg/TNCKhW55rOI/AAAAAAAAAUI/qESe406jdGA/image_thumb%5B5%5D.png?imgmax=800" width="566" height="206" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_Bxo856Qd3qg/TNCKhw1WksI/AAAAAAAAAUM/a4SDL7puQdg/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_Bxo856Qd3qg/TNCKiODK_VI/AAAAAAAAAUQ/t3pMxdxpQ1o/image_thumb%5B2%5D.png?imgmax=800" width="511" height="326" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;[3] – June 2010 Web Server Survey    &lt;br /&gt;&lt;a title="http://news.netcraft.com/archives/2010/06/16/june-2010-web-server-survey.html" href="http://news.netcraft.com/archives/2010/06/16/june-2010-web-server-survey.html"&gt;http://news.netcraft.com/archives/2010/06/16/june-2010-web-server-survey.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – Does a policy prohibiting jQuery in Enterprise applications make sense?    &lt;br /&gt;&lt;a title="http://stackoverflow.com/questions/4082401/does-a-policy-prohibiting-jquery-in-enterprise-applications-make-sense" href="http://stackoverflow.com/questions/4082401/does-a-policy-prohibiting-jquery-in-enterprise-applications-make-sense"&gt;http://stackoverflow.com/questions/4082401/does-a-policy-prohibiting-jquery-in-enterprise-applications-make-sense&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[5] – Microsoft and jQuery&amp;#160; &lt;br /&gt;&lt;a title="http://west-wind.com/weblog/posts/807874.aspx?id=807874" href="http://west-wind.com/weblog/posts/807874.aspx?id=807874" rel="nofollow" target="_blank"&gt;http://west-wind.com/weblog/posts/807874.aspx?id=807874&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-4696113010654019253?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CJp9fIXXq9sxR-LICwjPl9tWNTQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CJp9fIXXq9sxR-LICwjPl9tWNTQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CJp9fIXXq9sxR-LICwjPl9tWNTQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CJp9fIXXq9sxR-LICwjPl9tWNTQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=gHr8PMRZsFg:rdojOmEm0KU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=gHr8PMRZsFg:rdojOmEm0KU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=gHr8PMRZsFg:rdojOmEm0KU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=gHr8PMRZsFg:rdojOmEm0KU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=gHr8PMRZsFg:rdojOmEm0KU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=gHr8PMRZsFg:rdojOmEm0KU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=gHr8PMRZsFg:rdojOmEm0KU:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=gHr8PMRZsFg:rdojOmEm0KU:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/gHr8PMRZsFg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/gHr8PMRZsFg/does-policy-prohibiting-jquery-in.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_Bxo856Qd3qg/TNCKhW55rOI/AAAAAAAAAUI/qESe406jdGA/s72-c/image_thumb%5B5%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2010/11/does-policy-prohibiting-jquery-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-5503804239312345831</guid><pubDate>Tue, 02 Nov 2010 13:26:00 +0000</pubDate><atom:updated>2010-11-04T13:12:48.385-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">StackOverflow</category><category domain="http://www.blogger.com/atom/ns#">Collaboration</category><category domain="http://www.blogger.com/atom/ns#">Reputation</category><title>What the Enterprise Can Learn From StackOverflow.com – Top 3 Lessons</title><description>&lt;p&gt;&lt;strong&gt;Update (Nov 3, 2010)&lt;/strong&gt;: I stand corrected, the &lt;a href="http://twitter.com/michaelfogcreek" rel="nofollow" target="_blank"&gt;president of Fog Creek Software&lt;/a&gt; informed me on &lt;a href="http://twitter.com/michaelfogcreek/status/29501701813" rel="nofollow" target="_blank"&gt;Twitter&lt;/a&gt; that &lt;strong&gt;‘the Stack Overflow Product is actually available for enterprises and a few of the top banks are using it internally”. &lt;/strong&gt;Hopefully we can get more details around this soon…&lt;/p&gt;  &lt;p&gt;Stackoverflow has turned the antiquated concept of basic Q &amp;amp; A into a very successful modern franchise. Enterprises grappling with fostering engagement within their knowledge communities should take note. While this platform is not available to to an internal audience, there are key elements that can still help in shaping your unique strategy.&lt;/p&gt;  &lt;p&gt;Without further ado, here are the &lt;strong&gt;Top 3 StackOverflow Lessons &lt;/strong&gt;for creating an effective knowledge-base:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;&lt;u&gt;Kill&lt;/u&gt; Person-to-Person Collaboration&lt;/strong&gt;       &lt;br /&gt;      &lt;br /&gt;This is the kryptonite of effective knowledge sharing, especially in the Enterprise. Notice that Stackoverflow profiles don’t publish user emails – this is partially to protect the user from unsolicited contact and a flood of questions from newbies, but also to foster &lt;strong&gt;person-to-community &lt;/strong&gt;collaboration. Enterprise Search solutions attempt to ‘open’ content that was previously sealed behind business silos &lt;em&gt;after&lt;/em&gt; the fact – well, you can start by not allowing this content to be hidden in the first place. This is poorly done in most organizations, with most users shying away from public distribution lists to carry personal conversations under the fear of inconveniencing others!       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Make Participation &lt;u&gt;Highly&lt;/u&gt; Addictive&lt;/strong&gt;       &lt;br /&gt;      &lt;br /&gt;Community up-take is the make-it-or-break-it factor for these applications, meaning they must be highly &lt;strong&gt;intuitive&lt;/strong&gt; (low-barrier to entry) and highly &lt;strong&gt;addictive&lt;/strong&gt;. Stackoverflow achieves this delicate balance through a simple yet competitive reputation system that draws out best-of-breed developers simply to compete and to learn from one another.&amp;#160; A slightly refined version of this would work within the Enterprise as well; far too often, the incentive to participate just isn’t there. Before you can reward top participants, you have to start measuring.&amp;#160; &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Recognize Top Contributors &lt;u&gt;Externally&lt;/u&gt;&lt;/strong&gt;       &lt;br /&gt;      &lt;br /&gt;This one is somewhat controversial (like most new ideas are) but imagine a scenario where the ranking of the top contributors within your organization were opened up &lt;strong&gt;externally &lt;/strong&gt;to prying eyes. Sure, this might be a frightening scenario if you’re worried about exposing (and losing) your top talent, but it’s also the strongest reward you can provide, too. Most traditional incentive/reward programs are completely hidden from the outside world, which misses the point, IMO. As nice of a gesture as a jacket or a $100 gift-certificate may be, the real value to heard-working professionals is recognition of their dedication and devotion within the &lt;strong&gt;broader community&lt;/strong&gt;.&amp;#160;&amp;#160; &lt;br /&gt;      &lt;br /&gt;&lt;img src="http://stackoverflow.com/users/flair/4.png" /&gt;       &lt;br /&gt;      &lt;br /&gt;(Now, Stackoverflow promotes ‘flairs’ for different reasons, I think; for one, it’s a highly effective way to spread the word and drive in traffic through a hub-and-spoke model. But I think the implications for external recognition within the Enterprise community are far more profound.) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;What’s your Enterprise doing to embrace the lessons from the Web’s top successes?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;[1] – Finding Opportunity for Success in the Failure of Others    &lt;br /&gt;&lt;a href="http://www.readwriteweb.com/start/2010/10/finding-opportunity-for-succes-in-failure-of-others.php" rel="nofollow" target="_blank"&gt;http://www.readwriteweb.com/start/2010/10/finding-opportunity-for-succes-in-failure-of-others.php&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – What is reputation?    &lt;br /&gt;&lt;a href="http://stackoverflow.com/faq" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/faq&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-5503804239312345831?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IWwFykLU4tRXF1uoisfKMubniVA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IWwFykLU4tRXF1uoisfKMubniVA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IWwFykLU4tRXF1uoisfKMubniVA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IWwFykLU4tRXF1uoisfKMubniVA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=dADR7U9YPxw:ZaLQKIUn48s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=dADR7U9YPxw:ZaLQKIUn48s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=dADR7U9YPxw:ZaLQKIUn48s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=dADR7U9YPxw:ZaLQKIUn48s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=dADR7U9YPxw:ZaLQKIUn48s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=dADR7U9YPxw:ZaLQKIUn48s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=dADR7U9YPxw:ZaLQKIUn48s:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=dADR7U9YPxw:ZaLQKIUn48s:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/dADR7U9YPxw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/dADR7U9YPxw/what-enterprise-can-learn-from.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>4</thr:total><feedburner:origLink>http://www.onpreinit.com/2010/11/what-enterprise-can-learn-from.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-4034393151387921712</guid><pubDate>Tue, 02 Nov 2010 02:58:00 +0000</pubDate><atom:updated>2010-11-02T05:55:42.014-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Search</category><title>Measuring the ROI of Enterprise Search – Making the Case with Numbers</title><description>&lt;blockquote&gt;&lt;/blockquote&gt;  &lt;p&gt;Far too often, the Enterprise Search experience is woefully inadequate and falls noticeably short of the carefully tuned and nurtured experience that internet users have come to expect, courtesy of the heated contest between Google, Bing and Yahoo. One factor that’s not helping to close this innovation lag is the complexity involved in building the clean-cut, formal ROI case that often drives project charters within the Enterprise. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;recognizing that “Enterprise Search” can include a vast spectrum of content sources and content types, each with unique characteristics and limitations, we will focus the discussion here on web-centric content that’s typically served through standard HTML, in both internal and external scenarios.&lt;/p&gt;  &lt;p&gt;So how exactly do you build the business case for overhauling your search implementation? A leading Canadian IT consulting firm, NLC, recently tackled the question head on in their ‘&lt;strong&gt;Building the Business Case for Enterprise Search&lt;/strong&gt;’ whitepaper [1] last week. While maintaining that a formal analysis ‘misses’ the real value of Enterprise Search, the paper does go on to provide a formal approach based on the IDC report, &lt;strong&gt;The Hidden Costs of Information Work (May 2009)&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;The proposed formula boils down to measuring:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Search Cost Today = &lt;/strong&gt;# of knowledge workers X avg. salary (incl. benefits) X % of time spent searching&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Potential Annual Benefit &lt;/strong&gt;= &lt;strong&gt;Search Cost Today &lt;/strong&gt;X &lt;strong&gt;The Search Lift Ratio &lt;/strong&gt;(%)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Once deployed, estimates around ‘&lt;strong&gt;The Search Lift Ratio&lt;/strong&gt;’ can easily be quantified through a combination of A/B testing, measurable and correlated call-to-actions (phone numbers present a challenge here, in some cases), ‘accurate’ time-on-page measurements [5] and traditional survey/feedback polls [4]. &lt;/p&gt;  &lt;p&gt;While the guidance is sound, it is largely based on estimates and, like similar reports before it [6], focuses primarily on the productivity gain; it does, however, offer a compelling, low-cost approach to building the case without relying on metrics that may be available in other areas.&amp;#160; &lt;/p&gt;  &lt;p&gt;The “saves you money” argument, by all accounts, is wildly overshadowed by the broader “makes you money” advantages [2], yes; but, recognizing that corporate culture thrives on the the power of hard numbers, can we do&amp;#160; better upfront in the ‘&lt;strong&gt;reasonably measurable&lt;/strong&gt;’ areas by relying on other metrics?&lt;/p&gt;  &lt;p&gt;Assuming that the business has realized the value of matured analytics, even around legacy search implementations, can we explore these to make a stronger case?&lt;/p&gt;  &lt;p&gt;While some of these are domain-specific, here are other areas that may yield useful ROI nuggets:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Reduced Database Volume =&amp;gt; License/Hardware Savings: &lt;/strong&gt;for high-volume applications that rely on a traditional RDBMS alone for ad-hoc queries or search-based functionality, a well-designed search implementation can significantly reduce the load on those database servers, resulting in both hardware and licensing savings. Through standard profiling tools, the volume of traffic that stands be offloaded to a search infrastructure can be quantified beforehand. Similar hardware/licensing savings (and training/staffing can also be realized in consolidating a fragmented search environment. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Measuring Publication Reach =&amp;gt; Minimizing Sunk Costs: &lt;/strong&gt;in scenarios where content was specifically authored and published for an intended audience, you should be able to measure the &lt;strong&gt;‘publication cost’&lt;/strong&gt; and compare this to the ‘&lt;strong&gt;reach’&lt;/strong&gt; of the content (again, based on call-to-actions or accurate ‘time on page’ measurements). In scenarios where the reach is below a certain threshold, there is a clear and measureable &lt;strong&gt;‘sunk cost’ &lt;/strong&gt;that can be avoided in the future. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Reducing Call Center Volume =&amp;gt; Headcount Reductions&lt;/strong&gt;: assuming that source of call-center calls (both internal and external) are clearly classified (e.g. “I can’t find any information on…”), it should be possible to attribute a portion of call-center volume (by extension, head counts) to inadequate search implementations.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Can you think of others that affect your organization?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;[1] – Building the Business Case for Enterprise Search   &lt;br /&gt;&lt;a title="http://www.nonlinearcreations.com/whitepaper/index.asp?id=23" href="http://www.nonlinearcreations.com/whitepaper/index.asp?id=23" rel="nofollow" target="_blank"&gt;http://www.nonlinearcreations.com/whitepaper/index.asp?id=23&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – In Search of ROI | Search Done Right   &lt;br /&gt;&lt;a title="http://searchdoneright.com/2008/08/in-search-of-roi/" href="http://searchdoneright.com/2008/08/in-search-of-roi/" rel="nofollow" target="_blank"&gt;http://searchdoneright.com/2008/08/in-search-of-roi/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – How search can add real ROI to eCommerce websites   &lt;br /&gt;&lt;a title="http://googleenterprise.blogspot.com/2010/01/how-search-can-add-real-roi-to.html" href="http://googleenterprise.blogspot.com/2010/01/how-search-can-add-real-roi-to.html" rel="nofollow" target="_blank"&gt;http://googleenterprise.blogspot.com/2010/01/how-search-can-add-real-roi-to.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – KISS Insights - It’s so quick to respond that many of your customers will!   &lt;br /&gt;&lt;a title="http://www.kissinsights.com/tour" href="http://www.kissinsights.com/tour" rel="nofollow" target="_blank"&gt;http://www.kissinsights.com/tour&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blog.webanalyticsdemystified.com/weblog/2007/07/on-netratings-and-time-spent-on-site.html" href="http://blog.webanalyticsdemystified.com/weblog/2007/07/on-netratings-and-time-spent-on-site.html" rel="nofollow" target="_blank"&gt;&lt;font color="#333333"&gt;[5] –&lt;/font&gt;&lt;/a&gt; The Problem With Measuring Time Spent on Page    &lt;br /&gt;&lt;a href="http://blog.webanalyticsdemystified.com/weblog/2007/07/on-netratings-and-time-spent-on-site.html" rel="nofollow" target="_blank"&gt;http://blog.webanalyticsdemystified.com/weblog/2007/07/on-netratings-and-time-spent-on-site.html&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://www.marketingpilgrim.com/2007/07/the-problem-with-measuring-time-spent-on-a-web-site.html" href="http://www.marketingpilgrim.com/2007/07/the-problem-with-measuring-time-spent-on-a-web-site.html" rel="nofollow" target="_blank"&gt;http://www.marketingpilgrim.com/2007/07/the-problem-with-measuring-time-spent-on-a-web-site.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[6] – Return on Information:&amp;#160; adding to your ROI with Google Enterprise Search   &lt;br /&gt;&lt;a title="http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//enterprise/pdf/internal_search_roi.pdf" href="http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//enterprise/pdf/internal_search_roi.pdf" rel="nofollow" target="_blank"&gt;http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//enterprise/pdf/internal_search_roi.pdf&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-4034393151387921712?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XtzcSwnlhw24wkL5EVU_W6WrKp8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XtzcSwnlhw24wkL5EVU_W6WrKp8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XtzcSwnlhw24wkL5EVU_W6WrKp8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XtzcSwnlhw24wkL5EVU_W6WrKp8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=Acaw1Oho9L8:tQEDWlwmVz8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=Acaw1Oho9L8:tQEDWlwmVz8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=Acaw1Oho9L8:tQEDWlwmVz8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=Acaw1Oho9L8:tQEDWlwmVz8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=Acaw1Oho9L8:tQEDWlwmVz8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=Acaw1Oho9L8:tQEDWlwmVz8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=Acaw1Oho9L8:tQEDWlwmVz8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=Acaw1Oho9L8:tQEDWlwmVz8:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/Acaw1Oho9L8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/Acaw1Oho9L8/measuring-roi-of-enterprise-search.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2010/11/measuring-roi-of-enterprise-search.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-3868821793357058766</guid><pubDate>Thu, 23 Sep 2010 20:41:00 +0000</pubDate><atom:updated>2010-09-24T07:15:05.108-04:00</atom:updated><title>How to Remove the Evercookie?</title><description>&lt;p&gt;One of my colleagues just sent this out – it’s truly amazing [1]. &lt;/p&gt;  &lt;p&gt;Check out the Web History link that uses a CSS trick to reveal your history (all on the latest FF).&lt;/p&gt;  &lt;p&gt;From the author himself [2]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;evercookie is a javascript API available that produces &lt;strong&gt;extremely persistent cookies&lt;/strong&gt; in a browser. Its goal is to identify a client even after they've removed standard cookies, Flash cookies (Local Shared Objects or LSOs), and others. &lt;/p&gt;    &lt;p align="left"&gt;evercookie accomplishes this by storing the cookie data in several types of storage mechanisms that are available on the local browser. Additionally, if evercookie has found the user has removed any of the types of cookies in question, it recreates them using each mechanism available. &lt;/p&gt;    &lt;p align="left"&gt;Specifically, when creating a new cookie, it uses the following storage mechanisms when available:&lt;/p&gt;    &lt;p align="left"&gt;- Standard HTTP Cookies      &lt;br /&gt;- Local Shared Objects (Flash Cookies)       &lt;br /&gt;- Storing cookies in RGB values of auto-generated, force-cached       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PNGs using HTML5 Canvas tag to read pixels (cookies) back out       &lt;br /&gt;- Storing cookies in and reading out &lt;a href="http://samy.pl/csshack/" rel="nofollow" target="_blank"&gt;Web History&lt;/a&gt;       &lt;br /&gt;- Storing cookies in HTTP ETags       &lt;br /&gt;- Internet Explorer userData storage       &lt;br /&gt;- HTML5 Session Storage       &lt;br /&gt;- HTML5 Local Storage       &lt;br /&gt;- HTML5 Global Storage&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Art is definitely in the eyes of the beholder! &lt;/p&gt;  &lt;p&gt;This is a case of layering several techniques (some known, others new) to create an approach that requires some serious thought to defeat. Much like the MS vulnerability disclosed this week, I think this is more about bringing information to light to promote discussion and progress. As one &lt;a href="http://www.schneier.com/blog/archives/2010/09/evercookies.html" rel="nofollow" target="_blank"&gt;comment&lt;/a&gt; put it, “the bad guys don’t make open source announcements, they keep the code to themselves.”)&lt;/p&gt;  &lt;p&gt;[1] - Researcher Claims 'Evercookie' Can't Be Removed    &lt;br /&gt;&lt;a title="http://threatpost.com/en_us/blogs/frankencookie-developer-builds-bulletproof-web-tracking-tool-092210" href="http://threatpost.com/en_us/blogs/frankencookie-developer-builds-bulletproof-web-tracking-tool-092210" rel="nofollow" target="_blank"&gt;http://threatpost.com/en_us/blogs/frankencookie-developer-builds-bulletproof-web-tracking-tool-092210&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] - Evercookie -- never forget.    &lt;br /&gt;&lt;a title="http://samy.pl/evercookie/" href="http://samy.pl/evercookie/" rel="nofollow" target="_blank"&gt;http://samy.pl/evercookie/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] - Evercookie: A cookie that undeletes itself from 8 different storages    &lt;br /&gt;&lt;a title="http://news.ycombinator.com/item?id=1714446" href="http://news.ycombinator.com/item?id=1714446" rel="nofollow" target="_blank"&gt;http://news.ycombinator.com/item?id=1714446&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-3868821793357058766?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/08mUbqI1MVEGxf9I0cOpv0BSqHM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/08mUbqI1MVEGxf9I0cOpv0BSqHM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/08mUbqI1MVEGxf9I0cOpv0BSqHM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/08mUbqI1MVEGxf9I0cOpv0BSqHM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=BmF6O8hkvn0:DtQd2PblpB8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=BmF6O8hkvn0:DtQd2PblpB8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=BmF6O8hkvn0:DtQd2PblpB8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=BmF6O8hkvn0:DtQd2PblpB8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=BmF6O8hkvn0:DtQd2PblpB8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=BmF6O8hkvn0:DtQd2PblpB8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=BmF6O8hkvn0:DtQd2PblpB8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=BmF6O8hkvn0:DtQd2PblpB8:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/BmF6O8hkvn0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/BmF6O8hkvn0/how-to-remove-evercookie.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2010/09/how-to-remove-evercookie.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-4851370959372395783</guid><pubDate>Tue, 21 Sep 2010 13:08:00 +0000</pubDate><atom:updated>2010-09-21T09:36:06.097-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Security</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><title>ASP.NET Vulnerability Workaround Not Enough</title><description>&lt;p&gt;Microsoft keeps calling this a ‘workaround’ but it’s &lt;strong&gt;mitigation&lt;/strong&gt; at best – sure, for the majority of applications it may be all that’s necessary, but it falls short of cross-the-board prevention. It’s not clear why they’re not more open about the cases that &lt;strong&gt;aren’t covered &lt;/strong&gt;by the suggested workaround but it doesn’t take more than simple reasoning to reveal them. If you’re really concerned about the security of your application, keep reading. &lt;/p&gt;  &lt;p&gt;Let’s go back to basics and look at where this issue stems from – all you need to do is differentiate between &lt;a href="http://www.gdssecurity.com/l/b/2010/09/14/automated-padding-oracle-attacks-with-padbuster/" rel="nofollow" target="_blank"&gt;these three cases&lt;/a&gt;…&lt;/p&gt;  &lt;p&gt;&lt;i&gt;When the application is passed an encrypted value, it responds in one of three ways:&lt;/i&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;i&gt;When a valid ciphertext is received (one that is properly padded and contains valid data) the application responds normally (200 OK)&lt;/i&gt;&lt;/li&gt;    &lt;li&gt;&lt;i&gt;When an invalid ciphertext is received (one that, when decrypted, does not end with valid padding) the application throws a cryptographic exception (500 Internal Server Error)&lt;/i&gt;&lt;/li&gt;    &lt;li&gt;&lt;i&gt;When a valid ciphertext is received (one that is properly padded) but decrypts to an invalid value, the application displays a custom error message (200 OK)&lt;/i&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And depending on how your application uses encryption, you are &lt;a href="http://blogs.microsoft.co.il/blogs/linqed/archive/2010/09/19/padding-oracle-asp-net-vulnerability-explanation.aspx" rel="nofollow" target="_blank"&gt;still able to do this&lt;/a&gt; even with a constant error page – here’s one blogger’s explanation (misses the point, IMO):&lt;/p&gt;  &lt;blockquote&gt;   &lt;h5&gt;How about Microsoft’s workaround? &lt;/h5&gt;    &lt;p&gt;Well, while the workaround contains a really valuable information, relevant for every system (as for not disclosing the real error), and it will prevent the automated tool released by the researchers to hack your system, it will, by far, &lt;strong&gt;NOT &lt;/strong&gt;protect you from a potential attack!&lt;/p&gt;    &lt;p&gt;How so? The workaround assumes that the potential attacker will look for an HTTP error response status (500), or for an error page containing a specific exception message. However, it is enough for attacker to recognize an abnormal, or just different system behavior on certain requests.&lt;/p&gt;    &lt;p&gt;Let’s get back to our ASP.NET system that stores an encrypted sensitive information in a cookie. Each request, the system will probably decrypt this information and use it. In case the ciphertext in a cookie is invalid, an exception will be thrown, and the system may act according to one of the following scenarios:&lt;/p&gt;    &lt;p&gt;· Return a 500 error response&amp;#160; - very user unfriendly! &lt;/p&gt;    &lt;p&gt;· Return a default ASP.NET YSOD exception page - extremely bad in production environment! &lt;/p&gt;    &lt;p&gt;· Return a page stating only the exception’s message - also very bad! &lt;/p&gt;    &lt;p&gt;· Return a constant page, stating there was an error, without providing details– a good practice, this is actually the Microsoft’s workaround &lt;/p&gt;    &lt;p&gt;· “Swallow” the exception, and behave like the cookie does not exist. The response may be a redirect to another pager, or just a a slightly changed HTML (instead of user’s name, a “login” link) – This is the way ASP.NET Forms Authentication works. &lt;/p&gt;    &lt;p&gt;Note that &lt;strong&gt;every one&lt;/strong&gt; of the possible responses is different from the normal one. Even the last scenario I’ve described above, as clean as it is, still returns a distinctively different response. Therefore, an attacker can take advantage of it, and write a simple script that infers this abnormal behavior to an &lt;em&gt;Invalid&lt;/em&gt; Oracle’s answer. It is that simple!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That’s mostly write, except that it’s not sufficient to detect &lt;strong&gt;&lt;em&gt;any&lt;/em&gt;&lt;/strong&gt; error condition – you need to be able to discern between &lt;strong&gt;two specific error conditions&lt;/strong&gt; (ciphertext not correctly padded vs. ciphertext is correctly padded but decrypts to an invalid value). &lt;/p&gt;  &lt;p&gt;If visitors to your site can do this, you’re still vulnerable. Here’s a scenario: you don’t rely on Forms Authentication, but instead have a custom authentication scheme that relies on encrypted cookies. If an invalid cookie is submitted, you treat the user as anonymous; but if an exception is thrown during decryption, Application_Error kicks in. This scenario, not entirely uncommon, still allows the attacker to replay the request and differentiate between the 3 possible replies. &lt;/p&gt;  &lt;p&gt;How does your application respond in these scenarios and how confident are you of the answer?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-4851370959372395783?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V2G-5SN7OIusa_46YvK8TurKjX8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V2G-5SN7OIusa_46YvK8TurKjX8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V2G-5SN7OIusa_46YvK8TurKjX8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V2G-5SN7OIusa_46YvK8TurKjX8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=GDzhVqyB-uY:vebKTycRzjw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=GDzhVqyB-uY:vebKTycRzjw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=GDzhVqyB-uY:vebKTycRzjw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=GDzhVqyB-uY:vebKTycRzjw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=GDzhVqyB-uY:vebKTycRzjw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=GDzhVqyB-uY:vebKTycRzjw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=GDzhVqyB-uY:vebKTycRzjw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=GDzhVqyB-uY:vebKTycRzjw:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/GDzhVqyB-uY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/GDzhVqyB-uY/aspnet-vulnerability-workaround-flawed.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>3</thr:total><feedburner:origLink>http://www.onpreinit.com/2010/09/aspnet-vulnerability-workaround-flawed.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-5421353560257630338</guid><pubDate>Mon, 20 Sep 2010 14:40:00 +0000</pubDate><atom:updated>2010-09-20T12:36:28.594-04:00</atom:updated><title>ASP.NET Padding Oracle Exploit Tool Demo</title><description>&lt;p&gt;&lt;strong&gt;Update #2:&lt;/strong&gt; Another &lt;a href="http://www.troyhunt.com/2010/09/fear-uncertainty-and-and-padding-oracle.html" rel="nofollow" target="_blank"&gt;good post&lt;/a&gt; echoing the “MITIGATE” theme (no signs of “PREVENTION” yet.) And some clarification from SO on how machineKey leaves other files (*.config, /bin/*) vulnerable: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“In ASP.NET 3.5 Service Pack 1 and ASP.NET 4.0 there is a feature that is used to serve files from the application. This feature is normally protected by the machine key. However, if the machine key is compromised then this feature is compromised. This goes directly to ASP.NET and not IIS so IIS's security settings do not apply. Once this feature is compromised then the attacker can download files from your application - including web.config file, which often contains passwords.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This vector was first published in 2002 (8 years ago)&amp;#160; and it’s not unique to .NET either – aspects of JSF, Rails, Django all seem to be affected (is the theme really as simple as encrypted data on the client?).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update #1: &lt;/strong&gt;Rinat Abdullin and Vlad Azarkhin offer some good details [4] [5] on this (the only blogs among my subscriptions to even mention the issue so far). Apparently, the difference in response times (among other subtle differences) still allows one to separate errors from accepted responses [6] – though this would require more of a site-specific attack. And the ability to request *.config files might be a secondary exploit for CMS products like DNN or Sitecore that expose the File System through authoring interfaces – though others are suggesting that it can be obtained through &lt;strong&gt;WebResource.axd&lt;/strong&gt; (which uses some kind of key to authenticate incoming request for arbitrary resources).&lt;/p&gt;  &lt;p&gt;For a low-level (detailed) explanation of the issue, see Brian Holyfield’s post [6].&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Speechless. &lt;/p&gt;  &lt;p&gt;Here’s a demo of POET [1] on DNN [2] – still unclear how this can be used to actually request *.config files though (potentially more serious, IMO):&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:78c5a292-7bf1-497a-b1fe-f76fc3ec1ec3" class="wlWriterEditableSmartContent"&gt;&lt;div id="0fac2b0e-78b1-4340-bf86-4b7f8c7eef7f" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=yghiC_U2RaM&amp;amp;feature=player_embedded" target="_new"&gt;&lt;img src="http://lh4.ggpht.com/_Bxo856Qd3qg/TJeLrCEsskI/AAAAAAAAATo/NPfCoZoxXeo/video35249991de43%5B21%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('0fac2b0e-78b1-4340-bf86-4b7f8c7eef7f'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/yghiC_U2RaM&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/yghiC_U2RaM&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The suggested fix [3], part of standard deployment best-practices, is to mask underlying HTTP error codes:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;lt;customErrors mode=&amp;quot;On&amp;quot; defaultRedirect=&amp;quot;~/error.html&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;That’s the guidance from Microsoft, anyway; the group that released this video claims that &lt;strong&gt;“the setting of CustomErrors is _irrelevant_”.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lots of confusion over this one, let’s hope it gets cleared up ASAP – stay tuned.&lt;/p&gt;  &lt;p&gt;[1] – POET: the tool at the heart of the controversy:   &lt;br /&gt;&lt;a title="http://netifera.com/research/" href="http://netifera.com/research/" rel="nofollow" target="_blank"&gt;http://netifera.com/research/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – DNN Demo:   &lt;br /&gt;&lt;a title="http://threatpost.com/en_us/blogs/demo-aspnet-padding-oracle-attack-091710" href="http://threatpost.com/en_us/blogs/demo-aspnet-padding-oracle-attack-091710" rel="nofollow" target="_blank"&gt;http://threatpost.com/en_us/blogs/demo-aspnet-padding-oracle-attack-091710&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – Guidance from Microsoft:   &lt;br /&gt;&lt;a title="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" rel="nofollow" target="_blank"&gt;http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – Details from Rinat:   &lt;br /&gt;&lt;a href="http://abdullin.com/journal/2010/9/19/details-about-aspnet-security-vulnerability.html" rel="nofollow" target="_blank"&gt;http://abdullin.com/journal/2010/9/19/details-about-aspnet-security-vulnerability.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[5] – “Padding Oracle” ASP.NET Vulnerability Explanation    &lt;br /&gt;&lt;a title="http://blogs.microsoft.co.il/blogs/linqed/archive/2010/09/19/padding-oracle-asp-net-vulnerability-explanation.aspx" href="http://blogs.microsoft.co.il/blogs/linqed/archive/2010/09/19/padding-oracle-asp-net-vulnerability-explanation.aspx" rel="nofollow" target="_blank"&gt;http://blogs.microsoft.co.il/blogs/linqed/archive/2010/09/19/padding-oracle-asp-net-vulnerability-explanation.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[6] – Automated Padding Oracle Attacks with PadBuster    &lt;br /&gt;&lt;a title="http://www.gdssecurity.com/l/b/2010/09/14/automated-padding-oracle-attacks-with-padbuster/" href="http://www.gdssecurity.com/l/b/2010/09/14/automated-padding-oracle-attacks-with-padbuster/" rel="nofollow" target="_blank"&gt;http://www.gdssecurity.com/l/b/2010/09/14/automated-padding-oracle-attacks-with-padbuster/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-5421353560257630338?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V8-h-YY9puUB7DJtMT1pgaChXns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V8-h-YY9puUB7DJtMT1pgaChXns/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V8-h-YY9puUB7DJtMT1pgaChXns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V8-h-YY9puUB7DJtMT1pgaChXns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VzderQBq9X0:1dbO7Yoh0gA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=VzderQBq9X0:1dbO7Yoh0gA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VzderQBq9X0:1dbO7Yoh0gA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VzderQBq9X0:1dbO7Yoh0gA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VzderQBq9X0:1dbO7Yoh0gA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=VzderQBq9X0:1dbO7Yoh0gA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VzderQBq9X0:1dbO7Yoh0gA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VzderQBq9X0:1dbO7Yoh0gA:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/VzderQBq9X0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/VzderQBq9X0/padding-oracle-exploit-tool-demo.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_Bxo856Qd3qg/TJeLrCEsskI/AAAAAAAAATo/NPfCoZoxXeo/s72-c/video35249991de43%5B21%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2010/09/padding-oracle-exploit-tool-demo.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-1148015538344962246</guid><pubDate>Fri, 06 Nov 2009 04:54:00 +0000</pubDate><atom:updated>2010-02-17T10:54:40.397-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Content Distribution Networks</category><category domain="http://www.blogger.com/atom/ns#">Amazon</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">Cloud Computing</category><title>Azure CDN vs. Amazon CloudFront/S3</title><description>&lt;p&gt;Earlier this summer we took a &lt;a href="http://www.onpreinit.com/2009/07/running-your-site-on-content.html" target="_blank"&gt;deep look at the CDN market&lt;/a&gt;, taking into account both established players (Limelight, Akamai, Level-3) and the emerging pay-as-you-go contenders (Amazon’s Cloud Front, Rackspace’s Cloud Files, SimpeCDN and the like). Today, ~1 week after &lt;a href="http://www.allthingsdistributed.com/2009/10/amazon_relational_database_service.html" rel="nofollow" target="_blank"&gt;Amazon’s Relational Database Service&lt;/a&gt; was announced, Microsoft responded with its own introduction of a new CDN that will offer &lt;strong&gt;18 edge locations&lt;/strong&gt; throughout the world [1] :&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color:#004080;"&gt;“Windows Azure CDN has 18 locations globally (United States, Europe, Asia, Australia and South America) and continues to expand. Windows Azure CDN caches your Windows Azure blobs at strategically placed locations to provide maximum bandwidth for delivering your content to users. You can enable CDN delivery for any storage account via the Windows Azure Developer Portal. The CDN provides edge delivery only to blobs that are in public blob containers, which are available for anonymous access.”&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Note that the latest addition to the Azure family is in CTP release only. All we know is that, for the Windows Azure platform itself, PDC ‘09 (to be held later this month) is expected to announce new features and will be followed by an official launch in January and first billing cycle in February; it’s very likely that the CDN will be available along similar timelines as well. &lt;/p&gt;&lt;p&gt;Like CloudFront, Microsoft’s CDN doesn’t solve the HTTPS issue in its first release. In terms of pricing, if &lt;a href="http://www.microsoft.com/windowsazure/pricing/" rel="nofollow" target="_blank"&gt;Windows Azure Platform Pricing&lt;/a&gt; is any indication, you can expect to pay ~0.17/Gb for each targeted zone. &lt;/p&gt;&lt;p&gt;As a refresher, Amazon uses &lt;strong&gt;14 edge locations&lt;/strong&gt; in major markets throughout worldwide: 8 in the United States (Ashburn, VA; Dallas/Fort Worth, TX; Los Angeles, CA; Miami, FL; Newark, NJ; Palo Alto, CA; Seattle, WA; St. Louis, MO), 4 in Europe (Amsterdam; Dublin; Frankfurt; London) and 2 in Asia (Hong Kong, Tokyo). &lt;/p&gt;&lt;p&gt;The North American edge locations are mapped below:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_Bxo856Qd3qg/SvOsDPL8E7I/AAAAAAAAAQk/psY3fxBnSEQ/s1600-h/image%5B4%5D.png"&gt;&lt;img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_Bxo856Qd3qg/SvOsEFyQBKI/AAAAAAAAAQo/Q_3E5hLCn_I/image_thumb%5B2%5D.png?imgmax=800" width="453" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;On the issue of TTLs, it’s still unclear whether the Azure CDN will support &lt;a href="http://serverfault.com/questions/51323/recommend-a-content-delivery-network-cdn-for-a-specific-purpose" rel="nofollow" target="_blank"&gt;shorter TTLs&lt;/a&gt; required for niche applications:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color:#004080;"&gt;“The TTL specifies that the blob should be cached for that amount of time in the CDN until it is refreshed by the Blob service. The CDN attempts to refresh the blob from Windows Azure Blob service only once the TTL has elapsed. &lt;strong&gt;The default TTL is 72 hours&lt;/strong&gt;. At PDC 2009, we will allow you to specify the standard HTTP Cache-Control header for your Windows Azure blobs. If this value is specified for a blob, then the TTL period will be set to the value specified in Cache-Control header.”&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;And lastly, tools you need to get started with either service are the &lt;a href="http://azurestorageexplorer.codeplex.com/" rel="nofollow" target="_blank"&gt;Azure Storage Explorer&lt;/a&gt;, the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3247" rel="nofollow" target="_blank"&gt;Amazon S3 Firefox Organizer (0.4.8)&lt;/a&gt; or &lt;a href="http://cloudberrylab.com/" rel="nofollow" target="_blank"&gt;CloudBerry Explorer&lt;/a&gt; (for S3 and Azure Blob Storage) – just note that, as Microsoft plays catch up here, the Azure tools don’t yet expose the same richness of features around CDN integration. &lt;/p&gt;&lt;h4&gt;&lt;strong&gt;References&lt;/strong&gt;:&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;[1] – Introducing the Windows Azure Content Delivery Network&lt;/strong&gt;
&lt;a title="http://blogs.msdn.com/windowsazure/archive/2009/11/05/introducing-the-windows-azure-content-delivery-network.aspx" href="http://blogs.msdn.com/windowsazure/archive/2009/11/05/introducing-the-windows-azure-content-delivery-network.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/windowsazure/archive/2009/11/05/introducing-the-windows-azure-content-delivery-network.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;[2] – Using the New Windows Azure CDN with a Custom Domain
&lt;/strong&gt;&lt;a title="http://blog.smarx.com/posts/using-the-new-windows-azure-cdn-with-a-custom-domain" href="http://blog.smarx.com/posts/using-the-new-windows-azure-cdn-with-a-custom-domain"&gt;http://blog.smarx.com/posts/using-the-new-windows-azure-cdn-with-a-custom-domain&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-1148015538344962246?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KC4_j8X8HjbNjuwCcbc7iCF-4rE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KC4_j8X8HjbNjuwCcbc7iCF-4rE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KC4_j8X8HjbNjuwCcbc7iCF-4rE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KC4_j8X8HjbNjuwCcbc7iCF-4rE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ETWJDf-G8fo:1fjzPy3mhcI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=ETWJDf-G8fo:1fjzPy3mhcI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ETWJDf-G8fo:1fjzPy3mhcI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ETWJDf-G8fo:1fjzPy3mhcI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ETWJDf-G8fo:1fjzPy3mhcI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=ETWJDf-G8fo:1fjzPy3mhcI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ETWJDf-G8fo:1fjzPy3mhcI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ETWJDf-G8fo:1fjzPy3mhcI:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/ETWJDf-G8fo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/ETWJDf-G8fo/azure-cdn-vs-amazon-cloudfronts3.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_Bxo856Qd3qg/SvOsEFyQBKI/AAAAAAAAAQo/Q_3E5hLCn_I/s72-c/image_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/11/azure-cdn-vs-amazon-cloudfronts3.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-3892559900273237677</guid><pubDate>Tue, 03 Nov 2009 14:01:00 +0000</pubDate><atom:updated>2010-11-03T10:46:02.608-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">LinkedIn</category><category domain="http://www.blogger.com/atom/ns#">StackOverflow</category><category domain="http://www.blogger.com/atom/ns#">Engineering Recruitment</category><title>LinkedIn vs. StackOverflow &amp; The Shifting Landscape for Programming Careers</title><description>&lt;p&gt;I’ve been curiously watching &lt;a href="http://www.linkedin.com/" rel="nofollow" target="_blank"&gt;LinkedIn&lt;/a&gt; try to transform itself into an awkward Q&amp;amp;A-style forum. Subscribing to the &lt;strong&gt;Senior .NET Developers &lt;/strong&gt;group recently, I was a bit surprised to see the type of tactical and specific implementation questions being posted.&lt;/p&gt;  &lt;p&gt;This is a terrible pairing of technology, IMO. Sure, LinkedIn is great at building and exposing the professional web, but their Q&amp;amp;A offering is almost an after-thought with a feature set that’s at least 5 years dated.&lt;/p&gt;  &lt;p&gt;Even worse, none of this dialogue is publically searchable! &lt;/p&gt;  &lt;p&gt;We’ve written about the &lt;a href="http://www.onpreinit.com/2009/10/value-microsoft-mvp-designation-expert.html" target="_blank"&gt;value of StackOverflow reputation rankings&lt;/a&gt; as an emerging compliment to traditional resumes and awards. Yes, the current scoring system leaves much to be desired: users are more incentivized to create ‘popular’ content that drives participation than accurate, factual content that doesn’t. &lt;/p&gt;  &lt;p&gt;The score itself is less telling than a closer examination of an individual’s responses. Nonetheless, it is best-of-breed and it’s no surprise that they announced a new career site today specifically intended to link hands-on Q&amp;amp;A activity with public CVs.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://careers.stackoverflow.com/"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" border="0" alt="Stack Overflow Careers" src="http://careers.stackoverflow.com/content/cso/img/logo.png" width="363" height="64" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What is &lt;a href="http://careers.stackoverflow.com/" rel="nofollow"&gt;careers.stackoverflow.com&lt;/a&gt;? It's a few things:&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;a &lt;b&gt;completely free, public CV hosting service for programmers&lt;/b&gt;, to share the cool stuff you've coded and created with the world. &lt;/li&gt;    &lt;li&gt;a way to explicitly &lt;b&gt;link your Stack Overflow profile&lt;/b&gt; with your CV, to provide concrete examples of your communication skills and individual expertise to anyone who is interested. &lt;/li&gt;    &lt;li&gt;a better way to &lt;b&gt;connect great programmers with the best programming jobs&lt;/b&gt;, for those who opt into the small annual listing fee. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Prior to the announcement, bloggers were already starting to sport &lt;strong&gt;“My answers @StackOverflow” &lt;/strong&gt;feeds alongside their content, courtesy of the user-specific RSS feed exposed by StackOverflow and tools like &lt;a href="http://www.onpreinit.com/2009/07/popurls-popfly-future-of-aggregation.html" target="_blank"&gt;Yahoo Pipes&lt;/a&gt; – the new careers site formalizes this intention in a much cleaner way. &lt;/p&gt;  &lt;p&gt;Joel had a great post this week on &lt;a href="http://www.joelonsoftware.com/items/2009/11/01.html" rel="nofollow" target="_blank"&gt;finding out what your company is all about&lt;/a&gt; and the theme of &lt;a href="http://www.globalnerdy.com/2009/10/17/its-about-helping-your-users-become-awesome-or-being-better-is-better-by-kathy-sierra/" rel="nofollow" target="_blank"&gt;helping your users become awesome&lt;/a&gt; that really resonated with me – they’re certainly living this out loud with this launch:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If you love to code, too, I encourage you to &lt;a href="http://careers.stackoverflow.com/"&gt;create your own Stack Overflow CV&lt;/a&gt;. Keep it private, or make it public via the URL of your choice -- it's completely free either way. If you think you might be actively looking for a job in the next 3 years, take advantage of &lt;b&gt;our &lt;i&gt;outrageously&lt;/i&gt; low promotional pricing of $29 for a 3 year filing&lt;/b&gt;. That way, at any point in those 3 years, you can flip a switch and become visible to hiring managers. Or not. It's totally up to you.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It’s refreshing to watch these guys in action and I can’t wait to see how it evolves!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-3892559900273237677?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WwJsCNr3woSbmGh8PiwCD_X47tM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WwJsCNr3woSbmGh8PiwCD_X47tM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WwJsCNr3woSbmGh8PiwCD_X47tM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WwJsCNr3woSbmGh8PiwCD_X47tM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=QhAOB8iCHZI:orJafItcS90:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=QhAOB8iCHZI:orJafItcS90:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=QhAOB8iCHZI:orJafItcS90:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=QhAOB8iCHZI:orJafItcS90:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=QhAOB8iCHZI:orJafItcS90:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=QhAOB8iCHZI:orJafItcS90:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=QhAOB8iCHZI:orJafItcS90:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=QhAOB8iCHZI:orJafItcS90:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/QhAOB8iCHZI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/QhAOB8iCHZI/linkedin-stackoverflow-careers.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/11/linkedin-stackoverflow-careers.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-8505354453870404335</guid><pubDate>Mon, 02 Nov 2009 00:20:00 +0000</pubDate><atom:updated>2009-11-02T08:55:59.247-05:00</atom:updated><title>CompilationMode=Never: What does it actually do?</title><description>&lt;p&gt;I wanted to take &lt;a href="http://stackoverflow.com/questions/1416711/asp-net-compilationmode-auto-vs-never" rel="nofollow" target="_blank"&gt;CompilationMode=Never&lt;/a&gt; for a test-drive on an existing application that’s plagued by too many control/page assemblies – the goal was to see if this would help improve scalability (by reducing unrecoverable memory consumed by assemblies) and to observe its impact on a &lt;a href="http://stackoverflow.com/questions/1591073/high-fluctuating-time-in-jit-on-precompiled-asp-net-website" rel="nofollow" target="_blank"&gt;high and fluctuating ‘% time in JIT’&lt;/a&gt;. It turns out that it’s not as easy as throwing it into &lt;strong&gt;web.config&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Yes, you can apply this en masse to an existing website but doing so on pre-existing sites could generate: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;The attribute 'codefile' is not allowed in this page.&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The attribute 'autoeventwireup' is not allowed in this page.&amp;#160;&amp;#160; &lt;/strong&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Why would &lt;strong&gt;CompilationMode &lt;/strong&gt;interfere with &lt;strong&gt;AutoEventWireup&lt;/strong&gt;? In automatically wiring up events, it looks like the framework looks for suitable signatures at runtime using reflection [1] – crazy, I know; and not having assemblies would presumably make this impossible to do. Scott Allen has a couple of good writes-ups on this and you can have a look for yourself in the auto-generated assemblies. &lt;/p&gt;  &lt;p&gt;Can you think of any reasons why the events wouldn’t be wired up at compile time? &lt;/p&gt;  &lt;p&gt;I tried to debug the framework to see this in action but threw in the towel after a few hours of fighting the symbol server – hours on this is pretty ridiculous, I know, and in complete defiance of &lt;a href="http://livewithoscar.com/modules.php?name=About_Oscar" rel="nofollow" target="_blank"&gt;Oscar’s&lt;/a&gt; #1 rule: stops are in, emotions are out! It was just a bit shocking to see how brittle the entire setup around source server is and how many continue to struggle with it [2] – anyone out there actually using it successfully for &lt;strong&gt;mscorlib&lt;/strong&gt; and &lt;strong&gt;System.*.dlls&lt;/strong&gt;? Have you you applied any service packs? Would love to hear from you. With VS2008 SP1 (9.0.307279.1), Vista SP2, the latest source code component (Dotnetfx_4016_VistaSP2), and following every instruction to a tee, I can step into most assemblies (e.g. System.Web, 2.0.50727.4016) but can’t step into mscorlib (2.0.50727.4200) which contains the reflection calls in question – for reference, the symbols for mscorlib are downloaded from /download/symbols/mscorlib.pdb/4D0B2695F5144B4D8F24004284FE26191/mscorlib.pd_.&lt;/p&gt;  &lt;p&gt;So once you’ve manually resolved #2, code-behind files must also be pushed out to a fully-qualified class that can be reference by the Inherits attribute alone.&amp;#160; &lt;/p&gt;  &lt;p&gt;After that, it works as expected and you see the runtime behaviour of &lt;strong&gt;CompilationMode=Never&lt;/strong&gt;:&lt;/p&gt;  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;   &lt;div id="codeSnippet" class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="rem"&gt;// IWebObjectFactory.CreateInstance &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; CreateInstance() {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;     &lt;span class="rem"&gt;// Create the object that the aspx/ascx 'inherits' from&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;     TemplateControl templateControl = (TemplateControl) HttpRuntime.FastCreatePublicInstance(_baseType);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;     &lt;span class="rem"&gt;// Set the virtual path and TemplateSourceDirectory in the control &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;     templateControl.TemplateControlVirtualPath = VirtualPath;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;     templateControl.TemplateControlVirtualDirectory = VirtualPath.Parent; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;     &lt;span class="rem"&gt;// Give the TemplateControl a pointer to us, so it can call us back during FrameworkInitialize&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;     templateControl.SetNoCompileBuildResult(&lt;span class="kwrd"&gt;this&lt;/span&gt;); &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; templateControl;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;What’s a little surprising, if I’m reading this right, is it seems to generate the type on demand every time without any caching of the instance for re-use across different requests: &lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="rem"&gt;/*&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; &lt;span class="rem"&gt; * Faster implementation of CreatePublicInstance.  It generates bits of IL&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; &lt;span class="rem"&gt; * on the fly to achieve the improve performance.  this should only be used &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; &lt;span class="rem"&gt; * in cases where the number of different types to be created is well bounded.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt; &lt;span class="rem"&gt; * Otherwise, we would create too much IL, which can bloat the process. &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt; &lt;span class="rem"&gt; */&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt; &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Object FastCreatePublicInstance(Type type) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;     &lt;span class="rem"&gt;// Only use the factory logic if the assembly is in the GAC, to avoid getting&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;     &lt;span class="rem"&gt;// assembly conflicts (VSWhidbey 405086) &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (!type.Assembly.GlobalAssemblyCache) { &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;         &lt;span class="kwrd"&gt;return&lt;/span&gt; CreatePublicInstance(type);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;     } &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt;     &lt;span class="rem"&gt;// Create the factory generator on demand&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (!s_initializedFactory) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt;         &lt;span class="rem"&gt;// Devdiv 90810 - Synchronize to avoid race condition&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt;         &lt;span class="kwrd"&gt;lock&lt;/span&gt; (s_factoryLock) { &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt;             &lt;span class="kwrd"&gt;if&lt;/span&gt; (!s_initializedFactory) { &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt;                 s_factoryGenerator = &lt;span class="kwrd"&gt;new&lt;/span&gt; FactoryGenerator();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum22" class="lnum"&gt;  22:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum23" class="lnum"&gt;  23:&lt;/span&gt;                 &lt;span class="rem"&gt;// Create the factory cache&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum24" class="lnum"&gt;  24:&lt;/span&gt;                 s_factoryCache = Hashtable.Synchronized(&lt;span class="kwrd"&gt;new&lt;/span&gt; Hashtable());&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum25" class="lnum"&gt;  25:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum26" class="lnum"&gt;  26:&lt;/span&gt;                 s_initializedFactory = &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum27" class="lnum"&gt;  27:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum28" class="lnum"&gt;  28:&lt;/span&gt;         } &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum29" class="lnum"&gt;  29:&lt;/span&gt;     } &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum30" class="lnum"&gt;  30:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum31" class="lnum"&gt;  31:&lt;/span&gt;     &lt;span class="rem"&gt;// First, check if it's cached &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum32" class="lnum"&gt;  32:&lt;/span&gt;     IWebObjectFactory factory = (IWebObjectFactory)s_factoryCache[type];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum33" class="lnum"&gt;  33:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum34" class="lnum"&gt;  34:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (factory == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum35" class="lnum"&gt;  35:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum36" class="lnum"&gt;  36:&lt;/span&gt;         Debug.Trace(&lt;span class="str"&gt;&amp;quot;FastCreatePublicInstance&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Creating generator for type &amp;quot;&lt;/span&gt; + type.FullName);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum37" class="lnum"&gt;  37:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum38" class="lnum"&gt;  38:&lt;/span&gt;         &lt;span class="rem"&gt;// Create the object factory &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum39" class="lnum"&gt;  39:&lt;/span&gt;         factory = s_factoryGenerator.CreateFactory(type);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum40" class="lnum"&gt;  40:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum41" class="lnum"&gt;  41:&lt;/span&gt;         &lt;span class="rem"&gt;// Cache the factory&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum42" class="lnum"&gt;  42:&lt;/span&gt;         s_factoryCache[type] = factory;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum43" class="lnum"&gt;  43:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum44" class="lnum"&gt;  44:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum45" class="lnum"&gt;  45:&lt;/span&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; factory.CreateInstance();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum46" class="lnum"&gt;  46:&lt;/span&gt; } &lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Anyway, if &lt;a href="http://stackoverflow.com/questions/1580110/sharepoint-virtualpathproviders-and-application-restarts" rel="nofollow" target="_blank"&gt;SharePoint uses it&lt;/a&gt; successfully, I’m sure it can work for your CMS/cutting-edge-ASP.NET-stuff too. &lt;/p&gt;

&lt;p&gt;Performance benchmarks though will have to wait another day. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[1] – AutoEventWireup &amp;amp; Reflection
    &lt;br /&gt;&lt;a title="http://stackoverflow.com/questions/275965/asp-net-mvc-autoeventwireup-required/276385#276385" href="http://stackoverflow.com/questions/275965/asp-net-mvc-autoeventwireup-required/276385#276385" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/275965/asp-net-mvc-autoeventwireup-required/276385#276385&lt;/a&gt;

    &lt;br /&gt;&lt;a href="http://odetocode.com/articles/406.aspx" rel="nofollow" target="_blank"&gt;http://odetocode.com/articles/406.aspx&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;[2] – Troubleshooting Framework Debugging 
    &lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/1095202/why-cant-i-step-into-this-line" rel="nofollow" target="_blank"&gt;http://stackoverflow.com/questions/1095202/why-cant-i-step-into-this-line&lt;/a&gt;

    &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/1b74f60c-e961-425c-a38e-362406dd4cfe" rel="nofollow" target="_blank"&gt;http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/1b74f60c-e961-425c-a38e-362406dd4cfe&lt;/a&gt;

    &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/a8441b7b-017b-4094-8788-6005aa8e69a3" rel="nofollow" target="_blank"&gt;http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/a8441b7b-017b-4094-8788-6005aa8e69a3&lt;/a&gt;

    &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en/refsourceserver/thread/b22e044c-be8f-4650-98d6-b426193b7b2c" rel="nofollow" target="_blank"&gt;http://social.msdn.microsoft.com/Forums/en/refsourceserver/thread/b22e044c-be8f-4650-98d6-b426193b7b2c&lt;/a&gt;

    &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/e20ad5f3-3071-4ff6-9f2b-6f4ec22661b8" rel="nofollow" target="_blank"&gt;http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/e20ad5f3-3071-4ff6-9f2b-6f4ec22661b8&lt;/a&gt;

    &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/ceb17913-a983-47a8-b15e-655a65c5f001/" rel="nofollow" target="_blank"&gt;http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/ceb17913-a983-47a8-b15e-655a65c5f001/&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;[3] – Microsoft Reference Source Server
    &lt;br /&gt;&lt;a href="http://referencesource.microsoft.com/netframework.aspx" rel="nofollow" target="_blank"&gt;http://referencesource.microsoft.com/netframework.aspx&lt;/a&gt;

    &lt;br /&gt;&lt;a href="http://referencesource.microsoft.com/serversetup.aspx" rel="nofollow" target="_blank"&gt;http://referencesource.microsoft.com/serversetup.aspx&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;[4] – KB944899 (This hotfix addresses a performance problem when stepping through Source Code downloaded via a Microsoft Reference Source Server)
    &lt;br /&gt;&lt;a title="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10443&amp;amp;wa=wsignin1.0" href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10443&amp;amp;wa=wsignin1.0" rel="nofollow" target="_blank"&gt;https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10443&amp;amp;wa=wsignin1.0&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-8505354453870404335?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XhDUuJjwae8N89hsK37wu0vBg94/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XhDUuJjwae8N89hsK37wu0vBg94/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XhDUuJjwae8N89hsK37wu0vBg94/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XhDUuJjwae8N89hsK37wu0vBg94/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=qfy5GmEjX-8:mTmT545xSmk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=qfy5GmEjX-8:mTmT545xSmk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=qfy5GmEjX-8:mTmT545xSmk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=qfy5GmEjX-8:mTmT545xSmk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=qfy5GmEjX-8:mTmT545xSmk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=qfy5GmEjX-8:mTmT545xSmk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=qfy5GmEjX-8:mTmT545xSmk:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=qfy5GmEjX-8:mTmT545xSmk:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/qfy5GmEjX-8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/qfy5GmEjX-8/compilationmode-never-autoeventwireup.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/11/compilationmode-never-autoeventwireup.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-315867298680416963</guid><pubDate>Wed, 28 Oct 2009 01:35:00 +0000</pubDate><atom:updated>2009-11-03T21:21:46.723-05:00</atom:updated><title>The Silo Effect and Other Productivity Killers – A Practical Guide for IT</title><description>&lt;p&gt;If we recognize that the greatest innovation comes from working across silos, then how do we reward and incentive this pattern and are companies actively doing this? Some thoughts this weekend triggered readings into the “&lt;strong&gt;Silo Effect&lt;/strong&gt;” [1] and its impact on the pace of progress. In the SaaS world, managing close collaboration between Development, Q&amp;amp;A and Operations is no easy feat, especially for a growing platform. I have to remind myself regularly that a handful of people really can’t run it all. Intuitively, you look for the simplicity of a well-integrated team with common skills and experiences; in practise, teams are highly specialized with varied focuses. &lt;/p&gt;  &lt;p&gt;The first stop was an excellent read courtesy of John Simpson and Eric Winquist (of Jama Software [6], Portland, Oregon) in their paper, entitled &lt;strong&gt;&amp;quot;Eliminate the Top 3 Productivity Killers and Build Great Products in Half the Time” &lt;/strong&gt;[5]&lt;strong&gt;&amp;#160;&lt;/strong&gt;– some takeaways are highlighted below:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#004080"&gt;Productivity Killer #1 – The Great Scavenger Hunt is Costly        &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font color="#004080"&gt;Information is growing over 66% every year and is constantly changing. The good news is we now have the opportunity to know more about our customers like never before. The bad news is we’re inundated with information – some of it valuable, much of it noise. Where do you store and organize the relevant product information? Do you have the right intelligence captured to make the right decisions and take the right actions?      &lt;br /&gt;      &lt;br /&gt;It’s estimated that employees at U.S. companies waste over 5 billion unproductive hours annually just looking for information2. At $35 per hour for an average knowledge worker, that’s a $175 billion problem in the U.S. alone. As an executive friend used to say, “That’s no pocket change, that’s adult money.”&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#004080"&gt;Did You Know?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#004080"&gt;Employees spend 25% of their time just searching for information&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#004080"&gt;Employees spend 20 minutes per day recreating information that already exists&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#004080"&gt;42% of employees accidentally use the wrong information at least once per week&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#004080"&gt;The average ramp up time is 45 days for a new employee, as high as 9 months for highly skilled jobs&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#004080"&gt;The productivity loss of IT employee turnover can last from 3- 12 months&lt;/font&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font color="#004080"&gt;&lt;strong&gt;There’s Much Hype but the Social Trend is Real        &lt;br /&gt;&lt;/strong&gt;If you’re like us, you might be tired of reading about “the revolution of social networking” – as if life or business wasn’t social before Twitter, Facebook or other Web applications existed. However you feel about this trend, there’s evidence to show the collaborative movement is real and is gaining momentum in the workplace. &lt;strong&gt;IBM estimates that within six years, workers will collaborate 80% of their time&lt;/strong&gt;. You can’t open a prominent business or technology magazine without reading about open innovation and the impact that collaboration is having on business processes. With nearly $1 trillion being invested in R&amp;amp;D worldwide annually, you can understand why it’s a popular issue.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;It’s a great read with emphasis on: a) how to better classify information to facilitate cross-silo collaboration, and b) how to cater to more natural forms of day-to-day dialogue. I must say, the &lt;strong&gt;25% of time spent on search &lt;/strong&gt;really resonated with me – what a powerful stat! I’m relentlessly “negotiating” with reluctant administrators on this dated restriction. I live in email and maliciously hold on to conversations, as I’m sure others do; the ability to instantly query across last decade’s worth of conversations is &lt;strong&gt;priceless&lt;/strong&gt;. Trying to stitch together threads in separate mailboxes with crucial messages lost in some error-prone archiving scheme is, on the other hand, quite expensive. If never ceases to amaze me how these limitations can still be defended? Unlimited email (10-20-30GB, practically speaking), with &lt;strong&gt;&lt;em&gt;foolproof-web-based-search-that-works&lt;/em&gt;&lt;/strong&gt;, should be a minimum bar in any organization – what exactly are we waiting for??&lt;/p&gt;  &lt;p&gt;(On the paper itself, yes, many of these data points are used in all sorts of collaboration solutions, which ultimately weakens the comparative evaluation for the sake of establishing a business case. I see this all the time and think: yes, it’s a problem, without question, but why is your solution better than X,Y,Z? The &lt;a href="http://www.strangeloopnetworks.com/" rel="nofollow" target="_blank"&gt;StrangeLoop&lt;/a&gt; team was a perfect example: yes, we know latency is an issue, but why should we address it with this appliance? I would imagine that would-be customers have identified and understand the problem and that this emphasis is lost on them. Well, here’s a scenario where justifying the business case got my attention.&amp;#160; Without question, these are the 3 productivity killers – but from a tool perspective, whether &lt;strong&gt;Contour&lt;/strong&gt; is the answer or whether a &lt;strong&gt;TFS/SharePoint &lt;/strong&gt;paring is an equally viable approach is another debate all together.)&lt;/p&gt;  &lt;p&gt;Tearing Down Business Silos[2] was the next stop:&lt;/p&gt;  &lt;p&gt;&lt;font color="#004080"&gt;The foundation of a successful organization is an entire team focused on common goals. Silos erode this foundation. &lt;strong&gt;Being aware of the fundamental human behaviors that lead to silos and taking steps to overcome them offers fantastic benefits &lt;/strong&gt;- including more relevant products and services, higher productivity, better use of resources, and more effective and engaged personnel.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;So what can we do? Carol has some fantastic suggestions: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;#1 –Reward Collaboration&lt;/strong&gt;: define collaborative performance objectives, make it part of the preview, promote based on this and spread the story throughout the organization! &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;#2 – Focus on Innovation&lt;/strong&gt;: triggered by a cross-pollination of ideas; bring together people with diverse perspectives and expertise when setting the agenda. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;#3 – Communicate Transparently: &lt;/strong&gt;enough said; it’s dead-easy and so often missed. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;#4 – Encourage Networks:&lt;/strong&gt; use social networking tools and create visual models – I haven’t seen this formalized well. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;#5 – Mix it Up&lt;/strong&gt;: rotate people, invite other managers to your meetings, make them a member of the group – also very rare. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;#6 – Focus on the Customers&lt;/strong&gt;: stay close to the end-user! Share marketplace information, customer-feedback, the good and the bad. In practise, customer opinions pass through layer upon layer before reaching the Development team. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;#6 – Get Personal:&lt;/strong&gt; collaborative relationships thrive in an environment of personal trust. Most companies do a decent job of this, as they should. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Do these things well and you will avoid scenarios like the one faced by the CIO of a mid-size company (125 reports) who wrote into a recent issue of &lt;strong&gt;InfoWorld &lt;/strong&gt;[7]:&lt;/p&gt;  &lt;p&gt;&lt;font color="#004080"&gt;“From the way everyone behaves you'd think my head of application development was Bill Gates and the head of Operations was Larry Ellison. There is no trust at all, and they appear to be out to undermine each other more than they're out to be successful at their own responsibilities.      &lt;br /&gt;      &lt;br /&gt;Worse, the attitude is contagious. The people reporting to them act just like they do. There's no trust, no ability to collaborate ... nothing except a lot of blaming, which seems to have become our core competency.       &lt;br /&gt;      &lt;br /&gt;I've tried lecturing, coaching, berating and arguing, and nothing seems to work.       &lt;br /&gt;They really are two talented people and I don't want to get rid of either of them. On the other hand, the situation isn't sustainable. Any thoughts about what else I might try before firing one or both of them?”&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;InfoWorld’s Bob Lewis responds:&lt;/p&gt;  &lt;p&gt;&lt;font color="#004080"&gt;“Before you do anything else, look at the situation you've put them in. Usually, when organizations turn into silos, it's because goals, and any compensation tied to those goals, reinforces silo-oriented behavior.      &lt;br /&gt;      &lt;br /&gt;My guess is that you'll find a lot of win/lose trade-offs. For example, if the budgeting process starts with a fixed pie and when one of them gets something it comes out of the other's budget, it's win/lose, which reinforces organizational rivalry. Result: Silos.       &lt;br /&gt;      &lt;br /&gt;Or, maybe Applications is counted as successful when projects finish on time no matter what, while Operations is counted as successful based on system stability and performance. Which means Applications has an incentive to skimp on software quality assurance, while Operations has an incentive to keep all new code out of production as long as possible. Result: Silos.       &lt;br /&gt;      &lt;br /&gt;While you're looking at structural sources of moat-building, you should also figure out if any of their responsibilities require collaboration. Very likely, they don't. Usually, organizational design starts by trying to draw clear boundaries between departments, to clarify who is responsible for what. The unintended consequence is that because managers have no reason to collaborate, they neither build the habit of doing so, nor see any reason to start.”&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;“People do what they do for reasons. If you want them to do something different, take away the reasons they're doing what they're doing, and give them reasons to do something different.”&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[1] – The Silo Effect (Seven Key Obstacles to Change):      &lt;br /&gt;&lt;a title="http://www.edwardmorler.com/seven-key-obstacles-to-change.html" href="http://www.edwardmorler.com/seven-key-obstacles-to-change.html" rel="nofollow" target="_blank"&gt;http://www.edwardmorler.com/seven-key-obstacles-to-change.html&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;[2] – Tearing Down Business Silos      &lt;br /&gt;&lt;a title="http://www.sideroad.com/Management/business-silos.html" href="http://www.sideroad.com/Management/business-silos.html" rel="nofollow" target="_blank"&gt;http://www.sideroad.com/Management/business-silos.html&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;[3] – Breaking Organizational Silos using Enterprise Architecture      &lt;br /&gt;&lt;a title="http://it.toolbox.com/blogs/ea-for-cio/breaking-organizational-silos-using-enterprise-architecture-30764" href="http://it.toolbox.com/blogs/ea-for-cio/breaking-organizational-silos-using-enterprise-architecture-30764" rel="nofollow" target="_blank"&gt;http://it.toolbox.com/blogs/ea-for-cio/breaking-organizational-silos-using-enterprise-architecture-30764&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;[4] – Jama Software (Contour)      &lt;br /&gt;&lt;a title="http://www.jamasoftware.com/contour/" href="http://www.jamasoftware.com/contour/" rel="nofollow" target="_blank"&gt;http://www.jamasoftware.com/contour/&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;[5] – Eliminate the Top 3 Productivity Killers and Build Great Products in Half the Time      &lt;br /&gt;&lt;a title="http://www.jamasoftware.com/media/documents/Central_Hub_Product_Intelligence_Jama.pdf" href="http://www.jamasoftware.com/media/documents/Central_Hub_Product_Intelligence_Jama.pdf" rel="nofollow" target="_blank"&gt;http://www.jamasoftware.com/media/documents/Central_Hub_Product_Intelligence_Jama.pdf&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;[6] – Requirements and Bridging the Silos      &lt;br /&gt;&lt;a title="http://www.requirementsnetwork.com/system/files/Requirements%20and%20Bridging%20the%20Silos%20(Part%202%20of%203).pdf" href="http://www.requirementsnetwork.com/system/files/Requirements%20and%20Bridging%20the%20Silos%20(Part%202%20of%203).pdf" rel="nofollow" target="_blank"&gt;http://www.requirementsnetwork.com/system/files/Requirements%20and%20Bridging%20the%20Silos%20(Part%202%20of%203).pdf&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;[7] – Stuck in Silos      &lt;br /&gt;&lt;a title="http://www.infoworld.com/t/career-advice/stuck-in-silos-707" href="http://www.infoworld.com/t/career-advice/stuck-in-silos-707" rel="nofollow" target="_blank"&gt;http://www.infoworld.com/t/career-advice/stuck-in-silos-707&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-315867298680416963?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XAOIiqJ2qc9gI5JBy4R8AWVzUns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XAOIiqJ2qc9gI5JBy4R8AWVzUns/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XAOIiqJ2qc9gI5JBy4R8AWVzUns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XAOIiqJ2qc9gI5JBy4R8AWVzUns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=viFd4qWNEsg:M8wZgCbyasQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=viFd4qWNEsg:M8wZgCbyasQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=viFd4qWNEsg:M8wZgCbyasQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=viFd4qWNEsg:M8wZgCbyasQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=viFd4qWNEsg:M8wZgCbyasQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=viFd4qWNEsg:M8wZgCbyasQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=viFd4qWNEsg:M8wZgCbyasQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=viFd4qWNEsg:M8wZgCbyasQ:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/viFd4qWNEsg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/viFd4qWNEsg/business-silo-effect-it-software.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/10/business-silo-effect-it-software.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-3726748876843371353</guid><pubDate>Thu, 15 Oct 2009 23:35:00 +0000</pubDate><atom:updated>2009-10-27T21:40:10.173-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windbg</category><category domain="http://www.blogger.com/atom/ns#">doesnt-work-with-2.x</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET Troubleshooting</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>High CPU in ASP.NET - Finding Large DataTables with the Public SOS</title><description>&lt;p&gt;This is yet another one strictly for the dump analysis crowd – what can I say, it’s been a long week! Last episode, we highlighted &lt;a href="http://www.onpreinit.com/2009/09/windbg-sos-dumpdatatables-aspxpages-etc.html" target="_blank"&gt;the lack of support for many useful windbg commands&lt;/a&gt;. Well, chief among these was the &lt;strong&gt;DumpDataTables&lt;/strong&gt; command that provides a nice summary of the largest tables and their column counts, typically a nice starting point for high-memory/high-CPU issues in traditional application. So how do we fend for ourselves and reproduce this with the SOS that we have? &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Some very helpful support engineers that I’ve been working with over the last few weeks offered the following as a potential substitute:&lt;/p&gt;  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;   &lt;div id="codeSnippet" class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; $$ Run &lt;span class="kwrd"&gt;as&lt;/span&gt; $&amp;gt;&amp;lt;C:\Extensions\DumpLargeTables.txt&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; .printf &lt;span class="str"&gt;&amp;quot;\n===== Printing Large datatables with 1000+ rows with their column names =====\n\n&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt; .&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(m_table {!dumpheap -type System.Data.DataTable -&lt;span class="kwrd"&gt;short&lt;/span&gt;})&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;     .&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (m_Count {!dumpfield -field nextRowID m_table})&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;          $$ Change the &lt;span class="kwrd"&gt;value&lt;/span&gt; of row count here&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;         .&lt;span class="kwrd"&gt;if&lt;/span&gt;( ${m_Count} &amp;gt; 1000)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;             .printf &lt;span class="str"&gt;&amp;quot;Table Name : &amp;quot;&lt;/span&gt;; .printf /D &lt;span class="str"&gt;&amp;quot;&amp;lt;?dml?&amp;gt;&amp;lt;exec cmd=\&amp;quot;!do ${m_table}\&amp;quot;&amp;gt;${m_table}&amp;lt;/exec&amp;gt; - &amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;             !dumpfield -field tableName -&lt;span class="kwrd"&gt;string&lt;/span&gt; ${m_table} &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;             .printf &lt;span class="str"&gt;&amp;quot; Row Count : ${m_Count}&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt;             .printf &lt;span class="str"&gt;&amp;quot;\t|---Columns\n&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt;             .&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(m_col {!dumpheap -type System.Data.DataColumn -&lt;span class="kwrd"&gt;short&lt;/span&gt;})&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt;             {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt;                 r @$t2 = poi(${m_col}+0x3c)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt;                 .&lt;span class="kwrd"&gt;if&lt;/span&gt;(@$t2 == ${m_table})&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum22" class="lnum"&gt;  22:&lt;/span&gt;                     .printf /D &lt;span class="str"&gt;&amp;quot;\t\t|-- &amp;lt;?dml?&amp;gt;&amp;lt;exec cmd=\&amp;quot;!do ${m_col}\&amp;quot;&amp;gt;${m_col}&amp;lt;/exec&amp;gt; - &amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum23" class="lnum"&gt;  23:&lt;/span&gt;                     !dumpfield -field _columnName -&lt;span class="kwrd"&gt;string&lt;/span&gt; m_col&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum24" class="lnum"&gt;  24:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum25" class="lnum"&gt;  25:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum26" class="lnum"&gt;  26:&lt;/span&gt;             .printf &lt;span class="str"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum27" class="lnum"&gt;  27:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum28" class="lnum"&gt;  28:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum29" class="lnum"&gt;  29:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Unfortunately, this too relies on a command (&lt;strong&gt;!dumpfield) &lt;/strong&gt;that is also not available in the public SOS.&lt;/p&gt;

&lt;p&gt;Through some collaborative trial-and-error, we then came up with the following work-around for accessing the &lt;strong&gt;nextRowID&lt;/strong&gt; field using its offset, in a manor supported by the public SOS:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; .foreach (DT {!dumpheap -mt 65242d0c -short}){.echo ${DT};?poi(${DT}+0xd0)}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;…which gives you something to work with if you drop it in excel and sort it (original addresses removed):&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; Evaluate expression: 14 = 0000000e&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; Evaluate expression: 3 = 00000003&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; Evaluate expression: 20 = 00000014&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; Evaluate expression: 29 = 0000001d&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt; Evaluate expression: 11 = 0000000b&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt; Evaluate expression: 28 = 0000001c&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt; Evaluate expression: 1 = 00000001&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt; Evaluate expression: 1 = 00000001&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;To be version/Method-Table agnostic, I tried the following, which should be comparable to the one above:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; .foreach (DT {!dumpheap –type System.Data.DataTable -short}){?poi(${DT}+0xd0)}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;…but I see some strange results with the latter, so find your method tables and work from there.&lt;/p&gt;

&lt;p&gt;How to read this (we’re simply using the POI function to read the address + offset for nextRowId - d0):&lt;/p&gt;

&lt;div style="font-family: &amp;#39;Courier New&amp;#39;,courier,fixed,monospace" id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
  &lt;div id="codeSnippet" class="csharpcode"&gt;
    &lt;pre class="alt fixed"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; 0:026&amp;gt; !&lt;span class="kwrd"&gt;do&lt;/span&gt; 0x02c671cc &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; Name: System.Data.DataTable&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; MethodTable: 65242d0c&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; EEClass: 6515da18&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt; Size: 296(0x128) bytes&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt; GC Generation: 2&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt; (C:\WINDOWS\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt; Fields:&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;       MT    Field   Offset                 Type VT     Attr    Value Name&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt; 7a5d2a58  40009a3        4 ...ponentModel.ISite  0 instance 00000000 site&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt; 7a5ecd2c  40009a4        8 ....EventHandlerList  0 instance 00000000 events&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt; 7933061c  40009a2      1e4        System.Object  0   shared   &lt;span class="kwrd"&gt;static&lt;/span&gt; EventDisposed&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt; 65244194  40007a5        c  System.Data.DataSet  0 instance 00000000 dataSet&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt; 6524534c  40007a6       10 System.Data.DataView  0 instance 02c682d0 defaultView&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt; 79332c4c  40007a7       d0         System.Int32  1 instance        3 nextRowID&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt; 65245798  40007a8       14 ...DataRowCollection  0 instance 02c674d8 rowCollection&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt; 652456b8  40007a9       18 ...aColumnCollection  0 instance 02c67388 columnCollection&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt; 65245728  40007aa       1c ...straintCollection  0 instance 02c674a0 constraintCollection&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt; 79332c4c  40007ab       d4         System.Int32  1 instance        2 elementColumnCount&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alteven fixed"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt; 65244b08  40007ac       20 ...elationCollection  0 instance 02c6845c parentRelationsCollection&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre class="alt fixed"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt; 65244b08  40007ad       24 ...elationCollection  0 instance 02c683f8 childRelationsCollection&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h4&gt;References:&lt;/h4&gt;

&lt;p&gt;[1] – 
  &lt;br /&gt;&lt;a href="http://blogs.msdn.com/vijaysk/archive/2008/01/15/windbg-scripting-dump-data-column-names-from-a-table.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/vijaysk/archive/2008/01/15/windbg-scripting-dump-data-column-names-from-a-table.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] – 
  &lt;br /&gt;&lt;a href="http://blogs.msdn.com/mvstanton/archive/2005/10/11/479861.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/mvstanton/archive/2005/10/11/479861.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] – 
  &lt;br /&gt;&lt;a href="http://mcfunley.com/205/using-windbg-to-log-exceptions-part-2" rel="nofollow" target="_blank"&gt;http://mcfunley.com/205/using-windbg-to-log-exceptions-part-2&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-3726748876843371353?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xSBE0IaPsYi679gg8YPBpSYsLpc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xSBE0IaPsYi679gg8YPBpSYsLpc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xSBE0IaPsYi679gg8YPBpSYsLpc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xSBE0IaPsYi679gg8YPBpSYsLpc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=d2uG8U8MXvc:p-mB1fMK_0M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=d2uG8U8MXvc:p-mB1fMK_0M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=d2uG8U8MXvc:p-mB1fMK_0M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=d2uG8U8MXvc:p-mB1fMK_0M:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=d2uG8U8MXvc:p-mB1fMK_0M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=d2uG8U8MXvc:p-mB1fMK_0M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=d2uG8U8MXvc:p-mB1fMK_0M:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=d2uG8U8MXvc:p-mB1fMK_0M:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/d2uG8U8MXvc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/d2uG8U8MXvc/high-cpu-aspnet-windbg-large-datatable.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/10/high-cpu-aspnet-windbg-large-datatable.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-1555727356028031087</guid><pubDate>Tue, 13 Oct 2009 01:11:00 +0000</pubDate><atom:updated>2009-10-27T21:41:14.748-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MVP Designation</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">Engineering Recruitment</category><title>The Value of Microsoft’s MVP Designation: Expert, Evangelist or Critic?</title><description>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_Bxo856Qd3qg/StPTzmWMmHI/AAAAAAAAAPY/p8W1oAzYSc4/s1600-h/microsoft-mvp-award%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 5px" title="microsoft-mvp-award" border="0" alt="microsoft-mvp-award" align="left" src="http://lh4.ggpht.com/_Bxo856Qd3qg/StPTz_shhaI/AAAAAAAAAPc/IfZWvFUB5QY/microsoft-mvp-award_thumb%5B1%5D.jpg?imgmax=800" width="244" height="194" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Jon Skeet is something of a legend in the Microsoft Development Community – I first stumbled across his name on a C# &lt;a href="http://stackoverflow.com/questions/367577/why-does-the-c-compiler-emit-activator-createinstance-when-calling-new-in-with-a" rel="nofollow"&gt;thread&lt;/a&gt; on StackOverFlow, a popular forum for developers, where Jon holds &lt;em&gt;the &lt;/em&gt;highest reputational ranking (with a healthy 20K-point lead over the #2 challenger). Something of a &lt;a href="http://www.chucknorrisfacts.com/" rel="nofollow" target="_blank"&gt;Chunk Norris&lt;/a&gt; like figure among developers, Mr. Skeet’s fans have gone as far as creating a AskJeeves-styled tribute in his honour [2]: &lt;/p&gt;  &lt;p&gt;&lt;font color="#0080c0"&gt;“It is hard to explain this website without first describing what is &lt;/font&gt;&lt;a href="http://stackoverflow.com/"&gt;&lt;font color="#0080c0"&gt;Stack Overflow&lt;/font&gt;&lt;/a&gt;&lt;font color="#0080c0"&gt; and who is &lt;/font&gt;&lt;a href="http://msmvps.com/blogs/jon_skeet/default.aspx"&gt;&lt;font color="#0080c0"&gt;Jon Skeet.&lt;/font&gt;&lt;/a&gt;&lt;font color="#0080c0"&gt; Firstly Stack Overflow is a fast-growing website featuring questions and answers on a wide range of topics in computer programming. It has already built up a large community and has an addictive quality that is largely down to its &lt;/font&gt;&lt;a href="http://stackoverflow.com/faq"&gt;&lt;font color="#0080c0"&gt;Reputation system&lt;/font&gt;&lt;/a&gt;&lt;font color="#0080c0"&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0080c0"&gt;Meanwhile Jon Skeet is a software engineer who currently works for Google. He has recently gained minor celebrity within the developer community by becoming a prolific contributor to StackOverflow. At the time of writing he has totalled 2,738 answers in the 5 months he has been registered. This works out at roughly 500 questions per month!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0080c0"&gt;Of course being this prolific is astonishing in itself, however it wouldn’t be of much value if the answers were of a poor quality. That is what stands Jon Skeet apart, his answers have a consistent and almost reference&amp;#160; quality. It was this that led me to think that it would be fun to create a website that farmed Stack Overflow of all the questions that Jon Skeet has answered and put them in an AskJeeves.com style website. If you want to know what Jon Skeet thinks about a topic, put it in AskJonSkeet.com and see.”&lt;/font&gt;&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;h4&gt;Microsoft MVP: Evangelists, Experts or Critics?&lt;/h4&gt;  &lt;p&gt;What’s more interesting though is the peripheral debate on the value of the MVP designation in the first place [1], [3], [4]&amp;#160; and whether MVPs are &lt;a href="http://itknowledgeexchange.techtarget.com/sql-server/tag/john-skeet/" rel="nofollow" target="_blank"&gt;Evangelists, Experts or Critics?&lt;/a&gt; Developers around the world have &lt;a href="http://www.google.ca/search?hl=en&amp;amp;rlz=1T4GFRD_enCA217CA298&amp;amp;q=jon+skeet+MVP+google&amp;amp;btnG=Search&amp;amp;meta=" rel="nofollow" target="_blank"&gt;chimed&lt;/a&gt; in and the usual hyperbole around ‘trust’, ‘good vs. evil’, and ‘Microsoft vs. Google’ rhetoric is once again front stage.&amp;#160; &lt;/p&gt;  &lt;p&gt;Having worked with a number of MVPs in the SharePoint space, here’s my $0.02:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Politics have an undeniable role in a designation like this; &lt;/li&gt;    &lt;li&gt;There are exceptionally talented MVPs and there are ‘how-to’ MVPs that mostly publish starter guides; &lt;/li&gt;    &lt;li&gt;The MVP designation, in and of itself, is not a reflection of technical expertise; &lt;/li&gt;    &lt;li&gt;Does it have sales value in consulting? Maybe. &lt;/li&gt;    &lt;li&gt;Does it have personal marketability? Maybe – this is the incentive provided for enriching the ecosystem; but a popular community endorsement (blog with 10,000 views/month, for instance) would be more compelling, IMO. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To Jon, I doubt this makes one shred of difference in his day-to-day work; he will continue to be seen as a leader, without question.&lt;/p&gt;  &lt;p&gt;If you were looking for a strong technical resource, and purely from a capabilities perspective, would you put more emphasis on a StackOverFlow reputation or an MVP designation? Would the answer change if you were a CTO of a medium/large enterprise? What about blog rankings and subscribers as a measure of community clout? Are more objective measurements possible?&amp;#160; &lt;/p&gt;  &lt;h4&gt;Programming Jokes – As Good as it Gets!&lt;/h4&gt;  &lt;p&gt;On a lighter note, here’s a preview of what’s featured on AskJonSkeet.com; I haven’t material this good since UW’s very own weekly &lt;a href="http://www.mathnews.uwaterloo.ca/" rel="nofollow" target="_blank"&gt;MathNews&lt;/a&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;Jon Skeet once hacked the FBI using an etch-a-sketch&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Jon Skeet doesn't call a background worker, background workers call Jon Skeet.&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Jon Skeet can determine the next random number in a sequence.&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Superman wears Skeet pajamas to bed!&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Jon Skeet does not sleep.. He waits.&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Jon Skeet can do pair programming with himself&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Jon Skeet can believe it's not butter.&amp;quot; &lt;/li&gt;    &lt;li&gt;&amp;quot;Google is Jon Skeet behind a proxy.&amp;quot; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;References:&lt;/h4&gt;  &lt;p&gt;[1] – Google lobs coder's Microsoft badge into rubbish bin    &lt;br /&gt;&lt;a title="http://www.theregister.co.uk/2009/10/02/google_microsoft_mvp/" href="http://www.theregister.co.uk/2009/10/02/google_microsoft_mvp/" rel="nofollow" target="_blank"&gt;http://www.theregister.co.uk/2009/10/02/google_microsoft_mvp/&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;[2] –&amp;#160; Ask Jon Skeet!     &lt;br /&gt;&lt;a title="http://askjonskeet.com/home/about" href="http://askjonskeet.com/home/about" rel="nofollow" target="_blank"&gt;http://askjonskeet.com/home/about&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] –&amp;#160; Microsoft &amp;quot;Most Valuable Professional&amp;quot; Award Banned at Google?    &lt;br /&gt;&lt;a title="http://www.labnol.org/internet/microsoft-award-banned-at-google/10179/" href="http://www.labnol.org/internet/microsoft-award-banned-at-google/10179/" rel="nofollow" target="_blank"&gt;http://www.labnol.org/internet/microsoft-award-banned-at-google/10179/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – Google Employee Reluctantly Gives up Microsoft MVP Status    &lt;br /&gt;&lt;a title="http://www.techflash.com/seattle/2009/10/google_employee_reluctanctly_gives_up_microsoft_mvp_status.html" href="http://www.techflash.com/seattle/2009/10/google_employee_reluctanctly_gives_up_microsoft_mvp_status.html" target="_blank"&gt;http://www.techflash.com/seattle/2009/10/google_employee_reluctanctly_gives_up_microsoft_mvp_status.html&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-1555727356028031087?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mZLGj3l84FhwpYN5ruZ5ttxrbw8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mZLGj3l84FhwpYN5ruZ5ttxrbw8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mZLGj3l84FhwpYN5ruZ5ttxrbw8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mZLGj3l84FhwpYN5ruZ5ttxrbw8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=OCONq-St5GI:k5GdJ5chlsA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=OCONq-St5GI:k5GdJ5chlsA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=OCONq-St5GI:k5GdJ5chlsA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=OCONq-St5GI:k5GdJ5chlsA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=OCONq-St5GI:k5GdJ5chlsA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=OCONq-St5GI:k5GdJ5chlsA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=OCONq-St5GI:k5GdJ5chlsA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=OCONq-St5GI:k5GdJ5chlsA:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/OCONq-St5GI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/OCONq-St5GI/value-microsoft-mvp-designation-expert.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_Bxo856Qd3qg/StPTz_shhaI/AAAAAAAAAPc/IfZWvFUB5QY/s72-c/microsoft-mvp-award_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/10/value-microsoft-mvp-designation-expert.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-8180454196448948052</guid><pubDate>Fri, 09 Oct 2009 03:17:00 +0000</pubDate><atom:updated>2010-11-04T13:16:08.459-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Blogger SEO</category><category domain="http://www.blogger.com/atom/ns#">SEO</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">Google Apps</category><title>Blogger SEO Limitations: Why URL Length &amp; Indexed Tags Matter</title><description>&lt;p&gt;Working with blogger over the last few months, 2 things have caused me a bit of unnecessary angst:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Its artificial limit on URL length (truncates URLs somewhere around 40 characters), and; &lt;/li&gt;    &lt;li&gt;Its refusal to crawl &lt;strong&gt;/search&lt;/strong&gt; paths for indexing post tags. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Even for an avid user of anything and everything &lt;strong&gt;&lt;em&gt;Google &lt;/em&gt;&lt;/strong&gt;- Google Search, Google Apps, Google Reader, Google AdWords, Google AdSense, Google Wave, GMail, Google Analytics, Google Maps, and who knows what else – it was enough to trigger thoughts of &lt;strong&gt;&lt;em&gt;Wordpress&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;These are serious limitations – and there are &lt;a href="http://www.moretechtips.net/2009/03/blogger-seo-tip-use-post-labels-as-meta.html" rel="nofollow"&gt;others&lt;/a&gt;, all unique to Blogger, as far as mainstream platforms go. Why should the &lt;strong&gt;&lt;em&gt;Wordpress&lt;/em&gt;&lt;/strong&gt; guys or the do-it-yourself guys, or worse, the have-to-host-it-on-my-home-server guys have an edge on the foremost SaaS player in town, from an on-page perspective at least? &lt;/p&gt;  &lt;p&gt;I mean this &lt;em&gt;is&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Google’s &lt;/em&gt;&lt;/strong&gt;product after all, isn’t it? Could it be that these ‘optimizations’ are not officially endorsed? &lt;/p&gt;  &lt;p&gt;You’ll find lots of people telling you that neither limitation matters that &lt;strong&gt;&lt;em&gt;much&lt;/em&gt;&lt;/strong&gt; – especially the URL length; some even paint all of ‘SEO’ with the micro-optimization brush, relegating it to the unoriginal who lack substance (Seth said this once, I believe, at the Business of Software conference; may have some truth to it, but for the little guy SEO’s still the make it or break it.) &lt;/p&gt;  &lt;p&gt;But according to Google’s Matt Cutts, they do matter, and it’s simply a sliding scale beyond 4 or 5 keywords in the URL [7]:&lt;/p&gt;  &lt;div style="padding-left: 15px"&gt;   &lt;p&gt;&lt;font color="#004080"&gt;&lt;em&gt;“We have seen clients use keyword URLs that have 10 to 15 words strung together with hyphens; or blogs - we have seen them even longer there. A typical WordPress blog will use the title of the post as the post slug, unless you defined something different and you can just go on and on and on. Can you give any guidelines or recommendations in that regard?&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;&lt;em&gt;&lt;b&gt;Matt Cutts&lt;/b&gt;: Certainly. &lt;strong&gt;If you can make your title four- or five-words long - and it is pretty natural. If you have got a three, four or five words in your URL, that can be perfectly normal. As it gets a little longer, then it starts to look a little worse. Now, our algorithms typically will just weight those words less and just not give you as much credit&lt;/strong&gt;.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;&lt;em&gt;The thing to be aware of is, ask yourself: &amp;quot;How does this look to a regular user?&amp;quot; - because if, at any time, somebody comes to your page or, maybe, a competitor does a search and finds 15 words all strung together like variants of the same word, then that does look like spam, and they often will send a spam report. Then somebody will go and check that out.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;&lt;em&gt;So, I would not make it a big habit of having tons and tons of words stuffed in there, because there are plenty of places on a page, where you can have relevant words and have them be helpful to users - and not have it come across as keyword stuffing.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;&lt;em&gt;&lt;b&gt;Stephan Spencer&lt;/b&gt;: So, would something like 10 words be a bit much then?&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;&lt;em&gt;&lt;b&gt;Matt Cutts&lt;/b&gt;: It is a little abnormal. I know that when I hit something like that - even a blog post - with 10 words, I raise my eyebrows a little bit and, maybe, read with a little more skepticism. So, if just a regular savvy user has that sort of reaction, then you can imagine how that might look to some competitors and others.”&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;SEO Design Solutions also carries a good write-up of how post tags make a difference – note the example they’re example and test it out [1]:&lt;/p&gt;  &lt;div style="padding-left: 15px"&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#004080"&gt;These keywords are there because they were toggled by users typing in enough searches that a contextual occurrence now binds them under the same umbrella based on the profile of search queries executed.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#004080"&gt;So, if I wanted to reinforce a &lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.seodesignsolutions.com/blog/seo-resources/how-seo-really-works/"&gt;&lt;em&gt;&lt;font color="#004080"&gt;broad match&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font color="#004080"&gt; topical range of semantics, I could easily implement keywords that were algorithmically related in real time (when looking for tags or additional keyword to include in a post) by using tags or developing related content for the main topic / silo to build into a &lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.seodesignsolutions.com/blog/seo/the-phases-of-seo-part-i/"&gt;&lt;em&gt;&lt;font color="#004080"&gt;virtual theme&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font color="#004080"&gt; of topical posts.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#004080"&gt;The &lt;strong&gt;“theme”&lt;/strong&gt; is the main topic and the silos are the supporting articles that reinforce relevance for all things related (based on the array of keyword modifiers). Toggling &lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.seodesignsolutions.com/blog/seo/seo-theme-density-2/"&gt;&lt;em&gt;&lt;font color="#004080"&gt;theme density&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font color="#004080"&gt; implies targeting semantic clusters, which is essence is accomplished through the tags becoming links and adding weight to global on page relevance with ease.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;The industry thrives off of this evidence-based consensus,&lt;/strong&gt; turning a blind eye to official announcements from Google itself even. My own research confirmed both strategies make a significant difference so I tracked down &lt;a title="Siobhan Quinn" href="http://www.blogger.com/profile/14908970658480399870" rel="nofollow" target="_blank"&gt;Siobhan Quinn&lt;/a&gt;, a product manager for blogger, and shared the feedback. Both the &lt;a title="JotSpot (Google Sites) and the Pyra Labs (Blogger)" href="http://www.moretechtips.net/2009/08/google-you-got-pages-sites-and-blogspot.html" rel="nofollow"&gt;JotSpot (Google Sites) and the Pyra Labs (Blogger)&lt;/a&gt; acquisitions feel like they haven’t (yet) been absorbed as first-class citizens. &lt;/p&gt;  &lt;p&gt;In the end though, it’s not enough to abandon ship! I trust Google will level the playing feel and provide bloggers with a second-to-none publishing experience, free of charge. As for work-arounds (hacks), you’ll have to excuse me if a few ‘index’ pages slip into your feeds over the next few days; here are a few tips [2] that, in addition to the usual template title/meta-tag optimizations, endorse this technique as well:&lt;/p&gt;  &lt;div style="padding-left: 15px"&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#004080"&gt;I generally start with the content - I'll pick a somewhat specific topic to write about (in this case the new adsense email), and I'll write the post. Then I go back and figure out how to market it. Occasionally, if I don't feel a particular inclination to write about something, I do use the Google Suggest (now built into Google front page) to pick a topic to write about. Either way, I almost always use this functionality to refine my keywords when I am finished with the post. How?&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#004080"&gt;Simply go to the front page of Google (not inside of a search, or gmail, etc.) and start typing - see the list of words that pops up? Those are popular search terms that start with what you've typed (note: exactly what is in the box will not appear in the results). Look for words higher in the list - meaning more often searched, but with a lower number of results - meaning less competition. The less letters you type in (the more you can backspace) and still see your &amp;quot;target keyphrase&amp;quot; high in the list, the higher the &amp;quot;value&amp;quot; of the keyword. This does not mean you will get tons of traffic, it just means you will have an easier time getting to the front page of Google.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;… on why you’re out of luck with blogger tags [2]: &lt;/p&gt;  &lt;div style="padding-left: 15px"&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#004080"&gt;&lt;b&gt;Remove label and place text links&lt;/b&gt; : The label pages in Blogger are automatically set nofollow by Google . So there is no SEO value in keeping the labels in home page . Alternately , you can categorize your posts and include them in single post that can be fixed in homepage . For eg ; Instead of placing the label Blogger tricks and tips , I have written a main post contains all the similarly tagged posts and placed as a text link in my homepage.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;In practise, tag links on blogger sport a &lt;strong&gt;rel=’tag’ &lt;/strong&gt;attribute (no sense in deleting this – some ‘related posts’ widgets leverage it); it’s Robots.txt that explicitly blocks &lt;strong&gt;/search&lt;/strong&gt; paths. Interestingly, the blogger search interface accepts wildcards too (also blocked) – had the restricted path been the &lt;strong&gt;/search/&lt;/strong&gt; folder specifically, this would be accepted:&lt;/p&gt;  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;   &lt;div id="codeSnippet" class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; /search&lt;strong&gt;-anything-here&lt;/strong&gt;/label/some-label&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h4&gt;Indispensible Tools:&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a title="Keyword Density Tool" href="http://www.seochat.com/seo-tools/keyword-density/" rel="nofollow" target="_blank"&gt;Keyword Density Tool&lt;/a&gt;&amp;#160; &lt;/li&gt;

  &lt;li&gt;&lt;a title="Web Master Search Engine Tools" href="http://www.submitexpress.com/analyzer/" rel="nofollow" target="_blank"&gt;Web Master Search Engine Tools&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.webconfs.com/" rel="nofollow" target="_blank"&gt;WebConfs SEO Tools (duplicate content validation tool and search engine spider simulators)&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://googlewebmastercentral.blogspot.com/2009/10/fetch-as-googlebot-and-malware-details.html" rel="nofollow" target="_blank"&gt;Fetch as Googlebot (Google Webmaster Tools)&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;For more tools, see the &lt;a href="http://www.searchenginejournal.com/seo-tools/7299/" rel="nofollow" target="_blank"&gt;Ultimate Collection at SEJ&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Need help with your SEO strategy?&lt;/h4&gt;

&lt;p&gt;Drop me a &lt;a title="Contact" href="mailto:haghighi.nariman@gmail.com"&gt;line&lt;/a&gt; or leave a comment.&lt;/p&gt;

&lt;h4&gt;References:&lt;/h4&gt;

&lt;p&gt;[1] – SEO Design Solutions 
  &lt;br /&gt;&lt;a title="http://www.seodesignsolutions.com/blog/seo-tips/seo-tips-using-related-search-to-optimize-cms-tags/" href="http://www.seodesignsolutions.com/blog/seo-tips/seo-tips-using-related-search-to-optimize-cms-tags/" rel="nofollow" target="_blank"&gt;http://www.seodesignsolutions.com/blog/seo-tips/seo-tips-using-related-search-to-optimize-cms-tags/&lt;/a&gt; 

  &lt;br /&gt;&lt;a title="http://www.seodesignsolutions.com/blog/seo-basics/using-related-search-to-find-googles-most-search-keywords/" href="http://www.seodesignsolutions.com/blog/seo-basics/using-related-search-to-find-googles-most-search-keywords/" rel="nofollow" target="_blank"&gt;http://www.seodesignsolutions.com/blog/seo-basics/using-related-search-to-find-googles-most-search-keywords/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] – Blogger SEO Tips and Tricks 
  &lt;br /&gt;&lt;a title="http://www.techknowl.com/2009/03/blogger-seo-tips-and-tricks.html" href="http://www.techknowl.com/2009/03/blogger-seo-tips-and-tricks.html" rel="nofollow" target="_blank"&gt;http://www.techknowl.com/2009/03/blogger-seo-tips-and-tricks.html&lt;/a&gt; 

  &lt;br /&gt;&lt;a title="http://www.techknowl.com/2009/01/blogger-seo-on-page.html" href="http://www.techknowl.com/2009/01/blogger-seo-on-page.html" rel="nofollow" target="_blank"&gt;http://www.techknowl.com/2009/01/blogger-seo-on-page.html&lt;/a&gt; 

  &lt;br /&gt;&lt;a title="http://webupd8.blogspot.com/2009/02/blogger-blogspotcom-seo-optimization.html" href="http://webupd8.blogspot.com/2009/02/blogger-blogspotcom-seo-optimization.html" rel="nofollow" target="_blank"&gt;http://webupd8.blogspot.com/2009/02/blogger-blogspotcom-seo-optimization.html&lt;/a&gt; 

  &lt;br /&gt;&lt;a title="http://bloggerblackhatseo.blogspot.com/" href="http://bloggerblackhatseo.blogspot.com/" target="_blank"&gt;http://bloggerblackhatseo.blogspot.com/&lt;/a&gt; 

  &lt;br /&gt;&lt;a title="http://www.moretechtips.net/2009/03/blogger-seo-tip-use-post-labels-as-meta.html" href="http://www.moretechtips.net/2009/03/blogger-seo-tip-use-post-labels-as-meta.html" rel="nofollow" target="_blank"&gt;http://www.moretechtips.net/2009/03/blogger-seo-tip-use-post-labels-as-meta.html&lt;/a&gt; 

  &lt;br /&gt;&lt;a title="http://tweakandtune.blogspot.com/2009/03/blog-seo-tips.html" href="http://tweakandtune.blogspot.com/2009/03/blog-seo-tips.html" rel="nofollow" target="_blank"&gt;http://tweakandtune.blogspot.com/2009/03/blog-seo-tips.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] – SEO Best Practices for URL Structure 
  &lt;br /&gt;&lt;a title="http://www.searchenginejournal.com/seo-best-practices-for-url-structure/7216/" href="http://www.searchenginejournal.com/seo-best-practices-for-url-structure/7216/" rel="nofollow" target="_blank"&gt;http://www.searchenginejournal.com/seo-best-practices-for-url-structure/7216/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-8180454196448948052?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZemBe8owOiM8oWeOlTMTzzqXb_M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZemBe8owOiM8oWeOlTMTzzqXb_M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZemBe8owOiM8oWeOlTMTzzqXb_M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZemBe8owOiM8oWeOlTMTzzqXb_M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ITr4N7cGz2M:XCVHZ-zwlgw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=ITr4N7cGz2M:XCVHZ-zwlgw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ITr4N7cGz2M:XCVHZ-zwlgw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ITr4N7cGz2M:XCVHZ-zwlgw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ITr4N7cGz2M:XCVHZ-zwlgw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=ITr4N7cGz2M:XCVHZ-zwlgw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ITr4N7cGz2M:XCVHZ-zwlgw:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ITr4N7cGz2M:XCVHZ-zwlgw:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/ITr4N7cGz2M" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/ITr4N7cGz2M/blogger-seo-limitations-url-length.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>6</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/10/blogger-seo-limitations-url-length.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-1235023970627875139</guid><pubDate>Sun, 04 Oct 2009 04:17:00 +0000</pubDate><atom:updated>2009-10-10T23:19:00.777-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Google Sharepoint Killer</category><category domain="http://www.blogger.com/atom/ns#">Public-Facing Sites</category><category domain="http://www.blogger.com/atom/ns#">The Data Liberation Front</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">Google Apps</category><title>Migrating SharePoint Content to Google Sites via New API</title><description>&lt;p&gt;The latest in the “&lt;a title="Battle for Enterprise Collaboration" href="http://www.onpreinit.com/2009/06/google-sites-vs-sharepoint-online.html" target="_blank"&gt;Battle for Enterprise Collaboration&lt;/a&gt;” comes courtesy of&amp;#160; Barb Mosher of CMS Wire [1] and Adriaan Bloem of CMS Watch [2] in their reviews of the &lt;a title="Sites API" href="http://googleenterprise.blogspot.com/2009/09/import-export-and-more-with-new-google_24.html" rel="nofollow" target="_blank"&gt;Sites API&lt;/a&gt; release that now enables &lt;a title="Migration of Content" href="http://news.techworld.com/networking/3202686/google-sites-api-opens-microsoft-sharepoint/" rel="nofollow" target="_blank"&gt;migration of content&lt;/a&gt; out of SharePoint and into Google Sites. What both accounts fail to mention is that SharePoint &lt;strong&gt;SaaS&lt;/strong&gt; has a long way to go to match the capabilities of on-premise SharePoint. Success in SaaS form, arguably more relevant than anything that’s happened in the server market over the last decade, will ultimately be predicated on PaaS&amp;#160; (Windows Azure vs. Google App Engine) strengths and not the current feature sets around collaboration.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;h4&gt;Vendor Lock-in Concerns&lt;/h4&gt;  &lt;p&gt;In addressing one of the chief concerns with nascent SaaS platforms like Sites, an engineering team at Google responsible for &lt;strong&gt;The Data Liberation Front&lt;/strong&gt; has extended support to allow data the free flow of data in and out of their coloration platform [2]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#0080c0"&gt;The Data Liberation Front is an engineering team at Google whose singular goal is to make it easier for users to move their data in and out of Google products.&amp;#160; We do this because we believe that you should be able to export any data that you create in (or import into) a product.&amp;#160; We help and consult other engineering teams within Google on how to &amp;quot;liberate&amp;quot; their products.&amp;#160; This is our mission statement:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p align="center"&gt;&lt;strong&gt;&lt;em&gt;&lt;font color="#0080c0"&gt;Users should be able to control the data they store in            &lt;br /&gt;any of Google's products. Our team's goal is to             &lt;br /&gt;make it easier for them to move data in and out.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;(Note that the lack of API was one on the &lt;a href="http://www.onpreinit.com/2009/06/google-sites-vs-sharepoint-online.html"&gt;barriers&lt;/a&gt; cited with the Sites in our first review this summer.)&lt;/p&gt;  &lt;p&gt;Meanwhile, Adriaan Bloem, of CMS Watch commented yesterday [3]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#0080c0"&gt;And lastly, who uses Sites, anyway? After Google acquired JotSpot, it was closed for business for a year, and then Sites emerged: a stripped-down version of JotSpot. And after the initial hubbub, there was a roar of silence. @GoogleAtWork occasionally tweets about a corporate site done entirely in Sites, but those are always the sites of Google Enterprise partners. And they're the select few where I could see using Sites for an external site would make any sense (since they're selling it, of course.) Other than that, I read about enterprises switching to Apps -- and they get Sites in the deal, but while everyone uses the (g)mail, and many will use the docs (which have some nice collaborative features), few seem to venture into Sites.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#0080c0"&gt;To slightly offset all of this, yes, of course there are scenarios where Sites could be useful. These mainly revolve around small companies, with maybe up to 10 or 20 staff (so governance is less of an issue), who aren't in the business of running fileservers, mailservers, webservers, and social software -- Apps, with Sites, is a viable alternative. Running the infrastructure required for SharePoint (and going through the pains of &lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.cmswatch.com/Trends/1068-SharePoint-as-a-.NET-development-platform"&gt;&lt;em&gt;&lt;font color="#0080c0"&gt;implementing it&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font color="#0080c0"&gt; to do useful things) would make little sense in that case. And for a lot of organizations, maybe especially the larger enterprises, Gmail is a very cost-effective replacement for maintaining in-house mail servers.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#0080c0"&gt;Google, however, hints at examples like &amp;quot;your sales team's Google Sites pages can update automatically when new leads are added to your CRM system&amp;quot;; but you'd have to develop the code to do so, first. And right now, there are too many reasons why you wouldn't really want to do that. Likewise, a migration from Notes to Gmail, I could understand. But from custom-built Domino applications to Sites... that's a completely different story.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#0080c0"&gt;Sites as a SharePoint killer? No, definitely not. This assassin has to go through ninja school first.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Google Sites isn’t ready for the enterprise spotlight yet, agreed; but I’m not sure the &lt;em&gt;“reasons why you wouldn’t really want to do that” &lt;/em&gt;are clear to me. Comparing on-premise SharePoint to Sites is no apples-to-apples; Sites to SharePoint &lt;strong&gt;Online&lt;/strong&gt;, on the other hand,&lt;strong&gt;&amp;#160;&lt;/strong&gt;is a little more realistic and a better question to ask is how and when the on-premise SharePoint that we’ve come to know and love will shine in SaaS form? &lt;/p&gt;  &lt;p&gt;We still haven’t seen much on how &lt;a href="http://www.microsoft.com/azure/faq.mspx#sharePoint" rel="nofollow" target="_blank"&gt;future generations&lt;/a&gt; of non-dedicated SharePoint Online will support code-level customizations – all we know is that today’s version carries very limited support for functional extensions; the most you can do comes in the form of&amp;#160; WebParts like Twitter Search that rely on existing HTTP interfaces and the built-in Data View and Data Form WebParts [4]:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_Bxo856Qd3qg/Ssgh6jqwkrI/AAAAAAAAAPI/E6YK57RLV5w/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_Bxo856Qd3qg/Ssgh7bx4WxI/AAAAAAAAAPM/WKTwdPZUl9M/image_thumb%5B2%5D.png?imgmax=800" width="482" height="498" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(Whether even basic customizations like this would run in SharePoint Online needs to be validated.)&lt;/p&gt;  &lt;p&gt;Fundamentally, customizations on either Sites or SharePoint online would look the same at this stage – and exactly why loosely coupled designs like this would be bad investment is unclear to me. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Both&lt;/em&gt;&lt;/strong&gt; products are fairly premature for enterprise adoption; but there is arguably more momentum and a more active ecosystem around Sites at the moment [5] than there is around the wait-and-see SharePoint Online camp.&lt;/p&gt;  &lt;p&gt;For a fair comparison of the two SaaS offerings, a detailed review is provided &lt;a href="http://www.onpreinit.com/2009/06/google-sites-vs-sharepoint-online.html"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Update (Oct 10, 2009): &lt;/h4&gt;  &lt;p&gt;Google has just announced a few upgrades to Sites:    &lt;br /&gt;&lt;a href="http://googledocs.blogspot.com/2009/10/picasa-web-albums-integration-site.html" rel="nofollow" target="_blank"&gt;Picasa Web Albums integration, site feeds, and page templates in Google Sites&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;References:&lt;/h4&gt;  &lt;p&gt;[1] – Google Goes After SharePoint with New Sites API    &lt;br /&gt;&lt;a title="http://www.cmswire.com/cms/enterprise-cms/google-goes-after-sharepoint-with-new-sites-api-005620.php" href="http://www.cmswire.com/cms/enterprise-cms/google-goes-after-sharepoint-with-new-sites-api-005620.php" rel="nofollow"&gt;http://www.cmswire.com/cms/enterprise-cms/google-goes-after-sharepoint-with-new-sites-api-005620.php&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – The Data Liberation Front    &lt;br /&gt;&lt;a title="http://www.dataliberation.org/" href="http://www.dataliberation.org/" rel="nofollow"&gt;http://www.dataliberation.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – Google Sites with API: Still No SharePoint Killer    &lt;br /&gt;&lt;a title="http://www.cmswatch.com/Trends/1702-Google-Sites-versus-SharePoint" href="http://www.cmswatch.com/Trends/1702-Google-Sites-versus-SharePoint" rel="nofollow"&gt;http://www.cmswatch.com/Trends/1702-Google-Sites-versus-SharePoint&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – Code-Free SharePoint Twitter Search Web Part    &lt;br /&gt;&lt;a href="http://woodywindy.spaces.live.com/Blog/cns!773832677F575173!558.entry" rel="nofollow"&gt;http://woodywindy.spaces.live.com/Blog/cns!773832677F575173!558.entry&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[5] – Google Site Samples    &lt;br /&gt;&lt;a title="http://www.steegle.com/websites" href="http://www.steegle.com/websites" rel="nofollow"&gt;http://www.steegle.com/websites&lt;/a&gt;     &lt;br /&gt;&lt;a title="http://siteshelp.kccloudsolutions.com/" href="http://siteshelp.kccloudsolutions.com/" rel="nofollow"&gt;http://siteshelp.kccloudsolutions.com/&lt;/a&gt;     &lt;br /&gt;&lt;a title="http://sites.google.com/site/wgpconsulting/Home/links-to-google-sites-examples" href="http://sites.google.com/site/wgpconsulting/Home/links-to-google-sites-examples" rel="nofollow"&gt;http://sites.google.com/site/wgpconsulting/Home/links-to-google-sites-examples&lt;/a&gt;     &lt;br /&gt;&lt;a title="http://www.sacvolvoclub.org/google-sites#GSHL" href="http://www.sacvolvoclub.org/google-sites#GSHL" rel="nofollow"&gt;http://www.sacvolvoclub.org/google-sites#GSHL&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-1235023970627875139?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/d9HB10U3PXMFuwD3MvH4ALKqByo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d9HB10U3PXMFuwD3MvH4ALKqByo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/d9HB10U3PXMFuwD3MvH4ALKqByo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d9HB10U3PXMFuwD3MvH4ALKqByo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=LrSF1dF2clY:o__qvrb2iaY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=LrSF1dF2clY:o__qvrb2iaY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=LrSF1dF2clY:o__qvrb2iaY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=LrSF1dF2clY:o__qvrb2iaY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=LrSF1dF2clY:o__qvrb2iaY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=LrSF1dF2clY:o__qvrb2iaY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=LrSF1dF2clY:o__qvrb2iaY:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=LrSF1dF2clY:o__qvrb2iaY:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/LrSF1dF2clY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/LrSF1dF2clY/migrate-sharepoint-to-google-sites-new.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_Bxo856Qd3qg/Ssgh7bx4WxI/AAAAAAAAAPM/WKTwdPZUl9M/s72-c/image_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/10/migrate-sharepoint-to-google-sites-new.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-4245199937098944449</guid><pubDate>Thu, 01 Oct 2009 02:50:00 +0000</pubDate><atom:updated>2010-11-03T12:04:51.972-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">System.Reflection</category><category domain="http://www.blogger.com/atom/ns#">Exceptions</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">MS Build</category><title>Custom MS Build Task to tame System.Reflection.AmbiguousMatchException: Ambiguous match found.</title><description>&lt;p&gt;&lt;strong&gt;Update (Oct 3, 2009):&lt;/strong&gt; Thanks to the reader that pointed out that the MS Build task was using a hard-coded path. The example has been corrected to use a parameterized path that relies on the &lt;strong&gt;MSBuildProjectDirectory&lt;/strong&gt; [3] reserved property.&lt;/p&gt;  &lt;p&gt;An innocent “mistake” [1], if you can even call it that, has been punishing developers worldwide for a good part of the last decade – can you spot it?&lt;/p&gt;  &lt;blockquote&gt;   &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;     &lt;div id="codeSnippet" class="csharpcode"&gt;       &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="asp"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeBehind=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;WebApplication1._Default&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:HiddenField&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;RecordId&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
    &lt;div id="codeSnippet" class="csharpcode"&gt;
      &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; &lt;span class="kwrd"&gt;namespace&lt;/span&gt; WebApplication1&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; _Default : System.Web.UI.Page&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt;         &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; recordId = 0;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;         &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt;             Response.Write(recordId);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;a name='more'&gt;&lt;/a&gt;

&lt;p&gt;What’s worse is that the exception thrown doesn’t lend any clues as to what the source of the ambiguity is – even this level of detail requires some custom logging:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;System.Reflection.AmbiguousMatchException: Ambiguous match found. 
      &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160; at System.RuntimeType.GetField(String name, BindingFlags bindingAttr) 

    &lt;br /&gt;&amp;#160;&amp;#160; at System.Web.UI.Util.&lt;strong&gt;GetNonPrivateFieldType&lt;/strong&gt;(Type classType, String fieldName) 

    &lt;br /&gt;&amp;#160;&amp;#160; at System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration 

    &lt;br /&gt;ControlBuilder builder) &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;So what’s wrong with the code? &lt;/h4&gt;

&lt;p&gt;Two fields differ only in &lt;strong&gt;&lt;em&gt;case&lt;/em&gt;&lt;/strong&gt;. Yup – that’s it. &lt;strong&gt;RecordId&lt;/strong&gt; is both a HiddenField and an integer. C# allows this – not a word is raised during compilation. Based on what I’ve seen and read (it’s widely covered), it only happens only when you &lt;strong&gt;pre-compile &lt;/strong&gt;either a Website or Web application and navigate to the page in question.&lt;/p&gt;

&lt;p&gt;Now imagine having a page with 20+ controls and trying to figure out where this is coming from – how’s the reflector supposed to help here? &lt;/p&gt;

&lt;h4&gt;How can we catch it at compile time?&lt;/h4&gt;

&lt;p&gt;It’s surprisingly easy, actually:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_Bxo856Qd3qg/SsQZMgNiBbI/AAAAAAAAAPA/ple_SnyUqkk/image%5B9%5D.png?imgmax=800"&gt;&lt;font color="#333333"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image_thumb[5]" border="0" alt="image_thumb[5]" src="http://lh4.ggpht.com/_Bxo856Qd3qg/TNGIE6Jb3jI/AAAAAAAAAUU/zpxr0FoDt18/image_thumb5%5B1%5D.png?imgmax=800" width="680" height="136" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Until it gets fixed – and yes, it &lt;em&gt;is&lt;/em&gt; a defect – here’s a custom task (&lt;strong&gt;MemberCaseTask&lt;/strong&gt;) that you can add to your projects to catch it at &lt;strong&gt;&lt;em&gt;build&lt;/em&gt;&lt;/strong&gt;-time as opposed to &lt;strong&gt;&lt;em&gt;already-in-staging-and-didn’t-think-to-navigate-to-each-view-after-precompilation&lt;/em&gt;&lt;/strong&gt;-time. &lt;/p&gt;

&lt;p&gt;Reference the custom Task in the project/solution script as follows:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
    &lt;div id="codeSnippet" class="csharpcode"&gt;
      &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &amp;lt;UsingTask TaskName=&lt;span class="str"&gt;&amp;quot;MemberCaseTask&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt;            AssemblyFile=&lt;span class="str"&gt;&amp;quot;C:\Users\admin\Documents\Visual Studio 2008\Projects\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll&amp;quot;&lt;/span&gt; /&amp;gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt;  &amp;lt;Target Name=&lt;span class="str"&gt;&amp;quot;AfterBuild&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt;      &amp;lt;MemberCaseTask AssemblyPath=&lt;span class="str"&gt;&amp;quot;$(MSBuildProjectDirectory)\bin&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt;  &amp;lt;/Target&amp;gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Build this file and update the &lt;strong&gt;AssemblyFile&lt;/strong&gt; reference above (note that we copy the original definition of &lt;strong&gt;GetNonPrivateFieldType&lt;/strong&gt; from System.Web.UI.Util) :&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
    &lt;div id="codeSnippet" class="csharpcode"&gt;
      &lt;pre class="alt"&gt;&lt;span id="lnum1" class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum2" class="lnum"&gt;   2:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum3" class="lnum"&gt;   3:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum4" class="lnum"&gt;   4:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum5" class="lnum"&gt;   5:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum6" class="lnum"&gt;   6:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum7" class="lnum"&gt;   7:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Build.Framework;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum8" class="lnum"&gt;   8:&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Build.Utilities;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum9" class="lnum"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum10" class="lnum"&gt;  10:&lt;/span&gt; &lt;span class="kwrd"&gt;namespace&lt;/span&gt; ClassLibrary1&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum11" class="lnum"&gt;  11:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum12" class="lnum"&gt;  12:&lt;/span&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MemberCaseTask: Task&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum13" class="lnum"&gt;  13:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum14" class="lnum"&gt;  14:&lt;/span&gt;         [Required]&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum15" class="lnum"&gt;  15:&lt;/span&gt;         &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; AssemblyPath { get; set; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum16" class="lnum"&gt;  16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum17" class="lnum"&gt;  17:&lt;/span&gt;         &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Execute()&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum18" class="lnum"&gt;  18:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum19" class="lnum"&gt;  19:&lt;/span&gt;             &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (Assembly assembly &lt;span class="kwrd"&gt;in&lt;/span&gt; GetAllAssemblies())&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum20" class="lnum"&gt;  20:&lt;/span&gt;             {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum21" class="lnum"&gt;  21:&lt;/span&gt;                 &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum22" class="lnum"&gt;  22:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum23" class="lnum"&gt;  23:&lt;/span&gt;                     &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (Type type &lt;span class="kwrd"&gt;in&lt;/span&gt; assembly.GetTypes())&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum24" class="lnum"&gt;  24:&lt;/span&gt;                         &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (FieldInfo field &lt;span class="kwrd"&gt;in&lt;/span&gt; type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum25" class="lnum"&gt;  25:&lt;/span&gt;                             &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum26" class="lnum"&gt;  26:&lt;/span&gt;                             {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum27" class="lnum"&gt;  27:&lt;/span&gt;                                 GetNonPrivateFieldType(type, field.Name);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum28" class="lnum"&gt;  28:&lt;/span&gt;                             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum29" class="lnum"&gt;  29:&lt;/span&gt;                             &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum30" class="lnum"&gt;  30:&lt;/span&gt;                             {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum31" class="lnum"&gt;  31:&lt;/span&gt;                                 Log.LogError(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;{0} has a field conflict on field {1}.&amp;quot;&lt;/span&gt;, type.Name, field.Name));&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum32" class="lnum"&gt;  32:&lt;/span&gt;                                 &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum33" class="lnum"&gt;  33:&lt;/span&gt;                             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum34" class="lnum"&gt;  34:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum35" class="lnum"&gt;  35:&lt;/span&gt;                 &lt;span class="kwrd"&gt;catch&lt;/span&gt; (System.Reflection.ReflectionTypeLoadException)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum36" class="lnum"&gt;  36:&lt;/span&gt;                 { }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum37" class="lnum"&gt;  37:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum38" class="lnum"&gt;  38:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum39" class="lnum"&gt;  39:&lt;/span&gt;             &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum40" class="lnum"&gt;  40:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum41" class="lnum"&gt;  41:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum42" class="lnum"&gt;  42:&lt;/span&gt;         &lt;span class="kwrd"&gt;private&lt;/span&gt; IEnumerable&amp;lt;Assembly&amp;gt; GetAllAssemblies()&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum43" class="lnum"&gt;  43:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum44" class="lnum"&gt;  44:&lt;/span&gt;             &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (FileInfo file &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DirectoryInfo(AssemblyPath).GetFiles(&lt;span class="str"&gt;&amp;quot;*.dll&amp;quot;&lt;/span&gt;, SearchOption.TopDirectoryOnly))&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum45" class="lnum"&gt;  45:&lt;/span&gt;             {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum46" class="lnum"&gt;  46:&lt;/span&gt;                 Assembly assembly = AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(file.FullName));&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum47" class="lnum"&gt;  47:&lt;/span&gt;                 &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; assembly;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum48" class="lnum"&gt;  48:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum49" class="lnum"&gt;  49:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum50" class="lnum"&gt;  50:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum51" class="lnum"&gt;  51:&lt;/span&gt;         &lt;span class="kwrd"&gt;static&lt;/span&gt; Type GetNonPrivateFieldType(Type classType, &lt;span class="kwrd"&gt;string&lt;/span&gt; fieldName)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum52" class="lnum"&gt;  52:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum53" class="lnum"&gt;  53:&lt;/span&gt;             FieldInfo field = classType.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum54" class="lnum"&gt;  54:&lt;/span&gt;             &lt;span class="kwrd"&gt;if&lt;/span&gt; ((field != &lt;span class="kwrd"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; !field.IsPrivate)&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum55" class="lnum"&gt;  55:&lt;/span&gt;             {&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum56" class="lnum"&gt;  56:&lt;/span&gt;                 &lt;span class="kwrd"&gt;return&lt;/span&gt; field.FieldType;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum57" class="lnum"&gt;  57:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum58" class="lnum"&gt;  58:&lt;/span&gt;             &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum59" class="lnum"&gt;  59:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alteven"&gt;&lt;span id="lnum60" class="lnum"&gt;  60:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre class="alt"&gt;&lt;span id="lnum61" class="lnum"&gt;  61:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;[1] - System.Reflection.AmbiguousMatchException: Ambiguous match found
  &lt;br /&gt;&lt;a href="http://dotnetdebug.net/2006/03/21/ambiguous-match-found-in-a-web-control-a-possible-bug/" rel="nofollow" target="_blank"&gt;http://dotnetdebug.net/2006/03/21/ambiguous-match-found-in-a-web-control-a-possible-bug/&lt;/a&gt;

  &lt;br /&gt;&lt;a title="http://weblogs.asp.net/pjohnson/archive/2006/08/11/Ambiguous-match-found.aspx" href="http://weblogs.asp.net/pjohnson/archive/2006/08/11/Ambiguous-match-found.aspx" rel="nofollow" target="_blank"&gt;http://weblogs.asp.net/pjohnson/archive/2006/08/11/Ambiguous-match-found.aspx&lt;/a&gt;

  &lt;br /&gt;&lt;a title="http://www.velocityreviews.com/forums/t153094-error-ambiguous-match-found.html" href="http://www.velocityreviews.com/forums/t153094-error-ambiguous-match-found.html" rel="nofollow" target="_blank"&gt;http://www.velocityreviews.com/forums/t153094-error-ambiguous-match-found.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] - How to Write a Task:
  &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/t9883dzc.aspx" href="http://msdn.microsoft.com/en-us/library/t9883dzc.aspx" rel="nofollow" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/t9883dzc.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] - MSBuild Reserved Properties:
  &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms164309.aspx" href="http://msdn.microsoft.com/en-us/library/ms164309.aspx" rel="nofollow" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/ms164309.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-4245199937098944449?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ml6V0ilmxCUuz7qZRlNRFQ273-8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ml6V0ilmxCUuz7qZRlNRFQ273-8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ml6V0ilmxCUuz7qZRlNRFQ273-8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ml6V0ilmxCUuz7qZRlNRFQ273-8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=MDJlEHncp40:LBKhtZMAjnM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=MDJlEHncp40:LBKhtZMAjnM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=MDJlEHncp40:LBKhtZMAjnM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=MDJlEHncp40:LBKhtZMAjnM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=MDJlEHncp40:LBKhtZMAjnM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=MDJlEHncp40:LBKhtZMAjnM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=MDJlEHncp40:LBKhtZMAjnM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=MDJlEHncp40:LBKhtZMAjnM:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/MDJlEHncp40" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/MDJlEHncp40/ambiguous-match-found_30.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_Bxo856Qd3qg/TNGIE6Jb3jI/AAAAAAAAAUU/zpxr0FoDt18/s72-c/image_thumb5%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/09/ambiguous-match-found_30.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-7302991221135047869</guid><pubDate>Thu, 24 Sep 2009 07:04:00 +0000</pubDate><atom:updated>2009-10-03T16:11:10.928-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">IT Recruitment</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">Engineering Recruitment</category><category domain="http://www.blogger.com/atom/ns#">Candidate Assessment</category><title>Engineering Recruitment: A Data-Driven Approach to Candidate Assessment</title><description>&lt;p&gt;I’ve yet to meet anyone with recruitment responsibilities that isn’t frustrated with the state of the industry. Finding the right people, filtering through them intelligently and keeping them happy is a top priority anywhere you look – so why is it that we’re working with tools and techniques that haven’t changed in decades?&lt;/p&gt;  &lt;p&gt;Just last month, I reviewed over 20 resumes for a developer/architect position and could hardly differentiate between them – from the self-described $40/hr to the $90/hr, they all looked the same on paper. And I’m not sure that interviewing each and every one of them would have left me any more convinced.&lt;/p&gt;  &lt;p&gt;We’ve all heard &lt;strong&gt;“the best people aren’t looking for work” &lt;/strong&gt;cliché a dozen times but still don’t have a sense for what the remedy is. Are AdWords the solution [6]? The guys at StackOverFlow.com seem to think so: take control of the eyes – where the best people spend their time – and sell targeted ads. (You can appreciate why they’d offer money-back-guarantees under this model.) &lt;/p&gt;  &lt;p&gt;What’s everyone else doing?&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;p&gt;Jim Holincheck’s blog on Human Capital Management (HCM) introduced me to a project at one of the most innovative recruiting organizations on the planet [1]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color:#004080;"&gt;I found Dr. Sullivan's &lt;/span&gt;&lt;a href="http://www.ere.net/articles/db/95872408130C40EC8AD8B3FF0975D145.asp"&gt;&lt;span style="color:#004080;"&gt;post&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#004080;"&gt; on ERE enlightening though…It is innovative because of the &lt;strong&gt;breadth of factors assessed &lt;/strong&gt;(though again that is something that has been possible) and how they were &lt;strong&gt;leveraging the core competencies of Google &lt;/strong&gt;in creating this assessment approach.  Also, one should not look at it the context of just this one thing that Google is doing [but] in recruitment and talent management in general.  It is part of a broader &lt;strong&gt;innovation strategy to ensure that it can bring in quality talent to support the business strategy&lt;/strong&gt;.  Is that not what we all want to do?&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;(Having interviewed at both Google and &lt;a href="http://www.amazon.com/gp/product/B000ESSSN4?ie=UTF8&amp;amp;tag=canalandguid-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000ESSSN4" target="_blank"&gt;Microsoft&lt;/a&gt; in 2004, I’ve witnessed Google’s effort first-hand.)&lt;/p&gt;  &lt;p&gt;Dr. Sullivan’s post on the ERE Recruiting Community goes on to detail Google’s approach [2]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color:#004080;"&gt;More than any other organization, Google is credited with &lt;strong&gt;changing the game&lt;/strong&gt; when it comes to recruiting leading-edge talent. Their approaches have forced reactions among nearly every other leading high-technology firm trying to attract the cream of the crop, and encouraged a healthy debate among functional leaders of &lt;strong&gt;efficiency versus effectiveness in recruiting&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;…on finding the right people who aren’t looking (note that it’s not the first time, either – remember the billboard incident of 2004 [10]  that received a lot of press?):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color:#004080;"&gt;The Google recruiting team continues to come up with creative approaches. One of my favourites occurred in the spring of 2006 when they &lt;strong&gt;retooled their search portal to deliver a targeted recruiting message to students and faculty of targeted schools&lt;/strong&gt;. When individuals would access the Google search portal, Google servers would identify the IP address of the visitor, look up what organization the IP address belonged to, and alter the portal appearance if the visitor was accessing the portal from one of the university campuses Google actively recruits from. The approach, while not new, was implemented in Google’s typical minimalist style. They added a single text line just below the search box that asked whether the visitor was graduating and whether they were interested in a job at Google. &lt;strong&gt;The micro-targeting approach was simple and unobtrusive&lt;/strong&gt;. Another example, while again not being unique, further signifies the extent to which Google is responsive to the labor force. That approach is taking the work to where the workforce already exists, namely the University of Michigan campus. The initiative took private/public cooperation to an entirely new level, ensuring that students would have access to education inherently suited to real employer demands, and that Google would have unfettered access to some of the brightest minds.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;…and on their &lt;strong&gt;data-driven approach to candidate assessment&lt;/strong&gt;:&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color:#004080;"&gt;The latest innovation from Google’s recruiting function is so unique that the &lt;em&gt;New York Times&lt;/em&gt; wrote a feature story about it. The &lt;/span&gt;&lt;a href="http://www.nytimes.com/2007/01/03/technology/03google.html?_r=1&amp;amp;oref=slogin"&gt;&lt;span style="color:#004080;"&gt;article&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#004080;"&gt;, written by Saul Hansell and published January 3, detailed how the search engine company is implementing a new assessment tool that relies on an &lt;strong&gt;algorithm to more accurately identify candidates that resemble existing top performers&lt;/strong&gt;. While many companies seek to screen out candidates, the new Google candidate assessment approach enables Google to “include” candidates that might otherwise be overlooked. The algorithm evaluates a &lt;strong&gt;much wider range of potential success predictors than can normally be discerned from most resumes&lt;/strong&gt;. This innovation recognizes and resolves a major flaw inherent to typical assessment methodologies that rely too heavily on academic grades, SAT scores, degrees from “top” schools, prior industry experience, and subjective interview results.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It’s certainly eye opening (and refreshing, I might add) to look at true innovation alongside bolted solutions of the past. For instance, in building recruitment platforms, we often look at features that enable candidate (or ‘resume’) comparisons using a product like FAST ESP. The intention is the same: if you found one that worked, can you use it find others like it? The results, though, are far less compelling. Experience teaches us that we need to be careful in making the association between a candidate and their resume – search misses the point: it’s the data that matters.&lt;/p&gt;  &lt;p&gt;From the New York Times piece, published in Jan, 2007 [3]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color:#004080;"&gt;Unfortunately, most of the academic research suggests that the factors Google has put the most weight on — grades and interviews — are not an especially reliable way of hiring good people.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4 align="center"&gt;“Interviews are a terrible predictor of performance.”&lt;/h4&gt;  &lt;p&gt;It’s a great read – Mr.Brock, brought in from GE to improve Google’s screening process, goes on to add [3]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color:#004080;"&gt;We wanted to cast a very wide net,” Mr. Bock said. “It is not unusual to walk the halls here and bump into dogs. Maybe people who own dogs have some personality trait that is useful.”&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color:#004080;"&gt;…&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color:#004080;"&gt;“You have to know or at least have a hypothesis why having a dog makes a good computer programmer,” Professor Mumford said. “If you ask whether someone started a club in high school, it is a clear indicator of leadership.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Questions like &lt;strong&gt;“what magazines do you subscribe to?”&lt;/strong&gt; and  &lt;strong&gt;“what pets do you have?” &lt;/strong&gt;might sound far fetched but are relatively mild when compared to hand-writing samples [8] and brain-scans [9]. &lt;/p&gt;  &lt;p&gt;Google’s antics remind me of similar tests that we’ve experienced first-hand [4], [5] for a related but different goal (re-aligning individuals to roles); in both cases, some struggle with accepting the connections that are made:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color:#004080;"&gt;The &lt;b&gt;OPTIMAX CHARACTER ASSESSMENT&lt;/b&gt; tool is a proven system that enhances the potential for optimal performance. Over &lt;b&gt;20,000 assessments &lt;/b&gt;have been conducted in &lt;b&gt;Europe&lt;/b&gt;, and in excess of &lt;b&gt;7,000 assessments in North America&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color:#004080;"&gt;The Optimax Character Assessment is the best available tool for identifying the psychocybernetical makeup of an individual for the following reasons:&lt;/span&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;scientifically based&lt;/b&gt; - founded on a mathematical and logical theory &lt;/span&gt;&lt;/li&gt;      &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;objective and quantifiable&lt;/b&gt; - uses mathematical formulas and algorithms &lt;/span&gt;&lt;/li&gt;      &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;well controlled&lt;/b&gt; - the test taker cannot manipulate or misunderstand the questions &lt;/span&gt;&lt;/li&gt;      &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;impartial&lt;/b&gt; - the results are not influenced by education, experience and knowledge &lt;/span&gt;&lt;/li&gt;      &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;accurate&lt;/b&gt; - the accuracy of the results reaches up to +90% &lt;/span&gt;&lt;/li&gt;      &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;reliable&lt;/b&gt; - repeated assessments will produce the same results; the assessment will predict all the changes for more than ten years &lt;/span&gt;&lt;/li&gt;      &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;universal &lt;/b&gt;- the assessment is non-discriminatory on any basis such as race, religion, sex, age, or disability &lt;/span&gt;&lt;/li&gt;      &lt;li&gt;&lt;span style="color:#004080;"&gt;It is &lt;b&gt;thorough&lt;/b&gt; - the interpretation of the results is based on the combination of over 500 parameters&lt;/span&gt; &lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;In addition to business organizations, Dr. Guy has been applying his model with success to Canadian athletes competing in the &lt;a href="http://www.optimax.org/about.asp" target="_blank"&gt;Olympics&lt;/a&gt;. I was so intrigued by my own results that I met with him in person to review them – not only did I find the assessment exceptionally accurate but those who knew me well were impressed too. That &lt;strong&gt;“taker(s) cannot manipulate or misunderstand questions”&lt;/strong&gt; and that &lt;strong&gt;“results are not influenced by education, experience and knowledge” &lt;/strong&gt;are critical components missing in conventional psychometric tools. &lt;/p&gt;  &lt;p&gt;In this context, I’d be interested to get his thoughts on the use of his assessment as a recruitment tool; of course, given the manual interpretation of results and the attendant cost, it’s not exactly something that most can employ for front-line (bulk) screening, but the results are nonetheless telling.&lt;/p&gt;  &lt;p&gt;There’s no doubt that we will shift towards increasingly scientific methods for not only recruitment but evaluation too, especially in light of the inherent flaws in today’s performance reviews (Chris has a great write-up on this  [7]) – as Seth puts it [11]: &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;“You don't have to like the coming era of hyper-measurement, but that doesn't mean it's not here.”&lt;/h4&gt; &lt;/blockquote&gt;  &lt;p&gt;Interestingly enough, this post started off with the intention of  exploring what it means to be successful in the software industry. An ex-colleague has an excellent series &lt;a href="http://softwarecreation.org/2008/top-10-qualities-of-the-perfect-programmer/" target="_blank"&gt;here&lt;/a&gt;, &lt;a href="http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://softwarecreation.org/2009/how-to-become-an-expert-top-7-qualities/" target="_blank"&gt;here&lt;/a&gt;. (I’m more or less in the Jeff Atwood minimalist camp: the best code is &lt;a href="http://www.codinghorror.com/blog/archives/000878.html" target="_blank"&gt;no code at all&lt;/a&gt;; most people acknowledge the importance of simplicity, but there’s no shortage of drastically different views on how to achieve it.) &lt;/p&gt;  &lt;p&gt;If the abandonment of that track to pursue the recruitment angle thought me anything, it’s that the right person may not have &lt;strong&gt;&lt;em&gt;any &lt;/em&gt;&lt;/strong&gt;of the qualities that you’re looking for. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;[1] – Google's Recruiting Practices   
&lt;a title="http://blogerp.typepad.com/hcm_research/2007/01/googles_recruit.html" href="http://blogerp.typepad.com/hcm_research/2007/01/googles_recruit.html"&gt;http://blogerp.typepad.com/hcm_research/2007/01/googles_recruit.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – Google Continues to Innovate in Recruiting and Candidate Assessment   
&lt;a title="http://www.ere.net/2007/01/08/google-continues-to-innovate-in-recruiting-and-candidate-assessment/" href="http://www.ere.net/2007/01/08/google-continues-to-innovate-in-recruiting-and-candidate-assessment/"&gt;http://www.ere.net/2007/01/08/google-continues-to-innovate-in-recruiting-and-candidate-assessment/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – Google Answer to Filling Jobs Is an Algorithm   
&lt;a title="http://www.nytimes.com/2007/01/03/technology/03google.html?_r=2&amp;amp;oref=slogin" href="http://www.nytimes.com/2007/01/03/technology/03google.html?_r=2&amp;amp;oref=slogin"&gt;http://www.nytimes.com/2007/01/03/technology/03google.html?_r=2&amp;amp;oref=slogin&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – Optimax Character Assessment   
&lt;a title="http://www.optimax.org/tools-character.asp" href="http://www.optimax.org/tools-character.asp"&gt;http://www.optimax.org/tools-character.asp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[5] – Optimax Competency Matrix   
&lt;a title="http://www.optimax.org/tools-comp.asp" href="http://www.optimax.org/tools-comp.asp"&gt;http://www.optimax.org/tools-comp.asp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[6] – Using AdWords   
&lt;a title="http://www.free-press-release.com/news-why-aren-t-you-using-google-advertising-for-recruitment-1251387060.html" href="http://www.free-press-release.com/news-why-aren-t-you-using-google-advertising-for-recruitment-1251387060.html"&gt;http://www.free-press-release.com/news-why-aren-t-you-using-google-advertising-for-recruitment-1251387060.html&lt;/a&gt;    
&lt;a title="http://www.slideshare.net/mspecht/online-recruitment-the-tools-techniques-and-challenges" href="http://www.slideshare.net/mspecht/online-recruitment-the-tools-techniques-and-challenges"&gt;http://www.slideshare.net/mspecht/online-recruitment-the-tools-techniques-and-challenges&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[7] – A Compelling argument against performance reviews   
&lt;a title="http://blog.chapmanconsulting.ca/2009/09/21/A+Compelling+Argument+Against+Performance+Reviews.aspx" href="http://blog.chapmanconsulting.ca/2009/09/21/A+Compelling+Argument+Against+Performance+Reviews.aspx"&gt;http://blog.chapmanconsulting.ca/2009/09/21/A+Compelling+Argument+Against+Performance+Reviews.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[8] – Knowing you from your writing   
&lt;a title="http://www.deccanherald.com/content/22797/knowing-you-your-writing.html" href="http://www.deccanherald.com/content/22797/knowing-you-your-writing.html"&gt;http://www.deccanherald.com/content/22797/knowing-you-your-writing.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[9] – Brain scans 'provide clue to leadership skills'   
&lt;a title="http://edition.cnn.com/2009/BUSINESS/09/10/brain.training.leadership/" href="http://edition.cnn.com/2009/BUSINESS/09/10/brain.training.leadership/"&gt;http://edition.cnn.com/2009/BUSINESS/09/10/brain.training.leadership/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[10] – Google recruits eggheads with mystery billboard   
&lt;a title="http://news.cnet.com/Google-recruits-eggheads-with-mystery-billboard/2100-1023_3-5263941.html" href="http://news.cnet.com/Google-recruits-eggheads-with-mystery-billboard/2100-1023_3-5263941.html"&gt;http://news.cnet.com/Google-recruits-eggheads-with-mystery-billboard/2100-1023_3-5263941.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[11] – Everyone gets paid on commission   
&lt;a title="http://sethgodin.typepad.com/seths_blog/2009/09/everyone-gets-paid-on-commission.html" href="http://sethgodin.typepad.com/seths_blog/2009/09/everyone-gets-paid-on-commission.html"&gt;http://sethgodin.typepad.com/seths_blog/2009/09/everyone-gets-paid-on-commission.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-7302991221135047869?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GaTkG6aAS4cL1n8vdGXw8_OJf6Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GaTkG6aAS4cL1n8vdGXw8_OJf6Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GaTkG6aAS4cL1n8vdGXw8_OJf6Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GaTkG6aAS4cL1n8vdGXw8_OJf6Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=WXYBOWC_j6w:u-bc5GwKG6c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=WXYBOWC_j6w:u-bc5GwKG6c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=WXYBOWC_j6w:u-bc5GwKG6c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=WXYBOWC_j6w:u-bc5GwKG6c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=WXYBOWC_j6w:u-bc5GwKG6c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=WXYBOWC_j6w:u-bc5GwKG6c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=WXYBOWC_j6w:u-bc5GwKG6c:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=WXYBOWC_j6w:u-bc5GwKG6c:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/WXYBOWC_j6w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/WXYBOWC_j6w/data-driven-approach-to-assessment.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/09/data-driven-approach-to-assessment.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-3815469777723786817</guid><pubDate>Thu, 17 Sep 2009 17:43:00 +0000</pubDate><atom:updated>2010-11-04T13:26:18.125-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windbg</category><category domain="http://www.blogger.com/atom/ns#">doesnt-work-with-2.x</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET Troubleshooting</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>Windbg Not Getting the Attention it Needs: Doesn’t Work With 2.x</title><description>&lt;p&gt;If you’ve never used &lt;strong&gt;Windbg&lt;/strong&gt;, you can probably stop reading – this isn’t for you. &lt;/p&gt;  &lt;p&gt;This is for the few, the proud and the brave, banging their heads trying to figure out why CPUs are suddenly spiking; it’s especially for those still supporting legacy apps with literally thousands of DataTables in memory. &lt;/p&gt;  &lt;p&gt;With the help of SOS (aka “&lt;a href="http://blogs.msdn.com/jasonz/archive/2003/10/21/53581.aspx" rel="nofollow" target="_blank"&gt;Son of Strike&lt;/a&gt;”), SOSEX and the &lt;strong&gt;inherent traps in large-scale .NET deployments &lt;/strong&gt;(60% CPU is considered normal), what was once an esoteric tool is gaining more and more traction. And because it’s predicated on the fact that you will &lt;em&gt;always&lt;/em&gt; have &lt;strong&gt;issues that only surface in production &lt;/strong&gt;(with inadequate instrumentation to tell the whole story), its significance is unlikely to diminish anytime soon. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windbg &lt;/strong&gt;is the be-all and end-all in production troubleshooting and it’s surprising that it’s not receiving the attention that it deserves from the CLR team.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;There are literally &lt;strong&gt;2 posts &lt;/strong&gt;describing the use of the &lt;strong&gt;!DumpDataTables &lt;/strong&gt;command. (DataTables are particularly significant as they’re an easy spot to catch uncached data-access or uncapped queries returning 10,000+ rows.) Alik and Tom, both presumably escalation engineers at Microsoft, detail case studies that demonstrate use of the command [1]. But what’s only mentioned in the comments of Alik’s post (can also be derived from Tom’s post through the use of &lt;strong&gt;.do –v&lt;/strong&gt; which is replaced by &lt;strong&gt;–da&lt;/strong&gt; for 2.x) is that !&lt;strong&gt;&lt;strong&gt;DumpDataTables &lt;/strong&gt;&lt;/strong&gt;isn’t available with SOS (externally) for 2.x assemblies &lt;em&gt;as yet&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;(For those counting, yes, we’re months into the .NET 4 preview and only a few months away from the &lt;a href="http://en.wikipedia.org/wiki/.NET_Framework#.NET_Framework_2.0" rel="nofollow" target="_blank"&gt;4 year&lt;/a&gt; anniversary of the 2.0 release – suffice it to say, it’s not coming.) &lt;/p&gt;  &lt;h4&gt;!DumpASPNETCache, !DumpDataTables, !DumpAllExceptions, !&lt;a href="http://bembengarifin-tech.blogspot.com/2007/04/find-application-with-debug-set-to-true.html" rel="nofollow" target="_blank"&gt;FindDebugTrue&lt;/a&gt;, !&lt;a href="http://blogs.msdn.com/tom/archive/2007/11/27/viewing-active-and-non-active-asp-net-requests-from-a-dump.aspx" rel="nofollow" target="_blank"&gt;ASPXPages&lt;/a&gt;, !DumpConfig, !DumpHttpContext and a host of others [6] aren’t available for 2.0 assemblies:&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_Bxo856Qd3qg/SrJ1Uwrr_JI/AAAAAAAAAOo/vvOTKRnZP0k/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_Bxo856Qd3qg/SrJ1WUz7MUI/AAAAAAAAAOs/WmMt0Q4_oYQ/image_thumb%5B3%5D.png?imgmax=800" width="521" height="535" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;“Doesn’t work with 2.x”&lt;/strong&gt; is all you get. And to add insult to injury, the latest CLR10\SOS available keeps flashing the ‘tip’ banner telling you how wonderful these commands are.&lt;/p&gt;  &lt;p&gt;You might be thinking &lt;em&gt;who cares&lt;/em&gt;, you can always script this [3] [4][6]; but even if the output of &lt;strong&gt;DumpAllExceptions &lt;/strong&gt;is equivalent to Tess’ script below, it misses the point: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;.foreach (ex {!dumpheap -type Exception -short}){.echo &amp;quot;********************************&amp;quot;;!pe –nested ${ex} }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In my experience, add-on scripts take longer to execute, have offsets that need to be uniquely configured, are more verbose and muddied in output and error out frequently when some written text info is displayed upon command execution. (Try Tess’ script for &lt;a href="http://blogs.msdn.com/tess/archive/2007/09/12/debugging-script-dumping-out-current-and-recent-asp-net-requests.aspx" rel="nofollow" target="_blank"&gt;dumping out current and recent ASPX requests&lt;/a&gt;, for instance.)&lt;/p&gt;  &lt;p&gt;The point is: if a SOS.dll with support for 2.x assemblies has been in use for years by the support team, why not release it on CodePlex without support or warranty and save users endless hours of frustration in having to sift through workarounds? &lt;/p&gt;  &lt;p&gt;And why hasn’t the market filled the gap for GUI tools for Windbg, along the lines of SOS Assist, that simplify this [8] instead of leaving us with more of the &lt;a href="http://www.codeplex.com/powerdbg" rel="nofollow" target="_blank"&gt;same&lt;/a&gt;? Such a tool needs to be a core citizen of .NET right alongside Visual Studio and the Reflector.&lt;/p&gt;  &lt;h4&gt;But what about SOSEX?&lt;/h4&gt;  &lt;p&gt;Definitely, SOSEX is &lt;a href="http://www.stevestechspot.com/default.aspx" rel="nofollow" target="_blank"&gt;indispensible&lt;/a&gt;: its support for displaying value types and revealing the full stack are basic prerequisites for any problem. But it doesn’t provide the commands above; and modernizing &lt;strong&gt;Windbg&lt;/strong&gt; is going to require more than one developer.&lt;/p&gt;  &lt;h4&gt;Some other notes that might help…&lt;/h4&gt;  &lt;p&gt;Start with &lt;strong&gt;!address open:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_Bxo856Qd3qg/SrKbhNDSklI/AAAAAAAAAOw/LM521iE2If8/s1600-h/image001%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image001" border="0" alt="image001" src="http://lh4.ggpht.com/_Bxo856Qd3qg/SrKbhgwPkoI/AAAAAAAAAO0/0XGmh9BHNMU/image001_thumb%5B2%5D.png?imgmax=800" width="619" height="498" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;How to read this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;~1.5GB out of 2GB (1578940 KB) (max is 32-bit) is in use; &lt;/li&gt;    &lt;li&gt;~500MB (518148) available (MEM_FREE) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Largest contiguous block is 46,368 =&amp;gt; memory already fragmented!&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;RegionUsageIsVAD (.NET allocates here ~1.1GB) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More on the implications of the largest contiguous block being less than 64Mb [9]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;h5&gt;&lt;em&gt;Large Object Heap&lt;/em&gt;&lt;/h5&gt;    &lt;p&gt;&lt;em&gt;You should also pay attention to large objects, which lead to memory fragmentation. When .NET based application (as ASP.NET) needs to allocate new memory, &lt;strong&gt;it does so looking for (and reserving) chunks of 64 Mb free and contiguous memory: that is the key of this matter&lt;/strong&gt;. When the Garbage Collector does its job and frees memory for unused (better say, unreachable) objects, it also tries to compact the chunks of memory to have it contiguous for future use, but this is not always possible: when the GC runs, it must temporarily stop all application threads, move around chunks of memory, update memory pointers and then the application can continue it’s job. But for performance reasons this can’t be done with objects larger than 85 Kb, which are seen as big objects from the CLR point of view and are allocated on a special heap, called the Large Object Heap. Objects in LOH are still collected and the memory freed, but since moving around such large chunks of memory is very expensive (and remember during this operation the application is frozen and can’t respond to client’s requests) and would require too much time and effort to the system, at the end the application would be too badly affected. The GC frees that memory but does not compact it, and this leaves some holes in our memory (like a Swiss cheese, if you like it).&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Multiply this process during the life of the application and you could end up having lot of free memory but so fragmented (I’ve seen dumps where we still had 80% of available memory that the biggest contiguous free chunk of memory was just 50 Mb, too small for the 64 Mb needed), than the CLR could do nothing else but throw an OutOfMemoryException. Of course if you have lots of big objects you’ll have more chances to run into this problem. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;This article has a quite detailed description of GC internals: “Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework” &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/1100/gci/" rel="nofollow" target="_blank"&gt;http://msdn.microsoft.com/msdnmag/issues/1100/gci/&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt; and part2 &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx" rel="nofollow" target="_blank"&gt;http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/default.aspx&lt;/a&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;.&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Update #1&lt;/strong&gt;: It looks like at least a few others raised this issue in &lt;a href="http://groups.google.com/group/microsoft.public.windbg/browse_thread/thread/c984ae6b70d1da26/3c822743be124c13?lnk=raot" rel="nofollow" target="_blank"&gt;2006&lt;/a&gt; and &lt;a href="http://bembengarifin-tech.blogspot.com/2007/04/find-application-with-debug-set-to-true.html" rel="nofollow" target="_blank"&gt;2007&lt;/a&gt; to no avail.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update #2: &lt;/strong&gt;John Robbins, Wintellect, echoes the sentiment [9]: &lt;em&gt;“This is especially important to .NET 2.0 because Microsoft dropped huge amounts of functionality in the SOS that ships with .NET 2.0 so digging through those production mini dumps was a complete carpel tunnel inducing exercise.”&lt;strong&gt; &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;[1] – &lt;strong&gt;!DumpTables&lt;/strong&gt; references from MS:     &lt;br /&gt;&lt;a title="http://blogs.msdn.com/tom/archive/2007/12/26/high-memory-continued.aspx" href="http://blogs.msdn.com/tom/archive/2007/12/26/high-memory-continued.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/tom/archive/2007/12/26/high-memory-continued.aspx&lt;/a&gt; &lt;a href="http://blogs.msdn.com/alikl/archive/2009/03/09/windbg-walkthrough-dump-values-of-dataset-or-datatable.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/alikl/archive/2009/03/09/windbg-walkthrough-dump-values-of-dataset-or-datatable.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – Sample case:    &lt;br /&gt;&lt;a href="http://rasmuskl.dk/post/A-WinDbg-Debugging-Journey-NHibernate-Memory-Leak.aspx" rel="nofollow" target="_blank"&gt;http://rasmuskl.dk/post/A-WinDbg-Debugging-Journey-NHibernate-Memory-Leak.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – Reading values from a DataTable: &lt;a href="http://labs.episerver.com/en/Blogs/Johano/Dates/2008/3/WinDBGSOS-Getting-at-the-values-in-a-DataTable/" rel="nofollow" target="_blank"&gt;http://labs.episerver.com/en/Blogs/Johano/Dates/2008/3/WinDBGSOS-Getting-at-the-values-in-a-DataTable/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – On deprecation of &lt;strong&gt;!do address –v&lt;/strong&gt; in 2.x and automation in Windbg: &lt;a title="http://blogs.msdn.com/vijaysk/archive/2008/01/15/windbg-scripting-dump-data-column-names-from-a-table.aspx" href="http://blogs.msdn.com/vijaysk/archive/2008/01/15/windbg-scripting-dump-data-column-names-from-a-table.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/vijaysk/archive/2008/01/15/windbg-scripting-dump-data-column-names-from-a-table.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[5] – Evolution of &lt;strong&gt;!da&lt;/strong&gt; command (some history): &lt;a title="http://blogs.msdn.com/shawnfa/archive/2004/04/30/124218.aspx" href="http://blogs.msdn.com/shawnfa/archive/2004/04/30/124218.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/shawnfa/archive/2004/04/30/124218.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;[6] – Manual Exceptions Summary:    &lt;br /&gt;&lt;a href="https://remote.workopolis.com/,DanaInfo=wktohub01.workopolis.net,SSL+redir.aspx?C=ee77f7d3f1634e8e9d1ba3607b89594a&amp;amp;URL=http%3a%2f%2fblogs.msdn.com%2ftess%2farchive%2f2009%2f04%2f16%2fnet-exceptions-quick-windbg-sos-tip-on-how-to-dump-all-the-net-exceptions-on-the-heap.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/tess/archive/2009/04/16/net-exceptions-quick-windbg-sos-tip-on-how-to-dump-all-the-net-exceptions-on-the-heap.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[7] – &lt;strong&gt;!help&lt;/strong&gt; output (latest CLR10\SOS from WinDbg 6.11.0001.404 x86):&lt;/p&gt;  &lt;blockquote&gt;   &lt;table border="0" cellspacing="0" cellpadding="2" width="442"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="240"&gt;&lt;strong&gt;Object Inspection&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;&lt;strong&gt;Examining code and stacks&lt;/strong&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="240"&gt;           &lt;p&gt;DumpObj (do)              &lt;br /&gt;DumpAllExceptions (dae) DumpStackObjects (dso)               &lt;br /&gt;DumpHeap (dh)               &lt;br /&gt;DumpVC               &lt;br /&gt;GCRoot               &lt;br /&gt;ObjSize               &lt;br /&gt;FinalizeQueue DumpDynamicAssemblies (dda) DumpField (df)               &lt;br /&gt;TraverseHeap (th)               &lt;br /&gt;GCRef &lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;Threads (t)              &lt;br /&gt;CLRStack               &lt;br /&gt;IP2MD               &lt;br /&gt;U               &lt;br /&gt;DumpStack               &lt;br /&gt;EEStack               &lt;br /&gt;GCInfo               &lt;br /&gt;COMState               &lt;br /&gt;X               &lt;br /&gt;SearchStack &lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="240"&gt;&lt;strong&gt;Examining CLR data structures&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;&lt;strong&gt;Diagnostic Utilities&lt;/strong&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="240"&gt;           &lt;p&gt;DumpDomain              &lt;br /&gt;EEHeap               &lt;br /&gt;Name2EE               &lt;br /&gt;SyncBlk               &lt;br /&gt;DumpASPNETCache(dac)               &lt;br /&gt;DumpMT               &lt;br /&gt;DumpClass               &lt;br /&gt;DumpMD               &lt;br /&gt;Token2EE               &lt;br /&gt;EEVersion               &lt;br /&gt;DumpSig               &lt;br /&gt;DumpModule               &lt;br /&gt;ThreadPool(tp)               &lt;br /&gt;ConvertTicksToDate(ctd)               &lt;br /&gt;ConvertVTDateToDate(cvtdd) RWLock               &lt;br /&gt;DumpConfig               &lt;br /&gt;DumpHttpRuntime DumpSessionStateConfig DumpBuckets               &lt;br /&gt;DumpHistoryTable DumpRequestTable               &lt;br /&gt;DumpCollection(dc)               &lt;br /&gt;DumpDataTables               &lt;br /&gt;GetWorkItems DumpLargeObjectSegments(dl) DumpModule               &lt;br /&gt;DumpAssembly DumpMethodSig DumpRuntimeTypes               &lt;br /&gt;PrintIPAddress               &lt;br /&gt;DumpHttpContext DumpXmlDocument(dxd)&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="200"&gt;           &lt;p&gt;VerifyHeap(vh) DumpLog FindAppDomain              &lt;br /&gt;SaveModule               &lt;br /&gt;SaveAllModules(sam)               &lt;br /&gt;GCHandles               &lt;br /&gt;GCHandleLeaks FindDebugTrue FindDebugModules               &lt;br /&gt;Bp               &lt;br /&gt;ProcInfo               &lt;br /&gt;StopOnException(soe)               &lt;br /&gt;TD               &lt;br /&gt;Analysis               &lt;br /&gt;Bl               &lt;br /&gt;CheckCurrentException(cce) CurrentExceptionName(cen) ExceptionBp               &lt;br /&gt;FindTable LoadCache               &lt;br /&gt;SaveCache               &lt;br /&gt;ASPXPages DumpGCNotInProgress CLRUsage&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/blockquote&gt;  &lt;p&gt;[8] – SOS Assist:    &lt;br /&gt;&lt;a title="http://old.thinktecture.com/SOSAssist/Screenshots.htm" href="http://old.thinktecture.com/SOSAssist/Screenshots.htm" rel="nofollow" target="_blank"&gt;http://old.thinktecture.com/SOSAssist/Screenshots.htm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;[9] – Large Object Heap:    &lt;br /&gt;&lt;a title="http://blogs.msdn.com/carloc/archive/2006/09/25/770314.aspx" href="http://blogs.msdn.com/carloc/archive/2006/09/25/770314.aspx" rel="nofollow" target="_blank"&gt;http://blogs.msdn.com/carloc/archive/2006/09/25/770314.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[10] – John Robbins On SOSEX:    &lt;br /&gt;&lt;a title="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/06/19/great-sosex-a-phenomenal-net-debugging-extension-to-see-the-hard-stuff-steve-johnson-is-my-hero.aspx" href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/06/19/great-sosex-a-phenomenal-net-debugging-extension-to-see-the-hard-stuff-steve-johnson-is-my-hero.aspx" rel="nofollow" target="_blank"&gt;http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/06/19/great-sosex-a-phenomenal-net-debugging-extension-to-see-the-hard-stuff-steve-johnson-is-my-hero.aspx&lt;/a&gt;     &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/en-us/magazine/cc164138.aspx" href="http://msdn.microsoft.com/en-us/magazine/cc164138.aspx" rel="nofollow" target="_blank"&gt;http://msdn.microsoft.com/en-us/magazine/cc164138.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-3815469777723786817?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HE1j7G3b5WIKxnQCNfKF1gMm1OI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HE1j7G3b5WIKxnQCNfKF1gMm1OI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HE1j7G3b5WIKxnQCNfKF1gMm1OI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HE1j7G3b5WIKxnQCNfKF1gMm1OI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ncI7TkCl7Qg:5GU6PBNsIQI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=ncI7TkCl7Qg:5GU6PBNsIQI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ncI7TkCl7Qg:5GU6PBNsIQI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ncI7TkCl7Qg:5GU6PBNsIQI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ncI7TkCl7Qg:5GU6PBNsIQI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=ncI7TkCl7Qg:5GU6PBNsIQI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ncI7TkCl7Qg:5GU6PBNsIQI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=ncI7TkCl7Qg:5GU6PBNsIQI:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/ncI7TkCl7Qg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/ncI7TkCl7Qg/windbg-sos-dumpdatatables-aspxpages-etc.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_Bxo856Qd3qg/SrJ1WUz7MUI/AAAAAAAAAOs/WmMt0Q4_oYQ/s72-c/image_thumb%5B3%5D.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/09/windbg-sos-dumpdatatables-aspxpages-etc.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-4831237912296163777</guid><pubDate>Tue, 08 Sep 2009 13:29:00 +0000</pubDate><atom:updated>2009-10-03T16:12:49.286-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Google Apps SLA</category><category domain="http://www.blogger.com/atom/ns#">Google Outage</category><category domain="http://www.blogger.com/atom/ns#">Network Availability</category><category domain="http://www.blogger.com/atom/ns#">Google Apps</category><category domain="http://www.blogger.com/atom/ns#">Cloud Computing</category><title>The Google Outage: On Misplaced Rage &amp; Crowd Mentality</title><description>&lt;p&gt;There is no shortage of outcries over the now infamous 100-minute outage. &lt;/p&gt;  &lt;p&gt;“Little ‘dashboards’ aren't going to cut it,” or so it seems [1]. &lt;/p&gt;  &lt;p&gt;People want answers – and they want accountability. &lt;/p&gt;  &lt;p&gt;Just don’t hold your breath for either.&lt;/p&gt;  &lt;p&gt;Accountability will be supplied by the market; yes, once you abandon on-premise infrastructure, "it may be cost-prohibitive to return”; but that’s why the onus is on you, during the selection process, to make sure that the move protects against technologies that promote ‘vendor lock-in’ – and there’s plenty of support to manage this risk.&lt;/p&gt;  
&lt;a name='more'&gt;&lt;/a&gt; 
&lt;p&gt;Pardon the terrible expression, but &lt;strong&gt;&lt;em&gt;at the end of the day&lt;/em&gt;&lt;/strong&gt;, expertise &lt;em&gt;will &lt;/em&gt;converge into the hands of a few who will offer services that the fragmented provides of today can’t – this doesn’t protect against outages (nothing does!) but it does give you the best industry has to offer and delivers it for less than you pay today. &lt;/p&gt;  &lt;p&gt;And of course the opportunity to parade around the standard cloud adoption scarecrows wasn’t lost either [2]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;I had a similar reaction to the newly announced &lt;/span&gt;&lt;a href="http://www.infoworld.com/d/cloud-computing/amazon-web-services-integrates-datacenter-using-private-clouds-145"&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Virtual Private Cloud offering from Amazon&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;. Yes, the company has added some security features enterprises desire. But scroll down to the bottom of the FAQ, and in answer to the question "Does Amazon VPC have a Service Level Agreement (SLA)?" you'll see a two-word answer: "Not currently."&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;And when you think about it -- how could they? The liability would be ridiculously large if Amazon or Google started offering guarantees that came near the value of some unforeseeable disaster. Until that elephant in the living room is dealt with, few enterprise IT folks will take cloud services seriously.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’d like to know who this mysterious entity that “&lt;span style="color: rgb(0, 64, 128);"&gt;offers guarantees… near the value of some unforeseen disaster&lt;/span&gt;” is? Does you in-house IT offer this? Or does your managed IT provider offer this? &lt;/p&gt;  &lt;p&gt;Because this is what I see when I look at managed SLAs, and it doesn’t strike me as unusual:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;&lt;strong&gt;Service Level Agreement (SLA)&lt;/strong&gt;       
Please Note: The maximum service credit(s) available under this SLA in any calendar month shall not exceed fifty percent (50%) of the Customer’s monthly fees otherwise payable in such calendar month.       
&lt;/span&gt;&lt;strong&gt;      
&lt;span style="color: rgb(0, 64, 128);"&gt;1. 100% Infrastructure Availability        
&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Acme will use its reasonable best efforts to maintain critical infrastructure availability 100% of the time in any given month. If the Customer experiences downtime due to the unavailability of critical infrastructure, Acme will refund the customer 10% of the monthly fee otherwise payable for each 60 minutes of downtime (up to a maximum of 50% of Customer's monthly fee for the affected Service). Critical infrastructure includes functioning of all power and HVAC including UPS. It does not, however, include the power supplies on the Customer's servers unless they are dual power supply machines. Infrastructure downtime exists when a particular server is shut down due to power or heat problems and is measured from the time the monitoring system detects the outage until the time the problem is resolved, the server is powered back on and the monitoring system records the system as active on the network (i.e. pingable). Credits shall not be provided to the Customer if infrastructure downtime is the result of: a) Temporary Service Suspension as per Section 4 of the MSA; b) Emergency Suspension of Services as per Section 6 or the MSA; c) circumstances beyond Acme’s reasonable control, including but not limited to Customer-provided software or equipment or Force Majeure Events; or d) a breach by the Customer of this Agreement or Acme’s AUP.&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;&lt;strong&gt;2. 100% Network Availability&lt;/strong&gt;       
Acme will use its reasonable best efforts to ensure that its core network will be available 100% of the time in any given month. If the core network becomes unavailable and the Customer experiences downtime, Acme will refund 10% of the Customer's monthly fee otherwise payable for each 60 minutes of downtime (up to a maximum of 50% of Customer's monthly fee for the affected server). Network availability includes functioning of all network infrastructure including routers, core switches. It does not include distribution layer switching unless the Customer’s service includes redundant connections to distribution layer switching. Also, it does not include software running on the Customer's server. Network downtime exists when all core network interfaces are unavailable as determined and measured by a third party global monitoring system. These reports will be made available to Customer upon request. Credits shall not be provided to the Customer if network downtime is the result of: a) Temporary Service Suspension as per Section 4 of the MSA; b) Emergency Suspension of Services as per Section 6 or the MSA; c) circumstances beyond Acme’s reasonable control, including but not limited to Customer-provided software or equipment or Force Majeure Events; or d) a breach by the Customer of this Agreement or Acme’s AUP.&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;An interesting exercise is to think about is how quickly your competitors could force your hand on adoption that you may not be ready for: &lt;a href="http://sethgodin.typepad.com/seths_blog/2009/08/competing-with-the-singleminded.html" target="_blank"&gt;Competing with the Singleminded&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;[1] – Gmail Outage Explanation Doesn't Wash  
&lt;a title="http://www.pcworld.com/businesscenter/article/171317/gmail_outage_explanation_doesnt_wash.html?tk=" href="http://www.pcworld.com/businesscenter/article/171317/gmail_outage_explanation_doesnt_wash.html?tk=rel_news"&gt;http://www.pcworld.com/businesscenter/article/171317/gmail_outage_explanation_doesnt_wash.html?tk=rel_news&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – Gmail follies and Google's enterprise pitch  
&lt;a title="http://www.infoworld.com/t/cloud-computing/gmail-follies-and-googles-enterprise-pitch-540" href="http://www.infoworld.com/t/cloud-computing/gmail-follies-and-googles-enterprise-pitch-540"&gt;http://www.infoworld.com/t/cloud-computing/gmail-follies-and-googles-enterprise-pitch-540&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-4831237912296163777?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RsOi8ri6AIZ-qCHQGBcb-CwDQzM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RsOi8ri6AIZ-qCHQGBcb-CwDQzM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RsOi8ri6AIZ-qCHQGBcb-CwDQzM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RsOi8ri6AIZ-qCHQGBcb-CwDQzM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=TTYTKv6qSeg:JCkOAIsv148:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=TTYTKv6qSeg:JCkOAIsv148:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=TTYTKv6qSeg:JCkOAIsv148:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=TTYTKv6qSeg:JCkOAIsv148:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=TTYTKv6qSeg:JCkOAIsv148:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=TTYTKv6qSeg:JCkOAIsv148:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=TTYTKv6qSeg:JCkOAIsv148:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=TTYTKv6qSeg:JCkOAIsv148:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/TTYTKv6qSeg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/TTYTKv6qSeg/google-outage-on-misplaced-rage-crowd.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>1</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/09/google-outage-on-misplaced-rage-crowd.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-2993671374762932166</guid><pubDate>Wed, 02 Sep 2009 13:04:00 +0000</pubDate><atom:updated>2009-10-03T16:52:09.212-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Content Distribution Networks</category><category domain="http://www.blogger.com/atom/ns#">Multi-homing</category><category domain="http://www.blogger.com/atom/ns#">F5 Global Traffic Manager (GTM)</category><category domain="http://www.blogger.com/atom/ns#">Latency</category><title>Latency: Solving 80% of the Problem</title><description>&lt;p&gt;There’s a great post describing the “solve 80% of the problem” &lt;a href="http://amix.dk/blog/viewEntry/19464" target="_blank"&gt;mantra&lt;/a&gt; that’s worth paying attention to, especially in IT, where idealism yields to &lt;strong&gt;&lt;em&gt;much&lt;/em&gt;&lt;/strong&gt; tougher budget, risk-appetite, time, and resource constraints; in IT, you &lt;em&gt;can&lt;/em&gt; really drown in the last 20%, even on problems much easier than real-time search.&lt;/p&gt;&lt;p&gt;We’ve had a couple of interesting discussions on a very old and widely-covered topic: &lt;strong&gt;latency&lt;/strong&gt;. As it relates to web response times, studies (by Google, Amazon and others) suggest that delays as small as 250-500ms matter to your audience and impact revenue [6].&lt;/p&gt;&lt;p&gt;Two completely separate threads, with two completely different teams, debated issues that ultimately distilled down to latency; participants included upper levels of management:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;How to reduce excessive round-trips required to render the homepage; &lt;/li&gt;&lt;li&gt;How to keep users pegged to a particular Data Center without introducing routing delays; &lt;/li&gt;&lt;/ol&gt;
&lt;a name='more'&gt;&lt;/a&gt; 
&lt;p&gt;Before looking at solutions, let’s make sure we have a good sense for what latency is and why it matters so much. What may have once been dismissed as a ‘implementation detail’ is increasingly in spotlight as businesses build layers of redundancy, cater to wider audiences, and rely on distributed solutions. Side-stepping text-book definitions [1], a basic description resonates well is offered by Stuart Cheshire in his now infamous &lt;strong&gt;“It’s the Latency, Stupid”&lt;/strong&gt; post:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;If you have a network link with low bandwidth then it's an easy matter of putting several in parallel to make a combined link with higher bandwidth, but if you have a network link with bad latency then no amount of money can turn any number of them into a link with good latency.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;To see how important this is to the internet elite, look no further than recent headlines [2]:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;&lt;strong&gt;Miller: &lt;/strong&gt;The choice of rural North Carolina suggests that the bottom line for Apple is cost, rather than connectivity. The site in Maiden, NC is not far from a large data center by Google, which usually chases cheap power and tax incentives. Power from Duke Energy is about 4 to 5 cents per kilowatt hour, compared to 7 to 12 cents in California. The company also maximized its incentives by pitting Virginia and North Carolina against one another in trying to wring the best tax incentives out of both states (a popular strategy in data center site location).&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Some large companies use distributed data centers to manage their latency and content delivery costs. That may be part of Apple’s thinking, since they’re a major customer for CDNs (I believe they use both Akamai and Limelight Networks). Facebook cited latency to Europe as a key factor in its decision to add data centers in Virginia. Before that, MySpace added a data center in Los Angeles to reduce its reliance on CDNs. But in both cases, those companies sought out Internet hubs where they could connect with dozens of other networks to manage their Internet traffic. You don’t get that in rural North Carolina, so &lt;strong&gt;Apple seems more focused on cost and scale than on connectivity – which again would suggest a cloud focus.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;A big problem that’s only going to get bigger, this much is accepted [4]:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;But, as Todd Hoff notes in &lt;/span&gt;&lt;a href="http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it"&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;"Latency is Everywhere and it Costs You Sales - How to Crush it,"&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 64, 128);"&gt; latency concerns are still very much with us. In fact, the nine sources of latency that he lists suggest that latency is actually a much thornier problem in a world where applications are broken into pieces and often distributed around the world.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Just a few days before these debates stirred up, I stumbled across a Google tech talk on “Multihoming” (operating out of multiple Data Centers) [5], particularly relevant at the time as we had just encountered some of the challenges – even after ‘cheating’, in a sense, by dodging the toughest aspect of multihoming (distributing data).&lt;/p&gt;&lt;p&gt;In his talk, Ryan highlights the fact that CDNs [3] are indeed masters at “edge” caching (removing the latency); we’ve covered &lt;a href="http://www.onpreinit.com/2009/07/running-your-site-on-content.html" target="_blank"&gt;this&lt;/a&gt; as well, but to recap: it’s one of the most sensible, cost-effective things you can do (when catering to distributed audiences); regardless of what Jeff A. would have you believe [6], a &lt;span style="font-style: italic; font-weight: bold;"&gt;well&lt;/span&gt;-selected CDN improves performance and reduces bandwidth expenses at the same time. &lt;/p&gt;&lt;p&gt;&lt;a href="http://code.google.com/events/io/sessions/TransactionsAcrossDatacenters.html" target="_blank"&gt;&lt;img style="border: 0px none ; display: inline;" title="image" alt="image" src="http://lh6.ggpht.com/_Bxo856Qd3qg/SqF99C8YHeI/AAAAAAAAAOc/0ujolhnupzA/image10%5B1%5D.png?imgmax=800" border="0" height="336" width="580" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://code.google.com/events/io/sessions/TransactionsAcrossDatacenters.html" target="_blank"&gt;&lt;img style="border: 0px none ; display: inline;" title="image" alt="image" src="http://lh5.ggpht.com/_Bxo856Qd3qg/Sp5tSigMOVI/AAAAAAAAAOg/72FB4YXSZRA/image5%5B1%5D.png?imgmax=800" border="0" height="336" width="580" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;He also goes onto highlight that geolocality, "putting stuff near your users so their requests get to it and back, FAST”, is a primary driver for them too: “in the US, we are somewhat spoiled… and it’s easy to ignore the benefits of geolocality. Lots of stuff is here and we have good backbone connectivity to everywhere else. If you’ve ever spent time in India, China… there is a mixed bag of infrastructure at best. Even in Australia, there is good infrastructure but it’s far away.”&lt;/p&gt;&lt;p&gt;(We’ve seen this first-hand: imagine trying to serve-up Microsoft’s SharePoint to remote mine sites using Satellite links – it’s not pretty.)&lt;/p&gt;&lt;p&gt;Even here in North America, round trip from east coast to west cost is &lt;strong&gt;&lt;u&gt;30 ms&lt;/u&gt;&lt;/strong&gt;, without any queuing delays or router delays. “Purely speed of light,” Ryan adds. “If you go through some of the &lt;a href="http://en.wikipedia.org/wiki/List_of_Internet_exchange_points_by_size" target="_blank"&gt;big&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Peering" target="_blank"&gt;peering&lt;/a&gt; points, PAC-East, PAC-West, MAE-East, MAE-West, “God help you”, “they’re always overloaded”, “they’re going to add another 30-50ms without breaking a sweat.”&lt;/p&gt;&lt;p&gt;When you add this up, it takes just 10 round-trips to create a delay that users notice.
&lt;/p&gt;&lt;p&gt;It’s not that we didn’t appreciate this, it's just that it's not always easy to fix, and in this case, the cost/benefit wasn't particularly attractive; latency could be fought more efficiently and more easily on other fronts. &lt;/p&gt;&lt;p&gt;With the two initial problems, we accepted the complexities and agreed that:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Instead of all-out browser caching (for static requests), we can offer most of the benefit (80% ?) without custom development simply by using hourly or daily expirations that coincide with release schedules (otherwise, you need to start thinking about filenames that include embedded release info to invalidate client copies - had this been baked into the initial design, it'd be a different story); &lt;/li&gt;&lt;li&gt;We can keep more than 80%+ of users pegged to a DC without material changes to the application; instead of working on a treatment for the other 20%, we can spend the time reducing more obvious latency issues in a manner that benefits everyone. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Technical Notes:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;On keeping users pegged to a particular DC – because the application requires web-server affinity (relies on in-process memory), it also requires data-center affinity. This is normally provided by the BigIP F5 load balancer (GTM, to be specific) through stickiness based on the IP that queried the DNS record. It turns out that some ISPs proxy out these queries, so a particular user, mid-session (behavior varies across browsers) may suddenly see a new IP for the next DNS query, and potentially land at a new DC. And this effect is only amplifiied by short TTLs.
&lt;/p&gt;&lt;p&gt;Though there a couple of alternative solutions, choices really boil down to: re-routing users back to the proper DC behind the scenes (and introducing latency, via a 100KM link that all requests for these users must funnel through) or exposing DCs under unique host-names (messy from an SEO, usability perspective). &lt;/p&gt;&lt;p&gt;Which would you choose? &lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;img style="border-width: 0px; display: inline;" title="image" alt="image" src="http://lh5.ggpht.com/_Bxo856Qd3qg/Sp5tVt80gbI/AAAAAAAAAOA/z0XKDOPAIOk/image_thumb13.png?imgmax=800" border="0" height="330" width="459" /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;[1] - Latency: The Silent Killer of Application Performance
&lt;a title="http://www3.villanova.edu/gartner/research/123400/123455/123455.pdf" href="http://www3.villanova.edu/gartner/research/123400/123455/123455.pdf"&gt;http://www3.villanova.edu/gartner/research/123400/123455/123455.pdf&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Latency refers to the time required for a packet to traverse the network from source to destination. When dealing with the WAN, latency is measured as "round trip time" (RTT). In LAN environments, where applications are usually designed and tested, RTT is less than 10 milliseconds (ms). When dealing with cross-continental WANs, RTT increases from 50 ms to 75 ms; in global networks, it will reach 250 ms or more. The bandwidth provisioned is not a significant factor (especially once connections reach T1/E1 rates) in the overall latency because the predominant contributor to RTT (and hence, application delay) is the time "on the wire," which is gated by the speed of light. Therefore, latency (and application performance) is directly proportional to distance from the data center.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;[2] - Interview: Apple’s Gigantic New Data Center Hints at Cloud Computing
&lt;a title="http://www.cultofmac.com/interview-apples-gigantic-new-data-center-hints-at-cloud-computing/14680#more-14680" href="http://www.cultofmac.com/interview-apples-gigantic-new-data-center-hints-at-cloud-computing/14680#more-14680"&gt;http://www.cultofmac.com/interview-apples-gigantic-new-data-center-hints-at-cloud-computing/14680#more-14680&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[3] - What CDN would you recommend?
&lt;a title="http://highscalability.com/what-cdn-would-you-recommend-0" href="http://highscalability.com/what-cdn-would-you-recommend-0"&gt;http://highscalability.com/what-cdn-would-you-recommend-0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[4] - Latency (still) matters
&lt;a title="http://news.cnet.com/8301-13556_3-10024650-61.html" href="http://news.cnet.com/8301-13556_3-10024650-61.html"&gt;http://news.cnet.com/8301-13556_3-10024650-61.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[5] - Multihoming: How Google Serves Data from Multiple Datacenters
&lt;a title="http://code.google.com/events/io/sessions/TransactionsAcrossDatacenters.html" href="http://code.google.com/events/io/sessions/TransactionsAcrossDatacenters.html"&gt;http://code.google.com/events/io/sessions/TransactionsAcrossDatacenters.html&lt;/a&gt;
&lt;a href="http://highscalability.com/how-google-serves-data-multiple-datacenters"&gt;http://highscalability.com/how-google-serves-data-multiple-datacenters&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[6] - YSlow: Yahoo's Problems Are Not Your Problems
&lt;a title="http://www.codinghorror.com/blog/archives/000932.html" href="http://www.codinghorror.com/blog/archives/000932.html"&gt;http://www.codinghorror.com/blog/archives/000932.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[7] – When the Speed of Light is Too Slow
&lt;a title="http://t1rex.blogspot.com/2005/03/when-speed-of-light-is-too-slow.html" href="http://t1rex.blogspot.com/2005/03/when-speed-of-light-is-too-slow.html"&gt;http://t1rex.blogspot.com/2005/03/when-speed-of-light-is-too-slow.html&lt;/a&gt;
&lt;a title="http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it" href="http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it"&gt;http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-2993671374762932166?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RfWUcdokLZHvoaaOT-hg8f_Bwr8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfWUcdokLZHvoaaOT-hg8f_Bwr8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RfWUcdokLZHvoaaOT-hg8f_Bwr8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfWUcdokLZHvoaaOT-hg8f_Bwr8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VrhrQQOpHTs:LExYS_Vdu8Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=VrhrQQOpHTs:LExYS_Vdu8Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VrhrQQOpHTs:LExYS_Vdu8Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VrhrQQOpHTs:LExYS_Vdu8Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VrhrQQOpHTs:LExYS_Vdu8Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=VrhrQQOpHTs:LExYS_Vdu8Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VrhrQQOpHTs:LExYS_Vdu8Y:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=VrhrQQOpHTs:LExYS_Vdu8Y:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/VrhrQQOpHTs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/VrhrQQOpHTs/latency-solving-80-of-problem.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_Bxo856Qd3qg/SqF99C8YHeI/AAAAAAAAAOc/0ujolhnupzA/s72-c/image10%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/09/latency-solving-80-of-problem.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-202230548039788350</guid><pubDate>Sat, 22 Aug 2009 15:04:00 +0000</pubDate><atom:updated>2009-08-25T06:59:42.721-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Productivity</category><category domain="http://www.blogger.com/atom/ns#">Marketing</category><title>The MPG Illusion &amp; Seth Godin</title><description>&lt;p&gt;I’ve been an avid follower of Seth Godin ever since I watched his &lt;a href="http://blog.businessofsoftware.org/2009/07/seth-godins-talk-from-business-of-software-2008.html" target="_blank"&gt;“why marketing is too important to be left to the marketing department”&lt;/a&gt; talk at the Business of Software conference. (If you haven’t made the time to see this, you really should.)&lt;/p&gt;&lt;p&gt;This morning his &lt;a href="http://sethgodin.typepad.com/seths_blog/2009/08/not-so-good-at-math.html" target="_blank"&gt;blog&lt;/a&gt; featured a simple quiz, which I must admit had me stumped too, despite my Bachelor of Mathematics degree:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;A simple quiz for smart marketers:&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Let's say your goal is to reduce gasoline consumption.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;And let's say there are only two kinds of cars in the world. Half of them are Suburbans that get 10 miles to the gallon and half are Priuses that get 50.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;If we assume that all the cars drive the same number of miles, which would be a better investment:&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Get new tires for all the Suburbans and increase their mileage a bit to 13 miles per gallon. &lt;/span&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Replace all the Priuses and rewire them to get 100 miles per gallon (&lt;strong&gt;doubling&lt;/strong&gt; their average!)&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Trick question aside, the answer is the first one. (In fact, it's more than twice as good a move).&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;We're not wired for arithmetic. It confuses us, stresses us out and more often than not, is used to deceive.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Surely, there’s a trick, I thought; I immediately started reading too deeply into the subtleties of the implicit  consumption associated with new Suburbans tires vs. replacing Priuses outright – this completely missed the point!&lt;/p&gt;&lt;p&gt;Frustrated, I opened up Notepad and wrote it all down:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Let &lt;em&gt;m&lt;/em&gt; be number of miles driven by a car... &lt;/li&gt;&lt;li&gt;Let &lt;em&gt;s &lt;/em&gt;be the gas consumption (in gallons) for Suburbans (= m/10)&lt;/li&gt;&lt;li&gt;Let &lt;em&gt;p &lt;/em&gt;be the gas consumption (in gallons) for Priuses (= m/50)&lt;/li&gt;&lt;li&gt;Let T be the total consumption (in gallons) (= s + &lt;em&gt;p&lt;/em&gt; = m/10 + m/50 = 6m/50 = 0.12m)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So in Scenario #1, we have T = m/13 + m/50 = 50m+13m/650 = 63m/650 = 0.097m &lt;/p&gt;&lt;p&gt;And in Scenario #2, we have T = m/10 + m/100 = 11m/100 = 0.11m&lt;/p&gt;&lt;p&gt;Scenario #1 reduced consumption by 0.12-0.097 = 0.023; Scenario #2 only by 0.01; &lt;strong&gt;Scenario #1 is 2.3x more efficient&lt;/strong&gt;! Sure, it all makes sense when it’s drawn out for you [1]:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;This very interesting article in &lt;/span&gt;&lt;/em&gt;&lt;a href="http://www.sciencemag.org/"&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;Science&lt;/span&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;span style="color: rgb(0, 64, 128);"&gt;, “The MPG Illusion” by Richard P. Larrick and Jack B. Soll at the Fuqua School of Business in Duke University (Vol 320, June 20, 2008, p. 1593), points out the mathematically obvious truth that &lt;strong&gt;gas used per mile is inversely proportional to miles per gallon, which means that you have a steeper slope at lower MPG ratings, and diminishing returns at higher MPG ratings&lt;/strong&gt;. &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;img src="http://bunniestudios.com/blog/images/mpg_science08.jpg" /&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Now, try to think about how this applies to your daily life and where you spend your time, particularly as an application developer. &lt;/p&gt;&lt;p&gt;More on this next time…&lt;/p&gt;&lt;p&gt;[1] -
&lt;a title="http://www.bunniestudios.com/blog/?p=" href="http://www.bunniestudios.com/blog/?p=257"&gt;http://www.bunniestudios.com/blog/?p=257&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-202230548039788350?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XSm57MzNPW4HegbrEd2rqyUTpyM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XSm57MzNPW4HegbrEd2rqyUTpyM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XSm57MzNPW4HegbrEd2rqyUTpyM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XSm57MzNPW4HegbrEd2rqyUTpyM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=avWxk7_qZPk:7KPZkFK9QHQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=avWxk7_qZPk:7KPZkFK9QHQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=avWxk7_qZPk:7KPZkFK9QHQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=avWxk7_qZPk:7KPZkFK9QHQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=avWxk7_qZPk:7KPZkFK9QHQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=avWxk7_qZPk:7KPZkFK9QHQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=avWxk7_qZPk:7KPZkFK9QHQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=avWxk7_qZPk:7KPZkFK9QHQ:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/avWxk7_qZPk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/avWxk7_qZPk/mpg-illusion-seth-godin.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>19</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/08/mpg-illusion-seth-godin.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-3287936075830535899</guid><pubDate>Wed, 12 Aug 2009 19:24:00 +0000</pubDate><atom:updated>2009-10-03T16:15:41.191-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SR+ED</category><category domain="http://www.blogger.com/atom/ns#">SR+ED Consulting</category><category domain="http://www.blogger.com/atom/ns#">Scientific Research and Experimental Development</category><category domain="http://www.blogger.com/atom/ns#">Outsourcing Claims</category><category domain="http://www.blogger.com/atom/ns#">IT Claims</category><title>Successful SR&amp;ED (Scientific Research &amp; Experimental Development) Claims Explained</title><description>&lt;p&gt;The technical, logic-oriented side of me has traditionally despised SR&amp;amp;ED; and I’m sure that the ambiguity, subjectivity, procedural vagueness, lack of structure and transparency are nightmares for other likeminded individuals too. In this post, we breakthrough the confusion and deliver a succinct, objective methodology for Canadian IT professionals, most of whom have at one point or another grappled with SR&amp;amp;ED and reluctantly accepted the guidance of consultants as the sole authority. &lt;/p&gt;  &lt;p&gt;I’m really curious: what’s been your experience with SR&amp;amp;ED? &lt;/p&gt;  &lt;p&gt;Drop me a line if, after reading this, you still aren’t clear about what’s in and what’s out. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion #1: Outsourcing Claims&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are no shortage of consultants, claiming expertise and exclusive insights into the muddied waters of SR&amp;amp;ED, willing to help you navigate the terrain and maximize your claim potential, even on a contingency basis. In my experience, based on both accepted and challenged claims, these services offer little value-add. At their core, successful SR&amp;amp;ED claims should be transparent enough to be authored by internal resources, assuming they’ve been properly acclimated to the process and its common pitfalls (what this post is intended to help with).&lt;/p&gt;  &lt;p&gt;So here it is, in a nutshell; the 6-step guide to successful SR&amp;amp;ED claims:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Familiarize yourself with the fundamentals of the program; understand the difference between IRAP and SR&amp;amp;ED [1]. &lt;/li&gt;    &lt;li&gt;Read the &lt;strong&gt;Guidance on Eligibility of Software Projects for the SR&amp;amp;ED Tax Credits and Developing and Documenting Claims &lt;/strong&gt;[2]; yes, it’s an old document, but the cases and methodology are very much relevant even for current FY08, FY09 claims. &lt;/li&gt;    &lt;li&gt;Group each part of your claim clearly under the three criteria of eligibility: &lt;strong&gt;Technological Uncertainty&lt;/strong&gt; (TU), &lt;strong&gt;&lt;strong&gt;Technological &lt;/strong&gt;Content/Chronology &lt;/strong&gt;(TC) and the &lt;strong&gt;&lt;strong&gt;Technological &lt;/strong&gt;Advancement &lt;/strong&gt;(TA). Note that under the revised T661 form [3] for 2009, TU = 242, TA = 240, TC = 244; the new ordering they’ve suggested is actually counter-intuitive and somewhat harmful, IMO. You will complete a separate &lt;strong&gt;Part 2 – Project Information &lt;/strong&gt;for each project claimed in the year. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Order is paramount&lt;/strong&gt;: start by succinctly and confidently identifying the &lt;strong&gt;Technological Uncertainty&lt;/strong&gt; (this obstacle is commonly referred to as a “nugget”) as a first-step; TU is the foundation for everything else and it should have the following characteristics (see Update #1 on when TU can be defined up front):       &lt;div style="padding-left: 40px"&gt;       &lt;p&gt;         &lt;table border="0" cellspacing="0" cellpadding="2" width="676"&gt;&lt;tbody&gt;             &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;a) Element of Surprise&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="413"&gt;Must have been an &lt;em&gt;unplanned&lt;/em&gt;, &lt;em&gt;unforeseen &lt;/em&gt;hurdle; i.e., it caught your team off-guard mid-stride in the delivery phase.&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;b) Risk&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="413"&gt;Must have jeopardized successful execution of the project and achieving the stated deliverables; put differently, it introduced new risk in completing previously scheduled work that would have otherwise transpired if it wasn’t compromised by this hurdle. &lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;c) Non-Routine&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="413"&gt;Routine uncertainties resolved through code or peer discussion and/or optimization, calibration-type exercises are not included; it must be shown that there is a &lt;strong&gt;fundamental&lt;/strong&gt; problem with the underlying technologies. Refer to 6b) for validation through peer reviews.                  &lt;br /&gt;                  &lt;br /&gt;&lt;em&gt;IC97-1 Sec. 3.2: A technological uncertainty arises when the solution is not readily apparent to appropriately skilled and experienced software developers. Uncertainties that arise from lack of diligence or lack of appropriate expertise, such as the failure to use commonly available information, or lack of programming knowledge are not technological uncertainties and relevant to eligibility.                   &lt;br /&gt;&lt;/em&gt;&lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;       &lt;/p&gt;     &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;For each nugget, prove &lt;strong&gt;&lt;strong&gt;&lt;strong&gt;Technological &lt;/strong&gt;&lt;/strong&gt;Content/Chronology&lt;/strong&gt; by demonstrating:       &lt;div style="padding-left: 40px"&gt;       &lt;p&gt;         &lt;table border="0" cellspacing="0" cellpadding="2" width="675"&gt;&lt;tbody&gt;             &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;a) Experimental Development&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="412"&gt;This doesn’t necessary mean that you &lt;em&gt;attempted&lt;/em&gt; each approach; it means you researched, analyzed and carefully considered potential work-arounds before ultimately accepting or rejecting them. You can apply scientific methodology without actually prototyping each option; applying defined selection criteria to each alternative, and reasoning about why they pass/fail is sufficient.                  &lt;br /&gt;                  &lt;p&gt;&lt;em&gt;By showing the evolution of the design (confirmation of approach or changes in design approach or                     &lt;br /&gt;changes to the specification) resulting from each analysis, prototype or test, the taxpayer also demonstrates                      &lt;br /&gt;Technological Advancement.                      &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;b) Technological Gaps&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="412"&gt;This is often the hardest criteria to satisfy. When encountering a hurdle (A), experts are trained to immediately jump to solution (B); but merely observing that A doesn’t work and offering B as a working solution is insufficient. You need to: a) understand &lt;em&gt;why&lt;/em&gt; A doesn’t work, b) show a systemic progress from A –&amp;gt; B, with discussion and analysis of in-between alternatives, and c) only arrive at B only with a conclusion that demonstrates its efficiency over the others.                  &lt;br /&gt;                  &lt;br /&gt;&lt;em&gt;Trial-and-error involves executing a series of probes that were not sequenced in a systematic pre-plan. The objective here is to resolve a functional problem (as in routine debugging) rather than to gain understandings that are expected to be more widely applicable. The lesson learned in each iteration of “trial and error” is simply “that an option didn’t work” and they are not applicable in a much broader sense. For each iteration the probe is chosen that is now judged to be the most efficient in resolving the immediate problem. The process proceeds quickly from iteration to iteration.                   &lt;br /&gt;                    &lt;br /&gt;As stated in IC97-1, “experimentation or analysis in a situation where there is technological uncertainty”, is a strong indication of project eligibility. The claimant should strongly link the experimental work to the Technological Advancement sought and to the Technological Uncertainties declared in the technical description of his project. In this way, the claimant will show clearly that specific experimental work is aimed at resolving the Technological Uncertainty and thus constitutes an attempt at providing the Technological Advancement.                    &lt;br /&gt;&lt;/em&gt;&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;c) Qualified Personnel&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="412"&gt;SR&amp;amp;ED is not concerned with ramping people up or learning new technology; it does, however, make allowances for not reasonably having access to the required expertise and exploring ideas under business-specific cost, feature constraints.                 &lt;br /&gt;                  &lt;p&gt;&lt;em&gt;An appropriately skilled individual is one whose qualifications and/or experience enable him or her to operate competently within a particular field . Such a person could be reasonably expected to produce a functional solution to a problem if such a solution exists within the constraints imposed upon the solution. &lt;strong&gt;&lt;span style="color: #804040"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;span style="color: #804040"&gt;The skills expected for a company’s developers are those commonly found within the context of a company’s competitive business environment, and appropriate to the work being undertaken.&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;em&gt;The three criteria for eligibility are to be applied with reference to the circumstances of the organization that executes the project. The judgement as to what knowledge of solutions a company should have or how far a company should search for solutions is to be assessed within the context of what it is reasonable to expect of a company conducting the project in a similar business environment. &lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;em&gt;If a third party executes a project on behalf of a claimant, the applicable business environment against which eligibility will be evaluated is that of the third party. Nevertheless, a claimant should not be denied eligibility simply because third parties exist for whom the same project would be standard practice, .if the claimant did not have reasonable access to that expertise. As noted, the meaning of “commonly available” has to be sensitive to the business’ environment and hence what can be expected of the tax payer’s developer’s project employees. All information technology workers are expected to have knowledge of the commonly available evolving tools of their trade. Workers are expected to make reasonable efforts to learn of new tools that might be applicable to the task at hand, but can be excused for failure to discover a relevant tool not commonly available in the public domain. &lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;em&gt;Simply learning to solve the problems that are commonly encountered during the first time use of a commonly available tool which happens to be new to the claimant’s business environment does not on its own involve the resolution of a Technological Uncertainties and hence produce a Technological Advancement. In the absence of any other fundamental technological problems, this is simple on-the-job learning.&lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;em&gt;The redevelopment of a solution which was generally available will usually fail the tests of both Uncertainty and Advancement. When making a claim based upon such a project, the onus will be on the claimant to show that (a) he was in fact unaware of the existing solution, and that (b) he made reasonable efforts to search for available solutions before embarking upon his project. Hint: Often it is a company’s ability to show how he normally searches for generally available solutions or that he did search for them or that he has established make/buy assessment practices that provides useful evidence that a “generally available” solution was not available to him in his business environment. &lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: #804040"&gt;The business environment in which the software is developed or is to be used can give rise to technological challenges and hence Technological Uncertainties, but business constraints per se are not of themselves Technological Uncertainties&lt;/span&gt;. &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;                  &lt;p&gt;&lt;em&gt;For example, one claimant may choose for business reasons (e.g. time to market, a perceived need to differentiate himself from a competitor’s product) to attempt technical solutions involving Technological Uncertainty which another claimant might choose to avoid. A small business may try to minimize the development costs of a software system by taking some shortcuts that increase his risks. A larger firm might not take these same shortcuts because of the increased commercial risks. In this scenario, the claimant may be able to provide evidence that the shortcut was the source of a technological challenge and hence of a Technological Uncertainty and hence he sought an advancement.&lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;strong&gt;&lt;span style="color: #804040"&gt;&lt;em&gt;For example, acceptable evidence might be advanced by showing that component hardware or software chosen because of cost considerations were less capable than those required for the system’s certain success. The resolution of the resulting Uncertainties, if done experimentally, could lead to an Advancement and thus to project eligibility.&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;       &lt;/p&gt;     &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;For each nugget, prove &lt;strong&gt;&lt;strong&gt;&lt;strong&gt;Technological &lt;/strong&gt;&lt;/strong&gt;Advancement &lt;/strong&gt;by demonstrating:       &lt;div style="padding-left: 40px"&gt;       &lt;p&gt;         &lt;table border="0" cellspacing="0" cellpadding="2" width="676"&gt;&lt;tbody&gt;             &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;a) A New Construct, Architecture or Technique&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="413"&gt;A key here is that a technique equally encompasses &lt;em&gt;do’s&lt;/em&gt; and &lt;em&gt;dont’s. &lt;/em&gt;Also note that it’s not necessary for the advancement to have been incorporated into the ultimate solution; that the field of knowledge in this realm was advanced is sufficient. &lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;b) Peer Review &amp;amp; Relevancy&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="413"&gt;Is the material presentation worthy in that an audience of your peers would find the material compelling?&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;c) Evolution&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="413"&gt;How does it compare with earlier solutions and what constraints have been overcome?&lt;/td&gt;             &lt;/tr&gt;              &lt;tr&gt;               &lt;td valign="top" width="261"&gt;&lt;strong&gt;d) Form/Function vs. Approach?&lt;/strong&gt;&lt;/td&gt;                &lt;td valign="top" width="413"&gt;How widely applicable are your ideas?                  &lt;p&gt;&lt;em&gt;Simply claiming to have developed the first or best software suite for a given purpose does not in itself prove that the taxpayer has made a technological advancement. &lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;em&gt;A new and unique software suite can be built using only well known combinations of constructs, tools and methods without technological advancement. This is analogous to designing and building a unique and complex office building without making any advancements in the field of civil engineering. &lt;/em&gt;&lt;/p&gt;                  &lt;p&gt;&lt;strong&gt;&lt;span style="color: #804040"&gt;&lt;em&gt;Note that an advancement in technology can rarely be described by listing software functions and features at an “end-user” level. Advances are typically made through innovation in software architectures, designs, algorithms, techniques or constructs.&lt;/em&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;       &lt;/p&gt;     &lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Update #1&lt;/strong&gt;: Yes, there are certainly eligible projects that don’t fit this mould – be sure to read the guidance carefully. The intention here is to provide a checklist to validate the most &lt;strong&gt;&lt;em&gt;common &lt;/em&gt;&lt;/strong&gt;form of eligibility encountered in day-to-day IT. We are trained to avoid risk and to maximize leverage in helping businesses make the most of established tools, processes – this is an inherently different mindset when compared to traditional software vendors, OEMs and ISVs. For instance, in reviewing the section on “Eligibility of work to improve the process of Software Development,” you will find 2 examples that don’t fit the pattern: in both cases, the claimant found no commercially available tools and identified &lt;em&gt;significant &lt;/em&gt;obstacles in developing the concept. In such cases, &lt;strong&gt;Technological Uncertainty&lt;/strong&gt; (TU) can be defined up-front, without the element of surprise or risk. In practise, this is difficult to prove for an IT consultant working under billable hours.&lt;/p&gt;  &lt;p&gt;[1] – SR&amp;amp;ED and IRAP Primer   &lt;br /&gt;&lt;a href="http://www.blog.businessready.ca/2008-sred-and-irap-part-two/"&gt;http://www.blog.businessready.ca/2008-sred-and-irap-part-two/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – Guidance on Eligibility of Software Projects for the SR&amp;amp;ED Tax Credits and Developing and Documenting Claims   &lt;br /&gt;&lt;a href="http://www.cra-arc.gc.ca/txcrdt/sred-rsde/pblctns/swgtxt-eng.pdf"&gt;http://www.cra-arc.gc.ca/txcrdt/sred-rsde/pblctns/swgtxt-eng.pdf&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – Revised T661 SR&amp;amp;ED Expenditures Claim Form   &lt;br /&gt;&lt;a title="http://www.cra-arc.gc.ca/E/pbg/tf/t661/t661-08e.pdf" href="http://www.cra-arc.gc.ca/E/pbg/tf/t661/t661-08e.pdf"&gt;http://www.cra-arc.gc.ca/E/pbg/tf/t661/t661-08e.pdf&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-3287936075830535899?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MTC_cl3Hf5MoCJeacP0RBPOqTgE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MTC_cl3Hf5MoCJeacP0RBPOqTgE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MTC_cl3Hf5MoCJeacP0RBPOqTgE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MTC_cl3Hf5MoCJeacP0RBPOqTgE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=jfogEs8tLWI:Nc6PP38HMIM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=jfogEs8tLWI:Nc6PP38HMIM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=jfogEs8tLWI:Nc6PP38HMIM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=jfogEs8tLWI:Nc6PP38HMIM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=jfogEs8tLWI:Nc6PP38HMIM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=jfogEs8tLWI:Nc6PP38HMIM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=jfogEs8tLWI:Nc6PP38HMIM:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=jfogEs8tLWI:Nc6PP38HMIM:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/jfogEs8tLWI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/jfogEs8tLWI/successful-sr-claims-explained.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>3</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/08/successful-sr-claims-explained.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-5129099376820131917</guid><pubDate>Tue, 21 Jul 2009 18:28:00 +0000</pubDate><atom:updated>2009-08-06T10:36:38.957-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Velocity</category><category domain="http://www.blogger.com/atom/ns#">Azure</category><category domain="http://www.blogger.com/atom/ns#">Cloud Computing</category><title>SQL Azure 10GB Limit: Implications &amp; Workarounds</title><description>&lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" align="left" src="http://static.arstechnica.com/windows_azure_small.jpg" width="187" height="107" /&gt;I’ve taken my first deep look at Azure to answer some specific questions that are covered in detail below. My overall impression: Azure (and cloud computing in general) is a powerful paradigm shift for our industry, with the end-result being more emphasis on pure software engineering and less emphasis on operations. Solution providers, consumers, and businesses not in the infrastructure outsourcing field all stand to benefit under this re-alignment – and we should all embrace it. I’m personally very excited to start delivering applications under this new mindset; I think concerns about the longevity of the initiative (or Microsoft’s dedication to it) are misplaced. &lt;/p&gt;  &lt;p&gt;As a permanent fixture, Azure represents the end of the “keeping the lights on” &lt;a href="http://it.toolbox.com/blogs/madgreek/the-keeping-the-lights-on-mentality-27871" target="_blank"&gt;mentality&lt;/a&gt; that has plagued IT:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#004080"&gt;“When IT stops being an enabler and simply acts as a cost center or a &amp;quot;necessary evil&amp;quot;, then entertaining new projects that leverage one of &lt;/font&gt;&lt;a href="http://www.gartner.com/it/page.jsp?id=530109"&gt;&lt;font color="#004080"&gt;Gartner Top 10 strategic technologies&lt;/font&gt;&lt;/a&gt;&lt;font color="#004080"&gt; is unrealistic and doomed for failure or hardship at a minimum. Why? Because this mentality is reactive and sometimes even defensive. This mentality also does not encourage investing in the future whether that is in training employees, establishing and investing in architecture, or addressing problems with long term solutions. Instead, people are rewarded for quick fix fire fighting heroics and at the end of the day it is the user community that suffers. The users get band-aids on top of already outdated systems and are often forced to work in ways in which the technology and systems dictate, instead of the other way around. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;It gets worse for the employees in an IT department in charge of &amp;quot;keeping the lights on&amp;quot;. Their resumes become stale as their skills are not updated to reflect the newer technologies that innovative companies seek. The reactive nature of the culture can squash innovation and people who have valid solutions may not bring them forward because it would require more than a quick fix. In the end these types of shops become like an assembly line in nature where people clock in, work their shift, and clock out. This is not what must of us envisioned when we enthusiastically enrolled in IT related curriculums in college back in the day.”&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Whether it takes 2, 5, or 10 years to permeate isn’t important; but that Microsoft sees 50% of it’s server business moving online in the next 5 years is a telling approximation. &lt;/p&gt;  &lt;p&gt;Before delving into the specific questions, I would highly recommend the &lt;a href="http://www.manyniches.com/cloudcomputing/cloud-platforms-whats-going-on/" target="_blank"&gt;presentation&lt;/a&gt; by Brandon Watson on the state and drivers behind cloud computing – it paints an interesting picture around Amazon’s seasonality and Google’s Ad dependency as important factors in their desire to offload infrastructure costs. Likewise, Microsoft too developed its strategy out of necessity and not choice, which further underscores its importance. (Microsoft’s Business Productivity Online Suite suite isn’t yet running off of Azure, but as adoption increases so to will the need for on-demand scale.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Implications and workarounds for the 10GB database limit&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The work-arounds, for the time being, boil down to: &lt;strong&gt;sharding &lt;/strong&gt;(a term coined by Google Engineers to refer to a method of horizontal partitioning), integration with &lt;strong&gt;on-premise SQL &lt;/strong&gt;or better leverage of &lt;strong&gt;Azure Storage&lt;/strong&gt;. There’s a great article that captures some interesting discussion around this limit [11] and the ramifications for backups; however, the Azure FAQ seems to suggest that backups-in-the-cloud are included. That most of TSQL constructs are supported, with a few obvious exceptions[4], is certainly good news. But the 10GB limit is nonetheless a disappointment in the v1 announcement – it is by far the largest barrier to adoption, particularly for employee-facing applications that collaborate with several internal systems. As a colleague of mine pointed out: that you can connect to on-premise SQL is one thing, but the amount of effort involved to match the performance of co-located servers, particularly with chatty applications, is another. For self-contained, consumer-facing applications, migration is much more realistic. Remember, storage outside of SQL doesn’t have an upper-limit, capacity-wise; but its per-transaction pricing does offer less cost-certainty [1]. If you don’t have existing database assets to leverage,&amp;#160; you may opt to build your data model on Azure storage directly, but you would be sacrificing portability and toolset in the process. &lt;/p&gt;  &lt;p&gt;On the ability to integrate with on-premise SQL [18]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#004080"&gt;“In particular, Nigel did a really nice demo on the compatibility SDS v1 will have with &lt;b&gt;on-premise&lt;/b&gt; SQL and how that will make porting existing applications to a cloud environment really easy.&amp;#160; A very strong message particularly in conjunction with the ability to run web and worker processes in Windows Azure Compute.&amp;#160; Together, these capabilities really provide a great foundation for delivering next generation services based applications.”&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;How does fault tolerance work, and are you charged for separate Web Role instances required? &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Whether separately-billed instances of the Web Role (required to satisfy the 99.95% requirement in the SLA) are required for high-availability is a bit unclear [9] . It seems, on the surface, that a single role can satisfy the SLA requirements through configuration alone, without additional fees [17]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#004080"&gt;“&lt;/font&gt;&lt;font color="#004080"&gt;The role definition also includes the number of instances that the fabric should deploy, either a specific number or a lower and upper bound. Finally, constraints may be specified, including how many role instances may run in the same node, whether instances of different roles should be co-located, and how to allocate instances across update domains and fault domains.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;Update domains and fault domains are optional but useful features. Update domains are used to partition the service during upgrades. A role may specify the number of update domains its instances should be deployed in.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;During rolling OS upgrades and service updates, only one update domain will be upgraded at a time. While an update domain is being upgraded, the fabric won't route live traffic to any roles or load balancers inside it. After an update domain has been fully upgraded and all services in it report that they're health, the fabric returns them to service and starts on the next update domain.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;Fault domains are similar to update domains. They're basically disjoint failure zones within a single datacenter. They're determined according to the datacenter topology, based on things like rack and switch configurations, which make certain classes of failures likely to affect well-defined groups of nodes. As with update domains, a role may specify the number of fault domains its instances should be deployed in.”&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a name="Hosting"&gt;&lt;font color="#004080"&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#004080"&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Pricing and Licensing&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Note that we haven’t seen the the subscription model or volume licensing just yet [1]:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#004080"&gt;“Microsoft will offer Azure services in three different ways, including a consumption (pay-as-you-go) model, a subscription model for resellers, and volume licensing to enterprises. The so-called consumption model appears to be priced comparably with the current leader in this market, Amazon.com, which offers a variety of online services, including hosted Windows and Linux services. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;Microsoft will charge 12 cents per hour for computer infrastructure services, 15 cents per gigabyte for storage, and 10 cents per 10,000 storage transactions. Users of Microsoft's cloud-based database, SQL Azure, will incur monthly charges of $9.99 for the Web Edition, which supports up to 1GB databases, and $99.99 for the Business Edition, which allows up to 10GB databases. The web developer-oriented .NET Services will cost 15 cents per 100,000 message operations. Additional bandwidth charges apply across the three services as well: 10 cents per gigabyte for incoming data and 15 cents per gigabyte for outgoing data.”&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Session, Cache Data&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This is a bit of paradigm shift for the typical .NET developer: you no longer have in-process memory (a good thing for scalability) – so where do values in HttpContext.Cache and HttpContext.Session go? The SDK has providers [2] that allow plug into your application “seamlessly” to store these values in Azure Storage (table and blobs) – but there must be a performance penalty associated with this, not to mention the $0.01/10K transactions and $0.15/Gb cost associated with reading/writing to this store. (I use “seamlessly&amp;quot; because objects crossing the wire have to be serializable, so some minor work may be required there.)&amp;#160; Whether Velocity eventually services this role remains to be seen; lots of desire to see this happen, mostly for the richness of the API [21]. In terms of leveraging the local 250Gb available to each web role, it appears that there this doesn’t offer much use to developers as it’s not synchronized across multiple instances.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;On-Premise Azure&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are no plans for an on-premise version of Azure (storage or otherwise), as far as I can see [20].&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Exception Handling&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I don’t have a good handle yet on how this is best applied. Some providers will likely emerge that channel diagnostic messages into Azure Storage where they can later be searched, grouped and presented by various ‘Storage Explorer’ like applications [6].&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Azure Medium Trust Implications&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;No major limitations in the custom Medium Trust policy used by Azure, from what I can see [16]: external TCP connections and local writes both seem to be permitted, allowing a full range of possibilities around external integration scenarios using WebRequest, FtpWebRequest, StmpClient [15] and the like.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sample Deployment of AzureBright: &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://www.radicallyfrugal.com"&gt;http://www.radicallyfrugal.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;What better test-drive than to take an MVC application and deploy it to the cloud, under a custom domain. &lt;/p&gt;  &lt;p&gt;What is AzureBright [1]?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#004080"&gt;“AzureBright Blog &amp;amp; Forum are two cloud-hosted applications, created for the new CloudApp() contest. Goals: 1.To have a fast, clean (html), scalable, Web 2.0 look and feel, and SEO Friendly, Blog and Forum (StackOverflow.com-like functionality) for the .net community. 2.To share development knowledge and experiences, of new challenges encountered with Windows Azure Service’s Platform. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;Technologies used: Windows Azure Storage (Table, Queue, Blob), ASP.NET MVC framework (C#), AJAX using jQuery/json. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#004080"&gt;Challenges encountered: Paging over data. “Order by” and “Group by” data, Leverage Concurrency, Update/Insert/Delete Batch Transactions, Page Views, and other counters,Voting, Spam, Multiple Worker messages, Membership (manage users and roles)…”&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;[1] – Pricing/Reselling&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/azure/pricing.mspx"&gt;http://www.microsoft.com/azure/pricing.mspx&lt;/a&gt;     &lt;br /&gt;&lt;a title="http://windowsitpro.com/article/articleid/102509/microsoft-answers-windows-7-azure-rtm-questions.html" href="http://windowsitpro.com/article/articleid/102509/microsoft-answers-windows-7-azure-rtm-questions.html"&gt;http://windowsitpro.com/article/articleid/102509/microsoft-answers-windows-7-azure-rtm-questions.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – Session/Cache Providers&lt;/p&gt;  &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/2d1340ed-0ad0-456a-b069-aa6b85672102"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/2d1340ed-0ad0-456a-b069-aa6b85672102&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.aaronlerch.com/blog/2008/11/01/run-aspnet-mvc-on-windows-azure/"&gt;http://www.aaronlerch.com/blog/2008/11/01/run-aspnet-mvc-on-windows-azure/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – Troubleshooting&lt;/p&gt;  &lt;p&gt;&lt;a href="http://stackoverflow.com/questions/444528/what-is-my-azure-table-storage-accountname"&gt;http://stackoverflow.com/questions/444528/what-is-my-azure-table-storage-accountname&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/cbf60a9a-861f-475d-90c6-ba8ad3282d2f"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/cbf60a9a-861f-475d-90c6-ba8ad3282d2f&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4] – TSQL Support in SQL Data Services&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/ssds/archive/2009/07/07/9823115.aspx"&gt;http://blogs.msdn.com/ssds/archive/2009/07/07/9823115.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[5] – Queue Performance (good blog...)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-61aea8168d26ea6b.profile.live.com/"&gt;http://cid-61aea8168d26ea6b.profile.live.com/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://bstineman.spaces.live.com/blog/cns!61AEA8168D26EA6B!312.entry"&gt;http://bstineman.spaces.live.com/blog/cns!61AEA8168D26EA6B!312.entry&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[6] – Storage Explorer&lt;/p&gt;  &lt;p&gt;&lt;a href="http://azurestorageexplorer.codeplex.com/"&gt;http://azurestorageexplorer.codeplex.com/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d4e8f1be-297b-47ff-8135-c26ceafea9c2"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/d4e8f1be-297b-47ff-8135-c26ceafea9c2&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://davidpallmann.blogspot.com/"&gt;http://davidpallmann.blogspot.com/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;[7] – 10Gb Limit&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.techcrunch.com/2009/07/14/microsofts-azure-gets-a-business-model-and-an-official-release-date/"&gt;http://www.techcrunch.com/2009/07/14/microsofts-azure-gets-a-business-model-and-an-official-release-date/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.sharepointevolved.com/blog/Lists/Categories/Category.aspx?Name=Micorosft%20Azure"&gt;http://www.sharepointevolved.com/blog/Lists/Categories/Category.aspx?Name=Micorosft%20Azure&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/windowsazure/archive/2009/07/14/confirming-commercial-availability-and-announcing-business-model.aspx"&gt;http://blogs.msdn.com/windowsazure/archive/2009/07/14/confirming-commercial-availability-and-announcing-business-model.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[8] – SLA&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;Windows Azure:&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;Windows Azure has separate SLA’s for compute and storage. For compute, we guarantee that when you deploy two or more role instances in different fault and upgrade domains your Internet facing roles will have external connectivity at least 99.95% of the time. Additionally, we will monitor all of your individual role instances and detect within two minutes when a role instance’s process is not running and initiate corrective action (we will publish by PDC the full details of our uptime promise for individual role instances). For storage, we guarantee that at least 99.9% of the time we will successfully process correctly formatted requests that we receive to add, update, read and delete data. We also guarantee that your storage accounts will have connectivity to our Internet gateway.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;[9] – Fault &amp;amp; Update Domains&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.azureusergroup.com/profiles/blogs/fault-domains-and-upgrade"&gt;http://www.azureusergroup.com/profiles/blogs/fault-domains-and-upgrade&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[10] – AzureBright    &lt;br /&gt;&lt;a title="http://azurebright.codeplex.com/" href="http://azurebright.codeplex.com/"&gt;http://azurebright.codeplex.com/&lt;/a&gt;     &lt;br /&gt;&lt;a title="http://www.newcloudapp.com/vote.aspx" href="http://www.newcloudapp.com/vote.aspx"&gt;http://www.newcloudapp.com/vote.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[11] – Brent Ozar (SQL Server DBA)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.brentozar.com/archive/2009/07/sql-azure-pricing-10-for-1gb-100-for-10gb/"&gt;http://www.brentozar.com/archive/2009/07/sql-azure-pricing-10-for-1gb-100-for-10gb/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[12] – TechCrunch Thread &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.techcrunch.com/2009/07/14/microsofts-azure-gets-a-business-model-and-an-official-release-date/"&gt;http://www.techcrunch.com/2009/07/14/microsofts-azure-gets-a-business-model-and-an-official-release-date/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[13] – Excellent Presentation by Brandon Watson&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.manyniches.com/cloudcomputing/cloud-platforms-whats-going-on/"&gt;http://www.manyniches.com/cloudcomputing/cloud-platforms-whats-going-on/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[14] – Azure FAQ&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/azure/faq.mspx"&gt;http://www.microsoft.com/azure/faq.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[15] – Windows Azure - Sending SMTP Emails!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/davidlem/archive/2009/01/08/windows-azure-sending-smtp-emails.aspx"&gt;http://blogs.msdn.com/davidlem/archive/2009/01/08/windows-azure-sending-smtp-emails.aspx&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/ef7a0cd5-5b2c-4ab2-902b-d39cc4b69913"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/ef7a0cd5-5b2c-4ab2-902b-d39cc4b69913&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[16] – Windows Azure SDK Trust Policy Reference&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd179369.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd179369.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[17] – Deep Technical Details:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://snarfed.org/space/windows+azure+details"&gt;http://snarfed.org/space/windows+azure+details&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[18] – SQL Azure Team Blog&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/ssds/archive/2009/03/20/9493117.aspx"&gt;http://blogs.msdn.com/ssds/archive/2009/03/20/9493117.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[19] – Estimation Spreadsheet:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.codes-sources.com/redo/archive/2009/07/14/azure-services-platform-windows-azure-sql-services-net-services-calculez-vous-meme-votre-prix-d-hebergement-mensuel.aspx"&gt;http://blogs.codes-sources.com/redo/archive/2009/07/14/azure-services-platform-windows-azure-sql-services-net-services-calculez-vous-meme-votre-prix-d-hebergement-mensuel.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[20] – On-premise Azure ruled out:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.zdnet.com/microsoft/?p=2340"&gt;http://blogs.zdnet.com/microsoft/?p=2340&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blogs.zdnet.com/microsoft/?p=2340"&gt;http://blogs.zdnet.com/microsoft/?p=2340&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[21] – Velocity on Azure:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/8b4fc071-fe1e-40d2-987a-d6a95b13a34b"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/8b4fc071-fe1e-40d2-987a-d6a95b13a34b&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://silverlightuk.blogspot.com/2008/11/windows-azure-cache-based-session.html"&gt;http://silverlightuk.blogspot.com/2008/11/windows-azure-cache-based-session.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/a7bbaaa7-de2a-4b24-b41f-cf30f6fb592e"&gt;http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/a7bbaaa7-de2a-4b24-b41f-cf30f6fb592e&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/davidlem/archive/2008/12/16/windows-azure-what-happens-in-the-data-center.aspx"&gt;http://blogs.msdn.com/davidlem/archive/2008/12/16/windows-azure-what-happens-in-the-data-center.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-5129099376820131917?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5hg9O01Q0ix0MWK2O2k0IbBJz94/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5hg9O01Q0ix0MWK2O2k0IbBJz94/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5hg9O01Q0ix0MWK2O2k0IbBJz94/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5hg9O01Q0ix0MWK2O2k0IbBJz94/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=EgKepNDeEO8:QCebCifYkyc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=EgKepNDeEO8:QCebCifYkyc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=EgKepNDeEO8:QCebCifYkyc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=EgKepNDeEO8:QCebCifYkyc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=EgKepNDeEO8:QCebCifYkyc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=EgKepNDeEO8:QCebCifYkyc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=EgKepNDeEO8:QCebCifYkyc:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=EgKepNDeEO8:QCebCifYkyc:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/EgKepNDeEO8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/EgKepNDeEO8/sql-azure-10gb-limit-implications.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><thr:total>5</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/07/sql-azure-10gb-limit-implications.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-224475730402796738</guid><pubDate>Fri, 17 Jul 2009 19:39:00 +0000</pubDate><atom:updated>2009-07-17T16:04:15.611-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Yahoo Pipes</category><category domain="http://www.blogger.com/atom/ns#">RSS</category><title>PopUrls, PopFly &amp; The Future of Aggregation with Yahoo Pipes</title><description>&lt;p&gt;Hot on the trail of Google, Microsoft announced this afternoon that it too would be discontinuing it’s own Mashup Editor, PopFly [1]. Naturally, no one is happier to rejoice in the demise of these two experiments than Yahoo, whose own Pipes offering continues to thrive [2]. &lt;/p&gt;  &lt;p&gt;Having test-driven Pipes recently, I’m not too surprised. Pipes’ success, much like twitter, lies in its simplicity and elegance; they’ve focused on delivering core data that serves as the essential building block for integrated applications. It’s a simple way to build a unit of logic that’s truly boundary-less. &lt;/p&gt;  &lt;p&gt;Now take aggregation service of today like PopUrls [3], for instance:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_Bxo856Qd3qg/SmDTcGQv1MI/AAAAAAAAALk/e60jv2_8q1E/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_Bxo856Qd3qg/SmDTcjw-lCI/AAAAAAAAALo/494NLGfY36I/image_thumb%5B4%5D.png?imgmax=800" width="730" height="460" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m hard-pressed to see exactly how this exact same data, supplied by public RSS interfaces, can’t be constructed in a personalized fashion using Pipes in a way that can be consumed by existing readers? &lt;/p&gt;  &lt;p&gt;What’s really the value-add here, beyond the interface? &lt;/p&gt;  &lt;p&gt;And if there is a value-add, why isn’t it exposed for consumption by others? &lt;/p&gt;  &lt;p&gt;Yahoo Pipes carries immense potential for the wider development community and it’s no surprise that it’s the lone standing ‘Mashup Facilitator’ among the leaders. &lt;/p&gt;  &lt;p&gt;[1] – Washington Post   &lt;br /&gt;&lt;a title="http://www.washingtonpost.com/wp-dyn/content/article/2009/07/17/AR2009071700741.html" href="http://www.washingtonpost.com/wp-dyn/content/article/2009/07/17/AR2009071700741.html"&gt;http://www.washingtonpost.com/wp-dyn/content/article/2009/07/17/AR2009071700741.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – Pipes Blog   &lt;br /&gt;&lt;a title="http://blog.pipes.yahoo.net/2009/07/17/microsoft-popfly-and-google-mashup-editor-rip/" href="http://blog.pipes.yahoo.net/2009/07/17/microsoft-popfly-and-google-mashup-editor-rip/"&gt;http://blog.pipes.yahoo.net/2009/07/17/microsoft-popfly-and-google-mashup-editor-rip/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] – PopUrls (Thomas Marban)   &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/PopUrls"&gt;http://en.wikipedia.org/wiki/PopUrls&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://tomatic.com/"&gt;http://tomatic.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Claim code: 6hjuni7rkc&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-224475730402796738?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CePw_VDvzRaBtETAE6fIIfPDqDc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CePw_VDvzRaBtETAE6fIIfPDqDc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CePw_VDvzRaBtETAE6fIIfPDqDc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CePw_VDvzRaBtETAE6fIIfPDqDc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=eX-rtYqJi2U:2nVjQXC6CLE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=eX-rtYqJi2U:2nVjQXC6CLE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=eX-rtYqJi2U:2nVjQXC6CLE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=eX-rtYqJi2U:2nVjQXC6CLE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=eX-rtYqJi2U:2nVjQXC6CLE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=eX-rtYqJi2U:2nVjQXC6CLE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=eX-rtYqJi2U:2nVjQXC6CLE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=eX-rtYqJi2U:2nVjQXC6CLE:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/eX-rtYqJi2U" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/eX-rtYqJi2U/popurls-popfly-future-of-aggregation.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_Bxo856Qd3qg/SmDTcjw-lCI/AAAAAAAAALo/494NLGfY36I/s72-c/image_thumb%5B4%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/07/popurls-popfly-future-of-aggregation.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-7157920531999327138</guid><pubDate>Tue, 14 Jul 2009 20:41:00 +0000</pubDate><atom:updated>2009-07-17T15:48:21.167-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Content Distribution Networks</category><category domain="http://www.blogger.com/atom/ns#">Limelight</category><category domain="http://www.blogger.com/atom/ns#">Azure</category><category domain="http://www.blogger.com/atom/ns#">Amazon</category><title>Hosting Your Site on a Content Distribution Network (CDN)</title><description>&lt;p&gt;What if you were able to deploy a completely updatable static HTML site in minutes and have it distributed to a&amp;#160; global audience for pennies a GB? &lt;/p&gt;  &lt;p&gt;A thought occurred to me the other day: offerings like Google Sites and SharePoint Online, though not branded as CDNs per se,&amp;#160; likely enjoy reliable access times globally; and both allow arbitrary files to be addressable at user defined URLs using CNAME records. However, with Sites at least, *.HTML, *.CSS, and *.JS files are explicitly prohibited, leaving users struggling to achieve concepts not permitted in the default templates and relegating the products to internal-use scenarios. &lt;/p&gt;  &lt;p&gt;But imagine if you had free-reign over static files that leverage the same infrastructure? Imagine if a CDN could host your entire website and not just its static elements. Sure Azure (pricing just announced [14]), EC2 and AppEngine carry promise for offloading applications to the cloud, but the serving of static sites still seems better suited for well-established CDNs. &lt;/p&gt;  &lt;p&gt;Welcome to the world that I’ve been immersed in for the last few days: evaluating CDNs as a cost-effective approach for hosting a static site with a gradual ramp-up to ~2M visitors a day. Solution requirements: high-availability, high-scalability and cost-predictability.&lt;/p&gt;  &lt;p&gt;Traditional players (&lt;b&gt;Limelight&lt;/b&gt;, &lt;strong&gt;Akamai and Level 3 – &lt;/strong&gt;who collectively control 80% of the market) are slowly being challenged by a new breed of pay-as-you-go ‘budget’ CDNs courtesy of pioneers like &lt;b&gt;Amazon, &lt;/b&gt;&lt;strong&gt;SimpleCDN &lt;/strong&gt;and the &lt;a href="http://blog.streamingmedia.com/the_business_of_online_vi/2009/01/updated-list-of-content-delivery-networks.html" target="_blank"&gt;like&lt;/a&gt;. Even Limelight re-sellers like Rackspace are undercutting aggressively while offering users a cheap alternative to the same network. In terms of high-level feature set, they’re all roughly comparable; key differences lie mostly in the quality and reach of the distribution networks via so-called “edge” servers around the world.&lt;/p&gt;  &lt;p&gt;But there are massive price differences [3] – as large as 10-20x between the least expensive (SimpleCDN) and the most expensive (Akamai). It’s not clear what the noteworthy differentiator between the leading networks is (or whether there is one) – I think they jury’s still out and, in practise, it likely depends largely on the account and their desire to accommodate you.&amp;#160; Attempts to quantify performance between the two is a seriously challenged science [10]. The conclusion of “&lt;em&gt;..if you want to really test a CDN’s performance, and see what it will do for your content and your users, you’ve got to run a trial&lt;/em&gt;” seems to be the only take-away. And the challengers aren’t without their share of criticism either [6] – both are relatively new (Amazon’s CloudFront is still in beta and doesn’t offer an SLA; it has had some outages) and both have relatively limited distribution networks (SimpleCDN has 10 points of presence in US/Europe and Amazon has 14 that cover Asia as well [9]). &lt;/p&gt;  &lt;p&gt;Another consideration: separation of storage from delivery – normally, the CDN can either host your content and charge you a storage fee ($.15/GB, this is pretty standard across the lot, including Azure) or it can access content that’s already hosted and distribute it. With Amazon, you must use their storage services (S3) to be eligible for the CDN, and they &lt;strong&gt;will &lt;/strong&gt;charge you the transfer rates for propagating content from S3 to the CloudFront CDN. SimpleCDN has a product in beta (Lightening) that supports already-hosted content but their mature offering, like Amazon, also relies on a built-in storage service (also at $0.15/GB).&lt;/p&gt;  &lt;p&gt;But hosting your own content defeats the purpose of freeing yourself from infrastructure and high-availability concerns; you would have to ensure that the source content is always available or risk requests from the CDN (upon cache expirations) resulting in 404s (this behaviour was confirmed for at least Limelight).&amp;#160; And this brings me to my next point… &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Cache-Control Headers – Why they matter&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Cache-control headers on source content (whether hosted by you or a storage services) are respected by the CDN distribution network. This is the only mechanism you have to expire content located on edge servers, otherwise it defaults to something like 24 hours.&amp;#160; Normally, there is no programmatic API to invalidate cached files on edge-servers [5],&amp;#160; which creates a tricky balance: to be able to update something, you must define the TTL when you create the file, before it propagates to edge-servers. This is particularly relevant for URLs that can’t be versioned. You can’t selectively update something: either you pay the price of updating it regularly of give up the ability entirely. In our case, we’re looking to employ the CDN in a unique way to host the &lt;b&gt;entire site&lt;/b&gt;. In order to do so, we need to refresh HTML every few minutes and cache-controls on the source files allow us to do this. At the same time, we want to employ standard caching practises to ensure that images, CSS files are held as far as the clients and that only HTML requests beyond say x minutes reach the edge-servers and propagate back to the source server. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Can you run the entire website on a CDN?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;I’d like to think so, and we’re still trying to see if there are any hidden catches in this scheme. One concern that we’ve run into: how do we ensure that domain.com, www.domain.com all redirect to the index page www.domain.com/index.html? Remember this isn’t a web server where you can just go into IIS and configure the default page. These are CNAME records that point to the custom CDN sub-domain that’s been provisioned for your particular account. In my discussions with &lt;b&gt;Limelight&lt;/b&gt;, they mentioned that their engineer can apply this as a custom one-time configuration, which is nice touch. For &lt;b&gt;SimpleCDN&lt;/b&gt; and &lt;b&gt;Amazon&lt;/b&gt;, I think your only option is to set up DNS WebForward records so that both domain.com and www.domain.com point to &lt;b&gt;content&lt;/b&gt;.domain.com/index.html, with the CNAME record for content.domain.com pointing to your CDN. Under this workaround, trying to access content.domain.com will generate a 403 [11]. The lack of a “index file” option in the pay-as-you-go CDNs could be a bit of a hindrance if you’re URL sensitivity. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;And where does the HTML come from?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;An internal ASP.NET site generates the desired HTML; a scheduled service consumes this HTML and publishes to the storage service (via FTP or SOAP APIs) on a regular interval, with cache headers to expire the content as needed. This publication scheme itself needs some level of redundancy for a solution demanding high-availability, but instead of failures propagating to your end-users they’ll simply result in stale content.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Pricing&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Traditional hosting doesn’t stand a chance in competing with these prices and is more than x2 the cost even at the Limelight tier. Managed hosting providers will likely charge bandwidth on the 95th percentile of the transfer rate as opposed to the cumulative transfer amount. This means they take the highest 5% hourly/daily Mbps rate , drop them, and use the next highest Mbps to calculate your monthly invoice. Say you had a commitment to 3-5Mbps burstable to 100Mbps at an overcharge of $350/1Mbps. This carries tremendous cost-risks for a solution that may spike above the 5% barrier but otherwise remain near the initial commitment level. And if you need gigabit burstable network, then costs effectively double from there. By their own admission, managed hosting providers currently lack support for on-demand scaling and are inherently unequipped to compete in these scenarios; not to mention they would require a minimum 12-month commitment that would discourage event-based sites campaigns that are active for only a portion of the year. (Limelight also has a minimum 12-month commitment, but they offer so-called ‘bucket pricing’ that gives you a fixed $/Gb rate that can be used for shorter durations.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Rackspace Cloud (Formerly Mosso)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We looked briefly at Rackspace for their strategic partnership with Limelight Networks. While access to the full-range of the Limelight reach (60 points-of-presence globally) at .22/GB is compelling, we had no choice but to dismiss this option for two reasons: lack of CNAME support and lack of access for direct uploads to Limelight. That we would have to upload to Limelight via Rackspace introduced a new point of failure in our solution that relies on a frequent update schedule.&amp;#160; Others have also highlighted the lack of SSL support with Rackspace [12]. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Limelight Networks&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’d also like to take this opportunity to acknowledge the unusually strong first impression that Limelight&amp;#160; customer service had on me; these guys are a class-act all the way, from quick turn-arounds to their willingness to accommodate our specifics and for not being afraid to refer us to resellers if the scenario warranted it. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Takeaway&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Performance-wise, Limelight is head-and-shoulders above the field surveyed here [12] [13] (by one report ~4.2x faster than CloudFront in US/Europe, ~1.9x faster in Asia and ~3.1x faster globally). If CNAME and SSL aren’t necessary, than Cloud Files is a compelling access point to this network. I think all CDNs could support read-only (i.e. HTTP GETs) sites just as easily; if you need to support POSTs, you have to figure out a way to pass those directly to the source server. Released 3-4 months ago, it seems that &lt;strong&gt;LimelightSITE&lt;/strong&gt; might be specifically geared towards this scenario. Akamai also offers a WhitePaper that describes their take on the same concept (scaling dynamic applications):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_Bxo856Qd3qg/SmDVgq345qI/AAAAAAAAAL0/_I4zThEwJ9Q/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_Bxo856Qd3qg/SmDVhOuumKI/AAAAAAAAAL4/9tR5PtJ5J38/image_thumb%5B2%5D.png?imgmax=800" width="427" height="419" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Aside from the J2EE “EdgeComputing” support, I think these options are both geared towards scaling the &lt;b&gt;&lt;i&gt;serving of content&lt;/i&gt;&lt;/b&gt; (even if it’s personalized) and not scaling the &lt;b&gt;&lt;i&gt;processing of data&lt;/i&gt;&lt;/b&gt; (like an Azure or EC2).&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;More Info&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;If you’re at all interested in keeping up with these subjects you can also subscribe to &lt;cite&gt;&lt;a href="http://www.cdnevangelist.com" target="_blank"&gt;www.cdnevangelist.com&lt;/a&gt;&lt;/cite&gt; or &lt;cite&gt;&lt;a href="http://www.businessofvideo.com" target="_blank"&gt;www.businessofvideo.com&lt;/a&gt;&lt;/cite&gt; for excellent coverage. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;References:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[1] – Tools for Amazon’s CloudFront (CloudBerry S3 Explorer &amp;amp; S3 Fox, a FireFox Plug-in)      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://paulstamatiou.com/how-to-getting-started-with-amazon-cloudfront"&gt;http://paulstamatiou.com/how-to-getting-started-with-amazon-cloudfront&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://troytolle.blogspot.com/2009/04/tips-on-using-amazon-cloudfront.html"&gt;http://troytolle.blogspot.com/2009/04/tips-on-using-amazon-cloudfront.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.labnol.org/internet/setup-content-delivery-network-with-amazon-s3-cloudfront/5446/"&gt;http://www.labnol.org/internet/setup-content-delivery-network-with-amazon-s3-cloudfront/5446/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://cloudberrylab.com/"&gt;http://cloudberrylab.com/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.s3fox.net/"&gt;http://www.s3fox.net/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[3] – Simple CDN      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://www.simplecdn.com/savings"&gt;http://www.simplecdn.com/savings&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.simplecdn.com/solutions"&gt;http://www.simplecdn.com/solutions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lightening will syndicate content that you host vs. StormFront charging for $149/GB or $.15/MB.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[4] – Amazon CloudFront vs. CacheFly - Performance Benchmark at Sinopop.net      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://sinopop.net/2008/11/20/quick-review-amazon-cloudfront-vs-cachefly-vs-amazon-s3/"&gt;http://sinopop.net/2008/11/20/quick-review-amazon-cloudfront-vs-cachefly-vs-amazon-s3/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://74.125.95.132/search?q=cache:IVP0f4NsZKAJ:sinopop.net/2008/11/20/quick-review-amazon-cloudfront-vs-cachefly-vs-amazon-s3/+quick-review-amazon-cloudfront-vs-cachefly-vs-amazon-s3&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=ca"&gt;http://74.125.95.132/search?q=cache:IVP0f4NsZKAJ:sinopop.net/2008/11/20/quick-review-amazon-cloudfront-vs-cachefly-vs-amazon-s3/+quick-review-amazon-cloudfront-vs-cachefly-vs-amazon-s3&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=ca&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[5] – Cache-Control Headers      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://developer.amazonwebservices.com/connect/thread.jspa?threadID=30969&amp;amp;tstart=60"&gt;http://developer.amazonwebservices.com/connect/thread.jspa?threadID=30969&amp;amp;tstart=60&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blog.bigcurl.de/2008/11/amazon-s3-save-money-by-setting-cache.html"&gt;http://blog.bigcurl.de/2008/11/amazon-s3-save-money-by-setting-cache.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.redmonk.com/jgovernor/2008/11/28/amazon-cloudfront-simple-caching-and-naming/"&gt;http://www.redmonk.com/jgovernor/2008/11/28/amazon-cloudfront-simple-caching-and-naming/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://developer.amazonwebservices.com/connect/thread.jspa?messageID=123129&amp;amp;#123129"&gt;http://developer.amazonwebservices.com/connect/thread.jspa?messageID=123129&amp;amp;#123129&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[6] – CloudFront vs. SimpleCDN (Community Commentary)      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://news.ycombinator.com/item?id=369366"&gt;http://news.ycombinator.com/item?id=369366&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[7] – CDN Pricing Pressure      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://blog.streamingmedia.com/the_business_of_online_vi/2007/11/pricing-pressur.html"&gt;http://blog.streamingmedia.com/the_business_of_online_vi/2007/11/pricing-pressur.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[9] – Q: Where are the edge locations used by Amazon CloudFront?      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://aws.amazon.com/cloudfront/faqs/#Where_are_the_edge_locations_used_by_Amazon_CloudFront"&gt;http://aws.amazon.com/cloudfront/faqs/#Where_are_the_edge_locations_used_by_Amazon_CloudFront&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[10] – The Microsoft CDN Case Study      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://cloudpundit.com/2008/10/16/the-microsoft-cdn-study/"&gt;http://cloudpundit.com/2008/10/16/the-microsoft-cdn-study/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;[11] – ListBucketResult: reply for a CDN request to null      &lt;br /&gt;&lt;/b&gt;&lt;a href="http://developer.amazonwebservices.com/connect/thread.jspa?messageID=108789&amp;amp;tstart=0"&gt;http://developer.amazonwebservices.com/connect/thread.jspa?messageID=108789&amp;amp;tstart=0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[12] – Cloud Files (Rackspace Cloud)&lt;/strong&gt;     &lt;br /&gt;&lt;a href="http://stupidsucks.com/2009/05/13/amazon-cloudfront-s3-vs-mosso-cloud-files/"&gt;http://stupidsucks.com/2009/05/13/amazon-cloudfront-s3-vs-mosso-cloud-files/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://techhui.ning.com/profiles/blogs/cloudbased-content-delivery"&gt;http://techhui.ning.com/profiles/blogs/cloudbased-content-delivery&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blog.mosso.com/2009/02/a-quantitative-comparison-of-rackspace-and-amazon-cloud-storage-solutions/"&gt;http://blog.mosso.com/2009/02/a-quantitative-comparison-of-rackspace-and-amazon-cloud-storage-solutions/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.pingdom.com/reports/nju8qlu8micn/"&gt;&lt;/a&gt;&lt;strong&gt;[13] – Cloud Files vs. Cloud Front (Performance Reports from Pingdom)      &lt;br /&gt;&lt;/strong&gt;&lt;a title="http://www.pingdom.com/reports/nju8qlu8micn/" href="http://www.pingdom.com/reports/nju8qlu8micn/"&gt;http://www.pingdom.com/reports/nju8qlu8micn/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[14] - &lt;/strong&gt;&lt;strong&gt;Microsoft announces Azure pricing, details&lt;/strong&gt;     &lt;br /&gt;&lt;a title="http://news.cnet.com/8301-13860_3-10285904-56.html" href="http://news.cnet.com/8301-13860_3-10285904-56.html"&gt;http://news.cnet.com/8301-13860_3-10285904-56.html&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-7157920531999327138?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8y49umA82a_86zpennyV-6y9xLc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8y49umA82a_86zpennyV-6y9xLc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8y49umA82a_86zpennyV-6y9xLc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8y49umA82a_86zpennyV-6y9xLc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=XwlqwW79b5w:5YxLRTa11ic:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=XwlqwW79b5w:5YxLRTa11ic:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=XwlqwW79b5w:5YxLRTa11ic:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=XwlqwW79b5w:5YxLRTa11ic:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=XwlqwW79b5w:5YxLRTa11ic:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=XwlqwW79b5w:5YxLRTa11ic:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=XwlqwW79b5w:5YxLRTa11ic:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=XwlqwW79b5w:5YxLRTa11ic:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/XwlqwW79b5w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/XwlqwW79b5w/running-your-site-on-content.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_Bxo856Qd3qg/SmDVhOuumKI/AAAAAAAAAL4/9tR5PtJ5J38/s72-c/image_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/07/running-your-site-on-content.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7247346857678227238.post-8767250989499080221</guid><pubDate>Fri, 19 Jun 2009 19:26:00 +0000</pubDate><atom:updated>2010-09-14T15:46:32.245-04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MSMQ Exception Database</category><category domain="http://www.blogger.com/atom/ns#">Exceptions</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Enterprise Library</category><title>Exception-Driven-Development: What are you doing with your Exceptions?</title><description>&lt;p&gt;Fantastic article by Jeff Atwood, of Stack Overflow [1], on Exception Driven Development – some highlighted excerpts:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;“If you're waiting around for &lt;b&gt;users to tell you about problems with your website or application&lt;/b&gt;, you're only seeing a tiny fraction of all the problems that are actually occurring. The proverbial tip of the iceberg. &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_Bxo856Qd3qg/TI_QxBHeSnI/AAAAAAAAASI/qeeQfWQszl4/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_Bxo856Qd3qg/TI_QxiHxxQI/AAAAAAAAASM/Jzve1xCrVJE/image_thumb%5B1%5D.png?imgmax=800" width="643" height="415" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;…&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;The first thing any responsibly run software project should build is an &lt;b&gt;exception and error reporting facility&lt;/b&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;… &lt;b&gt;Our exception logs are a de-facto to do list for our team&lt;/b&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;… Broad-based trend analysis of error reporting data shows that &lt;b&gt;80% of customer issues can be solved by fixing 20% of the top-reported bugs&lt;/b&gt;. Even addressing 1% of the top bugs would address 50% of the customer issues. The same analysis results are generally true on a company-by-company basis too.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;… &lt;/em&gt;&lt;/span&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;Although &lt;/em&gt;&lt;/span&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000640.html"&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;I remain a fan of test driven development&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;, the speculative nature of the time investment is one problem I've always had with it. &lt;b&gt;If you fix a bug that no actual user will ever encounter, what have you actually fixed?&lt;/b&gt; While there are &lt;/em&gt;&lt;/span&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000265.html"&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;many other valid reasons to practice TDD&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;, as a pure bug fixing mechanism it's always seemed far too much like premature optimization for my tastes. I'd much rather spend my time fixing bugs that are problems in practice rather than theory. &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;You can certainly do both. But given a limited pool of developer time, I'd prefer to allocate it toward fixing problems real users are having with my software based on cold, hard data. That's what I call &lt;b&gt;Exception-Driven Development&lt;/b&gt;. Ship your software, get as many users in front of it as possible, and intently study the error logs they generate. Use those exception logs to hone in on and focus on the problem areas of your code. Rearchitect and refactor your code so the top 3 errors can't happen any more. &lt;/em&gt;&lt;/span&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000788.html"&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;Iterate rapidly&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #004080"&gt;&lt;em&gt;, deploy, and repeat the process. This data-driven feedback loop is so powerful you'll have (at least from the users' perspective) a rock stable app in a handful of iterations.”&lt;/em&gt;&lt;/span&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Side-stepping the implementation details (I personally haven’t see strong justification in favour of using anything beyond Enterprise Library + MSMQ + Custom Database), the value is really in what you collect and how you store it rather than the particulars of your approach (whether it be log4net, EL or ELMAH). &lt;/p&gt;  &lt;p&gt;At a minimum, the following information should be available in &lt;strong&gt;&lt;u&gt;indexed&lt;/u&gt; &lt;/strong&gt;columns for querying:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;IP &lt;/li&gt;    &lt;li&gt;Web Server &lt;/li&gt;    &lt;li&gt;DB Server &lt;/li&gt;    &lt;li&gt;Message &lt;/li&gt;    &lt;li&gt;Time &lt;/li&gt;    &lt;li&gt;Severity &lt;/li&gt;    &lt;li&gt;SessionId (ASP.NET’s – crucial for correlating activity) &lt;/li&gt;    &lt;li&gt;File Name (Class) &lt;/li&gt;    &lt;li&gt;Method Name &lt;/li&gt;    &lt;li&gt;Line Number (IL Offset) &lt;/li&gt;    &lt;li&gt;Url &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Next, the exception should have attached to it, in some form, a set of Extended Properties (typically stored in a different table under a CLOB):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Full Stack Trace (customized, in some instances) &lt;/li&gt;    &lt;li&gt;Original Request Headers (all, especially cookie) &lt;/li&gt;    &lt;li&gt;Request Total Bytes &lt;/li&gt;    &lt;li&gt;Http Method &lt;/li&gt;    &lt;li&gt;Url Referrer &lt;/li&gt;    &lt;li&gt;ASP.NET Request Cookies (differ from header cookie, if changed) &lt;/li&gt;    &lt;li&gt;Form Data &lt;/li&gt;    &lt;li&gt;Session Data (particularly IsNewSession) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For session and form data, you have to exercise some caution in putting domain-specific rules in place to avoid unnecessary data (like ViewState, for example; or DataSets stored in Session). It’s prudent to plan on keeping the indexed data for a minimum of 6 month, if possible, and CLOB values for half of that period.&lt;/p&gt;  &lt;p&gt;Being able to look back on trends is crucial; if you have time to implement a more elaborate warehousing strategy, all the better. But if you can’t answer basic questions like:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;What are the top trending exceptions in the last hour, day, month, or week? &lt;/li&gt;    &lt;li&gt;Is the error isolated to one web server or wide-spread? What about database servers? &lt;/li&gt;    &lt;li&gt;Are there trends by IP? &lt;/li&gt;    &lt;li&gt;Did the user see a Yellow Page of Death or was it a behind-the-scenes exception? &lt;/li&gt;    &lt;li&gt;What was the sequence of exceptions for a particular session (series of requests leading up to it)? &lt;/li&gt;    &lt;li&gt;What cookies did a request start with; what cookies were assigned, prior to the exception? &lt;/li&gt;    &lt;li&gt;What were the form, header values that generated a particular exception? &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;… then you really should stop development and reconsider your bearings. &lt;/p&gt;  &lt;p&gt;[1] – Jeff Atwood: Exception Driven Development    &lt;br /&gt;&lt;a title="http://www.codinghorror.com/blog/archives/001239.html" href="http://www.codinghorror.com/blog/archives/001239.html" rel="nofollow"&gt;http://www.codinghorror.com/blog/archives/001239.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2] – More on ELMAH   &lt;br /&gt;&lt;a title="http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx" href="http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx" rel="nofollow"&gt;http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://code.google.com/p/elmah/" href="http://code.google.com/p/elmah/" rel="nofollow"&gt;http://code.google.com/p/elmah/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7247346857678227238-8767250989499080221?l=www.onpreinit.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SK6VZxgaW-khBER-iJ8RUy2dEz8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SK6VZxgaW-khBER-iJ8RUy2dEz8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SK6VZxgaW-khBER-iJ8RUy2dEz8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SK6VZxgaW-khBER-iJ8RUy2dEz8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=8wKaBTDLBJ4:QJvUJRDnZgg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=8wKaBTDLBJ4:QJvUJRDnZgg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=8wKaBTDLBJ4:QJvUJRDnZgg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=8wKaBTDLBJ4:QJvUJRDnZgg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=8wKaBTDLBJ4:QJvUJRDnZgg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?i=8wKaBTDLBJ4:QJvUJRDnZgg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=8wKaBTDLBJ4:QJvUJRDnZgg:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OnPreInit?a=8wKaBTDLBJ4:QJvUJRDnZgg:bcOpcFrp8Mo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OnPreInit?d=bcOpcFrp8Mo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OnPreInit/~4/8wKaBTDLBJ4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/OnPreInit/~3/8wKaBTDLBJ4/exception-driven-development-what-are.html</link><author>noreply@blogger.com (Nariman Haghighi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_Bxo856Qd3qg/TI_QxiHxxQI/AAAAAAAAASM/Jzve1xCrVJE/s72-c/image_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.onpreinit.com/2009/06/exception-driven-development-what-are.html</feedburner:origLink></item></channel></rss>

