<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://thomasfreudenberg.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>Thomas Freudenberg : Community Server</title><link>http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx</link><description>Tags: Community Server</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>.NET-Forum.de launched</title><link>http://thomasfreudenberg.com/blog/archive/2008/01/29/net-forum-de-launched.aspx</link><pubDate>Tue, 29 Jan 2008 18:21:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:57736</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;a href="http://dotnet-forum.de/"&gt;&lt;img src="http://thomasfreudenberg.com/images/dotnet-forum.gif" alt=".NET Forum" width="306" align="right" border="0" height="39" hspace="8" /&gt;&lt;/a&gt;A couple of days ago &lt;a href="http://blog.jan-welker.de/" rel="friend"&gt;Jan Welker&lt;/a&gt; launched a new German .NET related community site, &lt;a href="http://dotnet-forum.de/"&gt;.NET-Forum.de&lt;/a&gt;. I didn&amp;#39;t expect the developsphere to require just another site, but there are already 51 users registered, even though the site wasn&amp;#39;t advertised anywhere except the &lt;a href="http://dotnet-snippets.de"&gt;dotnet-snippets.de&lt;/a&gt; newsletter.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jan set up Community Server 2007.1 to drive the site (Did you know that .NET related non-profit communities may receive &lt;a href="http://docs.communityserver.org/kb/article.aspx/160/i-am-a-net-user-group-or-not-for-profit-net-community-site-do-you-have-discounts-available/"&gt;a free license&lt;/a&gt;?) I try to support Jan whenever he experiences issues with CS or has a configuration question. So for me it&amp;#39;s an &lt;span&gt;appreciated opportunity&lt;/span&gt; to get to learn CS&amp;#39;s forum capabilities (Till now I only used the blogging part.) &lt;/p&gt;&lt;p&gt;I wish Jan success, and maybe this post will lead some more people to his site. &lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=57736" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community/default.aspx">Community</category></item><item><title>nrw07 Slides</title><link>http://thomasfreudenberg.com/blog/archive/2007/09/10/nrw07-slides.aspx</link><pubDate>Mon, 10 Sep 2007 16:00:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:39454</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=39454</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=39454</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/09/10/nrw07-slides.aspx#comments</comments><description>&lt;p&gt;In &lt;a href="http://thomasfreudenberg.com/blog/archive/2007/08/30/nrw07-follow-up.aspx"&gt;my nrw07 talk&lt;/a&gt; I promised that I would publish my slides. Originally they´re German, so I translated them first (no, it did &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; take me two weeks to translate them &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;). Here they are:&lt;/p&gt;&lt;p&gt;&lt;a href="/files/folders/39452/download.aspx"&gt;&lt;img src="/utility/filethumbnails/pptx-Small.gif" border="0" align="absmiddle" /&gt; CustomizingCommunityServer - en.pptx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=39454" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/nrw07/default.aspx">nrw07</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Conference/default.aspx">Conference</category></item><item><title>Deflowered twice on one day at nrw07</title><link>http://thomasfreudenberg.com/blog/archive/2007/08/30/nrw07-follow-up.aspx</link><pubDate>Thu, 30 Aug 2007 18:28:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:38361</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=38361</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=38361</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/08/30/nrw07-follow-up.aspx#comments</comments><description>&lt;p&gt;&lt;img src="http://thomasfreudenberg.com/images/speakernrw07.jpg" alt="nrw07 speaker" align="left" border="0" height="100" hspace="4" width="100" /&gt; Last Friday the &lt;a href="http://nrw07.de/"&gt;nrw07&lt;/a&gt; took place in Wuppertal, the biggest community
conference in North Rhine-Westphalia. About &lt;b&gt;100 attendees&lt;/b&gt; including
the 22 speakers! The Diebels brewery contributes a couple of beer
crates, and Subway served lots of sandwiches for lunch.
&lt;/p&gt;&lt;p&gt;
And I was deflowered twice on that day.
&lt;/p&gt;&lt;p&gt;
&lt;a href="http://thomasfreudenberg.com/photos/images/38355/original.aspx" target="_blank"&gt;&lt;img src="http://thomasfreudenberg.com/photos/images/38355/150x200.aspx" alt="me speaking" align="right" border="0" hspace="4" /&gt;&lt;/a&gt;First, it was my very first talk! I gave a Community Server
presentation a couple of month ago at our local .NET UserGroup, and
the other guys suggested that I should repeat that at the nrw07.
Unfortunately, I didn´t object enough.&lt;/p&gt;&lt;p&gt;
When I sat in the hotel lobby with some other speakers the night
before nrw07, I started getting nervous, but they managed to calm me
down (or was it the beers we had?). The next day was fine, my talk was one of the first. It ran pretty well (as far as I am
concerned). Of course we experienced the usual technical difficulties
such as a projector, whose picture was twice as large as the screen and &lt;b&gt;not&lt;/b&gt; resizable. Although I got the second largest room in the facility,
there were only 7 attendees. Seems to me as Community Server is not of
interest for everyone. The good thing about that is that those folks
already knew CS, so I didn´t have to start at square one, but instead
dive right into the technical stuff. The time flew, I ran over about
10 minutes and had still enough material for another hour. Nevertheless my talk can not have been that bad because the audience asked the right questions afterwards. I &lt;strike&gt;hope&lt;/strike&gt;think that´s a good sign. 
&lt;/p&gt;&lt;p&gt;
&lt;a href="http://thomasfreudenberg.com/photos/images/38357/original.aspx" target="_blank"&gt;&lt;img src="http://thomasfreudenberg.com/photos/images/38357/400x267.aspx" alt="all speakers" align="left" border="0" hspace="4" /&gt;&lt;/a&gt;My second premiere happened later that night, when &lt;a href="http://www.craigmurphy.com/" rel="acquaintance"&gt;Craig Murphy&lt;/a&gt;
interviewed me for a podcast (not aired yet). At that point in time I
already had a couple of beers, so it went quite smooth. It´s
self-evident that we talked much about Community Server. Because I
mentioned Twitter in my talk, Craig took me up on that, and somehow we
drifted into social networking, a topic I´m quite interested in. Even
when the podcast was over, we continued the discussion.
&lt;/p&gt;&lt;p&gt;
To sum it up, it was a great event, where I met many smart people.
Many thanks to the orga team, &lt;a href="http://www.stephanon.net/" rel="friend"&gt;Stephan Oetzel&lt;/a&gt; and &lt;a href="http://www.lennybacon.com/" rel="friend"&gt;Daniel Fisher&lt;/a&gt;!
&lt;/p&gt;&lt;p&gt;
And now that I lost my virginity, I´m looking forward to give a talk
again next year (assumed they let me on stage ever again)
&lt;/p&gt;&lt;p&gt;
Here are some other speakers and attendees blogging about nrw07:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.craigmurphy.com/blog/?p=664"&gt;Craig Murphy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sturmnet.org/blog/archives/2007/08/27/great-time-at-nrw-07/"&gt;Oliver Sturm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.solinske.de/PermaLink,guid,4dd2f795-7701-424a-90ac-e7e14f66e860.aspx"&gt;Frank Solinske&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.dotnet-braunschweig.de/Lars/PermaLink,guid,0133f6d7-7c8d-4bd7-ad2a-144c36f0cff5.aspx"&gt;Lars Keller&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.veloursnebel.de/PermaLink,guid,ae8d952c-07ae-460e-a5eb-0e67448d4c19.aspx"&gt;Kai Gloth&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.dotnet-braunschweig.de/Karim/PermaLink,guid,254f3b98-e748-483c-97f2-d40995c44cca.aspx"&gt;Karim El Jed&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I met some more nice guys, who didn´t blog about this event. Nevertheless I´d like to send them my regards because we had such a good time and talks: &lt;a href="http://dawsonsgeek.net/"&gt;Andreas Hoffmann&lt;/a&gt;, Christian Schütz, &lt;a href="http://www.prodot.de/"&gt;Mischa Hüschen&lt;/a&gt;, &lt;a href="http://www.prodot.de/"&gt;Pascal Kremmers&lt;/a&gt;, Constantin Klein, &lt;a href="http://www.gnoth.net/"&gt;Marcel Gnoth&lt;/a&gt;, and &lt;a href="http://www.marcelfranke.com/"&gt;Marcel Franke&lt;/a&gt;. Sorry if I forgot one, there were so many faces new to me. When you see me next time, just stop by and treat me to a beer...&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Craig uploaded a video he took in the Gaming Lounge. HP placed several laptops so we could play some tracks of NFS:Most Wanted and NSF:Carbon:&lt;br /&gt; &lt;a href="http://soapbox.msn.com/video.aspx?vid=f36786ce-8a7b-4a7e-affb-3e740d89d631" target="_new" title="NRW07 - let the games begin!"&gt;&lt;img src="http://a1596.g.akamai.net/f/1596/23830/v0001/msnuuv1.download.akamai.com/23830/thumbs/prod/76/c7/97/35f9be06-62ee-43a9-8e94-d38a5b97c776.jpg" alt="NRW07 - let the games begin!" border="0" height="84" width="112" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=38361" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/User+Group/default.aspx">User Group</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community/default.aspx">Community</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/nrw07/default.aspx">nrw07</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Conference/default.aspx">Conference</category></item><item><title>CommunityServer MVPs CSModules Pack for CS2007 released</title><link>http://thomasfreudenberg.com/blog/archive/2007/05/14/communityserver-mvps-csmodules-pack-for-cs2007-released.aspx</link><pubDate>Mon, 14 May 2007 15:56:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:29098</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=29098</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=29098</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/05/14/communityserver-mvps-csmodules-pack-for-cs2007-released.aspx#comments</comments><description>&lt;p&gt;Yesterday a new version of the CSMVPs CSModules package was released. Except the new LinkManager (which enables you to add customizable attributes to links in your posts automatically) it´s mainly a technical refresh targeting CommunityServer 2007 (SP1).&lt;/p&gt;&lt;p&gt;Read the full announcement is available on the &lt;a href="http://csmvps.com/blogs/news/archive/2007/05/13/community-server-mvps-cinnabar-csmodule-package.aspx"&gt;CS MVP site&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=29098" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Akismet/default.aspx">Akismet</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/CSMVPs/default.aspx">CSMVPs</category></item><item><title>CAPTCHA for CommunityServer 2007</title><link>http://thomasfreudenberg.com/blog/archive/2007/04/29/captcha-for-communityserver-2007.aspx</link><pubDate>Sun, 29 Apr 2007 13:50:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:28232</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=28232</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=28232</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/04/29/captcha-for-communityserver-2007.aspx#comments</comments><description>&lt;p&gt;Brendan Tompkins released &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2007/04/27/captcha-for-community-server-2007.aspx"&gt;CAPTCHA for CommunityServer 2007&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I&amp;#39;m happy to announce that CodeBetter.Com is carrying on the legacy of CAPTCHA 
for &lt;a href="http://codebetter.com/controlpanel/blogs/www.communityserver.org"&gt;Community 
Server&lt;/a&gt;.&amp;nbsp; CAPTCHA for CS2007 is the next generation of &lt;a href="http://codebetter.com/controlpanel/blogs/www.dbvt.com"&gt;CS Guru Dave 
Burke&amp;#39;s&lt;/a&gt; most excellent &lt;a href="http://dbvt.com/files/folders/addons/entry5198.aspx"&gt;CAPTCHA control for 
Community Server 2.1&lt;/a&gt;.&amp;nbsp; &lt;a href="http://weblogs.asp.net/scottgu/archive/2005/12/21/asp-net-2-0-control-adapter-architecture.aspx"&gt;This 
version is implemented as a Control Adapter&lt;/a&gt; which allows CAPTCHA to be added 
to Community Server site-wide without touching any ASPX or ASCX markup code.&lt;/p&gt;&lt;a href="http://codebetter.com/files/folders/community_server_add-ons/entry162534.aspx"&gt;You 
can get the dll and source code here.&lt;/a&gt;&lt;/blockquote&gt;&lt;p&gt;The installation is pretty easy since Brendan leverages the same technique as I did for my &lt;a href="http://thomasfreudenberg.com/blog/archive/2007/04/24/cocomment-for-cs-2007-updated.aspx"&gt;CS2007 coComment support&lt;/a&gt;: by using ControlAdapters not a single page or control must be touched.&lt;/p&gt;&lt;p&gt;In the past I always hesitated to use &lt;a href="http://en.wikipedia.org/wiki/CAPTCHA"&gt;CAPTCHA&lt;/a&gt; on my blog because it´s an additional obstacle a commenter must overcome. Adding this hurdle seemed like a capitulation. But because spam has taken the upper hand over all comments I get, and CAPTCHAs are commonly used everywhere so the regular visitor is used to them, I´ll give it try and add Brendan´s CAPTCHA to my blog.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=28232" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Site+news/default.aspx">Site news</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>coComment for CS 2007 updated</title><link>http://thomasfreudenberg.com/blog/archive/2007/04/24/cocomment-for-cs-2007-updated.aspx</link><pubDate>Tue, 24 Apr 2007 17:09:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:28125</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=28125</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=28125</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/04/24/cocomment-for-cs-2007-updated.aspx#comments</comments><description>
&lt;p&gt;Every day you can learn something new. Today it was &lt;a href="http://scottwater.com/" rel="acquaintance"&gt;Scott&lt;/a&gt; who taught me &lt;a href="http://weblogs.asp.net/scottgu/archive/2005/12/21/433692.aspx"&gt;ControlAdapter&lt;/a&gt;s after he read my post about &lt;a href="http://thomasfreudenberg.com/blog/archive/2007/04/23/cocomment-support-for-cs-2007.aspx"&gt;coComment with CommunityServer 2007&lt;/a&gt;. You know, ControlAdapters are not only good for tweaking CSS.&lt;/p&gt;
&lt;p&gt;My original solution was a replacement for the WeblogPostCommentForm, i.e. for every blog theme you had to edit its &lt;i&gt;post.aspx&lt;/i&gt;, register my new control and replace the original control.&lt;/p&gt;
&lt;p&gt;ControlAdapters however give you the power to inject your code into any desired existing control. In a central file you specify which controls you want to customize, and that&amp;#39;s it. No editing of any pages or controls is required.&lt;/p&gt;
&lt;p&gt;So I took the chance and transformed my custom comment form into a ControlAdapter. In fact, it&amp;#39;s as easy as writing a control. Here&amp;#39;s the simplified code, just in case you&amp;#39;re interested:&lt;br /&gt;&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&lt;span style="color:#0000FF"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF"&gt;class&lt;/span&gt; WeblogPostCommentFormAdapter : ControlAdapter
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;protected&lt;/span&gt; &lt;span style="color:#0000FF"&gt;override&lt;/span&gt; &lt;span style="color:#0000FF"&gt;void&lt;/span&gt; OnPreRender(EventArgs e)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;base&lt;/span&gt;.OnPreRender(e);

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WeblogPostCommentForm commentForm = &lt;span style="color:#0000FF"&gt;base&lt;/span&gt;.Control &lt;span style="color:#0000FF"&gt;as&lt;/span&gt; WeblogPostCommentForm;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;if&lt;/span&gt; (commentForm != &lt;span style="color:#0000FF"&gt;null&lt;/span&gt;)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;string&lt;/span&gt; coCommentScript = GetCoCommentScript(commentForm);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(coCommentScript))
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CSControlUtility.Instance().RegisterStartupScript(&lt;span style="color:#0000FF"&gt;base&lt;/span&gt;.Control, 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;typeof&lt;/span&gt; (WeblogPostCommentForm), &amp;quot;&lt;span style="color:#8B0000"&gt;cocomment&lt;/span&gt;&amp;quot;, coCommentScript, &lt;span style="color:#0000FF"&gt;false&lt;/span&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; &lt;span style="color:#0000FF"&gt;private&lt;/span&gt; &lt;span style="color:#0000FF"&gt;static&lt;/span&gt; &lt;span style="color:#0000FF"&gt;string&lt;/span&gt; GetCoCommentScript(WeblogPostCommentForm commentForm)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#008000"&gt;// just boring stuff which creates the javascript code to make coComment happy&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
&lt;/pre&gt;&lt;/div&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Just drop the attached assembly to your &lt;span style="font-style:italic;"&gt;~/bin&lt;/span&gt; folder and add following line to the &lt;span style="font-style:italic;"&gt;controlAdapters&lt;/span&gt; section in &lt;span style="font-style:italic;"&gt;~/App_Browsers/default.browser&lt;/span&gt;:&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;adapter&lt;/span&gt; &lt;span style="color:#FF0000"&gt;controlType&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CommunityServer.Blogs.Controls.WeblogPostCommentForm&amp;quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;adapterType&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;ThomasFreudenberg.CS2007.WeblogPostCommentFormAdapter, ThomasFreudenberg.CS2007&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;That&amp;#39;s all, without further editing of any files&lt;sup&gt;1&lt;/sup&gt; coComment support is enabled for all blog themes automagically.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; unless of course if you&amp;#39;re already using the assembly I published yesterday; in this case revert all changes done to your &lt;span style="font-style:italic;"&gt;post.aspx&lt;/span&gt;&amp;#39;&lt;/p&gt;
&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=28125" width="1" height="1"&gt;</description><enclosure url="http://thomasfreudenberg.com/blog/attachment/28125.ashx" length="303104" type="application/x-msdownload" /><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/coComment/default.aspx">coComment</category></item><item><title>coComment support for CS 2007</title><link>http://thomasfreudenberg.com/blog/archive/2007/04/23/cocomment-support-for-cs-2007.aspx</link><pubDate>Mon, 23 Apr 2007 18:34:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:28102</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=28102</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=28102</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/04/23/cocomment-support-for-cs-2007.aspx#comments</comments><description>
&lt;p&gt;If you are one of my two regular readers, you may have noticed that I published &lt;a href="http://thomasfreudenberg.com/blog/archive/tags/coComment/default.aspx"&gt;many posts&lt;/a&gt; regarding &lt;a href="http://www.cocomment.com/"&gt;coComment&lt;/a&gt;. In fact, I published instructions to integrate coComment in original &lt;a href="http://thomasfreudenberg.com/blog/archive/2006/02/09/adding-coComment-support-to-CommunityServer.aspx"&gt;CommunityServer&lt;/a&gt; and &lt;a href="http://thomasfreudenberg.com/blog/archive/2006/09/19/Updated-coComment-support-for-Community-Server-2.1.aspx"&gt;CS2.1SP1&lt;/a&gt; (for CS2.0 and CS2.1 &lt;a href="http://nayyeri.net/" rel="friend"&gt;Keyvan&lt;/a&gt; was faster than me &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;)&lt;/p&gt;

&lt;p&gt;(if you think I write so much about coComment is because I love it so much, you totally missed the point of my blog)&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Anyway, if you follow the old instructions you&amp;#39;ll see that there&amp;#39;s bunch of script code you have to add to your blog theme. Unfortunately, that solution does not work anymore with CS 2007, because the controls in the comment form are wrapped in a new Chameleon control. I did not see a chance to access the ids of the contained controls and continue the old solution with my limited ASP.NET knowledge.&lt;/p&gt;

&lt;p&gt;Instead, I developed another solution. I simply inherited a new control from &lt;em&gt;WeblogPostCommentForm&lt;/em&gt;, where I have all access to the contained elements. And up to now I didn&amp;#39;t know how easy it is to &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerclientscriptblock.aspx"&gt;add some script&lt;/a&gt; in your code to be added to the rendered HTML&lt;/p&gt;

&lt;p&gt;Long story short, here&amp;#39;s my solution for coComment support in CS2007:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Drop the attached &lt;i&gt;ThomasFreudenberg.CS2007.dll&lt;/i&gt; into your &lt;i&gt;~/bin&lt;/i&gt; folder.&lt;/li&gt;

&lt;li&gt;Open &lt;i&gt;post.aspx&lt;/i&gt; of your desired blog theme&lt;/li&gt;

&lt;ol&gt;
&lt;li&gt;Add following line right after the imports:&lt;br /&gt;&lt;pre style="overflow: auto;"&gt;&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%@ Register TagPrefix=&amp;quot;TFr&amp;quot; Namespace=&amp;quot;ThomasFreudenberg.CS2007&amp;quot;
&amp;#160;&amp;#160;&amp;#160; Assembly=&amp;quot;ThomasFreudenberg.CS2007&amp;quot; %&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;

&lt;li&gt;Replace &lt;i&gt;&amp;lt;CSBlog:WeblogPostCommentForm â€¦&lt;/i&gt; with &lt;i&gt;&amp;lt;&lt;b&gt;TFr&lt;/b&gt;:WeblogPostCommentForm â€¦&lt;/i&gt;&lt;/li&gt;

&lt;li&gt;and &lt;i&gt;&amp;lt;/CSBlog:WeblogPostCommentForm&amp;gt;&lt;/i&gt; with &lt;i&gt;&amp;lt;/&lt;b&gt;TFr&lt;/b&gt;:WeblogPostCommentForm&amp;gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;

&lt;p&gt;In fact, for me as a non-web developer that approach seems much more natural to me than adding fancy instructions in the web control.&lt;/p&gt;
&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=28102" width="1" height="1"&gt;</description><enclosure url="http://thomasfreudenberg.com/blog/attachment/28102.ashx" length="303104" type="application/x-msdownload" /><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Development/default.aspx">Development</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/coComment/default.aspx">coComment</category></item><item><title>ThomasFreudenberg.com Upgraded to CommunityServer 2007</title><link>http://thomasfreudenberg.com/blog/archive/2007/04/22/thomasfreudenberg-com-upgraded-to-communityserver-2007.aspx</link><pubDate>Sun, 22 Apr 2007 16:14:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:28080</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=28080</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=28080</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/04/22/thomasfreudenberg-com-upgraded-to-communityserver-2007.aspx#comments</comments><description>This site has been upgraded to CommunityServer 2007 (I guess visitors to my site do know CommunityServer, and they already read the &lt;a href="http://communityserver.org/forums/t/486717.aspx"&gt;announcements&lt;/a&gt;.) Of all all CS MVPs, I am again late to the party &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-5.gif" alt="Wink" /&gt;

&lt;p&gt;The upgrade was pretty easy. I spent about 2 hours on it, mainly because of my limited upload bandwidth. However, I had to create a new CS2007 package, because all the cool
extensions I used for my old installation are not yet released for
CS2007. But don´t worry, the CS MVPs are busy upgrading the CSMVP
CSModule package.&lt;/p&gt;&lt;p&gt;I started to create my own theme a couple of weeks ago, but because of lack of time and CSS experience, itâ€™s not finished yet. Therefore my site still looks the same as before.&lt;/p&gt;&lt;p&gt;BTW, Starting with CS 2007 thereÂ´s a new distributable called â€œOne-Click Installâ€. This package is a kinda XCOPY distribution, using &lt;a href="http://www.asp.net/Projects/Cassini/Download/"&gt;Cassini&lt;/a&gt; and a file-based database. It&amp;#39;s great for developers because you neither need to configure IIS nor the SQL Server.&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=28080" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Site+news/default.aspx">Site news</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>FeedBurner Site Statistics for CommunityServer</title><link>http://thomasfreudenberg.com/blog/archive/2007/01/04/feedburner-site-statistics-for-communityserver.aspx</link><pubDate>Thu, 04 Jan 2007 19:27:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:18930</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=18930</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=18930</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2007/01/04/feedburner-site-statistics-for-communityserver.aspx#comments</comments><description>
&lt;p&gt;Today &lt;a href="http://nick.typepad.com/blog/2007/01/feedburner_site.html"&gt;Nick Bradbury wrote&lt;/a&gt;:&lt;/p&gt;
 
&lt;blockquote&gt; 
&lt;p&gt;The statistics packages offered by most popular blogging services are either limited or non-existent, leaving many bloggers&amp;nbsp;struggling to get good information on traffic to&amp;nbsp;their blog.&amp;nbsp; Those of us who use FeedBurner have long had good feed-related statistics, but we&amp;#39;ve had to rely on other services to get information on blog traffic.&lt;/p&gt;
 
&lt;p&gt;In my case, I&amp;#39;ve been using &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;&amp;nbsp;for blog stats, and while it&amp;#39;s a good service I&amp;#39;ve found it awkward to have&amp;nbsp;my feed stats and blog stats in different places.&amp;nbsp; So when I was offered an early look at FeedBurner&amp;#39;s &lt;a href="http://blogs.feedburner.com/feedburner/archives/2007/01/a_360_degree_view_of_audience_1.php"&gt;site statistics service&lt;/a&gt;&amp;nbsp;(announced earlier today), I jumped at the chance.  &lt;/p&gt;

&lt;p&gt;I&amp;#39;ve been using FeedBurner&amp;#39;s site stats for several days now, and overall they&amp;#39;ve done a great job of providing a lot of information in a very friendly way.&amp;nbsp; Now in addition to seeing information about my feed&amp;nbsp;subscribers, I can also see things like:  &lt;/p&gt;

&lt;ul&gt; 
&lt;li&gt;Which searches lead people to my blog  &lt;/li&gt;

&lt;li&gt;Which external links are bringing visitors to my blog  &lt;/li&gt;

&lt;li&gt;Which pages are being viewed the most  &lt;/li&gt;

&lt;li&gt;What browsers, operating systems and screen resolutions my visitors are using&lt;/li&gt;
&lt;/ul&gt;
 
&lt;p&gt;In other words, I can see the sort of information you&amp;#39;d expect from a site statistics service, except that it&amp;#39;s integrated with my feed stats.&lt;/p&gt;
&lt;/blockquote&gt;
 
&lt;p&gt;I share the same history, been using Google Analytics and FeedBurner&amp;#39;s Feed Stats for several month. Though Analytics is a nice service, it&amp;#39;s mainly targeted at marketing. Too much for me simple guy, how only wants to know if the number of his readers becomes two-digit.  &lt;/p&gt;

&lt;p&gt;However, as Nick said FeedBurner announced their &lt;b&gt;site&lt;/b&gt; statistic service, based on the acquired Blogbeat. I set it up for my blog two hours ago, and I already like it. Though not as sophisticated as Google Analytics, its interface is much cleaner and more appropriate for my simple needs.  &lt;/p&gt;

&lt;p&gt;But how do I come into play? Well, I was promoted a CommunityServer MVP more than two month ago, and since then I never gave back anything to the community.  &lt;/p&gt;

&lt;p&gt;Till now.  &lt;/p&gt;

&lt;p&gt;In the simplest case you only have to insert one line of HTML code to&amp;nbsp;the page displaying your blog posts. However, since FeedBurner Site Stats can track your entire site, I developed a more generic implementation for CommunityServer:  &lt;/p&gt;

&lt;ul&gt; 
&lt;li&gt;You only have to change one file (at least one per blog theme)  &lt;/li&gt;

&lt;li&gt;It distinguishes blog posts from other pages automatically  &lt;/li&gt;

&lt;li&gt;It disables tracking if you are an owner of a particular blog  &lt;/li&gt;

&lt;li&gt;last but not least enable site stats only if the blog uses FeedBurner Feed stats, i.e. FeedBurner is configured as the External Feed URL&lt;/li&gt;
&lt;/ul&gt;
 
&lt;p&gt;Anyway, here are the instructions. For each theme you have to make following changes in &lt;i&gt;LayoutTemplate.ascx&lt;/i&gt;:&lt;/p&gt;

&lt;p&gt;Add these two lines right after the &lt;i&gt;&amp;lt;%@ Register&lt;/i&gt; directives at the top:&lt;/p&gt;

&lt;p&gt;&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%@ Import Namespace=&amp;quot;CommunityServer.Components&amp;quot; %&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%@ Import Namespace=&amp;quot;CommunityServer.Blogs.Components&amp;quot; %&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
 
 
&lt;p&gt;Add following block right before the closing &lt;i&gt;&amp;lt;/body&amp;gt;&lt;/i&gt; tag:&lt;/p&gt;
&lt;p&gt;&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt; CSContext context = CSContext.Current; &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt; Weblog currentBlog = Weblogs.GetWeblog(context.ApplicationKey); &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt; if (!Globals.IsNullorEmpty(currentBlog.ExternalFeedUrl) &amp;amp;&amp;amp; currentBlog.ExternalFeedUrl.StartsWith(&amp;quot;http://feeds.feedburner.com/&amp;quot;)) { &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt; if (!context.IsAuthenticated || !Permissions.ValidatePermissions(currentBlog, Permission.Post, context.User)) { &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string feedBurnerAccount = currentBlog.ExternalFeedUrl.Substring(&amp;quot;http://feeds.feedburner.com/&amp;quot;.Length); &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BlogThreadQuery query = new BlogThreadQuery(); &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.PostID = context.PostID; &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (context.PostName != null) { &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.PostName = context.PostName; &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.IncludeCategories = false; &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.ReturnFullThread = false; &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.SectionID = currentBlog.SectionID; &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PostSet postSet = WeblogPosts.GetPosts(query, true); &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WeblogPost blogPost = postSet.ThreadStarter as WeblogPost; &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (blogPost != null) { &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;script&lt;/span&gt; &lt;span style="color:#FF0000"&gt;src&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;http://feeds.feedburner.com/~s/&amp;lt;%= feedBurnerAccount %&amp;gt;?i=&amp;lt;%= Globals.FullPath(BlogUrls.Instance().Post(blogPost)) %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;type&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;charset&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;script&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else { &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;script&lt;/span&gt; &lt;span style="color:#FF0000"&gt;src&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;http://feeds.feedburner.com/~s/&amp;lt;%= feedBurnerAccount %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;type&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;charset&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;script&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;&amp;nbsp;&amp;nbsp; } &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt; } &lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;That&amp;#39;s all.&lt;/p&gt;
&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=18930" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Site+news/default.aspx">Site news</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/FeedBurner/default.aspx">FeedBurner</category></item><item><title>Snap Preview</title><link>http://thomasfreudenberg.com/blog/archive/2006/11/24/snap-preview.aspx</link><pubDate>Fri, 24 Nov 2006 18:32:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:18285</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=18285</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=18285</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/11/24/snap-preview.aspx#comments</comments><description>
&lt;p&gt;I just want to announce that I added &lt;a href="http://www.snap.com/about/spa1.php" title="Snap Preview"&gt;Snap Preview&lt;/a&gt; to my blog. But unlike &lt;a href="http://scottwater.com/blog/archive/snappreview-images.aspx" title="SnapPreview Images" rel="friend"&gt;Scott&lt;/a&gt; and &lt;a href="http://joeriksson.com/archive/2006/11/19/improving-the-community-server-blog.aspx" title="Improving the Community Server Blog" rel="friend"&gt;J-O&lt;/a&gt;, I enabled them only for external links. IMHO it is useless for internal links.&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=18285" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Site+news/default.aspx">Site news</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Updated to CS2.1 SP1 and fixed an issue</title><link>http://thomasfreudenberg.com/blog/archive/2006/11/15/updated-to-cs2-1-sp1-and-fixed-an-issue.aspx</link><pubDate>Tue, 14 Nov 2006 21:17:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:18202</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=18202</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=18202</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/11/15/updated-to-cs2-1-sp1-and-fixed-an-issue.aspx#comments</comments><description>&lt;p&gt;I just upgraded my site to Community Server 2.1 SP1. I wouldn't post this if I did not encounter an issue, though you may experience this error only if you use &lt;a href="http://thomasfreudenberg.com/blog/archive/2006/09/19/Updated-coComment-support-for-Community-Server-2.1.aspx"&gt;my coComment support for CS&lt;/a&gt;. In fact, it occurs only if you use &lt;a href="http://code.communityserver.org/?path=CS+Tree%5cCS+2.1%5cBlogs%5cComponents%5cBlogThreadQuery.cs"&gt;BlogThreadQuery&lt;/a&gt; and set &lt;span style="font-style:italic;"&gt;ReturnFullThread&lt;/span&gt; to &lt;span style="font-style:italic;"&gt;false&lt;/span&gt;. In this case, the stored procedure &lt;span style="font-style:italic;"&gt;cs_weblog_PostSet&lt;/span&gt; does not return &lt;span style="font-style:italic;"&gt;ApplicationPostType&lt;/span&gt; for found posts, but the code tries to retrieve it from the &lt;span style="font-style:italic;"&gt;IDataReader&lt;/span&gt;.&lt;br&gt;&lt;/p&gt;&lt;p&gt;I attached a corrected version of that SP to this post. In fact, I only added &lt;span style="font-style:italic;"&gt;P.ApplicationPostType,&lt;/span&gt; in line 128.&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=18202" width="1" height="1"&gt;</description><enclosure url="http://thomasfreudenberg.com/blog/attachment/18202.ashx" length="12202" type="text/plain" /><category domain="http://thomasfreudenberg.com/blog/archive/tags/Site+news/default.aspx">Site news</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/coComment/default.aspx">coComment</category></item><item><title>Auto-attaching to aspnet_wp.exe</title><link>http://thomasfreudenberg.com/blog/archive/2006/11/13/Auto_2D00_attaching-to-aspnet_5F00_wp.exe.aspx</link><pubDate>Mon, 13 Nov 2006 19:58:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:18196</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=18196</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=18196</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/11/13/Auto_2D00_attaching-to-aspnet_5F00_wp.exe.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://bloggingabout.net/blogs/dennis/" rel="friend"&gt;Dennis van der Stelt&lt;/a&gt; asked me how to debug CSModules without using the Community Server SDK. Ok, so here&amp;#39;s how &lt;strong&gt;I&lt;/strong&gt; debug my modules.&lt;/p&gt;&lt;p&gt;First I set&amp;nbsp;the output directory of my projects to CS&amp;#39; bin folder. To debug the module, I attach the debugger manually to ASP.NET worker process, &lt;em&gt;aspnet_wp.exe&lt;/em&gt;. However, that&amp;#39;s not very ergonomic, because you have to go to &lt;em&gt;Debug&lt;/em&gt; &amp;rarr; &lt;em&gt;Attach To Process&lt;/em&gt;, select &lt;em&gt;aspnet_wp.exe&lt;/em&gt; (fortunately, processes are sorted by their name) and click &lt;em&gt;OK&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;However, after a while that gets really annoying.&lt;/p&gt; &lt;p&gt;Therefore I searched for a simpler solution, e.g. an add-in. I stumbled over&amp;nbsp;this nice and short macro, &lt;a href="http://weblogs.asp.net/rosherove/archive/2003/09/22/28532.aspx"&gt;published by Roy Osherove&lt;/a&gt; (who else? &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-5.gif" alt="Wink" /&gt;):&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This was on the win-tech-off-topic mailing list: &lt;/p&gt; &lt;p&gt;A macro to automatically attach to aspnet_wp.exe, written by &lt;a href="http://weblogs.asp.net/kdente/"&gt;&lt;font color="#0000ff"&gt;Kevin Dente&lt;/font&gt;&lt;/a&gt;&amp;nbsp;can save lots of clicking around time:&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;lt;quote&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&lt;font color="#000080" size="2"&gt; Sub AttachAspNet()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim process As EnvDTE.Process&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not (DTE.Debugger.DebuggedProcesses Is Nothing) Then&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; For Each process In DTE.Debugger.DebuggedProcesses&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (process.Name.IndexOf(&amp;quot;aspnet_wp.exe&amp;quot;) &amp;lt;&amp;gt; -1) Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit Sub&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; End If&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; Next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each process In DTE.Debugger.LocalProcesses&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; If (process.Name.IndexOf(&amp;quot;aspnet_wp.exe&amp;quot;) &amp;lt;&amp;gt; -1) Then&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; process.Attach()&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; Exit Sub&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; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;font size="2"&gt;Unfortunately, it&amp;#39;s not perfect. Process.Attach doesn&amp;#39;t let you &lt;br /&gt;specify the program type (CLR, Script, native, etc). I think that it &lt;br /&gt;uses whatever your last selection was in the UI. But don&amp;#39;t quote me &lt;br /&gt;on that, it&amp;#39;s been a while.&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff0000"&gt;&amp;lt;/quote&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I added the macro to a toolbar,&amp;nbsp;so debugging my modules is only&amp;nbsp;one click far. &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=18196" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Development/default.aspx">Development</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>New Features in CS 3.0</title><link>http://thomasfreudenberg.com/blog/archive/2006/10/23/New-Features-in-CS-3.0.aspx</link><pubDate>Mon, 23 Oct 2006 16:03:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:18062</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=18062</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=18062</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/10/23/New-Features-in-CS-3.0.aspx#comments</comments><description>&lt;p&gt;Scott posted his &lt;a href="http://scottwater.com/blog/archive/cs-3-0-update.aspx"&gt;three favorite new features in Community Server 3.0&lt;/a&gt;, one of which is&lt;/p&gt; &lt;blockquote&gt; &lt;ol start="2"&gt; &lt;li&gt;&lt;strong&gt;Configuration Merge&lt;/strong&gt; - one of the deployment things I hate is managing configuration files. We now support placing configuration overrides in an optional &amp;quot;_override&amp;quot; file. At runtime, CS will attempt to override default settings with changes found in the override file. The override file uses a pretty simple schema/structure along with XPath. &amp;nbsp;(Note: as in previous releases, each version places less in configuration files, but there are some cases where this is not feasible, hence the need for a way to manage it a little better). Also of interest, we have moved the connectionstring to a separate file. This is fully supported by ASP.Net out of the box. Our initial thought was this would be for development only and when we shipped we would move it back. Having used this system for a couple weeks, I am starting to think we should keep it for the long haul. The connectionstring is generally the only thing users had to change in the web.config, with this now external, it makes it much easier to deploy updates and new versions. &lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt; &lt;p&gt;Great news for all developers who extend CS with jobs, modules etc, because users do not have to edit CS&amp;#39; configuration files anymore. E.g. in the past you had to add the module type to the &lt;em&gt;CSModules&lt;/em&gt; section in &lt;em&gt;communityserver.config&lt;/em&gt;. As far as I understand, with CS 3.0 you can simply drop your &lt;em&gt;CSMVPs_communityserver_override.config&lt;/em&gt; (or whatever the naming schema is)&amp;nbsp;into the root folder&amp;nbsp;of your CS installation, and CS will pick up your modules/jobs automatically. I&amp;#39;m curious about the implementation.&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=18062" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Community Server MVP</title><link>http://thomasfreudenberg.com/blog/archive/2006/10/19/Community-Server-MVP.aspx</link><pubDate>Thu, 19 Oct 2006 18:34:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:18022</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=18022</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=18022</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/10/19/Community-Server-MVP.aspx#comments</comments><description>&lt;p&gt;
&lt;a href="http://csmvps.com"&gt;&lt;img align="right" alt="Community Server MVP" border="0" hspace="8" src="http://thomasfreudenberg.com/images/csmvp.gif" vspace="4" /&gt;&lt;/a&gt;&lt;a href="http://communityserver.org/blogs/announcements/archive/2006/10/19/new-community-server-mvps.aspx"&gt;The news is out&lt;/a&gt;: Today &lt;a href="http://telligent.com/"&gt;Telligent&lt;/a&gt; awarded me a &lt;a href="http://csmvps.com/"&gt;Community Server MVP&lt;/a&gt;. Though I am not that active in the fora, my participation in the CS community were deemed worthy enough to justify the nomination. At least my &lt;a href="http://thomasfreudenberg.com/blog/archive/2006/08/22/The-Akismet-Spam-Rule-included-in-Alabaster.aspx"&gt;contribution&lt;/a&gt; to the &lt;a href="http://csmvps.com/blogs/news/archive/2006/08/14/Community-Server-MVP_2700_s-Alabaster-CSModule-Package.aspx"&gt;Alabaster CSModule package&lt;/a&gt; is legalized now.&lt;br /&gt;&lt;/p&gt;
 
&lt;p&gt;Congratulations to &lt;a href="http://www.davestokes.net/" rel="contact"&gt;Dave Stokes&lt;/a&gt; and &lt;a href="http://communityserver.org/members/rgoldin.aspx" rel="contact"&gt;Russ Goldin&lt;/a&gt;, who were awarded too.&lt;br /&gt;
&lt;/p&gt;

 
&lt;p&gt;I&amp;#39;m curious if &lt;a href="http://nayyeri.net/" rel="friend"&gt;Keyvan&lt;/a&gt;&amp;#39;s &lt;a href="http://nayyeri.net/archive/2006/10/12/some-words-about-mvp-programs.aspx"&gt;comment about MVP programs&lt;/a&gt; got Telligent mediate on new nominations.&lt;img src="http://thomasfreudenberg.com/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/p&gt;
 
&lt;p&gt;Anyway, I feel honored, and looking forward to the collaboration with Telligent. Can&amp;#39;t wait to get hands on CS 3.0...&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=18022" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/CSMVPs/default.aspx">CSMVPs</category></item><item><title>MSDN Blogs and TechNet Blogs updated to CS 2.1</title><link>http://thomasfreudenberg.com/blog/archive/2006/10/05/MSDN-Blogs-and-TechNet-Blogs-updated-to-CS-2.1.aspx</link><pubDate>Wed, 04 Oct 2006 19:14:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:17913</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=17913</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=17913</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/10/05/MSDN-Blogs-and-TechNet-Blogs-updated-to-CS-2.1.aspx#comments</comments><description>
&lt;p&gt;&lt;a href="http://dbvt.com/" rel="friend"&gt;Dave Burke&lt;/a&gt; mentioned on &lt;a href="http://communityserver.org/blogs/dailynews/archive/2006/10/02/550666.aspx" title="Community Server Daily News"&gt;CS Daily News last Monday&lt;/a&gt; that both &lt;a href="http://blogs.msdn.com/" title="MSDN Blogs"&gt;MSDN Blogs&lt;/a&gt; and &lt;a href="http://blogs.technet.com/" title="TechNet Blogs"&gt;TechNet Blogs&lt;/a&gt; have been updated to Community Server&amp;nbsp;2.1. However, in my opinion they missed to make use of one of CS&amp;#39;s most interesting new features: tag support.&lt;/p&gt;
 
&lt;p&gt;I used to have MSDN Blogs&amp;#39; mainfeed in my aggregator, but deleted the subscription almost one year ago. There are just too many bloggers, and the signal-to-noise ratio is somewhat low. Therefore, instead of subscribing the main feed I&amp;#39;d rather subscribe to specific global tags, e.g. &lt;a href="http://blogs.msdn.com/tags/CLR/"&gt;CLR&lt;/a&gt; or &lt;a href="http://blogs.msdn.com/tags/WPF/"&gt;WPF&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;Fortunately, it&amp;#39;s already there. You may have noticed in the previous paragraph that both CLR and WPF are hyperlinks. So tags are there, it&amp;#39;s just that they are not first-class citizens. In fact, the links to the sites&amp;#39; &lt;a href="http://en.wikipedia.org/wiki/Tag_cloud"&gt;tag clouds&lt;/a&gt; are &lt;a href="http://blogs.msdn.com/tags/" title="http://blogs.msdn.com/tags/"&gt;http://blogs.msdn.com/tags/&lt;/a&gt; and &lt;a href="http://blogs.technet.com/tags/" title="http://blogs.technet.com/tags/"&gt;http://blogs.technet.com/tags/&lt;/a&gt;. So I ask, &amp;quot;Why aren&amp;#39;t these links on the sites&amp;#39; home pages?&amp;quot;&lt;/p&gt;
 
&lt;p&gt;&lt;font color="#666666"&gt;(However, of course the global tagging system works only if all bloggers commit to a common set of terms. If one&amp;nbsp;tags his posts with WPF, another one Windows Presentation Foundation, and a third one uses Avalon, you would have to subscribe to all three of these terms.)&lt;/font&gt;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=17913" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Updated coComment support for Community Server 2.1</title><link>http://thomasfreudenberg.com/blog/archive/2006/09/19/Updated-coComment-support-for-Community-Server-2.1.aspx</link><pubDate>Tue, 19 Sep 2006 18:47:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:17777</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=17777</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=17777</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/09/19/Updated-coComment-support-for-Community-Server-2.1.aspx#comments</comments><description>&lt;p&gt;Yesterday the guys at coComment &lt;a href="http://www.cocomment.com/teamblog/?p=117"&gt;updated their scripts&lt;/a&gt;. They also refreshed the example for Community Server, but that&amp;#39;s targetting CS 2.0. There are some breaking changes in the API of CS 2.1,&amp;nbsp;so that code won&amp;#39;t work with Telligent&amp;#39;s latest release.&amp;nbsp;Keyvan Nayyeri &lt;a href="http://nayyeri.net/archive/2006/07/21/Adding-CoComment-support-to-Community-Server-2.1.aspx"&gt;updated the code&lt;/a&gt; some time ago. I polished it a little bit and incorporated the latest changes from coComment:&lt;/p&gt;
 
 &lt;div class="wlWriterSmartContent" id="C411E4BC-FA5A-4068-9F25-1AA2B5A98D76:33a8c112-25a4-4725-af88-f1eefecc92e8" style="margin:0px;padding:0px;display:inline;float:none;"&gt;&lt;div style="display:block;background-color:#f7f7ff;"&gt;
&lt;pre&gt;&lt;table&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;CommunityServer.Components&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;CommunityServer.Blogs.Components&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; CSContext context = CSContext.Current; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; Weblog currentBlog = Weblogs.GetWeblog(context.ApplicationKey); &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; BlogThreadQuery query = new BlogThreadQuery(); &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; query.PostID = context.PostID; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; if (context.PostName != null) { &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; query.PostName = context.PostName; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; } &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; query.IncludeCategories = false; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; query.ReturnFullThread = false; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; query.SectionID = currentBlog.SectionID; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; PostSet postSet = WeblogPosts.GetPosts(query, true); &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; postSet.Organize(); &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; WeblogPost blogPost = postSet.ThreadStarter as WeblogPost; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; bool isAuthor = context.IsAuthenticated; &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;coco =&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;{&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tool&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   : &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= SiteStatistics.CommunityServerVersionVersionInfo &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;siteurl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= Globals.FullPath(currentBlog.Url) &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sitetitle  : &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= currentBlog.Name &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pageurl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= Globals.FullPath(BlogUrls.Instance().Post(blogPost)) &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pagetitle  : &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= blogPost.Subject &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; if (isAuthor) { &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;author&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= context.User.DisplayName &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; } else{ &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;authorID   : &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= tbName.UniqueID &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt; } &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;formID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &amp;quot;aspnetForm&amp;quot;,&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;textareaID : &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= tbComment.UniqueID &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;,&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buttonID   : &amp;quot;&lt;span style="background-color:#ffff00;color:Black;"&gt;&amp;lt;%&lt;/span&gt;= btnSubmit.UniqueID &lt;span style="background-color:#ffff00;color:Black;"&gt;%&amp;gt;&lt;/span&gt;&amp;quot;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;}&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;cocomment-fetchlet&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;src&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;&lt;a class="linkification-ext" href="http://www.cocomment.com/js/enabler.js" title="Linkification: http://www.cocomment.com/js/enabler.js"&gt;http://www.cocomment.com/js/enabler.js&lt;/a&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;    &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
	
&lt;tr&gt;
		
&lt;td&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If you run CS 2.1&amp;nbsp;on ASP.NET 1.1, you have to change &lt;em&gt;formID&lt;/em&gt; from &amp;quot;aspnetForm&amp;quot; to &amp;quot;__aspnetForm&amp;quot;.&lt;/p&gt;

&lt;p&gt;What I don&amp;#39;t understand however is why the &lt;em&gt;xxxID&lt;/em&gt; variables require the name of the related control instead of the ID.&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=17777" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Development/default.aspx">Development</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/coComment/default.aspx">coComment</category></item><item><title>Another release of Akismet spam rule</title><link>http://thomasfreudenberg.com/blog/archive/2006/08/31/Another-release-of-Akismet-spam-rule.aspx</link><pubDate>Thu, 31 Aug 2006 18:25:43 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:17690</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=17690</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=17690</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/08/31/Another-release-of-Akismet-spam-rule.aspx#comments</comments><description>&lt;p&gt;My &lt;a href="http://thomasfreudenberg.com/blog/archive/2006/08/22/The-Akismet-Spam-Rule-included-in-Alabaster.aspx"&gt;Akismet spam rule&lt;/a&gt; has a second home. Originally I contributed it to CSMVP's CSModules package aka &lt;a href="http://csmvps.com/blogs/news/archive/2006/08/14/Community-Server-MVP_2700_s-Alabaster-CSModule-Package.aspx"&gt;Alabaster&lt;/a&gt;. A couple of days ago &lt;a href="http://www.tankete.com/core/blogs/jose_lema/"&gt;José Lema&lt;/a&gt; informed me that Telligent wants to release a free dedicated spam rule package, and they would like to include my rule&amp;nbsp;as well. First I hesitated relinquishing my baby, but hey,&amp;nbsp;the more&amp;nbsp;users get easier access to that rule, the less spam they'll get. So finally I agreed José to include my rule in their package.&lt;/p&gt; &lt;p&gt;Yesterday José &lt;a href="http://communityserver.org/forums/thread/546533.aspx"&gt;announced&lt;/a&gt; the&amp;nbsp;availability of&amp;nbsp;that spam rule package, and indeed my spam rule is not included in it, but available &lt;a href="http://communityserver.org/files/folders/community_spam_rules/default.aspx"&gt;on its own&lt;/a&gt;. That means I still have full control over it &lt;strong&gt;and&lt;/strong&gt; more people&amp;nbsp;will use it. So if you don't want to use Alabaster (though you might miss other great CSModules) you can get the &lt;a href="http://communityserver.org/files/folders/community_spam_rules/default.aspx"&gt;Akismet spam rule as a stand-alone component&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Happy spam-fighting.&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=17690" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Akismet/default.aspx">Akismet</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/CSMVPs/default.aspx">CSMVPs</category></item><item><title>The Akismet Spam Rule included in Alabaster</title><link>http://thomasfreudenberg.com/blog/archive/2006/08/22/The-Akismet-Spam-Rule-included-in-Alabaster.aspx</link><pubDate>Tue, 22 Aug 2006 18:57:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:17598</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=17598</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=17598</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/08/22/The-Akismet-Spam-Rule-included-in-Alabaster.aspx#comments</comments><description>&lt;div style="-moz-column-count:2;-moz-column-gap:2em;"&gt;&lt;p&gt;Though I spoke about my Akismet spam rule &lt;a href="http://thomasfreudenberg.com/blog/archive/2006/07/22/Whats-next.aspx"&gt;a couple of weeks ago&lt;/a&gt;, I didn&amp;#39;t draw that much attention to it. However, now that the first version of CSMVP&amp;#39;s CSModules package, code name &lt;a href="http://csmvps.com/blogs/news/archive/2006/08/14/Community-Server-MVP_2700_s-Alabaster-CSModule-Package.aspx"&gt;Alabaster&lt;/a&gt;, is released for more than a week, I&amp;#39;d like to spent some words on it, though Jayson mentioned it in his &lt;a href="http://jaysonknight.com/blog/archive/2006/08/20/CS-Tidbits-_2300_21_3A00_-Exploring-The-CS-Spam-Blocker.aspx"&gt;CS Tidbits: Exploring The CS Spam Blocker&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://akismet.com/"&gt;Akismet&lt;/a&gt; provides a web service, which evaluates a comment or trackback based on several tests and returns a thumb up or thumb down. (Additionally, it can be trained, but that&amp;#39;s not supported by my spam rule.)&lt;/p&gt;&lt;p&gt;The spam rule I wrote and contributed to Alabaster calls this Akismet web service. The implementation is straight forward, for a general spam rule implementation see &lt;a href="http://communityserver.org/forums/permalink/526847/526847/ShowThread.aspx#526847"&gt;Jose Lema&amp;#39;s instructions on the CS Forum&lt;/a&gt;. Well, there some tips missing, but &lt;a href="http://nayyeri.net/"&gt;Keyvan&lt;/a&gt; forwarded me an advice from Jose: if&amp;nbsp;you use a web service in my spam rule, make that external call only if absolutely necessary. If the &amp;quot;cheaper&amp;quot; spam rules such as link count already identifies a comment as spam, an &amp;quot;expensive&amp;quot; call&amp;nbsp;to an external service would be redundant.&lt;/p&gt;&lt;p&gt;The spam rule engine in Community Server evaluates comments three-stage. In the implementation of your spam rule you can specify at which stage your rule should be visited. Additionally, you&amp;nbsp;can restrict your rule based on the result of previously&amp;nbsp;visited spam rules. In the case of the Akismet spam rule, I specified that the rule should be visited in the third stage, and only if the comment is not considered spam yet:&lt;/p&gt;&lt;/div&gt;&lt;div class="wlWriterSmartContent" id="C411E4BC-FA5A-4068-9F25-1AA2B5A98D76:e2d84ef4-3eb3-4252-a87a-d880c4b49c61" style="display:inline;float:none;margin:0px;padding:0px;"&gt;&lt;div style="display:block;background-color:#f7f7ff;"&gt;&lt;pre&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// Gets the pass criteria.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// &amp;lt;value&amp;gt;The pass criteria.&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; PassCriteria PassCriteria&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; PassCriteria.ThirdPass; }&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// Gets the status criteria.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#808080;"&gt;/// &amp;lt;value&amp;gt;The status criteria.&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; StatusCriteria StatusCriteria&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; StatusCriteria.NotSpam; }&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="-moz-column-count:2;-moz-column-gap:2em;"&gt;&lt;p&gt;Ok, enough about the implementation. The installation is pretty easy. Contrary to CSModules, spam rules do not need to be registered in&amp;nbsp;any .config files. Instead, the spam rule engine finds all rules via reflection on all assemblies in CS&amp;#39; bin folder.&lt;/p&gt;&lt;p&gt;For the configuration, first of all you need a WordPress API key, because Akismet requires it. Though you can &lt;a href="http://wordpress.com/api-keys/"&gt;get&amp;nbsp;a key&amp;nbsp;for free&lt;/a&gt;, the Akismet is free only for &lt;a href="http://akismet.com/personal/"&gt;personal use&lt;/a&gt;. If you are a commercial entity or making more than $500 from your personal blog, you need a &lt;a href="http://akismet.com/commercial/"&gt;commercial key&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href='/photos/images/16855/640x413.aspx' title='Akismet Spam Blocker for CommunityServer 2.1' details='/photos/picture16855.aspx' detailsText='Gallery page' rel='lightbox'&gt;&lt;img src='/photos/images/16855/thumb.aspx' border='0' class=''&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Pretending you have your API key now, go to&amp;nbsp;&lt;em&gt;Control Panel&lt;/em&gt; -&amp;gt; &lt;em&gt;Administration&lt;/em&gt; -&amp;gt; &lt;em&gt;System Tools&lt;/em&gt; -&amp;gt; &lt;em&gt;Manage Spam Blocker&lt;/em&gt; (~/ControlPanel/Tools/ManageSpamRules.aspx). Tick the &lt;em&gt;Akismet.com&lt;/em&gt; spam rule and click on &lt;em&gt;Configure&lt;/em&gt;. In the configuration window enter your API key and your desired points for detected spam (I chose 5, so it gets moderated automatically. I trust Akismet &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-5.gif" alt="Wink" /&gt;). Click &lt;em&gt;Save&lt;/em&gt; to close the configuration window and again &lt;em&gt;Save&lt;/em&gt; to accept the selected spam rules.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=17598" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Akismet/default.aspx">Akismet</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/CSMVPs/default.aspx">CSMVPs</category></item><item><title>Pimp my Community Server</title><link>http://thomasfreudenberg.com/blog/archive/2006/08/20/Pimp-my-Community-Server.aspx</link><pubDate>Sun, 20 Aug 2006 08:42:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:17585</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=17585</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=17585</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/08/20/Pimp-my-Community-Server.aspx#comments</comments><description>&lt;p&gt;Yesterday I upgraded my site to &lt;a href="http://communityserver.org/blogs/announcements/archive/2006/08/09/Community-Server-2.1-Now-Available.aspx"&gt;Community Server 2.1 RTM&lt;/a&gt;. I&amp;#39;m astonished how many additional mods I&amp;#39;m already using:&lt;br /&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt style="font-weight:bold;"&gt;&lt;a href="http://www.csmvps.com/blogs/news/archive/2006/08/14/Community-Server-MVP_2700_s-Alabaster-CSModule-Package.aspx"&gt;Community Server MVP&amp;#39;s Alabaster CSModule Package&lt;/a&gt;&amp;nbsp;&lt;/dt&gt;
&lt;dd&gt;
A collection of CSModules written by CS MVPs and myself. (I contributed the Akismet spam rule btw)&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://qgyen.net/archive/2006/08/04/Qgyen.AllCommentRss-for-CS-v2.1-RC1.aspx"&gt;&lt;span style="font-weight:bold;"&gt;Qgyen.AllCommentRss&lt;/span&gt;
&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Provides a secure RSS feed for all comments within  a certain blog. It also provides information like if it is an actual comment or a trackback, the post&amp;#39;s name, URL, if it is approved, and then it gives quick links to approve/disapprove, view, or delete the comment.
&lt;/dd&gt;
&lt;dt style="font-weight:bold;"&gt;&lt;a href="http://qgyen.net/archive/2006/08/09/Improved-Lightbox2-JS-for-Community-Server.aspx"&gt;Qgyen.Lightbox&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;
A Lightbox module for any photo from the gallery, an URL or &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;.
&lt;/dd&gt;
&lt;dt style="font-weight:bold;"&gt;&lt;a href="http://qgyen.net/archive/2006/08/09/Scott_2700_s-Flickr-for-Community-Server-_2800_Updated_2900_.aspx"&gt;Improved version&lt;/a&gt; of &lt;a href="http://scottwater.com/blog/archive/2006/07/20/Flickr-For-Community-Server.aspx"&gt;Scott&amp;#39;s Flickr for Community Server&lt;/a&gt;
&lt;/dt&gt;&lt;dd&gt;
Add a Flickr area to the content selector, which enables you to select images from your Flickr account.
&lt;/dd&gt;
&lt;dt style="font-weight:bold;"&gt;&lt;a href="http://qgyen.net/archive/2006/07/14/Qgyen.ExtendedUrlMapping-for-CS-v2.1.aspx"&gt;Qgyen.ExtendedUrlMapping&lt;/a&gt;
&lt;/dt&gt;
&lt;dd&gt;
This module allows you to easily map one URL within Community Server to another. I for instance use it to map both my blog and my gallery to the root.
&lt;/dd&gt;
&lt;dt style="font-weight:bold;"&gt;Syntax Highlighting module&lt;/dt&gt;
&lt;dd&gt;Formats code snippets with syntax highlighting. I cannot give you any link, because I&amp;#39;m using a modified version of a CS1.1 module, and I don&amp;#39;t know the original author anymore.
&lt;/dd&gt;
&lt;dt style="font-weight:bold;"&gt;&lt;a href="http://www.robertmclaws.com/archive/2006/08/04/New-CommunityServer-OpenSearch-Handler-Posted.aspx"&gt;CommunityServer OpenSearch Handler&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Adds OpenSearch support to your blog, allowing IE7 users to search your site from their toolbar without any installation.
&lt;/dd&gt;
&lt;dt style="font-weight:bold;"&gt;&lt;a href="http://nayyeri.net/archive/2006/07/21/Adding-CoComment-support-to-Community-Server-2.1.aspx"&gt;CoComment support&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;Tracks your comments across the blogosphere.
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
I just noticed that three and a half modules of the modules are written by &lt;a href="http://qgyen.net/"&gt;Ken Robertson&lt;/a&gt;. Seems as he is the most active guy on the Community Server community.&amp;nbsp;&lt;img src="http://thomasfreudenberg.com/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;br /&gt;
&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=17585" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Site+news/default.aspx">Site news</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Updated to Community Server 2.1 RC 1</title><link>http://thomasfreudenberg.com/blog/archive/2006/08/05/Updated-to-Community-Server-2.1-RC-1.aspx</link><pubDate>Fri, 04 Aug 2006 21:24:00 GMT</pubDate><guid isPermaLink="false">483d7ed9-aa38-4432-af18-89f61e4445bf:16887</guid><dc:creator>Thomas Freudenberg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/rsscomments.aspx?PostID=16887</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://thomasfreudenberg.com/blog/commentapi.aspx?PostID=16887</wfw:comment><comments>http://thomasfreudenberg.com/blog/archive/2006/08/05/Updated-to-Community-Server-2.1-RC-1.aspx#comments</comments><description>I have just upgraded to &lt;a href="http://communityserver.org/blogs/announcements/archive/2006/08/04/Community-Server-2.1-RC1-Available.aspx"&gt;Community Server 2.1 RC 1&lt;/a&gt; (2.1.60804.900). Flawless as usual &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;br /&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=16887" width="1" height="1"&gt;</description><category domain="http://thomasfreudenberg.com/blog/archive/tags/Site+news/default.aspx">Site news</category><category domain="http://thomasfreudenberg.com/blog/archive/tags/Community+Server/default.aspx">Community Server</category></item></channel></rss>