<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:a10="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dcterms="http://purl.org/dc/terms/"><title>Mike Hacker</title><description /><language>en-us</language><lastBuildDate>Wed, 11 Nov 2009 02:12:49 Z</lastBuildDate><generator>Microsoft Windows Live Spaces 14.3</generator><link>http://mphacker.spaces.live.com/</link><pubDate>Tue, 07 Nov 2006 12:44:32 GMT</pubDate><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:type>main</live:type><live:typelabel>Main</live:typelabel><live:identity><live:id>-9205132915760147452</live:id><live:alias>mphacker</live:alias></live:identity><image><title>Mike Hacker</title><url>http://shared.live.com/2kdNXu04aWFrBawQSoB76w/LFE/live.controls.images/ic/bluemanxl.png</url><link>http://mphacker.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss/" element="typelabel" label="Type" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /></cf:listinfo><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/mphacker" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">8040CC624DDC5404!762</guid><title>Looking for Work – Infrastructure / Help desk / Field Tech</title><description>&lt;p&gt;A very good friend of mine recently found out yesterday that the contract extension for his project had not been signed and he was being laid off.   He is in need of a job immediately and any help getting him placed would be very much appreciated.&lt;/p&gt; &lt;p&gt;He is a very good field technician and infrastructure consultant with a wide range of skills.   Please &lt;a href="http://cid-8040cc624ddc5404.skydrive.live.com/self.aspx/Public/DustinCoppolaResume.doc" target="_blank"&gt;review his resume&lt;/a&gt; and contact him directly if you have any opportunities or leads.&lt;/p&gt; &lt;p&gt;Below is a list of some of his skills:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Extensive knowledge of Microsoft desktop operating systems including Vista, XP, 2000 and earlier. Extensive knowledge of Microsoft server operating systems including Windows Server 2008 R2, 2008, and 2003. &lt;li&gt;Oracle database, Linux Enterprise, Oracle Database Security, and Oracle VM. &lt;li&gt;Experience with Microsoft Active Directory configuration and maintenance &lt;li&gt;Microsoft Office SharePoint Server 2007 (MOSS) and Windows SharePoint Services (WSS 3.0) administration, installation, and configuration &lt;li&gt;Exchange System and Exchange Server Administration including migration of user mailboxes, address’s and upgrades &lt;li&gt;Completed online training for Microsoft Hyper-V and System Center Configuration Manager &lt;li&gt;Configuring and integrating smart devices such as cell phones, PDA’s, and barcode scanners  &lt;li&gt;Setup, maintenance and troubleshooting LANs &lt;li&gt;Cabling, router installation, NIC configuration, and OS configuration &lt;li&gt;Troubleshooting and repairing electronic equipment  &lt;li&gt;Designing and building customized computer systems&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/fmQ3Kd5C1zA" height="1" width="1"/&gt;</description><pubDate>Wed, 04 Nov 2009 13:42:11 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/fmQ3Kd5C1zA/cns!8040CC624DDC5404!762.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!762.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!762')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-11-04T13:42:11.6900000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!762.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!758</guid><category>SharePoint 2007</category><title>Creating a Personalized SharePoint 2007 Site Directory</title><description>&lt;p&gt;Organizations that deploy Microsoft Office SharePoint Server 2007 for collaboration often find that the number of site collections and subsites grow very quickly.  It seems like it doesn’t take long for end users to figure out how flexible and easy SharePoint is for creating simple “applications”.   Even with a good taxonomy and solid governance plan there is little that can be done to hold back the growth of a SharePoint environment.    This growth can make it complex and confusing for users to navigate to their sites.   One option is for the SharePoint administrators to manage a complex navigation hierarchy that supports every site in the farm.   Another option is for the users to use search to locate their sites, however, many users still seem to prefer browsing over search.   One solution I created to help address this is a personalized site directory.   This directory lists out all of the sites under a specific web application that the user has permissions to view.    This display is in alphabetical order based on site titles.  The display also has visual clues to show the relationships between sites and subsites.&lt;/p&gt; &lt;p&gt;To create this site directory I looked at many options.  The first and most obvious one is to use the SharePoint API to enumerate all of the sites in a web application and then look for the sites that the currently logged in user has permissions to view.   This could work, but would be very slow and processor intensive.   The option I elected to go with was using a custom query to the SharePoint search engine and then process the results.   Why search?  Simple, search is security trimmed.   I do not have to perform any additional logic to make sure I only locate sites that the user has permissions to view.  Search is also very fast.&lt;/p&gt; &lt;p&gt;My original version used SharePoint Designer and a DataView web part to submit a query to the SharePoint search web service.  An XSL stylesheet was then applied to the XML returned from the query to render the directory.   The problem with this was that the resulting directory listing was not in alphabetical order and maintaining visual clues about relationships between parent and child sites was difficult and did not always work properly.&lt;/p&gt; &lt;p&gt;I revisited my original idea and came up with a custom SharePoint web part that still uses a search query but then applies much more in depth logic to properly order and display links to the SharePoint sites.    So how did I create the personalized SharePoint site directory?&lt;/p&gt; &lt;p&gt;The first step is creating the proper query to send to the SharePoint search web service.   Below is an example query.   The variable server should contain the domain name of the web application you wish to use as the basis for the directory.  An example would be:  my.domain.com&lt;/p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;string &lt;/span&gt;query = &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;QueryPacket xmlns =\&amp;quot;urn:Microsoft.Search.Query\&amp;quot; Revision =\&amp;quot;1000\&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;;
  query+=&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;Query&amp;gt;&amp;lt;Context&amp;gt;&amp;lt;QueryText language =\&amp;quot;en-US\&amp;quot; type =\&amp;quot;MSSQLFT\&amp;quot;&amp;gt;SELECT Title, url, contentclass&amp;quot;&lt;/span&gt;;
  query+=&lt;span style="color:#a31515"&gt;&amp;quot;FROM SCOPE() where (ContentClass ='sts_web' or ContentClass ='sts_site' or &amp;quot;&lt;/span&gt;;
  query+=&lt;span style="color:#a31515"&gt;&amp;quot;contentClass ='sts_listitem_850') and site ='&amp;quot; &lt;/span&gt;+ server + &lt;span style="color:#a31515"&gt;&amp;quot;' and isDocument =0&amp;lt;/QueryText&amp;gt;&amp;quot;&lt;/span&gt;;
  query+=&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/Context&amp;gt;&amp;lt;Range&amp;gt;&amp;lt;StartAt&amp;gt;1&amp;lt;/StartAt&amp;gt;&amp;lt;Count&amp;gt;1000&amp;lt;/Count&amp;gt;&amp;lt;/Range&amp;gt;&amp;lt;/Query&amp;gt;&amp;lt;/QueryPacket&amp;gt;&amp;quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This query uses contentClass to limit the results of the query to just publishing and team sites.   The &amp;lt;Count&amp;gt; parameter limits the maximum number of sites to return to 1000.   This could be adjusted if you have more sites to list, however, I would be very careful trying to display that many sites on a single web page.&lt;/p&gt;
&lt;p&gt;Once the query is executed we receive a DataSet that contains a single DataTable with the query results.   As you can see by the query we only receive back title, URL and contentClass.   Before we can display our directory we need to figure out a way to relate each of the rows so we can display the parent / child relationship between sites and subsites.    To build this relationship I start by adding 3 new columns to our query results DataTable:&lt;/p&gt;&lt;pre&gt;dt.Columns.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;DataColumn(&lt;span style="color:#a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(System.&lt;span style="color:#2b91af"&gt;Int32&lt;/span&gt;)));
dt.Columns.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;DataColumn(&lt;span style="color:#a31515"&gt;&amp;quot;parentid&amp;quot;&lt;/span&gt;, &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(System.&lt;span style="color:#2b91af"&gt;Int32&lt;/span&gt;)));
dt.Columns.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;DataColumn(&lt;span style="color:#a31515"&gt;&amp;quot;origURL&amp;quot;&lt;/span&gt;, &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(System.&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;)));
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;The id column will hold a unique identifier for each record.   The parentid will hold the unique identifier of the parent record and the origURL will be used to hold the original URL to the site.    Once we have added the new columns we need to populate the id column with data.    I also store the original url in the origURL field and then modify the URL field slightly so I can more easily figure out parent / child relationships based on that URL.&lt;/p&gt;&lt;pre&gt;&lt;span style="color:green"&gt;            &lt;/span&gt;&lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = &lt;span style="color:brown"&gt;0&lt;/span&gt;; i &amp;lt; dt.Rows.Count; i++)
            {
                dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;] = i + &lt;span style="color:brown"&gt;1&lt;/span&gt;;
                dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;origURL&amp;quot;&lt;/span&gt;] = dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;];
                dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;] = dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;].ToString().ToLower().Replace(&lt;span style="color:#a31515"&gt;&amp;quot;/sites&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);
                dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;] = dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;].ToString().ToLower().Replace(&lt;span style="color:#a31515"&gt;&amp;quot;http://&amp;quot; &lt;/span&gt;+ server, &lt;span style="color:#a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);
            }&lt;/pre&gt;
&lt;p&gt;After populating the id and origURL fields and making a few modifications to the URL field we can begin to update the parentid field.  This is accomplished by looping through all rows in the DataTable and using the select method on the DataTable to locate the parentid for each record.&lt;/p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;     for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = &lt;span style="color:brown"&gt;0&lt;/span&gt;; i &amp;lt; dt.Rows.Count; i++)
        {
            &lt;span style="color:blue"&gt;if &lt;/span&gt;(&lt;span style="color:blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;].ToString()))
                dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;parentid&amp;quot;&lt;/span&gt;] = &lt;span style="color:brown"&gt;0&lt;/span&gt;;
            &lt;span style="color:blue"&gt;else
            &lt;/span&gt;{
                &lt;span style="color:blue"&gt;string &lt;/span&gt;parentURL = dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;].ToString();
                parentURL = parentURL.Substring(&lt;span style="color:brown"&gt;0&lt;/span&gt;, parentURL.LastIndexOf(&lt;span style="color:#a31515"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;));

                DataRow[] rows = dt.Select(&lt;span style="color:#a31515"&gt;&amp;quot;url='&amp;quot; &lt;/span&gt;+ parentURL + &lt;span style="color:#a31515"&gt;&amp;quot;'&amp;quot;&lt;/span&gt;);
                &lt;span style="color:blue"&gt;if &lt;/span&gt;(rows.Length == &lt;span style="color:brown"&gt;1&lt;/span&gt;)
                    dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;parentid&amp;quot;&lt;/span&gt;] = rows[&lt;span style="color:brown"&gt;0&lt;/span&gt;][&lt;span style="color:#a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;];
                &lt;span style="color:blue"&gt;else
                &lt;/span&gt;{
                    rows = dt.Select(&lt;span style="color:#a31515"&gt;&amp;quot;url=''&amp;quot;&lt;/span&gt;);
                    &lt;span style="color:blue"&gt;if &lt;/span&gt;(rows.Length == &lt;span style="color:brown"&gt;1&lt;/span&gt;)
                        dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;parentid&amp;quot;&lt;/span&gt;] = rows[&lt;span style="color:brown"&gt;0&lt;/span&gt;][&lt;span style="color:#a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;];
                    &lt;span style="color:blue"&gt;else
                        &lt;/span&gt;dt.Rows[i][&lt;span style="color:#a31515"&gt;&amp;quot;parentid&amp;quot;&lt;/span&gt;] = &lt;span style="color:brown"&gt;0&lt;/span&gt;;
                }

            }
        }
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Now that we have a DataTable that contains all of our sites, including parent / child relationships we can create a recursive method for displaying the records in alphabetical order.   The method shown below first creates a DataRow array that contains all of the children for a specific parentID.   LINQ is then used to sort the child records based on Title.   Finally we loop through each of the rows in the sorted array and display the links for the sites.&lt;/p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;      private void &lt;/span&gt;showDirectory(DataTable dt, &lt;span style="color:blue"&gt;int &lt;/span&gt;parentID, &lt;span style="color:blue"&gt;int &lt;/span&gt;level)
      {
          DataRow[] childs = dt.Select(&lt;span style="color:#a31515"&gt;&amp;quot;parentid=&amp;quot; &lt;/span&gt;+ parentID.ToString());
          level++;

          &lt;span style="color:blue"&gt;var &lt;/span&gt;sortedRows = &lt;span style="color:blue"&gt;from &lt;/span&gt;p &lt;span style="color:blue"&gt;in &lt;/span&gt;childs &lt;span style="color:blue"&gt;orderby &lt;/span&gt;p[&lt;span style="color:#a31515"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;] &lt;span style="color:blue"&gt;select &lt;/span&gt;p;

          &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(DataRow child &lt;span style="color:blue"&gt;in &lt;/span&gt;sortedRows)
          {
              Controls.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;LiteralControl(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;amp;nbsp;&amp;quot;&lt;/span&gt;.Repeat(level * &lt;span style="color:brown"&gt;3&lt;/span&gt;)));
              &lt;span style="color:blue"&gt;if &lt;/span&gt;(level&amp;lt;&lt;span style="color:brown"&gt;3&lt;/span&gt;)
                  Controls.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;LiteralControl(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;b&amp;gt;&amp;lt;a class='ms-navheader' href='&amp;quot; &lt;/span&gt;+ child[&lt;span style="color:#a31515"&gt;&amp;quot;origurl&amp;quot;&lt;/span&gt;].ToString() + &lt;span style="color:#a31515"&gt;&amp;quot;'&amp;gt;&amp;quot; &lt;/span&gt;+ child[&lt;span style="color:#a31515"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;].ToString() + &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;quot;&lt;/span&gt;));
              &lt;span style="color:blue"&gt;else
                  &lt;/span&gt;Controls.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;LiteralControl(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;img src='/_layouts/images/navBullet.gif' alt='' border='0'&amp;gt;&amp;amp;nbsp;&amp;lt;a class='ms-navitem' href='&amp;quot; &lt;/span&gt;+ child[&lt;span style="color:#a31515"&gt;&amp;quot;origurl&amp;quot;&lt;/span&gt;].ToString() + &lt;span style="color:#a31515"&gt;&amp;quot;'&amp;gt;&amp;quot; &lt;/span&gt;+ child[&lt;span style="color:#a31515"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;].ToString() + &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;quot;&lt;/span&gt;));
              showDirectory(dt, &lt;span style="color:#2b91af"&gt;Convert&lt;/span&gt;.ToInt32(child[&lt;span style="color:#a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;]), level);
          }

      }
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;As you looked through the showDirectory method you might have noticed the .Repeat method being called on the string “&amp;amp;nbsp”.   This is an &lt;a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank"&gt;extension method&lt;/a&gt; that I wrote to return the original string repeated the number of times specified in the parenthesis.  In this case I am repeating a non-breaking space character so that the text is indented 3 characters for each level of the site hierarchy.  Shown below is the Repeat extension method used.    It could probably be made more efficient by using a StringBuilder object instead of using the += operator.&lt;/p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;public static string &lt;/span&gt;Repeat(&lt;span style="color:blue"&gt;this string &lt;/span&gt;instr, &lt;span style="color:blue"&gt;int &lt;/span&gt;n)
{
    &lt;span style="color:blue"&gt;var &lt;/span&gt;result = &lt;span style="color:blue"&gt;string&lt;/span&gt;.Empty;
    &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;var &lt;/span&gt;i = &lt;span style="color:brown"&gt;0&lt;/span&gt;; i &amp;lt; n; i++)
        result += instr;
    &lt;span style="color:blue"&gt;return &lt;/span&gt;result;
}
&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important note:&lt;/strong&gt; With .NET Framework 3.5 SP1 all requests to a webservice located on the same server as the calling application may with a 401 unauthorized error.   There is a &lt;a href="http://blogs.iis.net/webtopics/archive/2009/06/10/why-system-net-webexception-comes-up-post-net-framework-3-5-sp1.aspx" target="_blank"&gt;good article&lt;/a&gt; on blogs.iis.net that explains the issue and how to resolve.  &lt;/p&gt;
&lt;p&gt;&lt;a href="http://cid-8040cc624ddc5404.skydrive.live.com/self.aspx/Public/SharePointDirectoryWebpart.zip" target="_blank"&gt;Download example code here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The example code is intended to show how you could implement a similar directory.  The code may not compile or work as is in your environment. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/vIvjDsNLSr0" height="1" width="1"/&gt;</description><pubDate>Thu, 29 Oct 2009 13:03:10 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/vIvjDsNLSr0/cns!8040CC624DDC5404!758.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!758.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!758')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-29T13:03:10.9530000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!758.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!756</guid><category>SharePoint 2007</category><title>InvalidDatabaseSchema failed during SharePoint PreUpgradeCheck</title><description>&lt;p&gt;In service pack 2 for Microsoft Office SharePoint Server 2007 a new operation called PreUpgradeCheck was introduced for the STSADM command.  This operation uses the Microsoft Best Practices Analyzer to identity any issues that will need to be resolved prior to upgrading to SharePoint 2010.&lt;/p&gt; &lt;p&gt;Running the command is simple.  At a command prompt type:  &lt;strong&gt;stsadm –o preupgradecheck&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This command will not make any modifications to your SharePoint farm.  Once the command is complete you will be presented with a nice HTML report.  The report contains a lot of great information and should probably be stored with your disaster recovery plan.&lt;/p&gt; &lt;p&gt;During a recent run of this command on a production server I received a “Failed” message on the InvalidDatabaseSchema check.   This means that the database schema for one of the content databases did not match the original SharePoint schema.    I was very surprised to see this since no one except for the DBAs had access to the server and no one should have been modifying the databases directly.&lt;/p&gt; &lt;p&gt;I opened up the LOG directory in the SharePoint hive and located the latest PreUpgradeCheck log file.  About 1/2 way down the log I found an entry related to the specific error.  It indicated that an extra table called “sysdiagrams” was found in the content database.    I immediately had my ah-ha moment.   Someone who had access to the server either accidentally or intentionally went into the Database Diagrams folder for the content database in SQL Server Management Studio (SSMS).  When they did this SSMS stated that one or more objects were missing that were required to use database diagramming and asked if they should be created.   Clicking “yes” would immediately create the sysdiagrams table.&lt;/p&gt; &lt;p&gt;To resolve the issue and return the database schema back to the original state I user SSMS and opened up the System Tables section of my content database and deleted the sysdiagrams table.    I went back and ran the PreUpgradeCheck and this time I got a clean report.  &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Do not make any modifications to database tables unless you have a full backup and you are confident you could recover in case of an unexpected issue.  Making modifications directly to SharePoint database tables which change the schema from the out of the box configuration may invalidate any support agreements you have with Microsoft.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/AhBdBXbydkg" height="1" width="1"/&gt;</description><pubDate>Wed, 28 Oct 2009 19:21:56 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/AhBdBXbydkg/cns!8040CC624DDC5404!756.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!756.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!756')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-28T19:21:56.8700000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!756.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!753</guid><title>David Giard’s Technology and Friends</title><description>&lt;p&gt;Sogeti principal consultant, &lt;a href="http://www.davidgiard.com" target="_blank"&gt;David Giard&lt;/a&gt;, has an online technology show called “Technology and Friends”.   David is approaching his 60th episode and to recognize him for all of his great work I wanted to highlight a few of the videos he did with our local Sogeti consultants.    Make sure you check out his &lt;a href="http://www.davidgiard.com/Schedule.aspx" target="_blank"&gt;public speaking schedule&lt;/a&gt; where you can have a chance to see David live and possibly end up in one of his videos!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.davidgiard.com/2009/10/07/SaiNaikOnTheBenefitsOfSharePoint.aspx" target="_blank"&gt;Sai Naik&lt;/a&gt; &lt;br /&gt;Sogeti consultant Sai Naik describes the advantages of SharePoint and where it is a recommended solution.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.davidgiard.com/2009/10/05/DavidTruxallOnDebugging.aspx" target="_blank"&gt;David Truxall&lt;/a&gt; &lt;br /&gt;Principal consultant David Truxall discusses the art of debugging and dives into WinDbg and other tools to debug production issues.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.davidgiard.com/2009/07/22/JesseMurrayOnSharePointBestPractices.aspx" target="_blank"&gt;Jesse Murray&lt;/a&gt; &lt;br /&gt;Principal consultant Jesse Murray shares his opinions on how to implement SharePoint solutions “the right way”.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.davidgiard.com/2009/05/20/MikeHackerOnSingleSignOn.aspx" target="_blank"&gt;Mike Hacker&lt;/a&gt; &lt;br /&gt;Director Mike Hacker discusses issues around single sign-on.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.davidgiard.com/2009/09/26/SogetiGrokTalkOnlineDebuggingWithWinDbg.aspx" target="_blank"&gt;Grok Talk Online – Debugging with WinDbg&lt;/a&gt; &lt;br /&gt;First Sogeti Grok talk to be recorded and hosted online.  &lt;/p&gt; &lt;p&gt;Check out even more &lt;a href="http://www.davidgiard.com/default.aspx" target="_blank"&gt;great videos produced and edited by David Giard&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/80muDF6ihqI" height="1" width="1"/&gt;</description><pubDate>Mon, 26 Oct 2009 01:51:07 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/80muDF6ihqI/cns!8040CC624DDC5404!753.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!753.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!753')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-26T01:51:07.7970000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!753.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!751</guid><category>SharePoint 2007</category><title>Using a Control Adapter for Branding – Part 3</title><description>&lt;p&gt;In &lt;a href="http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!720.entry" target="_blank"&gt;part 1&lt;/a&gt; I described why a developer might choose to use a control adapter for branding out of the box SharePoint web parts.  In &lt;a href="http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!738.entry" target="_blank"&gt;part 2&lt;/a&gt; I showed how to create a control adapter and how you can deploy it to work with SharePoint.   In this final post for the series I will show an easier way for integrating control adapters into your SharePoint environment.&lt;/p&gt; &lt;p&gt;As you saw in part 2 the primary way to configure a control adapter is by adding a .browser file to your web applications app_browsers folder.  Ensuring that the file is created properly and deployed to all of the web front ends can be a complex and sometimes painful process.   An easier method is to add a little bit of code in your custom master page file.   Of course I am assuming here that since we are discussing branding you do have a custom master page with a code behind file.&lt;/p&gt; &lt;p&gt;To help attach a control adapter to a specific control type we will use a static helper method shown below.   This method should be placed in either a utility class or right within your custom master page class.   For the &lt;a href="http://www.destinationoakland.com" target="_blank"&gt;Destination Oakland&lt;/a&gt; site I placed it right within the custom master page class.&lt;/p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;       private static void &lt;/span&gt;AddControlAdapterToType&amp;lt;T&amp;gt;(&lt;span style="color:#2b91af"&gt;Type &lt;/span&gt;controlType) &lt;span style="color:blue"&gt;where &lt;/span&gt;T : ControlAdapter, &lt;span style="color:blue"&gt;new&lt;/span&gt;()
       {
           &lt;span style="color:blue"&gt;if &lt;/span&gt;(controlType == &lt;span style="color:blue"&gt;null&lt;/span&gt;)
           {
               &lt;span style="color:blue"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;controlType&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;This argument can not be null!&amp;quot;&lt;/span&gt;);
           }

           &lt;span style="color:blue"&gt;var &lt;/span&gt;adapters = HttpContext.Current.Request.Browser.Adapters;
           &lt;span style="color:blue"&gt;var &lt;/span&gt;key = controlType.AssemblyQualifiedName;
           &lt;span style="color:blue"&gt;if &lt;/span&gt;(!adapters.Contains(key))
           {
               &lt;span style="color:blue"&gt;var &lt;/span&gt;adapter = &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(T).AssemblyQualifiedName;
               adapters.Add(key, adapter);
           }
       }
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;We will use this helper method in the constructor of the master page class to bind our custom adapter to specific controls.   Below is an example from the &lt;a href="http://www.destinationoakland.com" target="_blank"&gt;Destination Oakland&lt;/a&gt; web site.&lt;/p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;public &lt;/span&gt;DestinationOaklandMaster()
{
    &lt;span style="color:green"&gt;//Add our custom branding control adapter to brand the OOB web parts
    &lt;/span&gt;AddControlAdapterToType&amp;lt;BrandingAdapter&amp;gt;(&lt;span style="color:blue"&gt;typeof&lt;/span&gt;(Microsoft.SharePoint.WebPartPages.ContentEditorWebPart));
    AddControlAdapterToType&amp;lt;BrandingAdapter&amp;gt;(&lt;span style="color:blue"&gt;typeof&lt;/span&gt;(Microsoft.SharePoint.WebPartPages.ImageWebPart));
    AddControlAdapterToType&amp;lt;BrandingAdapter&amp;gt;(&lt;span style="color:blue"&gt;typeof&lt;/span&gt;(Microsoft.SharePoint.WebPartPages.ListViewWebPart));
    AddControlAdapterToType&amp;lt;BrandingAdapter&amp;gt;(&lt;span style="color:blue"&gt;typeof&lt;/span&gt;(Microsoft.SharePoint.WebPartPages.PageViewerWebPart));

    &lt;span style="color:blue"&gt;this&lt;/span&gt;.Load += &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;EventHandler&lt;/span&gt;(Page_Load);
}

&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;The code in the constructor of the DestinationOaklandMaster class binds my custom control adapter class “BrandingAdapter” to 4 different out of the box SharePoint controls.    I find binding control adapters to controls using this method much more simpler than creating and deploying a .Browser xml file on all of the SharePoint web front ends.&lt;/p&gt;
&lt;p&gt;As you have seen through this series of posts, branding out of the box SharePoint controls can be made easier by using custom control adapters.   Remember that anytime you introduce more code into your environment you could potentially see a performance impact.   In the case with Destination Oakland I saw no noticeable impact on the performance of the server when using a single custom control adapter bound to the 4 different out of the box SharePoint controls.  &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/GIHvfRaYbOc" height="1" width="1"/&gt;</description><pubDate>Sun, 25 Oct 2009 20:51:26 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/GIHvfRaYbOc/cns!8040CC624DDC5404!751.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!751.entry#comment</comments><slash:comments>2</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!751')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-25T20:51:26.6030000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!751.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!738</guid><title>Using a Control Adapter for Branding – Part 2</title><description>&lt;p&gt;In &lt;a href="http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!720.entry" target="_blank"&gt;part 1&lt;/a&gt; I described why a developer might choose to use a control adapter for branding out of the box SharePoint web parts.  In part 2 I will explain how to create a control adapter and how you can deploy it to work with SharePoint.   In part 3 I will show an easier way for integrating control adapters into your SharePoint environment.&lt;/p&gt; &lt;p&gt;A control adapter allows a developers to change the default rendering behavior of any control.  In the case of SharePoint we can use the control adapter to modify how all or specific out of the box web parts are rendered.  This allows us to easily apply custom classes, styles and tags to the rendered output so we can control the branding of those web parts.&lt;/p&gt; &lt;p&gt;The branding that I wanted to accomplish was to have all 4 corners of the web parts rounded and put styles in place to complete the intended effect.   The final branding of the web parts can be seen on the public website I recently completed called &lt;a href="http://www.destinationoakland.com/" target="_blank"&gt;Destination Oakland&lt;/a&gt;.   The inside pages of the site are SharePoint publishing pages with a primary content publishing zone in the left and web parts along the right side.  This is where you will see the control adapter in action.&lt;/p&gt; &lt;p&gt;To create a control adapter we start with a .NET class that inherits from the &lt;strong&gt;System.Web.UI.Adapters.ControlAdapter&lt;/strong&gt; base class.   We then override the &lt;strong&gt;Render&lt;/strong&gt; method to modify the HTML that will be generated by the controls which are associated to the control adapter.&lt;/p&gt; &lt;p&gt;Below is an example control adapter used on the public SharePoint web site &lt;a href="http://www.destinationoakland.com"&gt;www.destinationoakland.com&lt;/a&gt;.     &lt;/p&gt;&lt;pre style="overflow:scroll"&gt;&lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;BrandingAdapter &lt;/span&gt;: ControlAdapter
    {
        &lt;span style="color:blue"&gt;protected override void &lt;/span&gt;Render(System.Web.UI.HtmlTextWriter writer)
        {
            &lt;span style="color:blue"&gt;var &lt;/span&gt;webpart = Control &lt;span style="color:blue"&gt;as &lt;/span&gt;WebPart;
            webpart.ChromeType = PartChromeType.None;

            &lt;span style="color:#2b91af"&gt;StringWriter &lt;/span&gt;stringWriter = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;StringWriter&lt;/span&gt;();
            &lt;span style="color:blue"&gt;using &lt;/span&gt;(HtmlTextWriter html = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTextWriter(stringWriter))
            {
                &lt;span style="color:blue"&gt;base&lt;/span&gt;.Render(html);
            }

            &lt;span style="color:green"&gt;//Start new table to format rounded corners.
            &lt;/span&gt;HtmlTable tblBranding = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTable();
            tblBranding.CellSpacing = &lt;span style="color:brown"&gt;0&lt;/span&gt;;
            tblBranding.CellPadding = &lt;span style="color:brown"&gt;0&lt;/span&gt;;
            tblBranding.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;);

            &lt;span style="color:blue"&gt;#region &lt;/span&gt;Header
            HtmlTableRow trHeader = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableRow();
            HtmlTableCell tcTopLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcTopLeftCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgTopLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgTopLeftCorner.ImageUrl = Helper.GetSubPageImageURL(HttpContext.Current, &lt;span style="color:#a31515"&gt;&amp;quot;subheaderleft.png&amp;quot;&lt;/span&gt;,&lt;span style="color:blue"&gt;true&lt;/span&gt;);
            tcTopLeftCorner.Controls.Add(imgTopLeftCorner);
            trHeader.Cells.Add(tcTopLeftCorner);

            HtmlTableCell tcTopCenter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcTopCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetSubPageImageURL(HttpContext.Current, &lt;span style="color:#a31515"&gt;&amp;quot;subheaderfill.png&amp;quot;&lt;/span&gt;,&lt;span style="color:blue"&gt;false&lt;/span&gt;));
            tcTopCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat-x&amp;quot;&lt;/span&gt;);
            tcTopCenter.Controls.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;LiteralControl(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;div class='destoak-webpartTitleArea'&amp;gt;&amp;quot; &lt;/span&gt;+ webpart.Title + &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;));
            trHeader.Cells.Add(tcTopCenter);

            HtmlTableCell tcTopRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcTopRightCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgTopRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgTopRightCorner.ImageUrl = Helper.GetSubPageImageURL(HttpContext.Current, &lt;span style="color:#a31515"&gt;&amp;quot;subheaderright.png&amp;quot;&lt;/span&gt;,&lt;span style="color:blue"&gt;true&lt;/span&gt;);
            tcTopRightCorner.Controls.Add(imgTopRightCorner);
            trHeader.Cells.Add(tcTopRightCorner);

            tblBranding.Rows.Add(trHeader);
            &lt;span style="color:blue"&gt;#endregion

            #region &lt;/span&gt;Content
            HtmlTableRow trContent = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableRow();
            HtmlTableCell tcContentLeft = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcContentLeft.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentLeftShadow.png&amp;quot;&lt;/span&gt;));
            tcContentLeft.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat:y&amp;quot;&lt;/span&gt;);
            trContent.Cells.Add(tcContentLeft);

            HtmlTableCell tcContentCenter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcContentCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentFill.png&amp;quot;&lt;/span&gt;);
            tcContentCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat&amp;quot;&lt;/span&gt;);
            tcContentCenter.Controls.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;LiteralControl(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;div class='destoak-webpartBodyArea'&amp;gt;&amp;quot; &lt;/span&gt;+ stringWriter.ToString() + &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;));
            trContent.Cells.Add(tcContentCenter);

            HtmlTableCell tcContentRight = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcContentRight.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentRightShadow.png&amp;quot;&lt;/span&gt;));
            tcContentRight.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat:y&amp;quot;&lt;/span&gt;);
            trContent.Cells.Add(tcContentRight);

            tblBranding.Rows.Add(trContent);
            &lt;span style="color:blue"&gt;#endregion

            #region &lt;/span&gt;Footer
            HtmlTableRow trFooter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableRow();
            HtmlTableCell tcBottomLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcBottomLeftCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgBottomLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgBottomLeftCorner.ImageUrl = Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentleftcorner.png&amp;quot;&lt;/span&gt;);
            tcBottomLeftCorner.Controls.Add(imgBottomLeftCorner);
            trFooter.Cells.Add(tcBottomLeftCorner);

            HtmlTableCell tcBottomCenter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcBottomCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentbottomshadow.png&amp;quot;&lt;/span&gt;));
            tcBottomCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat:x&amp;quot;&lt;/span&gt;);
            trFooter.Cells.Add(tcBottomCenter);

            HtmlTableCell tcBottomRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcBottomRightCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgBottomRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgBottomRightCorner.ImageUrl = Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentrightcorner.png&amp;quot;&lt;/span&gt;);
            tcBottomRightCorner.Controls.Add(imgBottomRightCorner);
            trFooter.Cells.Add(tcBottomRightCorner);

            tblBranding.Rows.Add(trFooter);
            &lt;span style="color:blue"&gt;#endregion

            &lt;/span&gt;writer.Write(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;div class='destoak-webpartTable'&amp;gt;&amp;quot;&lt;/span&gt;);
            tblBranding.RenderControl(writer);
            writer.Write(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;);

        }
    }&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;It is recommended that you build and deploy the control adapter as part of your SharePoint branding WSP installer.  For testing purposes you can manually deploy the assembly to your web front ends global assembly cache.&lt;/p&gt;
&lt;p&gt;One last thing must be accomplished before the control adapter will work.  You need to add a browser file to the App_Browsers folder for your specific IIS SharePoint web application.  (Remember to do this on ALL web front end servers)   This file tells IIS to apply a control adapter to a specific control type while rendering the web page.   For example I may indicate that all Microsoft.SharePoint.WebPartPages.ContentEditorWebPart controls are rendered using my custom branding ControlAdapter.  &lt;/p&gt;
&lt;p&gt;By default SharePoint 2007 has a browser file called compat.browser located in the App_Browsers folder.  You could modify that file or you can create your own file that ends with the extension of .browser and place it in the App_Browsers folder.   Below is the contents of an example .browser file.  You will need to modify it to reference your specific control adapter class name and the control you wish to brand.&lt;/p&gt;
&lt;p&gt;&amp;lt;browsers&amp;gt; &lt;br /&gt;   &amp;lt;browser refID=”Default”&amp;gt; &lt;br /&gt;      &amp;lt;controlAdapters&amp;gt; &lt;br /&gt;            &amp;lt;adapter controlType=”Microsoft.SharePoint.WebPartPages.ContentEditorWebPart” &lt;br /&gt;                     adapterType=”MyNamespace.MyControlAdapter” /&amp;gt; &lt;br /&gt;       &amp;lt;/controlAdapters&amp;gt; &lt;br /&gt;   &amp;lt;/browser&amp;gt; &lt;br /&gt;&amp;lt;/browsers&amp;gt;&lt;/p&gt;
&lt;p&gt;One drawback about this method is that it is not easy to create and deploy a .browser file to all of the SharePoint web front end servers via a .WSP installer.  In part 3 of this series I will show you how to hook up a control adapter via code in the web sites masterpage.   This will simplify the process of using control adapters within SharePoint.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/kmjgEP7oPMc" height="1" width="1"/&gt;</description><pubDate>Thu, 22 Oct 2009 00:07:44 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/kmjgEP7oPMc/cns!8040CC624DDC5404!738.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!738.entry#comment</comments><slash:comments>1</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!738')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-22T00:07:44.0230000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!738.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!737</guid><title>Oakland County Wins Government Award for SharePoint Blog</title><description>&lt;p&gt;Over the past year I have been working at Oakland County on many SharePoint projects including their Intranet, Extranet and public Parks and Recreation web site.   Recently Oakland county received an award for a SharePoint blog based application used for collecting IT cost reduction ideas.  Below is a recent announcement about this award.&lt;/p&gt; &lt;p&gt; &lt;hr /&gt;  &lt;p&gt;&lt;/p&gt; &lt;p&gt;Oakland County Executive L. Brooks Patterson announced recently that an internal cost reduction blog application created and deployed by Sogeti won the “Best Application Serving a Public Organization” award at the Michigan Digital Government Summit in Lansing on October 14, 2009.   Oakland County also received an award for their county web site Video Center.&lt;/p&gt; &lt;p&gt;“These awards underscore Oakland County’s continuing commitment to creating cost-effective programs for the benefit of our citizens,” says Patterson. &lt;/p&gt; &lt;p&gt;The Cost Reduction/Investment Blog lets county government employees discuss budgetary suggestions to bring down the county’s overall operating costs. The blog has helped the County’s IT department identify hundreds of thousands of dollars in savings. &lt;i&gt;Government Technology&lt;/i&gt; magazine (&lt;a href="http://www.govtech.com/gt/706827"&gt;http://www.govtech.com/gt/706827&lt;/a&gt;) has featured the Cost Reduction/Investment Blog in its publication.&lt;/p&gt; &lt;p&gt;“In a tough economy, technology helps us do more with less. Oakland County’s eGovernment programs are cost-efficient and we’ve seen substantial returns on our technology investments. Less money spent on government operations means more money is available for providing better service to our citizens,” says Phil Bertolini, Oakland County chief information officer and deputy county executive.&lt;/p&gt; &lt;p&gt;Oakland County recently ranked first among counties with populations of half a million or more in the 2009 Center for Digital Government Digital Counties Survey. Learn more about Oakland County’s online services and eGovernment programs at &lt;a href="http://www.oakgov.com/"&gt;www.oakgov.com&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/Xf3oSX1-juE" height="1" width="1"/&gt;</description><pubDate>Wed, 21 Oct 2009 17:26:38 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/Xf3oSX1-juE/cns!8040CC624DDC5404!737.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!737.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!737')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-21T17:26:38.7200000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!737.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!736</guid><category>SharePoint 2007</category><title>Using a Control Adapter for Branding – Part 2</title><description>&lt;p&gt;In part 1 I described why a developer might choose to use a control adapter for branding out of the box SharePoint web parts.  In part 2 I will explain how to create a control adapter and how you can deploy it to work with SharePoint.   In part 3 I will show an easier way for integrating control adapters into your SharePoint environment.&lt;/p&gt; &lt;p&gt;A control adapter allows a developers to change the default rendering behavior of any control.  In the case of SharePoint we can use the control adapter to modify how all or specific out of the box web parts are rendered.  This allows us to easily apply custom classes, styles and tags to the rendered output so we can control the branding of those web parts.&lt;/p&gt; &lt;p&gt;The branding that I wanted to accomplish was to have all 4 corners of the web parts rounded and put styles in place to complete the intended effect.   The final branding of the web parts can be seen on the public website I recently completed called &lt;a href="http://www.destinationoakland.com/" target="_blank"&gt;Destination Oakland&lt;/a&gt;.   The inside pages of the site are SharePoint publishing pages with a primary content publishing zone in the left and web parts along the right side.  This is where you will see the control adapter in action.&lt;/p&gt; &lt;p&gt;To create a control adapter we start with a .NET class that inherits from the &lt;strong&gt;System.Web.UI.Adapters.ControlAdapter&lt;/strong&gt; base class.   We then override the &lt;strong&gt;Render&lt;/strong&gt; method to modify the HTML that will be generated by the controls which are associated to the control adapter.&lt;/p&gt; &lt;p&gt;Below is an example control adapter used on the public SharePoint web site &lt;a href="http://www.destinationoakland.com"&gt;www.destinationoakland.com&lt;/a&gt;.     &lt;/p&gt;&lt;pre style="overflow:scroll"&gt;&lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;BrandingAdapter &lt;/span&gt;: ControlAdapter
    {
        &lt;span style="color:blue"&gt;protected override void &lt;/span&gt;Render(System.Web.UI.HtmlTextWriter writer)
        {
            &lt;span style="color:blue"&gt;var &lt;/span&gt;webpart = Control &lt;span style="color:blue"&gt;as &lt;/span&gt;WebPart;
            webpart.ChromeType = PartChromeType.None;

            &lt;span style="color:#2b91af"&gt;StringWriter &lt;/span&gt;stringWriter = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;StringWriter&lt;/span&gt;();
            &lt;span style="color:blue"&gt;using &lt;/span&gt;(HtmlTextWriter html = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTextWriter(stringWriter))
            {
                &lt;span style="color:blue"&gt;base&lt;/span&gt;.Render(html);
            }

            &lt;span style="color:green"&gt;//Start new table to format rounded corners.
            &lt;/span&gt;HtmlTable tblBranding = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTable();
            tblBranding.CellSpacing = &lt;span style="color:brown"&gt;0&lt;/span&gt;;
            tblBranding.CellPadding = &lt;span style="color:brown"&gt;0&lt;/span&gt;;
            tblBranding.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;);

            &lt;span style="color:blue"&gt;#region &lt;/span&gt;Header
            HtmlTableRow trHeader = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableRow();
            HtmlTableCell tcTopLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcTopLeftCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgTopLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgTopLeftCorner.ImageUrl = Helper.GetSubPageImageURL(HttpContext.Current, &lt;span style="color:#a31515"&gt;&amp;quot;subheaderleft.png&amp;quot;&lt;/span&gt;,&lt;span style="color:blue"&gt;true&lt;/span&gt;);
            tcTopLeftCorner.Controls.Add(imgTopLeftCorner);
            trHeader.Cells.Add(tcTopLeftCorner);

            HtmlTableCell tcTopCenter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcTopCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetSubPageImageURL(HttpContext.Current, &lt;span style="color:#a31515"&gt;&amp;quot;subheaderfill.png&amp;quot;&lt;/span&gt;,&lt;span style="color:blue"&gt;false&lt;/span&gt;));
            tcTopCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat-x&amp;quot;&lt;/span&gt;);
            tcTopCenter.Controls.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;LiteralControl(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;div class='destoak-webpartTitleArea'&amp;gt;&amp;quot; &lt;/span&gt;+ webpart.Title + &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;));
            trHeader.Cells.Add(tcTopCenter);

            HtmlTableCell tcTopRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcTopRightCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgTopRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgTopRightCorner.ImageUrl = Helper.GetSubPageImageURL(HttpContext.Current, &lt;span style="color:#a31515"&gt;&amp;quot;subheaderright.png&amp;quot;&lt;/span&gt;,&lt;span style="color:blue"&gt;true&lt;/span&gt;);
            tcTopRightCorner.Controls.Add(imgTopRightCorner);
            trHeader.Cells.Add(tcTopRightCorner);

            tblBranding.Rows.Add(trHeader);
            &lt;span style="color:blue"&gt;#endregion

            #region &lt;/span&gt;Content
            HtmlTableRow trContent = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableRow();
            HtmlTableCell tcContentLeft = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcContentLeft.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentLeftShadow.png&amp;quot;&lt;/span&gt;));
            tcContentLeft.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat:y&amp;quot;&lt;/span&gt;);
            trContent.Cells.Add(tcContentLeft);

            HtmlTableCell tcContentCenter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcContentCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentFill.png&amp;quot;&lt;/span&gt;);
            tcContentCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat&amp;quot;&lt;/span&gt;);
            tcContentCenter.Controls.Add(&lt;span style="color:blue"&gt;new &lt;/span&gt;LiteralControl(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;div class='destoak-webpartBodyArea'&amp;gt;&amp;quot; &lt;/span&gt;+ stringWriter.ToString() + &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;));
            trContent.Cells.Add(tcContentCenter);

            HtmlTableCell tcContentRight = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcContentRight.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentRightShadow.png&amp;quot;&lt;/span&gt;));
            tcContentRight.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat:y&amp;quot;&lt;/span&gt;);
            trContent.Cells.Add(tcContentRight);

            tblBranding.Rows.Add(trContent);
            &lt;span style="color:blue"&gt;#endregion

            #region &lt;/span&gt;Footer
            HtmlTableRow trFooter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableRow();
            HtmlTableCell tcBottomLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcBottomLeftCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgBottomLeftCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgBottomLeftCorner.ImageUrl = Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentleftcorner.png&amp;quot;&lt;/span&gt;);
            tcBottomLeftCorner.Controls.Add(imgBottomLeftCorner);
            trFooter.Cells.Add(tcBottomLeftCorner);

            HtmlTableCell tcBottomCenter = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcBottomCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-image&amp;quot;&lt;/span&gt;, Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentbottomshadow.png&amp;quot;&lt;/span&gt;));
            tcBottomCenter.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;background-repeat&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;repeat:x&amp;quot;&lt;/span&gt;);
            trFooter.Cells.Add(tcBottomCenter);

            HtmlTableCell tcBottomRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;HtmlTableCell();
            tcBottomRightCorner.Style.Add(&lt;span style="color:#a31515"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;6px&amp;quot;&lt;/span&gt;);
            Image imgBottomRightCorner = &lt;span style="color:blue"&gt;new &lt;/span&gt;Image();
            imgBottomRightCorner.ImageUrl = Helper.GetTransparentImageURL(HttpContext.Current,&lt;span style="color:#a31515"&gt;&amp;quot;/_layouts/images/DestinationOakland/subpages/contentrightcorner.png&amp;quot;&lt;/span&gt;);
            tcBottomRightCorner.Controls.Add(imgBottomRightCorner);
            trFooter.Cells.Add(tcBottomRightCorner);

            tblBranding.Rows.Add(trFooter);
            &lt;span style="color:blue"&gt;#endregion

            &lt;/span&gt;writer.Write(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;div class='destoak-webpartTable'&amp;gt;&amp;quot;&lt;/span&gt;);
            tblBranding.RenderControl(writer);
            writer.Write(&lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;);

        }
    }
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;It is recommended that you build and deploy the control adapter as part of your SharePoint branding WSP installer.  For testing purposes you can manually deploy the assembly to your web front ends global assembly cache.&lt;/p&gt;
&lt;p&gt;One last thing must be accomplished before the control adapter will work.  You need to add a browser file to the App_Browsers folder for your specific IIS SharePoint web application.  (Remember to do this on ALL web front end servers)   This file tells IIS to apply a control adapter to a specific control type while rendering the web page.   For example I may indicate that all Microsoft.SharePoint.WebPartPages.ContentEditorWebPart controls are rendered using my custom branding ControlAdapter.  &lt;/p&gt;
&lt;p&gt;By default SharePoint 2007 has a browser file called compat.browser located in the App_Browsers folder.  You could modify that file or you can create your own file that ends with the extension of .browser and place it in the App_Browsers folder.   Below is the contents of an example .browser file.  You will need to modify it to reference your specific control adapter class name and the control you wish to brand.&lt;/p&gt;
&lt;p&gt;&amp;lt;browsers&amp;gt;&lt;br /&gt;   &amp;lt;browser refID=”Default”&amp;gt;&lt;br /&gt;      &amp;lt;controlAdapters&amp;gt;&lt;br /&gt;            &amp;lt;adapter controlType=”Microsoft.SharePoint.WebPartPages.ContentEditorWebPart”&lt;br /&gt;                     adapterType=”MyNamespace.MyControlAdapter” /&amp;gt;&lt;br /&gt;       &amp;lt;/controlAdapters&amp;gt;&lt;br /&gt;   &amp;lt;/browser&amp;gt;&lt;br /&gt;&amp;lt;/browsers&amp;gt;&lt;/p&gt;
&lt;p&gt;One drawback about this method is that it is not easy to create and deploy a .browser file to all of the SharePoint web front end servers via a .WSP installer.  In part 3 of this series I will show you how to hook up a control adapter via code in the web sites masterpage.   This will simplify the process of using control adapters within SharePoint.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/8VagAbfZVJs" height="1" width="1"/&gt;</description><pubDate>Wed, 21 Oct 2009 13:47:15 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/8VagAbfZVJs/cns!8040CC624DDC5404!736.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!736.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!736')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-21T13:47:15.3600000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!736.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!723</guid><title>Build Better Software with Team System (VSTS) 2010</title><description>&lt;p&gt;Join Sogeti and New Horizons on October 29th at a free event in Grand Rapids, Michigan titled “Build Better Software With Team System (VSTS) 2010”.   The event will be presented by David Giard, a principal consultant for Sogeti.&lt;/p&gt; &lt;p&gt;Discussion points will include:&lt;/p&gt; &lt;li&gt; &lt;p&gt;Develop better software with VSTS &lt;/p&gt; &lt;li&gt; &lt;p&gt;An overview on how the Application Lifecycle Management (ALM) and ALM tooling help organizations build quality into their lifecycle &lt;/p&gt; &lt;li&gt; &lt;p&gt;New Features of VSTS to help break down organizational walls between the developers and testers &lt;/p&gt; &lt;li&gt; &lt;p&gt;Getting better software with Visual Studio Team System 2010&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Speaker:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;David Giard is a Principal Consultant and the Detroit Application Development Lead for Sogeti USA. He has been developing solutions using Microsoft technologies since 1993. In the past, he has spoken at CodeStock, Day of .Net, Microsoft DevCares, Microsoft ArcReady, Dot Net University, X Conference and numerous user groups around the Midwest. He is an officer of the Great Lakes Area .Net User Group. You can read his latest thoughts at &lt;a href="http://www.DavidGiard.com"&gt;www.DavidGiard.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Event Code: 142017 &lt;br /&gt;&lt;/strong&gt;10/29/2009 &lt;br /&gt;01:00 PM - 03:00 PM &lt;br /&gt;Welcome Time: 12:30 PM &lt;br /&gt;New Horizons&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Location: &lt;br /&gt;&lt;/strong&gt;New Horizons &lt;br /&gt;5315 28th St. Court SE &lt;br /&gt;Suite B &lt;br /&gt;Grand Rapids, MI 49546&lt;/p&gt; &lt;p&gt;&lt;a href="https://www.clicktoattend.com/directions.aspx?code=142017"&gt;driving directions&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="https://www.clicktoattend.com/invitation.aspx?code=142017" target="_blank"&gt;Register Now!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/S8r2gexaPqE" height="1" width="1"/&gt;</description><pubDate>Tue, 06 Oct 2009 19:13:09 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/S8r2gexaPqE/cns!8040CC624DDC5404!723.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!723.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!723')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-10-06T19:13:09.7700000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!723.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!722</guid><title>Sogeti Grok Talk Online: Debugging with WinDbg</title><description>&lt;p&gt;Recently Sogeti Principal consultant David Truxall delivered a presentation on Debugging with WinDbg.   Check out the presentation here:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.davidgiard.com/2009/09/26/SogetiGrokTalkOnlineDebuggingWithWinDbg.aspx" href="http://www.davidgiard.com/2009/09/26/SogetiGrokTalkOnlineDebuggingWithWinDbg.aspx"&gt;http://www.davidgiard.com/2009/09/26/SogetiGrokTalkOnlineDebuggingWithWinDbg.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/6CL4rl2MRZ0" height="1" width="1"/&gt;</description><pubDate>Sat, 26 Sep 2009 17:54:25 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/6CL4rl2MRZ0/cns!8040CC624DDC5404!722.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!722.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!722')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-09-26T17:54:25.3130000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!722.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!720</guid><category>SharePoint 2007</category><title>Using a Control Adapter for Branding SharePoint Web Parts</title><description>&lt;p&gt;One of the requirements I see appear over and over when working with custom SharePoint deployments is the need for medium to complex branding.  In the case of an intranet deployment the branding usually is more basic and functional.  Possibly some minor master page changes, a new set of styles, and replacing some images is all that is required.   When it comes to public facing SharePoint sites the branding suddenly can become much more complex.&lt;/p&gt; &lt;p&gt;With public facing sites it seems that completely new master pages, page layouts, styles, images, web parts and dynamic content (jQuery, Ajax, etc…) is required.   Most of the branding efforts are pretty straight forward.  The difficult part can be branding the out of the box SharePoint web parts.   If you have ever tried to do something fairly common such as adding full 4 rounded corner effect to a web part you will find that it can be a difficult if not impossible.   This is because the out of the box web parts have very limited CSS classes defined, and without those CSS classes we will have a very tough time creating a cross browser style to match our designers intention.   This is where control adapters come in and can help.&lt;/p&gt; &lt;p&gt;A control adapter is a simple class that when applied can override the rendering of any web control.   Using a control adapter we can easily wrap additional HTML tags with CSS classes around the out of the box web part so we can get the full 4 rounded corner effect our designer was after.  &lt;/p&gt; &lt;p&gt;Creating a control adapter is simple.  Start with a single class that inherits from the ControlAdapter base class.   Override the Render method and implement your own rendering basing it on the original controls rendered content.   Once you have a control adapter compiled with a strong name it can be deployed as part of a SharePoint solution package.   With a little bit of custom code behind your master page you can easily apply the control adapter to selected out of the box SharePoint web controls.  &lt;/p&gt; &lt;p&gt;In an upcoming blog post I will go into detail on how to create a control adapter and how to register that for use with SharePoint.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/RVNkffmV0Yo" height="1" width="1"/&gt;</description><pubDate>Tue, 22 Sep 2009 22:32:24 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/RVNkffmV0Yo/cns!8040CC624DDC5404!720.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!720.entry#comment</comments><slash:comments>1</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!720')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-09-22T22:32:24.1170000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!720.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!714</guid><title>Sogeti USA Wins 2009 Microsoft Central Region Partner Of The Year Award For Customer Experience</title><description>&lt;p&gt;New press release covering our recent Microsoft partner award:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.prweb.com/releases/Sogeti_USA/customer_experience/prweb2808404.htm" href="http://www.prweb.com/releases/Sogeti_USA/customer_experience/prweb2808404.htm"&gt;http://www.prweb.com/releases/Sogeti_USA/customer_experience/prweb2808404.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/qpiXWhQQZHA" height="1" width="1"/&gt;</description><pubDate>Mon, 31 Aug 2009 20:19:32 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/qpiXWhQQZHA/cns!8040CC624DDC5404!714.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!714.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!714')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-08-31T20:19:32.9370000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!714.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!713</guid><category>SharePoint 2007</category><title>SharePoint 2007 – Access Denied Creating a Page</title><description>&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; When creating a page in SharePoint 2007 a user that is part of the members group (or another group that has proper permissions on the pages library) receives an access denied error message.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Possible Solution:&lt;/strong&gt; Check the permissions of the master page document library to ensure that the users creating pages have at least read access to the files.  In our case we needed to make sure that the members group had read access.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Possible Cause:&lt;/strong&gt;  In our situation we had taken a subsite and redeployed it as a site collection in a new web application that was enabled for anonymous users.   This caused the master page gallery permissions to be inaccurate.   Once we fixed the permissions in the master page gallery the users in the members group could now create pages.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/vU4ZLRaT9Lg" height="1" width="1"/&gt;</description><pubDate>Mon, 31 Aug 2009 15:02:20 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/vU4ZLRaT9Lg/cns!8040CC624DDC5404!713.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!713.entry#comment</comments><slash:comments>1</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!713')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-08-31T15:02:20.0800000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!713.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!712</guid><title>SharePoint 2007 and Ajax UpdatePanel Post Back Problem</title><description>&lt;p&gt;Working on a recent project I had the need to create a custom calendar control web part.   One of the requirements I had was to make sure that when users navigated the calendar the whole page didn’t post back.    I knew a simple solution, using an UpdatePanel.   I figured this would take me just a few minutes to get the web.config file prepped with the necessary ajax updates and then wrap my calendar control with an UpdatePanel.&lt;/p&gt; &lt;p&gt;Since I am working on a post SP1 version of SharePoint I didn’t need to do any of the javascript hacks to get the UpdatePanel to work.  I should have been able to just wrap the calendar control and be on my way.   However, things did not go as planned.   Everytime I tested the web part the full page would post back instead of just updating the calendar.   What was wrong?&lt;/p&gt; &lt;p&gt;It turns out the answer was a simple one.  I had forgotten to set the ID property of my calendar control.  This made it impossible for the updatepanel to work properly and caused the full page to post back.    Once the ID was in place the updatepanel worked as expected.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/leA6lvX7sNk" height="1" width="1"/&gt;</description><pubDate>Fri, 21 Aug 2009 16:17:41 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/leA6lvX7sNk/cns!8040CC624DDC5404!712.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!712.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!712')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-08-21T16:17:41.0070000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!712.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!700</guid><title>Blog Moved</title><description>&lt;p&gt;As of today, June 24, 2009 I have moved my blog to Sogeti’s blog hosting at &lt;a href="http://blogs.us.sogeti.com/mhacker"&gt;http://blogs.us.sogeti.com/mhacker&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Please update your RSS feed if you are a subscriber.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Update:  I have decided to cross post here and at my new blog.  &lt;/strong&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/FENF7oUB7rw" height="1" width="1"/&gt;</description><pubDate>Thu, 25 Jun 2009 01:49:40 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/FENF7oUB7rw/cns!8040CC624DDC5404!700.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!700.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!700')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-08-21T16:19:10.1400000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!700.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!699</guid><category>Windows 7</category><title>Experience Windows 7</title><description>&lt;table border="0" cellspacing="5" cellpadding="2" width="100%"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" colspan="2"&gt;&lt;a href="https://besddw.bay.livefilestore.com/y1maTyb2am959Rol0djXHjIiHXgms8D9JzkoH4Vlgycyz-sIfBlTPobCPuvA_o3cRHKWxJLL8_F1-GODEg-nZngKNdqA2-Mq9wnvP5xyJnM8vnJxJfsxuZj6bwFFasP8PaoCe8m4GyJxZUb4DhsyGsP4g/clip_image002[4][2].jpg" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto" title="clip_image002[4]" border="0" alt="clip_image002[4]" src="https://besddw.bay.livefilestore.com/y1mi-Hcnyrx1Fg4FnguuoyexO_vAb1NhwJwD9woztx3v31zer7ufuwyJN1bIcj8nALrpR48h84-QDxM-z6mvUO-TStfh7yLSWPUaUUOcN-SASiCUrvH-Ni9bCgMpvr0Js1gYTm_nORGB7O6O1QoMquiaA/clip_image002[4]_thumb.jpg" width="244" height="72" /&gt;  &lt;p align="center"&gt;&lt;/a&gt;&lt;strong&gt;Experience Windows 7 is coming to Detroit!&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="262"&gt; &lt;p&gt;&lt;b&gt;&lt;font color="#ff0000"&gt;Sogeti&lt;/font&gt;&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;and &lt;/b&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;New Horizons&lt;/font&gt;&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;is bringing Windows 7 to you!  Join us to learn about Windows most recent operating system.&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;a href="https://besddw.bay.livefilestore.com/y1mFKEFRxkvO3ay-XAOPWma5SmWNqon-YYd2VDmD4a2Ui_nzucgXTkinc3wxCfF_HMVG5XqSCnGm7Zhkp5VvewcoJxhZEZg4vX3YpnwFasxOLgmOOpAzloQ3Qv5HwpWZ3Im8MM91xOgjsxl829QgqHyoA/clip_image002[6][2].jpg" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="clip_image002[6]" border="0" alt="clip_image002[6]" src="https://besddw.bay.livefilestore.com/y1mmUbai9QhtxT0hjgQFqptxITchY57xs2Pt5Gb4gROeGr3NwbOQ_2mYEVmqCn3h9ekBW4HsCGkyiqBS3kp54iR6ArOBJYy9fC08bLj_VzyB2qt8iVII8wprorNBJNrpQLHA1Aw8JtVSDN7z-HhphF1Hw/clip_image002[6]_thumb.jpg" width="203" height="51" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://besddw.bay.livefilestore.com/y1mfIuytClqk9uAZZTVQGiTXLRkjQ0dqTyalCU8SWZAWEfqbF1bGsywnsX4HU4te7oVulFNROwcGO-8cRtK13FPFHNJtAw6xJ9DFeLUfQTc90Huwssnqjqf1HwpC_eTtdCae06TCrU-DzGl-EhkjGsAlA/clip_image004[4][2].jpg" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="clip_image004[4]" border="0" alt="clip_image004[4]" src="https://besddw.bay.livefilestore.com/y1mTiWzDcMDpAgCj1kqy4ayh44r3cuI-AuXRDqf2Qengi2YkHFvwEXgvDGHJSBappwiFDayWmSMiYYokndbZwx-5Dz-_Lzq9LYSax5uX6XoxJGV75GLjeeWjT_1RO8WYtWMCEMgSO5gIcdJgfsD9TR7-Q/clip_image004[4]_thumb.jpg" width="184" height="102" /&gt;&lt;/a&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;July 23, 2009&lt;/b&gt;  &lt;p&gt;&lt;b&gt;9am – 11am&lt;/b&gt;  &lt;p&gt;&lt;a href="http://www.clicktoattend.com/?id=139173"&gt;&lt;b&gt;&lt;i&gt;Click to Register&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;Microsoft Corporation&lt;br /&gt;&lt;/b&gt;&lt;b&gt;1000 Town Center Dr.&lt;br /&gt;&lt;/b&gt;&lt;b&gt;Southfield Town Center, Suite 1930&lt;br /&gt;&lt;/b&gt;&lt;b&gt;Southfield, MI 48075&lt;/b&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="329"&gt; &lt;h4&gt;&lt;strong&gt;Event Highlights&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;Learn about Windows 7 benefits for businesses:  &lt;p&gt;· Make users productive anywhere&lt;br /&gt;· Enhance security and control&lt;br /&gt;· Streamline PC management&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Agenda &lt;/strong&gt; &lt;p&gt;· Compatibility and Deployment&lt;br /&gt;· DirectAccess&lt;br /&gt;· BranchCache&lt;br /&gt;· BitLocker&lt;br /&gt;· AppLocker&lt;br /&gt;· Virtualization&lt;br /&gt;· Search&lt;/p&gt; &lt;p&gt;&lt;b&gt;Are you interested in hosting a Windows 7 event on your premises? Please reach out to your local Sogeti  team to schedule!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="266"&gt; &lt;/td&gt; &lt;td valign="top" width="331"&gt; &lt;p&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align:right;margin:0px;padding:4px 0px 4px 0px"&gt;&lt;a href="http://digg.com/submit?url=http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!699.entry&amp;amp;title=Experience+Windows+7"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/9bnYsEJ0Zj8" height="1" width="1"/&gt;</description><pubDate>Mon, 22 Jun 2009 13:10:40 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/9bnYsEJ0Zj8/cns!8040CC624DDC5404!699.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!699.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!699')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-06-24T22:10:24.0670000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!699.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!688</guid><category>SharePoint 2007</category><title>SharePoint Photo Gallery using jQuery</title><description>&lt;p&gt;One of the requests I receive many times while working with SharePoint is to create a photo gallery.   Most of the time the users are not satisfied with just a picture library.   After seeing some nice looking “lightbox” like photo galleries I decided to come up with one that would work with images stored in a SharePoint picture library.&lt;/p&gt; &lt;p&gt;This solution does not require any custom web part development, .NET code or files deployed directly to the SharePoint server.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Requirements&lt;br /&gt;&lt;/strong&gt;To get started you will need the following:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery 1.3.2&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.no-margin-for-errors.com/projects/prettyPhoto-jquery-lightbox-clone/" target="_blank"&gt;PrettyPhoto jQuery plugin&lt;/a&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Create a new picture library in your SharePoint site.  &lt;li&gt;Create a new document library called &lt;em&gt;scripts&lt;/em&gt; to hold the jQuery and plug-in script files.  &lt;li&gt;Upload the jQuery file &lt;a href="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"&gt;jquery-1.3.2.min.js&lt;/a&gt; to the scripts document library.  &lt;li&gt;Create a folder in the scripts document library called &lt;em&gt;images&lt;/em&gt;.  &lt;li&gt;Unzip the PrettyPhoto plug-in and copy the 4 folders located in the /images/prettyPhoto folder into the images folder of your scripts document library.   The quickest way to do this is to switch to explorer view on the scripts document library.  &lt;li&gt;Upload the jquery.prettyPhoto.js file to the root of the scripts document library.  &lt;li&gt;Before uploading the prettyPhoto.css file open it in a text editor and update all or the image references so that they point to the images in the scripts document library.   After you have made the updates,  upload the prettyPhoto.css to the root of the scripts document library.  &lt;li&gt;Add a content editor web part to the zone where you wish to display the photo gallery.  &lt;li&gt;Paste the code listed below into the source editor window of the content editor web part.   DO NOT CLICK SAVE. &lt;br /&gt;&lt;br /&gt; &lt;div style="width:100%;height:400px;overflow:auto"&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;script &lt;/span&gt;&lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;text/javascript&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;src&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;/scripts/jquery-1.3.2.min.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;script&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;script &lt;/span&gt;&lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;text/javascript&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;src&lt;/span&gt;&lt;span style="color:blue"&gt;=/Scripts/jquery.prettyPhoto.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;script&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;link &lt;/span&gt;&lt;span style="color:red"&gt;href&lt;/span&gt;&lt;span style="color:blue"&gt;=/Scripts/prettyPhoto.css&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;media&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;screen&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;rel&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;Stylesheet&amp;quot; &lt;/span&gt;&lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;text/css&amp;quot; /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;script &lt;/span&gt;&lt;span style="color:red"&gt;type&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;
&lt;/span&gt;_spBodyOnLoadFunctionNames.push(&lt;span style="color:#a31515"&gt;&amp;quot;LoadPhotoListData&amp;quot;&lt;/span&gt;);


    &lt;span style="color:blue"&gt;function &lt;/span&gt;LoadPhotoListData() {
        &lt;span style="color:blue"&gt;var &lt;/span&gt;soapEnv =
            &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'&amp;gt; \
                &amp;lt;soapenv:Body&amp;gt; \
                     &amp;lt;GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'&amp;gt; \
                        &amp;lt;listName&amp;gt;Photo Gallery&amp;lt;/listName&amp;gt; \
                        &amp;lt;viewFields&amp;gt; \
                            &amp;lt;ViewFields&amp;gt; \
                               &amp;lt;FieldRef Name='EncodedAbsThumbnailUrl' /&amp;gt; \
                               &amp;lt;FieldRef Name='FileRef' /&amp;gt; \
                               &amp;lt;FieldRef Name='Title' /&amp;gt; \
                               &amp;lt;FieldRef Name='NameOrTitle' /&amp;gt; \
                           &amp;lt;/ViewFields&amp;gt; \
                        &amp;lt;/viewFields&amp;gt; \
                    &amp;lt;/GetListItems&amp;gt; \
                &amp;lt;/soapenv:Body&amp;gt; \
            &amp;lt;/soapenv:Envelope&amp;gt;&amp;quot;&lt;/span&gt;;

        jQuery.ajax({
            url: &lt;span style="color:#a31515"&gt;&amp;quot;/_vti_bin/lists.asmx&amp;quot;&lt;/span&gt;,
            type: &lt;span style="color:#a31515"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;,
            dataType: &lt;span style="color:#a31515"&gt;&amp;quot;xml&amp;quot;&lt;/span&gt;,
            data: soapEnv,
            complete: processResult,
            contentType: &lt;span style="color:#a31515"&gt;&amp;quot;text/xml; charset=\&amp;quot;utf-8\&amp;quot;&amp;quot;
        &lt;/span&gt;});
    }
    &lt;span style="color:blue"&gt;function &lt;/span&gt;processResult(xData, status) {
        jQuery(xData.responseXML).find(&lt;span style="color:#a31515"&gt;&amp;quot;z\\:row&amp;quot;&lt;/span&gt;).each(&lt;span style="color:blue"&gt;function&lt;/span&gt;() {
            &lt;span style="color:blue"&gt;var &lt;/span&gt;url = $(&lt;span style="color:blue"&gt;this&lt;/span&gt;).attr(&lt;span style="color:#a31515"&gt;&amp;quot;ows_FileRef&amp;quot;&lt;/span&gt;);
            url = url.substring(url.indexOf(&lt;span style="color:#a31515"&gt;';#'&lt;/span&gt;) + 2);
            &lt;span style="color:blue"&gt;var &lt;/span&gt;title = $(&lt;span style="color:blue"&gt;this&lt;/span&gt;).attr(&lt;span style="color:#a31515"&gt;&amp;quot;ows_Title&amp;quot;&lt;/span&gt;);
            &lt;span style="color:blue"&gt;if &lt;/span&gt;(title == undefined)
                title = $(&lt;span style="color:blue"&gt;this&lt;/span&gt;).attr(&lt;span style="color:#a31515"&gt;&amp;quot;ows_NameOrTitle&amp;quot;&lt;/span&gt;);
            &lt;span style="color:blue"&gt;var &lt;/span&gt;liHtml = &lt;span style="color:#a31515"&gt;&amp;quot;&amp;lt;a rel='prettyPhoto[gallery]' class='group' title='&amp;quot; &lt;/span&gt;+ title + &lt;span style="color:#a31515"&gt;&amp;quot;' href='/&amp;quot; &lt;/span&gt;+ url + &lt;span style="color:#a31515"&gt;&amp;quot;'&amp;gt;&amp;lt;img border='0' src='&amp;quot; &lt;/span&gt;+ $(&lt;span style="color:blue"&gt;this&lt;/span&gt;).attr(&lt;span style="color:#a31515"&gt;&amp;quot;ows_EncodedAbsThumbnailUrl&amp;quot;&lt;/span&gt;) + &lt;span style="color:#a31515"&gt;&amp;quot;' alt='&amp;quot; &lt;/span&gt;+ title + &lt;span style="color:#a31515"&gt;&amp;quot;'&amp;gt;&amp;lt;/a&amp;gt; &amp;quot;&lt;/span&gt;;
            jQuery(&lt;span style="color:#a31515"&gt;&amp;quot;#myThumbs&amp;quot;&lt;/span&gt;).append(liHtml);
        });
        
        jQuery(&lt;span style="color:#a31515"&gt;&amp;quot;a[rel^='prettyPhoto']&amp;quot;&lt;/span&gt;).prettyPhoto({
            animationSpeed: &lt;span style="color:#a31515"&gt;'normal'&lt;/span&gt;, &lt;span style="color:green"&gt;/* fast/slow/normal */
            &lt;/span&gt;padding: 40, &lt;span style="color:green"&gt;/* padding for each side of the picture */
            &lt;/span&gt;opacity: 0.35, &lt;span style="color:green"&gt;/* Value betwee 0 and 1 */
            &lt;/span&gt;showTitle: &lt;span style="color:blue"&gt;true&lt;/span&gt;, &lt;span style="color:green"&gt;/* true/false */
            &lt;/span&gt;allowresize: &lt;span style="color:blue"&gt;true&lt;/span&gt;, &lt;span style="color:green"&gt;/* true/false */
            &lt;/span&gt;counter_separator_label: &lt;span style="color:#a31515"&gt;'/'&lt;/span&gt;, &lt;span style="color:green"&gt;/* The separator for the gallery counter 1 &amp;quot;of&amp;quot; 2 */
            &lt;/span&gt;theme: &lt;span style="color:#a31515"&gt;'light_rounded'&lt;/span&gt;, &lt;span style="color:green"&gt;/* light_rounded / dark_rounded / light_square / dark_square */
            &lt;/span&gt;callback: &lt;span style="color:blue"&gt;function&lt;/span&gt;() { }
        });


    }
&lt;span style="color:blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515"&gt;script&lt;/span&gt;&lt;span style="color:blue"&gt;&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515"&gt;div &lt;/span&gt;&lt;span style="color:red"&gt;id&lt;/span&gt;&lt;span style="color:blue"&gt;=&amp;quot;myThumbs&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;li&gt;Review all of the script tags and make updates to the src attribute so that they are properly referencing the js files in your scripts document library. 
&lt;li&gt;Review the link tag and verify that the hfref attribute is properly referencing the css file located in your scripts document library. 
&lt;li&gt;In the soapEnv variable make sure the value for the &amp;lt;listName&amp;gt; node is set to the name of your photo library. 
&lt;li&gt;In the jQuery.ajax call verify that the url property is referencing the _vti_bin/lists.asmx file for your SharePoint site.   If your sharepoint site URL is &lt;a href="http://somesite.com/sites/mysite"&gt;http://somesite.com/sites/mysite&lt;/a&gt; then the url property should be set to &lt;a href="http://somesite.com/sites/mysite/_vti_bin/lists.asmx"&gt;http://somesite.com/sites/mysite/_vti_bin/lists.asmx&lt;/a&gt;. 
&lt;li&gt;Click on the &lt;em&gt;Save&lt;/em&gt; button on the source editor window.
&lt;li&gt;Upload images into your new picture library.&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;If you have all of the files and urls properly referenced you should now see thumbnails of every photo in the library.   &lt;/p&gt;
&lt;p&gt;&lt;a href="https://besddw.bay.livefilestore.com/y1mbbqZNXy_Hm28JA6zX4x58pjO9AWyelxfBr1h_J0vqpaHc5ikgvqR1lm3421EZpkg2oo7XVGObp4NBIkmtJEhNrLjxxQ9Z-fC1IdkNohUk7cwuHWnbiAfatyuHE2GvpygQgOxM5lACsXyg8xuXNFe4g/PhotoGallery1[2].png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="PhotoGallery1" border="0" alt="PhotoGallery1" src="https://besddw.bay.livefilestore.com/y1m7EqCCilx88C7sTPCLEsH4aDLiJ0sjGy1cG1OwQKvf2-noYW4bF6Qhb4IgKLmPGwZ-YBNPMAQ8nRSJ4hLGr2PLqjjsGKgK7m2U-9xAe5WHJ90MEA-WY-BDqZiuGDLPC_p8cmEnHTJt649msrFOah2Ew/PhotoGallery1_thumb.png" width="244" height="179" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Clicking on a photo will open the full size version in a nice lightbox like window.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://besddw.bay.livefilestore.com/y1mZNKquGgJsvj9U8xfJC--gnJ0b9LtLIZL5xRkppJcFNpGxdvp9mEuYuWjQ2EHDwS9TPzKWhEIys8mbGvj3K_Ns59Aujcm5ioeGx4D17cdIwOHxK5VHZmgRH5YafllCSqn511C_SZfmyKT43Kdk6YJHA/PhotoGallery2[2].png" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="PhotoGallery2" border="0" alt="PhotoGallery2" src="https://besddw.bay.livefilestore.com/y1mQEp_333Q_ICBvwXPfuRWijJno7WfkPIHI1xpm74jMgKh5nvlmmWB-yC27UIC4Sdc0YQoOEyj182UyINkmcmIRC26yHxEFXaLWCMbmaICi0NXcHOig_mn2hVYBVXNYP-LHmtSV5qJJGxoBA3_UIhKaA/PhotoGallery2_thumb.png" width="244" height="182" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;   This method will not work if you want to have multiple photo galleries on a single page.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;With jQuery and the content editor web part you can do some pretty amazing things within SharePoint!&lt;/p&gt;&lt;div style="text-align:right;margin:0px;padding:4px 0px 4px 0px"&gt;&lt;a href="http://digg.com/submit?url=http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!688.entry&amp;amp;title=SharePoint+Photo+Gallery+using+jQuery"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/ymFtVkZnk0s" height="1" width="1"/&gt;</description><pubDate>Wed, 10 Jun 2009 18:47:41 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/ymFtVkZnk0s/cns!8040CC624DDC5404!688.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!688.entry#comment</comments><slash:comments>8</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!688')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-06-10T18:47:43.5300000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!688.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!674</guid><category>Books</category><title>Free eBook from Sogeti – Me the Media</title><description>&lt;p&gt;Sogeti has released a new book called Me the Media which can be &lt;a href="http://methemedia.com/download/" target="_blank"&gt;download for free&lt;/a&gt; in PDF format or purchased from &lt;a href="http://www.amazon.com/Me-Media-Rise-Conversation-Society/dp/9075414226/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243607729&amp;amp;sr=8-2" target="_blank"&gt;Amazon.com&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Proclaiming that the rise of Web 2.0 will have an impact as far-reaching as the invention of the printing press or the birth of mass media, a new book titled &lt;em&gt;&lt;strong&gt;Me the Media – Rise of the Conversation Society – Past, Present and Future of the Third Media Revolution&lt;/strong&gt;&lt;/em&gt; presents a wide-ranging discussion of how today’s personal media tools are transforming communications as well as other aspects of society – including how companies market their products and services.  &lt;p&gt;&lt;a href="https://besddw.bay.livefilestore.com/y1mzBEzdU0NaKTebj0qB9gkYHgxz1iQl1UIMGetS012nRPq68WH23RcpJHIs8ScyM2q_J2Vfkb77I3peQXF0XrtkIWs5IeikjExt-fIxQ4ZWgdTDyUyccBNxPrzFN9s4F0dy6oJikkuwWwDXYyVCbiXig/MeTheMedia12.jpg" rel="WLPP"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px" title="MeTheMedia[1]" border="0" alt="MeTheMedia[1]" src="https://besddw.bay.livefilestore.com/y1maDDcyEDUEs0-8s8O6gQ3a6To728xVUzVrM29XV0zjPWqlYA-wgn4hY6T8Fizr5UNKy245-cncWqBUtSsFMHFR6rpa92hHiYYE4WRAKvtMu86TXWN5NHK7aSrqAnxqAMZIVsued6ReZ-cVYuWLAG4ow/MeTheMedia1_thumb.jpg" width="129" height="162" /&gt;&lt;/a&gt;  &lt;p&gt;A special chapter called &lt;strong&gt;The Obama Moment, &lt;/strong&gt;written by Peter Leyden - former managing editor at Wired magazine and currently CEO of NextAgenda, a think tank on the transformative use of new technologies, addresses the pivotal role of digital media in Barack Obama’s presidential campaign and its ushering in of a new conversational phase in the use of Web media. The 292-page book also covers topics such as:  &lt;p&gt;&lt;img alt="Sogeti USA" src="http://us.sogeti.com/webimages/3d_arrow.gif" width="12" height="20" /&gt;How ’Me Media’ has displaced the voices of corporations, politicians and traditional journalists, creating the new ’Conversation Society’ in which individuals and ad-hoc communities hold the power.  &lt;p&gt;&lt;img alt="Sogeti USA" src="http://us.sogeti.com/webimages/3d_arrow.gif" width="12" height="20" /&gt;The emergence of ’Hyperegos’ consisting of individuals, brands, companies, politicians individuals and organizations – well-known through outlets such as CNN’s iReport, iGoogle, iPhone, myBarackObama and YouTube, endlessly hyperlinked through social media, and what that means for businesses and society at large.&lt;/p&gt; &lt;p&gt;&lt;img alt="Sogeti USA" src="http://us.sogeti.com/webimages/3d_arrow.gif" width="12" height="20" /&gt;The importance of ’crowdsourcing’ as a key 21st century business strategy, presenting opportunities for businesses to make use of ideas flowing from existing and potential buyers through today’s open Web conversations while simultaneously establishing closer relationships with customers.&lt;/p&gt; &lt;p&gt;&lt;img alt="Sogeti USA" src="http://us.sogeti.com/webimages/3d_arrow.gif" width="12" height="20" /&gt;The way in which virtual worlds like Second Life, mirror worlds like Google Earth and other developments are converging to create a new ’Metaverse’ – a digital extension of the physical universe in which the lines between our online and offline identities will increasingly blur.&lt;/p&gt; &lt;p&gt;The book is filled with examples and graphics that underscore its points, ranging from Dell’s experience with customer forums to discussions of how disparate projects such as electronic design community Crowdspirit, the Obama Girl, LinkedIn, Digg, Twitter, Jaiku, OpenID, the film Waking Life and scores of others reflect and have contributed to altering the balance of power between brands, organizations, politics and the public.  &lt;p&gt;&lt;strong&gt;Me the Media&lt;/strong&gt; was written by Jaap Bloem, Menno van Doorn and Sander Duivestein, all affiliated with new technology analyst VINT &lt;a href="http://www.sogeti.com/vint"&gt;(www.sogeti.com/vint&lt;/a&gt;). VINT is the new technology research arm of the Sogeti Group, a provider of professional technology services in 14 countries and a wholly owned subsidiary of Paris Stock Exchange-listed Cap Gemini S.A. VINT is available for speaking engagements on topics from Me the Media. Erik van Ommeren, Director of Innovation at VINT can be contacted for more information around the same.&lt;/p&gt;&lt;div style="text-align:right;margin:0px;padding:4px 0px 4px 0px"&gt;&lt;a href="http://digg.com/submit?url=http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!674.entry&amp;amp;title=Free+eBook+from+Sogeti+%e2%80%93+Me+the+Media"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0" /&gt;  &lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/VgBd_eSzKMg" height="1" width="1"/&gt;</description><pubDate>Fri, 29 May 2009 14:48:17 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/VgBd_eSzKMg/cns!8040CC624DDC5404!674.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!674.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!674')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-05-29T14:48:19.0370000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!674.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!670</guid><title>Single Sign-On Interview</title><description>&lt;p&gt;I recently sat down with David Giard and spoke about single sign-on.   Check out the video on his website at &lt;a href="http://www.davidgiard.com" target="_blank"&gt;www.davidgiard.com&lt;/a&gt;.   The video clocks in at about 21 minutes.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/O620lcMQx20" height="1" width="1"/&gt;</description><pubDate>Wed, 20 May 2009 12:15:42 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/O620lcMQx20/cns!8040CC624DDC5404!670.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!670.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!670')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-05-20T12:15:42.5530000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!670.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!667</guid><title>David Giard to Speak at CodeStock and West Michigan .NET User Group</title><description>&lt;p&gt;David Giard, a Sogeti principal consultant, will be giving a presentation on the Microsoft Managed Extensibility Framework at both CodeStock in Knoxville and the West Michigan .NET User Group.&lt;/p&gt; &lt;p&gt;CodeStock conference will be held on June 27th in Knoxville, TN.&lt;/p&gt; &lt;p&gt;The presentation at the West Michigan .NET User Group will be on July 14th.&lt;/p&gt; &lt;p&gt;Visit &lt;a href="http://www.davidgiard.com/" target="_blank"&gt;David Giard’s blog&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/XiWAWJ43Dkk" height="1" width="1"/&gt;</description><pubDate>Mon, 18 May 2009 15:10:45 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/XiWAWJ43Dkk/cns!8040CC624DDC5404!667.entry</link><comments>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!667.entry#comment</comments><slash:comments>0</slash:comments><live:type>blogentry</live:type><live:typelabel>Blog Entry</live:typelabel><wfw:commentRss>http://cid-8040cc624ddc5404.users.api.live.net/Users(-9205132915760147452)/Blogs('8040CC624DDC5404!138')/Entries('8040CC624DDC5404!667')/Comments?$format=application%2frss%2bxml</wfw:commentRss><dcterms:modified>2009-05-18T15:10:45.3000000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Blog/cns!8040CC624DDC5404!667.entry</feedburner:origLink></item><item><guid isPermaLink="false">8040CC624DDC5404!137</guid><title>Links</title><description>&lt;img src="http://feeds.feedburner.com/~r/mphacker/~4/ZahNvgmjMfY" height="1" width="1"/&gt;</description><pubDate>Tue, 07 Nov 2006 12:44:32 Z</pubDate><link>http://feedproxy.google.com/~r/mphacker/~3/ZahNvgmjMfY/cns!8040CC624DDC5404!137</link><live:type>customlist</live:type><live:typelabel>Custom List</live:typelabel><dcterms:modified>2006-11-07T22:03:48.6100000Z</dcterms:modified><feedburner:origLink>http://mphacker.spaces.live.com/Lists/cns!8040CC624DDC5404!137</feedburner:origLink></item></channel></rss>
