<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Eli Robillard&amp;#39;s World of Blog.</title><subtitle type="html">Bligger. Blagger. Blogger.</subtitle><id>http://weblogs.asp.net/erobillard/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/erobillard/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-02-27T12:39:00Z</updated><entry><title>From Wall Street to Dubai: How Infusion is evolving</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/09/27/from-wall-street-to-dubai-how-infusion-is-evolving.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/09/27/from-wall-street-to-dubai-how-infusion-is-evolving.aspx</id><published>2008-09-27T12:44:00Z</published><updated>2008-09-27T12:44:00Z</updated><content type="html">&lt;p&gt;When the Wall Street herd began to stumble over their own their mortgage inventory, there were signs of rockier times ahead. Now that several giants lay collapsed, people like our CEO Greg Brill are writing about what it was like to watch the race to self-destruction unfold, and how they read the signs that clearly said, "now is a good time to evolve." &lt;br&gt;&lt;/p&gt;&lt;p&gt;Read it here: &lt;i&gt;&lt;a href="http://www.fastcompany.com/articles/2008/09/wall-street-dubai.html?page=0%2C0&amp;amp;partner=rss" mce_href="http://www.fastcompany.com/articles/2008/09/wall-street-dubai.html?page=0%2C0&amp;amp;partner=rss"&gt;From Wall Street to Dubai: Diary of a tech entrepreneur's adventures in the hot zone&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;A good adjunct to Greg's article is the lesson that that there were people who had the common sense to get out of the sub-prime mortgage business. A Bloomberg article (&lt;i&gt;&lt;a href="http://www.bloomberg.com/apps/news?pid=newsarchive&amp;amp;sid=aeAsOI6GUU1Y" mce_href="http://www.bloomberg.com/apps/news?pid=newsarchive&amp;amp;sid=aeAsOI6GUU1Y"&gt;Toronto-Dominion Avoids Subprime as Banks' Costs Rise&lt;/a&gt;&lt;/i&gt;, May 2008) describes how Ed Clark, CEO of TD Bank sold off TD Waterhouse's exposure in 2005. "'I'm an old-school banker,' Clark told reporters last month in Calgary after the 
annual shareholder meeting. 'I don't think you should do something you don't 
understand, hoping there's somebody at the bottom of the organization who 
does. . . . The whole thing didn't make common sense to me.'" &lt;br&gt;&lt;/p&gt;&lt;p&gt;So there's the lesson for the day, it's ageless, and it takes many forms. There are no dumb questions. When something doesn't make sense, resolve it. Traditions and so-called "best practices" come into being because they work for us, but they should never be frozen or used in place of thought and common sense. Each of us in responsible for our own actions and their effects. Traditions, including best-practices and business rules, must be continually questioned and allowed to evolve. A tradition without a means to evolve is merely a symbolic gesture that has lost its original purpose. Many would say, "assess the risk and resolve the question in accordance with that risk," but my mantra remains, "If it's worth doing, it's worth over-doing." &lt;a href="http://www.google.com/search?q=miyamoto+musashi" mce_href="http://www.google.com/search?q=miyamoto+musashi"&gt;Miyamoto Musashi&lt;/a&gt; wrote in 1643, "If you do not pursue a genuine path to its consummation, then a little bit of crookedness in the mind will later turn into a major warp. Reflect on this" (&lt;a href="http://www.google.com/search?q=%22the+book+of+five+rings%22+musashi" mce_href="http://www.google.com/search?q=%22the+book+of+five+rings%22+musashi"&gt;The Book of Five Rings&lt;/a&gt;, &lt;a href="http://www.amazon.com/exec/obidos/ASIN/1590302486/wwwerobillarc-20" mce_href="http://www.amazon.com/exec/obidos/ASIN/1590302486/wwwerobillarc-20"&gt;Thomas Cleary translation&lt;/a&gt;).&lt;br&gt;&lt;/p&gt;&lt;p&gt;Infusion's path is great technology, not financial services, not the Microsoft stack. It's great to work in a company that evolves and asks the questions it takes to keep us on that path. What's your path? &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6643085" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="$ My Two Cents" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2400_+My+Two+Cents/default.aspx" /></entry><entry><title>TSPUG Fall Session Starts Tonight (2008-09-28)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/09/24/tspug-fall-session-starts-tonight-2008-09-28.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/09/24/tspug-fall-session-starts-tonight-2008-09-28.aspx</id><published>2008-09-24T17:58:00Z</published><updated>2008-09-24T17:58:00Z</updated><content type="html">&lt;p&gt;Members received an update last week, I just wanted to mention here that summer's over and meetings start back up tonight, Wednesday, September 28! &lt;/p&gt;&lt;p&gt;Topic: Jignesh Shaw, Applications Development Manager at Cyberplex Inc. will be doing a presentation on InfoPath 2007 forms development for Forms Server in MOSS 2007 - including tips, tricks and best practices for developing InfoPath forms. Examples will include building an InfoPath form for data collection via a public facing site where anonymous users can submit their data.&lt;br&gt;&lt;br&gt;Date:&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; Wednesday, September 24, 2008&lt;br&gt;Address:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Nexient Learning&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 Bloor Street West&lt;br&gt;Time:&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; 6:00pm&lt;br&gt;&lt;br&gt;To RSVP, please email &lt;a href="mailto:susie.ibbotson@cyberplex.com&amp;amp;subject=register" mce_href="mailto:susie.ibbotson@cyberplex.com&amp;amp;subject=register"&gt;susie.ibbotson@cyberplex.com&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Next month look for another great session from Bill Brockbank on &lt;a href="http://codeplex.com/stsdev/" mce_href="http://codeplex.com/stsdev/"&gt;STSDEV&lt;/a&gt;. But first, tonight!&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6640524" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/erobillard/archive/tags/Community+News/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>SharePoint Security: Hard limits and recommended practices</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/09/11/sharepoint-security-hard-limits-and-recommended-practices.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/09/11/sharepoint-security-hard-limits-and-recommended-practices.aspx</id><published>2008-09-12T03:24:00Z</published><updated>2008-09-12T03:24:00Z</updated><content type="html">&lt;p&gt;This summarizes the hard limits and recommended guidance for Groups, Access Control Lists (ACLs) and securable objects in SharePoint 2007. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Unique accounts or groups per SharePoint Group: ~2000&lt;/b&gt;. This is the identical with the guidance for any large SharePoint list as covered by the &lt;a href="http://technet.microsoft.com/en-us/library/cc262813.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc262813.aspx"&gt;Working with large lists in Office SharePoint Server 2007&lt;/a&gt; whitepaper. Lists can handle thousands of items, but performance of a Views (i.e. while viewing or updating membership) will degrade after 200 items and become unacceptable towards 2000 because the underlying SQL queries are not paged or filtered. Note that the next limitation (see &lt;i&gt;Users per SharePoint ACL&lt;/i&gt;, below) will affect the ability to index any item (or list) you apply such a large ACL to. &lt;b&gt;Resolution&lt;/b&gt;: Use a third-party tool to manage large SharePoint Groups or re-think your design to include AD groups. &lt;b&gt;Mitigation&lt;/b&gt;: When possible, rather than assigning users membership in a SharePoint Group, assign users to an AD group and then assign the AD group membership to the SharePoint Group. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Users per SharePoint ACL: Query results must not exceed 64k, or ~1000 users per ACL&lt;/b&gt;. When exceeded, the "Parameter is incorrect" error is thrown causing crawling to fail on the item. This issue affects indexing, but does not otherwise affect SharePoint. The limit is noted by Joel Oleson in the comments of a &lt;a href="http://blogs.msdn.com/joelo/archive/2007/06/29/sharepoint-groups-permissions-site-security-and-depreciated-site-groups.aspx" mce_href="http://blogs.msdn.com/joelo/archive/2007/06/29/sharepoint-groups-permissions-site-security-and-depreciated-site-groups.aspx"&gt;"2003 to 2008 security changes" post&lt;/a&gt; and the &lt;a href="http://technet.microsoft.com/en-us/library/cc850696.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc850696.aspx"&gt;Best Practices for SharePoint Search&lt;/a&gt; article on TechNet. The issue is not SharePoint-specific and will affect any content crawled with large ACLs including file system objects like &lt;i&gt;Network Shares&lt;/i&gt;. &lt;a href="http://support.microsoft.com/kb/885482" mce_href="http://support.microsoft.com/kb/885482"&gt;KB article 885482&lt;/a&gt; describes the cause as "The maximum buffer size of the InitializeAcl function is 64 KB. Therefore, the maximum size of an ACL in Windows, including the access control entries (ACEs) that are contained in the ACL, is 64 KB." &lt;b&gt;Resolution&lt;/b&gt;: Either exclude the item from indexed content, or remove entries from the ACL. &lt;b&gt;Mitigation&lt;/b&gt;: This is a rare issue normally avoided through sound design. However, since AD groups are not expanded when the ACL is read, assigning individuals to AD Groups rather than SharePoint Groups will mitigate the limit. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Active Directory groups per-user: 1024&lt;/b&gt;. Each membership increases a user's "SID count" and the limit on the token bag is 1024. When the limit is exceeded the error reads, "During a logon attempt, the user’s security context accumulated too many security IDs." The whitepaper &lt;i&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=22dd9251-0781-42e6-9346-89d577a3e74a&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=22dd9251-0781-42e6-9346-89d577a3e74a&amp;amp;DisplayLang=en"&gt;Addressing Problems Due to Access Token Limitation&lt;/a&gt;&lt;/i&gt; discusses the issue in depth, and &lt;a href="http://support.microsoft.com/kb/906208" mce_href="http://support.microsoft.com/kb/906208"&gt;KB 906208&lt;/a&gt; describes the error. Consider this limit if AD groups are to be used to manage SharePoint groups. &lt;b&gt;Resolution&lt;/b&gt;: Remove the users from one or more AD groups to reduce the SID count. You can verify the issue with the &lt;a href="http://technet.microsoft.com/en-us/library/cc733025.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc733025.aspx"&gt;Group Membership Evaluation &lt;/a&gt;feature of the Ntdsutil.exe tool. &lt;b&gt;Mitigation&lt;/b&gt;:
Manage users in SharePoint Groups rather than AD groups if growth would require any user to be a member of more than 1024 groups. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Recommended Guidance &lt;/b&gt;&lt;br&gt;The &lt;i&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc262787.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc262787.aspx"&gt;Plan for Software Boundaries&lt;/a&gt;&lt;/i&gt; whitepaper contains guidelines for "people objects" but its guidance for security principals is (politely) less-than-useful. For example, the guidance that "You can add millions of people to your Web site by using Microsoft Windows 
security groups to manage security instead of using individual users" says nothing about how many people can (or should) be added to a SharePoint Group and ignores the SID limits of AD groups. It would also lead you to believe that it's an acceptable option to use local Windows security groups to manage permissions rather than domain accounts. In a nutshell, that would be a bad idea if your farm will ever have more than one server. &lt;/p&gt;&lt;p&gt;There are many MSDN and TechNet articles with recommendations on what granularity of permissions is "right" but the one simply named &lt;a href="http://technet.microsoft.com/en-us/library/cc262778.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc262778.aspx"&gt;&lt;i&gt;Plan site security&lt;/i&gt;&lt;/a&gt; is the most detailed and provides the best example. To summarize and disambiguate the best practices and recommendations: &lt;br&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;If many securable objects share the same ACL, then group them into a container with that ACL&lt;/b&gt;. This applies equally to list items within lists, or libraries within sites. If the permission change is a temporary state in a securable object's lifecycle (for example to assign reviewer permissions during a
workflow) then reset the permissions to &lt;i&gt;inherited&lt;/i&gt; when the temporary state is complete (e.g. at the end of the workflow). [Update 2008-09-12 TB] Avoid unique permissions on folders, as&amp;nbsp;Flat views will not secure folder content as expected. &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;The more ACLs you create, the more ACLs you have to manage&lt;/b&gt;. I know, I know, it's self-evident, no? How I wish it were. A problem of some articles is that they can be interpreted to recommend moving the problem rather than solving it. &lt;a href="http://technet.microsoft.com/en-us/library/cc850694.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc850694.aspx"&gt;For example&lt;/a&gt;: "Minimize the use of custom or fine-grained permissions. The more fine-grained permissions that are applied, the more difficult it is to track who has access to what." Well duh. The problem is that not applying permissions does not remove the business need to have permissions. If the issue is the tools and not the limits of the platform, the correct guidance should be "if management or reporting tools don't work the way you want. . . ." Better, it deserves to be a recommendation of its own. &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;If management or reporting tools don't work the way you want, then build or buy better management or reporting tools&lt;/b&gt;. &lt;a href="http://www.barracudatools.com/" mce_href="http://www.barracudatools.com/"&gt;DeliverPoint&lt;/a&gt; is one option. [I'll continue update this post as others are suggested.] &lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Understand the strengths and weaknesses of managing users in &lt;/b&gt;&lt;b&gt;SharePoint Groups vs. &lt;/b&gt;&lt;b&gt;Active Directory.&lt;/b&gt; A strength of SharePoint Groups is allowing the same people responsible for building teams in an enterprise to form their own groups. IT has been the bottleneck for too long. Advantages of SharePoint groups are decentralized maintenance, isolation by Site Collection, the ability to query it with the API without adding to DC load, and the ability to integrate it as necessary with external Authorization Providers (AD, FBA, etc.). This last point makes SharePoint groups preferable for extranets and mixed authentication zones, allowing internal users to authenticate through AD and external users through another AuthZ provider. &lt;br&gt;&lt;br&gt;AD Domain Groups may be preferred for central management and a standardization of tools. Unfortunately these tools are not usually built for or available to users outside of IT and support services. AD groups are also not visible from within SharePoint without custom code or third-party components. &lt;br&gt;&lt;br&gt;Unless your AD groups are subject to strict discipline so that "Help Desk" only contains people from Help Desk, and not people who for any reason one day needed access to the Help Desk's files (e.g. senior management or Gladys from accounting), it is best to start fresh with new AD groups for SharePoint. Since 95% of companies did not have that discipline when securing network shares, you should start fresh unless you can both prove that your AD groups are clean, and policies are in place so groups will not be corrupted when people start applying them to SharePoint. &lt;br&gt;&lt;br&gt;[Update 2008-09-12: This entire section was rewritten based on TB's
suggestions. The earlier version preferred ADGroups to SPGroups solely
by virtue of central management.]&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;If you break inheritance on many lists for the same users, clean up duplicate Limited Access entries in the containing site&lt;/b&gt;. When you configure a list or list item to use unique permissions and add a user to it who is not listed as a member of the site, so as to not break navigation the user is automagically given Limited Access -- bare-minimum read access -- to the site that contains the list. All fine and dandy until it hapens again and a duplicate entry is created. &lt;b&gt;Resolution&lt;/b&gt;: Remove the duplicate entries by hand or automated utility.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Do right for the Business&lt;/b&gt;. Sometimes to meet a business need you need to break from the recommended guidance. There is "recommended guidance," and then there are hard limits imposed by the platform that you should not break without raising flags and shooting off fireworks. The appropriate solution may be at odds with "recommended guidance" and that's okay. Your goal is to simulate the business, not to change the business. When conflict happens, help the business understand its choices. Make any conflict crystal clear to the people paying the bills and suggest alternatives. If the conflict is a hard platform limit with an eventual breaking point, provide all the options to mitigate the issue and make sure that the person with the power to make the decision understands the eventual consequence of the decision. You cannot stop someone above you in the food chain from blowing his or her own foot off. This is natural selection. You can only prove that you asked them not to, and escalated alerts to the issue as danger became imminent. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Thanks to Dennis Shtemberg from &lt;a href="http://www.infusion.com/" mce_href="http://www.infusion.com/"&gt;Infusion&lt;/a&gt; for getting the ball rolling with his research on uniquely-permissioned items per list, &lt;a href="http://www.toddklindt.com/blog" mce_href="http://www.toddklindt.com/blog"&gt;Todd Klindt&lt;/a&gt; for a great dialogue, corrections and help to tease apart the issues, &lt;a href="http://www.mindsharpblogs.com/todd" mce_href="http://www.mindsharpblogs.com/todd"&gt;Todd Bleeker&lt;/a&gt; for taking the time to review this post and make it better, and &lt;a href="http://www.sharepointjoel.com/default.aspx" mce_href="http://www.sharepointjoel.com/default.aspx"&gt;Joel Oleson&lt;/a&gt; and &lt;a href="http://blog.krichie.com/" mce_href="http://blog.krichie.com/"&gt;Keith Richie&lt;/a&gt; for their clarifying the ACL issue and their earlier work on the subject. Todd and Keith are co-authors of &lt;a href="http://www.barracudatools.com/" mce_href="http://www.barracudatools.com/"&gt;DeliverPoint&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Fixed or Unproved [Last Updated: 2008-09-26]&lt;br&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This section contians the guidance that either no longer applies, or never did. &lt;/p&gt;&lt;p&gt;&lt;strike&gt;&lt;b&gt;Unique list-item permissions per list: 600 to 1000&lt;/b&gt;&lt;/strike&gt;. Resolved by WSS and MOSS SP1. When you &lt;a href="http://www.google.ca/search?q=sharepoint+%22assign+unique+permissions%22" mce_href="http://www.google.ca/search?q=sharepoint+&amp;quot;assign+unique+permissions&amp;quot;"&gt;assign unique permissions&lt;/a&gt; to list items in a given list, when the critical point is exceeded the error is displayed: "&lt;a href="http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3A*&amp;amp;q=SharePoint+%22Operation+is+not+valid+due+to+the+current+state+of+the+object.%22" mce_href="http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3A*&amp;amp;q=SharePoint+%22Operation+is+not+valid+due+to+the+current+state+of+the+object.%22"&gt;Operation is not valid due to the current state of the object&lt;/a&gt;" and the following event is logged in Event Viewer: "&lt;span style="font-family: 'Arial','sans-serif';"&gt;Unknown
SQL Exception 156 occured. Additional error information from SQL Server is
included below. &lt;/span&gt;&lt;span style="font-family: 'Arial','sans-serif';"&gt;Incorrect
syntax near the keyword 'SET'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family: 'Arial','sans-serif';"&gt; Incorrect
syntax near ')'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-family: 'Arial','sans-serif';"&gt; Incorrect
syntax near the keyword 'with'. If this statement is a common table expression
or an xmlnamespaces clause, the previous statement must be terminated with a
semicolon." &lt;b&gt;Resolution&lt;/b&gt;: When any list item with &lt;i&gt;unique &lt;/i&gt;permissions&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; is deleted, the list works again. When any list item with &lt;i&gt;inherited &lt;/i&gt;permissions is deleted, the issue persists. &lt;b&gt;Mitigation&lt;/b&gt;:
If many items will share the same ACLs, then group them into a separate
list or library and apply the ACL to the list or library. If the
permission change is a temporary state in a list item's lifecycle (for
example to assign reviewer permissions during a workflow) then reset
the permissions to &lt;i&gt;inherited&lt;/i&gt; when the temporary state is complete (e.g. at the end of the workflow).&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;strike&gt;&lt;b&gt;Users listed in a Site Collection's User Info Gallery (aka SPWeb.SiteUsers): 1500 to 2000&lt;/b&gt;&lt;/strike&gt;. No evidence can be found to support
this guidance, and believe it to be a misinterpretation of the limit on
ACL size. If you've been affected, please comment with further
detail.&amp;nbsp; &lt;/p&gt;&lt;p&gt;A user is added to this list (and assigned an ID
unique to the Site Collection) when a user is a) explicitly assigned a
permission level on a securable object, or b) when a user is named as a
member of either a SharePoint group or an Active Directory (AD) Group &lt;i&gt;and&lt;/i&gt; that group is assigned a permission level on a securable object &lt;i&gt;and&lt;/i&gt;
the user then contributes to the site. Note that prior to WSS 3.0, just
visiting a site added the member to the list, and now the user needs to
actually contribute. When a user is deleted from the list either
through the API or the User Info Gallery, the entry is marked "Deleted"
but not removed [Update 2008-09-12: Corrected by KR]. &lt;b&gt;Resolution&lt;/b&gt;: If you pass the limit, you need to remove users from the list. The difficulty is figuring out which are no longer listed in &lt;i&gt;Created By&lt;/i&gt; and &lt;i&gt;Last Modified By&lt;/i&gt; fields. Displaying or editing a list item with a reference to a deleted entry results in an error. &lt;b&gt;Mitigation&lt;/b&gt;:
1) Create Site Collections such that each will serve up to 1000
contributors. [Deleted: "Create AD groups for readers." Not necessary
as readers aren't added to the list.] Monitor the size of the SiteUsers
list, and consider routines to prune rows from it where contributors
are no longer named on sites in the collection (e.g. in Created By,
Modified By, or Assigned To columns). 2) Either assign AD groups, or a
combination of AD groups
and individual users (the exceptions who do not logically belong in the
AD group) to SharePoint Groups unless this will lead to SID
count issues (see &lt;i&gt;Active Directory Groups per User&lt;/i&gt;, below). &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6619492" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>Why care about Google Chrome?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/09/03/why-google-chrome.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/09/03/why-google-chrome.aspx</id><published>2008-09-04T00:33:00Z</published><updated>2008-09-04T00:33:00Z</updated><content type="html">&lt;p&gt;In the last 24 hours there's been a lot of conversation about Chrome. When &lt;a href="http://www.apple.com/safari/" mce_href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt; was released for Windows, why was so little written about &lt;a href="http://www.google.com/search?q=sharepoint+with+safari" mce_href="http://www.google.com/search?q=sharepoint+with+safari"&gt;Safari's SharePoint compatibility&lt;/a&gt;? I used &lt;a href="http://www.opera.com/" mce_href="http://www.opera.com/"&gt;Opera&lt;/a&gt; for years,&amp;nbsp; but why never a post about &lt;a href="http://www.google.com/search?q=sharepoint+opera+browser" mce_href="http://www.google.com/search?q=sharepoint+opera+browser"&gt;Opera and SharePoint&lt;/a&gt; (summary: it stinks, even drop-down menus fail to render)? What's the big deal about &lt;a href="http://www.google.com/chrome" mce_href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt;? Web developers certainly don't need another browser to support, unless this is the one that finally gets it right, and the odds of that are way high against. &lt;a href="http://weblogs.asp.net/erobillard/archive/2008/09/02/google-chrome-works-for-sharepoint-users-less-so-for-administrators.aspx" mce_href="http://weblogs.asp.net/erobillard/archive/2008/09/02/google-chrome-works-for-sharepoint-users-less-so-for-administrators.aspx"&gt;So why did I bother&lt;/a&gt;? &lt;br&gt;&lt;/p&gt;&lt;p&gt;Unlike earlier entries -- and &lt;a href="http://www.mozilla.com/firefox/" mce_href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt; is the only measure of success to compare anything against --&amp;nbsp; Chrome has a chance of grabbing enough market share to make a difference against &lt;a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx" mce_href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx"&gt;MSIE&lt;/a&gt;. The first win with long-term implications is that Google did a great job of designing a browser core, and while &lt;a href="http://www.google.com/googlebooks/chrome/" mce_href="http://www.google.com/googlebooks/chrome/"&gt;the first cartoon was aimed at developers&lt;/a&gt;, you can bet that its next features and marketing will be aimed squarely at users. Chrome is the first contender since Netscape with even a snowball's chance in &lt;a href="http://www.wunderground.com/US/CA/Furnace_Creek.html" mce_href="http://www.wunderground.com/US/CA/Furnace_Creek.html"&gt;Furnace Creek&lt;/a&gt; of unseating MSIE. Even though it's hot and the snowball isn't like to make it, this is an event. &lt;br&gt;&lt;/p&gt;&lt;p&gt;The release of Chrome is also an opportunity to point out what's wrong with the browser market. Browser choice (that is, for any browser that bothers to adhere to standards) should be as much a matter of style as &lt;a href="http://www.google.com/search?q=word+vs.+wordperfect" mce_href="http://www.google.com/search?q=word+vs.+wordperfect"&gt;Word vs. WordPerfect&lt;/a&gt; used to be or Zune vs. iPod vs. Sansa vs. Zen is today. Say it again, web developers don't need another browser to support, web designers should be writing to standards, not to brands. A brand can become a de facto standard, but that's still a sign of either an immature market or &lt;a href="http://www.adobe.com/products/acrobat/" mce_href="http://www.adobe.com/products/acrobat/"&gt;a space that no one cares enough to compete in&lt;/a&gt;. I'd like to think we've come further than this since &lt;a href="http://en.wikipedia.org/wiki/Mosaic_%28web_browser%29" mce_href="http://en.wikipedia.org/wiki/Mosaic_(web_browser)"&gt;1993&lt;/a&gt;, and that a new browser release should have little more effect on web developers than a new MP3 player does for musicians. Why are so many of today's conversation about standards and compatibility? That's a problem. &lt;br&gt;&lt;/p&gt;&lt;p&gt;I do expect that as soon as &lt;a href="http://www.google.com/search?q=browscap.ini" mce_href="http://www.google.com/search?q=browscap.ini"&gt;browscap.ini&lt;/a&gt; (or whatever the equivalent is today) is updated we’ll see better behavior out of Chrome against existing sites including SharePoint. My guess is that Chrome would render existing .js better, but it’s being served a safe fall-back version by sites that don't yet recognize it as a client. Opera provides a switch to identify itself as different browsers against any given site, and that was a great trick when Opera worked better against some versions of IE-targeted code than others. Full Silverlight support will be coming soon. I don't know that for certain, but &lt;a href="http://weblogs.asp.net/scottgu/" mce_href="http://weblogs.asp.net/scottgu/"&gt;ScottGu&lt;/a&gt;'s entire team is obsessed about cross-platform and they consistently surprise the skeptics, so it would be more surprising if it doesn't come to pass. &lt;/p&gt;&lt;p&gt;As for &lt;a href="http://www.google.com/search?q=sharepoint+xhtml+standards" mce_href="http://www.google.com/search?q=sharepoint+xhtml+standards"&gt;SharePoint and standards&lt;/a&gt;, the unfortunate reality is that when your product is deployed at companies that can limit browser choice and have consultants who can bend your product to meet the low percentage of organizations with accessibility standards, you get to live in a bubble and standards aren't yet a priority. Keep pushing, maybe one day a release like this really won't matter. &lt;/p&gt;&lt;p&gt;Until then, what I wrote yesterday stands. This is a new product that needs to accelerate through a lifecycle that other browsers have lived for years. It isn't ready for prime-time today. And if you needed another reminder not to use beta products in production, Chrome even had its own &lt;a href="http://www.google.ca/search?q=google+chrome+vulnerable+security" mce_href="http://www.google.ca/search?q=google+chrome+vulnerable+security"&gt;Day Zero Security Flaw&lt;/a&gt;. Since malicious hackers tend to target the clients people use most, perhaps the clearest signal of Chrome's importance is that people are bothering to look. On to the next question: "how long before Chrome tells me that a security update is ready for download?" &lt;/p&gt;&lt;p&gt;[Updated 2008-08-04] &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.google.com/chrome/eula.html" mce_href="http://www.google.com/chrome/eula.html"&gt;Chrome's EULA&lt;/a&gt; &lt;strike&gt;will prevent it from being blessed as a corporate browser anytime soon&lt;/strike&gt; &lt;a href="http://tapthehive.com/discuss/This_Post_Not_Made_In_Chrome_Google_s_EULA_Sucks" mce_href="http://tapthehive.com/discuss/This_Post_Not_Made_In_Chrome_Google_s_EULA_Sucks"&gt;was fixed within a day&lt;/a&gt; so now you can own the content you write in Chrome, now there's a happy update, issue resolved. &lt;/p&gt;&lt;p&gt;Privacy concern -&amp;nbsp; Chrome sends every URL you visit to toolbarqueries.google.com by default (you can watch it with &lt;a href="http://ww.fiddlertool.com/fiddler/" mce_href="http://ww.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/a&gt;). You can turn it off through Options, Under the Hood, and uncheck "Help make Google Chrome better by automatically sending usage statistics and crash reports to Google." How does tracking my clicks improve Chrome? Good question. &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6595333" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="Web Design" scheme="http://weblogs.asp.net/erobillard/archive/tags/Web+Design/default.aspx" /><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /></entry><entry><title>Google Chrome works for SharePoint users, less so for administrators</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/09/02/google-chrome-works-for-sharepoint-users-less-so-for-administrators.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/09/02/google-chrome-works-for-sharepoint-users-less-so-for-administrators.aspx</id><published>2008-09-02T19:58:00Z</published><updated>2008-09-02T19:58:00Z</updated><content type="html">&lt;p&gt;Today I downloaded and installed the just-released &lt;a href="http://tools.google.com/chrome/" mce_href="http://tools.google.com/chrome/"&gt;Google Chrome&lt;/a&gt; browser, ran it through some preliminary tests with SharePoint 2007 and so far, acceptable but missing a few key things. Chrome supports NTLM authentication, uploads (though not multiple uploads), renders all the usual menus correctly, and generally does a good job of rendering SharePoint pages. And it's screaming fast. &lt;/p&gt;&lt;p&gt;On the downside, when you click a file you're asked for a Save location rather than opening it with the associated application. So if you're in a Doc Lib and click a document, you're asked for a location to save it. If you open the ECB menu and click "Edit in Microsoft Word" you get the message that "'Edit Document' requires a Windows SharePoint Services-compatible application and Microsot Internet Explorer 6.0 or greater." And the back button sometimes asks you to reload / re-post, even if there wasn't a user-driven POST and you'd expect it to work, like like opening an image in a library and then hitting Alt-left. Maybe I'm just used to this behaviour in other browsers. &lt;br&gt;&lt;/p&gt;&lt;p&gt;Administrators will especially want to hang on to MSIE or Firefox for a while. Web Parts don't drag and drop while a page is in Edit mode, and even the Minimize/Close/Delete/Modify This Web part menu oddly shows as a right-hand column rather than inline with each web part itself, perhaps this is default behaviour for unrecognized browsers. Because SharePoint's UI was designed to provide all it's functionality to unknown or unsupported browsers (e.g. Opera), you can still assemble and rearrange pages, but niceties like drag and drop don't work here yet. &lt;br&gt;&lt;/p&gt;&lt;p&gt;So for WCM sites, Chrome will work fine. For Collaboration sites, hold off until Chrome supports opening files with their associated applications. For administration, you may want to hang onto MSIE or Firefox for a while. &lt;br&gt;&lt;/p&gt;&lt;p&gt;And if only Chrome would render the rich text box controls used in my blogging engine, I could have used it to write this post. . .&lt;/p&gt;&lt;p&gt;My general (non-SharePoint reaction to Chrome -- It's fast and clean. I wouldn't be surprised if they heard from Hasbro about possible trademark infringement against Simon for that logo. There are a few odd things in like missing borders on text boxes. It supports NTLM, that's a plus. Silverlight 2 doesn't support it yet so no &lt;a href="http://www.nbcolympics.com/" mce_href="http://www.nbcolympics.com/"&gt;NBCOlympics.com&lt;/a&gt; video. YouTube is fine though, I suppose you'd expect them to get the most popular sites right. &lt;br&gt;&lt;br&gt;It saves paswords but there doesn't seem to be a master key file that I have any control over (Firefox does), so no idea whether it's actually encrypting my secrets on disk. &lt;br&gt;&lt;br&gt;Conclusion: not bad for an initial beta, but when you write anything from the ground up in a mature industry you can expect several releases to get the important parts right. &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6593407" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="Web Design" scheme="http://weblogs.asp.net/erobillard/archive/tags/Web+Design/default.aspx" /><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>SharePoint WFE memory allocation on 32-bit Windows Server</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/08/11/sharepoint-wfe-memory-allocation-on-32-bit-windows-server.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/08/11/sharepoint-wfe-memory-allocation-on-32-bit-windows-server.aspx</id><published>2008-08-11T23:20:00Z</published><updated>2008-08-11T23:20:00Z</updated><content type="html">&lt;p&gt;How much memory can my SharePoint web front-end (WFE) servers use? It's a common question, and this post is an attempt to answer it for common scenarios. Briefly: &lt;b&gt;4 GB is the maximum recommended for most scenarios&lt;/b&gt;, though you may be able to use more if you're hosting other applications on the same server, including other web applications. &lt;br&gt;&lt;/p&gt;&lt;p&gt;On 32-bit Windows Server 2003 each application pool can only address 2 GB of RAM because that's the &lt;a href="http://msdn.microsoft.com/en-us/library/ms189334.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms189334.aspx"&gt;limit of user-mode address space in a 32-bit application&lt;/a&gt;. You can reduce this effectively to ~1.5 GB after the CLR and core Framework are loaded. Joel recommends configuring &lt;a href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx" mce_href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx"&gt;800 Mb per worker process&lt;/a&gt; and he has a slew of other great tips for configuring your Application Pools. Note that the &lt;a href="http://support.microsoft.com/kb/933560" mce_href="http://support.microsoft.com/kb/933560"&gt;/3GB switch is not supported with SharePoint&lt;/a&gt; for allocating more memory to the IIS worker process since it leads to memory instability. &lt;br&gt;&lt;br&gt;If hosting multiple web applications, you can allocate the web applications into multiple application pools, and make use of more than 4 GB RAM. Note that a &lt;a href="http://office.microsoft.com/download/afile.aspx?AssetID=AM101638551033" mce_href="http://office.microsoft.com/download/afile.aspx?AssetID=AM101638551033"&gt;maximum of 8 application pools is recommended&lt;/a&gt;. For example, it's preferable to run Central Administration on a separate server (usually a MOSS Application Server), but you could run it on a WFE in a different application pool and even with its own Application Pool Identity. The same goes for in-house web service applications, though again,&amp;nbsp; to isolate IIS issues caused by SharePoint and your web services it's advisable to always host custom code  away from your SharePoint farm. But if you have a good reason to run your code locally (i.e. you need SharePoint interaction and can't get the job done efficiently with SharePoint's web services), it's possible to create your own application pool and host your custom code there. If more than one Application Pool hosts a SharePoint Web Application (i.e a site with SharePoint content, not one of the administrative or WS interfaces) you'll just need to be sure that the Application Pool Identities remain in synch. &lt;br&gt;&lt;br&gt;If you're only hosting one SharePoint Web Application, there is no benefit to adding memory beyond 4 GB. If that's your scenario it's probably better to move try to move services off that machine so it can at least take full advantage of what it has. Two candidates to move off the WFE (after the obvious APP / SSP services) are the Central Administration application and Query services. &lt;/p&gt;&lt;p&gt;Other ways to mitigate 32-bit memory issues:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Follow &lt;a href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx" mce_href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx"&gt;Joel's guidance on configuring Application Pool Settings&lt;/a&gt; particularly: recycle application pools daily at an off-peak time, adjust the ceiling to 800 MB per WP, and keep the number of worker processes at one per Application Pool. &lt;br&gt;&lt;/li&gt;&lt;li&gt;In all custom code, follow &lt;a href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx" mce_href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx"&gt;Mike's guidance to dispose of all of the disposable objects&lt;/a&gt; that you create, and understand where you're creating them inadvertently. If you don't leak memory, you'll have more memory. &lt;br&gt;&lt;/li&gt;&lt;li&gt;Avoid using standard views of large lists and lists with a lot of metadata. Think in terms of cells being returned, not just list size, and write custom queries or web parts where lists are unavoidably large. See the &lt;a href="http://technet.microsoft.com/en-us/library/cc262813.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc262813.aspx"&gt;whitepaper on dealing with large lists&lt;/a&gt; for more information. &lt;br&gt;&lt;/li&gt;&lt;li&gt;Use queries to avoid walking the object model wherever possible. Don't use the memory-hogging "foreach (SPListItem item in mySPList)" &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.aspx"&gt;when you can use GetItems() or GetItemsInFolder()&lt;/a&gt;, &lt;br&gt;&lt;/li&gt;&lt;li&gt;Web Gardens. Leave worker process at 1 per application pool, or according to TechNet, "&lt;a href="http://technet.microsoft.com/en-us/library/cc298550.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc298550.aspx"&gt;Do not use Web gardens.&lt;/a&gt;" But. If you see frequent out-of-memory issues (e.g. on a 4 GB WFE with
thousands of users), they may be possible to resolve by increasing
worker processes to 2 (aka create a Web Garden) and cap your memory
ceiling to 600 to 800 MB (i.e. divide the available RAM) per process. This can mitigate OOM errors but two things to consider: 1) performance will degrade, and 2) you should also disable page output caching and the BLOB cache since only one process can get a lock to manage either of these at a time, so successful use of the cache now depends on which thread made the call.  That said, if memory is a concern you should probably minimize these caches on collaborative sites anyway since they're intended for sites with relatively static content. Heck, this could be a point of its own. &lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.ca/search?q=+%22disable+page+output+caching%22" mce_href="http://www.google.ca/search?q=+%22disable+page+output+caching%22"&gt;Disable page output caching&lt;/a&gt; and &lt;a href="http://fnoja.blogspot.com/2008/05/optimize-blob-cache-by-including-most.html" mce_href="http://fnoja.blogspot.com/2008/05/optimize-blob-cache-by-including-most.html"&gt;BLOB caching&lt;/a&gt; on collaborative sites, these features are best-suited for relatively static WCM sites. &lt;br&gt;&lt;/li&gt;&lt;li&gt;Migrate to 64-bit Windows Server&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;64-bit Windows Server doesn't have this 2 GB-per-process limitation (the user-mode address space goes up to 8 terabytes) so memory added beyond 4 GB will always help. Note that 64-bit doesn't remove the performance risks of large lists, which really stem from inefficient default query strategies and the resulting amount of information coming back from SQL Server. Guidance for configuring the Application Pools is similar; recycling daily is still important, but the ceiling can be much higher. Just beware that the higher you let it go, the inevitable and regular garbage collection will simply have that much more to do. &lt;br&gt;&lt;br&gt;&lt;b&gt;Further reference&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc263099.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc263099.aspx"&gt;Optimizing Office SharePoint Server for WAN environments&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx" mce_href="http://blogs.msdn.com/joelo/archive/2007/10/29/sharepoint-app-pool-settings.aspx"&gt;JoelO's Recommendations for SharePoint Application Pool Settings&lt;/a&gt; &lt;br&gt;&lt;a href="http://blogs.msdn.com/joelo/archive/2007/01/12/why-wss-3-0-x64-and-moss-2007-x64-what-s-the-deal.aspx" mce_href="http://blogs.msdn.com/joelo/archive/2007/01/12/why-wss-3-0-x64-and-moss-2007-x64-what-s-the-deal.aspx"&gt;JoelO's Why WSS 3.0 x64 and MOSS 2007 x64... What's the deal?&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[Update: Thanks to &lt;a href="http://www.toddklindt.com/default.aspx" mce_href="http://www.toddklindt.com/default.aspx"&gt;Todd Klindt&lt;/a&gt; for the guidance against mixing web gardens and BLOB caching, and to &lt;a href="http://home.infusionblogs.com/nmitha/default.aspx" mce_href="http://home.infusionblogs.com/nmitha/default.aspx"&gt;Nadeem&lt;/a&gt; for stopping me from iterating over lists.]&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6505503" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>SharePoint Trace Logs and the Unified Logging Service (ULS)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/07/31/sharepoint-trace-logs-and-the-unified-logging-service-uls.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/07/31/sharepoint-trace-logs-and-the-unified-logging-service-uls.aspx</id><published>2008-08-01T01:10:00Z</published><updated>2008-08-01T01:10:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;This is to explain what the ULS logs are, why they exist, and how to read and write 'em. In a nutshell, the Unified Logging Service (ULS) writes WSS 3.0 and MOSS events to SharePoint’s Trace Logs, and these are stored in the file system in &lt;A class="" title="C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\" href="http://www.google.com/search?q=SharePoint+12+Hive" mce_href="http://www.google.com/search?q=SharePoint+12+Hive"&gt;...\12&lt;/A&gt;&lt;STRONG&gt;\LOGS&lt;/STRONG&gt;. Collectively this location and its files are commonly referred to as the “&lt;A class="" href="http://www.google.com/search?q=SharePoint+ULS+Logs" mce_href="http://www.google.com/search?q=SharePoint+ULS+Logs"&gt;ULS Logs&lt;/A&gt;” though MSDN calls them the &lt;A class="" href="http://www.google.com/search?q=SharePoint+%22Trace+Logs%22+site%3Amsdn.com" mce_href="http://www.google.com/search?q=SharePoint+%22Trace+Logs%22+site%3Amsdn.com"&gt;Trace&amp;nbsp;Logs&lt;/A&gt;. &amp;nbsp;&lt;/P&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;According to &lt;A href="http://msdn.microsoft.com/hi-in/library/aa979590(en-us).aspx"&gt;the MSDN Trace Log docs&lt;/A&gt;:&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&amp;lt;“Developers can program their applications to write custom operations messages to the trace log, the same log that Windows SharePoint Services uses to log developer-oriented information and events. Writing to the same trace log Windows SharePoint Services employs enables third-party developers to view their custom application traces in the larger context of Windows SharePoint Services operations, without having to correlate multiple trace logs. In addition, the trace log provides a central destination for information concerning development processes, such as debugging. This alleviates the need for developers to log their development information in other places, such as the Windows Event Log, which are more commonly used by system administrators.”&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;STRONG&gt;Configuring ULS Logs&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-bidi-font-style: normal" class=MsoNormalThe &lt;I under Administration Central SharePoint in configured is verbosity and location&gt;Operations &lt;/I&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;I style="mso-bidi-font-style: normal"&gt;Diagnostic Logging&lt;/I&gt;. The &lt;A class="" href="http://technet.microsoft.com/en-us/library/cc288649(TechNet.10).aspx" mce_href="http://technet.microsoft.com/en-us/library/cc288649(TechNet.10).aspx"&gt;Diagnostic Logging options are described on TechNet&lt;/A&gt;, &amp;nbsp;and in the excellent &lt;A class="" href="http://www.sharepointplatform.com/teamblog/Lists/Posts/Post.aspx?ID=48" mce_href="http://www.sharepointplatform.com/teamblog/Lists/Posts/Post.aspx?ID=48"&gt;"Taming SharePoint Trace Logs" blog&lt;/A&gt;. &lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;Recommended configuration: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;Sign up for the Customer Experience Improvement Program: Disabled &lt;/DIV&gt;&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in" class=MsoNormal&gt;Error Reports: Ignore errors and don’t collect information. &lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in" class=MsoNormal&gt;Event Throttling: Recommend no throttling in development environments, and throttling from &lt;I style="mso-bidi-font-style: normal"&gt;Audit Failure&lt;/I&gt; and above to capture warnings and errors in Production environments. &lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in" class=MsoNormal&gt;Trace Log Path: Create a new logging location on a drive (i.e. a physical spindle) that does not contain your OS or data. It is a good practice to create such a location for all such logs so that if the drive fills up, it doesn't jeopardize the health of either the OS or your data. Yes, of course you can also use it for your IIS logs. Note that if you change this location, &lt;EM&gt;the location must exist for all servers in the farm&lt;/EM&gt;.&lt;/LI&gt;
&lt;LI style="MARGIN: 0in 0in 0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in" class=MsoNormal&gt;Number of log files and minutes to use a log file: The default gets you two days, how far you go is up to you. &lt;/LI&gt;&lt;/UL&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;The administrator can select events to log either in the Diagnostic Logging page, or more selectively with the STSADM command line utility. Verbosity should be set according to the environment and intended audience. For example: more verbose in development where developers actively debug applications, and as-needed in production where a network operations team uses the logs to monitor application health. For further information see the &lt;A class="" href="http://www.sharepointplatform.com/teamblog/Lists/Posts/Post.aspx?ID=48" mce_href="http://www.sharepointplatform.com/teamblog/Lists/Posts/Post.aspx?ID=48"&gt;&lt;EM&gt;Taming &lt;/EM&gt;article&lt;/A&gt; (cited above) on the topic search the internet for “&lt;A href="http://google.com/?q=sharepoint+verbosity+"&gt;&lt;FONT color=#0000ff&gt;SharePoint verbosity diagnostic logging&lt;/FONT&gt;&lt;/A&gt;.”&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;STRONG&gt;Reading the ULS Logs&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;The raw ULS logs can be difficult to navigate, and SharePoint provides no built-in viewer. To fill the gap and ease development and administration, free third-party tools exist like &lt;A href="http://hristopavlov.wordpress.com/sptraceview/"&gt;SPTraceView&lt;/A&gt; and &lt;A href="http://codeplex.com/wssmosslogfilereader/"&gt;&lt;FONT color=#0000ff&gt;WSS/MOSS Log File Reader&lt;/FONT&gt;&lt;/A&gt; (which plugs into Central Administration). Some utilities including SPTraceView will aggregate log data from more than one server in the farm.&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;STRONG&gt;Writing ULS Logs&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;What to write? The ULS logs are appropriate for recording any application lifecycle and diagnostic events not recorded elsewhere, including messages during feature installation, removal, activation, deactivation, startup, shutdown, and exceptions. Message types are identified through the Trace Severity property: Unassigned, Critical Event, Warning Event, Information Event, Exception, Assert, Unexpected, Monitorable, High, Medium, and Verbose.&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;To write Trace Logs you need a Trace Provider. &lt;A class="" href="http://weblogs.asp.net/controlpanel/blogs/MSDN%20http://msdn2.microsoft.com/en-us/library/aa979522.aspx" mce_href="MSDN http://msdn2.microsoft.com/en-us/library/aa979522.aspx"&gt;MSDN provides a sample TraceProvider here&lt;/A&gt;. And that one was either adapted or copied into the &lt;A class="" href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=CKS&amp;amp;ReleaseId=7675" mce_href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=CKS&amp;amp;ReleaseId=7675"&gt;Community Kit for SharePoint available here&lt;/A&gt;. I'm providing both, even though they're (virtually?) identical is that I would hope the CKS code will evolve and I don't expect that of the MSDN content. &lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;Assuming the CKS version works for you (it's buried in the CKS.EWE subtree), you could build a wrapper like this for exception logging: &lt;/P&gt;
&lt;STYLE&gt;.irisContainer TD.lineNumbers {
	BORDER-RIGHT: silver 1px solid; PADDING-RIGHT: 3px; PADDING-LEFT: 10px; BORDER-TOP: silver 0px solid; PADDING-BOTTOM: 5px; BORDER-LEFT: silver 0px solid; PADDING-TOP: 5px; BORDER-BOTTOM: silver 0px solid; TEXT-ALIGN: right
}
.irisContainer TD.lineNumbers PRE {
	COLOR: #808080; TEXT-ALIGN: right
}
TABLE.irisContainer {
	BORDER-RIGHT: silver 1px solid; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; BORDER-TOP: silver 1px solid; PADDING-BOTTOM: 0px; MARGIN: 5px auto; BORDER-LEFT: silver 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: silver 1px solid; BACKGROUND-COLOR: #ffffff
}
.irisContainer .nthLineNumber {
	FONT-SIZE: 16px; COLOR: #808080
}
.irisContainer PRE {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 1.2em; PADDING-TOP: 0px; FONT-FAMILY: Consolas, monospace
}
.irisContainer TD.highlighted {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #181818
}
.irisContainer PRE SPAN {
	FONT-WEIGHT: normal; VERTICAL-ALIGN: bottom; FONT-STYLE: normal; FONT-VARIANT: normal; font-size-adjust: none
}
.irisContainer TBODY {
	BACKGROUND-COLOR: #181818
}
.irisContainer PRE .normal {
	COLOR: #e0e0e0
}
.irisContainer PRE .comment {
	COLOR: #c080c0
}
.irisContainer PRE .boolean {
	COLOR: #8080c0
}
.irisContainer PRE .character {
	COLOR: #f2bc6a
}
.irisContainer PRE .constant {
	COLOR: #8080c0
}
.irisContainer PRE .float {
	COLOR: #f7f70c
}
.irisContainer PRE .number {
	COLOR: #f7f70c
}
.irisContainer PRE .string {
	COLOR: #60ff60
}
.irisContainer PRE .identifier {
	COLOR: #fef1a9
}
.irisContainer PRE .function {
	COLOR: #2b91af
}
.irisContainer PRE .conditional {
	COLOR: #8080c0
}
.irisContainer PRE .exception {
	COLOR: #8080c0
}
.irisContainer PRE .label {
	COLOR: #8080c0
}
.irisContainer PRE .keyword {
	COLOR: #8080c0
}
.irisContainer PRE .operator {
	COLOR: #e9a020
}
.irisContainer PRE .statement {
	COLOR: #8080c0
}
.irisContainer PRE .repeat {
	COLOR: #8080c0
}
.irisContainer PRE .define {
	COLOR: #8080ff
}
.irisContainer PRE .preCondit {
	COLOR: #8080ff
}
.irisContainer PRE .macro {
	COLOR: #8080ff
}
.irisContainer PRE .include {
	COLOR: #8080ff
}
.irisContainer PRE .preProc {
	COLOR: #8080ff
}
.irisContainer PRE .storageClass {
	COLOR: #8080c0
}
.irisContainer PRE .structure {
	COLOR: #8080c0
}
.irisContainer PRE .type {
	COLOR: #c7c7f1
}
.irisContainer PRE .typedef {
	COLOR: #c7c7f1
}
.irisContainer PRE .debug {
	COLOR: #7f2aff
}
.irisContainer PRE .delimiter {
	COLOR: #2ca1c4
}
.irisContainer PRE .special {
	COLOR: #7f2aff
}
.irisContainer PRE .specialChar {
	FONT-WEIGHT: bold; COLOR: #f2bc6a
}
.irisContainer PRE .specialComment {
	COLOR: #7f2aff
}
.irisContainer PRE .tag {
	COLOR: #7f2aff
}
.irisContainer PRE .error {
	COLOR: #f65353
}
.irisContainer PRE .todo {
	COLOR: green
}
.irisContainer PRE .underlined {
	TEXT-DECORATION: underline
}
&lt;/STYLE&gt;

&lt;TABLE style="BORDER-SPACING: 0; BORDER-COLLAPSE: collapse" class=irisContainer cellSpacing=0 class="irisContainer" callpadding="0"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px" class=""&gt;&lt;/TD&gt;
&lt;TD class="highlighted output" rowSpan=2 class="highlighted output"&gt;&lt;PRE class="cs highlighted"&gt;&lt;SPAN class=normal&gt;&lt;SPAN class=statement&gt;using&lt;/SPAN&gt; System;
&lt;SPAN class=statement&gt;using&lt;/SPAN&gt; System.Collections.Generic;
&lt;SPAN class=statement&gt;using&lt;/SPAN&gt; System.Text;
&lt;SPAN class=statement&gt;using&lt;/SPAN&gt; System.Diagnostics;
&lt;SPAN class=statement&gt;using&lt;/SPAN&gt; CKS.Utilities.UlsLogs;
&lt;SPAN class=statement&gt;using&lt;/SPAN&gt; System.Reflection;

&lt;SPAN class=storageClass&gt;namespace&lt;/SPAN&gt; EliRobillard.SharePoint.Diagnostics
{
    &lt;SPAN class=storageClass&gt;class&lt;/SPAN&gt; ULS
    {
        &lt;SPAN class=comment&gt;/// &lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=statement&gt;summary&lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=comment&gt;/// Log an error to the ULS log&lt;/SPAN&gt;
        &lt;SPAN class=comment&gt;/// &lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=statement&gt;summary&lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=comment&gt;/// &lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=statement&gt;param&lt;/SPAN&gt;&lt;SPAN class=function&gt; &lt;/SPAN&gt;&lt;SPAN class=type&gt;name&lt;/SPAN&gt;=&lt;SPAN class=string&gt;"productName"&lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;The name of the application or project.&lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=statement&gt;param&lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=comment&gt;/// &lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=statement&gt;param&lt;/SPAN&gt;&lt;SPAN class=function&gt; &lt;/SPAN&gt;&lt;SPAN class=type&gt;name&lt;/SPAN&gt;=&lt;SPAN class=string&gt;"errorMessage"&lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;The text of the error message.&lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=statement&gt;param&lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=comment&gt;/// &lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=statement&gt;param&lt;/SPAN&gt;&lt;SPAN class=function&gt; &lt;/SPAN&gt;&lt;SPAN class=type&gt;name&lt;/SPAN&gt;=&lt;SPAN class=string&gt;"errorCategory"&lt;/SPAN&gt;&lt;SPAN class=function&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=comment&gt;The category of the error, usually the feature or solution being implemented.&lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=statement&gt;param&lt;/SPAN&gt;&lt;SPAN class=identifier&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=storageClass&gt;public&lt;/SPAN&gt; &lt;SPAN class=storageClass&gt;static&lt;/SPAN&gt; &lt;SPAN class=type&gt;void&lt;/SPAN&gt; LogError(&lt;SPAN class=type&gt;string&lt;/SPAN&gt; productName, &lt;SPAN class=type&gt;string&lt;/SPAN&gt; errorMessage, &lt;SPAN class=type&gt;string&lt;/SPAN&gt; errorCategory)
        {
            TraceProvider.WriteTrace(&lt;SPAN class=number&gt;0&lt;/SPAN&gt;, TraceProvider.TraceSeverity.CriticalEvent, Guid.NewGuid(), Assembly.GetExecutingAssembly().FullName, productName, errorCategory, errorMessage);
        }
    }
}
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="output lineNumbers" class="output lineNumbers"&gt;&lt;PRE class=lineNumbers&gt;&lt;SPAN class=lineNumbers&gt;1
2
3
4
5
6
7
8
9
&lt;SPAN class=nthLineNumber&gt;10&lt;/SPAN&gt;
11
12
13
14
15
16
17
18
19
&lt;SPAN class=nthLineNumber&gt;20&lt;/SPAN&gt;
21
22
23
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;Or just as simple (and without the overhead of reflection), just add your reference and call WriteTrace() directly. Look for the LogMessage methods inside the &lt;A class="" href="http://www.codeplex.com/CKS/SourceControl/FileView.aspx?itemId=168120&amp;amp;changeSetId=14410" mce_href="http://www.codeplex.com/CKS/SourceControl/FileView.aspx?itemId=168120&amp;amp;changeSetId=14410"&gt;CKS.EWE.WikiDiscussion.CoordinateActions&lt;/A&gt; receiver, there are good examples of descriptive logging and those methods could be used in your own MyName.SharePoint.Utilities.Diagnostics project. &lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6458253" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /><category term="ASP.Net" scheme="http://weblogs.asp.net/erobillard/archive/tags/ASP.Net/default.aspx" /></entry><entry><title>International SharePoint Professionals Association: It's alive!</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/07/18/international-sharepoint-professionals-association-it-s-alive.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/07/18/international-sharepoint-professionals-association-it-s-alive.aspx</id><published>2008-07-18T18:05:00Z</published><updated>2008-07-18T18:05:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;&lt;IMG style="HEIGHT: 100px" title="ISPA Logo" alt="ISPA Logo" src="http://bobfox.securespsite.com/Site%20Pictures/ispa-med.jpg" height=100 mce_src="http://bobfox.securespsite.com/Site Pictures/ispa-med.jpg"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;On Wednesday Bob Fox &lt;A class="" href="http://bobfox.securespsite.com/FoxBlog/Lists/Posts/Post.aspx?ID=98" mce_href="http://bobfox.securespsite.com/FoxBlog/Lists/Posts/Post.aspx?ID=98"&gt;announced the launch of the ISPA&lt;/A&gt;&amp;nbsp;and its website at &lt;A href="http://www.sharepointpros.org/"&gt;http://www.sharepointpros.org/&lt;/A&gt;. Bob's been putting this together for well over a year so first off, congratulations to Bob on launching and thank-you for all the hard work you do to help user groups world-wide.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;What does the ISPA do? Initially its goal is to support existing SharePoint user groups and help people kick-start new ones. There's a small board and a number of evangelists world-wide. &lt;A class="" href="http://blogs.devhorizon.com/reza/" mce_href="http://blogs.devhorizon.com/reza/"&gt;Reza&lt;/A&gt; and I are the first two "Canadian Evangelists" and we can't wait to have counterparts in the West and East.&amp;nbsp;Canada only has one&amp;nbsp;SharePoint User Group (&lt;A class="" href="http://www.tspug.com/" mce_href="http://www.tspug.com/"&gt;Toronto&lt;/A&gt;) but there is demand from coast-to-coast. If you've been wishing there was somewhere you could go to learn the latest about SharePoint, maybe the ISPA can bring out the user group leader in you. &lt;/P&gt;
&lt;P mce_keep="true"&gt;To learn more or to learn how to start a SharePoint user group in your area, you're welcome to contact me through this blog, or e-mail the ISPA at &lt;A href="mailto:contactus@sharepointpros.org" target=_blank&gt;&lt;EM&gt;contactus@sharepointpros.org&lt;/EM&gt;&lt;/A&gt;. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6416633" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/erobillard/archive/tags/Community+News/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>Readers Guide to the SharePoint Scalability White Paper</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/06/18/review-of-the-sharepoint-scalability-white-paper.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/06/18/review-of-the-sharepoint-scalability-white-paper.aspx</id><published>2008-06-18T15:50:00Z</published><updated>2008-06-18T15:50:00Z</updated><content type="html">&lt;p style="margin: 0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;A&amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/cc262067%28TechNet.10%29.aspx" class="" mce_href="http://technet.microsoft.com/en-us/library/cc262067(TechNet.10).aspx"&gt;SharePoint Server 2007 Scalability and Performance whitepaper&lt;/a&gt; was recently released "to provide strategic information about designing a high-volume, high-availability enterprise solution that can easily grow." it was &lt;a href="http://blogs.msdn.com/sharepoint/archive/2008/06/17/belated-announcement-sharepoint-server-2007-scalability-and-performance-whitepaper-now-available.aspx" class="" mce_href="http://blogs.msdn.com/sharepoint/archive/2008/06/17/belated-announcement-sharepoint-server-2007-scalability-and-performance-whitepaper-now-available.aspx"&gt;announced yesterday in the SharePoint Product Team blog&lt;/a&gt;. &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;There is plenty of good content here, lots of good ideas, and many attractive diagrams. As for the tests, these are idyllic goals to shoot for if you want great performance – minimize (or eliminate) inserts and deletes, keep fewer than 200 files per folder (if you do the math, they appear to cap it at 130), don’t use more than 5 WFEs, and spread your databases over many physical volumes.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;o:p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt; 
&lt;p style="margin: 0in 0in 0pt;" class="MsoNormal" mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Note that the testers assign 2 (or 3 in the case of H:) business divisions, each with its own content database, per 1 TB physical volume (Fig. 12), which is more SAN management than most shops are aware they should provide. This allows ~500 GB per division. It’s interesting that while the content databases stay under 200 GB for a combined total of &amp;lt;400GB, the used disk space averages 600.375 GB (Fig. 19).&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;To restate the point: separate physical disks remain the best path to efficient I/O, and sets of local disks kick the tar out of any SAN that doesn’t take the separation into account. &lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;Just because you move “the storage problem” to a network service doesn’t mean you should forget about intelligent design. The best practice to provide separate physical volumes for the OS, data, logs&amp;nbsp;and temporary files remains.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;o:p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;o:p&gt;&lt;font size="3" face="Calibri"&gt;On to the test methodology. &lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Note that in these tests they loaded the data beforehand, and the “user load testing” consisted of modifying existing documents, not inserts or deletes. No files, sites or site collections were created or harmed in the course of this study. Search the document for “delete,” you won’t find it. Why not? Because for each content database, list items inserts are O(n), and site creation and and deletion are (politely) non-deterministic. It takes an incrementally longer period to insert an item as it did for previous items. When the icon is spinning during site creation, other requests may (or may not) be&amp;nbsp;fulfilled until the&amp;nbsp;operation is complete. Deleting a site may also have an effect on response time.&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Again, this performance factor affects requests &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;being served from the same content database, requests served by other content dbs are not affected.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;o:p&gt;&lt;font size="3" face="Calibri"&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt; 
&lt;p style="margin: 0in 0in 0pt;" class="MsoNormal"&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;For constructing a document repository with relatively static content, or a Publishing Site for WCM, this is an excellent and thorough document. This whitepaper describes a "large-scale content storage scenario" rather than a "large scale &lt;i&gt;collaboration &lt;/i&gt;scenario." That doesn't mean you cannot build a scalable SharePoint collaboration environment, but this whitepaper does not claim to describe it. Keep that in mind when you look at the performance graphs. &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125);"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;As to the architecture itself and the guidance provided in constructing the test farms, this whitepaper&amp;nbsp;is worth a look. Thank-you to the team who put it together, there's some good stuff here, but for the future&amp;nbsp;I'd really like to see&amp;nbsp;testing go beyond browsing, search, and file updates.&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt;" class="MsoNormal"&gt;[Update 2009-09-05] Changed title from "Review of the SPSWP" to "Readers Guide to the SPSWP"&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6291512" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="$ My Two Cents" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2400_+My+Two+Cents/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>TSPUG June 25: Future-Ready SharePoint From Taxonomy to Deployment </title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/06/17/tspug-june-25-future-ready-sharepoint-from-taxonomy-to-deployment.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/06/17/tspug-june-25-future-ready-sharepoint-from-taxonomy-to-deployment.aspx</id><published>2008-06-17T20:53:00Z</published><updated>2008-06-17T20:53:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;&lt;A class="" href="http://maps.live.com/default.aspx?v=2&amp;amp;FORM=LMLTCC&amp;amp;cp=43.670198~-79.386858&amp;amp;style=r&amp;amp;lvl=14&amp;amp;tilt=-90&amp;amp;dir=0&amp;amp;alt=-1000&amp;amp;phx=0&amp;amp;phy=0&amp;amp;phscl=1&amp;amp;where1=2%20bloor%20west%2C%20toronto%2C%20on%2C%20canada&amp;amp;encType=1" mce_href="http://maps.live.com/default.aspx?v=2&amp;amp;FORM=LMLTCC&amp;amp;cp=43.670198~-79.386858&amp;amp;style=r&amp;amp;lvl=14&amp;amp;tilt=-90&amp;amp;dir=0&amp;amp;alt=-1000&amp;amp;phx=0&amp;amp;phy=0&amp;amp;phscl=1&amp;amp;where1=2%20bloor%20west%2C%20toronto%2C%20on%2C%20canada&amp;amp;encType=1"&gt;&lt;STRONG&gt;Toronto SharePoint User Group&lt;/STRONG&gt;&lt;BR&gt;2 Bloor West, Toronto&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Wednesday, June 25&lt;/STRONG&gt;&lt;BR&gt;6:00pm Registration and Social&lt;BR&gt;6:30pm Meeting &lt;BR&gt;7:00pm Feature Presentation (description below)&lt;BR&gt;8:30pm Closing&lt;/P&gt;
&lt;P mce_keep="true"&gt;This is our last meeting of the 2007-2008 season.&amp;nbsp;After &lt;STRONG&gt;June 25&lt;/STRONG&gt;, TSPUG is on summer break until &lt;STRONG&gt;September 17&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Future-Ready SharePoint Architecture: From Taxonomy to Deployment &lt;BR&gt;&lt;/STRONG&gt;by Eli Robillard (&lt;A class="" href="http://www.infusion.com/" mce_href="http://www.infusion.com/"&gt;Infusion Development&lt;/A&gt;), Ruven Gotz (Ideaca),&amp;nbsp;and Craig Lussier (Torys LLP). &lt;/P&gt;
&lt;P mce_keep="true"&gt;In last month's episode (by &lt;A class="" href="http://www.mindsharp.com/" mce_href="http://www.mindsharp.com/"&gt;Mindsharp&lt;/A&gt;, with several &lt;A class="" href="http://mindsharp.com/ClassSearch.aspx?SelectedLocation=Toronto,%20ON&amp;amp;SelectedClass=&amp;amp;SelectedAudience=" mce_href="http://mindsharp.com/ClassSearch.aspx?SelectedLocation=Toronto,%20ON&amp;amp;SelectedClass=&amp;amp;SelectedAudience="&gt;courses in Toronto the week of July 14 to 18&lt;/A&gt;), we learned the benefits of designing an effective taxonomy. This month we'll continue with the how-to's of designing taxonomies, and then &lt;BR&gt;turn our business requirements and corporate taxonomy into an effective SharePoint deployment. Discover the techniques, learn about great software to support the design process, and see a case study of a sucessful deployment. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A class="" href="mailto:susiei@cyberplex.com?subject=[TSPUG-June-RSVP]" mce_href="mailto:susiei@cyberplex.com?subject=[TSPUG-June-RSVP]"&gt;To attend, please RSVP&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Thanks to our sponsors for another great year! &lt;BR&gt;&lt;A class="" href="http://www.nexient.com/" mce_href="http://www.nexient.com/"&gt;Nexient&lt;/A&gt; - &lt;A class="" href="http://www.cyberplex.com/" mce_href="http://www.cyberplex.com/"&gt;Cyberplex&lt;/A&gt; - &lt;A class="" href="http://technet.microsoft.com/en-ca/default.aspx" mce_href="http://technet.microsoft.com/en-ca/default.aspx"&gt;Microsoft&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;TSPUG Takes Requests:&lt;/STRONG&gt;&amp;nbsp;Comment on this post to tell me what you'd like to see! &lt;/P&gt;
&lt;P mce_keep="true"&gt;Stay tuned for the announcement of the &lt;STRONG&gt;2nd Annual SharePoint Camp&lt;/STRONG&gt;, coming in Fall 2008! &lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6287633" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/erobillard/archive/tags/Community+News/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /><category term="Events" scheme="http://weblogs.asp.net/erobillard/archive/tags/Events/default.aspx" /></entry><entry><title>WCAG and CLF 2.0 Compliance for SharePoint</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/06/05/wcag-and-clf-2-0-compliance-for-sharepoint.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/06/05/wcag-and-clf-2-0-compliance-for-sharepoint.aspx</id><published>2008-06-05T20:45:00Z</published><updated>2008-06-05T20:45:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Here's a nugget. At the May &lt;A class="" href="http://tspug.com/" mce_href="http://tspug.com/"&gt;Toronto SharePoint User Group&lt;/A&gt; meeting I met Mike Maadarani who got me excited about his company's &lt;A class="" href="http://www.orangutech.com/OTech01/About/CLFLicense.aspx" mce_href="http://www.orangutech.com/OTech01/About/CLFLicense.aspx"&gt;CLF 2.0 SharePoint Toolkit&lt;/A&gt;. Orangutech is based in &lt;A class="" href="http://www.google.com/search?q=ottawa%2C+on%2C+canada" mce_href="http://www.google.com/search?q=ottawa%2C+on%2C+canada"&gt;our nation's capital&lt;/A&gt; and they've been working with a government department and Microsoft to help SharePoint meet CLF 2.0 and WCAG requirements. From the documentation: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;&lt;EM&gt;The CLF 2.0 Team Site Feature will allow departments and agencies to create SharePoint team web sites [and publishing sites] that conform to the new Common Look and Feel Standards 2.0 (CLF 2.0) that conforms to the World Wide Web (W3C) Web Content Accessibility Guidelines 1.0 Priority 1 and 2 checkpoints, which are collectively known as WCAG 1.0 AA.&lt;/EM&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;The toolkit includes two solutions, one with Publishing Site features, the other with Team Site features. Each include both a WSP for an automatic install, and a set of files with instructions for manual deployment. The Publishing site features include the configuration of English and French variations. The actual elements provided include a List Rollup web part, compliant English and French master pages, three page layouts (1,2, and 3 column), several style sheets, and supporting image files and javascript, mainly for the compliant menus. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;It looks like a good piece of work that should have wide appeal on its own or as a starting point for further customized solutions. I located a &lt;A class="" href="http://sharepoint.microsoft.com/sharepoint/worldwide/ca/ottawa/Documents/Forms/AllItems.aspx?RootFolder=%2Fsharepoint%2Fworldwide%2Fca%2Fottawa%2FDocuments%2FECM%20Day%20-%20Presentation&amp;amp;FolderCTID=&amp;amp;View=%7BC6783C5B-2F1F-41FF-A842-052BC176E0F7%7D" mce_href="http://sharepoint.microsoft.com/sharepoint/worldwide/ca/ottawa/Documents/Forms/AllItems.aspx?RootFolder=%2Fsharepoint%2Fworldwide%2Fca%2Fottawa%2FDocuments%2FECM%20Day%20-%20Presentation&amp;amp;FolderCTID=&amp;amp;View=%7BC6783C5B-2F1F-41FF-A842-052BC176E0F7%7D"&gt;WCF CLF 2.0 slide deck on the SharePoint Community Portal&lt;/A&gt; but there is precious little documentation apart from the installation files and tutorial included within the download. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;Congratulations to &lt;A class="" href="http://www.orangutech.com/" mce_href="http://www.orangutech.com/"&gt;Orangutech&lt;/A&gt; on the toolkit's release, and thank-you from the community for sharing! &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;&lt;EM&gt;Update&lt;/EM&gt;: I forgot to mention the &lt;A class="" href="http://www.codeplex.com/aks" mce_href="http://www.codeplex.com/aks"&gt;Accessibility Toolkit for SharePoint published on Codeplex&lt;/A&gt;. Of course Mike is convinced that Orangutech's is better, I'll leave it to the Commenters to chime in. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN lang=EN-CA&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6251355" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="Web Design" scheme="http://weblogs.asp.net/erobillard/archive/tags/Web+Design/default.aspx" /><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/erobillard/archive/tags/Community+News/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>The rule of good technology</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/05/07/the-rule-of-good-technology.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/05/07/the-rule-of-good-technology.aspx</id><published>2008-05-07T04:12:00Z</published><updated>2008-05-07T04:12:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Technology provides value to business by simulating and automating business processes.&amp;nbsp;The measure of business software, whether client or web-based, is its ability to transform Business State A into Goal State B with the least amount of human intervention. Done right, it's about process engineering, not decoration. Business fundamentals haven't changed in ten thousand years, but they're accelerating as we automate. This rule never breaks. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Maybe it's just me, but I can't remember an instance where sticking plastic hearts or stars on file folders helped me find "good content" faster. To each his own criteria, yours probably isn't mine (also a rule by the way). The little green "this answer solved the problem" on &lt;A class="" href="http://www.microsoft.com/technet/community/newsgroups/dgbrowser/en-us/default.mspx?dg=microsoft.public.sharepoint.development_and_programming" mce_href="http://www.microsoft.com/technet/community/newsgroups/dgbrowser/en-us/default.mspx?dg=microsoft.public.sharepoint.development_and_programming"&gt;Microsoft newsgroups&lt;/A&gt; gets it right for me maybe 25% of the time, it's not bad. I don't doubt it solved the thread for whomever put it there, but three out of four times the answer I need&amp;nbsp;is either on some other page or isn't yet documented. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Now if &lt;A class="" href="http://blogs.msdn.com/kn/" mce_href="http://blogs.msdn.com/kn/"&gt;social computing finds me an expert&lt;/A&gt; two floors up and down the hall who can solve Business State Q faster than I could with a coffee room bulletin board or a week of "asking around," fantastic. Type-written index cards with subjects (keywords) to cross-reference libraries, that was useful metadata. Top ten lists a la "&lt;A class="" href="http://www.andrewconnell.com/blog/archive/2007/06/30/6065.aspx" mce_href="http://www.andrewconnell.com/blog/archive/2007/06/30/6065.aspx"&gt;here are the ten best books on subject x&lt;/A&gt;," those are great. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Which brings me to Twitter, which is where this train of thought began. I'm thinking&amp;nbsp;"&lt;A class="" href="http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3A*&amp;amp;q=%22twitter+link%22" mce_href="http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3A*&amp;amp;q=%22twitter+link%22"&gt;Links to links&lt;/A&gt;? Now that's just silly." I'll click three levels deep if there are actual choices along the way. Start me down a &lt;A class="" href="http://tinyurl.com/29jdop" mce_href="http://tinyurl.com/29jdop"&gt;click tunnel&lt;/A&gt; and I'll avoid&amp;nbsp;your links even if&amp;nbsp;you one day find &lt;A class="" href="http://www.google.com/search?q=%22beer+on+mars%22" mce_href="http://www.google.com/search?q=%22beer+on+mars%22"&gt;beer on Mars&lt;/A&gt;. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Is Twitter the Blackberry of blogs? The Blackberry turned e-mail into instant e-mail. Twitter instantly broadcasts the state of your ego (or web browser) to the masses in &amp;lt;141 byte-sized pieces. Like any good tool, it's&amp;nbsp;exactly &lt;A class="" href="http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3A*&amp;amp;q=%22power+of+twitter%22" mce_href="http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3A*&amp;amp;q=%22power+of+twitter%22"&gt;as useful as the person&lt;/A&gt; wielding it. When it simulates what goes on in the real world and makes it better by &lt;A class="" href="http://www.cnn.com/2008/TECH/04/25/twitter.buck/" mce_href="http://www.cnn.com/2008/TECH/04/25/twitter.buck/"&gt;reaching the goal faster&lt;/A&gt;, it's good technology. When it's used to say "&lt;A class="" href="http://daverohrer.com/twitter-link-find-14/" mce_href="http://daverohrer.com/twitter-link-find-14/"&gt;here's where I was today, maybe you want to go there too&lt;/A&gt;" it's about as entertaining and as productive as &lt;A class="" href="http://en.wikipedia.org/wiki/Television" mce_href="http://en.wikipedia.org/wiki/Television"&gt;TV&lt;/A&gt;. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Eleven years ago on &lt;A class="" href="http://www.erobillard.com/archives/BIO104.HTM" mce_href="http://www.erobillard.com/archives/BIO104.HTM"&gt;my first web page&lt;/A&gt; I joked that the Web was the bastard child of television and CB radio. Funny how we keep coming back to that. All I can add is that: if now you can use the rule of good technology to slice through junk and figure out which tools will help reach goals faster, then maybe you can figure out how to automate it. &lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6164423" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /></entry><entry><title>Toronto SharePoint User Group Tonight (and next month)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/04/23/toronto-sharepoint-user-group-tonight-and-next-month.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/04/23/toronto-sharepoint-user-group-tonight-and-next-month.aspx</id><published>2008-04-23T15:13:00Z</published><updated>2008-04-23T15:13:00Z</updated><content type="html">&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;
&lt;P class=MsoNormal&gt;&lt;B&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Topic:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt; &lt;B&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;SharePoint and Silverlight – Bringing the best of both worlds together!&lt;/SPAN&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;In this session we'll explore different scenarios for integrating SharePoint 2007 and Silverlight. We’ll explore different ways on how you can leverage the SharePoint 2007 amazing framework to expose content and data in a much richer way.&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Speaker:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Andy Nogueira (MCTS, MCPD, MCAD) has over 10 years of professional experience in the IT industry. He is the Team Lead for the Microsoft Practice Group at nonlinear creations Inc. (nonlinear.ca), a Microsoft Gold Partner.&amp;nbsp; He is responsible for designing and implementing several successful technology solutions based on MOSS 2007 (Microsoft Office SharePoint Server) integrated with technologies such as Enterprise Search, Windows Workflow, &lt;?XML:NAMESPACE PREFIX = ST1 /&gt;&lt;ST1:PLACE w:st="on"&gt;K2&lt;/ST1:PLACE&gt;, Windows Communication Foundation (WCF), and Silverlight. He is also a Microsoft Certified Technology Specialist (MCTS) in WSS 3.0 (Application Development) and MOSS 2007 (Configuration and Application Development).&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt" class=MsoNormal&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Address: Nexient Learning&lt;BR&gt;&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; &lt;ST1:STREET w:st="on"&gt;&lt;ST1:ADDRESS w:st="on"&gt;2 Bloor Street West&lt;/ST1:ADDRESS&gt;&lt;/ST1:STREET&gt;, room 11 on the 8th floor&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt" class=MsoNormal&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;Time:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6:00pm&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt" class=MsoNormal&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;To RSVP, please email &lt;A title=blocked::mailto:susie.ibbotson@cyberplex.com href="mailto:susie.ibbotson@cyberplex.com"&gt;susie.ibbotson@cyberplex.com&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 6pt; LINE-HEIGHT: 15.6pt" class=MsoNormal&gt;&lt;FONT color=black size=1 face=Verdana&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana"&gt;&lt;STRONG&gt;Next Month: &lt;/STRONG&gt;&amp;nbsp;&lt;A class="" href="http://www.mindsharp.com/" mce_href="http://www.mindsharp.com/"&gt;Mindsharp&lt;/A&gt; speaks on site planning and taxonomies!&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6124273" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/erobillard/archive/tags/Community+News/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /><category term="Events" scheme="http://weblogs.asp.net/erobillard/archive/tags/Events/default.aspx" /></entry><entry><title>What to know about SmartPart, and LoadControl()</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/03/04/what-to-know-about-smartpart-and-loadcontrol.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/03/04/what-to-know-about-smartpart-and-loadcontrol.aspx</id><published>2008-03-04T18:52:00Z</published><updated>2008-03-04T18:52:00Z</updated><content type="html">&lt;p&gt;At &lt;a href="http://www.infusion.com/" mce_href="http://www.infusion.com/"&gt;Infusion&lt;/a&gt; ASP.NET developers regularly ask how to easily build a web part or how to host a &lt;a href="http://www.google.ca/search?q=asp.net+user+control" mce_href="http://www.google.ca/search?q=asp.net+user+control"&gt;user control&lt;/a&gt; (.ascx) in SharePoint. Someone invariably replies "SmartPart!" at which point my job is to make sure they understand what they're getting into. &lt;/p&gt;&lt;p&gt;&lt;a href="http://codeplex.com/smartpart/" mce_href="http://codeplex.com/smartpart/"&gt;SmartPart&lt;/a&gt; is a cleverly coded web part by fellow MOSS MVP &lt;a href="http://weblogs.asp.net/jan/" mce_href="http://weblogs.asp.net/jan/"&gt;Jan Tielens&lt;/a&gt;.  Once installed, you can drag an instance of SmartPart into a SharePoint web part zone and configure the new web part to host an .ascx file stored in the file system. And like magic, you can host user controls in SharePoint. Recent versions (v1.3+) are AJAX-aware, support web part connections, and improved the deployment story, and the underlying code is really quite good. &lt;br&gt;&lt;/p&gt;&lt;p&gt;But, there are drawbacks, some of which may be overcome, some of which are realities. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-AU"&gt;1. SmartPart examples set web.config to Full
Trust. Not for the web part, but for the entire SharePoint application. You do not want to do this in Production, and happily this is avoidable. However, it does mean that you can't avoid the pain of creating a CAS policy (e.g. if your controls require access to the SharePoint API or unmanaged resources) by using the SmartPart. &lt;br&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span lang="EN-AU"&gt; SmartPart is an open source project, but the download contains only its classes so you can't compile it without some work of your own. If you work for clients who want to use SmartPart, I strongly recommend building your own SmartPart project as a starting point, and maintaining that code base as new features are added to the CodePlex project. While you won't "own" the code (copyright rules would say it's still Jan's and you should attribute it as such), you will now have full control and accountability for the code running on your servers, as it should be. &lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-AU"&gt;3. The &lt;a href="http://www.codeplex.com/smartpart/license"&gt;SmartPart
disclaimer&lt;/a&gt; defines exactly what to expect should things go wrong, or should
you need to extend its capabilities: ". . . the Software comes 'as is',
with no warranties. None whatsoever. This means no express, implied or
statutory warranty, including without limitation, warranties of merchantability
or fitness for a particular purpose or any warranty of title or non-infringement."
Part of the license is to distribute this license whenever SmartPart is used.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;To be fair, this disclaimer is similar to many software licenses, and all open source licenses. Linux is open source and offers no support. When things go wrong with Linux, Linus Torvalds will not show up at your door to hold your hand. To make Linux palatable for Production, Red Hat sells support. If you pay extra, they may even hold your hand. &lt;/p&gt;&lt;p&gt;&lt;span lang="EN-AU"&gt;SmartPart carries no support, and
no commercial version exists that would provide support. &lt;/span&gt;But, if you follow the advice of the last point and create you own project so you have control of the code, you can support your own. This is what you want to avoid: &lt;span lang="EN-AU"&gt;there was a period of
several months after GotDotNet was decommissioned and SmartPart did not yet
exist on CodePlex. During this time it was impossible to download any
"official" version of SmartPart, current or otherwise. had the source been released earlier (it wasn't) this wouldn't have inconvenienced anyone. From now on should the source become unavailable for any reason, you'll only have yourself to blame.&amp;nbsp;  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-AU"&gt;4. Building a custom web part that uses LoadControl() to host a user control is not difficult, and SmartPart's source code is a great way to learn how! The sample code below shows you how to load a user control and interact with its content from a web part, in this case to retrieve the content of a SharePoint list and implement paging. &lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Using the sample code&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This is intended to roughly parallel the Smartpart - the user control will go into a usercontrols folder at the root of your application and the web part's assembly can be deployed to the GAC unless you'd like to write a CAS policy to deploy it to the bin folder. &lt;br&gt;&lt;/p&gt;&lt;p&gt;Place the ascx in a \usercontrols folder into the Web Application's root (e.g. C:\Inetpub\wwwroot\wss\VirtualDirectories\80\usercontrols). &lt;br&gt;&lt;/p&gt;&lt;p&gt;Create the web part, sign the project and add a line like this to the SafeControls section of web.config. Remember to replace the Assembly attribute with your own, best obtained by opening your assembly with &lt;a href="http://www.aisto.com/roeder/dotnet/" mce_href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/a&gt;:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SafeControl Assembly="LoadControlWP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=myToken" Namespace="LoadControlWP" TypeName="LoadControlWebPart" Safe="True" /&amp;gt;&lt;br&gt;&lt;br&gt;Then get your web part's assembly into the GAC and recycle the application pool, or build a CAS policy (if you control requires it) and place it in the web application's bin folder. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Sample code (LoadControlWP.cs):&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;br&gt;using System.Text;&lt;br&gt;&lt;br&gt;using System.Web;&lt;br&gt;using System.Web.UI;&lt;br&gt;using System.Web.UI.WebControls;&lt;br&gt;using System.Data;&lt;br&gt;using System.Web.UI.WebControls.WebParts;&lt;br&gt;using System.Diagnostics;&lt;br&gt;using Microsoft.SharePoint;&lt;br&gt;&lt;br&gt;namespace LoadControlWP&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class LoadControlWebPart : System.Web.UI.WebControls.WebParts.WebPart&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private UserControl usercontrol;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private GridView gvDemo;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private const string defaultlist = "";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string _listtolink = defaultlist;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected DataTable dtDemo = null;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Personalizable(), WebBrowsable(),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebDisplayName("List to display"),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebDescription("Name of the list in this site to display")]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string ListToLink&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _listtolink; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { _listtolink = value; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void CreateChildControls()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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; base.CreateChildControls();&lt;br&gt;&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; this.Controls.Clear();&lt;br&gt;&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; this.GetData();&lt;br&gt;&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; usercontrol = (UserControl)Page.LoadControl(@"/usercontrols/wpgrid.ascx");&lt;br&gt;&lt;br&gt;&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; gvDemo = (GridView)this.usercontrol.FindControl("gvDemo");&lt;br&gt;&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; gvDemo.AllowPaging = true;&lt;br&gt;&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; gvDemo.DataSource = dtDemo;&lt;br&gt;&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; gvDemo.PageSize = 3;&lt;br&gt;&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; gvDemo.PageIndexChanging += new GridViewPageEventHandler(gvDemo_PageIndexChanging);&lt;br&gt;&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; this.Controls.Add(usercontrol);&lt;br&gt;&lt;br&gt;&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; gvDemo.DataBind();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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; EventLog.WriteEntry("WebParts", "UCWebPart" + ex.ToString());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void gvDemo_PageIndexChanging(object sender, GridViewPageEventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gvDemo.PageIndex = e.NewPageIndex;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gvDemo.DataBind();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void GetData()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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; if (ListToLink.Length &amp;gt; 0)&lt;br&gt;&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; {&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtDemo = new DataTable();&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtDemo.Columns.Add("Title", Type.GetType("System.String"));&lt;br&gt;&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPWeb site = SPContext.Current.Web;&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPList list = site.Lists[_listtolink];&lt;br&gt;&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (SPListItem item in list.Items)&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataRow newRow = dtDemo.NewRow();&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newRow["Title"] = item["Title"];&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtDemo.Rows.Add(newRow);&lt;br&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&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; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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; EventLog.WriteEntry("WebParts", "UCWebPart - Retrieving items from " + _listtolink + "-" + ex.ToString(), EventLogEntryType.Error);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Sample code (wpgrid.ascx):&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;%@ Control Language="C#" ClassName="WebUserControl" %&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;script runat="server"&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;asp:GridView ID="gvDemo" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Columns&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:BoundField DataField="Title" HeaderText="Title" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Columns&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RowStyle BackColor="#F7F6F3" ForeColor="#333333" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;EditRowStyle BackColor="#999999" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;AlternatingRowStyle BackColor="White" ForeColor="#284775" /&amp;gt;&lt;br&gt;&amp;lt;/asp:GridView&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5914659" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="! Original Content" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2100_+Original+Content/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry><entry><title>"How to build a SharePoint dev box" updated</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/erobillard/archive/2008/02/27/quot-how-to-build-a-sharepoint-dev-box-quot-updated.aspx" /><id>http://weblogs.asp.net/erobillard/archive/2008/02/27/quot-how-to-build-a-sharepoint-dev-box-quot-updated.aspx</id><published>2008-02-27T17:39:00Z</published><updated>2008-02-27T17:39:00Z</updated><content type="html">&lt;p&gt;I've updated the article on &lt;a href="http://weblogs.asp.net/erobillard/archive/2007/02/23/build-a-sharepoint-development-machine.aspx" mce_href="http://weblogs.asp.net/erobillard/archive/2007/02/23/build-a-sharepoint-development-machine.aspx"&gt;how to build a development machine for SharePoint 2007&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;The best tool I've discovered&amp;nbsp; is the &lt;a href="http://codeplex.com/spm/" mce_href="http://codeplex.com/spm/"&gt;SharePoint Manager 2007&lt;/a&gt; which takes over from the &lt;a href="http://codeplex.com/spi/" mce_href="http://codeplex.com/spi/"&gt;SharePoint Inspector&lt;/a&gt; as the object model browser of choice. &lt;/p&gt;&lt;p&gt;Notable tools not yet on the how-to&amp;nbsp; page are the &lt;a href="http://www.u2u.info/SharePoint/U2U%20Community%20Tools/Forms/AllItems.aspx" mce_href="http://www.u2u.info/SharePoint/U2U%20Community%20Tools/Forms/AllItems.aspx"&gt;U2U CAML Creator&lt;/a&gt; tool and Ms. White's &lt;a href="http://www.codeplex.com/elblanco" mce_href="http://www.codeplex.com/elblanco"&gt;Event Receiver Manager&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;&lt;p&gt;Several of the recommended tools were moved into a new &lt;i&gt;optional &lt;/i&gt;section, the most notable of which is the VSeWSS component which I really can't recommend. There are so many &lt;a href="http://www.google.ca/search?q=sharepoint+visual+studio+template+site%3Acodeplex.com" mce_href="http://www.google.ca/search?q=sharepoint+visual+studio+template+site%3Acodeplex.com"&gt;better project templates available on CodePlex&lt;/a&gt; that the sole bright spot of VSeWSS is the Solution Generator. In another tragic turn, VSeWSS was "updated" and baked into VS 2008 in a way that actually made a few templates worse. So while the workflow designer is better, it's even harder to deploy your custom workflow to another machine now.  &lt;/p&gt;&lt;p&gt;As always, if you see ways to improve this how-to guide I'd love to hear from you! &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5871400" width="1" height="1"&gt;</content><author><name>erobillard</name><uri>http://weblogs.asp.net/members/erobillard.aspx</uri></author><category term="$ My Two Cents" scheme="http://weblogs.asp.net/erobillard/archive/tags/_2400_+My+Two+Cents/default.aspx" /><category term="SharePoint" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint/default.aspx" /><category term="SharePoint 2007" scheme="http://weblogs.asp.net/erobillard/archive/tags/SharePoint+2007/default.aspx" /></entry></feed>