<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blog.danbartels.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Dan Bartels</title><subtitle type="html">Dan Bartels online engineering logbook...  Items that I find useful organized for my use, and indexed by google for yours.  Here you can find information about Microsoft C# programming, SQL SERVER 2005, Telligent Systems CommunityServer, Dot Net Nuke, Windows Vista / Longhorn, and just about anything else that would compel me to type.</subtitle><id>http://blog.danbartels.com/atom.aspx</id><link rel="alternate" type="text/html" href="http://blog.danbartels.com/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blog.danbartels.com/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.20423.1">Community Server</generator><updated>2007-04-12T14:58:00Z</updated><entry><title>CS Membership for the Membershipless </title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2008/06/10/cs-membership-for-the-membershipless.aspx" /><link rel="enclosure" type="application/octet-stream" length="135800" href="http://blog.danbartels.com/attachment/607142.ashx" /><id>http://blog.danbartels.com/archive/2008/06/10/cs-membership-for-the-membershipless.aspx</id><published>2008-06-11T00:57:00Z</published><updated>2008-06-11T00:57:00Z</updated><content type="html">&lt;P&gt;From time to time I find myself pulling down a live Community Server database for testing.&amp;nbsp; When the database also has a remote membership system it can be very time consuming to try to download and configure both a CS database and a Membership system and keeping those databases in sync.&lt;/P&gt;
&lt;P&gt;I have created a SQL script which can create simple membership data for all the membership in a CS database.&amp;nbsp; You set the application name, and&amp;nbsp;script allows you to specify the name of one user which will be added to the system administrator role.&amp;nbsp; It will create the asp.net membership tables and entries as necessary, it auto assigns all other users to the everyone role; and sets any user passwords to "password" (obviously this is just for local testing).&lt;/P&gt;
&lt;P&gt;This script builds an ASP.NET 2.0 Membership system, for use by CS2007 and CS2008 databases.&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=607142" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="CS 2007" scheme="http://blog.danbartels.com/archive/tags/CS+2007/default.aspx" /><category term="CS 2008" scheme="http://blog.danbartels.com/archive/tags/CS+2008/default.aspx" /><category term="ASP.NET" scheme="http://blog.danbartels.com/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Integrating Graffiti Logins with an asp.net datastore (like CommunityServer)</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2008/05/05/integrating-graffiti-logins-with-an-asp-net-datastore-like-communityserver.aspx" /><id>http://blog.danbartels.com/archive/2008/05/05/integrating-graffiti-logins-with-an-asp-net-datastore-like-communityserver.aspx</id><published>2008-05-05T19:17:00Z</published><updated>2008-05-05T19:17:00Z</updated><content type="html">&lt;P&gt;As announced way back at CSDC 07 (&lt;A href="http://kevinharder.com/blog/live-blogging-the-csdc-part-3/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://&lt;SPAN class=mceItemHiddenSpellWord&gt;kevinharder&lt;/SPAN&gt;.com/&lt;SPAN class=mceItemHiddenSpellWord&gt;blog&lt;/SPAN&gt;/live-&lt;SPAN class=mceItemHiddenSpellWord&gt;blogging&lt;/SPAN&gt;-the-&lt;SPAN class=mceItemHiddenSpellWord&gt;csdc&lt;/SPAN&gt;-part-3/&lt;/SPAN&gt;&lt;/A&gt;) graffiti was designed to be able to integrate directly with an existing asp.net membership store...&amp;nbsp; the key is in the configuration....&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;So first thing is to get the membership set up...&amp;nbsp; this requires several changes to your web.&lt;SPAN class=mceItemHiddenSpellWord&gt;config&lt;/SPAN&gt; on your graffiti site...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;You will need a connection string in the &amp;lt;&lt;SPAN class=mceItemHiddenSpellWord&gt;ConnectionStrings&lt;/SPAN&gt;&amp;gt; section pointing to the database which has your asp.net &lt;SPAN class=mceItemHiddenSpellWord&gt;auth&lt;/SPAN&gt; tables.. it will look something like this...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;add&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;SPAN class=mceItemHidden&gt;Graffiti_&lt;SPAN class=mceItemHiddenSpellWord&gt;ASPNetMembership&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;connectionString&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;SPAN class=mceItemHidden&gt;server=(local);&lt;SPAN class=mceItemHiddenSpellWord&gt;uid&lt;/SPAN&gt;=;&lt;SPAN class=mceItemHiddenSpellWord&gt;pwd&lt;/SPAN&gt;=;Trusted_Connection=yes;database=&lt;SPAN class=mceItemHiddenSpellWord&gt;CommunityServer&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Since I am using an active community, I will go to the CS site and create the default graffiti roles...&amp;nbsp; (&lt;SPAN class=mceItemHiddenSpellWord&gt;gAdmin&lt;/SPAN&gt;, &lt;SPAN class=mceItemHiddenSpellWord&gt;gManager&lt;/SPAN&gt;, and &lt;SPAN class=mceItemHiddenSpellWord&gt;gContributor&lt;/SPAN&gt;, and add you current &lt;SPAN class=mceItemHiddenSpellWord&gt;admin&lt;/SPAN&gt; to the &lt;SPAN class=mceItemHiddenSpellWord&gt;gAdmin&lt;/SPAN&gt; role)... Otherwise you need to run the script "Graffiti_&lt;SPAN class=mceItemHiddenSpellWord&gt;ASPNet&lt;/SPAN&gt;_Membership_Provider_Data.&lt;SPAN class=mceItemHiddenSpellWord&gt;sql&lt;/SPAN&gt;"; this script will try to create a new application so you really only want to run portions of it, ensuring the correct &lt;SPAN class=mceItemHiddenSpellWord&gt;applicationid&lt;/SPAN&gt; &lt;SPAN class=mceItemHiddenSpellWord&gt;guid&lt;/SPAN&gt; in order to have all logins under a single &lt;SPAN class=mceItemHiddenSpellWord&gt;aspnet&lt;/SPAN&gt; forms &lt;SPAN class=mceItemHiddenSpellWord&gt;auth&lt;/SPAN&gt; "application".&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Next you need to update the "User Provider".&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;add&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;key&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;SPAN class=mceItemHidden&gt;Graffiti::Users::&lt;SPAN class=mceItemHiddenSpellWord&gt;IGraffitiUserController&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; =&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;SPAN class=mceItemHidden&gt;Graffiti.Core.&lt;SPAN class=mceItemHiddenSpellWord&gt;ASPNetGraffitiUserController&lt;/SPAN&gt;, Graffiti.Core&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;/&amp;gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;and finally uncomment the included &amp;lt;membership /&amp;gt;, &amp;lt;&lt;SPAN class=mceItemHiddenSpellWord&gt;roleManager&lt;/SPAN&gt; /&amp;gt; and &amp;lt;profile /&amp;gt; sections of the web.&lt;SPAN class=mceItemHiddenSpellWord&gt;config&lt;/SPAN&gt;; be sure to update the &lt;SPAN class=mceItemHiddenSpellWord&gt;applicationName&lt;/SPAN&gt; property of each by default graffiti uses "/graffiti" for the application name, by default cs uses "&lt;SPAN class=mceItemHiddenSpellWord&gt;dev&lt;/SPAN&gt;"&amp;nbsp; if you want to use existing cs users, you will need the application name that exists in your &lt;SPAN class=mceItemHiddenSpellWord&gt;aspnet&lt;/SPAN&gt;_&lt;SPAN class=mceItemHiddenSpellWord&gt;Applicaitons&lt;/SPAN&gt; table.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Thats it...&amp;nbsp; you should be able to log into graffiti using your existing cs users...&amp;nbsp; but wait, theres more...&amp;nbsp; we can now do shared authentication / single &lt;SPAN class=mceItemHiddenSpellWord&gt;signon&lt;/SPAN&gt; with a few more steps...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;First, you will need to specify validation and decryption keys for all the applications you want to share logins... this goes in the web.&lt;SPAN class=mceItemHiddenSpellWord&gt;config&lt;/SPAN&gt; under &amp;lt;system.web&amp;gt; (edit the &lt;SPAN class=mceItemHiddenSpellWord&gt;guids&lt;/SPAN&gt; a bit for security)&lt;/SPAN&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;machineKey&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;validationKey&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B4&lt;BR&gt;AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;decryptionKey&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;validation&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SHA1&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;decryption&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;AES&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;/&amp;gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;*Note: if you are updating an existing applicaitons machine keys, you should really change the name of the "auth cookie" to prevent existing persisted logins from getting a decryption exception.&amp;nbsp; This will also force all users to re-login...&lt;/P&gt;
&lt;P&gt;As infered by the note above, we have to use the same cookie names for our applications... this is done by editing the &amp;lt;authentication&amp;gt; section of the web.config (I typically just link to the existing communityserver cookie, by changing the graffiti web.config as below)&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;authentication&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;mode&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Forms&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;forms&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;.CommunityServer&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;protection&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;All&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;timeout&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;60000&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;loginUrl&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;~/login/&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;slidingExpiration&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;/&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;authentication&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;*Note: you could redirect all users to the cs login page by providing an absolute path to the login url, the page will redirect back to the graffiti site properly; this also has the advantage of leveraging the CS registration forms and process.&lt;/P&gt;
&lt;P&gt;and finally we need to use the same cookie name for the &amp;lt;roleManager&amp;gt; by editing the cookieName property...&amp;nbsp; again I set the property in graffiti equal to the default cs value ".CSRoles" (without this step, your username will show in graffiti, but if you didn't use the graffiti login form, you would not have any more permissions on the site than anonymous, until you re-logged in).&lt;/P&gt;
&lt;P&gt;A few items of interest...&amp;nbsp; at this time it appears that graffiti lowercases all the user names, and uses that for the "ProperName" so CS users without an extended attribute "ProperName" will only see their lowercased user names, a CSModule would be a good way to keep display name in sync with this "ProperName" field.&amp;nbsp; Of course you will have to use the CS membership system to edit your users; but it appears that graffitis "people" page can only be used to edit users in the local graffiti database anyways (likely the only user you will see in graffiti is admin).&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=569605" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="Graffiti" scheme="http://blog.danbartels.com/archive/tags/Graffiti/default.aspx" /><category term="ASP.NET" scheme="http://blog.danbartels.com/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>CS REST in Javascript</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2008/04/30/cs-rest-in-javascript.aspx" /><id>http://blog.danbartels.com/archive/2008/04/30/cs-rest-in-javascript.aspx</id><published>2008-05-01T03:12:00Z</published><updated>2008-05-01T03:12:00Z</updated><content type="html">&lt;P&gt;CS Rest Endpoints return XML, but JSON is much cooler for working with the data in javascript, you can get the results back in JSON and actually iterate through collections and such...&amp;nbsp; To convert the data to JSON, in leu of server calls to do this, Thomas Frank has posted a nice JS library to pull this off...&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.thomasfrank.se/xml_to_json.html"&gt;http://www.thomasfrank.se/xml_to_json.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=564050" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="REST" scheme="http://blog.danbartels.com/archive/tags/REST/default.aspx" /><category term="CS API" scheme="http://blog.danbartels.com/archive/tags/CS+API/default.aspx" /><category term="CS 2008" scheme="http://blog.danbartels.com/archive/tags/CS+2008/default.aspx" /></entry><entry><title>Color outside the lines with the CS API</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2008/04/30/color-outside-the-lines-with-the-cs-api.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="480146" href="http://blog.danbartels.com/attachment/563766.ashx" /><id>http://blog.danbartels.com/archive/2008/04/30/color-outside-the-lines-with-the-cs-api.aspx</id><published>2008-04-30T21:31:00Z</published><updated>2008-04-30T21:31:00Z</updated><content type="html">&lt;P&gt;With the release of CS2008, we have released the REST webservice code for the first time...&amp;nbsp; This webservice has a client API which is used by the server, and actually is in the bin folder of your CS site...&amp;nbsp; CommunityServer.WebServices.dll.&amp;nbsp; Referencing this file in a project will allow you to do things like.&lt;/P&gt;
&lt;P&gt;Service rest = new Service("&lt;A href="http://localhost/cs"&gt;http://localhost/cs&lt;/A&gt;");&lt;BR&gt;List&amp;lt;BlogGroup&amp;gt; blogGroups = rest.Blogs.GetBlogGroups();&lt;/P&gt;
&lt;P&gt;This is all being documented here at &lt;A href="http://api.communityserver.org/"&gt;http://api.communityserver.org&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;There are some places however, where the client api might not yet have an implementation for accessing endpoints on the server.&amp;nbsp; For those cases I wrapped and exposed the communications calls in the dll.&amp;nbsp; Allowing for calls like.&lt;/P&gt;
&lt;P&gt;ManualRequest rest = new ManualRequest("&lt;A href="http://localhost/cs"&gt;http://localhost/cs&lt;/A&gt;");&lt;BR&gt;BlogGroupListSerialized blogGroupListSerialized = &lt;BR&gt;rest.Get(rest.Urls.BlogGroupsUrl()).GetResponseObject&amp;lt;BlogGroupListSerialized&amp;gt;();&lt;/P&gt;
&lt;P&gt;The methods return strings, which are XML..&amp;nbsp; So you can use the GetResponseObject to get the related Type, or just use XPath and open the doc as native XML.&lt;/P&gt;
&lt;P&gt;A place where we are missing some client api methods for example are things like post extedned attributes or ratings...&lt;/P&gt;
&lt;P&gt;RatingListSerialized ratingListSerialized = rest.Get(rest.Urls.BlogPostRatingUrl(blogId, blogPostId));&lt;/P&gt;
&lt;P&gt;or&lt;/P&gt;
&lt;P&gt;//rate a post with 4 stars&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;int &lt;/FONT&gt;&lt;FONT size=2&gt;responseRating = rest.Put(rest.Urls.BlogPostRatingUrl(blogId, blogPostId, username), "&amp;lt;int&amp;gt;4&amp;lt;/int&amp;gt;");&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Extended attributes are availabe for "Section" objects, "Post" objects and "User" objects (except for posts in a group / hub)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;endpoint urls would be like&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;/api/blogs.ashx/blogs/{blogid}/attributes returns an ExtendedAttributeListSerialized object which is a list of ExtendedAttributeSerialized objects (Supports GET HEAD and POST)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;ExtendedAttributeListSerialized attributeListSerialized = rest.Get("&lt;A href="http://localhost/cs/api/blogs.ashx/blogs/10/attributes"&gt;http://localhost/cs/api/blogs.ashx/blogs/10/attributes&lt;/A&gt;");&lt;/P&gt;
&lt;P&gt;or&lt;/P&gt;
&lt;P&gt;/api/blogs.ashx/blogs/{blogid}/attributes/{attribute name} which returns a &amp;lt;string&amp;gt; (Supports GET HEAD PUT and DELETE)&lt;/P&gt;
&lt;P&gt;string attribute = rest.Get("&lt;A href="http://localhost/cs/api/blogs.ashx/blogs/10/attributes/abouttitle"&gt;http://localhost/cs/api/blogs.ashx/blogs/10/attributes/abouttitle&lt;/A&gt;");&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Only site admins can access extended attribute urls. You PUT and POST XML encoded strings...&amp;nbsp; like &amp;lt;string&amp;gt;Hello World&amp;lt;/string&amp;gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;A compiled DLL (DanBartels.CS.REST.Dll) is included as well as the source and some basic unit tests...&amp;nbsp; Assuming you have your CS install available with the sample data at &lt;A href="http://localhost/cs"&gt;http://localhost/cs&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=563766" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="REST" scheme="http://blog.danbartels.com/archive/tags/REST/default.aspx" /><category term="CS API" scheme="http://blog.danbartels.com/archive/tags/CS+API/default.aspx" /><category term="CS 2008" scheme="http://blog.danbartels.com/archive/tags/CS+2008/default.aspx" /></entry><entry><title>Online Music - Great Free Service - Pandora.com</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2008/02/26/online-music-great-free-service-pandora-com.aspx" /><id>http://blog.danbartels.com/archive/2008/02/26/online-music-great-free-service-pandora-com.aspx</id><published>2008-02-26T14:52:00Z</published><updated>2008-02-26T14:52:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;I have enjoyed streaming a vast variety of Internet music for some time...&amp;nbsp; I like the ability to discover new artists and music as well as a nearly infinite selection of styles and artists to suit my mood.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;I have to say of all of the services I have tried, Yahoo music did the best.&amp;nbsp; They had a decent selection of &lt;SPAN class=mceItemHiddenSpellWord&gt;downloadable&lt;/SPAN&gt; music, but even more content they could stream to you, and I made great use of their "Artist Fan Station" Feature...&amp;nbsp; which let you browse to an artist, and hear similar music, either by that artists or by other artists which were rated highly by people who liked that artist.&amp;nbsp; They made extensive use of their music and artist rating systems to &lt;SPAN class=mceItemHiddenSpellWord&gt;datamine&lt;/SPAN&gt; information, the result was very good;&amp;nbsp; Their client software, Vista, and then X64 support was terrible...&amp;nbsp; and left me searching for a new music service..&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;So I tried URGE, Microsoft's answer... well it worked in X64 and supported plays for sure; even used the same back end data of Yahoo music for the library, but their client was dumb, dumb, dumb...&amp;nbsp; a few celebrity &lt;SPAN class=mceItemHiddenSpellWord&gt;raido&lt;/SPAN&gt; stations, bad "similar artist" selections, no access to music that wasn't &lt;SPAN class=mceItemHiddenSpellWord&gt;downloadable&lt;/SPAN&gt;; which cut the artist and song selection way down for me...&amp;nbsp; and ultimately I couldn't find any music I wanted to listen to that I didn't already own.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Then came &lt;SPAN class=mceItemHiddenSpellWord&gt;Zune&lt;/SPAN&gt;...&amp;nbsp; Well its better, but again their UI is frustrating, you cant really discover anything, unless its new and advertised to you "Clear Channel Style"...&amp;nbsp; So much for broadening your music tastes, or discovering new artists..&amp;nbsp; and they seemed to do away with the idea of radio stations all together....&amp;nbsp; And ratings, well I guess I wast sophisticated enough to rate my own music...&amp;nbsp; So there were starts, but I don't know where they came from...&amp;nbsp; The future &lt;SPAN class=mceItemHiddenSpellWord&gt;ui&lt;/SPAN&gt;, got worse not better, it got even harder to make your own &lt;SPAN class=mceItemHiddenSpellWord&gt;playlists&lt;/SPAN&gt;, apparently if they weren't going to do "stations" then neither should you...&amp;nbsp; If this wasn't pretty much the only way to manage music on my mp3 player, it would be so &lt;SPAN class=mceItemHiddenSpellWord&gt;uninstalled&lt;/SPAN&gt;. (just waiting for the USB Mass Storage Driver for the &lt;SPAN class=mceItemHiddenSpellWord&gt;Zune&lt;/SPAN&gt;, so it will show up as a drive letter, no wonder why Microsoft doesn't want one out there)...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Then relief finally came my way...&amp;nbsp; A really nice radio station only type of service...&amp;nbsp; &lt;/SPAN&gt;&lt;A class="" href="http://www.pandora.com/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;Pandor&lt;/SPAN&gt;&lt;/SPAN&gt;a.com&lt;/A&gt;...&amp;nbsp; O and its free...&amp;nbsp; You set up your own stations based on artists or songs you like, and it streams away; the music index is based off the&lt;A class="" href="http://www.pandora.com/corporate/mgp"&gt; Music Genome Project&lt;/A&gt;&lt;SPAN class=mceItemHidden&gt;&amp;nbsp;a database of music based on musical styles and characteristic (not marketing and advertising&lt;/SPAN&gt;&amp;nbsp;departments)...&amp;nbsp;&amp;nbsp;their client is&lt;SPAN class=mceItemHidden&gt;&amp;nbsp;flash based, and so it runs in your browser...&amp;nbsp; if you find a new song or artist, you can just bookmark it, and head over to Amazon and pickup the Mp3's ... no &lt;SPAN class=mceItemHiddenSpellWord&gt;drm&lt;/SPAN&gt;, no hassle, no subscription, and off you go...&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;If you haven't tried &lt;/SPAN&gt;&lt;A class="" href="http://www.pandora.com/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;Pandor&lt;/SPAN&gt;&lt;/SPAN&gt;a&lt;/A&gt;&lt;SPAN class=mceItemHidden&gt;, I strongly recommend you check it out.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Thanks for the tip&amp;nbsp;&lt;A class="" href="http://wyattpreul.com/"&gt;Wyatt&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=493807" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Vista" scheme="http://blog.danbartels.com/archive/tags/Vista/default.aspx" /><category term="Yahoo Music" scheme="http://blog.danbartels.com/archive/tags/Yahoo+Music/default.aspx" /><category term="Microsoft" scheme="http://blog.danbartels.com/archive/tags/Microsoft/default.aspx" /><category term="Zune" scheme="http://blog.danbartels.com/archive/tags/Zune/default.aspx" /><category term="MP3" scheme="http://blog.danbartels.com/archive/tags/MP3/default.aspx" /><category term="Pandora" scheme="http://blog.danbartels.com/archive/tags/Pandora/default.aspx" /><category term="Music" scheme="http://blog.danbartels.com/archive/tags/Music/default.aspx" /></entry><entry><title>Improve Vista Performance</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2008/02/26/improve-vista-performance.aspx" /><id>http://blog.danbartels.com/archive/2008/02/26/improve-vista-performance.aspx</id><published>2008-02-26T14:41:00Z</published><updated>2008-02-26T14:41:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Ran across these couple of tips on the Internet the other day, and thought I would pass them along...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;First, my own tip, make sure you have the latest video driver installed...&amp;nbsp; chances are pretty good that your video card is the lowest&amp;nbsp; ranked item in your preformance index, its amazing what a new driver can do for the performance and stability of your system (not always a good thing, but in general its a good idea to keep your driver updated).&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Second, disk per&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;formance&lt;/SPAN&gt;...&amp;nbsp; Vista has advanced output caching support for SATA drives...&amp;nbsp; if you have a batter backup, or are on a laptop...&amp;nbsp; Go into device manager, and right click on your disks, select properties, then on the policies tab, mark the "Enable Write Caching" and "Enable Advanced Per&lt;SPAN class=mceItemHiddenSpellWord&gt;formance&lt;/SPAN&gt;" options.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Lastly, I would recommend disabling the network "auto tuning" feature, its supposed to dynamically adjust the packet size for network performance, but lets face it, our home networks are not what this was targeted at.&amp;nbsp; Its actually hurting your network performance, by trying to tune it...&amp;nbsp; Open an administrative command prompt, and type....&amp;nbsp;&amp;nbsp; "&lt;SPAN class=mceItemHiddenSpellWord&gt;netsh&lt;/SPAN&gt; int &lt;SPAN class=mceItemHiddenSpellWord&gt;tcp&lt;/SPAN&gt; set global &lt;SPAN class=mceItemHiddenSpellWord&gt;autotuninglevel&lt;/SPAN&gt;=normal"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;The attached article also talks about how to disable UAP, the &lt;SPAN class=mceItemHiddenSpellWord&gt;popup&lt;/SPAN&gt; asking for administrative permission when you do a task that requires it...&amp;nbsp; I run with UAP enabled, but I realize most people despise it...&amp;nbsp; There is a nice tool out there...&amp;nbsp; Tweak UAC to help kill the feature, if you are in need of that, this should help you get it done (&lt;/SPAN&gt;&lt;A href="http://www.tweak-uac.com/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://&lt;SPAN class=mceItemHiddenSpellWord&gt;www&lt;/SPAN&gt;.tweak-&lt;SPAN class=mceItemHiddenSpellWord&gt;uac&lt;/SPAN&gt;.com/&lt;/SPAN&gt;&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;
&lt;P&gt;&lt;A href="http://vista.blorge.com/2008/02/25/how-to-fix-three-broken-features-of-vista/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://vista.&lt;SPAN class=mceItemHiddenSpellWord&gt;blorge&lt;/SPAN&gt;.com/2008/02/25/how-to-fix-three-broken-features-of-vista/&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=493806" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Windows Vista (Longhorn)" scheme="http://blog.danbartels.com/archive/tags/Windows+Vista+_2800_Longhorn_2900_/default.aspx" /><category term="x64 - 64 bit Windows" scheme="http://blog.danbartels.com/archive/tags/x64+-+64+bit+Windows/default.aspx" /><category term="Vista" scheme="http://blog.danbartels.com/archive/tags/Vista/default.aspx" /><category term="Tips and Tricks" scheme="http://blog.danbartels.com/archive/tags/Tips+and+Tricks/default.aspx" /></entry><entry><title>ScriptResource.axd Time Sensative</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2008/01/24/scriptresource-axd-time-sensative.aspx" /><id>http://blog.danbartels.com/archive/2008/01/24/scriptresource-axd-time-sensative.aspx</id><published>2008-01-24T19:02:00Z</published><updated>2008-01-24T19:02:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;In CS 2008 we have our &lt;SPAN class=mceItemHiddenSpellWord&gt;javascript&lt;/SPAN&gt; files linked through the &lt;SPAN class=mceItemHiddenSpellWord&gt;scriptresource&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;axd&lt;/SPAN&gt; handler.&amp;nbsp; This is very similar to the &lt;SPAN class=mceItemHiddenSpellWord&gt;webresource&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;axd&lt;/SPAN&gt; handler in that it serves content from within a &lt;SPAN class=mceItemHiddenSpellWord&gt;dll&lt;/SPAN&gt;.&amp;nbsp; The gotcha is that the &lt;SPAN class=mceItemHiddenSpellWord&gt;scriptresource&lt;/SPAN&gt; handler will throw an exception if the &lt;SPAN class=mceItemHiddenSpellWord&gt;timestamp&lt;/SPAN&gt; of the assembly is newer than the current server time...&amp;nbsp; This is not timezone aware.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;The result...&amp;nbsp; Your in central time, you compile CS, and deploy it to your server in say pacific time, and &lt;SPAN class=mceItemHiddenSpellWord&gt;vola&lt;/SPAN&gt;...&amp;nbsp; you get &lt;SPAN class=mceItemHiddenSpellWord&gt;javascript&lt;/SPAN&gt; errors....&amp;nbsp; why?&amp;nbsp; well the &lt;SPAN class=mceItemHiddenSpellWord&gt;scriptresource&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;axd&lt;/SPAN&gt; will throw an exception because it thinks the &lt;SPAN class=mceItemHiddenSpellWord&gt;dll&lt;/SPAN&gt; is invalid because its &lt;SPAN class=mceItemHiddenSpellWord&gt;timestamp&lt;/SPAN&gt; is newer than the server time....&amp;nbsp; the error magically goes away in two hours, because now the server thinks the &lt;SPAN class=mceItemHiddenSpellWord&gt;dll&lt;/SPAN&gt; time is &lt;SPAN class=mceItemHiddenSpellWord&gt;ok&lt;/SPAN&gt;...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Its important to note, this is not a CS bug, but rather how the Microsoft script handler &lt;SPAN class=mceItemHiddenSpellWord&gt;scriptresource&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;axd&lt;/SPAN&gt; is coded.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;To work around the issue, set the time on your development workstation to the same time as your server, before you build.&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=493805" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="Microsoft" scheme="http://blog.danbartels.com/archive/tags/Microsoft/default.aspx" /></entry><entry><title>Windows Vista SP1 RC1 Released</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/12/12/windows-vista-sp1-rc1-released.aspx" /><id>http://blog.danbartels.com/archive/2007/12/12/windows-vista-sp1-rc1-released.aspx</id><published>2007-12-12T17:07:00Z</published><updated>2007-12-12T17:07:00Z</updated><content type="html">&lt;P&gt;Microsoft has made the current release of Vista RC1 available to early adoptors via Windows Update or as a stand alone download (~850mb).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9de6260e-4275-482d-9524-de850c4dd91c&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=9de6260e-4275-482d-9524-de850c4dd91c&amp;amp;DisplayLang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;
&lt;P&gt;You may also note a Office 2007 Sp1 was released today&lt;/P&gt;
&lt;P&gt;&lt;A href="http://office.microsoft.com/en-us/downloads/default.aspx?ofcresset=1"&gt;http://office.microsoft.com/en-us/downloads/default.aspx?ofcresset=1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The Vista SP1 Download is a small Zip file with some documentation and a registry script to make it so you can see the SP in Windows Update&lt;/P&gt;
&lt;P&gt;reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\VistaSp1 /f &amp;gt; NUL 2&amp;gt;&amp;amp;1&lt;BR&gt;reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\WindowsUpdate\VistaSP1 /f &amp;gt; NUL 2&amp;gt;&amp;amp;1&lt;/P&gt;
&lt;P&gt;reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\VistaSp1 /v Beta1 /t REG_SZ /d c92ef077-adc4-46ef-b96b-02a42d60ede5 /f&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Further, you can get the stand-alone installers at&lt;/P&gt;
&lt;P&gt;32 bit - &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=be34577a-e925-48fb-9d6d-50fe9461f808&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=be34577a-e925-48fb-9d6d-50fe9461f808&amp;amp;DisplayLang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;64 bit - &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c21c3978-3b7d-4d64-873b-3c9d26982d7a&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c21c3978-3b7d-4d64-873b-3c9d26982d7a&amp;amp;DisplayLang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=452535" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Vista" scheme="http://blog.danbartels.com/archive/tags/Vista/default.aspx" /></entry><entry><title>Kevin Harder Live Blogging the CSDC</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/10/21/kevin-harder-live-blogging-the-csdc.aspx" /><id>http://blog.danbartels.com/archive/2007/10/21/kevin-harder-live-blogging-the-csdc.aspx</id><published>2007-10-21T14:38:00Z</published><updated>2007-10-21T14:38:00Z</updated><content type="html">&lt;P&gt;We are having an awesome time at the Community Server Developers conference, developers from around the &lt;STRIKE&gt;country&lt;/STRIKE&gt; world have converged to hear about the future and direction of Telligent development.&lt;/P&gt;
&lt;P&gt;Kevin Harder has been blogging the event for those who can only attend in spirit.&amp;nbsp; We have been recording all of the presentations; and hopefully our video blogging champion Ado, will have some downloads soon...&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;
&lt;P&gt;Check out the live blog at &lt;/P&gt;
&lt;P&gt;&lt;A href="http://kevinharder.com/blog/archive/2007/10/20/live-blogging-the-csdc.aspx"&gt;http://kevinharder.com/blog/archive/2007/10/20/live-blogging-the-csdc.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://kevinharder.com/blog/archive/2007/10/20/live-blogging-the-csdc-part-2.aspx"&gt;http://kevinharder.com/blog/archive/2007/10/20/live-blogging-the-csdc-part-2.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://kevinharder.com/blog/archive/2007/10/21/live-blogging-the-csdc-part-3.aspx"&gt;http://kevinharder.com/blog/archive/2007/10/21/live-blogging-the-csdc-part-3.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=387094" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="CS 2007" scheme="http://blog.danbartels.com/archive/tags/CS+2007/default.aspx" /></entry><entry><title>Win2008 RC0 install fails x8007045d</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/10/15/win2008-rc0-install-fails-x8007045d.aspx" /><id>http://blog.danbartels.com/archive/2007/10/15/win2008-rc0-install-fails-x8007045d.aspx</id><published>2007-10-15T15:20:00Z</published><updated>2007-10-15T15:20:00Z</updated><content type="html">&lt;P&gt;The current installer locks access to the disk open, so if you did something, like asked it to "format" your disk prior to installing Windows Server 2008, the format process will silently fail, the copy files will silently fail, and you will get a x8007045d during the expanding files portion of the install.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You will need to reboot, choose repair instead of install, click next on the choose OS dialog, then command prompt, and manually format your drive (format c:).&amp;nbsp; You should then be able to continue the installation.&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=379840" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Windows Vista (Longhorn)" scheme="http://blog.danbartels.com/archive/tags/Windows+Vista+_2800_Longhorn_2900_/default.aspx" /><category term="Windows Server 2008" scheme="http://blog.danbartels.com/archive/tags/Windows+Server+2008/default.aspx" /></entry><entry><title>Amazon Mp3 has arrived (public beta)</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/09/25/amazon-mp3-has-arrived-public-beta.aspx" /><id>http://blog.danbartels.com/archive/2007/09/25/amazon-mp3-has-arrived-public-beta.aspx</id><published>2007-09-25T16:29:00Z</published><updated>2007-09-25T16:29:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;As I speculated based on &lt;SPAN class=mceItemHiddenSpellWord&gt;internet&lt;/SPAN&gt; rumors nearly a year ago (&lt;/SPAN&gt;&lt;A href="http://blog.danbartels.com/archive/2006/12/26/good-bye-yahoo-music-hello-zune.aspx"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://&lt;SPAN class=mceItemHiddenSpellWord&gt;blog&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;danbartels&lt;/SPAN&gt;.com/archive/2006/12/26/good-bye-yahoo-music-hello-&lt;SPAN class=mceItemHiddenSpellWord&gt;zune&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;aspx&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN class=mceItemHidden&gt;)&amp;nbsp; Amazon has jumped into the &lt;SPAN class=mceItemHiddenSpellWord&gt;online&lt;/SPAN&gt; music sales foray...&amp;nbsp; Now you didn't need to be psychic to guess this, it seems to be a natural fit for the e-tailer.&amp;nbsp; While the .89 and .99 cent 256 &lt;SPAN class=mceItemHiddenSpellWord&gt;kbit&lt;/SPAN&gt; Mp3 tracks are arguably more expensive that Russian site (AllOfMp3.com and their derivatives) its nice to have a DRM free music choice in the popular Mp3 format.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Check out their selection&amp;nbsp;&lt;A class="" href="http://www.amazon.com/b/ref=gw_br_mp3/103-9101608-2003818?%5Fencoding=UTF8&amp;amp;node=163856011&amp;amp;pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=left-nav-1&amp;amp;pf_rd_r=1TZSHSCCBHG7G7NESZ7G&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=311501601&amp;amp;pf_rd_i=507846"&gt;Amazon.com Mp3&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;I just hope that&amp;nbsp;now that they have built the marketplace, they find ways&amp;nbsp;to play nice with the independent music scene,&amp;nbsp; I&amp;nbsp;would also love to see a subscription option!&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=379838" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Windows Mobile" scheme="http://blog.danbartels.com/archive/tags/Windows+Mobile/default.aspx" /><category term="Yahoo Music" scheme="http://blog.danbartels.com/archive/tags/Yahoo+Music/default.aspx" /></entry><entry><title>Extracting ExtendedAttributes via SQL</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/05/11/extracting-extendedattributes-via-sql.aspx" /><id>http://blog.danbartels.com/archive/2007/05/11/extracting-extendedattributes-via-sql.aspx</id><published>2007-05-11T22:15:00Z</published><updated>2007-05-11T22:15:00Z</updated><content type="html">&lt;P&gt;In Community Server, several of our classes derive from the ExtendedAttributes class.&amp;nbsp; This class creates a list of name value pairs on the class, and is picked off by our data layer and stored into two NTEXT columns in the table, PropertyNames, and PropertyValues.&amp;nbsp; This pattern is derived directly from the way that the ASPNET membership system implements this capability in the ASPNET_PROFILE table.&amp;nbsp; It allows you to define, and persist custom key value data with an item in the database without need to make schema changes.&amp;nbsp; Whats good about this, is its easy for a developer to save and retrieve custom pieces of information about the object, whats bad is its stored in an unfriendly way in the database and is very difficult to query against.&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; PropertyValues &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; cs_Sections &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT size=2&gt; ApplicationKey &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'sample'&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;yieds a result of &lt;/P&gt;&lt;FONT size=1&gt;
&lt;P&gt;PropertyNames &lt;BR&gt;&lt;FONT size=1&gt;&lt;FONT size=1&gt;--------------------------------------------------------------------------------------------------------&lt;/FONT&gt;&lt;BR&gt;&lt;FONT size=1&gt;SectionOwners:S:0:5:CategorizationType:S:5:1:aboutTitle:S:6:12: &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=1&gt;&lt;FONT size=1&gt;&lt;FONT size=1&gt;
&lt;P&gt;PropertyValues&lt;BR&gt;&lt;FONT size=1&gt;--------------------------------------------------------------------------------------------------------&lt;BR&gt;&lt;FONT size=1&gt;admin1About Sample&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;In recently working with this, I wrote a bit of SQL to help extract a value from the PropertyValues column where you know the specific key.&amp;nbsp; I use this in a SQL script to populate a temp table which I can then join against; In this case I am trying to extract the section owner, which happens to be at the beginning of this property value collection, but doesnt need to be...&amp;nbsp; &lt;/P&gt;
&lt;P&gt;This SQL will extract the Owner Name and the Primary Key which in this case is a column called SectionID&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;DECLARE&lt;/FONT&gt;&lt;FONT size=2&gt; @PropertyString &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;50&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;DECLARE&lt;/FONT&gt;&lt;FONT size=2&gt; @PropertyDelimiter &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NVARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;50&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; @PropertyString &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'%SectionOwners:S:%'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; @PropertyDelimiter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'%:%'&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#ff0000 size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;SELECT&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;SectionID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#ff00ff size=2&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;PropertyValues&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;
&lt;P&gt;CONVERT&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;LEN&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)-&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;0&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyDelimiter&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;LEN&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)-&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))))+1,&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;
&lt;P&gt;CONVERT&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;LEN&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)-&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyDelimiter&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;LEN&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)-&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;0&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyDelimiter&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;LEN&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)-&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;),&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyDelimiter&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUBSTRING&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;LEN&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)-&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; 100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))+&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))) -1)&lt;/P&gt;
&lt;P&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;1&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;
&lt;P&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; Owners &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; cs_Sections &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;PATINDEX&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;@PropertyString&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; PropertyNames&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; 0 &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;This code basically finds all the rows&amp;nbsp;that have the property, the property is&amp;nbsp;defined as [PropertyName]:[DataType]:[Begin]:[Length] or ( SectionOwners:S:0:5 ) so the first big&amp;nbsp;SUBSTRING, is&amp;nbsp;getting the first integer after the PropertyName:Datatype:, and the second is getting the&amp;nbsp;next integer after the first, which is the length...&amp;nbsp;(the only real assumption in the above code, is that the combined digits of the [begin]:[length] cannot exceed 100...&amp;nbsp; I am grabbing only the first 100 cars after the PropertyString to find the integers in)&lt;/P&gt;
&lt;P&gt;While my tests on SQL2005 seem to indicate that this is not a horrible query performance wise, I wouldn't want to constantly be doing this type of string manipulation, So I would only recommend this for reporting, special one off queries, or to use on a relatively infrequent process, like item save, to peel off the custom data and put it in an indexable location.&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=180757" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="2005 - VS2005 and SQL2005" scheme="http://blog.danbartels.com/archive/tags/2005+-+VS2005+and+SQL2005/default.aspx" /><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="Tips and Tricks" scheme="http://blog.danbartels.com/archive/tags/Tips+and+Tricks/default.aspx" /><category term="CS 2007" scheme="http://blog.danbartels.com/archive/tags/CS+2007/default.aspx" /></entry><entry><title>Show your CS2007 stuff and Win</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/04/27/show-your-cs2007-stuff-and-win.aspx" /><id>http://blog.danbartels.com/archive/2007/04/27/show-your-cs2007-stuff-and-win.aspx</id><published>2007-04-27T20:14:00Z</published><updated>2007-04-27T20:14:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;Telligent&lt;/SPAN&gt; is having a little contest to see who can build the best theme for CS...&amp;nbsp; There are a couple of contests actually, one showcasing our new theme / markup&lt;/SPAN&gt;&amp;nbsp;system for full site themes, and another to creatively use the "export" option of our dynamic theme export feature.&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;The prizes include two &lt;SPAN class=mceItemHiddenSpellWord&gt;MacBooks&lt;/SPAN&gt; and Two &lt;SPAN class=mceItemHiddenSpellWord&gt;XBox&lt;/SPAN&gt; 360 Elites.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Check out the official page!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://docs.communityserver.org/wiki/page.aspx/239/community-server-2007-theming-extravaganza/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://docs.&lt;SPAN class=mceItemHiddenSpellWord&gt;communityserver&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;org&lt;/SPAN&gt;/&lt;SPAN class=mceItemHiddenSpellWord&gt;wiki&lt;/SPAN&gt;/page.&lt;SPAN class=mceItemHiddenSpellWord&gt;aspx&lt;/SPAN&gt;/239/community-server-2007-theming-extravaganza/&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=168618" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="CS 2007" scheme="http://blog.danbartels.com/archive/tags/CS+2007/default.aspx" /></entry><entry><title>Join Us - Community Server team has open positions</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/04/27/join-us-community-server-team-has-open-positions.aspx" /><id>http://blog.danbartels.com/archive/2007/04/27/join-us-community-server-team-has-open-positions.aspx</id><published>2007-04-27T20:07:00Z</published><updated>2007-04-27T20:07:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Come and join this outstanding team.&amp;nbsp; We are looking to fill two spots at the moment...&amp;nbsp; A Community Server Specialist; a developer familiarity with CS, C# and ASP.NET and a Client Side Guru, someone who can help us take our XHTML / CSS / &lt;SPAN class=mceItemHiddenSpellWord&gt;Javascript&lt;/SPAN&gt; to the next level.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;If you have any questions about working on the team, feel free to contact any of us;&amp;nbsp; See Scott W's &lt;SPAN class=mceItemHiddenSpellWord&gt;blog&lt;/SPAN&gt; post for instructions on how to apply.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://scottwater.com/blog/archive/cs-jobs/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://&lt;SPAN class=mceItemHiddenSpellWord&gt;scottwater&lt;/SPAN&gt;.com/&lt;SPAN class=mceItemHiddenSpellWord&gt;blog&lt;/SPAN&gt;/archive/cs-jobs/&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=168613" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="MyCommunityServer" scheme="http://blog.danbartels.com/archive/tags/MyCommunityServer/default.aspx" /></entry><entry><title>Fixing Non-Relative Urls in Posts</title><link rel="alternate" type="text/html" href="http://blog.danbartels.com/archive/2007/04/12/fixing-non-relative-urls-in-posts.aspx" /><id>http://blog.danbartels.com/archive/2007/04/12/fixing-non-relative-urls-in-posts.aspx</id><published>2007-04-12T19:58:00Z</published><updated>2007-04-12T19:58:00Z</updated><content type="html">&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;One of the challenges with the &lt;SPAN class=mceItemHiddenSpellWord&gt;TinyMCE&lt;/SPAN&gt; (as I recall we had this same issue with FreeTextBox) is relative &lt;SPAN class=mceItemHiddenSpellWord&gt;urls&lt;/SPAN&gt;..&amp;nbsp; In CS because we are in a control panel, making posts which can be viewed on various parts of the site, it can be difficult for the site to determine the correct relative URL to use for content; as such there is code in place to convert relative &lt;SPAN class=mceItemHiddenSpellWord&gt;urls&lt;/SPAN&gt; to full &lt;SPAN class=mceItemHiddenSpellWord&gt;urls&lt;/SPAN&gt; on things like SRC attributes of images.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;The problem is that if you move your site, all of this content is hard coded into the body of your posts, further, if you use SSL, users will get security warnings for image which are hard coded to &lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt; instead of relative or &lt;SPAN class=mceItemHiddenSpellWord&gt;https&lt;/SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;In CS we can use the "Censorship" feature, to strip the full &lt;SPAN class=mceItemHiddenSpellWord&gt;url&lt;/SPAN&gt; from our posts... (note in CS 2.1 this was something tiny like 20 chars, so you have to tweak the code; in CS 2007 the fields has been enlarged to 256 chars)&amp;nbsp; In the Control Panel, Administration Section, System Tools group, you will find the "Manage / Create Censorships" option.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;Then proceed to add tags like &lt;SPAN class=mceItemHiddenSpellWord&gt;src&lt;/SPAN&gt;="&lt;/SPAN&gt;&lt;A href="http://blog.danbartels.com/"&gt;&lt;SPAN class=mceItemHidden&gt;&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://&lt;SPAN class=mceItemHiddenSpellWord&gt;blog&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;danbartels&lt;/SPAN&gt;.com&lt;/SPAN&gt;/&lt;/A&gt;&lt;SPAN class=mceItemHidden&gt;&amp;nbsp;as a "Bad Word" and &lt;SPAN class=mceItemHiddenSpellWord&gt;src&lt;/SPAN&gt;="/ as the "Replacement Token"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;and to the same for &lt;SPAN class=mceItemHiddenSpellWord&gt;href&lt;/SPAN&gt;="&lt;SPAN class=mceItemHiddenSpellWord&gt;http&lt;/SPAN&gt;://&lt;SPAN class=mceItemHiddenSpellWord&gt;blog&lt;/SPAN&gt;.&lt;SPAN class=mceItemHiddenSpellWord&gt;danbartels&lt;/SPAN&gt;.com/ &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=mceItemHidden&gt;This will cause those strings to get stripped and replaced in your posts as you save them, removing the fully qualified site paths and replacing them with relative &lt;SPAN class=mceItemHiddenSpellWord&gt;pathing&lt;/SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Dan&lt;/P&gt;&lt;img src="http://blog.danbartels.com/aggbug.aspx?PostID=158884" width="1" height="1"&gt;</content><author><name>DanB</name><uri>http://blog.danbartels.com/members/DanB.aspx</uri></author><category term="Community Server" scheme="http://blog.danbartels.com/archive/tags/Community+Server/default.aspx" /><category term="Tips and Tricks" scheme="http://blog.danbartels.com/archive/tags/Tips+and+Tricks/default.aspx" /><category term="CS 2007" scheme="http://blog.danbartels.com/archive/tags/CS+2007/default.aspx" /></entry></feed>