<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.charteris.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Charteris Community Server</title><link>http://blogs.charteris.com/blogs/</link><description>Welcome to the &lt;A href="http://www.charteris.com"&gt;Charteris plc&lt;/A&gt; Community</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Excel Services ODC - Data Refresh Authentication Error</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/05/26/excel-services-odc-data-refresh-authentication-error.aspx</link><pubDate>Tue, 26 May 2009 11:50:57 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:807</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Just thought I&amp;#39;d blog this as I had trawled the web and come up with all sorts of complex answers.&lt;/p&gt;  &lt;p&gt;The scenario - a Windows Authenticated SharePoint site running Excel Services but anytime a user refreshed a data connection through a browsable Excel workbook they got a data access error.&lt;/p&gt;  &lt;p&gt;Most of the advice on this suggested implementing a Single Sign On solution through an SQL solution or Kerberos.&lt;/p&gt;  &lt;p&gt;I couldn&amp;#39;t help thinking there must be a simpler way - fortunately there is!&lt;/p&gt;  &lt;p&gt;When creating the odc in Excel on the Save Data Connection File and Finish click on the the Excel Services &amp;quot;Authentication Settings&amp;quot; which is trying to hide itself at the bottom of the screen. Then select &amp;#39;None&amp;#39; for the setting. &lt;/p&gt;  &lt;p&gt;Now the blurb along with the &amp;#39;None&amp;#39; selection suggests that it will use the &amp;#39;data connection&amp;#39; id which I found a bit confusing (like many things I could list here, but that&amp;#39;s for another time!)&lt;/p&gt;  &lt;p&gt;What the blurb means is that it will use the Unattended Service Account found in the Excel Services Settings in the Shared Services Provider (it&amp;#39;s at the bottom hiding again like&amp;#160; it don&amp;#39;t want to be used).&lt;/p&gt;  &lt;p&gt;So when it comes down to it a single radio button click - much easier than implementing SSO!&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx&amp;tags=&amp;title=Excel+Services+ODC+-+Data+Refresh+Authentication+Error" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx&amp;tags=&amp;title=Excel+Services+ODC+-+Data+Refresh+Authentication+Error"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx&amp;title=Excel+Services+ODC+-+Data+Refresh+Authentication+Error&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx&amp;title=Excel+Services+ODC+-+Data+Refresh+Authentication+Error&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx&amp;title=Excel+Services+ODC+-+Data+Refresh+Authentication+Error" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f05%2f26%2fexcel-services-odc-data-refresh-authentication-error.aspx&amp;title=Excel+Services+ODC+-+Data+Refresh+Authentication+Error"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=807" width="1" height="1"&gt;</description></item><item><title>Central Admin SSL</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/15/central-admin-ssl.aspx</link><pubDate>Wed, 15 Apr 2009 15:56:32 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:795</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.combined-knowledge.com/InstructorBios.htm"&gt;Steve Smith&lt;/a&gt; and &lt;a href="http://www.harbar.net/"&gt;Spencer Harbar&lt;/a&gt; (again - oh no I&amp;#39;ve become his groupie!) were discussing Best Practice around setting up Intranet, Extranet and Internet sites - far too detailed to relay here I&amp;#39;ll stick a link up when the slide deck becomes available -&lt;/p&gt;  &lt;p&gt;However, one area they discussed in detail was what should be on SSL and they recommended that if nothing else uses port 443 then Central Administration. I hadn&amp;#39;t given it much thought but now that its been highlighted to me there is certainly one compelling reason for this. A rogue user could cause catastrophic damage to a farm if they got hold of the Central Admin password, so even in an intranet environment why would you have these credentials flying around unencrypted?&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx&amp;tags=&amp;title=Central+Admin+SSL" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx&amp;tags=&amp;title=Central+Admin+SSL"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx&amp;title=Central+Admin+SSL&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx&amp;title=Central+Admin+SSL&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx&amp;title=Central+Admin+SSL" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2fcentral-admin-ssl.aspx&amp;title=Central+Admin+SSL"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=795" width="1" height="1"&gt;</description></item><item><title>Lockdown</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/15/lockdown.aspx</link><pubDate>Wed, 15 Apr 2009 15:55:47 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:794</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I haven&amp;#39;t done much on the Internet Content Management side lately which is my way of getting in my apologies/excuses for not knowing about this feature (call it expectation management - I won&amp;#39;t ask what your expectations were).&lt;/p&gt;  &lt;p&gt;Another great session hosted by &lt;a href="http://www.andrewconnell.com/blog/"&gt;Andrew Connell&lt;/a&gt; and &lt;a href="http://www.harbar.net/"&gt;Spencer Harbar&lt;/a&gt; on publishing sites highlighted the use of the &lt;a href="http://technet.microsoft.com/en-us/library/cc263468.aspx#section6"&gt;ViewFormPagesLockdown&lt;/a&gt; feature (click on &amp;#39;lockdown mode&amp;#39; for the info). This little feature will stop anonymous users from accessing application pages such as page libraries and view site content. Which is very useful (and apparently not enabled on many big Internet facing SharePoint sites!).&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx&amp;tags=&amp;title=Lockdown" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx&amp;tags=&amp;title=Lockdown"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx&amp;title=Lockdown&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx&amp;title=Lockdown&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx&amp;title=Lockdown" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f15%2flockdown.aspx&amp;title=Lockdown"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=794" width="1" height="1"&gt;</description></item><item><title>Like A SharePoint Cowboy</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/07/like-a-sharepoint-cowboy.aspx</link><pubDate>Tue, 07 Apr 2009 16:20:56 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:791</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Sorry for the Glen Campbell reference - couldn&amp;#39;t resist, I&amp;#39;m getting help with it.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I promised some more on &lt;a href="http://www.binarywave.com/blogs/eshupps/default.aspx"&gt;Eric Shupps&lt;/a&gt; excellent presentation on Custom Site Definitions. There&amp;#39;s a guide on Mr Shupp&amp;#39;s blog on how to build a &lt;a href="http://www.binarywave.com/blogs/eshupps/Lists/Posts/Post.aspx?List=9c93c708%2De5ce%2D4714%2Dbdea%2D499330361130&amp;amp;ID=75"&gt;Custom Site Definition&lt;/a&gt;. There is also a good diagram of how a &lt;a href="http://www.binarywave.com/blogs/eshupps/Blog%20Images/Forms/DispForm.aspx?ID=24&amp;amp;RootFolder=/blogs/eshupps/Blog%20Images"&gt;Solution Package&lt;/a&gt; breaks down.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The Cowboy is also going to put up a VS2008 base solution for a a site definition and I&amp;#39;ll pop that link up when I get it&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx&amp;tags=&amp;title=Like+A+SharePoint+Cowboy" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx&amp;tags=&amp;title=Like+A+SharePoint+Cowboy"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx&amp;title=Like+A+SharePoint+Cowboy&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx&amp;title=Like+A+SharePoint+Cowboy&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx&amp;title=Like+A+SharePoint+Cowboy" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2flike-a-sharepoint-cowboy.aspx&amp;title=Like+A+SharePoint+Cowboy"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=791" width="1" height="1"&gt;</description></item><item><title>A Love, hate, Hate, HATE Relationship</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/07/a-love-hate-hate-hate-relationship.aspx</link><pubDate>Tue, 07 Apr 2009 12:38:08 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:790</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Given the tag line I&amp;#39;ll bet you guessed this post is going to have a SharePoint Designer theme. I was in a brilliant talk by &lt;a href="http://www.binarywave.com/blogs/eshupps/default.aspx"&gt;Eric Shupps&lt;/a&gt; (the SharePoint Cowboy) on branding and custom site definitions (more of which in a later post) when he reminded everybody that SharePoint Developer is now available as a free download and what it was and was not good for:&lt;/p&gt;  &lt;p&gt;PROS:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Design Surface&lt;/li&gt;    &lt;li&gt;Simple Deploy&lt;/li&gt;    &lt;li&gt;Extensive layout control&lt;/li&gt;    &lt;li&gt;Utilise with minimal programming skills&lt;/li&gt;    &lt;li&gt;Versioning&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;CONS:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Can only use on a single site collection at a time&lt;/li&gt;    &lt;li&gt;Requires unghosting&lt;/li&gt;    &lt;li&gt;Limited options for advanced functionality&lt;/li&gt;    &lt;li&gt;Not portable&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So looking at the list why would you use it? Especially since unghosting means that the modified page is held in the database instead of being cached!&lt;/p&gt;  &lt;p&gt;The answer is not often but there are occasions where it is useful:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Prototyping master and layout pages&lt;/li&gt;    &lt;li&gt;On small sites where performance is not an issue&lt;/li&gt;    &lt;li&gt;Where you want to empower Power Users and allow them to make small modifications to a few pages&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For most things the site definition route should be taken, more of which later.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx&amp;tags=&amp;title=A+Love%2c+hate%2c+Hate%2c+HATE+Relationship" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx&amp;tags=&amp;title=A+Love%2c+hate%2c+Hate%2c+HATE+Relationship"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx&amp;title=A+Love%2c+hate%2c+Hate%2c+HATE+Relationship&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx&amp;title=A+Love%2c+hate%2c+Hate%2c+HATE+Relationship&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx&amp;title=A+Love%2c+hate%2c+Hate%2c+HATE+Relationship" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fa-love-hate-hate-hate-relationship.aspx&amp;title=A+Love%2c+hate%2c+Hate%2c+HATE+Relationship"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=790" width="1" height="1"&gt;</description></item><item><title>The Anti-Practice</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/07/the-anti-practice.aspx</link><pubDate>Tue, 07 Apr 2009 08:29:07 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:789</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Since this is a Best Practices conference there has been much discussion of what not to do. However, there seems to be divided opinion on what to call... well the opposite (see what I mean). I&amp;#39;ve heard &amp;#39;Poor Practice&amp;#39;, &amp;#39;Bad Practice&amp;#39;, &amp;#39;Worst Practice&amp;#39; but my favourite was coined&amp;#160; by &lt;a href="http://spforsquirrels.blogspot.com/"&gt;Natalya Voskresenskaya&lt;/a&gt; - the Anti-Practice - suitably apocalyptic.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx&amp;tags=&amp;title=The+Anti-Practice" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx&amp;tags=&amp;title=The+Anti-Practice"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx&amp;title=The+Anti-Practice&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx&amp;title=The+Anti-Practice&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx&amp;title=The+Anti-Practice" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f07%2fthe-anti-practice.aspx&amp;title=The+Anti-Practice"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=789" width="1" height="1"&gt;</description></item><item><title>Stranded in the Mid-Atlantic</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/06/stranded-in-the-mid-atlantic.aspx</link><pubDate>Mon, 06 Apr 2009 16:58:17 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:788</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;There&amp;#39;s been a lot of Twittering in the ether of late regarding just where Spencer Harbar&amp;#39;s accent has migrated to. It&amp;#39;s obviously bothering him because before he even started his talk on SharePoint Farm Misconceptions he had apologised for any lingual fluidity that might occur.&lt;/p&gt;  &lt;p&gt;Spencer was discussing common SharePoint Farm myths particularly around the &amp;quot;Magic Numbers&amp;quot; published by Microsoft. As many of you will know most of these get revised frequently, infamously the number of site collections a farm could support stood at 50,000 in 2007, the latest figure is 150,000. These numbers are just an indication of how far Microsoft pushed SharePoint. The latest studies can be found on &lt;a href="http://technet.microsoft.com/en-us/library/cc262787.aspx"&gt;technet&lt;/a&gt;. There is one immutable number though 2GB that&amp;#39;s about it for document size.&lt;/p&gt;  &lt;p&gt;In large farms with vast content design of the data storage is proving to be more vital than any perceived SharePoint &amp;quot;Magic Numbers&amp;quot;.&amp;#160; A good case study can be found &lt;a href="http://technet.microsoft.com/en-us/library/cc262067.aspx"&gt;here&lt;/a&gt; and you might be surprised at how few SharePoint servers were required to handle this huge amount of content.&lt;/p&gt;  &lt;p&gt;The key point of Spencer&amp;#39;s talk was you have to test you can&amp;#39;t trust the literature. Limits will be determined, as you would expect, by the usual key factors of usage, network traffic, server specification etc and each farm or collection of farms is going to be different. There was also the intriguing idea of the Agile Farm - you should plan your initial SharePoint topology with the view that it will change as the provision is expanded to new user groups and functionality is enhanced. An absolute truth but probably not one faced up to in many projects - back to Joel&amp;#39;s key point of overcoming denial.&lt;/p&gt;  &lt;p&gt;As for Mr Harbar&amp;#39;s accent, well I&amp;#39;ve heard him speak on a few occasions now both in person and on web casts and I couldn&amp;#39;t detect any difference but then I was concentrating more on what he said than how.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx&amp;tags=&amp;title=Stranded+in+the+Mid-Atlantic" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx&amp;tags=&amp;title=Stranded+in+the+Mid-Atlantic"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx&amp;title=Stranded+in+the+Mid-Atlantic&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx&amp;title=Stranded+in+the+Mid-Atlantic&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx&amp;title=Stranded+in+the+Mid-Atlantic" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fstranded-in-the-mid-atlantic.aspx&amp;title=Stranded+in+the+Mid-Atlantic"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=788" width="1" height="1"&gt;</description></item><item><title>Registration and Keynote</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/06/registration-and-keynote.aspx</link><pubDate>Mon, 06 Apr 2009 12:02:25 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:787</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I was going to start by sticking in a picture of the Queen Elizabeth II conference centre but I&amp;#39;m not sure if I really want to inflict that on you - I&amp;#39;ll see how my mood develops later in the day. All I can say is at least when you&amp;#39;re in it you don&amp;#39;t have to look at it.&lt;/p&gt;  &lt;p&gt;Anyway enough aesthetics laced with architectural snobbery you&amp;#39;re here for the SharePoint bits right?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sharepointjoel.com/default.aspx"&gt;Joel Oleson&lt;/a&gt; gave the keynote complete with Monty Python clips (for reference The Holy Grail bunny sequence, SharePoint being the bunny) and tourist bating union-jack themed head gear. To summarise Joel gave 10 Steps to a Successful SharePoint Deployment:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Overcome denial - it&amp;#39;s not easy, it&amp;#39;s not just a case of installing the product; start simple with quick gains.&lt;/li&gt;    &lt;li&gt;Create a Plan - if you don&amp;#39;t know where you&amp;#39;re going then you won&amp;#39;t know when you&amp;#39;ve arrived.&lt;/li&gt;    &lt;li&gt;Get an executive level sponsor with a clear vision - you may not implement their full vision but again it&amp;#39;s good to know&amp;#160; where the road might lead.&lt;/li&gt;    &lt;li&gt;Build the Dream Project Team&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;Designer&lt;/li&gt;      &lt;li&gt;Business Analyst&lt;/li&gt;      &lt;li&gt;Site Collection Admin&lt;/li&gt;      &lt;li&gt;Content Admin&lt;/li&gt;      &lt;li&gt;SharePoint Admin&lt;/li&gt;      &lt;li&gt;SharePoint Dev&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Build services not stuff - this will generally be a balance between&amp;#160; Commodity (out of the box) and Application hosting. How much of each will ultimately depend on the balance of time and resources&lt;/li&gt;    &lt;li&gt;Define clear policies and standards - let&amp;#39;s call this governance but there&amp;#39;s a balance to be found between IT Control and User Empowerment&lt;/li&gt;    &lt;li&gt;Invest in a Scalable Information Architecture&lt;/li&gt;    &lt;li&gt;Don&amp;#39;t forget or ignore Change Management&lt;/li&gt;    &lt;li&gt;Adoption is what counts&lt;/li&gt;    &lt;li&gt;The &amp;#39;KISS&amp;#39; principle - nope nothing to do with aging glam rockers - Keep It Simple Stupid!&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;For me the first three points felt most relevant. There is still a major misconception out there that SharePoint as an application akin to Word or Excel, &amp;quot;Lets stick the disk in let the users loose on it and see what happens.&amp;quot; &lt;/p&gt;  &lt;p&gt;Then you do the numbers and inform them of how much doing a SharePoint project with proper planning and governance will cost. &lt;/p&gt;  &lt;p&gt;And the look you get? &lt;/p&gt;  &lt;p&gt;Well it&amp;#39;s like the conference centre, not pretty...&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx&amp;tags=&amp;title=Registration+and+Keynote" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx&amp;tags=&amp;title=Registration+and+Keynote"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx&amp;title=Registration+and+Keynote&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx&amp;title=Registration+and+Keynote&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx&amp;title=Registration+and+Keynote" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f06%2fregistration-and-keynote.aspx&amp;title=Registration+and+Keynote"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=787" width="1" height="1"&gt;</description></item><item><title>SharePoint Best Practise Conference</title><link>http://blogs.charteris.com/blogs/colinn/archive/2009/04/05/sharepoint-best-practise-conference.aspx</link><pubDate>Sun, 05 Apr 2009 18:21:05 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:786</guid><dc:creator>colinn</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The conference kicks off in London tomorrow and there seems to be plenty to interest anybody with even the vaguest, passing intimation of an interest in any of MOSS&amp;#39; myriad of forms.&lt;/p&gt;  &lt;p&gt;The first of these was held in Washington DC last year and demand was such that a couple of others followed quickly. This is the first (and according to the official blurb) only one that will be held in Europe this year.&lt;/p&gt;  &lt;p&gt;The full agenda can be found &lt;a href="http://www.sharepointbestpractices.co.uk/Agenda.html"&gt;here&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Of the different streams probably ITPro holds the most interest for me but I&amp;#39;ll be dipping into other sessions depending on me colleagues choices.&lt;/p&gt;  &lt;p&gt;Anyway I&amp;#39;ll blog here what nuggets come out...&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx&amp;tags=&amp;title=SharePoint+Best+Practise+Conference" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx&amp;tags=&amp;title=SharePoint+Best+Practise+Conference"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx&amp;title=SharePoint+Best+Practise+Conference&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx&amp;title=SharePoint+Best+Practise+Conference&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx&amp;title=SharePoint+Best+Practise+Conference" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fcolinn%2farchive%2f2009%2f04%2f05%2fsharepoint-best-practise-conference.aspx&amp;title=SharePoint+Best+Practise+Conference"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=786" width="1" height="1"&gt;</description></item><item><title>SharePoint and Databases</title><link>http://blogs.charteris.com/blogs/alistairl/archive/2009/03/23/sharepoint-and-databases.aspx</link><pubDate>Mon, 23 Mar 2009 11:37:06 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:785</guid><dc:creator>alistairl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Something that you will learn to realise with Microsoft Office SharePoint Server 2007 is how important it is to have a handle on the SQL Server aspects of your farm installation. Ok, if you install everything on a single box and use Express edition you don’t really care about SQL much but try to do anything more adventurous and your SQL Server infrastructure will take a bit more thought.&lt;/p&gt;  &lt;p&gt;Explorer a bit further and there are a few points regarding network protocols and port numbers that are important to understand too. My background in web development with an added dash of DBA work means I am very interested in this, but it can be easy to forget the basics.&lt;/p&gt;  &lt;p&gt;For instance (forgive the pun), I had a reminder recently of how little you learn if you only have to deal with the default situation. For instance, in a lot of cases your separate SQL Server will be available to use on the default instance and default port number, but do you know what to do if you cannot use either? In the case of instancing, remember that you can qualify the server name with the instance i.e. SQLSERVER\Instance. And in the case of port numbers, remember it is SQL Server and not IIS you are talking to so the syntax is to separate the server and port number with a comma, not a colon. So to slightly extend our very small example, the database details for an instance on a non standard port would be “SQLSERVER\Instance, 9999”.&lt;/p&gt;  &lt;p&gt;Another thing to remember with any kind of service is that the request by a client of a server can be more of a “conversation” by the end of a sequence of events between agreeing that the two parties can talk to actually getting down to the nitty gritty of exchanging the information at the centre of the discussion. When looking at SQL Server and instancing, we need to be aware of the SQL Server Browser Service which provides SQL clients with instance details. In particular, as each instance requires its own port number, the reserved port of 1434 accepts UDP connections from clients asking for the port number of a particular named instance. Of course you can connect if you have all of the information to hand, but if you try to connect to a particular instance with incomplete parameters then the SQL Browser service may come in to play. And if the service is not running or firewall rules block connections on that port, then the connection will not work. For a better explanation of this technology that came in with SQL Server 2005, look at &lt;a href="http://msdn.microsoft.com/en-us/library/ms181087(SQL.90).aspx" target="_blank"&gt;SQL Server books online on the SQL Server Browser Service&lt;/a&gt;.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx&amp;tags=&amp;title=SharePoint+and+Databases" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx&amp;tags=&amp;title=SharePoint+and+Databases"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx&amp;title=SharePoint+and+Databases&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx&amp;title=SharePoint+and+Databases&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx&amp;title=SharePoint+and+Databases" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f03%2f23%2fsharepoint-and-databases.aspx&amp;title=SharePoint+and+Databases"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=785" width="1" height="1"&gt;</description></item><item><title>Smart Client architecture</title><link>http://blogs.charteris.com/blogs/deniss/archive/2009/03/20/applications-with-smart-client-architrecture.aspx</link><pubDate>Fri, 20 Mar 2009 07:14:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:784</guid><dc:creator>deniss</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Recently I had a chance to develop an application in the core of which laid a model called a Composite Smart Client. In the next few posts I would like to share my experience and opinion related to this technology. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Composite Smart Client model is actually another form of more general model defined by term Smart Client. In this introductory post I’ll overview more general term first and move to Composite Smart Clients in the next post.&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;The term Smart Client is dedicated to highlight the differences between the typical &amp;quot;Rich Client&amp;quot; and “Thin Client” applications and the next generation of client applications. &lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;To understand the need in Smart Clients let’s have a look at the pros and cons of both the existing architectures:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Rich Clients:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Pros:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Rich user experience&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Offline capable&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;High developer productivity&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Responsive and Flexible&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Cons:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Tough to update&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Tough to deploy&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;“DLL” hell&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Thin Clients:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Pros:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Easy to update&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Easy to deploy&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Easy to manage&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Cons:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Network dependency&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Poor user experience&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;-&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Complex to develop&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;Smart Clients &lt;/span&gt;&lt;/b&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;sit in between these two architectures, incorporating the best their features.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:EN-GB;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;So, as a result we have the application with the following typical characteristics:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;ul&gt;
&lt;li class="MsoNormal" style="MARGIN:0cm 0cm 12pt;LINE-HEIGHT:normal;mso-list:l1 level1 lfo1;mso-margin-top-alt:auto;tab-stops:list 36.0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b&gt;Utilize Local Resources&lt;/b&gt;&lt;br /&gt;Rich user experience is achieved by utilization of local resources. It means everything from hardware to software resources available on client’s machine.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="MARGIN:0cm 0cm 12pt;LINE-HEIGHT:normal;mso-list:l1 level1 lfo1;mso-margin-top-alt:auto;tab-stops:list 36.0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b&gt;Connected&lt;/b&gt;&lt;br /&gt;Smart client applications are never standalone and always form part of a larger distributed solution. This could mean that the application interacts with a number of Web services that provide access to data. Often, application may have access to specific services that provide deployment and update services.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="MARGIN:0cm 0cm 12pt;LINE-HEIGHT:normal;mso-list:l1 level1 lfo1;mso-margin-top-alt:auto;tab-stops:list 36.0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b&gt;Offline Capable&lt;br /&gt;&lt;/b&gt;Because they are running on the local machine, one of the key benefits that smart client applications offer is that they can be made to work even when the user is not connected. Even when the client is connected, the smart client application can improve performance and usability by caching data and managing the connection in an intelligent way.&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="MARGIN:0cm 0cm 12pt;LINE-HEIGHT:normal;mso-list:l1 level1 lfo1;mso-margin-top-alt:auto;tab-stops:list 36.0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b&gt;Intelligent Install and Update&lt;br /&gt;&lt;/b&gt;Smart client applications can be deployed and updated using a variety of techniques, like downloading over HTTP, on demand deployment by clicking on the URL. Applications can be updated while running. Exact approach depends on the technology used to develop an application.&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="MARGIN:0cm 0cm 10pt;LINE-HEIGHT:normal;mso-list:l1 level1 lfo1;mso-margin-top-alt:auto;tab-stops:list 36.0pt;mso-margin-bottom-alt:auto;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b&gt;Client Device Flexibility&lt;br /&gt;&lt;/b&gt;Often, there will be multiple versions of the smart client application, each targeting a specific device type and taking advantage of the devices unique features and providing functionality appropriate to its usage.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;font face="Calibri" size="3"&gt;.Net Framework provides number of capabilities to build applications with Smart Client architecture.&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;Another popular sub type of Smart Client applications is the Composite Smart Client Application model, where many applications combine to form a coherent solution. Such solutions can be formed by coupling together desktop applications, or by providing a generic &amp;quot;shell&amp;quot; application that houses multiple lightweight applications combining to form the solution. This model has proven to be extremely useful in situations where the user has to deal with many applications to do their work.&lt;/span&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;In the next post I’ll discuss technique of building Composite Smart Client Applications in .Net and how it was used in ITV.&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx&amp;tags=&amp;title=Smart+Client+architecture" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx&amp;tags=&amp;title=Smart+Client+architecture"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx&amp;title=Smart+Client+architecture&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx&amp;title=Smart+Client+architecture&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx&amp;title=Smart+Client+architecture" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2009%2f03%2f20%2fapplications-with-smart-client-architrecture.aspx&amp;title=Smart+Client+architecture"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=784" width="1" height="1"&gt;</description></item><item><title>ASP.NET MVC in production</title><link>http://blogs.charteris.com/blogs/gopalk/archive/2009/03/17/asp-net-mvc-in-production.aspx</link><pubDate>Tue, 17 Mar 2009 19:07:46 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:781</guid><dc:creator>gopalk</dc:creator><slash:comments>2</slash:comments><description>&lt;h3&gt;Is ASP.NET MVC ready for production use? &lt;/h3&gt;  &lt;p&gt;ASP.NET MVC Beta version was the first one to come with an explicit go-live licence. We went live with our first ASP.NET MVC website in December, based on ASP.NET MVC Beta and the results have so far been very impressive. The beta was of high-quality and very stable during development. With the release candidates its only got better&amp;#160; and hopefully the release version isn’t too far away. In my opinion releasing the source code and keep the community involved via Codeplex, forums and blogs has played no small part in keeping the quality of this framework high.&lt;/p&gt;  &lt;p&gt;The website has performed very well since then under some pretty intense load. So in our case, ASP.NET MVC is certainly proved itself ready for production use. Here I have tried to compile a list of ASP.NET MVC tips, advantages and pain points based on my experience with ASP.NET MVC.&lt;/p&gt;  &lt;h3&gt;Tips for MVC&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Before using ASP.NET MVC think about your UI requirements. Are you counting on a third party UI library? If you are thinking of using third party controls that use postback or viewstate then ASP.NET MVC may not be for you! Although bear in mind that it is possible to have ASP.NET webforms page within an ASP.NET MVC web application. &lt;/li&gt;    &lt;li&gt;Decide on client side and server side validation strategy early : ASP.NET MVC doesn’t have validation built in, it only provides support for it via &lt;strong&gt;ModelState&lt;/strong&gt;. You’ll need to decide on a server side validation framework e.g. Enterprise validation block, data annotations, Castle Validator etc. You’ll also need to decide on a client side validation framework e.g. jQuery validate plugin. &lt;/li&gt;    &lt;li&gt;Understand controller lifecycle and ActionFilters: Understanding the lifecycle of the controllers and about ActionFilters will help you create controllers and presentation logic correctly and with minimal code. It will also help you move the cross cutting concerns like authentication, authorization etc out of your presentation logic. See my &lt;a href="http://blogs.charteris.com/blogs/gopalk/archive/2009/02/11/how-does-asp-net-mvc-work-part-2.aspx"&gt;previous post&lt;/a&gt; for this. &lt;/li&gt;    &lt;li&gt;Have base class hierarchy for controller and views to provide required functionality: Don’t derive from the Controller class directly for your controllers, but create a custom base controller where you can provide functionality common across all controllers. I have found this useful for Views and Model classes as well. &lt;/li&gt;    &lt;li&gt;Move routes out of code into configuration: Having to recompile every time you add a new route is a pain, move the routes out into a web.config or an external file. This is easy to do as ‘defaults’ parameter on &lt;strong&gt;RouteCollectionExtensions.MapRoute&lt;/strong&gt; no longer expects anonymous types, an object of type &lt;strong&gt;RouteValueDictionary&lt;/strong&gt; can be passed in. &lt;/li&gt;    &lt;li&gt;You can use URL rewrite module along with routing: It is possible to use regex url rewrite module along with MVC. This will kick in before MVC receives the request and MVC will receive the modified request. This is useful for cases where you want to use regular expressions as as regex routes are not currently supported by &lt;strong&gt;MvcRouteHandler&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Keep Views as dumb as possible: Remember Views are supposed to be so dumb as to require minimal testing, so keep it that way. &lt;/li&gt;    &lt;li&gt;Keep controller as lean as possible: Having too much code in the controller is a sign that you are perhaps missing a Service facade class. &lt;/li&gt;    &lt;li&gt;Anything involving viewstate or postback will not work within a ASP.NET MVC page: Support for ASP.NET webforms controls is limited e.g. ViewState and Postbacks aren’t supported. Test any controls you plan to use early on with ASP.NET MVC. There are other options like MVP if you absolutely need a server control not supported by MVC but want the testability benefits of ASP.NET MVC. ASP.NET webforms page can be used within an ASP.NET MVC web application. &lt;/li&gt;    &lt;li&gt;RouteData is very useful – If you want to get hold of any route related data associated with the current request. It is accessible within Controller and Views and it can be used to retrieve current action name, controller name, route name etc. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Why MVC?:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Separation of concerns – separation of concerns in dividing the UI (View) from presentation logic (Controller). The domain model is separated from the above two as well, but that’s a common practice even if you are using ASP.NET MVC webforms. &lt;/li&gt;    &lt;li&gt;Testability –The controller receives user input, acts on user input, supplies ViewData to the View and presents the View to the user. This clear input and output model means that controllers are very testable. &lt;/li&gt;    &lt;li&gt;Extensible – Extensibility is a big feature of ASP.NET MVC. Some of the many extensibility hooks within ASP.NET MVC are:      &lt;ul&gt;       &lt;li&gt;RouteHandler – The default ASP.NET MVC route handler is &lt;strong&gt;MvcRouteHandler&lt;/strong&gt;. A custom route handler can be used if you want customized route handling logic for a particular route. &lt;/li&gt;        &lt;li&gt;ControllerFactory – Create your own controller factory if you want to instantiate your controller using an IoC container, or choose one from here http://www.codeplex.com/mvccontrib &lt;/li&gt;        &lt;li&gt;ViewEngines – Views are normally located and processed by WebForms ViewEngine infrastructure, but there are custom ViewEngines available like nVelocity etc. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Control over HTML – ASP.NET MVC allows fine grained control over the HTML generated, great if you don’t like all auto generated HTML related to viewstate and server controls in ASP.NET webforms. &lt;/li&gt;    &lt;li&gt;REST – ASP.NET MVC provides SEO friendly and RESTful URL’s &lt;/li&gt;    &lt;li&gt;MVCContrib – Last but not the least, a great resource, provides lots of community contributed content for MVC. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;That said ASP.NET MVC is still very new and naturally has a few areas that need a bit of work:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Grouping of controllers – ASP.NET MVC doesn’t provide a way to group controllers into ‘areas’, which is quite important for a large project. There are a few solutions from the ASP.NET MVC community for this, including one here: http://blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/ &lt;/li&gt;    &lt;li&gt;View and ViewData issues– ViewData container object is not strongly typed, this results in a lot of defensive coding within the View in reading values from this container. This also causes any possible type mismatches not to come to light until runtime. Using strongly typed views can help this issue to an extent, so can using Generics base ViewData setters and getters like this: &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:35px;background-color:#f4f4f4;"&gt;     &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;       &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;SetViewData&amp;lt;T&amp;gt;(“keyname”, T data);&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;End to end validation framework – An end-to-end validation framework is missing. This at the moment means defining validation rules both at the server side (e.g. via Enterprise validation block) and client side (e.g. via jQuery) separately. The new xVal framework aims to address this issue: http://www.codeplex.com/xval &lt;/li&gt;

  &lt;li&gt;Repeater controls – Simple rendering controls with templating capability such as Repeaters etc are sorely missed in ASP.NET MVC. An possible solution here: http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx &lt;/li&gt;

  &lt;li&gt;Self contained controls – At the moment user controls in ASP.NET MVC are not fully encapsulated i.e. the code required to load the ViewData for the control must be called from every controller that presents the control. Subcontrollers aim to address this: http://www.codeplex.com/mvccontrib &lt;/li&gt;

  &lt;li&gt;IIS6 install a bit messy – Installing MVC on IIS6 involves setting wildcard mapping and needs to carefully planned and tested early on. Make sure to disable wildcard mapping from any sub folder that only contain only static files for performance reasons. More info here: http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx &lt;/li&gt;

  &lt;li&gt;Regex support for the routes – At the moment routing system doesn’t support regex based routing. A possible solution here : http://blog.sb2.fr/post/2009/01/03/Regular-Expression-MapRoute-With-ASPNET-MVC.aspx &lt;/li&gt;

  &lt;li&gt;Asynchronous processing – While there is no out of the box support for asynchronous processing within ASP.NET MVC, here is a possible solution: http://blog.codeville.net/2008/04/05/improve-scalability-in-aspnet-mvc-using-asynchronous-requests/ &lt;/li&gt;

  &lt;li&gt;Dynamic loading of routing – Routes are right now added from within code and there is no support for storing routes within an external data store, although such a functionality can be easily added. Many possible solutions available for this including this: http://mnour.blogspot.com/2008/11/mvc-routing-using-custom-configuration.html &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given the ASP.NET MVC framework is relatively new, these shortcomings are quite understandable. Furthermore most of the above issues also have community contributed solutions and workaround, so none of them pose a major impediment to the use of ASP.NET MVC. The framework should also improve and add features that are currently missing with newer releases. It remains to be seen how the vast server controls market for ASP.NET webforms responds to ASP.NET MVC. I think that this will be quite important for the widespread adoption of ASP.NET MVC.&amp;#160; Overall, in my opinion, ASP.NET MVC provides us with a new reliable, testable and extensible framework for web development which is well worth trying out.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx&amp;tags=&amp;title=ASP.NET+MVC+in+production" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx&amp;tags=&amp;title=ASP.NET+MVC+in+production"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx&amp;title=ASP.NET+MVC+in+production&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx&amp;title=ASP.NET+MVC+in+production&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx&amp;title=ASP.NET+MVC+in+production" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f03%2f17%2fasp-net-mvc-in-production.aspx&amp;title=ASP.NET+MVC+in+production"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=781" width="1" height="1"&gt;</description></item><item><title>SharePoint Deployment Planning Services</title><link>http://blogs.charteris.com/blogs/alistairl/archive/2009/02/12/sharepoint-deployment-planning-services.aspx</link><pubDate>Thu, 12 Feb 2009 16:50:23 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:773</guid><dc:creator>alistairl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I am part of a team within Charteris that is qualified to deliver consulting under the &lt;a href="http://www.microsoftsdps.com/" target="_blank"&gt;SharePoint Deployment Planning Services&lt;/a&gt; (SDPS) program from Microsoft. “What is SDPS?” I hear you cry, “Why should I care?”.&lt;/p&gt;  &lt;p&gt;The idea of SDPS is to help &lt;a href="http://www.microsoft.com/licensing/sa/default.mspx" target="_blank"&gt;Microsoft Software Assurance&lt;/a&gt; customers with getting the most out of Microsoft Office SharePoint Server by allowing them to claim a number of days time with a SharePoint consultant. Registered Microsoft Partner Organisations deliver the consultancy, and this has to follow a prescriptive plan for content and deliverables.&lt;/p&gt;  &lt;p&gt;I think it is a great idea for a number of reasons, for one thing you don’t pay the consultant – Microsoft does (of course, you pay for Software Assurance so you do pay in a way), but for another it is a great way of catching up with the current version of SharePoint and a great structured way of finding out what is in there and perhaps carrying out a proof of concept. And from a consultant perspective, the support material coming from Microsoft for SDPS is excellent and up to date. We have a content refresh coming up in March which is going to further strengthen the quality of the material delivered to you as a&amp;#160; customer.&lt;/p&gt;  &lt;p&gt;SDPS delivery comes in 1, 3, 5, 10, and 15 day engagements and from a consultant perspective we have a prescribed set of deliverables from each. Some are for the bigger engagements, but some come with all sizes and reflect the content of the days. As you may have guessed (the clue is in the name) the primary aim is to plan SharePoint Deployment, and to this aim the engagement will feature consideration of business needs, how SharePoint can answer these and the plan moving forward. The 1 day engagement focuses on the business value of SharePoint and how this might fit to your needs, and at the other end of the spectrum, the 15 day engagement includes this, and labs, proof of concept work and a lot more deliverables.&lt;/p&gt;  &lt;p&gt;I recently conducted a 3 day SDPS Engagement in Edinburgh with a Legal Firm. The Firm had considered SharePoint 2003 in the past but wanted to get up to date with SharePoint 2007, and relate this to their business needs. As I dealt primarily with the IT Team, I tailored the agenda to demonstrations of the product and balanced this between covering the functionality of SharePoint with maintaining questions and answers. This is another aspect to remember with SDPS, although the deliverables and materials have a strong prescriptive element, the aim is to maintain the quality and this can happen while tailoring the delivery to the specific needs of the customer. For a 1 day engagement this can even mean that your engagement will take place over a series of live meetings – great if you can’t get your team in one place, we are all busy these days.&lt;/p&gt;  &lt;p&gt;I find SDPS engagements quite rewarding because they are a great opportunity to get out there with SharePoint and help customers to understand all of what SharePoint can do, but also very importantly – to approach it with the proper planning that is appropriate for an Enterprise Application.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx&amp;tags=&amp;title=SharePoint+Deployment+Planning+Services" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx&amp;tags=&amp;title=SharePoint+Deployment+Planning+Services"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx&amp;title=SharePoint+Deployment+Planning+Services&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx&amp;title=SharePoint+Deployment+Planning+Services&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx&amp;title=SharePoint+Deployment+Planning+Services" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsharepoint-deployment-planning-services.aspx&amp;title=SharePoint+Deployment+Planning+Services"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=773" width="1" height="1"&gt;</description></item><item><title>Some of those SharePoint Prerequisites to Remember</title><link>http://blogs.charteris.com/blogs/alistairl/archive/2009/02/12/some-of-those-sharepoint-prerequisites-to-remember.aspx</link><pubDate>Thu, 12 Feb 2009 11:33:42 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:772</guid><dc:creator>alistairl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A recent visit I made to install SharePoint for a production extranet reminded me of the importance to plan ahead and make sure that the prerequisites for successful installation and operation are in place before a visit. The big difference between development and production is the flexibility of the environment and the control you have over it. I would suggest this is the case because things like change control don’t necessarily exist (at least formally) on your Virtual PC environment that sits on your laptop on which you have local administrator rights!&lt;/p&gt;  &lt;p&gt;It is also easy to take for granted that a server will have internet access, or to take for granted that the local machine you are using to Remote Desktop to the production environment has a high speed network link. You are reminded how important planning ahead is when you have to wait for several hundred megabytes of install media and service packs to trickle over a slow management link, while you watch the progress meter guessing how many hours you have to wait.&lt;/p&gt;  &lt;p&gt;So I brought together my notes to get a quick shortlist of the things to have in place before a successful site visit:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Install Media – now that virtualisation is so prevalent, iso images are very easy to mount against a virtual machine. The thing to remember to do is to get the iso image over to the production environment in advance of the install. In our case we brought the files together on the web front-end (WFE) machine.&lt;/li&gt;    &lt;li&gt;Product Key – you don’t get very far before you need to enter that product key for Microsoft Office SharePoint Server (MOSS) 2007, so have it handy for when you start the install.&lt;/li&gt;    &lt;li&gt;.NET Framework Redistributable Packages&amp;#160; – you need .NET Framework 2.0 and .NET Framework 3.0 for a successful installation, and make sure you get the full distributable for the correct platform (x86 or x64) and not the bootstrapper. Get the bootstrapper for either will lead to disappointment when you discover you cannot download the rest of the components on your production server.&lt;/li&gt;    &lt;li&gt;Service Packs etc – there are several important service packs that should be in place – check with those that manage your windows server platform. But, in summary, remember to be up to date with Windows Server, SharePoint 2007 SP1 and after, and the appropriate .NET service packs. And in the case with our install, that means having the appropriate redistributable files copied to the correct place.&lt;/li&gt;    &lt;li&gt;Parameters for outbound email – if you are using email alerts etc then you will need the name or ip address of an smtp server to relay messages through, something you may need to prearrange with whoever owns the relay. There are also the sender and reply-to email addresses to have to hand.&lt;/li&gt;    &lt;li&gt;Port Numbers – this is important for a production environment where you cannot assume that there will be routing between the machines or that ports will be open for inter-server communication. Change control to get ports opened in firewalls can take some time, so it does well to establish at planning stage which services will be used. To install SharePoint with a separate SQL Server database connected to over tcp/ip will require a port to be opened, normally 1433. If you plan on restoring or making backups, then you will need to open ports to allow the WFE and SQL Server servers to access the backup files. For file share you need UDP ports from 135 to 139 and TCP ports from 135 to 139, or for direct hosted SMB without netbios you need port 445 (both TCP and UDP). If you plan to use outgoing email then you need to open the port for SMTP, which is by default port 25. This also assumes that routing is in place for your users to connect to the WFE, to allow server management, and routing for Active Directory.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Note that the notes do not incorporate any idea of the order of events, which should be obvious but may be the matter of another post.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx&amp;tags=&amp;title=Some+of+those+SharePoint+Prerequisites+to+Remember" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx&amp;tags=&amp;title=Some+of+those+SharePoint+Prerequisites+to+Remember"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx&amp;title=Some+of+those+SharePoint+Prerequisites+to+Remember&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx&amp;title=Some+of+those+SharePoint+Prerequisites+to+Remember&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx&amp;title=Some+of+those+SharePoint+Prerequisites+to+Remember" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2009%2f02%2f12%2fsome-of-those-sharepoint-prerequisites-to-remember.aspx&amp;title=Some+of+those+SharePoint+Prerequisites+to+Remember"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=772" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>How does ASP.NET MVC work – Part 2</title><link>http://blogs.charteris.com/blogs/gopalk/archive/2009/02/11/how-does-asp-net-mvc-work-part-2.aspx</link><pubDate>Wed, 11 Feb 2009 07:41:21 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:770</guid><dc:creator>gopalk</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;In the &lt;a href="http://blogs.charteris.com/blogs/gopalk/archive/2009/01/20/how-does-asp-net-mvc-work.aspx"&gt;last post&lt;/a&gt; we saw how an ASP.NET MVC request gets routed through to the MVC framework through the ASP.NET framework. We also saw that the &lt;b&gt;MvcHandler&lt;/b&gt; class is the HttpHandler responsible for servicing an ASP.NET MVC-request. A simplistic view of the order in which routing and MVC classes come into play is like this:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;UrlRoutingModule&lt;/b&gt; -&amp;gt; &lt;b&gt;MvcRoutingHandler&lt;/b&gt; -&amp;gt; &lt;b&gt;MvcHandler&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;So at this stage our request has got an HttpHandler assigned in the form of &lt;b&gt;MvcHandler&lt;/b&gt;. Moving ahead in the &lt;b&gt;HttpApplication&lt;/b&gt; event processing, the fulfilling of a request takes place when the &lt;b&gt;ProcessRequest&lt;/b&gt; method on the &lt;b&gt;MvcHandler &lt;/b&gt;gets invoked. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;MvcHandler&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Within the &lt;b&gt;ProcessRequest&lt;/b&gt; method, the original &lt;b&gt;HttpContext&lt;/b&gt; is wrapped into an &lt;b&gt;HttpContextWrapper&lt;/b&gt; instance. &lt;b&gt;HttpContextWrapper&lt;/b&gt; implements an abstract class called &lt;b&gt;HttpContextBase&lt;/b&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;u&gt;Loose coupling&lt;/u&gt;: Within an ASP.NET MVC controller, &lt;b&gt;HttpContext&lt;/b&gt; is referenced not directly but via this abstract &lt;b&gt;HttpContextBase&lt;/b&gt; class. As evident, this enables loose coupling between your controller class and the &lt;b&gt;HttpContextWrapper&lt;/b&gt; instance and thus improves testability by allowing you to easily mock your &lt;b&gt;HttpContextBase&lt;/b&gt; class when performing unit tests. This loose coupling also extends to other objects like Request (referenced to via &lt;b&gt;HttpRequestBase&lt;/b&gt;) and Response (&lt;b&gt;HttpResponseBase&lt;/b&gt;). These abstract types are defined within a separate assembly &lt;i&gt;System.Web.Abstractions.dll&lt;/i&gt;. This opens up the possibility of using them outside the MVC framework! &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Compare this to a traditional WebForms Page, where the Page class references the &lt;b&gt;HttpContext&lt;/b&gt; via a direct reference, and the &lt;b&gt;HttpContext&lt;/b&gt; object is also sealed. So it’s difficult to mock &lt;b&gt;HttpContext&lt;/b&gt; for testing purposes, thus making a WebForm page difficult to test. This is one clear advantage of ASP.NET MVC over traditional WebForms.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;At this point we have two classes that carry information about the request. These are &lt;b&gt;RouteData&lt;/b&gt; and &lt;b&gt;HttpContextWrapper &lt;/b&gt;(Packaged up into &lt;b&gt;RequestContext&lt;/b&gt; and assigned to &lt;b&gt;MvcHandler&lt;/b&gt; earlier during the &lt;b&gt;PostResolveRequest&lt;/b&gt; stage of the &lt;b&gt;UrlRoutingModule&lt;/b&gt;). &lt;b&gt;RouteData&lt;/b&gt; is a dictionary object containing key value pairs related to the matching route. The information &lt;b&gt;RouteData&lt;/b&gt; will contain will typically be controller name, action name, route name, default parameter etc matching the current request. These are extracted from the parameters passed into the &lt;b&gt;RouteCollection.RegisterRoute&lt;/b&gt; calls made in Global.asax:       &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:93.36%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:84px;background-color:#f4f4f4;"&gt;       &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:94.39%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;height:93px;background-color:#f4f4f4;border-bottom-style:none;"&gt;         &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; routes.MapRoute(&lt;/pre&gt;

        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#006080;"&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;, &lt;span style="color:#008000;"&gt;// Route name &lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#006080;"&gt;&amp;quot;{controller}/{action}/{id}&amp;quot;&lt;/span&gt;, &lt;span style="color:#008000;"&gt;// URL with parameters &lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; { controller = &lt;span style="color:#006080;"&gt;&amp;quot;Home&amp;quot;&lt;/span&gt;, action = &lt;span style="color:#006080;"&gt;&amp;quot;Index&amp;quot;&lt;/span&gt;, id = 1 } &lt;span style="color:#008000;"&gt;// Parameter defaults&lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; );&lt;/pre&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;b&gt;RouteData&lt;/b&gt; can also be used from within the Controller (via &lt;b&gt;ControllerContext&lt;/b&gt;) and View (via &lt;b&gt;ViewContext&lt;/b&gt;) to get the current route name, action name, controller name etc. Thanks to &lt;b&gt;RouteData&lt;/b&gt; dictionary, at this point MVC knows the name of the controller and the action to be invoked.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;b&gt;ControllerFactory (DefaultControllerFactory)&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Further in the &lt;b&gt;ProcessRequest&lt;/b&gt; method, a controller must be located to fulfil the current request. To do this, a controller factory is acquired first. By default in ASP.NET MVC this is an instance of &lt;b&gt;DefaultControllerFactory.&lt;/b&gt; In typical ASP.NET MVC fashion there is an extensibility point here too. &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;A controller factory must implement &lt;b&gt;IControllerFactory&lt;/b&gt; interface and a custom controller factory can be registered to override the &lt;b&gt;DefaultControllerFactory&lt;/b&gt; in Global.asax. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;
    &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
      &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Application_Start() {&lt;/pre&gt;

      &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     ControllerBuilder.Current.SetControllerFactory(&amp;lt;Your controller factory&amp;gt;);&lt;/pre&gt;

      &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     ...           &lt;/pre&gt;

      &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;p&gt;One of the reasons you would want to register a custom controller factory is, if you want your controllers to be instantiated by an &lt;b&gt;IoC (Inversion of Control)&lt;/b&gt; container and injected with dependencies like Loggers etc dynamically. There is some more information on how to create a custom controller factory for ASP.NET MVC here: &lt;a href="http://www.pnpguidance.net/Post/SetDefaultControllerFactoryIControllerFactoryASPNETMVCFramework.aspx"&gt;http://www.pnpguidance.net/Post/SetDefaultControllerFactoryIControllerFactoryASPNETMVCFramework.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;

  &lt;p&gt;The MVCContrib project on Codeplex makes available controller factory classes with support for various popular &lt;b&gt;IoC&lt;/b&gt; frameworks like StructureMap, Castle Windsor, Unity Framework and Spring.NET: &lt;a href="http://www.codeplex.com/MVCContrib"&gt;http://www.codeplex.com/MVCContrib&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;b&gt;IController (Controller)&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Once an instance of the controller is retrieved from the controller factory, &lt;b&gt;Initialize&lt;/b&gt; method is called on the controller. This is an important part of the controller lifecycle which provides access to the request and is a good place to initialize properties on the controller. &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;b&gt;IActionInvoker (ControllerActionInvoker)&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Next the &lt;b&gt;Execute&lt;/b&gt; method is invoked on the instance of Controller class and &lt;b&gt;RequestContext&lt;/b&gt; is passed in as an argument. This sets off the controller lifecycle. An object of type &lt;b&gt;IActionInvoker&lt;/b&gt; rather than the controller itself controls the order in which various methods on the controller and filters are executed. 

    &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:47px;background-color:#f4f4f4;"&gt;
      &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
        &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IActionInvoker.InvokeAction(ControllerContext controllerContext, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; actionName)&lt;/pre&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;i&gt;(ControllerContext is composed of the RequestContext and Controller instance.)&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Notice the separation of concerns and yet another point for extension. A custom implementation of &lt;b&gt;IActionInvoker&lt;/b&gt; can be assigned to the &lt;b&gt;Controller&lt;/b&gt; if we want our action invoker to do things a bit differently. The default implementation of &lt;b&gt;IActionInvoker&lt;/b&gt; is &lt;b&gt;ControllerActionInvoker &lt;/b&gt;class, and does quite a bit behind the scenes as we’ll see below: &lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;ul&gt;
    &lt;li&gt;First parameter values are obtained for the parameters on the action method. This is done by a &lt;b&gt;ModelBinder&lt;/b&gt;. A &lt;b&gt;ModelBinder&lt;/b&gt; is responsible for converting the data in request (i.e. form parameters, querystring parameters etc) into parameter values that an action method accepts. Of course, this is yet another extensibility point in the framework where a custom &lt;b&gt;ModelBinder&lt;/b&gt; can be assigned to an action method via the use of attributes (Note the influence of &lt;b&gt;AOP &lt;/b&gt;(aspect oriented programming) in the framework). The default &lt;b&gt;ModelBinder&lt;/b&gt; is used if a custom ModelBinder is not specified. More information here on creating custom ModelBinders: &lt;a href="http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx"&gt;http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx&lt;/a&gt; &lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
    &lt;li&gt;Now the various filters are executed. Simply put, filters are interceptor methods that can execute before and after the action method execution. They allow you to separate cross cutting concerns or non-action-specific code from the code in the action method (Notice the nice use of &lt;b&gt;AOP&lt;/b&gt;). There are different types of filters: &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;

&lt;ol&gt;
  &lt;ol&gt;
    &lt;ol&gt;
      &lt;li&gt;Authorization Filter – IAuthorizationFilter interface &lt;/li&gt;

      &lt;li&gt;Action Filter – IActionFilter interface &lt;/li&gt;

      &lt;li&gt;Result Filter – IResultFilter interface &lt;/li&gt;

      &lt;li&gt;Exception Filter – IExceptionFilter interface &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/ol&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;u&gt;Authorization Filter&lt;/u&gt;&lt;b&gt; &lt;/b&gt;is the first set of filters to be executed. Processing can be halted within this stage by cancelling the action. This can be done by setting the cancel property on &lt;b&gt;AuthorizationContext&lt;/b&gt; to true.In the code below, the further processing of the action is cancelled, the &lt;b&gt;RedirectResult&lt;/b&gt; is executed which should result in a redirect to Login action. An authorization attribute can be implemented by deriving from &lt;b&gt;AuthorizeAttribute (&lt;/b&gt;which implements&lt;b&gt; IAuthorizationFilter) &lt;/b&gt;and applying the attribute to an action method. The &lt;b&gt;Controller&lt;/b&gt; class itself implements &lt;b&gt;IAuthorizationFilter&lt;/b&gt;, so the easiest way to implement an Authorization Filter is to override the &lt;b&gt;OnAuthorization&lt;/b&gt; method inside your controller class. 

      &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:35.69%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:116px;background-color:#f4f4f4;"&gt;
        &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
          &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; OnAuthorization(AuthorizationContext filterContext)&lt;/pre&gt;

          &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

          &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     filterContext.Cancel = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

          &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     filterContext.Result = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; RedirectResult(&lt;span style="color:#006080;"&gt;&amp;quot;/Home/Login&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

          &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;

&lt;blockquote&gt;&amp;#160;&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;u&gt;Action Filter – OnActionExecuting&lt;/u&gt;: If the processing isn’t cancelled above, then the &lt;b&gt;OnActionExecuting&lt;/b&gt; method on the action filter collection is executed. Again as with Authorization Filter, &lt;b&gt;Controller&lt;/b&gt; itself implements &lt;b&gt;IActionFilter&lt;/b&gt; interface, so an &lt;b&gt;OnActionExecuting&lt;/b&gt; method is available to be overridden within the controller class. This is another point where execution of any further action filters and the action itself can be cancelled by setting the result property to an &lt;b&gt;ActionResult&lt;/b&gt; of your choice. &lt;/li&gt;

    &lt;li&gt;&lt;u&gt;Action method&lt;/u&gt; itself is invoked with the parameters supplied by the model binder. &lt;/li&gt;

    &lt;li&gt;&lt;u&gt;Action Filter – OnActionExecuted&lt;/u&gt;: After the execution of the action method, &lt;b&gt;OnActionExecuted&lt;/b&gt; method on the action filter collection (including the &lt;b&gt;OnActionExecuted&lt;/b&gt; method on the controller) is executed. In this method you can get information on any exceptions that were thrown during the action method execution via &lt;b&gt;ActionExecutedContext&lt;/b&gt;.&lt;b&gt;Exception&lt;/b&gt;. Here you have a chance to handle the exceptions and stop further propagation of the exception by using the &lt;b&gt;ActionExecutedContext.ExceptionHandled&lt;/b&gt; property. &lt;/li&gt;

    &lt;li&gt;&lt;u&gt;Exception Filter – OnException:&lt;/u&gt; An exception filter must implement &lt;b&gt;IExceptionFilter&lt;/b&gt; interface. As with other types of filters, it can be applied as an attribute. The controller implements &lt;b&gt;IExceptionFilter&lt;/b&gt; interface and provides access to its functionality via &lt;b&gt;OnException&lt;/b&gt; method that can be overridden within the controller class. This is called if an exception is thrown anywhere during action or result execution. An exception thrown in the Action can be handled in &lt;b&gt;OnActionExecuted&lt;/b&gt; to stop it from being propagated up to this stage. Similarly as will be explained later on, an exception thrown during result execution can be handled inside a &lt;b&gt;ResultFilter&lt;/b&gt; &lt;b&gt;OnResultExecuted&lt;/b&gt; stage to stop it from getting here. &lt;b&gt;ExceptionFilter&lt;/b&gt; offers you the final chance to handle exceptions before the exception is thrown up to Global.asax. &lt;b&gt;HandleErrorAttribute &lt;/b&gt;is an exception filter provided out of the box with the framework to help with exception handling within the controller. &lt;/li&gt;

    &lt;li&gt;&lt;u&gt;Result Filter - OnResultExecuting:&lt;/u&gt; This step occurs before the &lt;b&gt;ActionResult&lt;/b&gt; is executed. A result filter must implement &lt;b&gt;IResultFilter&lt;/b&gt; interface and the &lt;b&gt;Controller&lt;/b&gt; class offers an implementation via the &lt;b&gt;OnResultExecuting&lt;/b&gt; and &lt;b&gt;OnResultExecuted&lt;/b&gt; methods. The request will only get here if there are no unhandled exceptions in the action method and the &lt;b&gt;OnActionExecuted&lt;/b&gt; stage. &lt;/li&gt;

    &lt;li&gt;&lt;u&gt;ActionResult execution&lt;/u&gt; – This is the stage where the &lt;b&gt;ActionResult&lt;/b&gt; is executed and the http response determined. &lt;b&gt;ActionResult&lt;/b&gt; is just an abstract class and is extended by specific type of action results like &lt;b&gt;ViewResult (&lt;/b&gt;for HTML output&lt;b&gt;)&lt;/b&gt;, &lt;b&gt;JsonResult (&lt;/b&gt;For Json output&lt;b&gt;)&lt;/b&gt;, &lt;b&gt;RedirectResult (&lt;/b&gt;an HTTP redirect&lt;b&gt;), ContentResult &lt;/b&gt;(for text output) etc. This is another extensibility point, which allows a custom &lt;b&gt;ActionResult&lt;/b&gt; implementation. See an example here: &lt;a href="http://blog.maartenballiauw.be/post/2008/05/ASPNET-MVC-custom-ActionResult.aspx"&gt;http://blog.maartenballiauw.be/post/2008/05/ASPNET-MVC-custom-ActionResult.aspx&lt;/a&gt; &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;b&gt;IView and IViewEngine&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;u&gt;Rendering a view &lt;/u&gt;– When the return type from the action is that of a &lt;b&gt;ViewResult&lt;/b&gt; there are two interfaces, &lt;b&gt;IView&lt;/b&gt; and &lt;b&gt;IViewEngine&lt;/b&gt; that get involved. &lt;b&gt;IViewEngine&lt;/b&gt; interface defines the contract for locating a view or a partial view. &lt;b&gt;IView&lt;/b&gt; defines the contract for rendering the view. By default the framework uses &lt;b&gt;WebFormView&lt;/b&gt; and &lt;b&gt;WebFormViewEngine&lt;/b&gt; which process .aspx based views. A custom view processing infrastructure can be implemented by creating custom views/view engines. The &lt;a href="http://www.codeplex.com/MVCContrib"&gt;MVCContrib project on codeplex&lt;/a&gt; provides several ViewEngines including those based on XSLT, Brail and nVelocity. Some more information on creating a custom ViewEngine can be found here: &lt;a href="http://www.singingeels.com/Articles/Creating_a_Custom_View_Engine_in_ASPNET_MVC.aspx"&gt;http://www.singingeels.com/Articles/Creating_a_Custom_View_Engine_in_ASPNET_MVC.aspx&lt;/a&gt; &lt;/li&gt;
  &lt;/ul&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;u&gt;Result Filter – OnResultExecuted:&lt;/u&gt; This is the last step executed within the controller and occurs after the result has been executed and http response produced. If any exceptions are thrown during the result execution, then you’ll have a chance to handle the exception here. If not the exception is bubbled up towards Exception Filters (see Exception Filters - &lt;b&gt;OnException&lt;/b&gt; stage). &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;

&lt;p&gt;After this stage the http response would have been produced and the control is transferred back to &lt;b&gt;HttpApplication&lt;/b&gt; to carry through the rest of the lifecycle. This concludes our journey through the request processing occurring within the ASP.NET MVC framework. &lt;/p&gt;

&lt;p&gt;This follow-up post explained the passage of a request through the ASP.NET MVC framework and describes how the request is processed through the various stages within. Hopefully it gives a good idea of the ASP.NET MVC lifecycle and extensibility points within it. &lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx&amp;tags=&amp;title=How+does+ASP.NET+MVC+work+%e2%80%93+Part+2" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx&amp;tags=&amp;title=How+does+ASP.NET+MVC+work+%e2%80%93+Part+2"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx&amp;title=How+does+ASP.NET+MVC+work+%e2%80%93+Part+2&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx&amp;title=How+does+ASP.NET+MVC+work+%e2%80%93+Part+2&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx&amp;title=How+does+ASP.NET+MVC+work+%e2%80%93+Part+2" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f02%2f11%2fhow-does-asp-net-mvc-work-part-2.aspx&amp;title=How+does+ASP.NET+MVC+work+%e2%80%93+Part+2"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=770" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/gopalk/archive/tags/MVC/default.aspx">MVC</category><category domain="http://blogs.charteris.com/blogs/gopalk/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Scrum and Outsourcing</title><link>http://blogs.charteris.com/blogs/davidmy/archive/2009/02/09/scrum-and-outsourcing.aspx</link><pubDate>Mon, 09 Feb 2009 11:51:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:769</guid><dc:creator>davidmy</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Software development projects are increasingly utilising resources which are located offshore exclusively as well as in conjunction with on-shore (or near-shore) resources. The reasons for the increased usage of offshore resources span from the attractive reduced resource costs to the ability to scale the development teams quicker and easier.&lt;/p&gt;  &lt;p&gt;At the same time more and more software development projects are employing Agile practices and in particular Scrum in order to deliver a fit-for-purpose software solution to budget and on time. &lt;/p&gt;  &lt;p&gt;The most frequent reason for employing Scrum with an offshore development team is to reduce the likelihood of the end deliverable being nothing like that expected or required; a common problem of offshore development using the Waterfall methodology.&lt;/p&gt;  &lt;p&gt;Prima facie Agile and offshore development are concepts which do not sit well together, at least with the traditional purist Agile commentators. The fundamental reason for this premise is because one of the key tenets of all Agile software methodologies is the importance of communication between the various resources which are involved in software development project. &lt;/p&gt;  &lt;p&gt;Furthermore Agile methods pay particular attention to face-to-face communication in attaining a high-level of effective inter-team communication. The Agile manifesto states &amp;quot;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.&amp;quot; Of course the utilisation of offshore resources either minimises or precludes the face-to-face communication. &lt;/p&gt;  &lt;p&gt;However it should be noted that this is merely one of the tenets of Agile methodologies and after a closer examination it transpires that many Agile practices either with or without small variations can be effectively employed with offshore teams, achieving the same goals as when employed with on-shore resources.&lt;/p&gt;  &lt;p&gt;As with the all methodologies the success or failure depends largely on choosing which practices to employ and which practices to employ but in a more appropriately modified form, and which ones are should not employ as they do not fit well to the particular project or project team.&lt;/p&gt;  &lt;p&gt;Much of the contents of this blog are based on articles on employing Scrum with offshore resources, as well as my personal experiences over the past 6 years of working with offshore teams employing various delivery methodologies in five different countries.&lt;/p&gt;  &lt;p&gt;The remaining content of this blog will examine various aspects of Scrum and how the Scrum practices could be employed effectively when offshore teams are being utilised to deliver a software development project, be it with some modifications.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Communication&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;As per the Agile manifesto communication is one of the most important components which can often make or break a project. Its importance cannot be overstated, to the extent that many identify this as being the most critical success factor of any project.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Multiple forms as opposed to increased frequency of one type&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Working with team members which are geographically distant from each other, increases the importance of employing effective communication measures within the project team. Face-to-face meetings, emails, instant messaging, wikis, SharePoint and Skype are just a few different forms of communication that could be employed, and often the combination of these communication mechanisms is more effective than increasing the frequency of just one (i.e. having more than one status meetings per day). Whichever forms are selected their usage should be encouraged at the outset of the project and closely monitored during the project, in order to identify which ones are the most effective for the particular project team.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Face-to-face communication&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;In my experience it is more important to employ various forms of communication as opposed to increasing the frequency of communication when offshore teams are involved. Traditional communication methods such as face-to-face communication are important and should be utilised where possible by offshore team members visiting the hosting country and local resources visiting the offshore countries. In particular the project kick off should involve one or more local resources visiting the offshore country in order to ensure the objectives of the project are clearly understood and also to build up trust. &lt;/p&gt;  &lt;p&gt;These initial meetings should be longer than those visits which occur during the project in order to allow enough time to communicate the requirements and purpose of the project and to explain how the project will be delivered. In addition it is an excellent opportunity to address questions from the offshore team, identify any resource issues and potential cultural obstacles than need to be overcome.&lt;/p&gt;  &lt;p&gt;Face-to-face communication should continue throughout the project ensuring that there is a local presence in the offshore location or vice versa at all times. Without the continuous face-to-face communication, you risk not achieving one of the tenets of Scrum, self-organizing decision making. For a team to decide things like designs, system architecture, working practices, they have to be able to discuss and debate as a team. Such discussion and debate requires trust and camaraderie, both of which are normally built through day-to-day interactions with onshore resources. Over email, conference calls and other remote forms of communication this process is significantly slower and often not achievable using only remote forms of communication. &lt;/p&gt;  &lt;p&gt;&lt;u&gt;Daily Status Meetings&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Agile methods promote regular short daily status meetings for the entire team, often stand-up meetings lasting no longer than ten or fifteen minutes. Carrying this over to remote groups is important, although in my experience the duration of such meetings need to increase potentially to thirty minutes in order to address the status and issues of the entire team which may represent more than a single working day (taking into account time zone differences). &lt;/p&gt;  &lt;p&gt;With time zone problems it&amp;#39;s important for both sides to give and take in picking the time for calls ensuring that the participants gain the most benefit from the calls. Whatever time is selected it is of paramount importance that this time be strictly adhered to in order to maintain the momentum and consistency of the calls.&lt;/p&gt;  &lt;p&gt;Depending upon the size of the offshore team and on-shore team it is sometimes more beneficial for having all team members present for the meeting yet having only key resources contributing to the call, although not necessarily the same people on each call. Although this does not strictly adhere to the purist’s view of the daily status meeting, it is more effective than having too many contributors which often diminish the effectiveness of the call.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Proxy Scrum-Master &lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;A Scrum Master is akin to the project manager in the Waterfall methodology but there are some distinct differences between the role of Project Manager and Scrum Master. The latter does not normally manage the team deliverables at a micro level. Instead, the Scrum Master is responsible for ensuring that each sprint stays on course, that no new features are added to the sprint (without a compensating effect being employed), that code inspections happen, and ensuring everyone plays by the rules. The Scrum Master’s duties does not end when the daily status meeting finishes, it is important for the Scrum Master to be available throughout the working day and to interact with the team outside of the status meetings.&lt;/p&gt;  &lt;p&gt;This proves a very difficult challenge when geography and time zones are part of the project team, as is almost invariably the case when offshore resources are employed. In order to address this issue, I have found the appointment of a “Proxy Scrum Master” covers those times when the Scrum Master is unavailable. This individual is the Scrum Master’s representative and has the same responsibility as the Scrum Master for the local team. Of course the Proxy Scrum Master and the Scrum Master must operate under the same rules and goals in order for this dichotomy of roles to work effectively. In addition the Proxy Scrum Master should be appropriate in terms of their experience and knowledge of Scrum and managing teams.&lt;/p&gt;  &lt;p&gt;Of course the purist view of Scrum is that the team members should be empowered and self-managed, however in practice the level of self-management should be limited when offshore teams are employed as there are even more way in which the team members could end up working against or over each other than when only on-shore resources are being used. Some (including myself) question how much the notion of the team self-managing themselves is realised in practice (or even whether such a notion has a place in practice at all regardless of the team’s geographical location).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Offshore and on-shore development combination&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Continuous Build and Source Control&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Employing continuous builds is a good practice for any development team which has been proven to significantly add value by identifying integration issues at the earliest most opportunity. When combining on-shore and offshore resources, it is an even more important and effective means of reducing integration headaches. Even with the best defined and communicated interfaces, integrating at the end is a dangerous and often costly path to follow.&lt;/p&gt;  &lt;p&gt;Continuous Integration which spans geographical locations often runs in to problems, namely annoyingly slow check-out and check-in times as well as the reduced opportunity to take back ups. It is therefore very beneficial at the outset of a project to ensure that the configuration of the source control software is suited as much as possible to the remote operations. A series of tests should be carried out to ascertain the reliability and performance of remote operations, in order to estimate the cost to the project and also to identify whether or not multiple repositories are required. In a successful global Agile environment, onshore and offshore teams will work on the same code base by setting up replicas that get merged both ways daily.&lt;/p&gt;  &lt;p&gt;I have been involved with more than one project where geographically local repositories were utilised, along with a single repository to merge the various geographical repositories (the latter being the effectively the master repository). This “Delayed Continuous Integration” does dilute somewhat the effectiveness of the Continuous Integration practice however it is the better of two evils when faced with an un-workable single repository option.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Minimize geographical inter-dependencies&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Utilising geographically local repositories and a hierarchical continuous integration process is often forced upon team using offshore resources as mentioned above. This may not be a significant issue where the product features developed by local and offshore resources have few or no inter-dependencies.&lt;/p&gt;  &lt;p&gt;As a general rule when the entire solution is being developed by a combination of offshore and on-shore resources, inter-dependencies between features should be kept to a minimum and if possible avoided completely. This will prevent the frequency of “toe-stepping” and undesirable delays whilst one team waits for another to complete their work. This should be considered during the planning for each Sprint, and in particular when apportioning features where the deliverable development is via a combination of on and offshore resources.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Daily Build&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;The practice of daily builds when employed with offshore teams allow for continuous and early views of the output of the offshore team. On the projects I have worked on where this practice has been employed the daily build has been delivered at the end of the offshore day, with a list of the features that have been implemented in that build. &lt;/p&gt;  &lt;p&gt;The local team (in particular the testing resources but also the end users) should review the daily build in order to identify deficiencies and deviations from the specification relating only to the features included within that build. This often formed some of the discussion in the following day’s status update meeting, but also served to be very influential in assuring the quality of the deliverables. These early views ensure that the deliverables are fit for their purpose, and also offer confirmation that the requirements of the Sprint’s features were fully understood and implemented. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Documentation&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In general Agile methodologies downplay documentation on the basis that in many instances a large part of documentation effort is wasted or adds only a nominal value. Once offshore resources become part of the project make-up documentation becomes more important in terms of its quantity and also level of detail, as a result of the face-to-face communication being significantly diminished. It is one of the necessary additional and often hidden costs of employing off-shore resources. &lt;/p&gt;  &lt;p&gt;There are two schools of thinking relating to documenting for teams where the development resources are exclusively offshore;&lt;/p&gt;  &lt;p&gt;The first (minimal documentation) being that a local resource produces at most a high-level design document (in addition to a requirements document) and the offshore team produce a low-level design document (the latter of course hopefully being representative of the former). This document exchange provides some assurance that the offshore team understand the requirements and the high-level design.&lt;/p&gt;  &lt;p&gt;The second approach (Detailed Design Documentation) involves a local resource producing a design document (again in addition to a requirements document) at a detailed level, in order to ensure that the team understand the requirements and adhere to the overall architecture objectives. Although there is no document exchange, this approach should incorporate a design review meeting between local and offshore meetings to clarify any ambiguities and to discuss possible improvements to the design.&lt;/p&gt;  &lt;p&gt;The offshore team composition will largely determine which approach is most suited, with the “Minimal Documentation” approach requiring offshore resources that are experienced with reasonable domain knowledge, whilst the “Detailed Design Documentation” approach is more suited to mixed-experienced teams with limited domain knowledge. &lt;/p&gt;  &lt;p&gt;Some view the second approach as a Scrum anti-pattern as it significantly limits the freedom of the offshore resources, however it is often required in order to ensure fit for purpose deliverables. The first approach is certainly more attuned to the Agile way of thinking; however it does demand the type of offshore resources which are not always available.&lt;/p&gt;  &lt;p&gt;From experience the level of detail required when offshore resources are involved is significantly higher and the language used must be more carefully selected. Both are required in order to ensure the understanding of the requirement that each feature represents. As a result I tend to prefer the “Detailed Design Documentation” approach but at the same time creative thinking is encouraged through other means such as the design review meeting.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Cultural issues&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Probably the most difficult element of introducing Agile methods into any organization is the cultural change it causes, to the extent that it is often the main problem organizations have with adopting Agile methods and often results in many failed adoptions.&lt;/p&gt;  &lt;p&gt;Agile methods involve a change from the command and control model (senior people make the decisions and less senior carry out those decisions) to a model where development team members have more autonomy. In western organizations this is a big problem; however the problem is more significant for organizations in Asia and ex-Soviet countries, as in these environments people are more often than not discouraged from asking questions of their seniors, pushing back or warning of unachievable deadlines. &lt;/p&gt;  &lt;p&gt;Such a change of culture with non-western resources is thus even more of an uphill battle in comparison to western organizations, and can take a significant amount of time, effort and patience to achieve. However once the summit of the hill is reached and a good co-operative relationship is established with the offshore resources, the Agile way of thinking is generally well received and appreciated.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Setup Costs&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;There are various types of setup costs which are involved in setting up an off shore development team, many of which apply regardless of the development methodology employed. I have detailed below many of these costs (it should be noted that this is not in any way an exhaustive list) ensuring that any costs that are particular to setting up a development employing Scrum are included.&lt;/p&gt;  &lt;p&gt;The first of which can be categorized as infrastructure costs which include: &lt;/p&gt;  &lt;p&gt;· Purchasing the necessary hardware (servers for test and build environment)&lt;/p&gt;  &lt;p&gt;· Continued network connection between the offshore and onshore locations&lt;/p&gt;  &lt;p&gt;· Software costs (for test and build environments and any other software required to handle the off shore development)&lt;/p&gt;  &lt;p&gt;The second kind of setup costs (which are often less tangible and difficult to estimate) can be categorized as Process and Relationships costs, which include:&lt;/p&gt;  &lt;p&gt;· Travel costs for onshore resources travelling to the offshore location&lt;/p&gt;  &lt;p&gt;· Travel costs for offshore resources travelling to the onshore location&lt;/p&gt;  &lt;p&gt;· Communication costs (e.g. international telephone calls etc...)&lt;/p&gt;  &lt;p&gt;· Process documentation and presenting (onshore resources will perform this activity)&lt;/p&gt;  &lt;p&gt;· Knowledge transfer of domain knowledge (continuous due to likely resource turnover)&lt;/p&gt;  &lt;p&gt;· Increased management costs for onshore team (will impact the Scrum Master)&lt;/p&gt;  &lt;p&gt;· Increased number of test cycles involving onshore resources&lt;/p&gt;  &lt;p&gt;· Relationship management costs&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Scrum can be employed successfully in teams where some, many or even the majority of resources are located offshore. I make this assertion based on two recent projects which were delivered on time and to budget with Scrum being employed (although I have also experienced one project which was both late and over budget in similar conditions although I am not convinced the methodology was the core reason for these results). The end deliverables were as per specified and the end-user buy-in was more significant than that in many other projects I have been involved in where offshore developers were employed.&lt;/p&gt;  &lt;p&gt;For me the most important consideration when employing Scrum with offshore resources is that it should not employed without modifying and/or tuning some of the practices to be more suited to working with geographically split teams. This tweaking (or lack thereof) can have a fundamental effect on the end result.&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a6096d66-54ca-47c0-8e3d-a111c00be159" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Scrum" rel="tag"&gt;Scrum&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Agile" rel="tag"&gt;Agile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Outsourcing" rel="tag"&gt;Outsourcing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Software+Development" rel="tag"&gt;Software Development&lt;/a&gt;&lt;/div&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx&amp;tags=&amp;title=Scrum+and+Outsourcing" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx&amp;tags=&amp;title=Scrum+and+Outsourcing"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx&amp;title=Scrum+and+Outsourcing&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx&amp;title=Scrum+and+Outsourcing&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx&amp;title=Scrum+and+Outsourcing" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2009%2f02%2f09%2fscrum-and-outsourcing.aspx&amp;title=Scrum+and+Outsourcing"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=769" width="1" height="1"&gt;</description></item><item><title>Virtual Earth &amp; Windows Mobile - "Nugget" Talk - NextGenUG - Oxford Branch - Wednesday 4th February 2009</title><link>http://blogs.charteris.com/blogs/speaking/archive/2009/02/03/virtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx</link><pubDate>Tue, 03 Feb 2009 13:05:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:767</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;h4&gt;Another Chance To See....&lt;/h4&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Calibri" color="#1f497d" size="3"&gt;I gave a talk to the Oxford branch of the NextGenUG in January 2009&amp;nbsp; on the subject of Location Based Programming with Windows Mobile &amp;amp; Virtual Earth.&amp;nbsp; Unfortunately the demo failed because of networking issues/config and as a result I ran out of time to fully explain the code sample.&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Calibri" color="#1f497d" size="3"&gt;Weather and traffic conditions permitting, I am hoping to do a reprise of the last 15-20 minutes of my talk as a &amp;quot;nugget&amp;quot; at the February meeting of the NxtGen User Group, &amp;nbsp;&amp;nbsp;Oxford Branch. &lt;/font&gt;&lt;/font&gt;&lt;span style="FONT-SIZE:11pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;The aim this time is purely to focus on explaining the integration of Windows Mobile code and Virtual Earth Web Services. In short I want to show a working demo and re-explain the code and concepts fully in&amp;nbsp;a focussed way. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:11pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;The date of the next meeting is&amp;nbsp;Wednesday 4th February 2009. It will be at the RM offices in Didcot from 7PM. Further details of the location and timing are &lt;a class="" href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=183"&gt;here&lt;/a&gt;&amp;nbsp;at the&amp;nbsp;NxtGenUG site. &lt;/span&gt;&lt;span style="FONT-SIZE:11pt;COLOR:#1f497d;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx&amp;tags=&amp;title=Virtual+Earth+%26amp%3b+Windows+Mobile+-+%26quot%3bNugget%26quot%3b+Talk+-+NextGenUG+-+Oxford+Branch+-+Wednesday+4th+February+2009" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx&amp;tags=&amp;title=Virtual+Earth+%26amp%3b+Windows+Mobile+-+%26quot%3bNugget%26quot%3b+Talk+-+NextGenUG+-+Oxford+Branch+-+Wednesday+4th+February+2009"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx&amp;title=Virtual+Earth+%26amp%3b+Windows+Mobile+-+%26quot%3bNugget%26quot%3b+Talk+-+NextGenUG+-+Oxford+Branch+-+Wednesday+4th+February+2009&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx&amp;title=Virtual+Earth+%26amp%3b+Windows+Mobile+-+%26quot%3bNugget%26quot%3b+Talk+-+NextGenUG+-+Oxford+Branch+-+Wednesday+4th+February+2009&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx&amp;title=Virtual+Earth+%26amp%3b+Windows+Mobile+-+%26quot%3bNugget%26quot%3b+Talk+-+NextGenUG+-+Oxford+Branch+-+Wednesday+4th+February+2009" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fspeaking%2farchive%2f2009%2f02%2f03%2fvirtual-earth-amp-windows-mobile-nextgenug-oxford-branch-wednesday-4th-february-2009.aspx&amp;title=Virtual+Earth+%26amp%3b+Windows+Mobile+-+%26quot%3bNugget%26quot%3b+Talk+-+NextGenUG+-+Oxford+Branch+-+Wednesday+4th+February+2009"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=767" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/speaking/archive/tags/nxtgenug/default.aspx">nxtgenug</category><category domain="http://blogs.charteris.com/blogs/speaking/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://blogs.charteris.com/blogs/speaking/archive/tags/Virtual+Earth/default.aspx">Virtual Earth</category></item><item><title>Nxt Gen User Group Talk - Location Based Programming - The "Demo Gods" Were Frowning</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2009/02/03/nxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx</link><pubDate>Tue, 03 Feb 2009 12:59:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:766</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;font size="2"&gt;A few weeks ago (Tuesday 13th January) I gave a presentation to the&amp;nbsp; Oxford Branch of the NxtGen User Group on Location Based Programming with Windows Mobile. &lt;/font&gt;&lt;font size="2"&gt;If you are interested, you can find the slides in PDF form for the talk &lt;/font&gt;&lt;a href="https://blogs.charteris.com/files/folders/nxtgenug/default.aspx" target="_blank"&gt;&lt;font size="2"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;This presentation was one of those occasions however,&amp;nbsp; where things just don&amp;#39;t go as planned. The problems occurred during my final demo, which hoped to show how to use Windows Mobile to call Virtual Earth Web Services 1.0.&amp;nbsp; The&amp;nbsp; other previous demos were running entirely locally on my laptop and generally the &amp;quot;demo gods&amp;quot; were with me - so these went OK.&lt;/font&gt;&lt;/p&gt;
&lt;h4&gt;Demos and Demons - Connectivity Woes&lt;/h4&gt;
&lt;p&gt;&lt;font size="2"&gt;However this final demo with Virtual Earth, required stable internet access for the web service connection and this was the root of my problems.&amp;nbsp;&amp;nbsp; Due to network authentication issues when connecting to the event location WiFi, prior to the start of the talk (I tried many times to access this), and the requirement of Virtual Earth Services for https access,&amp;nbsp; this wasn&amp;#39;t going to be straight forward. In the end I had the nervy and surreal experience of using a Windows Mobile 6.x software Emulator, virtually &amp;quot;cradled&amp;quot; via Windows Mobile Device Center on my laptop and connected to the internet via a real Windows Mobile 3G device connection of only 2 bars signal strength! Not a time for the faint hearted.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;As ever,&amp;nbsp; everything was working perfectly before the session, during the break, and before the demo itself. None of that mattered however as nobody saw it and the demo failed to work when required! Every call to the Virtual Earth Service kept throwing WebExceptions when the Virtual Earth token was requested via the first service call. It soon became obvious that the networking setup was failing to access the internet or resolve the required address. It appeared to think I was looking for a local web resource on my host machine. Internet Explorer Mobile in the emulator was also failing to connect to public web sites. In the heat of the demo, I appeared to be doing nothing different compared to previous successful attempts. The emulator was &amp;quot;cradled&amp;quot; and my host laptop could see the web but the emulator couldn&amp;#39;t.&lt;/font&gt;&lt;/p&gt;
&lt;h4&gt;Apologies &lt;/h4&gt;
&lt;p&gt;&lt;font size="2"&gt;Time was running out, so in the end I had to skip the demo. I felt this took the edge off the presentation,&amp;nbsp; so my sincere apologies to all who were there and missed out on the final demo. &lt;/font&gt;&lt;/p&gt;
&lt;h4&gt;Investigations &amp;amp; Repercussions&lt;/h4&gt;
&lt;p&gt;&lt;font size="2"&gt;When I got home this was still bugging me,&amp;nbsp; so I did some further intense investigation. It appears there was a difference in the behaviour of the Windows Mobile 6.1 emulators depending on the sequence of the setup and the type of network connection in use although my results weren&amp;#39;t always consistent. The issues0 appear to relate to two areas: &lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font size="2"&gt;Whether following the &amp;quot;cradle&amp;quot; action the device is set up with a sync profile on your host machine. If not you should use the &amp;quot;Connect without setting up the device&amp;quot; option. This appears to finally enable the network option even though the emulator thinks it is cradled and the network connection property in the State Notification broker shows it as enabled. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;The connections setting in the emulator itself and whether the connection is set to &amp;quot;My Work&amp;quot; or &amp;quot;MyISP&amp;quot; in the Network / Advanced settings. Depending on your network proxy or firewall settings this may cause issue. In my case I suspect this changed when I switched from WiFi to mobile based connectivity. &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;The Road To Connection Success&lt;/h4&gt;
&lt;p&gt;&lt;font size="+0"&gt;The correct sequence to get internet connectivity for a mobile development application from Visual Studio appears to be: &lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font size="2"&gt;Ensure that your Windows Mobile Device Center (Vista) or Active Sync (XP) is set to accept connections on &amp;quot;DMA&amp;quot;. Otherwise emulators appear to fail to be detected and cradled. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;Using the Device Emulator Manager ( Tools / Device Emulator Manager in Visual Studio) &amp;quot;Connect&amp;quot; to the chosen Emulator e.g. &amp;quot;USA Windows Mobile 6.1.4 Professional VGA Emulator&amp;quot; . This emulator should start if not already running. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;Ensure the Emulator network configuration is set to emulate a Network card via the relevant checkbox. In my case this was an NE200 PCMCIA Adaptor. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;&amp;quot;Cradle&amp;quot; the emulator via the Device Emulator Manager. This should start the Windows Mobile Device Center or ActiveSync. Ensure that the connection is finalised via the &amp;quot;Connect Without Setting Up My Device&amp;quot; option. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;Check the Network connections are set correct via the Windows Start / Settings / Networks / Advanced options. Ensure the drop downs are set correctly. In my case this is to &amp;quot;My Work Network&amp;quot;. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;Check the internet connection on the emulator by browsing to a known web site URL. &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font size="2"&gt;Deploy the application which requires internet connectivity. &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Another Chance To See....&lt;/h4&gt;
&lt;p&gt;&lt;font size="2"&gt;Anyway, weather and traffic conditions permitting,&amp;nbsp; I am hoping to do a reprise of&amp;nbsp; the last 15 minutes of my talk as a &amp;quot;nugget&amp;quot;&amp;nbsp; at the next NxtGen Oxford Branch talk on Wednesday 4th February 2009. It will be at the RM offices in Didcot from 7PM. Further details of location and timing are &lt;a href="http://www.nxtgenug.net/ViewEvent.aspx?EventID=183" target="_blank"&gt;here&lt;/a&gt; at the NxtGenUG site. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx&amp;tags=&amp;title=Nxt+Gen+User+Group+Talk+-+Location+Based+Programming+-+The+%26quot%3bDemo+Gods%26quot%3b+Were+Frowning" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx&amp;tags=&amp;title=Nxt+Gen+User+Group+Talk+-+Location+Based+Programming+-+The+%26quot%3bDemo+Gods%26quot%3b+Were+Frowning"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx&amp;title=Nxt+Gen+User+Group+Talk+-+Location+Based+Programming+-+The+%26quot%3bDemo+Gods%26quot%3b+Were+Frowning&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx&amp;title=Nxt+Gen+User+Group+Talk+-+Location+Based+Programming+-+The+%26quot%3bDemo+Gods%26quot%3b+Were+Frowning&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx&amp;title=Nxt+Gen+User+Group+Talk+-+Location+Based+Programming+-+The+%26quot%3bDemo+Gods%26quot%3b+Were+Frowning" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2009%2f02%2f03%2fnxt-gen-user-group-presentation-location-based-programming-the-quot-demo-gods-quot-were-frowning.aspx&amp;title=Nxt+Gen+User+Group+Talk+-+Location+Based+Programming+-+The+%26quot%3bDemo+Gods%26quot%3b+Were+Frowning"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=766" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Mobile+Devices/default.aspx">Mobile Devices</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Mobile+Emulator/default.aspx">Mobile Emulator</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Windows+Mobile+6.1/default.aspx">Windows Mobile 6.1</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Virtual+Earth+Web+Services/default.aspx">Virtual Earth Web Services</category></item><item><title>How does ASP.NET MVC work?</title><link>http://blogs.charteris.com/blogs/gopalk/archive/2009/01/20/how-does-asp-net-mvc-work.aspx</link><pubDate>Tue, 20 Jan 2009 06:56:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:755</guid><dc:creator>gopalk</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;If you’ve looked at the ASP.NET MVC framework, you might have wondered how it fits within the rest of the ASP.NET lifecycle. To understand it though, the ASP.NET request lifecycle needs to be understood first.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;What happens when an ASP.NET request is made? &lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;The answer depends on the version of IIS being used. In IIS 5.0 / 6.0, ASP.NET support was accomplished using an isapi extension i.e. &lt;b&gt;aspnet_isapi.dll&lt;/b&gt;. In IIS 5.0 / 6.0 there is a distinct handover of the request from IIS to .NET before any managed code can respond to the request. This is achieved by mapping certain extensions like .aspx, .asmx etc to &lt;b&gt;aspnet_isapi.dll &lt;/b&gt;extension by using application mapping within IIS manager interface.&lt;/p&gt;
&lt;p&gt;But in IIS 7.0 (running in integrated mode) things are different. IIS 7.0 integrates the ASP.NET runtime with the core web server and there is no specific handoff needed from IIS to ASP.NET. Thus for a managed &lt;b&gt;HttpModule&lt;/b&gt; to execute, the request doesn’t have to be routed to ASP.NET first. A managed &lt;b&gt;HttpModule&lt;/b&gt; can be added via IIS manager itself and can be made to execute for both managed and native requests. Similarly a managed &lt;b&gt;HttpHandler&lt;/b&gt; class can be mapped to specific extensions directly via IIS manager (which stores the configuration in applicationHost.config file.) or via the web application’s web.config file. &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;So what happens when a request gets through to ASP.NET?&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;1. &lt;b&gt;ApplicationManager&lt;/b&gt; and &lt;b&gt;HostingEnvironment&lt;/b&gt; classes are created. &lt;b&gt;ApplicationManager&lt;/b&gt; class manages Applications and their AppDomain for all the applications on the hosting process. &lt;b&gt;ApplicationManager&lt;/b&gt; can be used to do cool things like hosting ASP.NET in your custom process, see here: &lt;a href="http://www.west-wind.com/WebLog/posts/4976.aspx%20"&gt;http://www.west-wind.com/WebLog/posts/4976.aspx&lt;/a&gt; . This is also the stage when any necessary compilation of code in &lt;b&gt;App_Code&lt;/b&gt; folder occurs. &lt;/p&gt;
&lt;p&gt;2. &lt;b&gt;HttpRequest&lt;/b&gt;, &lt;b&gt;HttpResponse&lt;/b&gt; and &lt;b&gt;HttpContext&lt;/b&gt; objects are created and populated. At the end of this stage these objects are usable.&lt;/p&gt;
&lt;p&gt;3. Now the current &lt;b&gt;HttpContext&lt;/b&gt; is assigned to an instance of &lt;b&gt;HttpApplication&lt;/b&gt; (or instance of Global.asax if exists). At the same time any &lt;b&gt;HttpModules&lt;/b&gt; (inherited from parent app or defined in web.config) are initialised. The &lt;b&gt;HttpApplication&lt;/b&gt; class defines a set of stages/events that get executed one by one and carry the processing forward in distinct steps. Note that the &lt;b&gt;HttpModules&lt;/b&gt; that have been initialised will attach themselves to one or more of these lifecycle events defined on &lt;b&gt;HttpApplication&lt;/b&gt; instance.&lt;/p&gt;
&lt;p&gt;4. &lt;b&gt;HttpApplication&lt;/b&gt; lifecycle events fire in succession:&lt;/p&gt;
&lt;p&gt;Note that the list of lifecycle events on &lt;b&gt;HttpApplication&lt;/b&gt; is extensive and the objective here is not to analyse the entire lifecycle, so I’ll skip the parts that are not directly relevant for this exercise. For an extensive look at &lt;b&gt;HttpApplication&lt;/b&gt; lifecycle elements look here:&lt;/p&gt;
&lt;p&gt;IIS7: &lt;a href="http://msdn.microsoft.com/en-us/library/bb470252.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb470252.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;IIS5/6: &lt;a href="http://msdn.microsoft.com/en-us/library/ms178473.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms178473.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The first relevant event in the &lt;b&gt;HttpApplication&lt;/b&gt; lifecycle that we need to look at is &lt;b&gt;MapRequestHandler&lt;/b&gt;. Now this step is new in .NET 3.5 but an equivalent step (without the corresponding event) existed before .NET 3.5. It is in this step that an &lt;b&gt;HttpApplication&lt;/b&gt; selects an &lt;b&gt;HttpHandler&lt;/b&gt; to service the request. Now the selection of &lt;b&gt;HttpHandler&lt;/b&gt; will be based on web.config or inherited configuration. The HandlerFactory set in the configuration will be used to acquire an instance of the Handler which is then assigned to the context.&lt;/p&gt;
&lt;p&gt;So for example, if a request is for an ‘aspx’ file, in the &lt;b&gt;MapRequestHandler &lt;/b&gt;stage, &lt;b&gt;HttpApplication&lt;/b&gt; will map ‘.aspx’ request to &lt;b&gt;PageHandlerFactory&lt;/b&gt;. &lt;b&gt;GetHandler&lt;/b&gt; method is then invoked on &lt;b&gt;PageHandlerFactory&lt;/b&gt; which returns an instance of the appropriate &lt;b&gt;Page&lt;/b&gt; class (&lt;b&gt;Page&lt;/b&gt; is basically an &lt;b&gt;HttpHandler&lt;/b&gt; and implements &lt;b&gt;IHttpHandler&lt;/b&gt; interface). This is then attached to the &lt;b&gt;Handler&lt;/b&gt; property of the context class. &lt;/p&gt;
&lt;p&gt;Let’s skip a few more steps and go to the &lt;b&gt;ProcessRequest &lt;/b&gt;stage. By now the request (To be precise the &lt;b&gt;HttpContext&lt;/b&gt; object encapsulating the request.) already has an &lt;b&gt;HttpHandler&lt;/b&gt; assigned to it as seen earlier. The request is now processed here by invoking the &lt;b&gt;ProcessRequest&lt;/b&gt; method on the &lt;b&gt;HttpHandler&lt;/b&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Wasn’t this about MVC?&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;In MVC, there is no concept of a Page as in a traditional webform page, i.e. the web page requested doesn’t exist on the disk as a file. Instead it’s served up by a special method (‘the Action’) on a special class (‘the Controller’). This is quite a dynamic routing arrangement as it needs to respond to varying URL’s. And if you do not want to use a special extension (like .mvc) for these MVC requests, then you can’t really use an HttpHandler entry in web.config/IIS. (There does exist a handler for .mvc in web.config if you want to use .mvc extension for your MVC requests.) &lt;/p&gt;
&lt;p&gt;So, how does ASP.NET know how to route requests to MVC? The answer lies in web.config. There is a new http module added to modules collection in ASP.NET MVC projects&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;add name=&amp;quot;UrlRoutingModule&amp;quot; type=&amp;quot;System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&amp;quot; /&amp;gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This was originally a part of MVC framework but since has been released as a separate assembly. The other part in this routing magic is played by Global.asax &lt;b&gt;RegisterRoutes&lt;/b&gt; method. &lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;routes.MapRoute(&amp;quot;Default&amp;quot;, &amp;quot;{controller}/{action}/{id}&amp;quot;,new { controller = &amp;quot;Home&amp;quot;, action = &amp;quot;Index&amp;quot;, id = &amp;quot;&amp;quot; });&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;MapRoute&lt;/b&gt; is an extension method on &lt;b&gt;RouteCollection&lt;/b&gt; class that can be used to define possible routes. In the background this method sets the routes you define to be handled by &lt;b&gt;MvcRouteHandler&lt;/b&gt; class.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;UrlRoutingModule&lt;/b&gt; attaches itself to &lt;b&gt;PostResolveRequestCache&lt;/b&gt; and &lt;b&gt;PostMapRequestHandler&lt;/b&gt; events of the &lt;b&gt;HttpApplication &lt;/b&gt;instance and overrides the default behaviour of &lt;b&gt;MapRequestHandler &lt;/b&gt;stage. &lt;b&gt;UrlRoutingModule&lt;/b&gt; does this by searching the &lt;b&gt;RouteCollection&lt;/b&gt; for a route matching the request. If it’s found, the associated &lt;b&gt;RouteHandler&lt;/b&gt; is retrieved from the &lt;b&gt;RouteCollection&lt;/b&gt;. In our case this is an &lt;b&gt;MvcRouteHandler&lt;/b&gt; instance. An instance of &lt;b&gt;MvcHandler&lt;/b&gt; is retrieved from &lt;b&gt;MvcRouteHandler&lt;/b&gt; and assigned as the handler for the current context. Nice thing to note is that &lt;b&gt;RouteCollection&lt;/b&gt; is one of the points where the MVC framework can be extended. This can be done by defining a custom RouteHandler corresponding to the routes (instead of the &lt;b&gt;MvcRouteHandler&lt;/b&gt;). There is some good information here on how to this.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/luisabreu/archive/2008/07/23/the-mvc-framework-the-mvcroutehandler.aspx"&gt;http://msmvps.com/blogs/luisabreu/archive/2008/07/23/the-mvc-framework-the-mvcroutehandler.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a side note, also note that &lt;b&gt;UrlRoutingModule&lt;/b&gt; will by default ignore any requests that match a file that exists on the disk. Thus if a request for WebForm1.aspx is received and it happens to exist on the disk then route lookup will be skipped for this request. This behaviour can be changed (at your own peril!) by setting routes.RouteExistingFiles = true ;&lt;/p&gt;
&lt;p&gt;Now there might be a case where a custom handler needs to be defined within our MVC web application (For integrating third party products/user controls). This may not exist on the disk and will trigger a route table lookup and a 404 if no matching routes are found. To avoid this, &lt;b&gt;RouteCollection&lt;/b&gt; can be instructed to ignore this specific path in the following way.&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;routes.IgnoreRoute(&amp;quot;&amp;lt;your route&amp;gt;&amp;quot;);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;So in this post we saw how a request was routed from IIS through to the MVC framework and along the way, an extensibility point was identified. From here it needs to be routed through to the right action on the right controller class, but that could be the topic of an entirely new post! &lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx&amp;tags=&amp;title=How+does+ASP.NET+MVC+work%3f" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx&amp;tags=&amp;title=How+does+ASP.NET+MVC+work%3f"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx&amp;title=How+does+ASP.NET+MVC+work%3f&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx&amp;title=How+does+ASP.NET+MVC+work%3f&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx&amp;title=How+does+ASP.NET+MVC+work%3f" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fgopalk%2farchive%2f2009%2f01%2f20%2fhow-does-asp-net-mvc-work.aspx&amp;title=How+does+ASP.NET+MVC+work%3f"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=755" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/gopalk/archive/tags/MVC/default.aspx">MVC</category><category domain="http://blogs.charteris.com/blogs/gopalk/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.charteris.com/blogs/gopalk/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Asp.net 4</title><link>http://blogs.charteris.com/blogs/deniss/archive/2008/12/22/asp-net-4.aspx</link><pubDate>Mon, 22 Dec 2008 09:44:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:749</guid><dc:creator>deniss</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;In this post I would like to share some information related to Asp.net 4 after visiting recent DDD 7 conference, reading some online resources, and attending Charteris Tech Day event.&lt;/p&gt;  &lt;p&gt;In development of Asp.net 4 Microsoft tried to set up new ground in openness and community involvement. For this purpose they were using their codeplex (www.codeplex.com/aspnet) site heavily where all the interim work and unofficial releases of different products can be found.&lt;/p&gt;  &lt;p&gt;So Aps.net 4 will contain many products with open source background.&lt;/p&gt;  &lt;p&gt;Asp.net 4 will be released as a part of .Net 4 and VS 10. VS10 will support multi-targeting and Asp.net in particular maintains a high compatibility bar with 3.5. So if you’ll be upgrading from 3.5 to 4.0 it shouldn’t break your applications.&lt;/p&gt;  &lt;p&gt;Let’s move forward and see which new features and improvements MS announced in the new version of Aps.net&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Standards support (improved Web forms)&lt;/b&gt;: MS claims that Asp.net 4 will be the best platform for standards work. Support for CSS standard is improved and it would be possible to have much better control of it. HTML standards support is improved as well.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Web forms related improvements&lt;/b&gt;:&lt;/p&gt;  &lt;p&gt;- &lt;b&gt;Client IDs&lt;/b&gt;: Developers can manage control IDs that affect rendered client IDs. It would be possible to specify ID you want for the control.&lt;/p&gt;  &lt;p&gt;- &lt;b&gt;CSS&lt;/b&gt;: remove the need to use CSS adapters (they were used to change control’s rendering mode to use CSS instead of table-based layout). This will be a part of mainstream Asp.net features.&lt;/p&gt;  &lt;p&gt;- &lt;b&gt;URL routing&lt;/b&gt;: This feature comes from MVC framework and will be available for Web Forms as well.&lt;/p&gt;  &lt;p&gt;It allows you to use search engine friendly URLs. This is very helpful feature for online e-commerce applications where you need to have URLs in the format similar to this one: www.store.com/categories/manufacturer. So it would be possible to do this without using third party URL rewriting tools (like Helicon rewrite for instance) or ISAPI filters which usually contain files with rules which is difficult to maintain. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;- View-state&lt;/b&gt;: It would be possible to have granular control of view state which is much more flexible and allows you to do the following:&lt;/p&gt;  &lt;p&gt;- Disable view-state on page, enable on specific controls&lt;/p&gt;  &lt;p&gt;- Disable view-state on control, enable on child controls&lt;/p&gt;  &lt;p&gt;- Grid view/ List view work better without view-state - fixed concurrency problems in these controls when view states is turned off&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Support ‘Pattern-based’ development models&lt;/b&gt;: &lt;b&gt;MVC, TDD&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;MVC framework allows you to build web applications with Model-View-Controller architecture. MVC is a very ‘pattern-oriented’ framework and it’s particularly good for test driven development. It provides good separation of data, logic and views. This framework was available for download on codeplex site for quite a long time and it will be shipped as part of Asp.net 4 now. This means that all parts of Asp.net like membership, roles, providers, Request and other core functionality will be accessible inside MVC applications. Another Microsoft’s intention behind this step is to open Asp.net for a different audience like Php, Django and Ruby on Rails developers.&lt;/p&gt;  &lt;p&gt;MVC also supports URL routing feature.&lt;/p&gt;  &lt;p&gt;AJAX support will be implemented for MVC as well allowing partial rendering of the page and JSON support.&lt;/p&gt;  &lt;p&gt;The common scenario might be the following:&lt;/p&gt;  &lt;p&gt;ASP.net ajax makes a call to controller, it returns JsonResults and updates independent regions on the page using jQuery By doing this it&amp;#39;s possible to build simple service for client’s page. jQuery allows to draw user&amp;#39;s attention to the part of the page where change happened by applying visual effects.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Improvements in the ‘core’ Aps.net&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The only significant improvement I’m aware of for now relates to caching mechanism.&lt;/p&gt;  &lt;p&gt;There are alternate cache providers for Asp.net and one of the things Microsoft was doing in ‘core’ for 4.0 is taking the asp.net cache and make it something that’s provider based, so it’s possible to replace it with your own. Products like Velocity can be easily integrated in applications.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Ajax&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Ajax control Toolkit is a part of the strategy - it will be a part of Asp.net 4 with new controls added. There will be controls that feel like server side controls. This means that you have data source on the client side page, template controls like repeater and you can have it firing events like sorting etc.&lt;/p&gt;  &lt;p&gt;jQuery will be released as a part of Asp.net 4 with IntelliSense support in VS10.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Data and Dynamic Data:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Dynamic Data is building on from .Net 3.5 SP1 and will be included as part of .Net 4.0 and subsequently as a part of Asp.net 4.0&lt;/p&gt;  &lt;p&gt;Asp.net Dynamic Data is a framework that lets you create data-driven Asp.net Web applications easily. It does this by automatically discovering the data model at run time and determining UI behavior from it. For instance, Dynamic Data can use LINQ to SQL model or Entity Framework model. A scaffolding framework instantly provides a functional Web site with CRUD operations for data manipulations. This scaffolding can then be easily customized using metadata, templates, or by creating standard ASP.NET pages to override the default behavior. At the same time existing applications can easily integrate pieces of the scaffolding logic with their existing pages.&lt;/p&gt;  &lt;p&gt;In Aps.net 4 Dynamic Data approach is implemented in MVC framework as well. It will be possible to use Grids and other controls in MVC that support reach functionality.&lt;/p&gt;  &lt;p&gt;In Asp.net 4 there is a lot of core functionality that was added to existing data controls. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Support for abstract data-layer:&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Currently there are several types of data sources supported by Asp.net: LINQ data source, Entity Framework data source, Object data source. The negative side of Object data source is that it doesn’t give you access to IQueryable. So during development of Asp.net 4 the intention was to building some kind of abstract data layer which means that you can write your own business classes and they will return IQueryable. Dynamic Data wise it would be possible to take one of these data sources go against it and scaffold your own business objects.&lt;/p&gt;  &lt;p&gt;Support for &lt;b&gt;many-to-many relationships&lt;/b&gt; will be implemented for Dynamic Data as well. This is currently supported by Entity Framework only.&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx&amp;tags=&amp;title=Asp.net+4" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx&amp;tags=&amp;title=Asp.net+4"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx&amp;title=Asp.net+4&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx&amp;title=Asp.net+4&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx&amp;title=Asp.net+4" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdeniss%2farchive%2f2008%2f12%2f22%2fasp-net-4.aspx&amp;title=Asp.net+4"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=749" width="1" height="1"&gt;</description></item><item><title>New Windows Mobile 6.1.4 Emulators and Latest P &amp; P Guidance for Windows Mobile Developers</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/12/04/new-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx</link><pubDate>Thu, 04 Dec 2008 01:00:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:737</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Those of you you who are Microsoft .Net and Windows Mobile Developers may be interested in two recent announcements&amp;nbsp; from Microsoft. &lt;/p&gt;
&lt;h4&gt;New Windows Mobile 6.1.4 Emulator&lt;/h4&gt;
&lt;p&gt;&lt;font size="2"&gt;Microsoft has recently released a new version of the emulator images fro Windows Mobile 6.1. These new versions are primarily designed to showcase the latest version of Internet Explorer 6. This has better AJAX and Javascipt support, Flash Lite support, touch support and multiple zoom support. The aim of the emulators is to provide testing support for applications using Visual Studio 2005 and Visual Studio 2008. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;The 6.1.4 emulators come in Standard and Professional variants and you can download the emulators from &lt;/font&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1a7a6b52-f89e-4354-84ce-5d19c204498a&amp;amp;DisplayLang=en" target="_blank"&gt;&lt;font size="2"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;. &lt;/font&gt;&lt;/p&gt;
&lt;h4&gt;Patterns and Practice Mobile Architecture Pocket Guide&lt;/h4&gt;
&lt;p&gt;&lt;font size="2"&gt;Something else that has slipped out relatively quietly from the Microsoft Patterns and Practice team last week is the Mobile Architecture pocket guide. I&amp;#39;ve only got part way through it currently but it appears to be a good concise summary (well 150 pages worth) in a single place of all the design elements and issues to consider when developing a Windows Mobile solution. Everything from screen resolution to security is covered. A recommended read so far...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;You can download the PDF from CodePlex at the &lt;/font&gt;&lt;a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19798" target="_blank"&gt;&lt;font size="2"&gt;this location&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx&amp;tags=&amp;title=New+Windows+Mobile+6.1.4+Emulators+and+Latest+P+%26amp%3b+P+Guidance+for+Windows+Mobile+Developers" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx&amp;tags=&amp;title=New+Windows+Mobile+6.1.4+Emulators+and+Latest+P+%26amp%3b+P+Guidance+for+Windows+Mobile+Developers"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx&amp;title=New+Windows+Mobile+6.1.4+Emulators+and+Latest+P+%26amp%3b+P+Guidance+for+Windows+Mobile+Developers&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx&amp;title=New+Windows+Mobile+6.1.4+Emulators+and+Latest+P+%26amp%3b+P+Guidance+for+Windows+Mobile+Developers&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx&amp;title=New+Windows+Mobile+6.1.4+Emulators+and+Latest+P+%26amp%3b+P+Guidance+for+Windows+Mobile+Developers" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f12%2f04%2fnew-windows-mobile-6-1-4-emulators-and-latest-p-amp-p-guidance-for-windows-mobile-developers.aspx&amp;title=New+Windows+Mobile+6.1.4+Emulators+and+Latest+P+%26amp%3b+P+Guidance+for+Windows+Mobile+Developers"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=737" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Mobile+Emulator/default.aspx">Mobile Emulator</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Windows+Mobile+6.1/default.aspx">Windows Mobile 6.1</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Mobile+Architecture+Pocket+Guide/default.aspx">Mobile Architecture Pocket Guide</category><category domain="http://blogs.charteris.com/blogs/rogerw/archive/tags/Patterns+and+Practice/default.aspx">Patterns and Practice</category></item><item><title>MOSS 2007 as Web Content Management for Internet-Facing Web Sites - Tech Ed EMEA 2008 Developers</title><link>http://blogs.charteris.com/blogs/alistairl/archive/2008/12/03/moss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx</link><pubDate>Wed, 03 Dec 2008 10:53:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:736</guid><dc:creator>alistairl</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In my day I have had a fair bit to do with Internet-Facing Web Sites and the challenges of drop dead deadlines and culture clashes that these kinds of projects tend to bring. Anyway, enough of me, this session appealed to me as a catch up on the world of content management as Microsoft sees it. PDC 2003 was notable to me for its complete lack of mention of Content Management Server and this was borne out in the following months when it was announced that MSCMS was to become part of Microsoft Office SharePoint Server.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.charteris.com/blogs/alistairl/WindowsLiveWriter/MOSS2007asWebContentManagementforInterne_11086/IMAGE_031_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="235" alt="IMAGE_031" src="http://blogs.charteris.com/blogs/alistairl/WindowsLiveWriter/MOSS2007asWebContentManagementforInterne_11086/IMAGE_031_thumb.jpg" width="312" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;At the time this was a bit of an annoyance, out in the web world we were interested about standards compliance and cross browser support. On top of straightforward W3C markup compliance was accessibility which at the time was a bit of a challenge even for plain old asp.net, let alone an Intranet tool like SharePoint. But since then Microsoft Office SharePoint Server has been through a big release and a whole lot of experience has been gained by implementing the product in a number of different configurations. This session at TechEd aimed to make sure that everyone was up to date with the web content management capabilities of the current product.&lt;/p&gt;
&lt;p&gt;First of all we had a quick introduction to our presenter, needless to say Andrew Connell knows a thing or two about MOSS, is an MVP for Office SharePoint Server and has a book out on SharePoint Publishing. We were going to cover the broad gamut of web publishing on topics such as Web Content Management, Page Layouts, Branding Publishing Sites, the Content Query Web Part and Forms Based authentication. Then a &amp;quot;watch this space&amp;quot; announcement about a really good sample site. By the end of the year we would have a site that would be a good demonstration of the web capabilities of MOSS 2007 - and it would not use the BlueBand master - at least we hope not. The sample site will be for the familiar fictional AdventureWorks company, I look forward to it becoming available.&lt;/p&gt;
&lt;p&gt;So how did we get here, well a few years back Microsoft decided to consolidate their Electronic Content Management strategies and centred these around MOSS 2007. This is when document, web and other materials produced off the back of collaboration and work came together under the Office banner and we immediately had to widen our heads to take it all in. But focusing on our particular area of interest, the Web Content Management (WCM) facilities in MOSS 2007 are the successor to those&amp;nbsp; in MCMS 2002. And a bit like MCMS, you aren&amp;#39;t restricted to using WCM on public websites, you are welcome to use them internally too.&lt;/p&gt;
&lt;p&gt;We then got in to the nitty gritty of what Publishing sites look like from the inside. They follow the standard site collection / site shape of the SharePoint way of doing things and pages are held in a Library. This does hit one issue with site owners wanting to rearrange their URL into something &amp;quot;nicer&amp;quot; but we were warned off http rewriting with some neat regex. Do the performance metrics on this approach and you will see how much processor utilisation it takes. Andrew recommended pushing the URL issue off to your ISA / Firewall box instead which will handle this a whole lot better and make sure your application box is concentrating on serving web pages.&lt;/p&gt;
&lt;p&gt;Then on to a bit of presentation fun with the &amp;quot;ABCs&amp;quot; of WCM and SharePoint. In our case we would be looking at Authoring (web based of course) Branding (developer and designers working together) and Controlled Publishing (Consistent business rules for approval).&lt;/p&gt;
&lt;p&gt;Web based authoring used to be quite revolutionary in the old days when Microsoft didn&amp;#39;t even own what came to be MCMS, but these days we even have a choice of companies that will host a blog and not ask us to install one piece of software or install a plug in to our web browser. But to cut a long story short, you can use your browser to author content for a SharePoint publishing site.&lt;/p&gt;
&lt;p&gt;Branding is a very very important issue when it comes to considering Microsoft for WCM. I&amp;#39;ll hold on my final judgement as to whether AdventureWorks will be the sample site to move things on, but MOSS has a similar problem to that of MCMS in that you cannot and should not use what comes out of the box to evaluate its capability for WCM and similarly you should not let that anywhere near a public website. Yes, you can perhaps &amp;quot;get away&amp;quot; with it on an Extranet, but even with that you should really speak to your marketing and account management team first. But face it, if you are on a project that can fund a MOSS infrastructure then it should also be a project that has decent representation from brand owners. The &amp;quot;good&amp;quot; news is that MOSS 2007 is based on the principles you have learned for ASP 2.0, so all that hard work learning how to lay things out using CSS and master pages is well learned, but there are also differences. You have a huge amount of CSS that comes with MOSS, and a whole load of content placeholders to know all about too.&lt;/p&gt;
&lt;p&gt;Andrew was good enough to explain what he was meaning by certain terms, which was a good presenting point. Although I would reckon that everyone in the audience would be able to create html markup and deploy it to a web server of any flavour, I think that less would have experience of a large website deployment. When you have to deal with a project team with Internet security people all the way through to graphic designers and copywriters then it is important that you as a developer can bring together the separate elements of brand and content while keeping in mind the WCM and infrastructure requirements. Branding is the so-called chrome or design, whereas content is is text and images that vary quite often.With an eye to infrastructure we want to make sure that the approach we take will work across load balanced web servers, and can be deployed in a repeatable fashion without developer input. Branding should be able to accommodate changing content without developer input, which is really the spirit of MOSS web publishing.&lt;/p&gt;
&lt;p&gt;How to implement branding and content management in MOSS is a choice based on a number of factors, including the skill set of your team and how you approach disaster recovery. Some approaches may be simple in plain IIS, but they mean that deployment is a two part process of MOSS and your separate items. Others are easy to do on one box, but a pain to move, such as some of the techniques using SharePoint designer. Above all, make sure you consider the maintenance factors when choosing an approach.&lt;/p&gt;
&lt;p&gt;Then for a bit of light relief, Andrew demonstrated the new Adventureworks demonstration site and how it illustrated that you can implement a site that &amp;quot;Doesn&amp;#39;t look like SharePoint&amp;quot;. From what we have been told it has been implemented as a proper reference site (but looks good too) so we should be allowed to take some principles from the implementation such as using Field Controls for versioned content, but Web Parts for functionality. I&amp;#39;m really looking forward to getting hold of it and pulling it apart to see what is inside.&lt;/p&gt;
&lt;h2&gt;Key Facts:&lt;/h2&gt;
&lt;p&gt;Session Code: OFC202&lt;/p&gt;
&lt;p&gt;Speakers: Andrew Connell&lt;/p&gt;
&lt;p&gt;Track: Office and SharePoint&lt;/p&gt;
&lt;p&gt;Rating: 9/10&lt;/p&gt;
&lt;p&gt;Attendance: 300 is (90% capacity)&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx&amp;tags=&amp;title=MOSS+2007+as+Web+Content+Management+for+Internet-Facing+Web+Sites+-+Tech+Ed+EMEA+2008+Developers" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx&amp;tags=&amp;title=MOSS+2007+as+Web+Content+Management+for+Internet-Facing+Web+Sites+-+Tech+Ed+EMEA+2008+Developers"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx&amp;title=MOSS+2007+as+Web+Content+Management+for+Internet-Facing+Web+Sites+-+Tech+Ed+EMEA+2008+Developers&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx&amp;title=MOSS+2007+as+Web+Content+Management+for+Internet-Facing+Web+Sites+-+Tech+Ed+EMEA+2008+Developers&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx&amp;title=MOSS+2007+as+Web+Content+Management+for+Internet-Facing+Web+Sites+-+Tech+Ed+EMEA+2008+Developers" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2falistairl%2farchive%2f2008%2f12%2f03%2fmoss-2007-as-web-content-management-for-internet-facing-web-sites-tech-ed-emea-2008-developers.aspx&amp;title=MOSS+2007+as+Web+Content+Management+for+Internet-Facing+Web+Sites+-+Tech+Ed+EMEA+2008+Developers"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=736" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/TechEd+EMEA+2008/default.aspx">TechEd EMEA 2008</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/TechEdEMEA+2008/default.aspx">TechEdEMEA 2008</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/MOSS+2007/default.aspx">MOSS 2007</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/WCM/default.aspx">WCM</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/Andrew+Connell/default.aspx">Andrew Connell</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/MSCMS/default.aspx">MSCMS</category><category domain="http://blogs.charteris.com/blogs/alistairl/archive/tags/Adventureworks/default.aspx">Adventureworks</category></item><item><title>TechEd EMEA 2008 - Day Four - Windows 7 and more</title><link>http://blogs.charteris.com/blogs/jong/archive/2008/11/17/teched-emea-2008-day-four-windows-7-and-more.aspx</link><pubDate>Mon, 17 Nov 2008 15:47:00 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:721</guid><dc:creator>Jon Grant</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;On Thursday I attended the second part of a two-part session on Windows 7 and what&amp;#39;s new for developers. The vast majority of these features are aimed at desktop application developers (e.g. Adobe, Mozilla, and Microsoft themselves) and personally I&amp;#39;m looking forward to a lot of them as they will mean some great productivity enhancements. However, Microsoft are also committing to reducing the memory and processor footprint in Windows 7 and driving up battery life, and are strongly encouraging their third party developers to follow suit. Hopefully this means good news for portable devices, and could ironically mean that Windows 7 is better in the device market than Windows Vista.&lt;/p&gt;
&lt;p&gt;Another session I went to was comparing the various development models supported by Windows Embedded Compact. CE 6.0 supports a number of application programming models - including Win32, MFC, and .NET - and there are a number of factors you should consider when deciding which one to use.&amp;nbsp;&amp;nbsp;The basic upshot was that for most apps, .NET is the right choice, however Douglas Boling raised some interesting points and it&amp;#39;s worth &lt;a target="_blank" href="https://downloads.eventpoint.com/teched2008-emea/presentations1/EMB304_Boling.pptx?ticket=814dae35-3e49-48fd-91eb-9427aabd5f1d&amp;amp;id=2895d920-237e-462a-8ed8-7f3815631796"&gt;checking out his presentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx&amp;tags=&amp;title=TechEd+EMEA+2008+-+Day+Four+-+Windows+7+and+more" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx&amp;tags=&amp;title=TechEd+EMEA+2008+-+Day+Four+-+Windows+7+and+more"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx&amp;title=TechEd+EMEA+2008+-+Day+Four+-+Windows+7+and+more&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx&amp;title=TechEd+EMEA+2008+-+Day+Four+-+Windows+7+and+more&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx&amp;title=TechEd+EMEA+2008+-+Day+Four+-+Windows+7+and+more" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fjong%2farchive%2f2008%2f11%2f17%2fteched-emea-2008-day-four-windows-7-and-more.aspx&amp;title=TechEd+EMEA+2008+-+Day+Four+-+Windows+7+and+more"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=721" width="1" height="1"&gt;</description><category domain="http://blogs.charteris.com/blogs/jong/archive/tags/teched/default.aspx">teched</category><category domain="http://blogs.charteris.com/blogs/jong/archive/tags/teched+emea+2008/default.aspx">teched emea 2008</category><category domain="http://blogs.charteris.com/blogs/jong/archive/tags/windows+7/default.aspx">windows 7</category><category domain="http://blogs.charteris.com/blogs/jong/archive/tags/windows+embedded/default.aspx">windows embedded</category><category domain="http://blogs.charteris.com/blogs/jong/archive/tags/.net/default.aspx">.net</category></item><item><title>TechEd 2008 EMEA - What's in Your Portfolio - Ideas? Projects?</title><link>http://blogs.charteris.com/blogs/rogerw/archive/2008/11/17/teched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx</link><pubDate>Mon, 17 Nov 2008 13:50:37 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:720</guid><dc:creator>rogerw</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;As part of my quest to better understand Microsoft Visual Studio Team System (VSTS) I continued my journey through the software product life cycle and attended a session VSTS and the product life cycle.&amp;#160; As part of this session I came across a product called Microsoft Office Project Portfolio Server that I was previous unaware of. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Microsoft Office Project Portfolio Server has several functions. Firstly,&amp;#160; it acts as a capture tool for business initiatives and ideas - depending on the level of granularity, these are effectively business and functional requirements. Once entered,&amp;#160; these can then be reviewed against the stated business strategies. Using clever algorithms, Microsoft Office Project Portfolio Server then ranks and prioritises ideas and initiatives. High level costings and resources can then be applied. Once recorded decisions can be made to accept to initiate projects. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Make no mistake this is not MS Project with a suggestion box!&amp;#160; This is a tool for senior executives to initiate and assess projects against defined business strategies. These can be any kind of projects not just software projects. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;The clever bit here is the integration to other parts of Team Systems. Once a project is accepted the Portfolio server can integrate with Foundation Server and create full blown projects. These can then be structured and expanded by project managers using MS Project. If it&amp;#39;s a software project,&amp;#160; software professionals can then do their stuff and interact via Visual Studio.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;The other clever part is the ability to feed moderated high level project status data back up through to the senior executives. Whilst all the task completion activities still goes through project managers for approval, using a classic &amp;quot;traffic-light&amp;quot; status approach, senior executives are able to get an instant high level view of how a project is doing at all times. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Even if you just want to use portfolio for capturing business ideas or strategic requirements or even just the output of simple brainstorming MS Office Project Portfolio Server is well worth checking into.&amp;#160; As with the rest of team system depending on the scale of you organisation the price point may be the only issue. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Interested? You can find details of Microsoft Office Project Portfolio Server at: &lt;a href="http://office.microsoft.com/en-us/portfolioserver/FX101674151033.aspx" target="_blank"&gt;MS Office Project Portfolio Server&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx&amp;tags=&amp;title=TechEd+2008+EMEA+-+What%27s+in+Your+Portfolio+-+Ideas%3f+Projects%3f" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx&amp;tags=&amp;title=TechEd+2008+EMEA+-+What%27s+in+Your+Portfolio+-+Ideas%3f+Projects%3f"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx&amp;title=TechEd+2008+EMEA+-+What%27s+in+Your+Portfolio+-+Ideas%3f+Projects%3f&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx&amp;title=TechEd+2008+EMEA+-+What%27s+in+Your+Portfolio+-+Ideas%3f+Projects%3f&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx&amp;title=TechEd+2008+EMEA+-+What%27s+in+Your+Portfolio+-+Ideas%3f+Projects%3f" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2frogerw%2farchive%2f2008%2f11%2f17%2fteched-2008-emea-what-s-in-your-portfolio-ideas-projects.aspx&amp;title=TechEd+2008+EMEA+-+What%27s+in+Your+Portfolio+-+Ideas%3f+Projects%3f"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=720" width="1" height="1"&gt;</description></item><item><title>Project Velocity</title><link>http://blogs.charteris.com/blogs/davidmy/archive/2008/11/17/project-velocity.aspx</link><pubDate>Mon, 17 Nov 2008 10:11:07 GMT</pubDate><guid isPermaLink="false">0cdfd867-77e4-483c-9e74-84c93cc8eba0:718</guid><dc:creator>davidmy</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;One of the last sessions I attended last week at Tech Ed was on what Microsoft has dubbed “Project Velocity”, which was one of the very few products discussed during Tech Ed that was new. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is “Project Velocity”?&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;It is Microsoft’s first foray into the world of distributed caching, a market which thus far only has two main players (Memcached and NCache). Microsoft has said thus far that this will be “free” although it was far from certain whether it would remain this way after version 1 was released. It certainly will be interesting if it is “free”, in particular for the other main players in this area charge for their offering!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is a distributed cache?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A distributed cache is a highly scalable in-memory application cache that is spread across multiple servers. Just like a normal cache its usage can glean significant performance gains by avoiding unnecessary calls to data sources. As the implementation of web farms has become more of a norm the beneficial of an ordinary cache has been diminished, as the cache is only populated on one server whilst the consumer can request data from any of the servers in the farm. Thus the cache is only 100% effective when all the servers in the farm have had their cache populated. In addition to this because they are most likely going to be populated at different times, their disparate cache expiration could lead to stale data or inconsistent data across the web farm.&amp;#160; This issue is resolved by a distributed cache as the cache is shared across the entire farm and is consistent in terms of the data content regardless which server the consumer makes their request to.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So what would “Velocity” be used for?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are three main uses for “Velocity”:&lt;/p&gt;  &lt;p&gt;a) Caching fairly static data that is frequently accessed (e.g. a Product Catalog)&lt;/p&gt;  &lt;p&gt;b) Session data (e.g. ASP.Net session)&lt;/p&gt;  &lt;p&gt;c) Caching data that is accessed frequently but changes are not very frequent (e.g. user’s security permissions)&lt;/p&gt;  &lt;p&gt;The current CTP version and Version 1 will only be appropriate for the first two because there is no way to notify of changes to the cache (i.e. push notification) and there is no way to update the cache should the underlying data be changed (i.e. via SQL Dependency). The push notification and SQL dependency support will not be in Version 1 but is in the plan for Version 2 according to the Velocity team’s project manager (although no dates have been mentioned for Version 2). &lt;/p&gt;  &lt;p&gt;Fairly static data like a product catalog with a finite expiry date is perfect for Project Velocity as the distributed cache can make this data available for all servers in the farm as soon as it is populated by the first call (or pre-populated by a preparation call). &lt;/p&gt;  &lt;p&gt;The most compelling usage of Version 1 will be for session data. The usage of in-memory sessions to store data in between calls has decreased as the usage of web farms have increased, because the only way to make it work is for the sessions to be sticky, which diminishes the positive performance effects of a web farm as the user will be routed to the same server for all request within a session, regardless of the utilization of that server. A session provider has been included within Velocity enabling it to be used as an ASP.Net Cache provider, and thus enables the distribution of the ASP.Net session and its data across all the servers in the web farm. &lt;/p&gt;  &lt;p&gt;This certainly will reduce the number of calls to data sources as much session-oriented data can be persisted in memory, with high availability (as one machine going down will not result in the session data being lost) and no single point of failure.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Release Roadmap&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;CTP 2 - released fairly recently.&lt;/p&gt;  &lt;p&gt;CTP 3 – scheduled release end of 2008/early 2009 Q1. &lt;/p&gt;  &lt;p&gt;Version 1 – scheduled release is March 2009.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;For more information&lt;/strong&gt; including documentation and downloads see: &lt;a title="http://msdn.microsoft.com/en-us/data/cc655792.aspx" href="http://msdn.microsoft.com/en-us/data/cc655792.aspx"&gt;http://msdn.microsoft.com/en-us/data/cc655792.aspx&lt;/a&gt;&lt;/p&gt;
&lt;div id="SocialBookmarks"&gt;&lt;a href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx&amp;tags=&amp;title=Project+Velocity" mce_href="http://del.icio.us/post?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx&amp;tags=&amp;title=Project+Velocity"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/delicious.gif"&gt;Del.icio.us&amp;nbsp;&lt;/a&gt;&lt;a href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx&amp;title=Project+Velocity&amp;tags=" mce_href="http://digg.com/submit?phase=2&amp;url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx&amp;title=Project+Velocity&amp;tags="&gt;&lt;img border="0" src="/Themes/leanandgreen/images/digg.gif"&gt;Digg It&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx" mce_href="http://www.facebook.com/share.php?u=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/facebook.gif"&gt;Share on Facebook&amp;nbsp;&lt;/a&gt;&lt;a href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx&amp;title=Project+Velocity" mce_href="http://www.stumbleupon.com/submit?url=http%3a%2f%2fblogs.charteris.com%2fblogs%2fdavidmy%2farchive%2f2008%2f11%2f17%2fproject-velocity.aspx&amp;title=Project+Velocity"&gt;&lt;img border="0" src="/Themes/leanandgreen/images/stumble.gif"&gt;Stumble It!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.charteris.com/aggbug.aspx?PostID=718" width="1" height="1"&gt;</description></item></channel></rss>