<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://lunarmedia.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Lunarmedia</title><link>http://lunarmedia.com/blogs/</link><description>An eye on earth</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>Encrypting connectionstrings.config in IIS 6.0</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2010/02/09/encrypting-connectionstring-config-in-iis-6-0.aspx</link><pubDate>Tue, 09 Feb 2010 10:09:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123804</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Simply call these two commands in cmd prompt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;C:\WINDOWS\microsoft.net\Framework64\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" C:\MyWebsiteFolder&lt;/li&gt;
&lt;li&gt;C:\WINDOWS\microsoft.net\Framework64\v2.0.50727\aspnet_regiis -pa "NetFrameworkConfigurationKey" "Network Service"&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you still get a: "&lt;i&gt;Failed
 to decrypt using provider 'RsaProtectedConfigurationProvider'. Error 
message from the provider: The RSA key container could not be opened.&lt;/i&gt;" Then call the second command again but replace "Network Service" with "ASPNET".&lt;/p&gt;
&lt;p&gt;Source: MS Patterns &amp;amp; Practices: &lt;a href="http://msdn.microsoft.com/en-us/library/ms998283.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms998283.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms998283.aspx&lt;/a&gt;&lt;br&gt;&lt;/p&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123804" width="1" height="1"&gt;</description></item><item><title>T-SQL Dynamic Sorting and Order By</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/07/15/t-sql-dynamic-sorting-and-order-by.aspx</link><pubDate>Wed, 15 Jul 2009 09:14:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123693</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Using the CASE expression its possible to do efficient sorting and ordering by different parameters in one query. Here is an example from &lt;a href="http://gregbeech.com/blogs/tech/archive/2008/07/21/dynamic-sorting-and-paging-in-sql-server-with-the-case-expression.aspx" mce_href="http://gregbeech.com/blogs/tech/archive/2008/07/21/dynamic-sorting-and-paging-in-sql-server-with-the-case-expression.aspx"&gt;Greg Beech's Tech Blog&lt;/a&gt; which also includes paging:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;DECLARE @SortType TINYINT, @SortAscending BIT, @FirstRow INT, @MaxRows INT;&lt;br&gt;SELECT @SortType = 2, @SortAscending = 0, @FirstRow = 10, @MaxRows = 10;&lt;br&gt;&lt;br&gt;WITH FoundCustomers AS&lt;br&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROW_NUMBER() OVER&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE WHEN @SortType = 0 AND @SortAscending = 1 THEN c.ContactName END ASC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,CASE WHEN @SortType = 0 AND @SortAscending = 0 THEN c.ContactName END DESC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,CASE WHEN @SortType = 1 AND @SortAscending = 1 THEN c.CompanyName END ASC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,CASE WHEN @SortType = 1 AND @SortAscending = 0 THEN c.CompanyName END DESC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,CASE WHEN @SortType = 2 AND @SortAscending = 1 THEN c.Country END ASC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,CASE WHEN @SortType = 2 AND @SortAscending = 0 THEN c.Country END DESC&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) AS RowNumber&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,c.*&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbo.Customers c&lt;br&gt;)&lt;br&gt;SELECT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fc.*&lt;br&gt;FROM&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FoundCustomers fc&lt;br&gt;WHERE&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fc.RowNumber BETWEEN @FirstRow AND @FirstRow + @MaxRows - 1&lt;br&gt;ORDER BY&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fc.RowNumber;&lt;/pre&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123693" width="1" height="1"&gt;</description></item><item><title>CSControl:ConditionalContent - a thing to remember!</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/05/08/cscontrol-conditionalcontent-a-think-to-remember.aspx</link><pubDate>Fri, 08 May 2009 16:24:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123692</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When using the ConditionalContent control from CommunityServer, always remember to use the &amp;lt;ContentConditions&amp;gt; tag when detailing the condition. Hmm that sounds obvious. No, its not. The control also has the DisplayCondition tag which is what we commonly use for other controls! Here is an example of correct usage: &lt;br&gt;&lt;/p&gt;


&lt;pre&gt;&amp;lt;CSControl:ConditionalContent runat="server"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;lt;ContentConditions&amp;gt;&amp;lt;CSControl:QueryStringPropertyValueComparison&lt;br&gt;QueryStringProperty="condition" Operator="EqualTo"&lt;br&gt;ComparisonValue="true" runat="server" /&amp;gt;&amp;lt;/ContentConditions&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;lt;TrueContentTemplate&amp;gt;It's true!&amp;lt;/TrueContentTemplate&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;lt;FalseContentTemplate&amp;gt;It's false!&amp;lt;/FalseContentTemplate&amp;gt;&lt;br&gt;&amp;lt;/CSControl:ConditionalContent&amp;gt;&lt;/pre&gt;
&lt;p&gt;Ahh that was good. &lt;br&gt;&lt;/p&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123692" width="1" height="1"&gt;</description></item><item><title>301 Redirect</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/03/03/301-redirect.aspx</link><pubDate>Tue, 03 Mar 2009 13:50:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123614</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;I always forget this particular code and spend time finding it again and again: This is for redirecting call to the root domain in Community Server to the /forums/ folder. I usually create a blank aspx page that does the redirect - otherwise the page will load (which may be several 20-30 kb before directing). In SiteUrls_override.config you can set the "home" location name to the redirect file.&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&amp;lt;%@ Page %&amp;gt;&lt;br&gt;&amp;lt;%@ Import Namespace="System.Web" %&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;script language="C#" runat="server"&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void OnInit(EventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.HttpContext context = System.Web.HttpContext.Current;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.Response.Status = "301 Moved Permanently";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.Response.AddHeader("Location", "/forums/");&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123614" width="1" height="1"&gt;</description></item><item><title>OpenSocial API for CSharp</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/02/27/opensocial-api-for-csharp.aspx</link><pubDate>Fri, 27 Feb 2009 14:21:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123605</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Im currently looking for an OpenSocial API for the dotnet (.net) platform preferably written in csharp (C#). There are already APIs for PHP, Ruby, and other open source frameworks - where is the .net version?&lt;/p&gt;&lt;p&gt;It seems that the OpenSocial movement is less active in the proprietary world which for our sake (im part of it) is unfortunate. I believe the advent of OpenSocial will heavily be reflected in the future of the web.&lt;br&gt;&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123605" width="1" height="1"&gt;</description></item><item><title>Enable/Disable "Question &amp; Answers"</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/02/19/enable-disable-quot-question-amp-answers-quot.aspx</link><pubDate>Thu, 19 Feb 2009 12:15:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123583</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;In CS 2008.5 its possible to post a forum topic that is a "Question" or a "Discussion". In order to enable this you need to check two places in the Controlpanel.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In Forum Administration - Configuration - Global Forum Settings&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Set "Enable Thread Status Tracking" to Yes&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;In Forums and Groups - Forums&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Select to "Edit" the particular forum - in "Allowed Thread Types" check "Questions and Answers".&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;p&gt;
And you are done!&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123583" width="1" height="1"&gt;</description></item><item><title>CustomCondition in Community Server</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/02/19/customcondition-in-community-server.aspx</link><pubDate>Thu, 19 Feb 2009 09:40:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123582</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Often I find situations where I need to do a customized condition comparision. To enable this, Telligent have added the following chameleon control:&lt;br&gt;&lt;/p&gt;
&lt;pre&gt;&amp;lt;CSControl:CustomCondition runat="server" CustomResult='&amp;lt;%# ((CommunityServer.Discussions.Components.Forum) ForumControlUtility.Instance().GetCurrentForum(Container)).SectionID == ForumControlUtility.Instance().GetCurrentThread(this.Page).SectionID %&amp;gt;'&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/&amp;gt;&lt;/pre&gt;
&lt;p&gt;In this example I check the sectionId of the current forum (eg. in a dropdown list populated with all the forums) and the forum in which the thread im viewing is in.&lt;br&gt;&lt;/p&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123582" width="1" height="1"&gt;</description></item><item><title>Website Performance Optimization</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/01/29/website-performance-optimization.aspx</link><pubDate>Thu, 29 Jan 2009 13:15:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123545</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Today I implemented some of the &lt;a href="http://developer.yahoo.com/performance/rules.html" mce_href="http://developer.yahoo.com/performance/rules.html"&gt;best practice guidelines&lt;/a&gt; for speeding up websites. It has resulted in significant improved load times on the &lt;a href="http://subscene.com" mce_href="http://subscene.com"&gt;subtitle website&lt;/a&gt; Subscene. Although all "rules" as specified by Yahoo has not been implemented yet it has already decreased load times to the half. For future developments all guidelines will be followed, first implemented in the new &lt;a href="http://lingbay.com" mce_href="http://lingbay.com"&gt;translator markedplace&lt;/a&gt; Lingbay.&lt;/p&gt;&lt;p&gt;Scott Hanselman has a post about &lt;a href="http://www.hanselman.com/blog/ForcingAnUpdateOfACachedJavaScriptFileInIIS.aspx" mce_href="http://www.hanselman.com/blog/ForcingAnUpdateOfACachedJavaScriptFileInIIS.aspx"&gt;enabling proxy caching in IIS&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123545" width="1" height="1"&gt;</description></item><item><title>Lingbay - A Marketplace for Linguistic Jobs</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/01/21/lingbay-a-marketplace-for-linguistic-jobs.aspx</link><pubDate>Wed, 21 Jan 2009 13:28:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123544</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
The new &lt;a href="http://lingbay.com" mce_href="http://lingbay.com"&gt;marketplace for linguistic jobs&lt;/a&gt; (Lingbay) is nearing completion. Expected launch is around April this year. If you want to be notified when we go live &lt;a href="http://lingbay.com" mce_href="http://lingbay.com"&gt;sign-up today&lt;/a&gt;!
&lt;/p&gt;
&lt;p&gt;About Lingbay:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Lingbay is an auction-house for linguistic related jobs, including translations, proofreadings, and transcriptions. 
	As a freelance translator you bid on linguistic jobs and are paid the agreed amount after completion.
	As an outsourcer or employer you receive competitive quotes on jobs directly from the translator.&lt;/i&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;For a successful launch the procedure is as follows:&lt;/p&gt;
&lt;ol class="list"&gt;
&lt;li&gt;Collect a email-list of interested parties (active)&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Gather a registered list of translators, linguistic professionals, and students&lt;/li&gt;
&lt;li&gt;Launch a working beta version with active linguistic jobs&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
In addition to the listed procedure, a large ad-campaign will run as &lt;a href="http://lingbay.com" mce_href="http://lingbay.com"&gt;Lingbay&lt;/a&gt; is launched. A website like &lt;a href="http://lingbay.com" mce_href="http://lingbay.com"&gt;Lingbay&lt;/a&gt;
requires a critical mass the be meet in order for the marketplace to
function. First, a group of freelance translators needs to be ready to
complete linguistic jobs within a certain period. Secondly, a continous
flow of new jobs are needed to keep the marketplace active. The
strategy employed is designed to fulfill that purpose.&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123544" width="1" height="1"&gt;</description></item><item><title>How to Add Extended Properties</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/01/19/how-to-add-extended-properties.aspx</link><pubDate>Mon, 19 Jan 2009 15:48:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123543</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In Community Server its easy to add extended properties to the user profile without having to write any code:&lt;/p&gt;

&lt;p&gt;To your CommunityServer.config file, add&lt;/p&gt;
&lt;pre&gt;&amp;lt;ExtendedUserData&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;add name="EXTENDED ATTRIBUTE NAME" /&amp;gt;&lt;br&gt;&amp;lt;/ExtendedUserData&amp;gt;&lt;/pre&gt;

&lt;p&gt;Then on your theme pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User Register (/themes/YOURTHEME/user/createuser.aspx)&lt;/li&gt;

&lt;li&gt;Edit Profile (/themes/YOURTHEME/user/edituser.aspx)&lt;/li&gt;

&lt;li&gt;Edit User page in Membership Administration in Control Panel (/ControlPanel/Membership/UserEdit.aspx)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;add the following input field:&lt;/p&gt;

&lt;pre&gt;&amp;lt;asp:TextBox id="EXTENDED ATTRIBUTE NAME" runat="server" /&amp;gt;&lt;/pre&gt;

&lt;p&gt;That's it!&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123543" width="1" height="1"&gt;</description></item><item><title>Retrieve Extendedproperties Via SQL</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/01/19/retrieve-extendedproperties-via-sql.aspx</link><pubDate>Mon, 19 Jan 2009 15:37:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123542</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In Community Server, dynamic user fields are saved in extended properties. In order to retrieve them in Sql add the following function:&lt;/p&gt;

&lt;pre&gt;/*------------------------------------------------------------------------------&lt;br&gt;// &amp;lt;copyright company="Telligent Systems"&amp;gt;&lt;br&gt;//     Copyright (c) Telligent Systems Corporation.  All rights reserved.&lt;br&gt;// &amp;lt;/copyright&amp;gt; &lt;br&gt;------------------------------------------------------------------------------*/&lt;br&gt;&lt;br&gt;CREATE  function [dbo].[FetchExtendendAttributeValue] (&lt;br&gt;	@Key nvarchar(4000), &lt;br&gt;	@Keys nvarchar(4000), &lt;br&gt;	@Values nvarchar(4000)&lt;br&gt;)&lt;br&gt;&lt;br&gt;/*&lt;br&gt;CS uses ExtendedAttributes to allow metadata about a post, user, or section to be stored&lt;br&gt;in a special ':' delimited format. This enables storing metadata without adding new columns&lt;br&gt;to any tables, changing sprocs, etc. &lt;br&gt;&lt;br&gt;However, any data stored in this format is not easily queryable (so use it wisely :)&lt;br&gt;&lt;br&gt;Occassionaly, you may want to query against this data. This function should make that task simple!&lt;br&gt;&lt;br&gt;Keys are stored in this format: string:S:Int:Int = Key + :S : Starting Location : Length : &lt;br&gt;&lt;br&gt;An example: 'Theme:S:0:7:dummyTotalPosts:S:7:1:BannedUntil:S:8:21:UserBanReason:S:29:5:'&lt;br&gt;&lt;br&gt;Values are stored in a single string with no spaces between them.&lt;br&gt;An example: 'default04/20/2005 12:16:41 AMOther'&lt;br&gt;&lt;br&gt;Theme starts a 0 and continues for 7 characters (default)&lt;br&gt;dummyTotalPosts starts at 7 and coninutes for 1 character (0)&lt;br&gt;BannedUntil starts at 8 and continues for 21 characters (4/20/2005 12:16:41 AM)&lt;br&gt;*/&lt;br&gt;&lt;br&gt;RETURNS nvarchar(4000)&lt;br&gt;AS&lt;br&gt;BEGIN&lt;br&gt;DECLARE @Value nvarchar(4000)&lt;br&gt;Declare @CharIndex int&lt;br&gt;Declare @StartIndex int&lt;br&gt;Declare @Len int&lt;br&gt;&lt;br&gt;--Find the index of the key&lt;br&gt;Set @CharIndex = CHARINDEX(@Key + ':s',@Keys)&lt;br&gt;&lt;br&gt;--If the key does not exist, return NULL&lt;br&gt;if(@CharIndex = 0)&lt;br&gt;RETURN NULL&lt;br&gt;&lt;br&gt;--If the key is not the first, remove any leading keys&lt;br&gt;if(@CharIndex &amp;gt; 1)&lt;br&gt;Begin&lt;br&gt;  Set @Keys = Stuff(@Keys,1,@CharIndex-1,'')&lt;br&gt;End&lt;br&gt;&lt;br&gt;--Remove the Key from the keys list. This will &lt;br&gt;Set @Keys = Stuff(@Keys,1,Len(@Key+':S:'),'')&lt;br&gt;&lt;br&gt;--Find the location of the : after the starting location&lt;br&gt;Set @CharIndex = CHARINDEX(':',@Keys)&lt;br&gt;&lt;br&gt;--Grab the starting location&lt;br&gt;Set @StartIndex = SUBSTRING(@Keys,1,@CharIndex-1)&lt;br&gt;&lt;br&gt;--Remove the starting location from the Keys&lt;br&gt;Set @Keys = Stuff(@Keys,1,@CharIndex,'')&lt;br&gt;&lt;br&gt;--Find the lenght value's index&lt;br&gt;Set @CharIndex = CHARINDEX(':',@Keys)&lt;br&gt;&lt;br&gt;--Find the lenghth value&lt;br&gt;Set @Len = SUBSTRING(@Keys,1,@CharIndex-1)&lt;br&gt;&lt;br&gt;--Get the value from the values string&lt;br&gt;Set @Value = SUBSTRING(@Values,@StartIndex+1,@Len)&lt;br&gt;&lt;br&gt;&lt;br&gt;RETURN @Value&lt;br&gt;END&lt;/pre&gt;
&lt;p&gt;Source: &lt;a href="http://code.communityserver.org/Default.aspx?path=CS+Tree%5CSampleCode%5CSQL%5CFetchExtendendAttributeValue.sql" mce_href="http://code.communityserver.org/Default.aspx?path=CS+Tree\SampleCode\SQL\FetchExtendendAttributeValue.sql"&gt;http://code.communityserver.org...&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123542" width="1" height="1"&gt;</description></item><item><title>Community Server DefaultButton</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2009/01/16/community-server-defaultbutton.aspx</link><pubDate>Fri, 16 Jan 2009 15:08:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123541</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;Today I was reminded of a wonderful CSControl that will allow a textbox to initiate a submit button (when pressing enter). Using the:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;&amp;lt;CSControl:DefaultButtonTextBox ID="..." ButtonId="SubscriptionEmailButton" runat="server" /&amp;gt;&lt;/pre&gt;

&lt;p&gt;you define the buttonId of the submit button. &lt;br&gt;&lt;/p&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123541" width="1" height="1"&gt;</description></item><item><title>Remove SVN Files with a Shell Command</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/11/12/remove-svn-files-with-a-shell-command.aspx</link><pubDate>Wed, 12 Nov 2008 11:59:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123302</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Removing all SVN files from a specific folder can easily be done from within Explore. Simply run this registry file: &lt;a href="http://lunarmedia.com/files/folders/123301/download.aspx" mce_href="http://lunarmedia.com/files/folders/123301/download.aspx"&gt;Remove All SVN Files&lt;/a&gt;. It will enable a new option "Delete SVN Folders" when you right-click on a folder in Explorer.
&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123302" width="1" height="1"&gt;</description></item><item><title>Paypal integration</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/10/04/paypal-integration.aspx</link><pubDate>Sat, 04 Oct 2008 16:41:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123145</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here are some valuable information about integrating with Paypal found in the support forum (thanks to &lt;a href="http://www.pdncommunity.com/pdn/board/message?board.id=basicpayments&amp;amp;message.id=368" mce_href="http://www.pdncommunity.com/pdn/board/message?board.id=basicpayments&amp;amp;message.id=368"&gt;PayPal_HarryX&lt;/a&gt;):&lt;/p&gt;&lt;div&gt;There are several ways PayPal returns payment data to you after
the payment is completed. You get to choose how you get the data back.
But you have to use the correct technology for your choice. I see some
confusion about the ways you receive and process data from PayPal.
Often times the technology is mismatched with the settings you made and
you get unexpected&amp;nbsp;results. I hope this article will help clear things
up.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#3300cc"&gt;Option 1: POST&amp;nbsp;to Return Page&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;How does it work?&lt;/div&gt;
&lt;ol&gt;&lt;li&gt;After finishing the payment on PayPal, the customer &lt;strong&gt;clicks on a button&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;PayPal posts payment data to your URL in a HTML form.&lt;/li&gt;&lt;li&gt;You post a form (format is described in the IPN section below) to
PayPal. PayPal responds with a single word VERIFIED or INVALID.&lt;/li&gt;&lt;li&gt;If you receive VERIFIED, you can be confident that the form you
received came from PayPal and wasn't tampered with. Do whatever you
need to do with the form data.&lt;/li&gt;&lt;/ol&gt;
&lt;div&gt;Settings:&lt;/div&gt;
&lt;ul&gt;&lt;li&gt;specify a return url in the &lt;strong&gt;return&lt;/strong&gt; variable in your html form. The return url must be an absolute url.&lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;input type="hidden" name="return" value="your_url_here"&amp;gt;&lt;/pre&gt;&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt;&lt;li&gt;set the&amp;nbsp;&lt;strong&gt;rm&lt;/strong&gt; variable to 2. &lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;input type="hidden" name="rm" value="2"&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Auto Return =&amp;nbsp;Disabled in account profile&amp;nbsp;(if Auto Return = Enabled, you won't get any data)&lt;/li&gt;&lt;li&gt;PDT = Disabled in account profile&lt;/li&gt;&lt;li&gt;IPN = Disabled in account profile&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;
&lt;p&gt;Sample script:&lt;font color="#ff0000"&gt; &lt;a href="http://paypaltech.com/SG2/" target="_blank"&gt;http://paypaltech.com/SG2/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#ff0000"&gt;I don't recommend this&lt;/font&gt; as a
stand-alone solution because you can't guarantee that the customer will
click on that button. Many customers simply close their browser or
navigate away because they are done with their payment.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#3300cc"&gt;Option 2: Payment Data Transfer (PDT)&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;How does it work?&lt;/div&gt;
&lt;ol&gt;&lt;li&gt;After finishing the payment on PayPal, the customer is &lt;strong&gt;automatically redirected&lt;/strong&gt; to your page.&lt;/li&gt;&lt;li&gt;PayPal sends a &lt;strong&gt;GET&lt;/strong&gt; request to your page. If your URL contains a query string, PayPal will append parameters to the URL. For example: &lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&lt;a href="http://yoursite/yourpage?yourparam=yourvalue&amp;amp;tx=3KK900354R868601V" target="_blank"&gt;http://yoursite/yourpage?yourparam=yourvalue&amp;amp;tx=3KK900354R868601V&lt;/a&gt;&amp;amp;......&lt;/pre&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;You post a form to PayPal with &lt;strong&gt;cmd=_notify-synch&lt;/strong&gt;, the &lt;strong&gt;tx&lt;/strong&gt; token you received in the query string and the&amp;nbsp;identity token in your account profile when you turned on PDT.&lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="POST"&amp;gt;&lt;br&gt;  &amp;lt;input type="hidden" name="cmd" value="_notify-synch"&amp;gt;&lt;br&gt;  &amp;lt;input type="hidden" name="tx" value="3KK900354R868601V"&amp;gt;&lt;br&gt;  &amp;lt;input type="hidden" name="at" value="lpeb7DhJWXz5BU43tiarWlo42x5g-Nvv0oJCORuEVsmY9JiRuVUDW2jAHUI"&amp;gt;&lt;br&gt;&amp;lt;/form&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;PayPal responds with &lt;strong&gt;a block of text&lt;/strong&gt; with SUCCESS or FAIL on the top. If it's SUCCESS, name value pairs on separate lines follow the SUCCESS line.&lt;/li&gt;&lt;li&gt;If the response has SUCCESS on the top, you read the rest of the lines from the response.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Settings:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;specify an url for PDT&amp;nbsp;in your account profile or in the &lt;strong&gt;return&lt;/strong&gt; variable in your html form. The url must be an absolute url.&lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;input type="hidden" name="return" value="your_pdt_url_here"&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Auto Return = Enabled in account profile&lt;/li&gt;&lt;li&gt;PDT = Enabled in account profile&lt;/li&gt;&lt;li&gt;IPN = Disabled in account profile&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Sample script: &lt;a href="http://paypaltech.com/PDTGen/" target="_blank"&gt;http://paypaltech.com/PDTGen/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;More info: &lt;a href="https://www.paypal.com/IntegrationCenter/ic_pdt.html" target="_blank"&gt;https://www.paypal.com/IntegrationCenter/ic_pdt.html&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;This approach is better&lt;/strong&gt; than Option 1 but there still may be &lt;font color="#ff0066"&gt;breakage&lt;/font&gt;
from the auto redirect after the payment is done. For example the
customer could close the browser or navigate away before redirect is
completed. If the redirect breaks, you won't know about the payment. It
is possible for the customer to refresh the page. So if you are
inserting records to a database, you must check for duplicates. Don't
count on the PDT url being called only once. Use PDT if you must know &lt;strong&gt;immediately&lt;/strong&gt;
whether the payment went through, while the customer is still on your
site, for example for providing immediate access to digital downloads.
If you are shipping physical goods, you can wait for the IPN (see
Option 3 below). Because PDT is a front end technology, you will only
get data for the initial payment. You won't get data on eCheck
clearance and other events. If you want to get notified
programmatically about those events, you will still have to do IPN.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#3300cc"&gt;Option 3: Instant Payment Notification (IPN)&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;How does it work?&lt;/div&gt;
&lt;ol&gt;&lt;li&gt;After finishing the payment on PayPal, the customer is &lt;strong&gt;auto-redirected&lt;/strong&gt; to your page ("return" variable)&lt;/li&gt;&lt;li&gt;Customer returns to your page. PayPal does &lt;strong&gt;NOT&lt;/strong&gt; send any payment data there.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Separately&lt;/strong&gt; in the background, you receive a form POST from PayPal at a &lt;strong&gt;different&lt;/strong&gt; URL (notify_url variable).&lt;/li&gt;&lt;li&gt;You post back a form with &lt;strong&gt;cmd=_notify-validate&lt;/strong&gt; and all fields you received from PayPal. PayPal responds with a single word VERIFIED or INVALID&lt;/li&gt;&lt;li&gt;If you receive VERIFIED, you can be confident that the form you
received came from PayPal and wasn't tampered with. Do whatever you
need to do with the form fields.&lt;/li&gt;&lt;/ol&gt;
&lt;div&gt;Settings:&lt;/div&gt;
&lt;ul&gt;&lt;li&gt;Specify an auto return url in your profile or in the &lt;strong&gt;return&lt;/strong&gt;
variable in your html form. The url must be an absolute url. This is
just a generic page with no PayPal processing logic. Display something
like "Thank you and your order will be processed shortly." &lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;input type="hidden" name="return" value="your_return_url_here"&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Specify an IPN url in your profile or in the &lt;strong&gt;notify_url&lt;/strong&gt;
variable in your html form. This is where you process payment data from
PayPal. The IPN url must be an absolute url. It must also allow
anonymous access&amp;nbsp;from outside of your network.&amp;nbsp;If you must open your
firewall to a specific host, please note&amp;nbsp;the Sandbox sends IPNs from
ipn.sandbox.paypal.com. PayPal live site sends IPNs from
notify.paypal.com. &lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;input type="hidden" name="notify_url" value="your_ipn_url_here"&amp;gt;&lt;/pre&gt;&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Auto Return = Enabled in account profile&lt;/li&gt;&lt;li&gt;PDT = Disabled in account profile&lt;/li&gt;&lt;li&gt;IPN = Enabled in account profile&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Sample script: &lt;a href="http://paypaltech.com/SG2/" target="_blank"&gt;http://paypaltech.com/SG2/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Test your IPN listener: &lt;a href="http://paypaltech.com/Stephen/test/ipntest3.htm" target="_blank"&gt;http://paypaltech.com/Stephen/test/ipntest3.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;More info: &lt;a href="https://www.paypal.com/IntegrationCenter/ic_ipn.html" target="_blank"&gt;https://www.paypal.com/IntegrationCenter/ic_ipn.html&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;I recommend this approach&lt;/strong&gt; over the 2 options
above because there is less chance for breakage. It's independent of
the customer's action. If the customer&amp;nbsp;closes the browser or navigates
away, you will still receive notifications from PayPal at your
notify_url.&amp;nbsp;IPN also has built-in retry mechanism. If there's a problem
reaching your notify_url, PayPal will re-try for several days. With
either of the 2 options above, you only have one shot at getting the
payment data.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#3300cc"&gt;Option 4: PDT + IPN&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;This is a belt and suspenders strategy. You use PDT to get most of
your data but use IPN as a backup to catch the redirect breakage and
for receiving other event notifications.&amp;nbsp;For each IPN you receive, you
will first check to see if you already got it from PDT.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;Settings:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Specify a return url in your account profile or in the &lt;strong&gt;return&lt;/strong&gt; variable in your html form. The script there processes the GET request from PayPal as described under PDT above.&lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;input type="hidden" name="return" value="your_pdt_url_here"&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Also specify an IPN url in your profile or in the &lt;strong&gt;notify_url&lt;/strong&gt;
variable in your html form. This script processes the&amp;nbsp;POST data from
PayPal as descirbed under IPN above. Note the data you received may
have already been processed by PDT. &lt;span class="msg_source_code"&gt;&lt;span class="text_smallest"&gt;Code:&lt;/span&gt;&lt;pre&gt;&amp;lt;input type="hidden" name="notify_url" value="your_ipn_url_here"&amp;gt;&lt;/pre&gt;&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Auto Return = Enabled in account profile&lt;/li&gt;&lt;li&gt;PDT = Enabled in account profile&lt;/li&gt;&lt;li&gt;IPN = Enabled in account profile&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;&lt;strong&gt;I also recommend this approach if you are able to deal with the duplicates&lt;/strong&gt; coming from different channels. You get the best of both worlds.&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font color="#3300cc"&gt;Where are the Profile settings for all these?&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul&gt;&lt;li&gt;Auto Return and default return URL are in &lt;strong&gt;Profile&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Website Payment Preferences&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;PDT and your Identity Token (&lt;strong&gt;at&lt;/strong&gt; variable)&amp;nbsp;are in &lt;strong&gt;Profile&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Website Payment Preferences&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;IPN and the default notify_url are in &lt;strong&gt;Profile&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Instant Payment Notification Preferences&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;I welcome your questions, comments and corrections however please do
not post questions or problems specific to&amp;nbsp;your scripts. You should be
able to resolve most of the problems by double checking what you have
against the approaches outlined above. If not, please create a separate
thread for your specific problem. Thank you.&lt;/p&gt;&lt;p&gt;Message Edited by PayPal_HarryX on &lt;span class="date_text"&gt;08-12-2006&lt;/span&gt; &lt;span class="time_text"&gt;08:05 PM&lt;/span&gt;
						&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123145" width="1" height="1"&gt;</description></item><item><title>Step guide to Setup Single Sign-On in CS</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/09/30/step-guide-to-setup-single-sign-on-in-cs.aspx</link><pubDate>Tue, 30 Sep 2008 08:16:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123139</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;Scenario: Two websites (a main and a subdomain) are running on the same IIS but different app pools. CommunityServer is on a subdomain, eg. forum.lunarmedia.com, and is used as the primary membership provider. On the main site eg. lunarmedia.com, we want to show the logged in username etc. In order to do this we need to be sure the following are present in both web.config files.&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;1.&lt;/b&gt; In web.config add (Goto &lt;a href="http://www.eggheadcafe.com/articles/GenerateMachineKey/GenerateMachineKey.aspx" mce_href="http://www.eggheadcafe.com/articles/GenerateMachineKey/GenerateMachineKey.aspx"&gt;here to generate a machine key&lt;/a&gt;): &lt;/p&gt;
&lt;pre&gt;&amp;lt;system.web&amp;gt;&lt;br&gt;   	&amp;lt;machineKey validationKey="Your_Generated_Validation_Key_Goes_Here"&lt;br&gt;        	decryptionKey="Your_Generated_Decryption_Key_Goes_Here"&lt;br&gt;    		validation="SHA1" /&amp;gt; &lt;br&gt;	&amp;lt;!-- Other system.web elements --&amp;gt;      &lt;br&gt;&amp;lt;/system.web&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;2.&lt;/b&gt; In web.config add a domain attribute to your &amp;lt;authentication mode="Forms"&amp;gt; node:&lt;br&gt;&lt;/p&gt;

&lt;pre&gt;&amp;lt;authentication mode="Forms"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;forms name=".CommunityServer" domain=".lunarmedia.com" protection="All" timeout="60000" loginUrl="login.aspx" slidingExpiration="true"/&amp;gt;&lt;br&gt;&amp;lt;/authentication&amp;gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;span style="font-weight: bold;"&gt;3.&lt;/span&gt; Copy the Telligent.CommunityServer.SecurityModules.dll file to both "bin" folders of the two websites. You can get the dll from the Single Sign-on download at: &lt;a href="http://get.communityserver.com/download/" mce_href="http://get.communityserver.com/download/"&gt;get.communityserver.com&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;At lunarmedia.com we simply link to forum.lunarmedia.com/login.aspx, logout.aspx, etc. to take advantage of Community Server's membership flow.&lt;/p&gt;

&lt;p&gt;P.S. the domain (lunarmedia.com) is only used as an example. &lt;br&gt;&lt;/p&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123139" width="1" height="1"&gt;</description></item><item><title>Upgrading Community Server 2007 to CS2008</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/08/24/upgrading-cs2007-to-cs2008-blogs-default-theme.aspx</link><pubDate>Sun, 24 Aug 2008 10:49:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123123</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;When updating Community Server to the 2008 version several issues may arise. Using the accompanied Updater that Telligent has supplied helps a lot, but there are still idiosyncrasies to be aware of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is your email not work? Giving an error: "Iterator Failed. Type CommunityServer.MailRoom.Components.EmailJob.
Method SendQueuedEmailJob Reason Object reference not set to an
instance of an object.. etc.". &lt;b&gt;The Solution:&lt;/b&gt; Try and delete all waiting emails in the queue. Do a "DELETE FROM mg_EmailQueue" on the database. It seems that some "old" awaiting emails from the 2007 version was causing CS2008 email client to fail.&lt;/li&gt;
&lt;li&gt;The default blog theme may have reverted to CS's standard theme. Goto /controlpanel/BlogAdmin/Options/SkinOptions.aspx and change the default theme to your likings.&lt;/li&gt;
&lt;li&gt;Check that all custom controls are working with the new update. Some of the places that could reference a control are: the App_Browsers folder, Web.Config HttpHandlers and controls section, and CommunityServer.Config Tasks section.&lt;/li&gt;
&lt;li&gt;From earlier blog post about the subject: &lt;a href="http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/08/19/upgrading-cs2007-to-cs2008-dynamicstyle-aspx-in-ie6.aspx" mce_href="http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/08/19/upgrading-cs2007-to-cs2008-dynamicstyle-aspx-in-ie6.aspx"&gt;Upgrading CS2007 to CS2008 - DynamicStyle.aspx in IE6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;From earlier blog post about the subject: &lt;a href="http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/08/15/upgrading-cs2007-to-cs2008-timeout-expired.aspx" mce_href="http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/08/15/upgrading-cs2007-to-cs2008-timeout-expired.aspx"&gt;Upgrading CS2007 to CS2008 - Timeout expired&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Good luck upgrading :)
&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123123" width="1" height="1"&gt;</description></item><item><title>Upgrading CS2007 to CS2008 - DynamicStyle.aspx in IE6</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/08/19/upgrading-cs2007-to-cs2008-dynamicstyle-aspx-in-ie6.aspx</link><pubDate>Tue, 19 Aug 2008 11:14:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123122</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When upgrading a website it is usual to setup a test site of the new version. In doing so, it is important to get all IIS settings moved aswell. When Http Compression (IIS6.0) is enabled at a website running Community Server it is crucial that you disable compression on the DynamicStyle.aspx file located in your Themes/[your theme]/style/ folder. An error in IE6 will make your website display wrongly when you click using the main navigation menu. It will only display correctly (and load the DynamicStyle.aspx file) when you do a hard ctrl+F5 refresh.&lt;/p&gt;&lt;p&gt;To disable HTTP compression on a single file, i've made the following simple batch file: &lt;a href="http://lunarmedia.com/files/folders/123121/download.aspx" mce_href="http://lunarmedia.com/files/folders/123121/download.aspx"&gt;IIS6 HTTP compression on single file.zip&lt;/a&gt; Remember to edit the file and change the "[Identifier number]" part to your website identifier number (can be found in IIS Manager when listing all sites).&lt;br&gt;&lt;/p&gt;&lt;p&gt;For general information about IIS6 Compression check my earlier post: &lt;a href="http://lunarmedia.com/blogs/lunarmedia_blog/archive/2007/11/05/iis6-http-compression-quick-and-easy-four-steps.aspx" mce_href="http://lunarmedia.com/blogs/lunarmedia_blog/archive/2007/11/05/iis6-http-compression-quick-and-easy-four-steps.aspx"&gt;IIS6 Http Compression in four easy steps&lt;/a&gt; &lt;br&gt;&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123122" width="1" height="1"&gt;</description><category domain="http://lunarmedia.com/blogs/lunarmedia_blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Upgrading CS2007 to CS2008 - Timeout expired</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/08/15/upgrading-cs2007-to-cs2008-timeout-expired.aspx</link><pubDate>Fri, 15 Aug 2008 10:28:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123119</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;If you are updating a Community Server 2007 to CS 2008 either manually or using the Updater Telligent has supplied and getting the "Timeout expired" error when posting a new topic/reply in the forums, it is most likely because the CS license hasn't been updated! A solution: be sure to check at: /controlpanel/tools/ManageLicenses.aspx and update your license with a CS2008 version.&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123119" width="1" height="1"&gt;</description><category domain="http://lunarmedia.com/blogs/lunarmedia_blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>JavascriptCompressor.com upgraded</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/06/24/javascriptcompressor-com-upgraded.aspx</link><pubDate>Tue, 24 Jun 2008 08:13:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123096</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The increasingly visited website &lt;a href="http://javascriptcompressor.com/" mce_href="http://javascriptcompressor.com/"&gt;javascriptcompressor.com&lt;/a&gt; has been updated with the latest compression algorithm from Dean Edwards, now version 3.0. In addition, a forum for javascript discussion has been setup.&lt;/p&gt;
&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123096" width="1" height="1"&gt;</description></item><item><title>Translatorbay Online</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/06/24/translatorbay-online.aspx</link><pubDate>Tue, 24 Jun 2008 08:12:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123095</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;The first initiative of Lunarmedia's move into the &lt;a href="http://translatorbay.com" title="Translation business" mce_href="http://translatorbay.com"&gt;translation business&lt;/a&gt; is complete. &lt;a href="http://translatorbay.com" mce_href="http://translatorbay.com"&gt;Translatorbay &lt;/a&gt;is
online. It will feature tools and discussions relevant for translators.
It will be a supporting website of the parent site Lingbay, which is in
the first phase of development. Lingbay will be an auction house for &lt;a href="http://translatorbay.com" mce_href="http://translatorbay.com"&gt;translation jobs&lt;/a&gt; that freelance translators can bid on. It will be open and registration will be free.
&lt;/p&gt;

&lt;p&gt;A note on &lt;a href="http://divxstation.com" mce_href="http://divxstation.com"&gt;Divxstation&lt;/a&gt;, it has been archived due to old age. All activity has moved to &lt;a href="http://subscene.com" mce_href="http://subscene.com"&gt;Subscene&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
Other news: A &lt;a href="http://graffiticms.com" mce_href="http://graffiticms.com"&gt;Graffiticms &lt;/a&gt;based website has been setup for a new Danish Sail Club - &lt;a href="http://skth.dk" mce_href="http://skth.dk"&gt;Sejlklubben Teglholmen&lt;/a&gt;. They still have available &lt;a href="http://skth.dk/sejlklubben-teglholmen/a-shorter-post" mce_href="http://skth.dk/sejlklubben-teglholmen/a-shorter-post"&gt;bådpladser ved Teglholmen&lt;/a&gt;.
&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123095" width="1" height="1"&gt;</description></item><item><title>Firefox 3.0 - im loving it!</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/06/10/firefox-3-0-im-loving-it.aspx</link><pubDate>Tue, 10 Jun 2008 12:00:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123080</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;So today I upgraded to &lt;a href="http://www.mozilla.com/en-US/firefox/all-rc.html" mce_href="http://www.mozilla.com/en-US/firefox/all-rc.html"&gt;Firefox 3.0 RC2&lt;/a&gt; - and what a wonderful idea that was. For anyone who is using Firefox 2.x and believes that it has become a bit bulky - shift to Firefox 3.0, it is fast, feels light, and rock solid!&lt;/p&gt;&lt;p&gt;In combination, I would also suggest that you tune in on &lt;a href="http://friskyradio.com/" mce_href="http://friskyradio.com/"&gt;FriskyRadio&lt;/a&gt; - the best technolounge in town!&lt;br&gt;&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123080" width="1" height="1"&gt;</description></item><item><title>CommunityServer - Enabling Language Selection for Anonymous Users</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/05/27/communityserver-enabling-language-selection-for-anonymous-users.aspx</link><pubDate>Tue, 27 May 2008 14:22:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123061</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;I stumbled upon this great &lt;a href="http://dev.communityserver.com/forums/p/497912/619213.aspx#619213" mce_href="http://dev.communityserver.com/forums/p/497912/619213.aspx#619213"&gt;forum discussion&lt;/a&gt; today. It details different solutions to allowing anonymous users the option of choosing a website language - without being logged in. The best suggestion is to add new users to the Community Server database (setting "IsAnonymous" to true) one for each country, eg. AnonSpanish, AnonEnglish, etc. Then, adding the following code when the user selects a new language:&lt;/p&gt;
&lt;pre&gt;if (CSContext.Current.User.IsAnonymous)&lt;br&gt;            {&lt;br&gt;                HttpCookie formsAuthCookie; &lt;br&gt;&lt;br&gt;                if (CSContext.Current.User.Username.Equals("AnonymousSpanish"))&lt;br&gt;                {&lt;br&gt;                    formsAuthCookie = FormsAuthentication.GetAuthCookie("Anonymous", false);&lt;br&gt;                }&lt;br&gt;                else&lt;br&gt;                {&lt;br&gt;                    formsAuthCookie = FormsAuthentication.GetAuthCookie("AnonymousSpanish", false);&lt;br&gt;                }&lt;br&gt;&lt;br&gt;                UserCookie userCookie = CSContext.Current.User.GetUserCookie();&lt;br&gt;                userCookie.WriteCookie(formsAuthCookie, 365, false);
            }&lt;br&gt;}&amp;nbsp;&lt;/pre&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123061" width="1" height="1"&gt;</description></item><item><title>CommunityServer - Linking to an Url from SiteUrls.Config</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/02/12/communityserver-linking-to-an-url-from-siteurls-config.aspx</link><pubDate>Tue, 12 Feb 2008 13:55:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123036</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The first thought would be to use the CSControls:LinkData (or CSLinkData) control and specify the resourceName. The second logical solution would be using the ResourceControl defining that it should act as a link. None of this works.&lt;/p&gt;

&lt;p&gt;The solution is to use the SiteUrl control and specify the UrlName:&lt;/p&gt;

&lt;pre&gt;&amp;lt;CSControl:SiteUrl UrlName="upload" Text="" runat="server" /&amp;gt;&lt;/pre&gt;
&lt;p&gt;The example above refers to the SiteUrls/locations/location/url node in SiteUrls.Config with the name "upload".&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123036" width="1" height="1"&gt;</description></item><item><title>Running a stored procedure from Windows Task Scheduler</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/02/04/running-a-stored-procedure-from-windows-task-scheduler.aspx</link><pubDate>Mon, 04 Feb 2008 11:35:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123033</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>1</slash:comments><description>
&lt;p&gt;Rightclick in the Scheduled Tasks area and choose "New" -&amp;gt; "Scheduled Task". Then in the run field add the following:&lt;br&gt;&lt;/p&gt;
&lt;pre class="codesample"&gt;sqlcmd -S .\SQLExpress -i c:\expressmaint.sql&lt;/pre&gt;
&lt;p&gt;
In the sql file you can simply write: EXEC dbname.dbo.sp_AnyStoredProcedure.&lt;/p&gt;
&lt;p&gt;Why don't just use SqlAgent you may ask. In SqlExpress the SqlAgent has been feature cut - because express is free.&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123033" width="1" height="1"&gt;</description></item><item><title>FREETEXTTABLE not finding short words</title><link>http://lunarmedia.com/blogs/lunarmedia_blog/archive/2008/01/23/freetexttable-not-finding-short-words.aspx</link><pubDate>Wed, 23 Jan 2008 15:37:00 GMT</pubDate><guid isPermaLink="false">8e740287-7179-42ca-83bf-5c4af18dab29:123030</guid><dc:creator>Anders Vindberg</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When using Full-Text Indexing in MS-Sql you may find that search results for "the" or "saw" doesn't return any results. To resolve the issue, go to "properties" of the Full-Text index select "Columns" and change the "Language for Word Breaker" setting to "Neutral". If "English" is selected, then common English words are not indexed.&lt;br&gt;&lt;/p&gt;&lt;img src="http://lunarmedia.com/aggbug.aspx?PostID=123030" width="1" height="1"&gt;</description></item></channel></rss>