<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-1276745691660543543</atom:id><lastBuildDate>Wed, 10 Mar 2010 21:51:25 +0000</lastBuildDate><title>Content and Code Blog</title><description></description><link>http://community.contentandcode.com/</link><managingEditor>noreply@blogger.com (Content and Code)</managingEditor><generator>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-2786809645126311923</guid><pubDate>Fri, 05 Mar 2010 20:45:00 +0000</pubDate><atom:updated>2010-03-05T20:45:02.832Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>SharePoint 2010 – Here we come!</title><description>&lt;em&gt;Glyn Clough, Solutions Consultant&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;We’ve just heard about the official launch date of Microsoft SharePoint 2010, along with the other Office 2010 applications. &lt;strong&gt;To businesses, SharePoint will be available from May 12, 2010&lt;/strong&gt;. To general consumers it will be available in June.&lt;br /&gt;&lt;br /&gt;We’ve been working with the new version of the SharePoint product since the Technical Preview stage through to the current Release Candidate stage and are fortunate enough to have been working on several fantastic Proof of Concept projects with some of our clients already. We’re delighted that we now have a firm date in the public domain so that we can plan with our clients how we are going to make the most out of this new release and see all the great new features in action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-2786809645126311923?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2010/03/sharepoint-2010-here-we-come.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-7542742818157450788</guid><pubDate>Tue, 19 Jan 2010 10:13:00 +0000</pubDate><atom:updated>2010-01-19T10:24:47.239Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>User Profiles</category><category domain='http://www.blogger.com/atom/ns#'>DNS</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>Identity</category><title>Hyphens in domain names get trimmed from account names in SharePoint 2010 User Profile Import</title><description>&lt;em&gt;Tristan Watkins, Infrastructure Consultant&lt;/em&gt; &lt;br /&gt;We've identified that the user profile import in the SharePoint 2010 public beta can't handle hyphens in domain names. The import will succeed but the portion of the domain name preceding the hyphen will get trimmed. When a user logs on a new profile is created but it is orphaned from the imported data. In principal we've been able to work around this by migrating the user profiles with STSADM (thanks to my colleague &lt;a href="http://www.martinhatch.com/" mce_href="http://www.martinhatch.com/" target="_blank" title="Martin Hatch"&gt;&lt;u&gt;&lt;span style="color: #0066cc;"&gt;Martin Hatch&lt;/span&gt;&lt;/u&gt;&lt;/a&gt; for the suggestion) but we haven't put this approach to the test over a sufficient period of time to be able to recommend it firmly yet. We also don't have a mechanism for triggering the update for newly-imported users but it shouldn't be rocket science to come up with a solution to that problem for the duration of the beta.&lt;br /&gt;&lt;br /&gt;Microsoft have confirmed this is a problem in the SharePoint 2010 public beta and that a fix will be included in the next release. Their response was on a closed beta forum, so I can't include that detail here, but this is my description from &lt;a href="http://social.technet.microsoft.com/Forums/en-GB/sharepoint2010setup/thread/520c3957-539f-4473-bfbb-ad5eae90f0c9?prof=required&amp;amp;ppud=4" mce_href="http://social.technet.microsoft.com/Forums/en-GB/sharepoint2010setup/thread/520c3957-539f-4473-bfbb-ad5eae90f0c9?prof=required&amp;amp;ppud=4" target="_blank" title="Hyphens in domain names get trimmed from account names in user profiles"&gt;&lt;u&gt;&lt;span style="color: #0066cc;"&gt;MSDN&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;:&lt;img alt="" class="mceWPmore mceItemNoResize" mce_src="http://tristanwatkins.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" src="http://tristanwatkins.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" title="More..." /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;We’ve been trying to launch an internal deployment of SharePoint 2010 MySites but we’ve run in to a problem with the user profile import. We’ve reviewed all of the relevant guidance and have been able to complete an import successfully, but all of the characters before a hyphen in our domain name are getting truncated from the imported username. To illustrate:&lt;br /&gt;&lt;strong&gt;PREFIX-BLAH\tristan.watkins&lt;/strong&gt; becomes &lt;strong&gt;BLAH\tristan.watkins&lt;/strong&gt; after it is imported. When I log in, a &lt;em&gt;new&lt;/em&gt; user profile is created for &lt;strong&gt;PREFIX-BLAH\tristan.watkins&lt;/strong&gt; and all of the imported profile data is useless, since it is associated with a non-existent &lt;strong&gt;BLAH\tristan.watkins&lt;/strong&gt;.&lt;br /&gt;I’m assuming this is an issue with the beta version of Forefront Identity Manager 2010 that shipped with SharePoint 2010 beta, but I can't find any information suggesting this is a known issue and for all I know it may actually be a SharePoint issue rather than a problem with FIM. For what it's worth, this was not a problem in SharePoint 2007.&lt;br /&gt;&lt;/blockquote&gt;We'll be putting this to the test ASAP whenever the next release is available. I'll update here if we find anything else out or if we find any similar problems in future.&lt;br /&gt;[Also &lt;a href="http://tristanwatkins.com/?p=836" target="_blank" title="Hyphens in domain names get trimmed from account names in SharePoint 2010 User Profile Import"&gt;posted&lt;/a&gt;&lt;u&gt;&lt;/u&gt; on Tristan's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-7542742818157450788?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2010/01/hyphens-in-domain-names-get-trimmed.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-4212442123972282008</guid><pubDate>Fri, 18 Dec 2009 16:43:00 +0000</pubDate><atom:updated>2009-12-18T16:45:33.734Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Security</category><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><title>Understanding SharePoint Application Security and Elevating Privileges</title><description>&lt;p&gt;&lt;em&gt;Martin Hatch, Solutions Architect&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This post was prompted because of a particularly challenging bit of security that I needed to traverse. I needed some way of presenting the status of a Content Deployment Job (configured in Central Administration) in the Web Application that it relates to. &lt;/p&gt;  &lt;p&gt;Seems pretty straight forward?    &lt;br /&gt;Well, its not, and this article will hopefully explain why. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;RunWithElevatedPrivileges and Application Pool Accounts&lt;/strong&gt;     &lt;br /&gt;So the first thing I looked at was using the good old &lt;font color="#ff0000"&gt;SPSecurity.RunWithElevatedPrivileges&lt;/font&gt; method. This is a well known (and on occasion heavily used) practice for getting around security in SharePoint. But does everyone understand exactly what it does? &lt;/p&gt;  &lt;p&gt;In a nut-shell, this method simply changes the currently impersonated user from the currently logged in user to an account called &amp;quot;SharePoint\System&amp;quot; (a.k.a. &amp;quot;System Account&amp;quot;). &lt;/p&gt;  &lt;p&gt;This account doesn't actually exist, and anyone inspecting the WindowsIdentity or SPUser object in any great detail will spot that this account doesn't actually have a valid SID (Security Identifier). This is because it represents a placeholder.. a flag in SharePoint that tells it to &lt;strong&gt;impersonate the Application Pool Account&lt;/strong&gt; instead of the currently logged in user. &lt;/p&gt;  &lt;p&gt;The Application Pool Account has full SharePoint permissions to the Web Application (effectively making it a Site Collection Administrator in every single Site Collection). &lt;/p&gt;  &lt;p&gt;So what does this actually mean? &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SQL Server Permissions&lt;/strong&gt;     &lt;br /&gt;Believe it or not, SQL Server permissions in SharePoint are extremely simple. &lt;/p&gt;  &lt;p&gt;Taking the 3 core databases for each SharePoint Farm: &lt;/p&gt;  &lt;p&gt;&lt;u&gt;1. Farm Configuration Database &lt;/u&gt;    &lt;br /&gt;This contains the core configuration information (servers, URLs, accounts) for the entire SharePoint Farm. &lt;/p&gt;  &lt;p&gt;The &lt;em&gt;Setup Account &lt;/em&gt;has &lt;em&gt;DBOwner &lt;/em&gt;permissions.     &lt;br /&gt;All application pools accounts are added to a Database Role called &lt;em&gt;WSS_Content_Application_Pools&lt;/em&gt; which has severely locked down read privileges. &lt;/p&gt;  &lt;p&gt;&lt;u&gt;2. Central Administration Content Database &lt;/u&gt;    &lt;br /&gt;This is effectively the content database for the Central Administration site. This contains the SPSite / SPWeb / SPList objects that store all of the content related settings (including Content Deployment Jobs). &lt;/p&gt;  &lt;p&gt;Again, the &lt;em&gt;Setup Account &lt;/em&gt;(which incidentally will be running the Central Administration Application Pool!) has &lt;em&gt;DBOwner &lt;/em&gt;permissions. &lt;/p&gt;  &lt;p&gt;All application pools accounts are added to a Database Role called WSS_Content_Application_Pools which has severely locked down read privileges. &lt;/p&gt;  &lt;p&gt;&lt;u&gt;3. Web Application Content Database      &lt;br /&gt;&lt;/u&gt;This is the database (or multiple databases) that contain the Site Collection content for the Web Application. &lt;/p&gt;  &lt;p&gt;Here the Application Pool Account (for that specific Web Application) is granted &lt;em&gt;DBOwner&lt;/em&gt; permissions. No other accounts are specified! &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;That is pretty much it. From a security (and &amp;quot;least privileged&amp;quot; perspective) it's a very robust setup. If your application pool is compromised then the application pool account only has SQL permissions to it's own content database. &lt;/p&gt;  &lt;p&gt;According to best practice, every Web Application should have it's own application pool &lt;strong&gt;account&lt;/strong&gt;, which again makes sense according to the model above, limiting the surface area for any attack (as one web application being compromised would not have any impact on the other application pools). &lt;/p&gt;  &lt;p&gt;This should also make it obvious why you should&lt;strong&gt; never make an Application Pool Account a Local or Farm Administrator!&lt;/strong&gt; You are essentially breaking the security model if you do this (and massively widening the exposed area of your system if that account is ever exposed!). &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NTLM authentication and &amp;quot;Double Hop&amp;quot; &lt;/strong&gt;    &lt;br /&gt;The first thing that should scream at you here is that none of the SharePoint user accounts have ANY permissions in SQL. Every single SQL query is executed within a SharePoint Web Application using the Application Pool account! &lt;/p&gt;  &lt;p&gt;The reason for this is clear once you understand the limitations of NTLM authentication. &lt;/p&gt;  &lt;p&gt;Basically, when you log in to a SharePoint web site, you authenticate with the Web Server (IIS). There is no way for IIS to pass through credentials back to SQL Server because NTLM only supports &amp;quot;single hop&amp;quot; authentication (i.e. from one single machine - the browser - to another machine - the web server). For &amp;quot;double-hop&amp;quot; you need a more robust authentication method such as Kerberos (i.e. from one machine - the browser - hop to another machine - the web server - hop a second time to a third machine - the database server?). &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note - This is why you need Kerberos to use pass-through authentication with 3rd party systems (such as CRM or other LOB systems).&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;That’s all great .. but what do I care?      &lt;br /&gt;&lt;/strong&gt;Well, this all nails down to where the object is that you are trying to access, what the SQL permissions are on that object. &lt;/p&gt;  &lt;p&gt;Lets take the example of accessing a Content Deployment Job. &lt;/p&gt;  &lt;p&gt;The first problem you will hit is that your account needs to be a Farm Administrator. We already know that making the Application Pool an admin account is bad for security. &lt;/p&gt;  &lt;p&gt;So as an alternative you could use &lt;strong&gt;ASP.Net Impersonation&lt;/strong&gt; to get around the SharePoint API, but as we discussed above, this &lt;strong&gt;doesn't solve the NTLM &amp;quot;single-hop&amp;quot; problem&lt;/strong&gt; (your query is still going to execute in SQL using the Application Pool account, regardless of which account you are impersonating!) &lt;/p&gt;  &lt;p&gt;Using .Net Reflector (tsk!) tells us that the Content Deployment Job information is stored in an SPList in the Central Administration Content Database. Using RunWithElevatedPrivileges simply executes using the Application Pool account (which we know from the SQL Permissions above, has very limited permissions). &lt;/p&gt;  &lt;p&gt;So lets &lt;strong&gt;assume you tried to use Impersonation ... what happens?&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Well, you get a nasty &amp;quot;Exception in HRESULT&amp;quot; error message.    &lt;br /&gt;Delving in to the SharePoint Diagnostics Logs tells something like &amp;quot; &lt;em&gt;does not have EXECUTE permissions on 'proc_EnumLists' in &amp;quot;.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;Basically running that code tries to execute a Stored Procedure in SQL in the Central Admin database which the Application Pool Account doesn't have access to! Your code managed to fool the SharePoint API into thinking you have permissions, but good old SQL Server stops you short (just as it should ... good server!) &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So what can I do? &lt;/strong&gt;    &lt;br /&gt;Well, the first thing to note is that you won't always run into this problem.     &lt;br /&gt;Many of the Farm level options (including access SSP and User Profile properties) can be gotten around in other ways, but when something like the above happens, your options are limited to 3 potential solutions: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Ignore all of the best practice. Make your application pool account an administrator, and spend your days hiding from the network security admins and hoping it doesn't all go wrong. &lt;/li&gt;    &lt;li&gt;Create a dedicated Web Service, which executes as an admin account. Use this to farm out your &amp;quot;privileged&amp;quot; code, and make sure you lock it down tight as a drum so you can't get to it from outside of the SharePoint farm! &lt;/li&gt;    &lt;li&gt;Don't do it .. and tell your users that it was a stupid idea in the first place!      &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now I admit, Options 1 and 3 probably won't go down too well, and Option 2 is the best option but still has it's issues (running a Web Service as an admin account is still a security risk, if a smaller one than running the entire public facing Application Pool as an admin account!) &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;     &lt;br /&gt;We ended up opting for Option 2, admittedly locking it down so that the URL was never published and it would only accept connections from other servers in the farm (so that end users could never access it). &lt;/p&gt;  &lt;p&gt;Hopefully you now have a better grasp of SharePoint Application Security, what that super-method &amp;quot;&lt;em&gt;SPSecurity.RunWithElevatedPrivileges&lt;/em&gt;&amp;quot; is actually doing and why it doesn't always work! &lt;/p&gt;  &lt;p&gt;Comments and feedback welcome! :)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[Also &lt;a href="http://www.martinhatch.com/2009/12/understanding-sharepoint-application.html"&gt;posted&lt;/a&gt; on Martin’s personal blog]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-4212442123972282008?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/12/understanding-sharepoint-application.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-4455257143771809602</guid><pubDate>Wed, 02 Dec 2009 22:17:00 +0000</pubDate><atom:updated>2009-12-02T22:29:08.588Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>Windows Server 2008 R2</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><category domain='http://www.blogger.com/atom/ns#'>Hyper-V</category><title>Building a SharePoint 2007/2010 development environment - Part VI: Issues and Results</title><description>&lt;i&gt;Tristan Watkins, Infrastructure Consultant&lt;/i&gt; &lt;br /&gt;In the first five parts of this series I covered &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010.html" title="Building a SharePoint 2007/2010 development environment - Part I:  Introduction and Objectives"&gt;the project objectives&lt;/a&gt; and &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_05.html" title="Building a SharePoint 2007/2010 development environment - Part II: Design"&gt;the system design&lt;/a&gt;, then turned my attention to the &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_09.html" title="Building a SharePoint 2007/2010 development environment - Part III: Host image build and performance benchmarks"&gt;Hyper-V host image build&lt;/a&gt;, &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_25.html" title="Building a SharePoint 2007/2010 development environment - Part IV: Automated deployment"&gt;automated deployment&lt;/a&gt; and the &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_27.html" title="Building a SharePoint 2007/2010 development environment – Part V: Guest Build"&gt;guest virtual machine build&lt;/a&gt;. In this post I review some of the questions and issues we've encountered after a few months of working this way and some overall reflections on the approach. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;h2&gt;Issues&lt;/h2&gt;&lt;h3&gt;Guest user accounts&lt;/h3&gt;Guest virtual machines have been configured in a workgroup in order to conserve resources that would be spent on domain services. Additionally, developing on a domain controller is less than ideal for a number of reasons including performance tuning, administrative complexity, start-up times and security.&lt;br /&gt;&lt;br /&gt;I created the development virtual machine with 160 local user accounts that have been logged on to the portal and the MySite application in order to create a basic profile. If there is a need to script creation of local user accounts, the &lt;b&gt;net user&lt;/b&gt; command will be useful. However, this will be of limited assistance for complex profile requirements, since there is no way to synchronise with a directory and since the local users have no associated profile data, but it may be helpful for testing or demonstration.&lt;br /&gt;&lt;br /&gt;If LDAP user accounts or other directory objects are required for development purposes (user profiles for instance), consider using &lt;i&gt;Active Directory Lightweight Directory Services&lt;/i&gt;. This is the successor to &lt;i&gt;Active Directory Application Mode (ADAM)&lt;/i&gt; in Windows Server 2003. It is a Windows LDAP directory that supports user and group objects without a full-blown domain infrastructure.&lt;br /&gt;There will be some scenarios when a full domain services infrastructure is required for development. In those cases it may be preferable to run a second virtual machine as a domain controller.&lt;br /&gt;&lt;h3&gt;Hibernate and Sleep&lt;/h3&gt;Hibernate and Sleep are disabled automatically when Hyper-V is installed. This is by design. Hyper-V disables this functionality, as the guest virtual machines could be damaged by a Hibernate or Sleep operation in the host if they were not saved gracefully. If, on the other hand, all virtual machines had to be put in to a saved state before a host machine could be put to sleep or hibernated, this would mean extending the wait time for these operations to unacceptable levels, as they are also automatically triggered by low battery warnings. Unfortunately we need to live with this behaviour.&lt;br /&gt;&lt;h4&gt;Do not travel with a running laptop&lt;/h4&gt;Putting a running laptop in a bag will cause it to overheat quickly and is likely to damage hardware.&lt;br /&gt;&lt;h4&gt;Improvements to Start-up and Shutdown times&lt;/h4&gt;These builds should start up and shut down in less than two minutes (closer to 90 seconds). Keep in mind that virtual machines can be safely saved and work can be resumed quickly when the machine is restarted. Since all of the development work will be taking place inside the virtual machine, this should reduce the Hibernate/Sleep annoyance.&lt;br /&gt;&lt;h3&gt;Virtual PC won’t run on Windows Server 2008 R2&lt;/h3&gt;Windows Virtual PC will not work on Windows Server 2008 R2, as it was designed specifically for Windows 7. Earlier versions of Virtual PC may install on Windows Server 2008 R2, but they will not co-exist with Hyper-V, so do not install them.&lt;br /&gt;&lt;h3&gt;Hyper-V role won’t work after SysPrep&lt;/h3&gt;This shouldn’t be an issue, as we have set up automated deployment, but it’s worth noting that this is &lt;a href="http://blogs.msdn.com/mikekol/archive/2008/03/25/hyper-v-installation-tricks-part-1-sysprep-and-hyper-v.aspx" target="_blank" title="Hyper-V Installation Tricks - Part 1: Sysprep and Hyper-V"&gt;a known issue&lt;/a&gt;. There are time-consuming work-arounds to fix some of the problems that this will cause, but they are best considered as a last resort.&lt;br /&gt;&lt;h3&gt;Colour management&lt;/h3&gt;Colours are limited to 16-bit in Hyper-V guests. If a fuller spectrum is required, it should be possible to test in full colour in a browser on the host.&lt;br /&gt;&lt;h3&gt;Resolving host names from an internal domain&lt;/h3&gt;During our pilot we identified that fully-qualified domain names resolved successfully but host names would not resolve without the full domain name. To satisfy this requirement we have added our internal DNS suffixes to the ICS Connection inside the development virtual machine.&lt;br /&gt;&lt;h4&gt;Manually adding DNS suffixes&lt;/h4&gt;If a network adapter in a guest virtual machine loses these settings by deletion/re-creation of the adapter, or for some other reason, the setting can be re-entered as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to the IPv4 properties on the ICS Connection and select Advanced. &lt;/li&gt;&lt;li&gt;On the DNS tab select the &lt;i&gt;Append these DNS suffixes (in order)&lt;/i&gt; radio button.       &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add &lt;i&gt;internal.domainname.local&lt;/i&gt; and &lt;i&gt;other.domainname.com.&lt;/i&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Un-tick the DNS registration box. &lt;/li&gt;&lt;li&gt;Select OK, OK and Close. &lt;/li&gt;&lt;li&gt;Make sure that this change is captured in all snapshots as necessary. &lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Internet Explorer (64-bit version)&lt;/h3&gt;Adobe flash player does not currently support 64-bit browsers. You'll have to use the 32-bit IE or another browser if you want to view flash files. We recommend using the 32-bit version by default.&lt;br /&gt;&lt;h3&gt;Hyper-V Manager UAC prompt work-around&lt;/h3&gt;If the UAC prompt on Hyper-V Manager is annoying, try launching Server Manager and navigating to Hyper-V in the Roles node. This has the added benefit of exposing the Hyper-V event log messages and service states in that top Hyper-V node. These are not visible in Hyper-V Manager. Awareness of these messages and the service statuses will help to resolve Hyper-V issues faster.&lt;br /&gt;&lt;h3&gt;Test DVD burning&lt;/h3&gt;In our pilot we identified that the DVD burner drivers don’t work &lt;i&gt;for burning&lt;/i&gt; in Windows Server 2008 R2 on a Dell XPS M1330. This was also true on a Lenovo laptop. Chipset updates, driver updates and a Microsoft KB registry hack all failed to make a difference. The Matshita (Panasonic subsidiary) site does not support the products directly (they point to the laptop manufacturer). Dell and Lenovo had not released new drivers when we launched. As DVD burning has changed in Windows Server 2008 R2 this may have a wider impact.&lt;br /&gt;&lt;h3&gt;Bluetooth doesn’t work&lt;/h3&gt;The Bluetooth stack is missing from Windows Server 2008 and Windows Server 2008 R2. In Windows Server 2008 there were fairly elaborate means of porting the stack from Vista, but results appear to be spotty at best.&lt;br /&gt;&lt;h3&gt;WorkItemTypeDeniedOrNotExistException when trying to open work items&lt;/h3&gt;This error occurred in the first release of our guest build because I installed Visual Studio 2008 SP1 before the Team Foundation Client (TFC), so the TFC did not get upgraded. The fix is to un/re-install Visual Studio 2008 SP1, or to make sure that the TFC is installed before Visual Studio 2008 SP1.&lt;br /&gt;&lt;h3&gt;NUMA nodes and RAM allocation&lt;/h3&gt;It is important to not exceed NUMA node limits when assigning RAM to virtual machines, although this will not apply to many laptops, as most will have an SMP architecture. It is beyond the scope of this post to go in to NUMA nodes in great detail (and in truth, my understanding of it does not reach beyond a few hours of research), but the limits in your environment should be understood so that performance does not suffer. As a starting point it's worth confirming the type of CPU architecture and looking at this in more detail if it is NUMA. The &lt;a href="http://technet.microsoft.com/en-us/library/dd277865.aspx"&gt;performance and capacity requirements for Hyper-V&lt;/a&gt; document on TechNet explains this well:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Configure the correct amount of memory for Hyper-V guests.&lt;/b&gt; During the testing, no change had a greater impact on performance than modifying the amount of RAM allocated to an individual Hyper-V image. Because memory configuration is hardware-specific, you need to test and optimize memory configuration for the hardware you use for Hyper-V.&lt;br /&gt;&lt;br /&gt;The initial goal of the testing was to make the Hyper-V image as similar as possible to the physical hardware image against which it was being compared. Based on that goal, the Hyper-V images were originally allocated 32 gigabytes (GB) of RAM, which was the same amount of RAM as was on the physical servers being tested. However, the initial test results showed that with that configuration, the Hyper-V images could sustain a load that was only about 70 percent of the load on the physical hardware. After investigating the Event Viewer on the Hyper-V host machine in the Windows Server 2008&amp;nbsp; &lt;b&gt;Custom Views&lt;/b&gt;, &lt;b&gt;Server Roles&lt;/b&gt;, &lt;b&gt;Hyper-V Events&lt;/b&gt;, it was discovered that the RAM for the Hyper-V images was being spread across multiple non-uniform memory access NUMA nodes. This information confirmed that performance declined when memory was allocated across nodes. After trying different configurations it was determined that for the hardware being used, 8 GB of RAM was the maximum that could be allocated to a Hyper-V image without crossing NUMA nodes.&lt;br /&gt;&lt;/blockquote&gt;To reiterate, this means that in Microsoft's tests, Hyper-V performed &lt;b&gt;significantly worse&lt;/b&gt; with 32GB allocated to a virtual machine than it did with an 8GB allocation. The exact size of the NUMA node boundary will vary by vendor, so make certain to gain an understanding of the number of nodes in your system. Divide the total RAM by the number of nodes in order to find the memory limits of a virtual machine. This does not mean that additional virtual machines can’t be run beyond a NUMA node boundary, if there is sufficient RAM available. The node boundary is the limit of optimal process performance. Beyond this limit, the virtual machine will suffer from degraded performance because it needs to use memory from an alocal address space.&lt;br /&gt;&lt;br /&gt;However, &lt;b&gt;NUMA isn't the only thing to worry about&lt;/b&gt; when finding an optimal RAM allocation. Based on test results during our pilot we could push our virtual machines to up to 2250MB RAM, depending on the amount of activity in the host. In some cases it may be possible to get up to 2500MB RAM for a virtual machine on a 4GB RAM system, but this was not consistently achievable in our tests. If it’s necessary to achieve that, the virtual machines should be started up soon after booting and before any major client application activity is started on the host machine. Client application activity should be kept to a minimum when allocating this much RAM to virtual machines. We also found that host performance was often reduced to an intolerable level whenever there was less than 2GB RAM available to the host for an extended period of time. 1.75GB RAM may be achievable, but this should be tested extensively for your needs.&lt;br /&gt;Additionally, saving a virtual machine's state becomes risky when there is less than 2GB available to the host, as the machine will not resume from the saved state if there is insufficient resource available to it.&lt;br /&gt;&lt;h3&gt;Periodic but routine loss of connectivity on the host machine&lt;/h3&gt;As I've been tracking here, we've documented repeat problems with periodic (but routine) loss of connectivity on the host machine. This is still an open issue. More info here:&lt;br /&gt;&lt;a href="http://tristanwatkins.com/?p=115" target="_self" title="Routine loss of connectivity on a Hyper-V host’s external connection"&gt;Routine loss of connectivity on a Hyper-V host’s external connection&lt;/a&gt;&lt;a href="http://tristanwatkins.com/?p=492" target="_self" title="More on routine loss of external network connectivity on Hyper-V hosts (not guests)"&gt;      &lt;br /&gt;More on routine loss of external network connectivity on Hyper-V hosts (not guests)&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;Hyper-V performance suffers during graphics-intensive operations&lt;/h3&gt;This has been covered by &lt;a href="http://blogs.msdn.com/Virtual_PC_Guy/" target="_blank" title="Virtual PC Guy"&gt;Ben Armstrong&lt;/a&gt; in considerable detail and I'm continuing to track it:     &lt;br /&gt;&lt;a href="http://tristanwatkins.com/?p=203" target="_self" title="Hyper-V graphics performance and SharePoint 2010 development"&gt;Hyper-V graphics performance and SharePoint 2010 development&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://tristanwatkins.com/?p=247" target="_self" title="Hyper-V graphics performance is on the way… if you need a new laptop"&gt;Hyper-V graphics performance is on the way… if you need a new laptop&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://tristanwatkins.com/?p=717" target="_self" title="The definitive word on Hyper-V high-end graphics performance"&gt;The definitive word on Hyper-V high-end graphics performance&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;Aero Glass&lt;/h3&gt;Unfortunately, due to the graphics performance issues in Hyper-V mentioned above, there is a significant graphics performance hit when using Aero Glass. This does not slow down overall systems performance, but graphics-heavy operations will suffer in most Hyper-V environments. To this end, we do not recommend installing Aero Glass, but if you want to put it to the test feel free.&lt;br /&gt;&lt;h4&gt;How to enable Aero Glass&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Make sure the Desktop Experience is activated      &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On the Dell XPS M1330, make sure BIOS A14 or later is installed          &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Confirm the latest NVIDIA drivers for Windows 7 x64 are installed &lt;/li&gt;&lt;li&gt;Turn on the Desktop Window Manager Session Manager service and switch to automatic start &lt;/li&gt;&lt;li&gt;Turn on the Themes service and switch to automatic start &lt;/li&gt;&lt;li&gt;Switch to an Aero theme &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Sidebar&lt;/h3&gt;It is also possible to add the Windows 7 Sidebar to the host dekstop. We haven't tested this extensively enough to provide documentation on the best approach, but we have done it successfully. If there is sufficient interest in this technique I will add a follow-up post in future.&lt;br /&gt;&lt;h3&gt;Storage&lt;/h3&gt;Be prepared for snapshots to increase the local storage requirements considerably. Some of our developers are legitimately struggling to work on three projects concurrently with 300GB local storage. One option we are considering is eSATA over PCMCIA as a means of increasing total spindle speed and storage but we have yet to begin testing this approach. We are specifically interested in eSATA since Hyper-V does not support system VHDs on USB. If we pursue this option I'll post the results.&lt;br /&gt;&lt;h2&gt;Results&lt;/h2&gt;&lt;h3&gt;Putting things in perspective&lt;/h3&gt;It's worth repeating that we're asking this system to do many things it was not intended to do. It is a server operating system with an enterprise virtualisation technology. The Microsoft virtualisation team will tell you that Hyper-V was not designed with developers in mind. &lt;a href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/08/21/hyper-v-versus-desktop-computing.aspx#9880925" target="_blank" title="Hyper-V versus Desktop Computing"&gt;To quote Ben Armstrong&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;As is being discussed at length here - Hyper-V does not play well with high-end video cards (which are far more common on desktops than servers).&amp;nbsp; Hyper-V also disables sleep and hibernate, as well as increasing the power utilization of the computer.&amp;nbsp; All of these things would need to be addressed before we could even consider putting Hyper-V in a desktop product.&lt;br /&gt;&lt;/blockquote&gt;In short, we bent this system to development needs because of the strength of the technology, despite these imperfections. There are fundamental compromises that can't be avoided when using a server operating system as a mobile workstation but we believe that we can deliver SharePoint projects as a team better with this technology than without it.&lt;br /&gt;&lt;h3&gt;Hardware&lt;/h3&gt;Whether laptops are the ultimate hardware solution is a different can of worms, which I've chosen to avoid in this series of posts. I've tailored the approach to laptops since that is what we have and the approach can be ported to workstations or shared virtual infrastructure.&lt;br /&gt;&lt;h3&gt;The developer experience and the bottom line&lt;/h3&gt;There's no question that using snapshots, import and export in Hyper-V adds a complex tier to the development experience and there will be a learning curve for those who are less familiar with virtualisation or don't use the advanced features often. However, we have achieved an immediate and measurable gain in stability and environment consistency through the use of standard builds, snapshots and exported project-defined environments.&lt;br /&gt;&lt;br /&gt;Conversely, it's worth keeping in mind that as desirable as standardisation is, there are times when it hinders more than it helps and on those occasions a non-standard build may be more appropriate. Considering alternative builds is a much less cumbersome proposition with&amp;nbsp; the combination of WDS, Shrink Volume and Dual-booted systems or the new Native boot from VHD. The key consideration to keep in mind is that most other approaches will entail a sacrifice of what I lump together as the "management benefits" of Hyper-V (snapshot, import and export). For instance, you may consider allowing a team to develop on native operating systems for a project, but then a team member may lose a day if they need to rebuild their system, or the support team may need two days to build an environment in Hyper-V later on, or a team member may need to split her time with a team who use Hyper-V for their project, or the original project may fork. Memories of project difficulties gone-by come flooding back. While it's always worth considering options, if you spend time identifying a standard approach for your business, it's probably best to stick with it unless there's a truly compelling reason not to.&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://tristanwatkins.com/?p=509" title="Building a SharePoint 2007/2010 development environment – Part VI: Issues and Results"&gt;posted&lt;/a&gt;&lt;u&gt;&lt;/u&gt; on Tristan's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-4455257143771809602?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/12/building-sharepoint-20072010.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-5087866159663101147</guid><pubDate>Fri, 27 Nov 2009 01:31:00 +0000</pubDate><atom:updated>2009-11-28T10:06:32.741Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>Windows Server 2008 R2</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><category domain='http://www.blogger.com/atom/ns#'>Hyper-V</category><title>Building a SharePoint 2007/2010 development environment - Part V: Guest Build</title><description>&lt;em&gt;Tristan Watkins, Infrastructure Consultant&lt;/em&gt; &lt;br /&gt;In the first four parts of this series I covered &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010.html"&gt;the project objectives&lt;/a&gt; and &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_05.html"&gt;the system design&lt;/a&gt;, then turned my attention to the &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_09.html"&gt;Hyper-V host image build&lt;/a&gt; and &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_25.html" target="_self" title="Building a SharePoint 2007/2010 development environment - Part IV: Automated deployment"&gt;automated deployment&lt;/a&gt;. In this post I describe a SharePoint 2007 virtual machine build.&lt;br /&gt;&lt;h2&gt;Where’s the SharePoint 2010 build?&lt;/h2&gt;In short, we're working on it. I've produced a new SharePoint 2010 beta virtual machine for this environment but we're not yet ready to publish build guidance. Stay tuned. Additionally...&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;SharePoint 2010 memory requirements&lt;/h3&gt;We have validated this environment for use with SharePoint 2010 virtual machines, but performance will be inadequate for development unless 4GB RAM can be dedicated to the SharePoint 2010 VM. It will run with 2GB but it will be too slow to do anything beyond lightweight demonstration. Also, be sure to check if your system has a NUMA CPU architecture. If it does, only allocate memory within NUMA node boundaries, as performance degrades when accessing memory from alocal nodes. See the&lt;a href="http://technet.microsoft.com/en-us/library/dd277865.aspx#section2" target="_blank" title="Performance and capacity requirements for Hyper-V"&gt; performance and capacity requirements for virtualising SharePoint&lt;/a&gt; guidance for an introduction to the issue, but be aware&amp;nbsp; that NUMA architecture is less common in laptops so it may not be an issue.&lt;br /&gt;&lt;h2&gt;Virtual networking recap&lt;/h2&gt;As explained in part two of this series, we have created&amp;nbsp; three virtual networks on the Hyper-V host, although this development virtual machine will only have two network adapters. The first will be "plugged in" to the &lt;i&gt;Hyper-V ICS Network&lt;/i&gt;. The second is "plugged in" to the &lt;i&gt;Hyper-V Internal Network&lt;/i&gt;. We plug the &lt;i&gt;Hyper-V External Network&lt;/i&gt; in for testing purposes only. For more information about how I've designed these networks please refer to &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_05.html" target="_self" title="Building a SharePoint 2007/2010 development environment - Part II: Design"&gt;the design post&lt;/a&gt;.&lt;br /&gt;&lt;h3&gt;Working with virtual networks&lt;/h3&gt;The guest virtual machine's "ICS Network connection" will receive the host’s LAN or VPN connectivity (and an IP address via DHCP) from the host's adapter on the &lt;i&gt;Hyper-V ICS Network. &lt;/i&gt;The second adapter is “always on”, in that communication between the host and the guest will be completely separated from the host's provision of ICS to the guest. This second adapter has a fixed IP address on a network that's dedicated to providing communication between guest VMs and a resilient, permanent connection in the host. This enables:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Persistent network sharing. &lt;/li&gt;&lt;li&gt;RDP connections to guest VMs. &lt;/li&gt;&lt;li&gt;HOSTS file entries and BackConnectionHostNames security. &lt;/li&gt;&lt;li&gt;Multiple IP addresses on static adapters in guests, for multiple sites with SSL, etc. &lt;/li&gt;&lt;/ul&gt;Static IP address allocation on the ICS connection in the guest is not a supported configuration and results in instability.&lt;br /&gt;&lt;h2&gt;System Build&lt;/h2&gt;&lt;h3&gt;Installation&lt;/h3&gt;Create a new virtual machine in the location of your choice. After the virtual machine has been created, modify these settings:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Assign multiple processors to the virtual machine (for most laptops you will want to assign all of them). &lt;/li&gt;&lt;li&gt;Assign sufficient RAM, leaving at least 2GB RAM for the host machine (1.75GB bare minimum - host performance is too slow with only 1.5GB available). &lt;/li&gt;&lt;li&gt;Connect the Hyper-V ICS Internal Network to the first NIC. &lt;/li&gt;&lt;li&gt;Connect the Hyper-V Internal Network to the second NIC. &lt;/li&gt;&lt;li&gt;Point the DVD drive at an ISO file or installation media for Windows Server 2008.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's also possible to network-boot, following a similar approach to the host deployment from WDS. To network-boot a Hyper-V machine, add a legacy network adapter (it must be legacy) and modify the BIOS settings to boot from the network. &lt;/li&gt;&lt;li&gt;We could have installed Windows Server 2008 R2 as we did on the host, but at the time of our pilot it was still only in Release Candidate, so we opted to stick with a tested OS in order to compare the development experience with our current environments. I built our SharePoint 2010 Technical Preview and Beta environments on Windows Server 2008 R2 RTM without problem. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Turn on the virtual machine and install Windows Server 2008 Standard. On completion, log in for the first time, insert Hyper-V Integration Services from the Virtual Machine Connection's Action menu and reboot when prompted.&lt;br /&gt;&lt;h3&gt;Initial configuration&lt;/h3&gt;These steps establish basic connectivity and improve usability:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Log in to the new virtual machine and enable remote desktop connections using any version (in order to support older versions of Royal TS). If all versions of Remote Desktop are current then select the secure option. &lt;/li&gt;&lt;li&gt;Test that the ICS connection is able to retrieve an IP address and that the connection is receiving connectivity from the host machine. If there are any problems connecting to the LAN or web, make sure that the connection is shared in the host and that the ICS connection in the guest is on DHCP. Also check the firewall settings. No settings should need to be modified but make updates if necessary.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Temporarily plug the Hyper-V External network in to this adapter for testing if needed. This is a good way of identifying if a problem relates to ICS itself or if it's a guest firewall issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Add DNS suffixes to the ICS connection if you want to be able to resolve host names on your LAN (without having to use the fully-qualified domain name). ICS will not pass through primary or connection specific DNS suffixes.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to the ICS Connection’s IPv4 properties. &lt;/li&gt;&lt;li&gt;Select Advanced. &lt;/li&gt;&lt;li&gt;On the DNS tab select the &lt;i&gt;Append these DNS suffixes (in order)&lt;/i&gt; radio button. &lt;/li&gt;&lt;li&gt;Add domain suffixes for any named resources that should be resolved using host headers.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Configure IP settings on the Internal Connection in the guest.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configure IP addresses as 192.168.200.100. &lt;/li&gt;&lt;li&gt;Set the Subnet Mask as 255.255.255.0. &lt;/li&gt;&lt;li&gt;A default gateway and DNS settings are not necessary.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Remove IPv6 from all connections in the host and guest. See &lt;a href="http://tristanwatkins.com/?p=187" target="_self" title="Conflicting guidance on IPv6"&gt;earlier guidance&lt;/a&gt; for more information. &lt;/li&gt;&lt;li&gt;Give all adapters sensible names.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I chose "ICS Connection" and "Internal Connection".&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Test browsing to &lt;b&gt;\\192.168.200.1&lt;/b&gt; to test connectivity over the Internal network. &lt;/li&gt;&lt;li&gt;Optionally, turn off IE Enhanced Security Configuration (ESC) for administrators. &lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Patching&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Apply Windows Server 2008 SP2.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reboot.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Patch current.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reboot if prompted and patch again if patches are available. Reboot again if needed and repeat until current.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Shutdown and snapshot&lt;/h3&gt;Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “Windows installation and patching complete”. You will be able to roll back to this state if you have problems with the Windows configuration.&lt;br /&gt;&lt;h3&gt;Adding Prerequisites&lt;/h3&gt;&lt;h4&gt;Adding Web Server (IIS) role&lt;/h4&gt;Start up the virtual machine and add these Windows Role services:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Web Server        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Common HTTP Features            &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Static Content &lt;/li&gt;&lt;li&gt;Default Document &lt;/li&gt;&lt;li&gt;Directory Browsing &lt;/li&gt;&lt;li&gt;HTTP Errors &lt;/li&gt;&lt;li&gt;HTTP Redirection&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Application Development           &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ASP.NET &lt;/li&gt;&lt;li&gt;.NET Extensibility &lt;/li&gt;&lt;li&gt;ISAPI Extensions &lt;/li&gt;&lt;li&gt;ISAPI Filters&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Health and Diagnostics           &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Logging Tools&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Security           &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Basic Authentication &lt;/li&gt;&lt;li&gt;Windows Authentication &lt;/li&gt;&lt;li&gt;Request Filtering&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Performance           &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Static Content Compression &lt;/li&gt;&lt;li&gt;Dynamic Content Compression&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Management Tools        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IIS Management Console &lt;/li&gt;&lt;li&gt;IIS Management Scripts and Tools &lt;/li&gt;&lt;li&gt;Management Service&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Windows Process Activation Service        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Process Model &lt;/li&gt;&lt;li&gt;.NET Environment &lt;/li&gt;&lt;li&gt;Configuration APIs&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Adding Features&lt;/h4&gt;Add these Windows Features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Desktop Experience &lt;/li&gt;&lt;li&gt;Optional: Windows System Resource Manager (and Windows Internal Database) &lt;/li&gt;&lt;/ul&gt;Installation of the Desktop Experience will prompt for reboot. It is not necessary to do so immediately. Note that when the reboot happens, Windows will restart a few times. This is a normal part of the Feature configuration.&lt;br /&gt;&lt;h4&gt;Additional preparation&lt;/h4&gt;&lt;h5&gt;HOSTS file entries&lt;/h5&gt;Created the following HOSTS file entries for the web applications:&lt;br /&gt;&lt;div style="padding-left: 30px;"&gt;192.168.200.100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSPAdmin&lt;br /&gt;&lt;/div&gt;&lt;div style="padding-left: 30px;"&gt;192.168.200.100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MySite&lt;br /&gt;&lt;/div&gt;&lt;div style="padding-left: 30px;"&gt;192.168.200.100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Portal&lt;br /&gt;&lt;/div&gt;&lt;h5&gt;DisableLoopbackCheck or BackConnectionHostNames updates&lt;/h5&gt;Either disable the Loopback Check or add &lt;a href="http://tristanwatkins.com/?p=293"&gt;BackConnectionHostNames&lt;/a&gt; entries. Since ICS prevents inbound connectivity to these virtual machines we feel comfortable disabling the loopback check, as this would be a considerable annoyance to developers otherwise. For unisolated systems I would always recommend putting the &lt;i&gt;BackConnectionHostNames&lt;/i&gt; entries in place. Spencer Harbar has summarised the &lt;a href="http://www.harbar.net/archive/2009/07/02/disableloopbackcheck-amp-sharepoint-what-every-admin-and-developer-should-know.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.harbar.net');" target="_blank" title="Harbar.net"&gt;&lt;span style="color: blue;"&gt;background information&lt;/span&gt;&lt;/a&gt; best.&lt;br /&gt;To disable the Loopback Check, add a new DWORD &lt;i&gt;DisableLoopbackCheck&lt;/i&gt; value “1” to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa&lt;br /&gt;&lt;h5&gt;Creating the Source repository in the host and sharing to guests&lt;/h5&gt;To understand these steps it is worth reviewing the &lt;i&gt;Local source code storage on the host machine&lt;/i&gt; section of &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_05.html"&gt;the design post&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a new user account in the guest machine called &lt;b&gt;SourceShare&lt;/b&gt;, with same password as the account that was created by the WAIK unattend file in &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_25.html"&gt;part four of this series&lt;/a&gt;. This password should be strong, as the share will be visible to authenticated users on the host machine. &lt;/li&gt;&lt;li&gt;Confirm that the &lt;i&gt;CreateSourceShare.bat&lt;/i&gt; script from part four has created a folder on the host system that is shared it to the SourceShare user with full control. Remove “Everyone” from the sharing permissions and replace with “Authenticated Users”. &lt;/li&gt;&lt;li&gt;In the guest virtual machine, map the Z drive to &lt;a href="file://///192.168.200.1/Source"&gt;\\192.168.200.1\Source&lt;/a&gt;, specifying the &lt;b&gt;SourceShare&lt;/b&gt; account credentials and that it should be reconnected at login. Save the password. &lt;/li&gt;&lt;li&gt;Test the connection by opening the Z drive. If there are problems opening the drive, browse to &lt;a href="file:///Source"&gt;\\192.168.200.1\&lt;/a&gt; and troubleshoot from there. &lt;/li&gt;&lt;li&gt;If users have trouble with the strength of the password, allow them to change it to something that they will remember, but make certain that it is changed in both the host and the guest and make sure they know that the change will need to be applied to all snapshot states and any other virtual machines that use this repository in the host. &lt;/li&gt;&lt;/ul&gt;Note: if you would prefer to store source code in the virtual machine it is not necessary to follow these steps. The benefits of preserving code outside of the snapshot state need to be weighed up against the drawbacks of rolling back to a state when some of that code did not exist, and users of the system need to be aware of the implications of using either approach. Clearly this approach adds some complexity and any approach should be validated for your needs.&lt;br /&gt;&lt;h5&gt;Create local user accounts for services and application pool identities&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;SQL service accounts (which should be for obvious purposes):        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;SQLSvc &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;SQLAgent &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;SQLAnalysis &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;SQLReporting&amp;nbsp; &lt;br /&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SharePoint service accounts and application pool identities:        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;MossSetup&lt;/b&gt; (installation account) &lt;/li&gt;&lt;li&gt;&lt;b&gt;CentralAdmin&lt;/b&gt; (farm account) &lt;/li&gt;&lt;li&gt;&lt;b&gt;SSPAdmin&lt;/b&gt; (Shared Services Administration site application pool identity) &lt;/li&gt;&lt;li&gt;&lt;b&gt;MySite&lt;/b&gt; (MySite application pool identity) &lt;/li&gt;&lt;li&gt;&lt;b&gt;Portal&lt;/b&gt; (Portal application pool identity) &lt;/li&gt;&lt;li&gt;&lt;b&gt;SearchService&lt;/b&gt; (MOSS Search service account) &lt;/li&gt;&lt;li&gt;&lt;b&gt;SharedServices&lt;/b&gt; (the SSP web service identity) &lt;/li&gt;&lt;li&gt;&lt;b&gt;ContentAccess&lt;/b&gt; (the crawl account) &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Assign the &lt;b&gt;MossSetup&lt;/b&gt; account local administrative rights.&lt;br /&gt;&lt;h5&gt;Activate windows&lt;/h5&gt;Add a valid Windows license and activate the system. Aside from obvious compliance issues, if this is not done you will see repeated 12321 &lt;i&gt;Security-Licensing-SLC&lt;/i&gt; “Token-based Activation failed” warnings in the event logs.&lt;br /&gt;&lt;h5&gt;Shutdown and snapshot&lt;/h5&gt;Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “Windows configuration complete”. You will be able to roll back to this state if you have problems with the SQL installation.&lt;br /&gt;&lt;h2&gt;SQL 2008 Setup&lt;/h2&gt;&lt;h3&gt;Installation&lt;/h3&gt;Start up the virtual machine and run the SQL 2008 installer. Select all features.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Give the instance a name or choose the default instance name according to preference. &lt;/li&gt;&lt;li&gt;Set up SQL services under these accounts:        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQLSvc &lt;/li&gt;&lt;li&gt;SQLAgent &lt;/li&gt;&lt;li&gt;SQLAnalysis &lt;/li&gt;&lt;li&gt;SQLReporting &lt;/li&gt;&lt;li&gt;Everything else can run as &lt;i&gt;Network Service.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Disable Analysis, Reporting and Integration services. We do not run these services by default in order to optimise performance. However, we do install the services to speed up deployment as needed. Use as necessary in your environment. &lt;/li&gt;&lt;li&gt;Select Windows Authentication. &lt;/li&gt;&lt;li&gt;Select the local Administrator account as a Server Administrator. &lt;/li&gt;&lt;li&gt;Install Reporting Services in SharePoint integrated mode. &lt;/li&gt;&lt;/ul&gt;After installation completes, launch the SQL Management Studio and assign the &lt;b&gt;MossSetup&lt;/b&gt; account DBCreator and SecAdmin rights. It will not be necessary to assign other permissions directly in SQL, as the setup account will assign DBCreator/SecAdmin rights to the farm account.&lt;br /&gt;&lt;h3&gt;Patching&lt;/h3&gt;Add the SQL Server 2008 Feature Pack and SQL Server 2008 SP1 and. Reboot as necessary and patch with the latest Cumulative Update.&lt;br /&gt;&lt;h3&gt;Shutdown and snapshot&lt;/h3&gt;Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “SQL 2008 configuration complete”. You will be able to roll back to this state if you have problems with the MOSS installation.&lt;br /&gt;&lt;h2&gt;MOSS deployment&lt;/h2&gt;&lt;h3&gt;Installation and initial configuration&lt;/h3&gt;Start up the virtual machine. Log in with the &lt;b&gt;MossSetup&lt;/b&gt; account and follow these steps.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Run the MOSS installer with (at least) SP1 slipstreamed. Select the &lt;i&gt;Complete&lt;/i&gt; Server Type. &lt;/li&gt;&lt;li&gt;When the installer completes, un-tick the “Launch SharePoint Products and Technologies” wizard tick box. &lt;/li&gt;&lt;li&gt;Open a command window, running as Administrator and navigate to the BIN in the 12 Hive. Run &lt;i&gt;PSCONFIG –cmd configdb –create&lt;/i&gt; to manually specify friendly names for the Central Admin databases and to assign the &lt;b&gt;CentralAdmin&lt;/b&gt; farm account as the user. Specify both the Central Admin configuration and Content databases or they will receive an awful GUID for a name. Find &lt;a href="http://technet.microsoft.com/en-us/library/cc263093.aspx"&gt;more information about PSCONFIG&lt;/a&gt; on TechNet. &lt;/li&gt;&lt;li&gt;Launch the &lt;i&gt;SharePoint Products and Technologies Configuration&lt;/i&gt; wizard from the start menu. Retain the connection to the newly-created farm databases and proceed through the configuration wizard according to your build requirements. I recommend that you specify a standard Central Administration port if you use one and authenticate using NTLM. &lt;/li&gt;&lt;li&gt;Once the wizard completes, launch Central Administration to confirm that the site is up and running. &lt;/li&gt;&lt;li&gt;There are tips and tricks that you may want to include for your developers, for instance &lt;a href="http://www.andrewconnell.com/blog/archive/2006/08/21/3882.aspx"&gt;Andrew Connell’s suggestions&lt;/a&gt; and an interesting use of junction points from &lt;a href="http://sharenotes.wordpress.com/2008/05/02/rapid-access-to-12-hive-and-stsadmexe/"&gt;the Share Notes blog&lt;/a&gt;.         &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Consider putting a desktop, task bar or start menu shortcut to the 12 hive. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Add an environment variable for the 12 hive’s BIN.            &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to the machine’s Advanced System Properties (right-click My Computer and select Properties). &lt;/li&gt;&lt;li&gt;Click the &lt;i&gt;Environment Variables&lt;/i&gt; button. &lt;/li&gt;&lt;li&gt;In the System variables pane, scroll down to Path and select “Edit”. &lt;/li&gt;&lt;li&gt;Clicking in the Variable Value will put the cursor at the end of the line. Type a semi-colon. &lt;/li&gt;&lt;li&gt;Copy and paste the path to the 12 hive’s BIN, typically: &lt;/li&gt;&lt;li&gt;&lt;i&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Shutdown and snapshot&lt;/h4&gt;Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “MOSS installation complete”. You will be able to roll back to this state if you have problems with the farm configuration.&lt;br /&gt;&lt;h3&gt;Farm build and configuration&lt;/h3&gt;Start up the virtual machine and launch Central Administration from the Start menu or navigate to it in Internet Explorer.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Enable Intranet Settings for the Central Admin site. This option should appear as a prompt directly beneath the tabs. &lt;/li&gt;&lt;li&gt;Grant Launch and Activation permission to the local WSS_WPG and WSS_ADMIN_WPG groups in the &lt;b&gt;IIS WAMREG&lt;/b&gt; DCOM component. This prevents system error 10016. See &lt;a href="http://support.microsoft.com/kb/920783"&gt;KB920783&lt;/a&gt; for more information.         &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If necessary, do the same thing on the &lt;b&gt;oSearch&lt;/b&gt; DCOM componet, per &lt;a href="http://support.microsoft.com/kb/953137" target="_self" title="oSearch DCOM fix"&gt;KB953137&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Enable the MOSS Search service, running under the &amp;lt;MACHINE NAME&amp;gt;\SearchService account with “Reduced” performance, using all WFE servers.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If the account name is entered without the &amp;lt;MACHINE NAME&amp;gt; prefix, you will likely see this error:          &lt;br /&gt;&lt;span style="color: grey;"&gt;“An unhandled exception occurred in the user interface.Exception Information: OSearch (SearchService)”.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;We have not configured any other central administration settings in order to provide the farm in the cleanest state possible. That said, perform any additional configuration here as needed, but be aware that many settings are not suitable for all projects. &lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Create the Shared Services Provider&lt;/h3&gt;Configure the farm’s shared services as prompted by the left navigation. This will step through the creation of the SSP administration and MySite web applications and then the Shared Services web service itself.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a new SSP administration web application when prompted.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the host name and load balanced URL that was set up above: &lt;a href="http://sspadmin/"&gt;http://SSPAdmin&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Use the application pool identities as created above: &lt;b&gt;SSPAdmin&lt;/b&gt; &lt;/li&gt;&lt;li&gt;Select NTLM authentication, unless there is a reason not to. &lt;/li&gt;&lt;li&gt;Give the content database for the web application an appropriate name, such as &lt;b&gt;WSS_CONTENT_SSPAdmin&lt;/b&gt;, according to internal naming conventions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Create a new MySites web application when prompted.        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the host name and load balanced URL that was set up above: &lt;a href="http://mysite/"&gt;http://MySite&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Use the application pool identities as created above: &lt;b&gt;MySite&lt;/b&gt; &lt;/li&gt;&lt;li&gt;Select NTLM authentication, unless there is a reason not to. &lt;/li&gt;&lt;li&gt;Give the content database for the web application an appropriate name, such as &lt;b&gt;WSS_CONTENT_MySite&lt;/b&gt;, according to internal naming conventions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Proceed with the SSP configuration:        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use NTLM authentication. &lt;/li&gt;&lt;li&gt;Specify the &lt;b&gt;SharedServices&lt;/b&gt; application pool identity. &lt;/li&gt;&lt;li&gt;Do not use SSL, as this traffic is not leaving the server. &lt;/li&gt;&lt;li&gt;Typically in a stand-alone devlopment environment it should be OK to use the default SSP database naming suggestions, but adhere to internal standards where they apply.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait for the configuration wizard to complete. This can take some time. &lt;/li&gt;&lt;li&gt;Visit the SSP administration site to confirm that the web application has been successfully created. &lt;/li&gt;&lt;li&gt;In Central Administration, navigate to &lt;i&gt;Self-Service Site Management&lt;/i&gt; and enabled Self-site creation for the MySite web application. &lt;/li&gt;&lt;li&gt;Visit the MySite link in Central Administration to confirm that the web application has been successfully created. &lt;/li&gt;&lt;li&gt;Log in to the SSP Administration site and take these steps:        &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Specify a default content access account: &lt;b&gt;ContentAccess&lt;/b&gt; &lt;/li&gt;&lt;li&gt;Grant full personalisation services rights to the local administration account.            &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This account can be used to grant rights to yet-to-be-created local users of the system once they receive this build, if desired.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Create the web portal&lt;/h3&gt;In Central Administration create a new web application.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the host name and load balanced URL that was set up above: &lt;a href="http://portal/"&gt;http://Portal&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Use the application pool identities as created above: &lt;b&gt;Portal&lt;/b&gt; &lt;/li&gt;&lt;li&gt;Select NTLM authentication, unless there is a reason not to. &lt;/li&gt;&lt;li&gt;Give the content database for the web application an appropriate name, such as &lt;b&gt;WSS_CONTENT_Portal&lt;/b&gt;, according to internal naming conventions. &lt;/li&gt;&lt;li&gt;Create a root site collection using the collaboration portal template. Make the local administrator account and the Moss Setup accounts site collection administrators – to be changed by local users on receipt of the build. &lt;/li&gt;&lt;li&gt;Visit &lt;a href="http://portal/"&gt;http://portal&lt;/a&gt; to confirm that the site collection has been successfully created. &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Shutdown and snapshot&lt;/h4&gt;Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “MOSS configuration complete”. You will be able to roll back to this state if you have problems with the patching.&lt;br /&gt;&lt;h3&gt;Patch current&lt;/h3&gt;Start up the virtual machine and patch the environment to whatever state is needed. We typically recommend patching current. During the course of our pilot we used the April 2009 Cumulative Update. When we released the base virtual machine to our entire development team we launched with the June 2009 Cumulative Update. Once patched current, test that all sites are still working as expected.&lt;br /&gt;Full patching guidance is available on the &lt;a href="http://technet.microsoft.com/en-us/office/ee748587.aspx"&gt;Update Center for Microsoft Office, Office Servers, and Related Products&lt;/a&gt; site.&lt;br /&gt;&lt;h4&gt;Shutdown and snapshot&lt;/h4&gt;Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “June 2009 CU applied”. You will be able to roll back to this state if you have problems with developer tool installation.&lt;br /&gt;&lt;h2&gt;Tool installation and export&lt;/h2&gt;&lt;h3&gt;Developer Tool installation&lt;/h3&gt;Start up the virtual machine and install the common development tools for your organisation. These are the standard tools used by our developers. There are also some licensed products that are installed for some users outside of the scope of the base build.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft Office SharePoint Designer 2007 SP2 &lt;/li&gt;&lt;li&gt;Microsoft Visual Studio Team System 2008 Developer Edition (we created a separate snapshot for users that need Visual Studio 2005 rather than running them concurrently) &lt;/li&gt;&lt;li&gt;Microsoft Visual Studio Team System 2008 Team Explorer &lt;/li&gt;&lt;li&gt;Microsoft Visual Studio Team System 2008 Team Foundation Server MSSCCI Provider &lt;/li&gt;&lt;li&gt;TFS Power Tools &lt;/li&gt;&lt;li&gt;Microsoft Visual Studio Team System 2008 Developer Edition SP1 &lt;/li&gt;&lt;li&gt;Microsoft Visual SourceSafe &lt;/li&gt;&lt;li&gt;WSPBuilder Extensions 1.0.5 &lt;/li&gt;&lt;li&gt;StyleCop &lt;/li&gt;&lt;li&gt;Fiddler2 &lt;/li&gt;&lt;li&gt;Sandcastle &lt;/li&gt;&lt;li&gt;Sandcastle Help File Builder &lt;/li&gt;&lt;li&gt;HTML Tidy &lt;/li&gt;&lt;li&gt;PDF X-Change PDF Viewer &lt;/li&gt;&lt;li&gt;Firefox with Firebug &lt;/li&gt;&lt;li&gt;Safari &lt;/li&gt;&lt;li&gt;Chrome &lt;/li&gt;&lt;li&gt;Opera &lt;/li&gt;&lt;li&gt;SharePoint Manager 2007 &lt;/li&gt;&lt;li&gt;Microsoft Silverlight &lt;/li&gt;&lt;li&gt;Adobe Flash for IE &lt;/li&gt;&lt;li&gt;Adobe Flash for Firefox, Safari and Opera &lt;/li&gt;&lt;li&gt;Microsoft Forefront Client &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.toolheap.com/test-mail-server-tool/"&gt;Test Mail Server&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;On completion of installation, defragment the disk and wait for completion.&lt;br /&gt;&lt;h3&gt;Shutdown and snapshot&lt;/h3&gt;Shut down the virtual machine and take a snapshot. Rename the snapshot with an appropriate name, such as “Developer tools installed”. You will be able to roll back to this state if you have problems with the farm configuration.&lt;br /&gt;&lt;h3&gt;Snapshot branches&lt;/h3&gt;If you will be using different versions of Visual Studio (or anything else) it’s worth creating distinct branches for each version. You could adopt an approach like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Install all of the independent tools, shut down and take a snapshot, renamed to something like "Developer tools except VS installed". &lt;/li&gt;&lt;li&gt;Install Visual Studio 2008 and patches. Defragment, shut down and take a snapshot, renaming to something like "Visual Studio 2008 installed and patched current". &lt;/li&gt;&lt;li&gt;Apply the "Developer tools except VS installed" snapshot. Install Visual Studio 2005 and patches. Defragment, shut down and take a snapshot, renaming to something like "Visual Studio 2005 installed and patched current". &lt;/li&gt;&lt;li&gt;The two Visual Studio snapshot are now siblings - children of the "Developer tools except VS installed" snapshot node. A third sibling could be created in this same manner for Visual Studio 2010 Beta 2 (for instance). &lt;/li&gt;&lt;/ul&gt;We install Visual Studio last in the installation sequence in order to maintain consistency among these variants as deep in to the snapshot tree as possible. To give another example, I've just built a SharePoint 2010 Beta environment with Visual Studio 2010 Beta 2. In that environment there was only one instance of Visual Studio but two SharePoint branches - one for SharePoint Foundation and another for SharePoint Server 2010. In that tree I installed all developer tools and Visual Studio before installing either SharePoint edition. If you have similar branching needs, plan to install those items last and structure your snapshot trees accordingly.&lt;br /&gt;&lt;h3&gt;Export&lt;/h3&gt;You may choose to export the entire virtual machine rather than the final snapshot, depending on how standard you want the final build to be. If a developer can role back to an earlier state then the standardisation of the build is at risk. In our case, we’ve exported the final snapshot (or each of the final sibling nodes in the snapshot tree, since some users use Visual Studio 2005). This state is vanilla enough that it can be used as a common starting point for a wide range of projects. It has even been used as a starting point for projects that extend beyond SharePoint to accessibility solutions, Commerce Server and BizTalk.&lt;br /&gt;&lt;br /&gt;This is not to say that this build fits all sizes, but it does fit most of them while obtaining the benefits outlined in the first post in this series. Some of the limitations of this approach are discussed in the next part of this series.&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://tristanwatkins.com/?p=507"&gt;posted&lt;/a&gt;&lt;u&gt;&lt;span style="color: purple;"&gt;&lt;/span&gt;&lt;/u&gt; on Tristan's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-5087866159663101147?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/building-sharepoint-20072010_27.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-4207640523773712293</guid><pubDate>Thu, 26 Nov 2009 12:56:00 +0000</pubDate><atom:updated>2009-11-26T22:26:53.676Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><category domain='http://www.blogger.com/atom/ns#'>Accessibility</category><category domain='http://www.blogger.com/atom/ns#'>SUGUK</category><title>Building Accessible SharePoint Systems - SharePoint User Group UK</title><description>&lt;p&gt;&lt;em&gt;Glyn Clough, Solutions Consultant&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Last night it was good to see &lt;a href="http://www.martinhatch.com/"&gt;Martin Hatch&lt;/a&gt; presenting at the SharePoint User Group in London. Martin is a Solution Architect and a colleague of mine at Content and Code who has worked extensively on building accessible SharePoint solutions - most recently for the &lt;a href="http://www.rnib.org.uk/Pages/Home.aspx"&gt;Royal National Institute of Blind People&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Key highlights for me were the use of &lt;em&gt;Rendering Templates&lt;/em&gt; and &lt;em&gt;Control Adapters &lt;/em&gt;to override out of the box controls and how they are displayed and function. These techniques can be used on both MOSS 2007 and SharePoint 2010, and are not solely aimed at delivering accessibility improvements.&lt;/p&gt;&lt;p&gt;Martin has now made available the materials from his presentation:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://public.bay.livefilestore.com/y1pdNBtsR-aV4REr7F0FTZ_Xa2RVcdXzAG45ypR8J2sLKvhiBr2keI47ZJHOrrDxMXT_DN_vORdczCZknWMWx30kg/SUGUK%2025th%20Nov%2009%20-%20Developing%20Accessible%20SharePoint%20Systems.pptx?download"&gt;PowerPoint Slides (2007 – 2010 format) (.pptx)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://public.bay.livefilestore.com/y1pLXLp0R9iAfEX5MB6lYLke7NGbHcHbdPLLlV310dQW19mTynaklVrRIEhNHQhhppBNUem2qK9YiJT5kOvpjI08w/SUGUK%2025th%20Nov%2009%20-%20Developing%20Accessible%20SharePoint%20Systems.ppt?download"&gt;PowerPoint Slides (97 – 03 format) (.ppt)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://public.bay.livefilestore.com/y1p77iSZg9wuLaBjWP2Kh_n-Iq3EV1ZnEQaNDfpS0oIGWumQHggIUSOwRKUPtiuHaIdsesHz8h5_nqbenx1qIY1Ng/SUGUK%20Visual%20Studio%202010%20Solution.zip?download"&gt;Sample Code – SUGUK Visual Studio 2010 Solution (.zip)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://public.bay.livefilestore.com/y1pdyBD0fqGdUMH4pASjthB0QlTUyNwiFyjUHs95wUGgSJorRrAlFElS5uDazkyhqHrqQLAWWJGLOIP5CsOLupXdA/ControlAdapters.zip?download"&gt;Sample Code – Control Adapters (.zip)&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you would like to read more about Martin’s work with the RNIB and the SharePoint Accessibility Solution (SAS) from Content and Code please see the accessibility section of our &lt;a href="http://www.contentandcode.com/solutions/Pages/accessibility.aspx"&gt;website&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;[Also &lt;a href="http://glynclough.blogspot.com/2009/11/building-accessible-sharepoint-systems.html"&gt;posted&lt;/a&gt; on Glyn’s personal blog]&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-4207640523773712293?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/building-accessible-sharepoint-systems.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-5243071883735797041</guid><pubDate>Wed, 25 Nov 2009 14:43:00 +0000</pubDate><atom:updated>2009-11-25T14:58:56.397Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>Windows Server 2008 R2</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><category domain='http://www.blogger.com/atom/ns#'>Hyper-V</category><title>Building a SharePoint 2007/2010 development environment – Part IV: Automated deployment</title><description>&lt;em&gt;Tristan Watkins, Infrastructure Consultant&lt;/em&gt;&lt;br /&gt;In the first three parts of this series I covered &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010.html"&gt;the project objectives&lt;/a&gt; and &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_05.html"&gt;the system design&lt;/a&gt;, then turned my attention to the &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_09.html"&gt;Hyper-V host image build&lt;/a&gt;. In this section I will look at automating deployment of that host operating system. This is lengthy, but there's a lot to cover.&lt;br /&gt;Before I begin, I need to reiterate a "gotcha" that I stumbled across during the pilot. If you're thinking of testing this out by adding the Windows Deployment Services role to a machine that's using Internet Connection Sharing (ICS), &lt;a href="http://tristanwatkins.com/?p=80"&gt;think again&lt;/a&gt;. They don't play nicely together. Rather, you'll be able to deploy the physical machines but any ICS recipient network adapters will be left without connectivity. If you only have one physical machine for testing, consider deploying WDS to a new virtual machine or adding the role within an existing virtual machine.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;h4&gt;Imaging&lt;/h4&gt;To capture the host OS image we need Windows Deployment Services (WDS), which is a Server Role in Windows Server 2008 R2 (and Windows Server 2008, but we won't be bothered with earlier incarnations of WDS, RIS or ADS). To specify configuration options during deployment we will attach an unattend file to the captured image. We'll create it using the &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=60a07e71-0acb-453a-8035-d30ead27ef72"&gt;WAIK for Windows 7&lt;/a&gt;, which includes &lt;em&gt;Windows System Image Manager &lt;/em&gt;(Windows SIM).&lt;br /&gt;&lt;h5&gt;Preparation&lt;/h5&gt;Before we begin, note that WDS needs to be deployed in an Active Directory domain (as a member or a DC) with DHCP and DNS.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To install WDS, add the Server Role through the Role Summary pane in Server Manager &lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Once launched, configuration options can be selected for WDS, such as default naming patterns and default unattend files. You will not be able to commit any configuration changes unless they are made by a Domain Administrator. If this is a test environment and you are unable to get Domain Admin rights, WDS can still be used with a bit more of a hands-on approach (manually naming servers and joining to the domain, etc.). These configuration options are covered in more detail below &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;To download the &lt;em&gt;Windows Automated Installation Kit&lt;/em&gt; for Windows 7 (WAIK), visit microsoft.com and &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=696DD665-9F76-4177-A811-39C26D3B3B34&amp;amp;displaylang=en"&gt;grab the latest version&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Mount the ISO file and install &lt;em&gt;Deployment Imaging Servicing and Management&lt;/em&gt; (DISM), which includes the &lt;em&gt;Windows System Image Manager &lt;/em&gt;(SIM)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;A good ISO mounting tool is &lt;a href="http://www.magiciso.com/"&gt;Magic ISO Maker&lt;/a&gt;. Daemon Tools jumped the shark&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;To use WAIK, you will need to have access to Windows Server 2008 R2 installation media &lt;/li&gt;&lt;ul&gt;&lt;li&gt;If the server is a virtual machine, consider attaching ISO files of the installation media as optical drives on the IDE controllers in the virtual machine's settings, as this may make things easier &lt;/li&gt;&lt;ul&gt;&lt;li&gt;I have created two additional optical drives in my WDS virtual machine, with a Windows 7 ISO file mounted in one virtual optical drive and a Windows Server 2008 R2 ISO file mounted in the other. This allows me to maintain unattend files for both operating systems without having to mess about with real optical/removable media&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Ensure that both the WDS machine and the soon-to-be-captured &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_09.html"&gt;Hyper-V host&lt;/a&gt; are connected to the network &lt;/li&gt;&lt;li&gt;If testing WDS on a live network, be certain that there are no other PXE boot servers on the environment before adding the WDS role, as this may result in network installation chaos otherwise &lt;/li&gt;&lt;/ul&gt;&lt;h5&gt;Configure WDS&lt;/h5&gt;This guidance covers &lt;em&gt;some&lt;/em&gt; of the settings in WDS that are applicable to this use. I don't touch on all of them. It should go without saying that WDS deployment should be considered in much greater detail than these summary steps and that administrators should familiarise themselves with WDS and WAIK before unleashing them. That said...&lt;br /&gt;To configure WDS, log on to the server as a domain administrator and launch Server Manager. Expand the Windows Deployment Services node in "Roles". Right-click the server that you want to configure and select "Properties".&lt;br /&gt;&lt;h6&gt;PXE Response&lt;/h6&gt;Choose how strictly you want to control deployment of images. If this is a test environment, configure the role for known and unknown devices. Ideally this configuration is a bit more considered for production. Note: this is distinct from the &lt;em&gt;PXE Boot Policy&lt;/em&gt;, which governs the behaviour of the PXE boot process rather than restricting which devices can be booted in to WDS. Think of this as the device setting and &lt;em&gt;PXE Boot Policy&lt;/em&gt; as the user setting.&lt;br /&gt;&lt;h6&gt;Client Naming Policy&lt;/h6&gt;These settings control the auto-generated naming format. For instance, "Dev-%8Username-%02#", breaks down as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;“Dev-” &lt;/li&gt;&lt;li&gt;“%8” specifies an eight-character variable &lt;/li&gt;&lt;li&gt;“Username” is the variable, meaning that the first eight characters of the user's name will be used in the computer name &lt;/li&gt;&lt;li&gt;“-” adds a hyphen &lt;/li&gt;&lt;li&gt;“%02#” specifies a two-character auto-incremented number at the end of the string &lt;/li&gt;&lt;/ul&gt;&lt;h6&gt;Computer Account Location&lt;/h6&gt;Specify an OU where new instances of the image should be created.&lt;br /&gt;&lt;h6&gt;PXE Boot Policy&lt;/h6&gt;Configure this setting to preference. It controls the behaviour of the PXE boot once it has been initiated (either from a one-time boot menu or BIOS boot order change). Once in the PXE boot a DHCP lease is acquired, followed by the behaviour defined here. PXE can either abort and continue with the next BIOS boot option, automatically proceed or prompt the user to press F12 to confirm PXE boot. Think of this as the user setting and &lt;em&gt;PXE Response&lt;/em&gt; as the device setting. If unsure what to choose, prompting is probably the best option to choose.&lt;br /&gt;&lt;h6&gt;Default Boot Image and Default Unattend file&lt;/h6&gt;To simplify things we attached an unattend file directly to the captured image, as spelled out in &lt;a href="http://blogs.technet.com/jhoward/archive/2008/06/30/deploying-windows-server-2008-with-slipstreamed-hyper-v-rtm-part-2.aspx"&gt;John Howard's, slipstreamed Hyper-V&lt;/a&gt; article. The unattend file doesn't exist yet, as we haven't delved into WAIK yet. For now it's sufficient to know that these WDS configuration settings determine distinct boot images and default unattend files for different processor architectures. Since we're attaching the unattend file to the image directly we don't need to worry about providing values for these settings.&lt;br /&gt;It's worth reviewing the overlapping options in WAIK and WDS for these defaults settings, as it's far from straight-forward. &lt;a href="http://technet.microsoft.com/en-us/library/cc771508%28WS.10%29.aspx#BKMK_12"&gt;TechNet covers this&lt;/a&gt; beyond the scope of this article.&lt;br /&gt;&lt;h6&gt;Joining a Domain&lt;/h6&gt;This setting allows for the newly deployed machines to be automatically joined to the domain.&lt;br /&gt;&lt;h6&gt;Network settings&lt;/h6&gt;Specify DHCP, Multicast, Transfer Settings (throttling), domain discovery and the UDP port range. Default settings should suffice in a test environment. Approach these choices with care if this environment contains any valuable resources beyond these test machines.&lt;br /&gt;&lt;h5&gt;Prepare the Capture Image in WDS&lt;/h5&gt;The Capture Image is a PXE-booted version of WinPE specifically designed for capturing custom install images. When PXE booting to capture an image, make sure to select this image rather than a boot image.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mount an ISO or insert install media for Windows Server 2008 R2 &lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;As mentioned above, it might be easiest to add the ISO as a DVD drive on the VM's IDE Controller. This will also be useful for WAIK configuration later &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Add the Boot WIM to the Boot Images directory&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Right-click Boot Images in WDS and select "Add Boot Image" &lt;/li&gt;&lt;li&gt;Make sure to select the right CPU architecture for the boot image &lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Note: if you forget to do this, you can capture an x64 OS with an x86 Capture Image, but it may be slower to do so. Also, an x64 Capture Image will not be bootable unless the machine has an x64 processor&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Create a Capture Image from the Boot Image &lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Right-click the newly added boot image in WDS and select "Create Capture Image" &lt;/li&gt;&lt;li&gt;This will launch a wizard with a link to a help file if the wizard is unclear &lt;/li&gt;&lt;li&gt;This is necessary for creating a custom install image in WDS &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;h5&gt;Generalise the host build&lt;/h5&gt;We're finally ready to get back to the host build. Note: if the host has been built as a virtual machine (as recommended at the top of part III of this series), take a snapshot of the virtual machine before running SysPrep so that the reseal count is not incremented for future updates to the build.&lt;br /&gt;To generalise the host build, run &lt;strong&gt;sysprep /oobe /generalize /shutdown&lt;/strong&gt;. This can also be done from the GUI by double-clicking sysprep.exe.&lt;br /&gt;&lt;h5&gt;&lt;a href="http://tristanwatkins.com/?p=505#_msocom_2"&gt;&lt;/a&gt;Capture the install image&lt;/h5&gt;Start the host machine and invoke the one-time boot menu (commonly F12).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Select PXE, NIC or network boot (terminology varies) &lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Depending on the configuration of the Windows Deployment Services (WDS) server it may be necessary to press F12 again to confirm PXE boot &lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;If this isn’t done, the machine will boot from hard disk and the machine will need to be SysPreped again &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Select the Capture Image that was created above &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Again, remember to select the correct processor architecture&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In the Windows Deployment Services Image Capture wizard, choose a location to save the new image &lt;/li&gt;&lt;ul&gt;&lt;li&gt;This location can be the same disk that's being captured. I suggest creating a folder called &lt;em&gt;D:\Captured Image&lt;/em&gt; so that the directory can be removed with the post-deployment script below &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Note: the drive letter will not be "C:", as that's the WinPE Capture Image that we're "in" at this point. The System disk will probably appear as "D:" &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Allow time for the image to be captured locally and then for it to be transfered to WDS&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In my experience, the captured image does not appear in WDS immediately. I've needed to re-launch Server Manager to view it and in some cases a reboot was necessary &lt;/li&gt;&lt;li&gt;If for some reason the network transfer of the image to WDS fails, it can be manually copied to the WDS server and added, but make sure to reboot the server as described above before taking this step or the images may be duplicated and this could get confusing &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Creating the Unattend file&lt;/h4&gt;Open the Windows System Image Manager from the Start &amp;gt; All Programs &amp;gt; Microsoft Windows AIK menu.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In the Distribution Share pane, select or create a distribution share in the location of your choice. I created mine in D:\WAIK\DistributionShare &lt;/li&gt;&lt;li&gt;In the Windows Image pane, choose &lt;em&gt;Select Windows Image&lt;/em&gt; and choose the Windows Server 2008 R2 \sources\install.wim file from install media. Select the Standard Full edition when prompted &lt;/li&gt;&lt;li&gt;Paste the XML below in to a text file and save it as &lt;em&gt;DevBuild.XML&lt;/em&gt; &lt;/li&gt;&lt;li&gt;In the Answer File pane, open &lt;em&gt;DevBuild.XML&lt;/em&gt; below as a starting point for your selections &lt;/li&gt;&lt;/ul&gt;DevBuild.XML&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;unattend xmlns="urn:schemas-microsoft-com:unattend"&amp;gt;&lt;br /&gt;&amp;lt;servicing&amp;gt;&lt;br /&gt;&amp;lt;package action="configure"&amp;gt;&lt;br /&gt;&amp;lt;assemblyIdentity name="Microsoft-Windows-Foundation-Package" version="6.1.7600.16385" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="" /&amp;gt;&lt;br /&gt;&amp;lt;selection name="Microsoft-Hyper-V" state="true" /&amp;gt;&lt;br /&gt;&amp;lt;selection name="VmHostAgent" state="true" /&amp;gt;&lt;br /&gt;&amp;lt;selection name="Microsoft-Hyper-V-Management-Clients" state="true" /&amp;gt;&lt;br /&gt;&amp;lt;selection name="WirelessNetworking" state="true" /&amp;gt;&lt;br /&gt;&amp;lt;selection name="CoreFileServer" state="true" /&amp;gt;&lt;br /&gt;&amp;lt;selection name="SearchEngine-Server-Package" state="true" /&amp;gt;&lt;br /&gt;&amp;lt;/package&amp;gt;&lt;br /&gt;&amp;lt;/servicing&amp;gt;&lt;br /&gt;&amp;lt;settings pass="windowsPE"&amp;gt;&lt;br /&gt;&amp;lt;component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;lt;SetupUILanguage&amp;gt;&lt;br /&gt;&amp;lt;UILanguage&amp;gt;en-GB&amp;lt;/UILanguage&amp;gt;&lt;br /&gt;&amp;lt;/SetupUILanguage&amp;gt;&lt;br /&gt;&amp;lt;InputLocale&amp;gt;en-GB&amp;lt;/InputLocale&amp;gt;&lt;br /&gt;&amp;lt;SystemLocale&amp;gt;en-GB&amp;lt;/SystemLocale&amp;gt;&lt;br /&gt;&amp;lt;UILanguage&amp;gt;en-GB&amp;lt;/UILanguage&amp;gt;&lt;br /&gt;&amp;lt;UserLocale&amp;gt;en-GB&amp;lt;/UserLocale&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;lt;DiskConfiguration&amp;gt;&lt;br /&gt;&amp;lt;WillShowUI&amp;gt;OnError&amp;lt;/WillShowUI&amp;gt;&lt;br /&gt;&amp;lt;/DiskConfiguration&amp;gt;&lt;br /&gt;&amp;lt;Display&amp;gt;&lt;br /&gt;&amp;lt;ColorDepth&amp;gt;32&amp;lt;/ColorDepth&amp;gt;&lt;br /&gt;&amp;lt;HorizontalResolution&amp;gt;1280&amp;lt;/HorizontalResolution&amp;gt;&lt;br /&gt;&amp;lt;RefreshRate&amp;gt;60&amp;lt;/RefreshRate&amp;gt;&lt;br /&gt;&amp;lt;VerticalResolution&amp;gt;800&amp;lt;/VerticalResolution&amp;gt;&lt;br /&gt;&amp;lt;/Display&amp;gt;&lt;br /&gt;&amp;lt;ImageInstall&amp;gt;&lt;br /&gt;&amp;lt;OSImage&amp;gt;&lt;br /&gt;&amp;lt;InstallToAvailablePartition&amp;gt;true&amp;lt;/InstallToAvailablePartition&amp;gt;&lt;br /&gt;&amp;lt;WillShowUI&amp;gt;OnError&amp;lt;/WillShowUI&amp;gt;&lt;br /&gt;&amp;lt;/OSImage&amp;gt;&lt;br /&gt;&amp;lt;/ImageInstall&amp;gt;&lt;br /&gt;&amp;lt;UserData&amp;gt;&lt;br /&gt;&amp;lt;ProductKey&amp;gt;&lt;br /&gt;&amp;lt;WillShowUI&amp;gt;OnError&amp;lt;/WillShowUI&amp;gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;Key&amp;gt;XXXXX-XXXXX-XXXXX-XXXXX-XXXXX&amp;lt;/Key&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;lt;/ProductKey&amp;gt;&lt;br /&gt;&amp;lt;/UserData&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;/settings&amp;gt;&lt;br /&gt;&amp;lt;settings pass="specialize"&amp;gt;&lt;br /&gt;&amp;lt;component name="Microsoft-Windows-IE-ESC" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;lt;IEHardenAdmin&amp;gt;false&amp;lt;/IEHardenAdmin&amp;gt;&lt;br /&gt;&amp;lt;IEHardenUser&amp;gt;true&amp;lt;/IEHardenUser&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;lt;CompanyName&amp;gt;Your Company&amp;lt;/CompanyName&amp;gt;&lt;br /&gt;&amp;lt;DisableAccelerators&amp;gt;false&amp;lt;/DisableAccelerators&amp;gt;&lt;br /&gt;&amp;lt;Home_Page&amp;gt;http://yourhomepage.com&amp;lt;/Home_Page&amp;gt;&lt;br /&gt;&amp;lt;IEWelcomeMsg&amp;gt;true&amp;lt;/IEWelcomeMsg&amp;gt;&lt;br /&gt;&amp;lt;SuggestedSitesEnabled&amp;gt;false&amp;lt;/SuggestedSitesEnabled&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;/settings&amp;gt;&lt;br /&gt;&amp;lt;settings pass="oobeSystem"&amp;gt;&lt;br /&gt;&amp;lt;component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;lt;Reseal&amp;gt;&lt;br /&gt;&amp;lt;ForceShutdownNow&amp;gt;false&amp;lt;/ForceShutdownNow&amp;gt;&lt;br /&gt;&amp;lt;/Reseal&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;lt;OOBE&amp;gt;&lt;br /&gt;&amp;lt;HideEULAPage&amp;gt;true&amp;lt;/HideEULAPage&amp;gt;&lt;br /&gt;&amp;lt;ProtectYourPC&amp;gt;3&amp;lt;/ProtectYourPC&amp;gt;&lt;br /&gt;&amp;lt;/OOBE&amp;gt;&lt;br /&gt;&amp;lt;StartPanelLinks&amp;gt;&lt;br /&gt;&amp;lt;Link0&amp;gt;C:\Program Files (x86)\Mozilla Firefox\firefox.exe&amp;lt;/Link0&amp;gt;&lt;br /&gt;&amp;lt;Link2&amp;gt;C:\Program Files (x86)\Safari\Safari.exe&amp;lt;/Link2&amp;gt;&lt;br /&gt;&amp;lt;Link1&amp;gt;C:\Program Files (x86)\Opera 10 Beta\opera.exe&amp;lt;/Link1&amp;gt;&lt;br /&gt;&amp;lt;/StartPanelLinks&amp;gt;&lt;br /&gt;&amp;lt;TaskbarLinks&amp;gt;&lt;br /&gt;&amp;lt;Link0&amp;gt;%windir%\system32\notepad.exe&amp;lt;/Link0&amp;gt;&lt;br /&gt;&amp;lt;Link1&amp;gt;C:\Program Files (x86)\code4ward\Royal TS\&amp;lt;/Link1&amp;gt;&lt;br /&gt;&amp;lt;Link2&amp;gt;C:\Program Files (x86)\Internet Explorer\iexplore.exe&amp;lt;/Link2&amp;gt;&lt;br /&gt;&amp;lt;/TaskbarLinks&amp;gt;&lt;br /&gt;&amp;lt;UserAccounts&amp;gt;&lt;br /&gt;&amp;lt;AdministratorPassword&amp;gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;Value&amp;gt;encrypted&amp;lt;/Value&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;lt;PlainText&amp;gt;false&amp;lt;/PlainText&amp;gt;&lt;br /&gt;&amp;lt;/AdministratorPassword&amp;gt;&lt;br /&gt;&amp;lt;LocalAccounts&amp;gt;&lt;br /&gt;&amp;lt;LocalAccount wcm:action="add"&amp;gt;&lt;br /&gt;&amp;lt;Password&amp;gt;&lt;br /&gt;&lt;strong&gt; &amp;lt;Value&amp;gt;encrypted&amp;lt;/Value&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;lt;PlainText&amp;gt;false&amp;lt;/PlainText&amp;gt;&lt;br /&gt;&amp;lt;/Password&amp;gt;&lt;br /&gt;&amp;lt;DisplayName&amp;gt;SourceShare&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;&amp;lt;Name&amp;gt;SourceShare&amp;lt;/Name&amp;gt;&lt;br /&gt;&amp;lt;/LocalAccount&amp;gt;&lt;br /&gt;&amp;lt;/LocalAccounts&amp;gt;&lt;br /&gt;&amp;lt;/UserAccounts&amp;gt;&lt;br /&gt;&amp;lt;TimeZone&amp;gt;GMT Standard Time&amp;lt;/TimeZone&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;/settings&amp;gt;&lt;br /&gt;&amp;lt;cpi:offlineImage cpi:source="wim:z:/sources/install.wim#Windows Server 2008 R2 SERVERSTANDARD" xmlns:cpi="urn:schemas-microsoft-com:cpi" /&amp;gt;&lt;br /&gt;&amp;lt;/unattend&amp;gt;&lt;/pre&gt;&lt;br /&gt;Make changes to this file as needed for your environment and save the modified file. I highly recommend reviewing these selections for suitability in your environment. Some sections like the license key and passwords (bolded above) have been replaced with nonsense values. It's also worth reviewing the options that I haven't selected. The Windows SIM Help documentation is excellent and it should be a quick learning curve.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Attach the Unattend file to the image in WDS&lt;/h5&gt;In the WDS Install Images node, expand the relevant Image Group, find the captured image and right-click to select the Properties pop-up. At the bottom of the General tab there's a tick box for allowing the image to install in unattended mode and a file selection button for picking the unattend file created above. This will apply the Unattend settings to our captured, sysprep'd image when it's deployed.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Create the Post-deployment PowerShell configuration script&lt;/h4&gt;Before I begin this section, I have to disclaim that my scripting skills are fairly remedial. That said, these scripts have done the trick for us and have saved our support team a good deal of time reconfiguring environments manually.&lt;br /&gt;&lt;br /&gt;These steps are necessary because only certain things can be specified in the System Image Manager. For instance, it is possible to configure network adapters and it is possible to add Hyper-V but it is not possible to add Hyper-V, create Hyper-V networks and then configure IP properties for the host's new network adapters on those Hyper-V networks. To this end, the unattend file above specifies only the addition of the Hyper-V role and this script automates the next two steps. Additionally, this script will create the Source files share on the host machine (as discussed in part II of this series) and remove the local "Captured Image" directory that was created when WDS captured the image to the local drive.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a folder called "Automate" or similar &lt;/li&gt;&lt;li&gt;Visit the &lt;a href="http://pshyperv.codeplex.com/"&gt;PowerShell Management Library for Hyper-V&lt;/a&gt; Codeplex page and download HyperV.zip &lt;/li&gt;&lt;ul&gt;&lt;li&gt;run the installer. The script below needs to run from the same directory as &lt;em&gt;hyperv.format.ps1xml&lt;/em&gt; and &lt;em&gt;hyperv.ps1&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In the "Automate" folder create a batch script called &lt;em&gt;CreateSourceShare.bat&lt;/em&gt;, as follows: &lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;c:&lt;br /&gt;MKDIR C:\Source&lt;br /&gt;NET SHARE Source=C:\Source /GRANT:"Authenticated Users",FULL&lt;br /&gt;ICACLS C:\Source /GRANT SourceShare:F&lt;br /&gt;RMDIR "c:\Captured Image"&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a PowerShell script called &lt;em&gt;HyperVNICAndShareScript.ps1&lt;/em&gt; with these contents&lt;em&gt;: &lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;netsh interface set interface name="Local Area Connection" newname="Virtual Network Switch"&lt;br /&gt;. .\hyperV.ps1&lt;br /&gt;New-VMExternalSwitch "Hyper-V External Network" -ext "Broadcom"&lt;br /&gt;Start-Sleep -s 5&lt;br /&gt;New-VMInternalSwitch "Hyper-V Internal Network"&lt;br /&gt;Start-Sleep -s 5&lt;br /&gt;New-VMInternalSwitch "Hyper-V ICS Network"&lt;br /&gt;Start-Sleep -s 5&lt;br /&gt;netsh interface set interface name="Local Area Connection" newname="External Network Connection"&lt;br /&gt;netsh interface set interface name="Local Area Connection 3" newname="Internal Network Connection"&lt;br /&gt;netsh interface set interface name="Local Area Connection 4" newname="ICS Network Connection"&lt;br /&gt;netsh interface ipv4 set address name="Internal Network Connection" source=static address=192.168.200.1 mask=255.255.255.0&lt;br /&gt;C:\Automate\CreateSourceShare.bat&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;Deployment&lt;/h4&gt;At long last we are ready to test deployment of the captured image to a target machine. Start the host machine and invoke the one-time boot menu (commonly F12).&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Select PXE, NIC or network boot (terminology varies) &lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Depending on the configuration of the Windows Deployment Services (WDS) server it may be necessary to press F12 again to confirm PXE boot&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Select the x64 boot image for Windows Server 2008 R2 &lt;/li&gt;&lt;li&gt;The WinPE installation process will be nearly identical to installation from media - just make sure to select the captured image when prompted &lt;/li&gt;&lt;li&gt;Once the installation has completed, run PowerShell as Administrator and set the execution policy to allow remote-signed scripts. For more information &lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/set-executionpolicy.mspx"&gt;see Technet&lt;/a&gt;: &lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;Set-ExecutionPolicy RemoteSigned&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Press "Y" to accept the policy change &lt;/li&gt;&lt;li&gt;Run &lt;em&gt;HyperVNICAndShareScript.ps1&lt;/em&gt; &lt;/li&gt;&lt;li&gt;Confirm that settings match the values assigned in the scripts &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Manual post-deployment configuration tasks&lt;/h4&gt;&lt;h5&gt;Various settings&lt;/h5&gt;It's possible that some of these settings can be automated, but we opted to configure them manually rather than spending time testing the automation of them. They will all be revisited in a later phase.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make sure that the BIOS has &lt;em&gt;Hardware Assisted Virtualisation&lt;/em&gt; and &lt;em&gt;Data Execution Prevention&lt;/em&gt; enabled &lt;/li&gt;&lt;li&gt;Turn on Write-caching and turn off Write-cache Buffer Flushing on the physical disk's hardware&amp;nbsp; policy &lt;/li&gt;&lt;li&gt;Set Hyper-V default locations as desired. I have chosen: &lt;br /&gt;&lt;br /&gt;C:\Hyper-V\Virtual Hard Disks &lt;br /&gt;&lt;br /&gt;C:\Hyper-V\Virtual Machines &lt;/li&gt;&lt;li&gt;Disable IPv6 on the network adapters. SharePoint in Hyper-V guidance suggests this is a good idea, as &lt;a href="http://tristanwatkins.com/?p=187"&gt;I've commented on before&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Set up Internet Connection Sharing from the host's external network connection to the host's ICS network connection. By default we share HTTP, HTTPS and RDP &lt;/li&gt;&lt;/ul&gt;&lt;h5&gt;Drivers&lt;/h5&gt;We reduced our WDS/WAIK testing time by skipping driver installation automation. As a work-around we are capturing the host image with driver installer files included so that they can be quickly installed post-deployment. We will be introducing automated deployment in a future phase.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Role-based Authorisation and local administration rights&lt;/h5&gt;It may also be desirable or necessary to configure role-based authorisation for Hyper-V. John Howard has produced excellent guidance on the model in five parts. This is &lt;a href="http://blogs.technet.com/jhoward/archive/2009/10/09/Explaining-the-hyper-v-authorization-model-part-five.aspx"&gt;a link to the fifth&lt;/a&gt;. If this is not a requirement then don't forget to make the recipient of the build a local administrator, as this will be required if role-based authorisation is not configured.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Import virtual machines&lt;/h5&gt;As a part of a routine deployment the base virtual machine would be imported, booted up and tested before it's handed over to the recipient, but since we've not built that machine yet, I'm skipping that step for now. The virtual machine build will follow in part five of this series.&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://tristanwatkins.com/?p=505" target="_blank" title="Tristan Watkins"&gt;posted&lt;/a&gt;&lt;u&gt;&lt;span style="color: purple;"&gt;&lt;/span&gt;&lt;/u&gt; on Tristan's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-5243071883735797041?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/building-sharepoint-20072010_25.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-5954273305912613532</guid><pubDate>Tue, 24 Nov 2009 17:53:00 +0000</pubDate><atom:updated>2009-11-24T17:55:49.371Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>Great SharePoint 2010 Learning Resource</title><description>&lt;p&gt;&lt;em&gt;Glyn Clough, Solutions Consultant&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I was recently shown a great resource for SharePoint 2010 on &lt;a href="http://channel9.msdn.com/"&gt;Channel 9&lt;/a&gt;, Microsoft’s developer focussed video content site. Not being a dev, I’ve previously not spent a lot of time looking around Channel 9, but that’s all about to change…&lt;/p&gt;  &lt;p&gt;There’s some fantastic video content and presentations on 2010, which will serve as a great introduction for both developers and non-developers alike. The content is collated in a course called ‘&lt;a href="http://channel9.msdn.com/learn/courses/SharePoint2010Developer/"&gt;SharePoint 2010 Developer&lt;/a&gt;’ and grouped into 15 sections, so you can easily focus on the content you need.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/learn/courses/SharePoint2010Developer/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Channel9SharePoint2010Developer" border="0" alt="Channel9SharePoint2010Developer" src="http://lh5.ggpht.com/_aCy4rzLRlso/SwwdtNS45jI/AAAAAAAAABM/FIigmHwlqGE/Channel9SharePoint2010Developer24.png?imgmax=800" width="242" height="171" /&gt;&lt;/a&gt;     &lt;br /&gt;- SharePoint 2010 Developer Home Page&lt;/p&gt;  &lt;p&gt;It’s fantastic that Microsoft and the guys who’ve helped create/produce/test this content have put so much effort so early on into the product lifecycle on educate all the users and practitioners of SharePoint out there. We’re a million miles away from where we were with MOSS! Great work.&lt;/p&gt;  &lt;p&gt;[Also &lt;a href="http://glynclough.blogspot.com/2009/11/great-sharepoint-2010-learning-resource.html"&gt;posted&lt;/a&gt; on Glyn’s personal blog]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-5954273305912613532?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/great-sharepoint-2010-learning-resource.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-2799185447704445214</guid><pubDate>Thu, 12 Nov 2009 09:25:00 +0000</pubDate><atom:updated>2009-11-12T09:25:32.396Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>General Musings</category><category domain='http://www.blogger.com/atom/ns#'>Consultancy</category><title>Working with SharePoint 2010: The “Developer Consultant”</title><description>&lt;div&gt;&lt;i&gt;Tobias Lekman, Technical Architect&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;From all the new features in SharePoint 2010, most seem to be focused around developers and development productivity. There are lots of talk about the new Visual Studio 2010 tools for SharePoint, the “Business Connectivity Services” and sandboxed web parts.&lt;br /&gt;&lt;br /&gt;Does this mean that &lt;b&gt;we will spend more or less time writing actual code&lt;/b&gt;?&lt;br /&gt;&lt;br /&gt;At the SharePoint Conference in Las Vegas, I sat in on the “best practises” session where few new topics were covered. 90% of the material was taken from existing SharePoint guidance documentation and sandboxed solutions were touched upon. However, one single line stuck in my mind - “&lt;b&gt;developers, know your platform&lt;/b&gt;”. &lt;br /&gt;&lt;br /&gt;I have time after time seen developer-heavy implementations of solutions that could have been created using configuration of existing components in SharePoint. At the same time, I have seen solutions where one or two features of SharePoint have been used (and abused) to encompass all scenarios. This is simply because the implementation has been done by someone who has limited knowledge about SharePoint as a platform.&lt;br /&gt;From a developer’s point of view, here are the major changes in SharePoint 2010:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Less&lt;/b&gt; code and &lt;b&gt;more&lt;/b&gt; configuration &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Less&lt;/b&gt; hand-hacking of definition files and &lt;b&gt;more&lt;/b&gt; exports of prototypes into solution packages &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Less&lt;/b&gt; custom solutions and &lt;b&gt;more&lt;/b&gt; reliance on out-of-the-box solutions combined with empowered end users&lt;/li&gt;&lt;/ul&gt;As an example: I recently had very similar requests from two very different clients. They both wanted “powerful” reporting across data sources and against multiple criteria. It also needed to be easily reconfigurable to fit future needs. Both clients mentioned analysis and data mining in loose terms around “dimensions”. This could easily have been steered into a long and expensive project with OLAP data warehouses, reporting models, Excel Services and Performance Point Server, and the developer in me started talking about this approach on both occasions. However, when I demonstrated what could be achieved by connecting Excel and Access directly to the SharePoint list data and performing pivot reports against the data, both clients were more than happy. In the end, I ended up proposing &lt;b&gt;more time on end user training and configuration&lt;/b&gt; and hardly any custom development.&lt;br /&gt;&lt;br /&gt;The same story can now be applied to requirements surrounding accessibility, standards compliance, integration of line-of-business systems and external data and workflows.&lt;br /&gt;&lt;br /&gt;SharePoint 2010 does empower the developer, but more importantly – it makes the development cycles shorter, provides better tools for packaging prototypes into solutions and further empowers end users to interact with the platform with rich client tools.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Out&lt;/b&gt;: Large development teams. &lt;b&gt;In&lt;/b&gt;: Developer consultants!&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://blog.lekman.com/2009/11/working-with-sharepoint-2010-developer.html"&gt;posted &lt;/a&gt;on Tobias' personal blog] &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-2799185447704445214?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/working-with-sharepoint-2010-developer.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-6988954376016419995</guid><pubDate>Mon, 09 Nov 2009 09:42:00 +0000</pubDate><atom:updated>2009-11-25T22:37:11.548Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>Windows Server 2008 R2</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><category domain='http://www.blogger.com/atom/ns#'>Hyper-V</category><title>Building a SharePoint 2007/2010 development environment – Part III: Host image build and performance benchmarks</title><description>&lt;i&gt;Tristan Watkins, Infrastructure Consultant&lt;/i&gt;   &lt;br /&gt;&lt;br /&gt;Having agreed the &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010.html"&gt;project objectives&lt;/a&gt; and &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010_05.html"&gt;designed the system&lt;/a&gt;, I turned my attention to the Hyper-V host image build. This is a high-level build guide with start-up time and baseline memory consumption benchmarks at key milestones. These benchmark figures were taken from the Windows Server 2008 R2 Release Candidate build and are admittedly a bit imprecise. However, they do provide an overall indication of system performance as things were added to and removed from the installation. Although I do not have precise figures on RTM improvements, I spot-checked a few of these benchmarks when I rebuilt the system on RTM. Start-up times improved slightly at each milestone. In fact, the final benchmarks came in at 100MB less idle memory used in the RTM release.  &lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Capturing a virtual image&lt;/b&gt;&lt;/span&gt;   &lt;br /&gt;For the pilot and the benchmark figures listed below, the image was built on hardware and captured with Windows Deployment Services (WDS). Since then, we've rebuilt the system as a Hyper-V guest and we're capturing the image by PXE booting the SysPrep'd virtual machine from a legacy network adapter. We take a snapshot before SysPrep as a rollback point for future updates to the image. Virtual PC Guy explains this approach in more detail in his &lt;a href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/08/25/geeking-out-with-windows-deployment-services.aspx"&gt;geeking out with WDS post post&lt;/a&gt;, which I've linked here previously. I'll also be discussing the Windows Server 2008 R2 WDS build and the new version of WAIK in more detail in the next post in this series.   &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;System specification&lt;/b&gt;&lt;/span&gt;   &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dell XPS M1330      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Intel Core 2 Duo T8100 2.1 GHz &lt;/li&gt;&lt;li&gt;4.00 GB 667 MHz DDR2 SDRAM &lt;/li&gt;&lt;li&gt;7200 RPM 320GB SATA HDD &lt;/li&gt;&lt;li&gt;nVidia GeForce 8400M GS graphics card &lt;/li&gt;&lt;li&gt;Windows Server 2008 R2 Build 7100 (RC) &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Host build&lt;/span&gt;&lt;/b&gt;   &lt;br /&gt;&lt;b&gt;Initial OS optimisations&lt;/b&gt;   &lt;br /&gt;I installed the system from a USB pen drive (I had to try this given how easy it is now). On first login I started optimising the system as follows:   &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Write-caching is enabled in the physical hard disk hardware policy      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Buffer flushing is turned off &lt;/li&gt;&lt;li&gt;We are comfortable with this risk since laptops run from battery or with battery backup at all times &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IPv6 is turned off on host network adapters per &lt;a href="http://technet.microsoft.com/en-us/library/dd277865.aspx"&gt;SharePoint's Hyper-V performance and capacity guidance &lt;/a&gt;      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This is optional, and should not be turned off if you have IPv6 requirements &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IE Enhanced Security Configuration (ESC) is turned off for administrators      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Again, depending on security requirements, this may not be acceptable &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The following services are disabled (all optional):      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Certificate Propagation &lt;/li&gt;&lt;li&gt;Desktop Window Manager Session Manager          &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Leave this enabled if using Aero Glass &lt;/li&gt;&lt;li&gt;In our pilot experience, we identified that Aero Glass suffers from &lt;a href="http://tristanwatkins.com/?p=247"&gt;Hyper-V graphics performance degradation&lt;/a&gt; enough that it worsens the overall experience &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IP Helper          &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Leave this enabled if using IPv6 &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Remote Registry &lt;/li&gt;&lt;li&gt;Windows Remote Management (WS-Management) &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For more information on Windows service hardening, see &lt;a href="http://www.blackviper.com/"&gt;Black Viper's site&lt;/a&gt;. This list of services could possibly be extended, but at the time of testing service hardening information for the new operating system was harder to come by than it is presently. It should be noted that the Windows Server model of turning services on if needed means that a new system is already considerably harder than a new Windows 7 system.   &lt;br /&gt;&lt;br /&gt;Next I booted the system, logged in and let it rest for at least fifteen minutes to capture the idle memory benchmark.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Benchmarks&lt;/b&gt;   &lt;br /&gt;&lt;i&gt;Memory benchmark:&lt;/i&gt; as low as 525 MB idle.   &lt;br /&gt;&lt;i&gt;Start up time to logon:&lt;/i&gt; 37 seconds.   &lt;br /&gt;&lt;i&gt;Time to desktop:&lt;/i&gt; 52 seconds.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;BIOS settings&lt;/b&gt;   &lt;br /&gt;I installed BIOS A15 (includes alleged performance improvements) and made the following BIOS modifications:   &lt;br /&gt;&lt;ul&gt;&lt;li&gt;NIC settings = &lt;i&gt;Enabled with PXE &lt;/i&gt;(required for image capture) &lt;/li&gt;&lt;li&gt;HDD Acoustic Mode = &lt;i&gt;Performance &lt;/i&gt;&lt;/li&gt;&lt;li&gt;Virtualization = &lt;i&gt;Enabled &lt;/i&gt;&lt;/li&gt;&lt;li&gt;Internal Cellular = &lt;i&gt;Off &lt;/i&gt;&lt;/li&gt;&lt;li&gt;Wireless Switch = &lt;i&gt;Wi-Fi + BT &lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;Note: if you have internal cellular and use it, don't turn it off in the BIOS and adjust the last setting accordingly. Also note, BIOS A14+ is required if exceeding 4GB RAM.   &lt;br /&gt;&lt;br /&gt;Next I booted the system, logged in and let it rest for at least fifteen minutes to capture the idle memory benchmark.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Benchmarks&lt;/b&gt;   &lt;br /&gt;&lt;i&gt;Memory benchmark: &lt;/i&gt;as low as 525 MB idle.   &lt;br /&gt;&lt;i&gt;Start up time to logon:&lt;/i&gt; 37 seconds.   &lt;br /&gt;&lt;i&gt;Time to desktop:&lt;/i&gt; 48 seconds.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Adding drivers and features&lt;/b&gt;   &lt;br /&gt;&lt;b&gt;Drivers&lt;/b&gt;   &lt;br /&gt;&lt;ul&gt;&lt;li&gt;SigmaTel Audio driver &lt;/li&gt;&lt;li&gt;UPEK driver for TouchChip fingerprint Coprocessor (WBF advanced mode) &lt;/li&gt;&lt;li&gt;nVidia GeForce 8400M GS driver      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Note: on one occasion this driver install forced a reboot despite requesting that it be postponed - be careful &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Intel and Ricoh chipset drivers (Intel may not be necessary) &lt;/li&gt;&lt;li&gt;There is still one device without a driver:      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;BCM2045 (Bluetooth) &lt;/li&gt;&lt;li&gt;This is because Windows Server 2008+ does not have the Bluetooth stack &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Features&lt;/b&gt;   &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Enabled the desktop experience and WLAN featurs      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Requires .NET Framework 3.5 and Ink and Handwriting support &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Next I rebooted the system to complete the driver installations. On reboot, I set the Windows Audio service to Automatic and started it up. I tested Audio and the wireless network adapter.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Install Windows Search&lt;/b&gt;   &lt;br /&gt;I chose not to index any drives. This is primarily installed so that Outlook Search can be turned on with little hassle if desired   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Other OS modifications&lt;/b&gt;   &lt;br /&gt;Disabled Shutdown Event Tracker, as developers seem to hate it and it isn't really necessary on a laptop   &lt;br /&gt;&lt;br /&gt;Following these changes I rebooted, logged in again and let the system rest for an extended period so that I could capture the next idle memory benchmark.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Benchmarks&lt;/b&gt;   &lt;br /&gt;&lt;i&gt;Memory benchmark:&lt;/i&gt; as low as 622 MB idle.   &lt;br /&gt;&lt;i&gt;Start up time to logon:&lt;/i&gt; 50 seconds.   &lt;br /&gt;&lt;i&gt;Time to desktop: &lt;/i&gt;1 minute&amp;nbsp; 12 seconds.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing Microsoft Office client tools&lt;/b&gt;   &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Office 2007 (defaults, including InfoPath and OneNote) &lt;/li&gt;&lt;li&gt;Visio 2007 &lt;/li&gt;&lt;li&gt;Office Communicator 2007 R2 &lt;/li&gt;&lt;li&gt;Patched current &lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Benchmark with Office turned off and Communicator closed&lt;/b&gt;   &lt;br /&gt;&lt;i&gt;Memory benchmark:&lt;/i&gt; as low as 708 MB idle when first launched, idling at closer to 760 MB after a couple of minutes. Proper benchmarks after lengthy idle were not captured here unfortunately. The next set are more useful/reliable.   &lt;br /&gt;&lt;i&gt;Start up time to logon: &lt;/i&gt;56 seconds.   &lt;br /&gt;&lt;i&gt;Time to desktop: &lt;/i&gt;1 minute 18 seconds.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing other client software&lt;/b&gt;   &lt;br /&gt;I installed the latest versions of all majors browsers, JRE 6, PDF X-Change Reader, Royal TS, browser plugins like Flash/Silverlight and browser debugging tools like Fiddler and Firebug. Some users of the build have specific license requirements that are accommodated manually after the system is deployed.   &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Benchmarks&lt;/b&gt;   &lt;br /&gt;&lt;i&gt;Memory benchmark:&lt;/i&gt; as low as 740 MB idle.   &lt;br /&gt;&lt;i&gt;Start up time to logon: &lt;/i&gt;56 seconds.   &lt;br /&gt;&lt;i&gt;Time to desktop: &lt;/i&gt;1 minute 20 seconds.   &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/span&gt;   &lt;br /&gt;That's it! We met out stated goal to keep the build as lightweight and uncluttered as possible in order to improve performance and reduce the support burden of laptop rebuilds. This system is not much more than a hypervisor, office client applications, web debugging tools and browsers. Keep in mind that I have been building an image that will be captured by WDS. A number of settings will be applied with an unattend file and some additional configuration will be taken care of by script, or manually post-deployment.   &lt;br /&gt;&lt;br /&gt;Acute observers will note that I haven't actually added the Hyper-V role. That's because Hyper-V doesn't get along well with SysPrep. We account for that with WAIK and scripting, as revealed in more detail in my next post.   &lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://tristanwatkins.com/?p=503"&gt;posted&lt;/a&gt; on Tristan's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-6988954376016419995?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/building-sharepoint-20072010_09.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-6525338000324912495</guid><pubDate>Fri, 06 Nov 2009 13:50:00 +0000</pubDate><atom:updated>2009-11-06T13:51:15.818Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Geographically Distributed</category><category domain='http://www.blogger.com/atom/ns#'>Deployment</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>Geographically distributed deployments of SharePoint 2010</title><description>&lt;i&gt;Tobias Lekman, Technical Architect &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;SharePoint 2010 brings a large amount of improvements for geographically distributed SharePoint installations.&lt;br /&gt;&lt;br /&gt;SharePoint deployments can be categorized in the following segments:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Uni-centric deployments&lt;/b&gt;&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;SharePoint is installed on a single data centre with a geographically dispersed user base. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Multi-centric deployments&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;SharePoint is installed on multiple data centres across regions/continents and clustered user bases close to the data centres. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Hybrid deployments&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;SharePoint is installed on multiple data centres with a geographically dispersed user base.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Globally dispersed users can be categorized into the following segments:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Local/LAN users&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Users with high bandwidth, 1mb connections and up and low latency at less than 50ms per roundtrip &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Continental latency&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Users with high bandwidth (ADSL, cable) but higher latency at up to 125ms per roundtrip &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Global users&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Users with high bandwidth but with even higher latency at up to 300ms per roundtrip &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Low bandwidth users&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Users in developing countries, satellite links, mobile connections. These users would have low bandwidth and very high latency – too disperse to estimate&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Out of these figures we can estimate WAN performance. These figures show degradation in time for the first page to load (PLT1) over different segments assuming that LAN users are the starting point at X seconds:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="1" cellpadding="2" cellspacing="0" style="width: 574px;"&gt;&lt;tbody&gt;&lt;tr&gt;  &lt;td valign="top" width="133"&gt;&lt;b&gt;Segment&lt;/b&gt;&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="133"&gt;&lt;b&gt;PLT1&lt;/b&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td valign="top" width="306"&gt;&lt;b&gt;Example&lt;/b&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td valign="top" width="133"&gt;LAN&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="133"&gt;X&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="306"&gt;3 seconds&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;   &lt;td valign="top" width="133"&gt;Continental&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="133"&gt;2X-4X&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="306"&gt;6 to 12 seconds&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td valign="top" width="133"&gt;Global&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="133"&gt;4X-8X&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="306"&gt;12 to 24 seconds&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td valign="top" width="133"&gt;Low band&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="133"&gt;??&lt;br /&gt;&lt;/td&gt;  &lt;td valign="top" width="306"&gt;Very hard to estimate&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;SharePoint 2007 deployments&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The vast majority of SharePoint 2007 deployments used the uni-centric deployment as network related issues were too great to overcome. This is due to the nature of a farm, where all servers communicate with each other as a “single entity”. The farm has a “shared services provider” which is a site on the farm that contains services that are shared between web applications on the farm. These include searching and user profile storage and management. &lt;br /&gt;&lt;br /&gt;SharePoint 2007 can be installed over separate databases during a global deployment so that team/department site databases can reside closer to its intended user base, but the shared services and farm configuration database must still be shared. This causes a lot of communication over global connections and keeping these at high speed and low latency is both costly and difficult.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;New capabilities in SharePoint 2010&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Cross-farm/multiple instance Shared Services&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The “shared service provider” is not obsolete. Services are provisioned per web application and can be hosted either on the same farm or on a remote or “master” farm. The services can also be configured in multiple instances (for simultaneous access over load balancing) or customised per web application. Remote shared services, i.e. published services, also involve caching between farm instances for performance optimization. The most common shared services are user profile storage, managed meta data services (farm/cross farm shared content types and taxonomy), search and BDC/BCS connectivity services. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Uninterrupted log shipping&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Creates read-only farms by using SQL log shipping of the entire farm. This can be very useful for creating local copies of content for users on remote continents. Log shipping sends a diffs (differential data packets) of the data and is therefore very fast. As an added bonus, you can use the read-only farm as a disaster recovery platform where you can turn off the read-write farm and make the read only farm the master read-write farm. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;FSSHTTP&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;This catchy acronym stands for “File Synchronization via SOAP over HTTP” and works by reading/writing diffs between the SharePoint server and Office 2010. When reading a file, a checksum is sent to the server. If there are any changes, then only the change diff is downloaded to the end user. This will drastically reduce network usage when working with large documents and/or large numbers of documents. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;ODC&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Another acronym that stands for “Office Document Cache”. This application lives on the client machine and manages diff replication of documents between the client and the server. Normally, when saving a document, the Office application will wait for the document to finish saving. With ODC, the document is saved to the “save queue” and is synchronized in the background. This also allows for offline access of already opened documents as well as "offline saving”. Multi-master merges are solved by the ODC engine. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;SharePoint Workspace&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;This is the new version of “Groove”, an application that looks like any other Office application but contains an explorer-like view of the SharePoint data. You can synchronize documents and lists for offline viewing and editing. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Office Web Applications&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Documents can be viewed/previewed and edited directly in the browser using client script and AJAX. Not only does this mean that users do not need the full Office client on their local machine but it uses much less bandwidth. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Mobile Access View&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The mobile version of SharePoint has been vastly upgraded and now covers the entire site collection. It can be customized as in the previous version but also includes Office Web Applications. The mobile view can be used with standard browsers as well. Documents can be viewed as text only or as image snapshots. In a demonstration I saw a comparison of a document at 432kb using up only 14kb when viewed in mobile view. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Windows 7 Branch Cache&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;This works as a content proxy for any asset such as documents and images. Branch caching can work in peer-to-peer mode, where computers in the workgroup are queried for a document before going to the server. You can also install a dedicated branch cache server using Windows 2008 R2 on the network. The branch cache is again diff aware and can greatly increase performance on satellite worker hubs.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;[Also &lt;a href="http://blog.lekman.com/2009/11/geographically-distributed-deployments.html"&gt;posted &lt;/a&gt;on Tobias' personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-6525338000324912495?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/geographically-distributed-deployments.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-9095634218604294670</guid><pubDate>Thu, 05 Nov 2009 10:33:00 +0000</pubDate><atom:updated>2009-11-05T10:33:54.108Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>Windows Server 2008 R2</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><category domain='http://www.blogger.com/atom/ns#'>Hyper-V</category><title>Building a SharePoint 2007/2010 development environment – Part II: Design</title><description>&lt;i&gt;Tristan Watkins, Infrastructure Consultant&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;In the &lt;a href="http://community.contentandcode.com/2009/11/building-sharepoint-20072010.html"&gt;first part of this series&lt;/a&gt;, I introduced the pros and cons of various SharePoint development approaches and the objectives of this system redesign. In this part I will focus on design choices and conclusions, starting with the core technology.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Why we’ve chosen Hyper-V&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;There are broadly five decisive factors: performance, management features (like snapshots), cost, 64-bit OS support and a full host OS (not just a virtualisation administration console):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hyper-V is now in its second iteration and has proved to be one of the best-performing virtualisation technologies on the market. With laptops we need to take advantage of every performance gain that we can find. &lt;/li&gt;&lt;li&gt;Perhaps most importantly, and most often overlooked, Hyper-V is free if you're already running Windows Server 2008 or Windows Server 2008 R2as a client OS &lt;/li&gt;&lt;ul&gt;&lt;li&gt;While I work for a Microsoft Gold Partner and Hyper-V is a key part of Microsoft’s future strategy (full disclosure), I believe that most SharePoint developers will have at least an MSDN subscription and a license for a Windows Server operating system, so I believe this is compelling for most SharePoint development environments &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Hyper-V is one of the few virtualisation technologies that supports 64-bit guest operating systems and within that narrow range of choices, it is one of the few that allows a user to log on to a host machine and control virtual machines within it concurrently &lt;/li&gt;&lt;ul&gt;&lt;li&gt;For instance, VMware ESXi is also a high-performance Type-1 hypervisor that supports 64-bit operating systems, but there is no host machine other than a virtualisation administration console &lt;/li&gt;&lt;ul&gt;&lt;li&gt;It also has associated costs (support, management tools, etc) that we would prefer to avoid &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;With Windows Server 2008 R2 and Hyper-V, developers can use client tools within a familiar operating system while accessing virtual development environments at the same time &lt;/li&gt;&lt;ul&gt;&lt;li&gt;This is also true of VMware Workstation, but it's a Type-2 hypervisor and will have relatively poor performance &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;We need to have 64-bit OS support for Windows Server 2008 R2 and SharePoint 2010 - both of which do not have 32-bit flavors &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Our approach&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Workgroup development&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;By building our virtual machines in a Workgroup, we no longer need to worry about SharePoint installation/(re)configuration difficulties, as we will import the same identical virtual machine on everyone’s Hyper-V host. This would not be possible if the virtual machine was a member of a centralised domain because the domain controller would receive chatter from many identical machines and everything would quickly start to unravel&lt;br /&gt;&lt;br /&gt;Alternately, we could run Active Directory Domain Services within a virtual machine, but this has a performance overhead that is best avoided unless it is absolutely necessary. Additionally, developing on a domain controller is not ideal&lt;br /&gt;&lt;br /&gt;While developing in a Workgroup presents challenges for profile imports, these are far from insurmountable when LDAP directories like AD LDS or SQL users can substitute in many scenarios. The only evident need is a scenario where Active Directory Domain Services (more than just user accounts) are required, and that's certainly not going to be true of enough projects that it should form a part of the base build. To this end, as requirements for Domain Services are identified we will provide new builds, as they are likely to be very project-specific&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Networking&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Internet Connection Sharing network&lt;/b&gt;&lt;br /&gt;In order to isolate identical virtual machines from each other and from network resources, I've created a Hyper-V internal network dedicated to receiving Internet Connection Sharing (ICS) from one of the host's active network connections. This is an internal network like any other Hyper-V internal network - it just so happens that the host's adapter on this network will be receiving ICS from another of the host's connected adapters. Any connection can share to the ICS network - even if Hyper-V doesn't natively support external networks of that type. Depending on the need, we will share to this ICS network from:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hyper-V host external connections (by default) &lt;/li&gt;&lt;li&gt;Wireless &lt;/li&gt;&lt;li&gt;Mobile broadband &lt;/li&gt;&lt;li&gt;VPN &lt;/li&gt;&lt;/ul&gt;ICS also introduces a layer of NAT between the guests and the physical network, preventing inbound connections to guests over these networks. This is desirable as it is how we achieve physical network isolation, and is the reason why we've chosen ICS over Bridging. In the ICS Settings we enable outbound RDP, HTTP and HTTPS connections over ICS by default, although it may be useful to enable other common outbound network protocols like FTP and SMTP. Outbound connectivity from our guest virtual machines is primarily used for connecting to TFS over HTTPS.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Internal network&lt;/b&gt;&lt;br /&gt;We have also created a Hyper-V Internal network to support "always on" communication between the host machine and the guest virtual machines. Guest virtual machines can also communicate with each other over this network.&lt;br /&gt;&lt;br /&gt;We cannot rely solely on the ICS connection. Guest virtual machine IP addresses on the ICS network will change because they receive them via DHCP from the host's ICS connection. This is just how ICS works. The host's ICS adapter becomes a gateway on 192.168.137.1. Any Hyper-V guests on that network pick up DHCP from the host and are automatically assigned an address on the 192.168.137.xxx (255.255.255.0) IP range.&lt;br /&gt;&lt;br /&gt;As we rely on HOSTS file entries for RDP connections from host to guest and for browsing to guest SharePoint sites from the host, we need fixed, reliable IP routing and name resolution, so we use this second network for that purpose. The hosts and guests have both been built with fixed IP addresses on this range.&lt;br /&gt;&lt;br /&gt;Because this is a Hyper-V internal network, there is no risk of network collisions on these IP ranges (which are identical for all users). Internal traffic never leaves the machine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Project builds&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;By providing self-contained environments, our technical leads and/or architects can now customise the base builds to create project-specific virtual machines that can be exported to all members of a team, reducing system/configuration inconsistencies. In practice, the build lead/architect will export the final snapshot of the project environment, which all team members will use as a starting point for project development. As the project progresses, updated builds can be released in this same manner.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Clean hosts&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Host machines will be cleaned of development tools and data, allowing quick provisioning. Development tools will not need to be reconfigured, as they will reside in virtual machines that can be exported/imported to any host. Guest base build virtual machines will be provided with as much SharePoint configuration as possible in order to make them light on reconfiguration, disposable and re-deployable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Project resumption&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Project-specific exports will reduce the need for storage of multiple virtual machines - as much as possible. We will retain one virtual machine export in public storage per-project. This will reduce the amount of time involved with resurrecting environments after project completion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Optimisation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Host machines are built on Windows Server 2008 R2, optimised as much as possible and reduced to the lightest weight achievable. The build will broadly include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hyper-V R2 &lt;/li&gt;&lt;li&gt;Microsoft Office applications &lt;/li&gt;&lt;li&gt;All browsers &lt;/li&gt;&lt;li&gt;No development tools (these will all live in guest machines) &lt;/li&gt;&lt;ul&gt;&lt;li&gt;The only exception to this is the Team Foundation Client which TFS administrators manually install. We have not been able to pick domain users from within a Workgroup environment &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Content provisioning&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;By deploying a single project-specific virtual machine, we can bake content in to the project build, ensuring consistency and reducing the overhead associated with re-deploying content.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Improved testing and reduced volatility through the use of snapshots&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;By using snapshots we are able to test code and configuration changes without volatility. The benefits of this technology include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Capturing restore points at milestones in a server build &lt;/li&gt;&lt;li&gt;Capturing a stable state before attempting volatile configuration changes &lt;/li&gt;&lt;li&gt;Capturing a stable state before testing code changes &lt;/li&gt;&lt;li&gt;Creating an initial restore point after importing a virtual machine and re-configuring network adapters (when required) and making other preferential settings &lt;/li&gt;&lt;ul&gt;&lt;li&gt;This saves re-importing and reconfiguring network adapters if a machine needs to be rolled back to its initial state &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Exporting a virtual machine to capture a problem when trouble occurs &lt;/li&gt;&lt;ul&gt;&lt;li&gt;An exact instance of a problem can be captured and shipped out for support, without having to re-create the problem in a distinct environment. This will only apply tot self-contained environments, however &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Local source code storage on the host machine&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Before our pilot started we identified that storing the local copies of source code within changing snapshot states could create problems. At the same time, we found it desirable to put the development tools inside our virtual machines in order to get around remote SharePoint development difficulties and to keep the host build uncluttered. To resolve this conflict, we adopted this approach:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Created a share on the host machine and granted ownership of that directory to a new user account that is used solely for this purpose &lt;/li&gt;&lt;li&gt;Created a new user account with the same name and password in the guest virtual machine &lt;/li&gt;&lt;li&gt;Mapped a drive from the guest to the host's new share, using the internal network's IP address and these new credentials &lt;/li&gt;&lt;li&gt;Launched Visual Studio and downloaded project source code, pointing to the newly mapped drive as the location for the local source &lt;/li&gt;&lt;li&gt;Created a new Code Group for the mapped drive to enable trust for code execution &lt;/li&gt;&lt;/ul&gt;These steps are covered in more detail in the build guides that will follow in later posts. This is just an outline of the approach to extracting the local code from the snapshot state, which should be adaptable to other development systems with snapshots. For instance, we've found it necessary to download code to a unique location within this directory for each each user, as TFS tracks the network locations that code is checked out to. This is easy to get around, as each user just specifies a unique directory name. If this were insufficient for project requirements, this TFS behaviour could possibly be "fooled" by using NTFS junction points. We've not seen a need for this yet, but we're confident that with this additional option we should be able to store local source code in this manner, and this has been validated by our project experience with Hyper-V to-date.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;These are the high-level design choices that emerged early in the consultancy and research, which have remained largely unchanged to-date. These choices represent one design that has been validated for our needs, which has some shortcomings like any approach. Some of these issues will be covered in the final post in this series.&lt;br /&gt;&lt;br /&gt;The information in this post has not covered implementation in any detail, but do not fret. In the next section I will cover the step-by-step build guide for the Hyper-V host laptop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-9095634218604294670?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/building-sharepoint-20072010_05.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-1266416774129980683</guid><pubDate>Wed, 04 Nov 2009 13:48:00 +0000</pubDate><atom:updated>2009-11-04T13:54:31.121Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>Windows Server 2008 R2</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2007</category><category domain='http://www.blogger.com/atom/ns#'>Hyper-V</category><title>Building a SharePoint 2007/2010 development environment – Part I: Introduction and Objectives</title><description>&lt;i&gt;Tristan Watkins, Infrastructure Consultant&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Over the last few months I've led the consultancy and system design for a SharePoint 2007/2010 development environment built on Hyper-V in Windows Server 2008 R2. This series of six posts will reveal the key decisions and will consolidate recommendations from a broad range of research and guidance. This first post offers a technology-agnostic introduction to the problem, pros and cons of alternative approaches and what we hoped to achieve with the new approach. The design decisions will be covered in more detail in the second post, followed by a deeper look at detailed build guidance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Historical development approaches&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;We have used a variety of development approaches in the past, which have all had limitations and were often an obstacle to productivity. They included:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Shared development farms&lt;/b&gt;&lt;br /&gt;Shared farms are appealing at face value because they put development resource hunger on beefier infrastructure. However, there are considerable drawbacks to this approach, including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The infrastructure burden of these environments is immense&lt;/li&gt;&lt;li&gt;Due to limited physical resources, these servers housed multiple projects in a single farm, leading to hive pollution and a less reliable/predictable development environment&lt;/li&gt;&lt;li&gt;When multiple developers would use the same farm, this would amplify resource contention on already strained servers and it made managing application-level change much more difficult&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Local development&lt;/b&gt;&lt;br /&gt;Developing SharePoint directly on a Windows Server 2008 laptop introduced a need for frequent laptop rebuilds, as the SharePoint customisations for one project rarely carry over to another and the hive gets polluted. This adds a hefty support burden and frequent down-time for developers.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Virtualised development using Virtual PC&lt;/b&gt;&lt;br /&gt;Virtual PC is a friendly technology for SharePoint developers to use, as it does not over-complicate virtualisation, but the management functionality (such as snapshots and snapshot export) is inflexible and performance is poor when compared to a Type-1 hypervisor.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Third-party virtualisation technologies&lt;/b&gt;&lt;br /&gt;Most third-party technologies have associated license costs for businesses and many do not support virtualisation of 64-bit guest operating systems. This is problematic because:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows Server 2008 R2 is only available in 64-bit&lt;/li&gt;&lt;li&gt;SharePoint 2010 is only available in 64-bit&lt;/li&gt;&lt;/ul&gt;Additionally, many developers have strong preferences for third-party virtualisation vendors and if this is not controlled/standardised it can introduce incompatibility issues.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why none of these approaches were satisfactory&lt;/b&gt;&lt;br /&gt;In short, these environments did not offer good enough performance or management flexibility and we needed a standardised approach for business continuity. We also needed a technology that would support 64-bit systems.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;SharePoint development complications&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;SharePoint development in teams has always been tricky, as SharePoint virtual machines cannot be easily cloned and renamed. This means that SharePoint environments require:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Scripted installation, which is great for standard builds, but not terribly easy to reconfigure for project-specific requirements, or...&lt;/li&gt;&lt;li&gt;Manual installation, which is time-consuming and not always aligned with a developer’s skill set, or...&lt;/li&gt;&lt;li&gt;Shared environments, which suffer from the drawbacks outlined above, or...&lt;/li&gt;&lt;li&gt;Network isolation of the cloned machine so that that nothing on the network will ever be aware that there are clones&lt;/li&gt;&lt;/ul&gt;These are some of the biggest issues that need to be confronted when designing a SharePoint development environment. This list is by no means exhaustive; in the final post in this series I'll be reviewing some of the issues that we've encountered during a pilot and subsequent roll-out to all of our developers, consultants and architects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Distilled objectives&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;After a thorough review of development approaches, difficulties and available technologies, a Windows Server 2008 R2 (RC) with Hyper-V pilot was announced, soliciting senior developer/architect participation, stating the following aims:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Improve performance over Virtual PC by adoption of a new core virtualisation technology&lt;/li&gt;&lt;li&gt;All available performance guidance for hardware, Windows, IIS, SQL and SharePoint would be considered for inclusion in the build&lt;/li&gt;&lt;li&gt;Hyper-V R2 was adopted early for the pilot (at Release Candidate) to take advantage of further performance gains in the new version&lt;/li&gt;&lt;li&gt;Project cost effectiveness would be improved by: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Removing development tools and SharePoint from the host machine, reducing the amount of reconfiguration on laptop rebuild and reducing rebuild requests&lt;/li&gt;&lt;li&gt;Providing a suite of pre-configured virtual environments, reducing setup time at project commencement&lt;/li&gt;&lt;li&gt;Making project-configured environments reusable within teams throughout the life of the project with Hyper-V’s snapshot technology&lt;/li&gt;&lt;li&gt;Eliminating the infrastructure burden of shared development farms and re-provisioning those resources to better purpose&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Improve the testing process by introducing snapshots&lt;/li&gt;&lt;/ul&gt;In conjunction with the pilot we upgraded physical disk speed and capacity from 160GB 5400 RPM drives to 300GB 7200 RPM, as Hyper-V snapshots chew up lots of space, and the added spindle speed is critical to improving performance.&lt;br /&gt;&lt;br /&gt;Defining these objectives, limiting the duration of the pilot and testing the new approach were critical to gaining management support for the project. In advance of pilot deployment I trained all pilot participants on Hyper-V and introduced our approach to networking and source code storage, which would not be obvious otherwise.&lt;br /&gt;&lt;br /&gt;In the next section I will cover the design decisions that were reached through consultancy with the business, pilot findings and research.&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://tristanwatkins.com/?p=497"&gt;posted &lt;/a&gt;on Tristan's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-1266416774129980683?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/11/building-sharepoint-20072010.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-6823123298783052633</guid><pubDate>Thu, 29 Oct 2009 11:51:00 +0000</pubDate><atom:updated>2009-10-29T11:51:24.901Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>OpenXML</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>Excel Services</category><title>I'm in love...with the new OpenXML SDK!</title><description>&lt;em&gt;Tobias Lekman, Technical Architect&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I have spent the last couple of weeks creating a Word report based on SharePoint data that spans over a hundred pages using tables and custom graphs.&lt;br /&gt;&lt;br /&gt;To do this, I used OpenXML. The file format (.docx) is basically a ZIP file containing a bunch of XML files. I did this using LINQ, XSLT and System.IO.Packaging to compress and order the XML sections into a .docx file. The OpenXML SDK version 1 allows you to manage the packaging side and relationships of the “parts” (XML files). &lt;br /&gt;&lt;br /&gt;The new SDK allows you to manage the entire document directly using LINQ which would have bypassed my 60+ XSLT library that I had to create for the original conversion to work. The structure of the program would have been the same but could have saved me a lot of code lines!&lt;br /&gt;&lt;br /&gt;When creating OpenXML documents you often end up with corruption. The file is missing a relationship between a diagram and the underlying data, an ID of a part is repeated and so forth. Opening the file in Word will give you a nasty error without any detailed information and&amp;nbsp;you are left to open the document and manually figure out where the corruption could have occurred. The SDK now contains a class called OpenXmlValidator which will validate the entire package and give you a detailed error report. Again, this could have saved me hours and hours of debug time.&lt;br /&gt;&lt;br /&gt;To make things even better, the SDK contains some fantastic tools. My favourite is the Document Reflector which opens an OpenXML document from a template and will give you the full code for how to generate that document using the SDK. Now, I don’t even want to begin to estimate how much time THAT would have saved me.&lt;br /&gt;&lt;br /&gt;As a final nail in my coffin, SharePoint 2010 introduces &lt;a href="http://msdn.microsoft.com/en-us/library/ee556413(office.14).aspx"&gt;REST for Excel Services&lt;/a&gt;. My report contained 50+ graph reports which had to be created using 6 different XML parts. This can now be done by inserting the graph generated directly by Excel Services using SharePoint 2010.&lt;br /&gt;&lt;br /&gt;The final version of the new SDK will be released together with Office 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-6823123298783052633?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/im-in-lovewith-new-openxml-sdk.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-2909820788867662981</guid><pubDate>Wed, 28 Oct 2009 14:19:00 +0000</pubDate><atom:updated>2009-10-28T14:19:25.977Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>Visio Services</category><title>Data Sources and Features in Visio Services</title><description>&lt;em&gt;Zane Freame, Product Manager&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Following on from my earlier post, &lt;a href="http://community.contentandcode.com/2009/10/visio-services-in-sharepoint-2010.html"&gt;Visio Services in SharePoint 2010&lt;/a&gt;, I wanted to delve a little deeper into how this new Shared Service works. Microsoft have been working hard to create a great framework for creating your own data driven visualisation in SharePoint. Here's a high level look at how they're helping you do it.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;Diagrams can be published directly to SharePoint document libraries and either opened in the browser directly from the file, or published in full fidelity using a Visio Web Access web part. Both methods use Silverlight to render the diagram, and for those who don't have Silverlight, the diagrams can be published as a PNG image minus a few interactive features.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;According to the guys from Microsoft, the published diagrams are browser agnostic and will work in Internet Explorer, Firefox and Safari to name a few. Data can be refreshed manually or automatically with a variety of options in the web part to customise what users can see and do.&lt;br /&gt;&lt;br /&gt;Visio Services for SharePoint 2010 supports a variety of data sources including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQL (ODC) &lt;/li&gt;&lt;li&gt;Excel workbooks (via Excel Services) &lt;/li&gt;&lt;li&gt;SharePoint Lists&lt;/li&gt;&lt;li&gt;OLEDB &lt;/li&gt;&lt;li&gt;ODBC &lt;/li&gt;&lt;li&gt;Custom (not sure what this is yet, but I'm sure I'll find out soon!)&lt;/li&gt;&lt;/ul&gt;The features don't end there either. I haven't had a chance to build my own (yet!) but here are just a few of the features and tools that you can expect to see in the final product.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ability to pull data from multiple data sources on the same diagram &lt;/li&gt;&lt;li&gt;Zoom in/out functionality &lt;/li&gt;&lt;li&gt;Automatic refresh of data &lt;/li&gt;&lt;li&gt;JavaScript Mash-up API &lt;/li&gt;&lt;li&gt;Support for web part connections&lt;/li&gt;&lt;/ul&gt;One disclaimer... although you can still create diagrams in Microsoft Visio 2007, in order to publish them to SharePoint 2010, you will need Microsoft Visio 2010 installed on the client computer. Of course, users just viewing the diagrams in SharePoint will not require Visio installed.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;For more information about Visio 2010 visit the official Visio Blog on MSDN - &lt;a href="http://blogs.msdn.com/visio/"&gt;Visio Insights&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-2909820788867662981?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/data-sources-and-features-in-visio.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-8937638838362922173</guid><pubDate>Tue, 27 Oct 2009 12:03:00 +0000</pubDate><atom:updated>2009-10-28T14:22:57.568Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>SharePoint 2010: Architecture Guidance - things everyone should know!</title><description>&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;em&gt;Martin Hatch, Solutions Architect&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Well, the final day of the conference came and with it some of the most useful sessions (from my perspective). One of which was the "Architecture Guidance for SharePoint 2010". This hopefully distils some of that information. It's not a be all and end all, but hopefully points you in the right direction so that you can focus your research a little better!&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;UI Design&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Entire interface in SharePoint 2010 to be W3C XHTML compliant&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;SharePoint 2010 "more accessible mode" to be WCAG 2.0 AA compliant&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;New ribbon interface replaces toolbars and menus (and considerations for old "CustomAction" commands which may no longer work!)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Wiki content allows web parts to be dropped in (removing over-reliance on web part zones)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Lists&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;There are a whole load of new List capabilities (in addition to the "External List" that BCS brings to the plate!).&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Lookup to Multiple &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;This means that when you create a new lookup column, you can now pull down additional fields from the lookup list item and use them for filtering.&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;CAML support for Joins! &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;You can now perform "JOIN" operations in your CAML queries for linking lists together.&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Enforced List Relationships&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;You can now enforce specific relationships for lookup columns with two options:&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.75in; margin-top: 0in; unicode-bidi: embed;" type="circle"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Restrict Delete - cannot delete parent if child items exist.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Cascade Delete - If you delete the parent, all child items are automatically deleted (recycle bin aware with "restore" options!)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Store-level enforcement&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;This is code level "required fields", so now you can enforce the requirements even through code !&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Unique Fields&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;Specify a unique field, so that no two values can match (e.g. Email addresses in contacts list)&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Compound Indices&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;If you want to query by 2 fields, you can now index both at once as a compound index.&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;&amp;lt;In&amp;gt; clause for reverse lookups&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;This allows a CAML query to do a reverse lookup to get all child items that are associated with the parent!&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Formula based validation&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;e.g. Don't allow Field2 to be lower than Field1.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Workflows&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Out of the box SharePoint 2010 workflows can now be extended in SharePoint Designer 2010.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;SharePoint Designer 2010 can be used to create "re-usable" workflows&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Site Workflows - to manage processes across an entire site.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;You can now import a SharePoint Designer 2010 workflow into Visual Studio 2010!&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Import/Export workflow using Visio 2010 for visual workflow modelling.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Content &amp;amp; Document Management&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;"Document Sets" allow you to treat a group of documents as a single item (with 1 version history, group executed workflow and policy, and a "download as zip" option).&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Managed Metadata Service&amp;nbsp; allows &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 11pt; font-weight: bold;"&gt;cross-farm Content Type management&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;. This is a killer-app, bringing true enterprise content management to SharePoint 2010.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Enterprise Wiki's allow more rapid "in edit" content, as well as Web Parts deployed directly into the rich text editor (no more web part zones?).&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Spelling check and broken link check when you "check-in" WCM pages.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Event Handlers&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;Three new event handlers added (at last!!)&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;WebAdded - Fired every time a child site is created in the web.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;ListAdded - Fired every time a list is created in the web.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Feature Upgrading&amp;nbsp; - Fired when a feature has it's "upgrade" method called (more on this in a future blog post).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Security&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Editing of ASPX pages now required "Designer" permissions (instead of contribute).&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;XSS (Cross Site Scripting) protection for pages and web parts.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;HTML pages will now "force download" by default. This stops people from uploading HTML files with malicious scripts, so if you click on an HTML file in a document library you will get a download dialog instead of the file opening in the browser!&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;There are still no field level permissions (it was estimated that this would add a 30% overhead to performance! Maybe in a future release)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;BI and Connectivity&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;New Business Connectivity Services (BCS) allows no-code connections of databases and LOB systems to content types and lists with two-way synchronisation of data&amp;nbsp; and full CRUD support.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;PowerPivot for Excel allows upwards of 100 million rows into an excel workbook with phenominal performance.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Office Application Support&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;New web level services for applications (Excel / Visio with JavaScript events!)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;SharePoint Workspace to replace "Groove" for offline file support and editing.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Office Web Applications to allow for direct opening and &lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 11pt; font-weight: bold;"&gt;editing&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt; of documents from within the browser!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Databases&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Still a 100GB "limit" for content databases.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Still cannot have site collections spanning multiple databases.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;New support for "Failover" databases, SharePoint 2010 is now SQL mirror aware!&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;All "Service Applications" have their own SQL database, along with many other new databases (e.g. Feed Activity, Social Data, Usage Logs).&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;New "read only content databases" open the door for simple content deployment (utilising SQL log shipping or database replication).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Content Deployment&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;All execution now in Timer Jobs.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Performance (and memory usage) improved.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Export routine now creates database snapshot to improve data integrity!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in 0in 0in 0.375in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 12pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Sandboxed Solutions&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="direction: ltr; margin-bottom: 0in; margin-left: 0.375in; margin-top: 0in; unicode-bidi: embed;" type="disc"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Ability to upload WSPs directly into the content database to execute in minimal permissions using "virtual files" (no impact on the file system!)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Resource throttling, code performance checking and "bad routine" blocking&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px; vertical-align: middle;"&gt;&lt;span style="font-family: Calibri; font-size: 11pt;"&gt;Provides new best practice for code development and deployment!&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;I'm sure there are many other things, so please let me know if there's anything else you think should "make the grade" and I'll see if I can add it in :)&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://mkeeper.spaces.live.com/blog/cns!60F12A60288E5607!487.entry"&gt;posted&lt;/a&gt; on Martin's personal blog]&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-8937638838362922173?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/sharepoint-2010-architecture-guidance.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-3003125414775725694</guid><pubDate>Wed, 21 Oct 2009 06:25:00 +0000</pubDate><atom:updated>2009-10-26T15:06:01.755Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>My Sites</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>My Site 2010 Profile Pictures Centrally Managed</title><description>&lt;em&gt;Glyn Clough, Solutions Consultant&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Responding to what most surely be one of the most common questions and requests from users of previous SharePoint My Sites, Microsoft have updated the manner in which profile pictures are managed within SharePoint 2010 My Sites (actually the User Profile Database).&lt;br /&gt;&lt;br /&gt;The key areas of the new approach are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pictures are now stored centrally within the My Site Host site collection in a picture library located http://host/userphotos.&lt;/li&gt;&lt;li&gt;Pictures are resized three ways when uploaded:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;32x32 pixels for use within SharePoint 2010&lt;/li&gt;&lt;li&gt;48x48 pixels for use within Active Directory and other client applications (such as Outlook and Office Communicator)&lt;/li&gt;&lt;li&gt;96x96 pixels for use on the My Profile page of a My Site&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;The Picture Picker can be customised or replaced to support feature such as requesting usage consent or providing default images.&lt;/li&gt;&lt;/ul&gt;Managing profile pictures was a common headache in SharePoint 2007 and given all the new social features of SharePoint 2010, it's great news that this has been addressed.&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://glynclough.blogspot.com/2009/10/responding-to-what-most-surely-be-one.html"&gt;posted&lt;/a&gt; on Glyn's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-3003125414775725694?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/my-site-2010-profile-pictures-centrally.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>4</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-4168657441551850959</guid><pubDate>Tue, 20 Oct 2009 23:28:00 +0000</pubDate><atom:updated>2009-10-21T17:08:45.486+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>SharePoint 2010 brings versioning to Web Parts</title><description>&lt;em&gt;Tobias Lekman, Technical Architect&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In the upcoming release of SharePoint Server 2010 we will see versioning of web parts and their properties. &lt;br /&gt;&lt;br /&gt;Why is this important?&lt;br /&gt;&lt;br /&gt;In the past we had full versioning and approval workflows around the contents of items and pages but any change to web parts and their properties were instantaneous. This caused a lot of confusion and aggravation as web parts, their configurations and content were lost irretrievably when users made changes to them.&lt;br /&gt;&lt;br /&gt;All web parts within the page are now fully version controlled with the rest of your page and will not require any additional code within the web part itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-4168657441551850959?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/sharepoint-2010-brings-versioning-to.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-3596386234506947962</guid><pubDate>Tue, 20 Oct 2009 23:13:00 +0000</pubDate><atom:updated>2009-10-21T17:04:58.600+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>Visio Services</category><title>Visio Services in SharePoint 2010</title><description>&lt;em&gt;Zane Freame, Product Manager&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;As many of my colleagues will testify, I've had a long love affair with Visio. It started when I was at University in Melbourne over 12 years ago. I stumbled across a free student version in a local computer store and from that point forward I've been creating all my flowcharts, processes, layouts and many other diagrams in Visio. In fact, in every job I've had, I've found a new application for the product. Content and Code has been no exception. On my first day I discovered that the team were already using Visio to create quick and easy wireframes...so I then went about creating new templates and stencils/shapes to meet our wireframing needs for website development.&lt;br /&gt;&lt;br /&gt;Visio is a brilliantly simple visual tool with advanced options for integrating with external data, but until now the missing link has been publishing to SharePoint.&amp;nbsp;Several years ago Content and Code developed a Visio Viewer web part for SharePoint 2003 which enabled users to view Visio diagrams in a SharePoint page provided they had the Visio Viewer add-on installed on the machine. Although that was a great option for many companies, it was no holy grail either.&lt;br /&gt;&lt;br /&gt;With Excel Services bringing the power of publishing spread sheets and charts to SharePoint, it was only a matter of time before Microsoft decided to do the same with Visio. Well, there's no more waiting... Visio Services is here! What's more they've packed it with great data interaction features which will blow your socks off! Trust, me if you're a visual person like me, Visio Services for SharePoint 2010 is your bag of fun and will take your Visio diagrams to the next level.&lt;br /&gt;&lt;br /&gt;From the slides, Microsoft are proud to point out that with Visio Services for SharePoint 2010 you can:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Share Diagrams in SharePoint &lt;/li&gt;&lt;li&gt;Build Data Driven Visualisations &lt;/li&gt;&lt;li&gt;Integrate with SharePoint Applications&lt;/li&gt;&lt;/ul&gt;But what does this mean?&lt;br /&gt;&lt;br /&gt;I think the best way to explain this is with some real-life examples which most of you would have come across in the past.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A restaurant seating plan indicating which tables are availble before you make a reservation.&lt;/li&gt;&lt;li&gt;Flight seating plan to check which seats are available when you check-in online.&lt;/li&gt;&lt;li&gt;Elections results on a map (e.g. votes per state/county) - picture the election TV broadcast with data presented in blue or red areas on a map with bar graphs and numbers indicating which political party is winning the election race.&lt;/li&gt;&lt;/ul&gt;These are just a few examples that are out there which you could easily reproduce in Visio Services with little or no development.&lt;br /&gt;&lt;br /&gt;It's clear to see the benefits of visualising data in this way, and now with Visio Services we can combine data in SharePoint and other data sources with our Visio diagrams and publish them to SharePoint.&lt;br /&gt;&lt;br /&gt;The presenters here at the SharePoint Conference had plenty of other great examples to demonstrate during the sessions I attended (factory floor plans, manufacturing cycles, hotel vacancies, insurance loss per state, ski lift status etc.) proving that the opportunity with Visio Services is only limited by your visual imagination.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-3596386234506947962?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/visio-services-in-sharepoint-2010.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-5854414051526164232</guid><pubDate>Tue, 20 Oct 2009 20:09:00 +0000</pubDate><atom:updated>2009-10-21T16:56:07.434+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>Silverlight</category><title>Silverlight and SharePoint 2010</title><description>&lt;em&gt;Jason Visser, Technical Architect&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Development of Silverlight and SharePoint has always been very painful however with SharePoint 2010 Silverlight integration has been simplified greatly.&lt;br /&gt;&lt;br /&gt;Why use Silverlight instead of other technologies:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It is easier to build for .NET developers as it uses a common language.&lt;/li&gt;&lt;li&gt;Less browser compatibility issues - either the Silverlight app renders or it does not.&lt;/li&gt;&lt;li&gt;More powerful animations, algorithms and a rich development API.&lt;/li&gt;&lt;li&gt;Very powerful client integration, e.g. out of browser support, offline mode, multi touch and access to the local file system. &lt;/li&gt;&lt;/ol&gt;Silverlight should not be used everywhere and samples of that would be:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;When you need to capture or render rich text or html. &lt;/li&gt;&lt;li&gt;When there is large amounts of content that will be paginated and referenced by URL's. &lt;/li&gt;&lt;/ol&gt;There are 4 main ways to develop Silverlight applications with SharePoint 2010 (these can all be combined if required):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Read and Write to SharePoint using Web Service's. &lt;/li&gt;&lt;li&gt;Read and Write to SharePoint using the new client object model. &lt;/li&gt;&lt;li&gt;Read and Write to SharePoint using REST &lt;/li&gt;&lt;li&gt;Load data from SharePoint by rendering data on the page. &lt;/li&gt;&lt;/ol&gt;My current preferences would be using REST and the new client object model to read and write to SharePoint.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Silverlight and Web Service integration&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;SharePoint has always shipped with built-in web services. These include reading and writing to different areas of SharePoint 2007. SharePoint 2010 is no exception and it too ships with various web services.&lt;br /&gt;&lt;br /&gt;A quick sample of the type of web services available would be getting lists, list items, sites, navigation, security and search. The exposed web services all make use of the in-built SharePoint security trimming.&lt;br /&gt;&lt;br /&gt;If you do not find a web service that works for you, you can build your own web service and call that from your Silverlight application. When developing Silverlight applications using these web services, you will be using asynchronous execution and will be retrieving your result in xml form. These results can then be interpreted and manipulated using various different .net technologies. My favourite would be XLINQ which was the preferred method for reading and writing to SharePoint 2007.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Silverlight and the Client Object Model&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;New for SharePoint 2010 is the Client Object Model. The client object model for Silverlight is basically a subset of some of the objects that were previously not available to be used by the Silverlight API. &lt;br /&gt;&lt;br /&gt;Object's available from the Silverlight client object model include:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Site&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Web&lt;/li&gt;&lt;ul&gt;&lt;li&gt;ContentType&lt;/li&gt;&lt;li&gt;List&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Form&lt;/li&gt;&lt;li&gt;View&lt;/li&gt;&lt;li&gt;Field&lt;/li&gt;&lt;li&gt;ListItem&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Folder&lt;/li&gt;&lt;ul&gt;&lt;li&gt;File&lt;/li&gt;&lt;ul&gt;&lt;li&gt;WebPart&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Navigation&lt;/li&gt;&lt;ul&gt;&lt;li&gt;NavigationNode&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;UserCustomAction&lt;/li&gt;&lt;li&gt;RoleDefinition&lt;/li&gt;&lt;li&gt;RoleAssignement&lt;/li&gt;&lt;li&gt;WorkflowAssosiation&lt;/li&gt;&lt;li&gt;WorkflowTemplate&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;The client object model uses asynchronous call's to read and write to the SharePoint site in batches. There are 2 assemblies that can now be found in the SharePointRoot\14\template\layouts\clientbin folder that include the object described above. The client object model uses a context similar to the SPContext object, this is called the ClientContext. An example of how to code using this model is:&lt;br /&gt;&lt;br /&gt;ClientContext context = ClientContext.Current();&lt;br /&gt;Web = context.web;&lt;br /&gt;context.load(web);&lt;br /&gt;context.load(web.lists);&lt;br /&gt;context.ExecuteQueryasync(this.ExecuteMethod, null);&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Silverlight and REST&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You can read and write to SharePoint using REST which creates strongly typed object using the REST services. It allows you to code against SharePoint using OOP and ATOM-based means. This and the client object model are the preferred ways to communicate with SharePoint.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Silverlight and rendering data on the page as initialisation parameters&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is the oldest way of providing your Silverlight application with SharePoint data. Initiation Parameters can only read data from SharePoint using the Silverlight 'init params' method. Using this method you need to print out the data that you need to load into the Silverlight application. If there is a lot of data it will all need to be printed to the page / Silverlight object. This can be useful for initial Silverlight setups like theme settings and view settings, rather than loading up a default skin and waiting for the response from SharePoint to load up your initialisation parameters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-5854414051526164232?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/silverlight-and-sharepoint-2010.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-7549649922035772530</guid><pubDate>Tue, 20 Oct 2009 20:07:00 +0000</pubDate><atom:updated>2009-10-21T15:52:29.609+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>Development</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>Sandboxed Solutions</title><description>&lt;em&gt;Tobias Lekman, Technical Architect&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;One of the largest paradigm shifts for developers in SharePoint 2010 is the&amp;nbsp;introduction of “sandboxed solutions”.&lt;br /&gt;&lt;br /&gt;“A sandboxed solution is a new concept in Microsoft SharePoint Foundation that allows site collection users to upload their own custom code solutions. A sandboxed solution uses a subset of the Microsoft.SharePoint namespace. These objects are marked in the object model to show their availability in a sandboxed solution”&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://msdn.microsoft.com/en-us/library/ee539083(office.14).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee539083(office.14).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Simply put – you should always use a sandboxed solution until you can prove that a sandboxed solution is not sufficient to get the job done.&lt;br /&gt;&lt;br /&gt;A sandboxed solution works in the same way as a normal solution (farm level solution) but runs in minimal privilege mode. You cannot place files within the old “hive” but rather work with virtual files. It also runs within a separate process outside of the SharePoint application and communicates with SharePoint 2010 over a proxy.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;On the upside&lt;/strong&gt;: your code will not conflict with other custom solutions. On a shared environment this is a huge benefit. The system is also protected from bad code as detection of abnormal CPU, thread or memory usage will cause the component to be booted out of the system.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;On the downside&lt;/strong&gt;: It means more work for developers.&lt;br /&gt;&lt;br /&gt;When you need to access external systems, you will now write a “full-trust proxy” that is installed in GAC and made available to all sandbox solutions. This class will have a contract describing exactly what additional access the code can gain. For example, you can read information from a CRM database, but not add data nor access any other external database. &lt;br /&gt;&lt;br /&gt;This means less risk of installing third party and bespoke components, less need for code reviews and easy monitoring of software components.&lt;br /&gt;&lt;br /&gt;A common breakdown of your solution might be:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;List definitions, fields and content types (sandbox) &lt;/li&gt;&lt;li&gt;Code-only Web parts (sandbox) &lt;/li&gt;&lt;li&gt;Full-trust proxy solution with contract for access to read CRM (GAC) &lt;/li&gt;&lt;li&gt;Data layer for CRM (GAC)&lt;/li&gt;&lt;/ul&gt;For a complete architectural view of sandboxed solutions, see &lt;a href="http://msdn.microsoft.com/en-us/library/ee539417(office.14).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee539417(office.14).aspx&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-7549649922035772530?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/sandboxed-solutions.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-863585411232849122</guid><pubDate>Tue, 20 Oct 2009 13:59:00 +0000</pubDate><atom:updated>2009-10-26T15:07:01.971Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint Designer</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>Top 10 (+1) new things in SharePoint Designer 2010</title><description>&lt;em&gt;Glyn Clough, Solutions Consultant&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I attended a great session on day one of the SharePoint Conference by a guy called Asif Rehmani, MVP MCT. Asif is the co-founder of &lt;a href="http://sharepoint-videos.com/"&gt;SharePoint-Videos.com&lt;/a&gt; and a mixture of trainer and solution architect for SharePoint and perhaps it was this training background that helped him deliver such a fantastic session. I strongly recommend checking out &lt;a href="http://sharepoint-videos.com/"&gt;SharePoint-Videos.com&lt;/a&gt; as there is already SPD 2010 content up there! &lt;br /&gt;&lt;br /&gt;The introduction to SharePoint Designer 2010 was a demo of the top 10 cool new things that you can do in the product. Here they are:&lt;br /&gt;&lt;ol&gt;&lt;li value="10"&gt;&lt;strong&gt;Restrict SPD as needed&lt;br /&gt;&lt;/strong&gt;It's possible to set permissions at the web application or the site collection level as to who can use (and what they can do) SPD 2010.&lt;/li&gt;&lt;li value="9"&gt;&lt;strong&gt;New user experience with summary pages, ribbon and quick launch navigation&lt;br /&gt;&lt;/strong&gt;SPD 2010 has had a re-design along with the rest of office. The key element for me is that it is now a highly integrated experience with SharePiont. For example you can browse the content types and site columns available in a site direction from SPD.&lt;/li&gt;&lt;li value="8"&gt;&lt;strong&gt;Create SharePoint content&lt;br /&gt;&lt;/strong&gt;As you'd expect you can create new pages, sites, lists etc all from within SPD.&lt;/li&gt;&lt;li value="7"&gt;&lt;strong&gt;Configure site security &lt;br /&gt;&lt;/strong&gt;Previously it was only possible to configure the permissions of a site through the browser, but now SPD also provides this functionality. &lt;/li&gt;&lt;li value="6"&gt;&lt;strong&gt;Create new content types and attach to lists directly&lt;/strong&gt;&lt;/li&gt;&lt;li value="5"&gt;&lt;strong&gt;Create site assets to store files needed for the site &lt;br /&gt;&lt;/strong&gt;There's a new type of library called 'site assets' in SharePoint 2010 and this can be populated via SPD. Assets such as CSS, XML or JavaScript files can be stored here.&lt;/li&gt;&lt;li value="4"&gt;&lt;strong&gt;XSLT List View Web Parts... Everywhere! &lt;br /&gt;&lt;/strong&gt;A new web part for 2010 is the XSLT List View Web Part which is a mix of the old XSLT Data View Web Part and the List View Web Part from 2007. This provides fantastic functionality such as conditional formatting etc in a really well integrated web part - that can now also be configured via the browser.&lt;/li&gt;&lt;li value="3"&gt;&lt;strong&gt;Connect to data sources outside of SharePoint &lt;br /&gt;&lt;/strong&gt;Databases / XML files / Server-side scripts / Web Services are all external data sources that can be easily dropped into a page and presented to the user via SPD.&lt;/li&gt;&lt;li value="2"&gt;&lt;strong&gt;Create Business Connectivity Services external content types &lt;br /&gt;&lt;/strong&gt;The BCS is the evolution of the Business Data Catalogue and has been fully integrated into SPD. It's possible to quickly, with no code, link to an external data source (e.g. SQL) and present this information as an 'External Content Type' in SharePoint 2010. This can then be viewed and edited in SharePoint via a new list type 'External List'.&lt;/li&gt;&lt;li value="1"&gt;&lt;strong&gt;Create powerful reusable workflow &lt;br /&gt;&lt;/strong&gt;There are now three types of workflow available in SPD: List Workflows, Reusable Workflows, Site Workflows. The impressive thing is that SPD workflows now no longer need to be tied to a specific list in a specific site! They can also be saved out as a WSP or exported to Visio.&lt;/li&gt;&lt;/ol&gt;These are all fantastic features - and the implicit one in all of them is the great usability of SharePoint Designer. As with other areas of the SharePoint experience, there have been huge efforts at increasing productivity. It's obvious to see that its matured as a product,&amp;nbsp;to such a level that (pending further investigation!) I'd be comfortable recommending using SPD for day-to-day activities of site administration - on the production environment!&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://glynclough.blogspot.com/2009/10/top-10-1-new-things-in-sharepoint.html"&gt;posted&lt;/a&gt; on Glyn's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-863585411232849122?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/top-10-1-new-things-in-sharepoint.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-6252672914066437684</guid><pubDate>Tue, 20 Oct 2009 03:49:00 +0000</pubDate><atom:updated>2009-10-21T11:53:45.176+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><category domain='http://www.blogger.com/atom/ns#'>Accessibility</category><title>Standards compliant SharePoint - too good to be true?</title><description>&lt;em&gt;Martin Hatch, Solutions Architect&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Well it seems not. Microsoft have really pulled out all of the stops this time around, with standards compliant, cross browser compatibility and even accessibility hitting the conference headlines.&lt;br /&gt;&lt;br /&gt;The first item of note is that SharePoint 2010 aims to be W3C XHTML compliant. This is a massive leap towards making SharePoint 2010 a truly robust platform, worthy of both internet facing sites and global internal systems. &lt;br /&gt;&lt;br /&gt;I saw a demo of an embedded video in the Monday afternoon Web Content Management session where a video was streamed from a document library (another new SharePoint 2010 feature) and it was loaded in FireFox with no plugins or downloads, full screen streaming and buffering.&lt;br /&gt;&lt;br /&gt;But the biggest impact is bound to be around the statement that one of the major release goals for the SharePoint 2010 release is that the entire interface of SharePoint 2010 meets WCAG 2.0 AA compliance! This includes editing and authoring of content! This is absolutely massive, and represents a huge push from Microsoft to really respond to the community feedback that accessibility is a subject to be taken seriously.&lt;br /&gt;&lt;br /&gt;Of course, there is bound to be community discussions around the ideology that "compliant" is not the same as "accessible" (which we at Content and Code know all too well, having developed several fully accessible&amp;nbsp;SharePoint 2007 solutions for the Royal National Institute of Blind People ) but this is still a massive step forward and certainly shows a continuing respect of standards from Microsoft and good news for the future of compliant software.&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://mkeeper.spaces.live.com/blog/cns!60F12A60288E5607!474.entry"&gt;posted&lt;/a&gt; on Martin's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-6252672914066437684?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/standards-compliant-sharepoint-too-good.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-3997842756213917827</guid><pubDate>Tue, 20 Oct 2009 03:37:00 +0000</pubDate><atom:updated>2009-10-21T11:53:12.359+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>Key notes from the Keynotes</title><description>&lt;em&gt;Martin Hatch, Solutions Architect&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The keynote speeches contained a huge amount of content, but there were some standout points for me&amp;nbsp;that were worth condensing into a post...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One of the main aesthetic changes is that Windows SharePoint Services (WSS) is now called &lt;strong&gt;SharePoint Foundation 2010&lt;/strong&gt;. Hopefully more details about capabilities will surface during the conference.&lt;/li&gt;&lt;li&gt;There was much talk about &lt;strong&gt;SharePoint Online&lt;/strong&gt;. They apparently have over &lt;strong&gt;100,000,000 users&lt;/strong&gt; and the platform is updated quarterly with new functionality, so we can hope to see new SharePoint 2010 functionality in that creeping through once the RTM version of SharePoint is released.&lt;/li&gt;&lt;li&gt;The list item storage limits has gone &lt;strong&gt;WAY&lt;/strong&gt; up ... 1,000,000 items per folder/list and over 10,000,000 documents per library.&lt;/li&gt;&lt;li&gt;Another favourite was how &lt;strong&gt;Excel Services&lt;/strong&gt; in SharePoint 2010 allows you to expose excel data as REST feeds (such as charts, tables, images, pivot tables). This allows you to subscribe to an image URL which is actually being dynamically generated from the Excel 2010 spread sheet. The main focus here was that you can embed this image anywhere that a normal HTML or Office Client image can be placed, but if the Excel 2010 spread sheet data is modified then the image is automatically updated to reflect those changes!&lt;/li&gt;&lt;li&gt;Other highlights included forcing spelling checkers and broken link checkers on check-in of a page. In fact there was a lot of mention around web sites full stop, particularly 2 new products for websites: &lt;strong&gt;SharePoint Server 2010 for Internet Sites&lt;/strong&gt; and &lt;strong&gt;FAST Search Server for Internet Business&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The new Wiki Editing features were demonstrated with auto-complete URLs for lists, views and folders in libraries.&lt;/li&gt;&lt;li&gt;For those power users there are also over 500 new PowerShell commands for SharePoint 2010 which will be shipped with the Beta version in November. These can even be run on a Windows 7 machine and executed remotely!&lt;/li&gt;&lt;/ul&gt;But by far the most impressive part for me was the presentation on &lt;strong&gt;SQL Server PowerPivot for SharePoint 2010&lt;/strong&gt; and &lt;strong&gt;SQL Server PowerPivot for Excel 2010&lt;/strong&gt;. This is the product formerly known as "Gemini" and allows you to pull data in from SQL databases to allow up to 100,000,000 rows of data in Excel 2010! You can then filter, sort and produce charts which refresh near instantaneously! There was a demo of this in the session causing a round of applause from pretty much everyone.&lt;br /&gt;&lt;br /&gt;A very interesting session in the end, with glimpses of promise from all over the platform. I can't wait to get my hands on it!&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://mkeeper.spaces.live.com/blog/cns!60F12A60288E5607!472.entry"&gt;posted&lt;/a&gt; on Martin's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-3997842756213917827?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/key-notes-from-keynotes.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-1276745691660543543.post-8778818852614189417</guid><pubDate>Tue, 20 Oct 2009 03:02:00 +0000</pubDate><atom:updated>2009-10-26T15:08:31.108Z</atom:updated><category domain='http://www.blogger.com/atom/ns#'>SharePoint Conference 2009</category><category domain='http://www.blogger.com/atom/ns#'>SharePoint 2010</category><title>The strategic evolution of SharePoint</title><description>&lt;em&gt;Glyn Clough, Solutions Consultant&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;During his keynote session at the SharePoint Conference 2009 Jeff Teper, Corporate Vice President for SharePoint, showed an interesting PowerPoint slide from 1999 when Microsoft were first strategising about a new product that was to become SharePoint. The amazing thing is that 10 years later the key elements of the strategy set down then are now just as applicable now:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Provide a great integrated solution &lt;/li&gt;&lt;li&gt;Out of the box work spaces &lt;/li&gt;&lt;li&gt;Compelling Office integration &lt;/li&gt;&lt;li&gt;Easy and flexible deployment&lt;/li&gt;&lt;/ul&gt;The good news for all of us SharePoint professionals, and more importantly the millions of SharePoint end-users, is that this shows a consistent long-term approach to the product that has definitely helped shape where we find SharePoint 2010 today and hopefully where it will go in the future!&lt;br /&gt;&lt;br /&gt;[Also &lt;a href="http://glynclough.blogspot.com/2009/10/during-his-keynote-session-at.html"&gt;posted&lt;/a&gt; on Glyn's personal blog]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1276745691660543543-8778818852614189417?l=community.contentandcode.com' alt='' /&gt;&lt;/div&gt;</description><link>http://community.contentandcode.com/2009/10/strategic-evolution-of-sharepoint.html</link><author>noreply@blogger.com (Content and Code)</author><thr:total>0</thr:total></item></channel></rss>