<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.thomasfreudenberg.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.thomasfreudenberg.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Thomas Freudenberg</title><link>http://thomasfreudenberg.com/blog/</link><description>Confessions of a caffeine addict</description><language>en</language><lastBuildDate>Mon, 26 Mar 2007 17:33:00 -0500</lastBuildDate><generator>Community Server http://communityserver.org</generator><geo:lat>50.8233</geo:lat><geo:long>6.1242</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.thomasfreudenberg.com/ThomasFreudenberg" type="application/rss+xml" /><item><title>Sharing Extension for Graffiti</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/229155614/sharing-extension-for-graffiti.aspx</link><category>Graffiti</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Mon, 04 Feb 2008 13:52:00 -0600</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2008/02/04/sharing-extension-for-graffiti.aspx</guid><description>&lt;p&gt;Two weeks ago &lt;a href="http://telligent.com/"&gt;Telligent&lt;/a&gt; published the second beta of their upcoming new product &lt;a href="http://graffiticms.com/"&gt;Graffiti&lt;/a&gt;. It is a simple lightweight content management system. And by simple I don&amp;#39;t mean lame. Far from it! It is simple in the sense of easy deployment, management, and publishing.&lt;/p&gt;&lt;p&gt;Additionally it&amp;#39;s easy to extend. &lt;a href="http://nayyeri.net/" rel="friend"&gt;Keyvan&lt;/a&gt;, who I got to know and appreciate while working on the &lt;a href="http://csmvps.com/news/archive/2007/05/13/community-server-mvps-cinnabar-csmodule-package.aspx"&gt;Community Server Modules&lt;/a&gt;, already &lt;a href="http://nayyeri.net/blog/post-navigator-extension-for-graffiti/"&gt;wrote&lt;/a&gt; &lt;a href="http://nayyeri.net/blog/community-credit-plug-in-for-graffiti/"&gt;several&lt;/a&gt; &lt;a href="http://nayyeri.net/blog/search-relevancy-extension-for-graffiti/"&gt;extensions&lt;/a&gt; for Graffiti. To wrap up all his addons and provide a simple installation experience &lt;a href="http://nayyeri.net/blog/introducing-graffiti-extras/"&gt;he started&lt;/a&gt; the &lt;a href="http://www.codeplex.com/GraffitiExtras"&gt;Graffiti Extras project&lt;/a&gt; on CodePlex. And he was kind enough to accept me as a contributor.&lt;/p&gt;&lt;p&gt;&lt;img src="http://thomasfreudenberg.com/photos/images/58256/original.aspx" alt="" align="right" border="0" height="" hspace="8" width="" /&gt;So here it is, my first extension for Graffiti. In fact, I was inspired by Danny Douglass&amp;#39; &lt;a href="http://www.dannydouglass.com/post/2008/01/Add-Social-Bookmarking-Links-To-Your-Blog.aspx"&gt;Social Bookmarks extension&lt;/a&gt; for BlogEngine.NET. It enables you to link your posts to some of the most popular social bookmarking sites. The image to the right depicts an exemplary post with the extension rendered below.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Implementation&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The Sharing extension is implemented as a so called &lt;a href="http://graffiticms.com/support/advanced-options/chalk-overview/"&gt;&lt;span style="font-style:italic;"&gt;chalk&lt;/span&gt;&lt;/a&gt;. Think of chalks as of macros. How to write your own chalk is &lt;a href="http://graffiticms.com/support/advanced-options/extending-chalk/"&gt;well-documented&lt;/a&gt;, so I won&amp;#39;t describe how I implemented the Sharing extension. If you want to have a look at the sources, go to the &lt;a href="http://www.codeplex.com/GraffitiExtras"&gt;GraffitiExtras project&lt;/a&gt; on CodePlex and either download them or browse them online. &lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Installation&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;To install the Sharing chalk (and all other extensions provided in Graffiti Extras) download the attached &lt;a href="/files/folders/58253/download.aspx"&gt;ZIP File&lt;/a&gt;. This archive contains two root folders: in the &lt;span style="font-style:italic;"&gt;bin&lt;/span&gt; folder you can find the &lt;span style="font-style:italic;"&gt;GraffitiExtras.dll&lt;/span&gt; which you must drop into the &lt;span style="font-style:italic;"&gt;bin&lt;/span&gt; folder of your Graffiti installation. The second folder, &lt;span style="font-style:italic;"&gt;sharing-images&lt;/span&gt;, contains two flavors of icons in different sizes (16x16, 24x24, 32x32, and 48x48) for several social bookmarking sites (original icons are provided by &lt;a href="http://fasticon.com/freeware"&gt;FastIcon&lt;/a&gt;). Either copy that folder entirely or only the desired flavor/sizes somewhere to the Graffiti web folder.&lt;/p&gt;&lt;p style="font-weight:bold;"&gt;Usage&lt;/p&gt;&lt;p&gt;To add the sharing extension to your posts, you just have to add a single line to your theme file:&lt;/p&gt;&lt;p&gt;&lt;span style="font-style:italic;"&gt;$sharing.Write($post, &amp;quot;&lt;/span&gt;&amp;lt;image folder&amp;gt;&lt;span style="font-style:italic;"&gt;&amp;quot;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Replace &lt;span style="font-style:italic;"&gt;image folder&lt;/span&gt; with the path to the desired images. E.g. if you have copied the entire &lt;span style="font-style:italic;"&gt;sharing-images&lt;/span&gt; folder to the root of your web application, and you want to see the round images with a size of 16x16, you would add following line:&lt;/p&gt;&lt;p&gt;&lt;span style="font-style:italic;"&gt;$sharing.Write($post, &amp;quot;/sharing-images/circle/16x16/&amp;quot;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;By default the different images are separated by a non-breaking space (&lt;span style="font-style:italic;"&gt;&amp;amp;nbsp;&lt;/span&gt;) but you can change that with the optional third parameter:&lt;/p&gt;&lt;p&gt;&lt;span style="font-style:italic;"&gt;$sharing.Write($post, &amp;quot;&lt;/span&gt;&amp;lt;image folder&amp;gt;&lt;span style="font-style:italic;"&gt;&amp;quot;, &amp;quot; | &amp;quot;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=58262" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=xi9GMqE"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=xi9GMqE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=AAlGfme"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=AAlGfme" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=u72hPQE"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=u72hPQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=HITZLIE"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=HITZLIE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/229155614" height="1" width="1"/&gt;</description><enclosure url="/files/folders/58253/download.aspx" length="168800" type="application/octet-stream" /><media:content url="/files/folders/58253/download.aspx" fileSize="168800" type="application/octet-stream" /><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2008%2F02%2F04%2Fsharing-extension-for-graffiti.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2008/02/04/sharing-extension-for-graffiti.aspx</feedburner:origLink></item><item><title>.NET-Forum.de launched</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/225492866/net-forum-de-launched.aspx</link><category>Community Server</category><category>Community</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Tue, 29 Jan 2008 15:21:00 -0600</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2008/01/29/net-forum-de-launched.aspx</guid><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" align="right" border="0" height="39" hspace="8" width="306" /&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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=jkbuWsD"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=jkbuWsD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=LmFH17d"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=LmFH17d" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=8SfIF6D"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=8SfIF6D" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=9wNKp3D"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=9wNKp3D" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/225492866" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2008%2F01%2F29%2Fnet-forum-de-launched.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2008/01/29/net-forum-de-launched.aspx</feedburner:origLink></item><item><title>String.IsNullOrEmpty as Extension Method</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/223183923/string-isnullorempty-as-extension-method.aspx</link><category>Development</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Fri, 25 Jan 2008 15:53:00 -0600</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2008/01/25/string-isnullorempty-as-extension-method.aspx</guid><description>&lt;p&gt;Most you will probably know about Extension Method introduced with C# 3.0. If not, I strongly recommend to read ScottGu&amp;#39;s &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx"&gt;explanation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Anyway, a couple of days ago Brad Wilson posted &lt;a href="http://bradwilson.typepad.com/blog/2008/01/c-30-extension.html"&gt;an experiment&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;What I wasn&amp;#39;t sure was whether or not you could call these extension methods 
when you have a null instance of the object, since they&amp;#39;re instance methods. The 
C++ guy in me said &amp;quot;sure, that should be legal&amp;quot;, and the C# guy in me said &amp;quot;it&amp;#39;s 
probably illegal, and that&amp;#39;s too bad&amp;quot;. Amazingly, the C++ guy in me won!&lt;/p&gt;&lt;p&gt;This code executes perfectly:&lt;/p&gt;&lt;pre&gt;using System;&lt;br /&gt;&lt;br /&gt;public static class MyExtensions {&lt;br /&gt;&amp;nbsp; &amp;nbsp; public static bool IsNull(this object @object) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; return @object == null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class MainClass {&lt;br /&gt;&amp;nbsp; &amp;nbsp; public static void Main() {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; object obj1 = new object();&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Console.WriteLine(obj1.IsNull());&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; object obj2 = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; Console.WriteLine(obj2.IsNull());&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;When you run it, it prints out &amp;quot;False&amp;quot; and &amp;quot;True&amp;quot;. Excellent!&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;When I read that I immediatley thought of another application. I guess all my readers are familiar with &lt;a href="http://msdn2.microsoft.com/en-us/library/system.string.isnullorempty.aspx" style="font-style:italic;"&gt;String.IsNullOrEmpty&lt;/a&gt; which was introduced with .NET 2.0. So I asked myself if you can make &lt;span style="font-style:italic;"&gt;IsNullOrEmpty&lt;/span&gt; a parameterless extension method:&lt;/p&gt;&lt;p&gt;&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&lt;span style="color:#0000FF"&gt;using&lt;/span&gt; System;

&lt;span style="color:#0000FF"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF"&gt;static&lt;/span&gt; &lt;span style="color:#0000FF"&gt;class&lt;/span&gt; MyExtensions
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF"&gt;static&lt;/span&gt; &lt;span style="color:#0000FF"&gt;bool&lt;/span&gt; IsNullOrEmpty(&lt;span style="color:#0000FF"&gt;this&lt;/span&gt; String s)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;return&lt;/span&gt; String.IsNullOrEmpty(s);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}

&lt;span style="color:#0000FF"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF"&gt;class&lt;/span&gt; MainClass
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;public&lt;/span&gt; &lt;span style="color:#0000FF"&gt;static&lt;/span&gt; &lt;span style="color:#0000FF"&gt;void&lt;/span&gt; Main()
&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; s1 = &amp;quot;&lt;span style="color:#8B0000"&gt;Hello world&lt;/span&gt;&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(s1.IsNullOrEmpty());

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;string&lt;/span&gt; s2 = &lt;span style="color:#0000FF"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(s2.IsNullOrEmpty());
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;Again, it prints out &lt;span style="font-style:italic;"&gt;False&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;True&lt;/span&gt;. And in my opinion this &lt;a href="http://en.wikipedia.org/wiki/syntactic%20sugar"&gt;syntactic sugar&lt;/a&gt; looks much more elegant than the ordinary &lt;span style="font-style:italic;"&gt;String.IsNullOrEmpty(s2)&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;If only C# would support &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1170257&amp;amp;SiteID=1"&gt;extension &lt;span style="font-weight:bold;"&gt;properties&lt;/span&gt;&lt;/a&gt;...&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=57390" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=7yVNLDD"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=7yVNLDD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=47c0nPd"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=47c0nPd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=uotj7yD"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=uotj7yD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=9edog4D"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=9edog4D" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/223183923" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2008%2F01%2F25%2Fstring-isnullorempty-as-extension-method.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2008/01/25/string-isnullorempty-as-extension-method.aspx</feedburner:origLink></item><item><title>Goodbye Aachen, Hello Hamburg</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/176833234/goodbye-aachen-hello-hamburg.aspx</link><category>Hamburg</category><category>Proximity</category><category>Cycos</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Mon, 29 Oct 2007 14:02:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/10/29/goodbye-aachen-hello-hamburg.aspx</guid><description>&lt;p&gt;&lt;a href="http://www.cycos.com/"&gt;&lt;img alt="Cycos" hspace="8" src="http://thomasfreudenberg.com/blogs/blog/Cycos_Logo.png" align="left" border="0" /&gt;&lt;/a&gt; After more than 8 years I´ll leave my current employer &lt;a title="Cycos" href="http://www.cycos.com/"&gt;Cycos&lt;/a&gt; by the end of this year. Starting 1/1/08 I&amp;#39;ll work as a Senior Software Developer at &lt;a title="Proximity" href="http://www.proximity.de/"&gt;Proximity&lt;/a&gt; (&lt;a title="Proximity worldwide" href="http://www.proximityworldwide.com/"&gt;international website&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Cycos is my first employer, I started here right after university in 1999. Originally I didn&amp;#39;t plan to stay that long here but 5 years at maximum. However, because the work was so diversified and the working atmosphere so prolific, I stayed some years longer.&lt;a href="http://proximity.de/"&gt;&lt;img alt="Proximity" hspace="8" src="http://thomasfreudenberg.com/blogs/blog/Proximity_logo.png" align="right" border="0" /&gt;&lt;/a&gt; E.g. I was delegated to Munich and San Jose (CA) for several month each, and they paid me the attendances and expenses for both PDC´03 and ´05 in LA. In other words, I can´t accuse myself of being inflexible or inmobil. And it was always fun working at Cycos. I´ll be contended if the working atmosphere at my new job is half as prolific as I got to know it in the past.&lt;/p&gt;
&lt;p&gt;However, after 8 years it´s time for a change. Most of my time at Cycos I wrote proprietary software, mainly clients for &lt;a href="http://en.wikipedia.org/wiki/computer%20telephony%20integration"&gt;computer telephony integration&lt;/a&gt;. In contrast, at Proximity I will leverage Microsoft products such as MOSS and BizTalk, i.e. areas &lt;span style="TEXT-DECORATION:line-through;"&gt;I don´t have a clue about&lt;/span&gt; where I can gain experience. But don´t get me wrong, I´m really looking forward for the new job.&lt;/p&gt;
&lt;p&gt;And I´m not only changing the employer, but the town as well. I´ll move to Hamburg, which is 500 km away from Würselen/Aachen (for my American friends: that´s about 310 miles). Therefore the search of a new domicile has my highest priority at the moment. I have 18 paid leave days left, and I want to complete my relocation this year. So this blog will stay quite silent the next few weeks. But stay tuned, I´ll keep&amp;nbsp;you informed. &lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=44355" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=AJeC4nA"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=AJeC4nA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=ZGAC8ua"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=ZGAC8ua" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=PH0RSfA"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=PH0RSfA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=AtNpxqA"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=AtNpxqA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=WEpo46A"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=WEpo46A" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/176833234" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F10%2F29%2Fgoodbye-aachen-hello-hamburg.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/10/29/goodbye-aachen-hello-hamburg.aspx</feedburner:origLink></item><item><title>XTOPIA 2007</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/167110855/xtopia-2007.aspx</link><category>Community</category><category>Conference</category><category>Xtopia</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Mon, 08 Oct 2007 15:23:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/10/08/xtopia-2007.aspx</guid><description>&lt;p&gt;&lt;img src="http://thomasfreudenberg.com/images/Xtopia.png" alt="" align="right" border="" height="53" hspace="4" width="231" /&gt;Now Germany has its own Mix conference, though here Microsoft calls it &lt;a href="http://www.xtopia-konferenz.de/"&gt;Xtopia&lt;/a&gt;. It will cover Silverlight, WPF, the Expression suite, and much more. It will take place in Berlin from 10th to 12th of October (if you include the post-conference on Friday).&lt;/p&gt;&lt;p&gt;I&amp;#39;ll go to Berlin tomorrow already, and stay until Saturday. My Hotel is the &lt;a href="http://www.quality-hotel-berlin.de/en/"&gt;Quality Hotel &amp;amp; Suites Berlin City East&lt;/a&gt;. If you want to join me for a beer or two, drop me a line or call me at +49 (173) 285 21 81. &lt;a href="http://blog.lars-keller.net/PermaLink,guid,331497aa-dee3-4a90-a81b-126f2727f292.aspx"&gt;Lars&lt;/a&gt;, I&amp;#39;m expecting your call. &lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=42336" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=xTmDY5cN"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=xTmDY5cN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=NqMW490L"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=NqMW490L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=S5jkQJA9"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=S5jkQJA9" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=OgHRpnHU"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=OgHRpnHU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=ejfQkTOl"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=ejfQkTOl" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/167110855" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F10%2F08%2Fxtopia-2007.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/10/08/xtopia-2007.aspx</feedburner:origLink></item><item><title>All Firefox Extensions Gone after upgrading to 2.0.7</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/159176346/all-firefox-extensions-gone-after-upgrading-to-2-0-7.aspx</link><category>Software</category><category>Tips 'n Tricks</category><category>Firefox</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Thu, 20 Sep 2007 15:09:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/09/20/all-firefox-extensions-gone-after-upgrading-to-2-0-7.aspx</guid><description>&lt;p&gt;&lt;img src="http://thomasfreudenberg.com/images/firefox_logo.png" alt="Firefox" align="right" border="" height="" hspace="4" width="" /&gt;Today I upgraded Firefox to 2.0.7, which &lt;a href="http://www.mozilla.org/security/announce/2007/mfsa2007-28.html"&gt;fixes a flaw in the QuickTime plugin&lt;/a&gt;. However, after the upgrade &lt;span style="font-weight:bold;"&gt;Firefox didn&amp;#39;t load any of the extensions&lt;/span&gt; I have installed&lt;/p&gt;&lt;p&gt;Fortunately I found &lt;a href="http://forums.mozillazine.org/viewtopic.php?t=586691&amp;amp;sid=38821ef113f1c7b841643b0101e6f1e6"&gt;this thread&lt;/a&gt; in the support forum. Simply delete &lt;i&gt;extensions.ini&lt;/i&gt;, &lt;i&gt;extensions.cache&lt;/i&gt;, and &lt;i&gt;extensions.rdf&lt;/i&gt; from &lt;a href="http://kb.mozillazine.org/Profile_folder_-_Firefox#Finding_the_profile_folder"&gt;your profile folder&lt;/a&gt;. On its next start Firefox will scan for installed extansions and regenerate these files.&lt;/p&gt;&lt;p&gt;I hope this post will be indexed properly so you can find this information faster than me.&amp;nbsp;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=40563" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=usUrh96g"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=usUrh96g" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=6WhztxGI"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=6WhztxGI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=RqzCTexx"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=RqzCTexx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=4PlzEWzM"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=4PlzEWzM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=vrBxWFnS"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=vrBxWFnS" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/159176346" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F09%2F20%2Fall-firefox-extensions-gone-after-upgrading-to-2-0-7.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/09/20/all-firefox-extensions-gone-after-upgrading-to-2-0-7.aspx</feedburner:origLink></item><item><title>Shot myself in the foot</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/159101542/shot-myself-in-the-foot.aspx</link><category>Site news</category><category>Comment Spam</category><category>CAPTCHA</category><category>Honeypot</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Thu, 20 Sep 2007 12:02:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/09/20/shot-myself-in-the-foot.aspx</guid><description>&lt;p&gt;If you have tried to leave a comment on my site in the last two days, you may have noticed that they weren’t accepted. Here is why:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Because the rate of incoming spam decreased dramatically after I implemented the &lt;a href="http://thomasfreudenberg.com/blog/archive/2007/09/17/honeypot-captcha-for-community-server.aspx"&gt;Honeypot CAPTCHA&lt;/a&gt; on this site, I wondered if I could really give that solution the credit. Therefore I entered a comment myself to check it. And what happened? Nothing! Instead, that small red asterisk appeared next to the comment field, indicating that nothing was entered. WTF? I did enter some text! Garbage, I admit, but at least a few characters. Then I remembered that I switched the identifiers of the regular comment text box and the honeypot box. Then I had a sneaking suspicion, and I quickly checked &lt;i&gt;post.aspx&lt;/i&gt;. My apprehension proved true: I have forgotten to point the RequiredFieldValidor to the other identifier! So as long as you didn&amp;#39;t fill in the hidden honeypot, you couldn&amp;#39;t post your comment. How stupid is that? The ironic side of the story is, that only comment spammers were able to cross that barrier, just to get marked as spam instantly afterwards. &lt;/p&gt;&lt;p&gt;Anyway, it’s fixed by now, and your comments are welcome (again)!&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=40544" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=gWlGowUl"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=gWlGowUl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=5744wStn"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=5744wStn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=ev3E8sTs"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=ev3E8sTs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=PhSPUM27"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=PhSPUM27" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=Zp4L3nfu"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=Zp4L3nfu" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/159101542" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F09%2F20%2Fshot-myself-in-the-foot.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/09/20/shot-myself-in-the-foot.aspx</feedburner:origLink></item><item><title>Honeypot Captcha for Community Server</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/157759149/honeypot-captcha-for-community-server.aspx</link><category>Community Server</category><category>Development</category><category>Comment Spam</category><category>CAPTCHA</category><category>Honeypot</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Mon, 17 Sep 2007 15:34:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/09/17/honeypot-captcha-for-community-server.aspx</guid><description>&lt;p&gt;A few days ago &lt;a href="http://haacked.com/" rel="acquaintance"&gt;Phil Haack&lt;/a&gt; wrote about &lt;a href="http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx"&gt;Honeypot Captcha&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;At the same time, spam bots tend to ignore CSS. For example, if you
use CSS to hide a form field (especially via CSS in a separate file),
they have a really hard time knowing that the field is not supposed to
be visible.&lt;/p&gt;
  &lt;p&gt;
To exploit this, you can create a &lt;i&gt;honeypot&lt;/i&gt; form field that &lt;i&gt;should be left blank &lt;/i&gt;and
then use CSS to hide it from human users, but not bots. When the form
is submitted, you check to make sure the value of that form field is
blank.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A great idea, which didn’t occur to me before. And Phil wasn’t even the first one with that idea.&lt;/p&gt;&lt;p&gt;I
added a “regular” captcha control to my site some time ago, but removed
it again after a couple of days. Why burden the innocent commentor?
He’s not the problem. The comment spammers are.&lt;/p&gt;&lt;p&gt;So I took the idea of the honeypot and leveraged Community Server’s spam filtering capabilities.&lt;/p&gt;&lt;p&gt;First, I replaced the original Community Server’s &lt;a href="http://code.communityserver.org/?path=CS+Tree%5cCS+2007+3.0%5cBlogs%5cControls%5cForms%5cWeblogPostCommentForm.cs"&gt;WeblogPostCommentForm&lt;/a&gt; with my own version by simply copying it to my own assembly. (If you
build CS from the SDK, you can also just edit the existing one.)&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Added the private member&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&lt;span style="color:#0000FF"&gt;private&lt;/span&gt; TextBox HoneyPot;
&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Added the property &lt;i&gt;HoneyPotTextBoxId&lt;/i&gt;, which references the actual TextBox in the form:&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;string&lt;/span&gt; HoneyPotTextBoxId
{
&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; ((&lt;span style="color:#0000FF"&gt;string&lt;/span&gt;)ViewState[&amp;quot;&lt;span style="color:#8B0000"&gt;HoneyPotTextBoxId&lt;/span&gt;&amp;quot;]) ?? &lt;span style="color:#0000FF"&gt;string&lt;/span&gt;.Empty; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;set&lt;/span&gt; { ViewState[&amp;quot;&lt;span style="color:#8B0000"&gt;HoneyPotTextBoxId&lt;/span&gt;&amp;quot;] = &lt;span style="color:#0000FF"&gt;value&lt;/span&gt;; }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Added following lines to the method &lt;i&gt;AttachChildControls&lt;/i&gt;:&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HoneyPot = WeblogControlUtility.Instance().FindControl(&lt;span style="color:#0000FF"&gt;this&lt;/span&gt;, HoneyPotTextBoxId) &lt;span style="color:#0000FF"&gt;as&lt;/span&gt; TextBox;
&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder sb = &lt;span style="color:#0000FF"&gt;new&lt;/span&gt; StringBuilder();
&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.AppendLine(&amp;quot;&lt;span style="color:#8B0000"&gt;\n&amp;lt;script type=\&amp;quot;text/javascript\&amp;quot;&amp;gt;&lt;/span&gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.AppendLine(&amp;quot;&lt;span style="color:#8B0000"&gt;document.getElementById(\&amp;quot;&lt;/span&gt;&amp;quot; + HoneyPot.ClientID + &amp;quot;&lt;span style="color:#8B0000"&gt;\&amp;quot;).style.display = \&amp;quot;none\&amp;quot;;&lt;/span&gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.AppendLine(&amp;quot;&lt;span style="color:#8B0000"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; CSControlUtility.Instance().RegisterStartupScript(HoneyPot,&lt;span style="color:#0000FF"&gt;typeof&lt;/span&gt; (TextBox), &amp;quot;&lt;span style="color:#8B0000"&gt;honeypot&lt;/span&gt;&amp;quot;, sb.ToString(), &lt;span style="color:#0000FF"&gt;false&lt;/span&gt;);
&lt;/pre&gt;&lt;/div&gt;You see that the honeypot field is hidden dynamically via
JavaScript. No CSS is giving a hint to the spammer that the control
will not be visible. Instead, as soon as the page is loaded, the textbox will be hidden programmatically.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Added following lines in &lt;i&gt;Submit_Click&lt;/i&gt; right before &lt;i&gt;WeblogPosts.Add&lt;/i&gt; is called:&lt;div style="overflow-x: auto;"&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;if&lt;/span&gt; (!&lt;span style="color:#0000FF"&gt;string&lt;/span&gt;.IsNullOrEmpty(HoneyPot.Text))
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EventLogs.Info(&amp;quot;&lt;span style="color:#8B0000"&gt;Spammer entered \&amp;quot;&lt;/span&gt;&amp;quot; + HoneyPot.Text + &amp;quot;&lt;span style="color:#8B0000"&gt;\&amp;quot; in the honey pot&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8B0000"&gt;Spam Rules&lt;/span&gt;&amp;quot;, 0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.SetExtendedAttribute(&amp;quot;&lt;span style="color:#8B0000"&gt;GotchaInMyHoneyPot&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8B0000"&gt;trapped&lt;/span&gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;&lt;/div&gt;So whenever the honeypot textbox is filled in, the comment gets an extended attribute named &lt;span style="font-style:italic;"&gt;GotchaInMyHoneyPot&lt;/span&gt;.  &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now this new form must be used on the actual page. There’s only one
page (per theme), which allows visitors to leave comments, which is &lt;i&gt;post.aspx&lt;/i&gt;. Unfortunately, this must be done for every theme.&lt;/p&gt;&lt;p&gt;So open &lt;i&gt;post.aspx&lt;/i&gt; and replace the original &lt;i&gt;WeblogPostCommentForm&lt;/i&gt; with our new one, add the &lt;i&gt;HoneyPotTextBoxId&lt;/i&gt; attribute to the form, and add the textbox. Don’t forget to use the same id for the textbox (this example uses &lt;i&gt;tbBody&lt;/i&gt;, which shouldn’t ring a bell for the spammer.) Here’s the modified form declaration from the PaperClip theme:&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:#C71585"&gt;tfr&lt;/span&gt;:&lt;span style="color:#800000"&gt;HoneyPotWeblogPostCommentForm&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&amp;quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;MessageTextBoxId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbComment&amp;quot;&lt;/span&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;NameTextBoxId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbName&amp;quot;&lt;/span&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;RememberCheckboxId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;chkRemember&amp;quot;&lt;/span&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;SubjectTextBoxId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbTitle&amp;quot;&lt;/span&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;SubmitButtonId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;btnSubmit&amp;quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;UrlTextBoxId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbUrl&amp;quot;&lt;/span&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;ControlIdsToHideFromRegisteredUsers&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;RememberWrapper&amp;quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#FF0000"&gt;HoneyPotTextBoxId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbBody&amp;quot;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;SuccessActions&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;GoToModifiedUrlAction&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;QueryStringModification&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CommentPosted=true&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;TargetLocationModification&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;commentmessage&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;SuccessActions&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;FormTemplate&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;fieldset&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;commentform&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;legend&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;ResourceControl&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Weblog_CommentForm_WhatDoYouThink&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;rc_think&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;legend&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;p&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;FormLabel&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;LabelForId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbTitle&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;em&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;ResourceControl&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Required&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;em&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;RequiredFieldValidator&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ErrorMessage&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ControlToValidate&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbTitle&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;TextBox&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbTitle&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;CssClass&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;smallbox&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;p&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;NameTitle&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;FormLabel&lt;/span&gt; &lt;span style="color:#FF0000"&gt;LabelForId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbName&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Weblog_CommentForm_Name&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;em&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;ResourceControl&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Required&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;em&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;RequiredFieldValidator&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ErrorMessage&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ControlToValidate&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbName&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;NameDesc&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;TextBox&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbName&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;CssClass&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;smallbox&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;p&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;FormLabel&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;LabelForId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbUrl&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Weblog_CommentForm_YourUrl&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;em&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;ResourceControl&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Optional&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;em&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;TextBox&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbUrl&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;CssClass&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;smallbox&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="background-color:#FFFF00; color:Black"&gt;&amp;lt;%&lt;/span&gt;-- the honeybot textbox --&lt;span style="background-color:#FFFF00; color:Black"&gt;%&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;TextBox&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbBody&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;CssClass&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;smallbox&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&amp;quot;&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;p&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;FormLabel&lt;/span&gt; &lt;span style="color:#FF0000"&gt;LabelForId&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbComment&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Weblog_CommentForm_Comments&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;em&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:#C71585"&gt;CSControl&lt;/span&gt;:&lt;span style="color:#800000"&gt;ResourceControl&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ResourceName&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Required&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;em&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;RequiredFieldValidator&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ErrorMessage&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ControlToValidate&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbComment&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;TextBox&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;tbComment&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;Rows&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;5&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;Columns&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;25&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;TextMode&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;MultiLine&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;PlaceHolder&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;RememberWrapper&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;p&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&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;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;div&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;CheckBox&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;chkRemember&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Remember Me?&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;CheckBox&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;div&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;PlaceHolder&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;p&lt;/span&gt; &lt;span style="color:#0000FF"&gt;/&amp;gt;&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; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;Button&lt;/span&gt; &lt;span style="color:#FF0000"&gt;id&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;btnSubmit&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;Text&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Submit&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;ValidationGroup&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;CreateCommentForm&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:#C71585"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000"&gt;Button&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;fieldset&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;FormTemplate&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:#C71585"&gt;tfr&lt;/span&gt;:&lt;span style="color:#800000"&gt;HoneyPotWeblogPostCommentForm&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;But that´s only the first half. Now whenever
the honeypot field is filled with some text the comment will have an
extended attribute &lt;i&gt;GotchaInMyHoneyPot&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;The second step is to give the comment “spam points”, which is done by a CS spam rule. &lt;a href="http://nayyeri.net/" rel="friend"&gt;Keyvan Nayyeri&lt;/a&gt; published a &lt;a href="http://nayyeri.net/archive/2006/09/15/CS-Dev-Guide_3A00_-How-to-Write-a-Spam-Rule.aspx"&gt;complete tutorial&lt;/a&gt; how to write your own spam rules, so I won’t get into details. Here’s the complete code for the new rule:&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; HoneyPotRule : BlogSpamRule
{
&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;readonly&lt;/span&gt; Guid _ruleId = &lt;span style="color:#0000FF"&gt;new&lt;/span&gt; Guid(&amp;quot;&lt;span style="color:#8B0000"&gt;57E216D4-D100-468d-BB37-1B7A0A103CEF&lt;/span&gt;&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;private&lt;/span&gt; &lt;span style="color:#0000FF"&gt;const&lt;/span&gt; &lt;span style="color:#0000FF"&gt;int&lt;/span&gt; _defaultPoints = 10;

&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; ArrayList GetAvailableSettings()
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ArrayList list = &lt;span style="color:#0000FF"&gt;new&lt;/span&gt; ArrayList();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; list.Add(&lt;span style="color:#0000FF"&gt;new&lt;/span&gt; RuleSetting(_ruleId, &amp;quot;&lt;span style="color:#8B0000"&gt;points&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8B0000"&gt;Points&lt;/span&gt;&amp;quot;, _defaultPoints.ToString()));
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;return&lt;/span&gt; list;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&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; &lt;span style="color:#0000FF"&gt;int&lt;/span&gt; CalculateSpamScore(WeblogPost weblogPost, CSPostEventArgs 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;if&lt;/span&gt; (weblogPost.BlogPostType == BlogPostType.Comment)
&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;if&lt;/span&gt; (!String.IsNullOrEmpty(weblogPost.GetExtendedAttribute(&amp;quot;&lt;span style="color:#8B0000"&gt;GotchaInMyHoneyPot&lt;/span&gt;&amp;quot;)))
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; EventLogs.Info(&amp;quot;&lt;span style="color:#8B0000"&gt;A spammer fell for the honey pot&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8B0000"&gt;Spam Rules&lt;/span&gt;&amp;quot;, 0);
&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;return&lt;/span&gt; Globals.SafeInt(GetSettingValue(&amp;quot;&lt;span style="color:#8B0000"&gt;points&lt;/span&gt;&amp;quot;), _defaultPoints);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;return&lt;/span&gt; &lt;span style="color:#0000FF"&gt;base&lt;/span&gt;.CalculateSpamScore(weblogPost, e);
&amp;nbsp;&amp;nbsp;&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; &lt;span style="color:#0000FF"&gt;string&lt;/span&gt; Name
&amp;nbsp;&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; &amp;quot;&lt;span style="color:#8B0000"&gt;HoneyPot&lt;/span&gt;&amp;quot;; }
&amp;nbsp;&amp;nbsp;&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; &lt;span style="color:#0000FF"&gt;string&lt;/span&gt; Description
&amp;nbsp;&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; &amp;quot;&lt;span style="color:#8B0000"&gt;HoneyPot description&lt;/span&gt;&amp;quot;; }
&amp;nbsp;&amp;nbsp;&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; Guid RuleID
&amp;nbsp;&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; _ruleId; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;I’m running this solution for a couple of days now on my site, and it works pretty well. It’s amazing how many spam bots fill each and every textbox they can find. But I admit that a lot of steps are involved in my solution, there’s lot of programming required. However, I decided against publishing an all-inclusive package, because I’d like to add this solution to next release of either the &lt;a href="http://www.codeplex.com/CSModulesRepository"&gt;CSMVP CSModules&lt;/a&gt; or &lt;a href="http://www.codeplex.com/csstuff"&gt;Community Server Stuff&lt;/a&gt;. So either follow my instructions above, wait for an official release, or leverage &lt;a href="http://haacked.com/"&gt;Phil&lt;/a&gt;’s honeypot control which is part of the &lt;a href="http://www.codeplex.com/subkismet"&gt;Subkismet&lt;/a&gt; project (not released yet too, but you can already get the sources.)&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=40205" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=XLAsAJs7"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=XLAsAJs7" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=czDt0IkZ"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=czDt0IkZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=Wl9tEZU7"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=Wl9tEZU7" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=4QsWnGJU"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=4QsWnGJU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=ipPUtFEu"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=ipPUtFEu" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/157759149" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F09%2F17%2Fhoneypot-captcha-for-community-server.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/09/17/honeypot-captcha-for-community-server.aspx</feedburner:origLink></item><item><title>nrw07 Slides</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/154706538/nrw07-slides.aspx</link><category>Community Server</category><category>nrw07</category><category>Conference</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Mon, 10 Sep 2007 14:00:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/09/10/nrw07-slides.aspx</guid><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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=v4qkVyUO"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=v4qkVyUO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=vwKn28yc"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=vwKn28yc" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=J1WhD0Pi"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=J1WhD0Pi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=xHlXGxWi"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=xHlXGxWi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=wvubWbYh"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=wvubWbYh" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/154706538" height="1" width="1"/&gt;</description><enclosure url="/files/folders/39452/download.aspx" length="2914489" type="application/octet-stream" /><media:content url="/files/folders/39452/download.aspx" fileSize="2914489" type="application/octet-stream" /><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F09%2F10%2Fnrw07-slides.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/09/10/nrw07-slides.aspx</feedburner:origLink></item><item><title>Deflowered twice on one day at nrw07</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/150276869/nrw07-follow-up.aspx</link><category>Community Server</category><category>User Group</category><category>Community</category><category>nrw07</category><category>Conference</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Thu, 30 Aug 2007 16:28:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/08/30/nrw07-follow-up.aspx</guid><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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=NtNfD2TC"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=NtNfD2TC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=k9DomfR5"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=k9DomfR5" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=anI5MEna"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=anI5MEna" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=2MrK2zyq"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=2MrK2zyq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=8JetBgIp"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=8JetBgIp" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/150276869" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F08%2F30%2Fnrw07-follow-up.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/08/30/nrw07-follow-up.aspx</feedburner:origLink></item><item><title>ReSharper 3.0 Released</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/126841248/resharper-3-0-released.aspx</link><category>Development</category><category>Tools</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Thu, 21 Jun 2007 17:26:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/06/22/resharper-3-0-released.aspx</guid><description>&lt;p&gt;&lt;a href="http://blogs.jetbrains.com/dotnet/2007/06/come-one-come-all-resharper-30-is-here/"&gt;JetBrains released ReSharper 3.0&lt;/a&gt;:&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;ReSharper 3.0 is finally out and it’s better than ever. C#, VB.NET, XML, XAML or 
ASP.NET - we got it all for you right here!&lt;/p&gt;&lt;p&gt;You simply owe it to yourself 
to test-drive this baby and learn a whole new way to code in Visual 
Studio!&lt;/p&gt;&lt;p&gt;Get the dirty low-down on ReSharper 3.0 at &lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html"&gt;New 
Features&lt;/a&gt; or use one of the links below:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html#Productivity_Enhancers"&gt;In-depth 
code analysis for C# code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html#vbImprovements"&gt;New 
productivity enhancers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper/features/cross-language.html"&gt;Full-featured 
Visual Basic .NET support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html#XML_and_XAML_Support"&gt;Cross-language 
functionality&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper/features/newfeatures.html#XML_and_XAML_Support"&gt;XML 
and XAML support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Grab a free 30-day evaluation of ReSharper at &lt;a href="http://www.jetbrains.com/resharper/download/index.html"&gt;http://www.jetbrains.com/resharper/download/index.html&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=32139" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=027sMlI3"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=027sMlI3" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=8dON1Tpk"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=8dON1Tpk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=eFSunfw4"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=eFSunfw4" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=WH9dMdSV"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=WH9dMdSV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=iRktAseS"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=iRktAseS" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/126841248" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F06%2F22%2Fresharper-3-0-released.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/06/22/resharper-3-0-released.aspx</feedburner:origLink></item><item><title>Twitter Publisher for CruiseControl.NET</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/125630872/twitter-publisher-for-cruisecontrol-net.aspx</link><category>Development</category><category>ccnet</category><category>Twitter</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Sun, 17 Jun 2007 16:09:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/06/17/twitter-publisher-for-cruisecontrol-net.aspx</guid><description>&lt;p&gt;Some weeks ago &lt;a href="http://thomasfreudenberg.com/blog/archive/2007/04/29/blog-publisher-for-cruisecontrol-net.aspx"&gt;I posted a CC.NET&lt;/a&gt; task which pushes build results to a blog using the MetaWeblogAPI. This might be a feasable solution for projects which sources aren’t updated that often. Otherwise that blog would be really cluttered, and you won’t be able to keep track of all the build results.&lt;/p&gt;
&lt;p&gt;Several month ago a new social networking site started called &lt;a href="http://twitter.com/" title="Twitter"&gt;Twitter&lt;/a&gt;. It offers a kind of micro-blogging service, allowing its users to send text-only stati, up to 140 characters long. Whenever you update your status, it is delivered instantly to other users who have put you to their “friends” list. Though you can receive the updates of your friends via an RSS feed, it is more common to either use Twitter’s website or a desktop client such as &lt;a href="http://www.teletwitter.com/"&gt;TeleTwitter&lt;/a&gt;. Additionally, Twitter offers a &lt;a href="http://en.wikipedia.org/wiki/RESTful"&gt;RESTful&lt;/a&gt; API.&lt;/p&gt;
&lt;p&gt;Therefore it was pretty obvious to write a CC.NET task which announces new build results on Twitter. The project manager creates a special Twitter account and configures CC.NET to post build results as updates for that user. The developers then just have to add that user to their friend list, and will get the announcements in the Twitter front-end of their choice.&lt;/p&gt;
&lt;p&gt;The &lt;a href="/files/folders/31809/download.aspx"&gt;attached ZIP file&lt;/a&gt; contains both the sources and the compiled assembly, which you have to dump into CC.NET’s &lt;span style="font-style:italic;"&gt;server&lt;/span&gt; directory. The configuration of the task is pretty easy, just specify the user and the password of the Twitter account.&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;publishers&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;twitter&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;user&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;username&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;user&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;password&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;password&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;password&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;twitter&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=31811" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=APxQcRHN"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=APxQcRHN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=rWSFZO1t"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=rWSFZO1t" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=AhbRxfiG"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=AhbRxfiG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=owctud2f"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=owctud2f" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=LPPmKMIh"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=LPPmKMIh" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/125630872" height="1" width="1"/&gt;</description><enclosure url="/files/folders/31809/download.aspx" length="135429" type="application/octet-stream" /><media:content url="/files/folders/31809/download.aspx" fileSize="135429" type="application/octet-stream" /><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F06%2F17%2Ftwitter-publisher-for-cruisecontrol-net.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/06/17/twitter-publisher-for-cruisecontrol-net.aspx</feedburner:origLink></item><item><title>CommunityServer MVPs CSModules Pack for CS2007 released</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/116658788/communityserver-mvps-csmodules-pack-for-cs2007-released.aspx</link><category>Community Server</category><category>Akismet</category><category>CSMVPs</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Mon, 14 May 2007 13:56:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/05/14/communityserver-mvps-csmodules-pack-for-cs2007-released.aspx</guid><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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=PA0MzzUF"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=PA0MzzUF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=CvWO79dJ"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=CvWO79dJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=CSfls2nP"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=CSfls2nP" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=kdI3A5Os"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=kdI3A5Os" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=gewaNfyP"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=gewaNfyP" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/116658788" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F05%2F14%2Fcommunityserver-mvps-csmodules-pack-for-cs2007-released.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/05/14/communityserver-mvps-csmodules-pack-for-cs2007-released.aspx</feedburner:origLink></item><item><title>Blog Publisher for CruiseControl.NET</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/112916384/blog-publisher-for-cruisecontrol-net.aspx</link><category>Development</category><category>MetaWeblogApi</category><category>ccnet</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Sun, 29 Apr 2007 12:47:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/04/29/blog-publisher-for-cruisecontrol-net.aspx</guid><description>&lt;p&gt;Some time ago I wrote a blog publisher for &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET&lt;/a&gt;, but didn&amp;#39;t manage to blog about it. In fact, it totally slipped my mind. However, my machine behaves more and more weird lately, so I started to clean up the hard disks and back up all my data. So today it happened that I stumbled over my old blog publisher and finally posted it here.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Background: CruiseControl.NET (CC.NET) is a &lt;a href="http://en.wikipedia.org/wiki/continuous%20integration"&gt;continuous integration&lt;/a&gt; server for .NET. Publishers are tasks that are executed by CC.NET after a build is done, and are primarily used to report the build results, e.g. by sending emails.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;There are instructions on &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Custom+Builder+Plug-in"&gt;how to write your own publisher&lt;/a&gt; available, so I created one which posts the build results to a blog. It stood to reason to access the blog using &lt;a href="http://en.wikipedia.org/wiki/MetaWeblog"&gt;MetaWeblog&lt;/a&gt; API. Fortunately,&amp;nbsp;&lt;a href="http://www.cookcomputing.com/blog/index.html"&gt;Charles Cook&lt;/a&gt; wrote  the &lt;a href="http://www.xml-rpc.net/"&gt;XML-RPC.NET&lt;/a&gt; library, so my publisher degenerated to a simple gateway &lt;img src="http://thomasfreudenberg.com/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/p&gt;
&lt;p&gt;The installation is simple: just drop the assemblies from the &lt;a href="/files/folders/28234/download.aspx"&gt;ZIP file&lt;/a&gt; to the &lt;span style="font-style:italic;"&gt;server&lt;/span&gt; folder of CC.NET and restart the server. CC.NET uses a fixed naming scheme to find all extensions, that&amp;#39;s why the assembly has that weird name &lt;span style="font-style:italic;"&gt;ccnet.BlogPublisher.plugin&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;The minimal configuration just takes details required to access a particular blog:&lt;/p&gt;
&lt;p&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;publishers&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;url&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;a&lt;/span&gt; &lt;span style="color:#FF0000"&gt;href&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;http://localhost/MetaWeblog&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;class&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;linkification-ext&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;title&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Linkification: http://localhost/MetaWeblog&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;http://localhost/MetaWeblog&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;a&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt; url&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;url&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;blog&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;username&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;username&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;username&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;password&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;password&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;password&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&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;With this configuration the publisher uses the default XSL files to transform the build results before posting them. But if you want to change the content of the blog post, you can specify which XSL files sould be used. Additionally you can specify categories for the post:&lt;/p&gt;
&lt;p&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;publishers&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;...
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;url&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;a&lt;/span&gt; &lt;span style="color:#FF0000"&gt;href&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;http://localhost/MetaWeblog&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;class&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;linkification-ext&amp;quot;&lt;/span&gt; &lt;span style="color:#FF0000"&gt;title&lt;/span&gt;=&lt;span style="color:#0000FF"&gt;&amp;quot;Linkification: http://localhost/MetaWeblog&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;http://localhost/MetaWeblog&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;a&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt; url&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;url&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;blog&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;username&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;username&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;username&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;password&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;password&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;password&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;categories&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;category&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;category 1&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;category&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;category&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;category 2&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;category&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;categories&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFiles&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFile&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;xsl\header.xsl&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFile&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFile&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;xsl\modifications.xsl&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFile&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFile&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;xsl\msbuild2ccnet.xsl&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFile&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;xslFiles&lt;/span&gt;&lt;span style="color:#0000FF"&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:#0000FF"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000"&gt;blog&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;The assembly is built with .NET 2.0, but it shouldn&amp;#39;t be too difficult to change that. I even put the .NET 1.1 version of XML-RPC.NET into the ZIP file.&lt;br /&gt;&lt;/p&gt;
&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=28236" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=zKWxPyiZ"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=zKWxPyiZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=UT8X0dPU"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=UT8X0dPU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=YsTFUMPE"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=YsTFUMPE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=CbO3OS59"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=CbO3OS59" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=qV6fymK0"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=qV6fymK0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/112916384" height="1" width="1"/&gt;</description><enclosure url="/files/folders/28234/download.aspx" length="262717" type="application/octet-stream" /><media:content url="/files/folders/28234/download.aspx" fileSize="262717" type="application/octet-stream" /><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F04%2F29%2Fblog-publisher-for-cruisecontrol-net.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/04/29/blog-publisher-for-cruisecontrol-net.aspx</feedburner:origLink></item><item><title>CAPTCHA for CommunityServer 2007</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/112901864/captcha-for-communityserver-2007.aspx</link><category>Site news</category><category>Community Server</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Sun, 29 Apr 2007 11:50:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/04/29/captcha-for-communityserver-2007.aspx</guid><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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=uFXgyIMX"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=uFXgyIMX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=Pa0TJNUs"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=Pa0TJNUs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=pYHqucnZ"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=pYHqucnZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=hArn2lJq"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=hArn2lJq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=T5M2CHSQ"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=T5M2CHSQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/112901864" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F04%2F29%2Fcaptcha-for-communityserver-2007.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/04/29/captcha-for-communityserver-2007.aspx</feedburner:origLink></item><item><title>nrw07 - Solution.Technology.Community</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/112661629/nrw07-solution-technology-community.aspx</link><category>User Group</category><category>Community</category><category>nrw07</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Sat, 28 Apr 2007 07:20:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/04/28/nrw07-solution-technology-community.aspx</guid><description>&lt;p&gt;&lt;a href="http://nrw07.de/" title="nrw07"&gt;&lt;img src="http://nrw07.de/images/dabeirmini.png" title="nrw07" alt="nrw07" align="left" border="0" height="100" hspace="8" width="100" /&gt;&lt;/a&gt;Mark August 24th 2007 in your calendar. On that date we (&lt;a href="http://justcommunity.de/"&gt;Just Community e.V.&lt;/a&gt;) stage &lt;a href="http://nrw07.de" style="font-weight:bold;"&gt;nrw07&lt;/a&gt;, the largest community event 2007 in North Rhine-Westphalia.&lt;/p&gt;&lt;p&gt;This year it will take place in &lt;a href="http://www.dieboerse-wtal.de/"&gt;Die Börse&lt;/a&gt; in Wuppertal.&lt;/p&gt;&lt;p&gt;List of Speaker and agenda are not finished yet, but we&amp;#39;ll promise it will be a top-class conference.&lt;/p&gt;&lt;p&gt;Don&amp;#39;t miss it!&amp;nbsp;&lt;/p&gt;&lt;img src="http://thomasfreudenberg.com/aggbug.aspx?PostID=28203" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=kZiRTJGb"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=kZiRTJGb" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=E3FERL5C"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=E3FERL5C" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=jfzDRPt0"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=jfzDRPt0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=3xEjd4nb"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=3xEjd4nb" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=56NXz7NH"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=56NXz7NH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/112661629" height="1" width="1"/&gt;</description><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F04%2F28%2Fnrw07-solution-technology-community.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/04/28/nrw07-solution-technology-community.aspx</feedburner:origLink></item><item><title>coComment for CS 2007 updated</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/111666356/cocomment-for-cs-2007-updated.aspx</link><category>Community Server</category><category>coComment</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Tue, 24 Apr 2007 15:09:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/04/24/cocomment-for-cs-2007-updated.aspx</guid><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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=0UDp6QCp"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=0UDp6QCp" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=j2bGko7V"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=j2bGko7V" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=frM8xJOC"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=frM8xJOC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=FABJaXUF"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=FABJaXUF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=mKiBKyr0"&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?i=mKiBKyr0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~4/111666356" height="1" width="1"/&gt;</description><enclosure url="http://thomasfreudenberg.com/blog/attachment/28125.ashx" length="303104" type="application/x-msdownload" /><media:content url="http://thomasfreudenberg.com/blog/attachment/28125.ashx" fileSize="303104" type="application/x-msdownload" /><feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=ThomasFreudenberg&amp;itemurl=http%3A%2F%2Fthomasfreudenberg.com%2Fblog%2Farchive%2F2007%2F04%2F24%2Fcocomment-for-cs-2007-updated.aspx</feedburner:awareness><feedburner:origLink>http://thomasfreudenberg.com/blog/archive/2007/04/24/cocomment-for-cs-2007-updated.aspx</feedburner:origLink></item><item><title>coComment support for CS 2007</title><link>http://feeds.thomasfreudenberg.com/~r/ThomasFreudenberg/~3/111407198/cocomment-support-for-cs-2007.aspx</link><category>Community Server</category><category>Development</category><category>coComment</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Thomas Freudenberg</dc:creator><pubDate>Mon, 23 Apr 2007 16:34:00 -0500</pubDate><guid isPermaLink="false">http://thomasfreudenberg.com/blog/archive/2007/04/23/cocomment-support-for-cs-2007.aspx</guid><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;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.thomasfreudenberg.com/~f/ThomasFreudenberg?a=658GTJSd"&gt;&lt;img src="http