<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://diggersolutions.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>The Hounshells' Website</title><link>http://diggersolutions.com/blogs/</link><description>This is the website for the Hounshell family (Dan, Dawn, Jared, and Regan) of Monroe, OH.</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Real-time code reviews with CommitMonitor</title><link>http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx</link><pubDate>Sat, 13 Dec 2008 06:42:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10375</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;After reading &lt;A href="http://arcware.net/commitmonitor/" target=_blank mce_href="http://arcware.net/commitmonitor/"&gt;DaveD’s blog post about using CommitMonitor&lt;/A&gt; back in March I downloaded it and have been using it since. &lt;A href="http://tools.tortoisesvn.net/CommitMonitor" target=_blank mce_href="http://tools.tortoisesvn.net/CommitMonitor"&gt;CommitMonitor&lt;/A&gt; is a small tool that lives in your system tray that monitors SVN repositories for new commits. Up until recently, as part of a large dev team (for us) on a large project I used it to just keep an eye on the codebase to have a general idea what was happening. But today I realized that my usage has changed quite a bit and that I use it every day (multiple time per day mostly), really depend on it, and that it has really transformed my development process.&lt;/P&gt;
&lt;P&gt;When I’m between tasks and see a notification that a new commit has been made I open up CommitMonitor and check out the details:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://danhounshell.com/blogs/dan/CropperCapture%5B129%5D_5A86BCD6.jpg" mce_href="http://danhounshell.com/blogs/dan/CropperCapture%5B129%5D_5A86BCD6.jpg"&gt;&lt;IMG title=CropperCapture[129] style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=381 alt=CropperCapture[129] src="http://danhounshell.com/blogs/dan/CropperCapture%5B129%5D_thumb_54CE33E1.jpg" width=504 border=0 mce_src="http://danhounshell.com/blogs/dan/CropperCapture%5B129%5D_thumb_54CE33E1.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;If I see a check-in that I’ve been waiting for or something that looks suspicious I can easily and quickly open up the files and view the changes right from the application with a couple of clicks. I’ve got it setup to use Tortoise-SVN, which in turn I have setup to use WinMerge for diffs. Without browsing through my file system or firing up Visual Studio I can do a quick check. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://danhounshell.com/blogs/dan/CropperCapture%5B130%5D_142E7823.jpg" mce_href="http://danhounshell.com/blogs/dan/CropperCapture%5B130%5D_142E7823.jpg"&gt;&lt;IMG title=CropperCapture[130] style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=380 alt=CropperCapture[130] src="http://danhounshell.com/blogs/dan/CropperCapture%5B130%5D_thumb_0E75EF2E.jpg" width=504 border=0 mce_src="http://danhounshell.com/blogs/dan/CropperCapture%5B130%5D_thumb_0E75EF2E.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;More importantly for me, this doesn’t require me to set aside a specific time to review check-ins each day or to actively search them out. I can take a few minutes right then and there and then not have to worry about it again. Additionally it helps me keep track of which checkins that I have and haven't reviewed&amp;nbsp;- the ones in bold in the top image have not been reviewed yet. &lt;/P&gt;
&lt;P&gt;Yes, our CI process publishes build reports and sends out emails – so I could find all the information to get me started in those. But, truthfully, I’m subscribed to so many project builds and get so many build emails that they’re just filed away into folders and I never see them again. The only ones I end up really paying any attention to are failed builds. It would probably take me 3x the amount of time to hunt those emails down, review them, then go back to Tortoise-SVN or Visual Studio and hunt down the files, diff them, etc. YMMV and you may be better off scheduling an hour at the beginning or end of your day to review the latest commits. Personally I’m not that structured and I think that I am more efficient with reviewing them as they come in. &lt;/P&gt;
&lt;P&gt;If you’re using Subversion and work as part of a team with more members than just you, you should check out &lt;A href="http://tools.tortoisesvn.net/CommitMonitor" target=_blank mce_href="http://tools.tortoisesvn.net/CommitMonitor"&gt;CommitMonitor&lt;/A&gt;. If you’re leading a team or a project and are finding it difficult to set aside time to review recent commits then you owe it to yourself to definitely check it out!&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx&amp;amp;;subject=Real-time+code+reviews+with+CommitMonitor" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx&amp;amp;;title=Real-time+code+reviews+with+CommitMonitor" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx&amp;amp;;title=Real-time+code+reviews+with+CommitMonitor" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx&amp;amp;;title=Real-time+code+reviews+with+CommitMonitor&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/real-time-code-reviews-with-commitmonitor.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10375" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Subversion/default.aspx">Subversion</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/TortoiseSVN/default.aspx">TortoiseSVN</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/CommitMonitor/default.aspx">CommitMonitor</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/SVN/default.aspx">SVN</category></item><item><title>What are people saying about me?</title><link>http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx</link><pubDate>Sat, 13 Dec 2008 06:01:15 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10374</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I was catching up on some blog posts this evening and one of them sparked an interest in sharing. &lt;/p&gt;  &lt;p&gt;Earlier this year a couple of other devs and I were gathered around talking to &lt;a title="Jeff Blankenburg" href="http://www.jeffblankenburg.info" target="_blank"&gt;Jeff Blankenburg&lt;/a&gt; while he was cleaning up after doing a presentation for a .NET user group. During our discussion he popped up something like this on his computer screen (well, with his name instead of mine):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://danhounshell.com/blogs/dan/CropperCapture%5B128%5D_69C45378.jpg"&gt;&lt;img title="CropperCapture[128]" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="274" alt="CropperCapture[128]" src="http://danhounshell.com/blogs/dan/CropperCapture%5B128%5D_thumb_7D73CDBD.jpg" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;He said something like “you guys don’t use Google alerts?” and after the only thing we returned was blank stares he went on to explain how &lt;a title="Google Alerts" href="http://www.google.com/alerts/" target="_blank"&gt;Google Alerts&lt;/a&gt; works. Basically you define some terms you want to watch and then Google send you an email when it finds a reference to them. Jeff explained that he likes to use it to track mentions of his name or projects that he’s working on or that he’s interested in. &lt;/p&gt;  &lt;p&gt;At the time I thought to myself “I’m not an MS evangelist and I don’t do marketing so what would I need to track?”. On my drive home I realized my initial reaction was wrong. I am in the marketing biz. We’re all in the marketing business – marketing ourselves at the very least. I also blog about the company I work for, the products I work on, my team, my own creations, etc. &lt;/p&gt;  &lt;p&gt;Since that time I’ve been using Google Alerts to follow my name and some of my web sites. Being able to read and respond to those references has been a tremendous experience. After doing a presentation at a Day of .NET event I found a blog post a few days later where an attendee of my session said that the material was good and he learned a lot. Awesome! I’ve also used it to leave “Thank you, glad you liked it” comments on blogs that mentioned finding the &lt;a href="http://aspdotnetmvc.com/" target="_blank"&gt;AspDotNetMVC&lt;/a&gt; site and saying that it was a good resource. In fact, one blogger mentioned that the main RSS feed of the site provided way too much information and he had to unsubscribe after a couple of days. As a direct result of reading this feedback I created a second feed for the site that included a lot less “noise” and responded back in a comment to the original blog post that I had done so. &lt;/p&gt;  &lt;p&gt;Along with Google Alerts, Jeff provides some other great tips in his &lt;a href="http://www.jeffblankenburg.com/2008/10/7-steps-to-shameless-successful-self.aspx" target="_blank"&gt;Seven Steps to (Shameless) Self Promotion&lt;/a&gt; post. It’s definitely worth checking out. Thanks for the reminder about personal business cards, Jeff. I ran out a couple of months ago and need to re-order. &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx&amp;amp;;subject=What+are+people+saying+about+me%3f" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx&amp;amp;;title=What+are+people+saying+about+me%3f" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx&amp;amp;;title=What+are+people+saying+about+me%3f" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx&amp;amp;;title=What+are+people+saying+about+me%3f&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/12/13/what-are-people-saying-about-me.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10374" width="1" height="1"&gt;</description></item><item><title>Looking at ASP.NET MVC – following my own lead</title><link>http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx</link><pubDate>Mon, 24 Nov 2008 20:53:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10333</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;Several months ago &lt;A href="http://danhounshell.com/blogs/dan/archive/2008/07/08/aspdotnetmvc-com.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/07/08/aspdotnetmvc-com.aspx"&gt;I posted about one of my newest sites&lt;/A&gt;, &lt;A title=ASPDotNetMVC.com href="http://aspdotnetmvc.com/" target=_blank mce_href="http://aspdotnetmvc.com/"&gt;ASPDotNetMVC.com&lt;/A&gt;. One of the main reasons for creating the site was for my own selfish purposes. I had begun digging into ASP.NET MVC and I wanted a site that aggregated all the good ASP.NET MVC news and blog posts so I could keep up to date. Since that time I’ve done a lot of reading but little doing, other than a side trip with &lt;A title=Kigg href="http://www.codeplex.com/Kigg" target=_blank mce_href="http://www.codeplex.com/Kigg"&gt;Kigg&lt;/A&gt;, a Digg clone written with ASP.NET MVC (&lt;A href="http://danhounshell.com/blogs/dan/archive/2008/06/21/upgrading-kigg-to-asp-net-mvc-preview-3.aspx" target=_blank mce_href="http://danhounshell.com/blogs/dan/archive/2008/06/21/upgrading-kigg-to-asp-net-mvc-preview-3.aspx"&gt;Upgrading Kigg to ASP.NET MVC Preview 3&lt;/A&gt;, &lt;A title="How to decouple the ASP.NET Membership database from Kigg" href="http://danhounshell.com/blogs/dan/archive/2008/07/14/how-to-decouple-the-asp-net-membership-database-from-kigg.aspx" target=_blank mce_href="http://danhounshell.com/blogs/dan/archive/2008/07/14/how-to-decouple-the-asp-net-membership-database-from-kigg.aspx"&gt;How to decouple the ASP.NET Membership database from Kigg&lt;/A&gt; and &lt;A title="How to use Kigg as a service from another site" href="http://danhounshell.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx" target=_blank mce_href="http://danhounshell.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx"&gt;How to use Kigg as a service from another site&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;This weekend I finally made some time to get my hands dirty. My first task is to convert the ASPDotNetMVC.com site from web forms to ASP.NET MVC. So far things are going well and I’m actually surprised at how quickly it is progressing. In a couple of hours I was able to get the master page setup and convert all of the static pages and content to controllers/views (things like the About page, some of the home page, etc). The next step, which I’m currently in the middle of, is converting the Contact Us form. Then the more difficult parts: converting existing controls, rss feeds, and the dynamic content (the majority of the site!). It’s been a long time since I’ve had to hit Google for nearly every little piece of code that I write. It’s a bit frustrating, but challenging and invigorating at the same time. &lt;/P&gt;
&lt;P&gt;I won’t set a timeline because I don’t know what challenges I will run into yet. I should have time through the holidays to keep plugging away. I’ll be sure to post if I run into anything interesting.&lt;/P&gt;
&lt;P&gt;BTW, I updated my Preview 3 version of Kigg to the ASP.NET MVC Beta bits on Friday night and it was a piece of cake. I just followed the Beta Release Notes instructions for “Upgrading and Existing Preview 3 application to Beta” and things went well. &lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx&amp;amp;;subject=Looking+at+ASP.NET+MVC+%e2%80%93+following+my+own+lead" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx&amp;amp;;title=Looking+at+ASP.NET+MVC+%e2%80%93+following+my+own+lead" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx&amp;amp;;title=Looking+at+ASP.NET+MVC+%e2%80%93+following+my+own+lead" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx&amp;amp;;title=Looking+at+ASP.NET+MVC+%e2%80%93+following+my+own+lead&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/11/24/looking-at-asp-net-mvc-following-my-own-lead.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10333" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Kigg/default.aspx">Kigg</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/AspDotNetMVC.com/default.aspx">AspDotNetMVC.com</category></item><item><title>Can I get a Mulligan on the case order?</title><link>http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx</link><pubDate>Tue, 21 Oct 2008 13:07:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10255</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;This is part 4 in a series about building an Eco-Friendly Economical Windows Home Server. &lt;BR&gt;Part 1: &lt;A href="http://danhounshell.com/blogs/dan/archive/2008/03/27/in-search-of-an-eco-friendly-economical-home-server.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/03/27/in-search-of-an-eco-friendly-economical-home-server.aspx"&gt;In search of an Eco-Friendly Economical Home Server&lt;/A&gt; &lt;BR&gt;Part 2: &lt;A href="http://danhounshell.com/blogs/dan/archive/2008/03/28/in-search-of-an-eco-friendly-economical-home-server-2-electric-boogaloo.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/03/28/in-search-of-an-eco-friendly-economical-home-server-2-electric-boogaloo.aspx"&gt;In search of an Eco-Friendly Economical Home Server 2, Electric Boogaloo&lt;/A&gt; &lt;BR&gt;Part 3: &lt;A href="http://danhounshell.com/blogs/dan/archive/2008/07/07/a-cheap-and-green-windows-home-server.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/07/07/a-cheap-and-green-windows-home-server.aspx"&gt;A Cheap and Green Windows Home Server&lt;/A&gt; &lt;BR&gt;Part 4: &lt;A href="http://danhounshell.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx"&gt;Ordered parts for Eco-friendly Economical Windows Home Server&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;After some post-mortem review of my order I’m feeling some buyer’s remorse. The case that I ordered for my eco-friendly economical Windows Home Server box wasn’t as small as I remembered to be. At 15.4” x 7.1” x 14.8” (HxWxD) it is a little smaller than the case of my Dell Dimension 5150 but it is nowhere near the size of the HP MediaSmart servers at 9.8” x 9.2” x 5.5”. But it was still cheap at $39.99 and free shipping! &lt;/P&gt;
&lt;P&gt;If I were looking for something a little more compact and a little more stylish while still fitting into my budget theme (and if I had a Mulligan) I would probably opt for something more like one of these Athenatech cases: &lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width="100%" border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&amp;nbsp;&lt;A href="http://danhounshell.com/blogs/dan/athenatech_a100sc200_702BDB42.jpg"&gt;&lt;IMG title=athenatech_a100sc200 style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=139 alt=athenatech_a100sc200 src="http://danhounshell.com/blogs/dan/athenatech_a100sc200_thumb_08BB7893.jpg" width=184 border=0&gt;&lt;/A&gt; &lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;&lt;A href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811190003"&gt;Athenatech A100SC.200 Black/ Silver Steel MicroATX Desktop Computer Case 230W SFX Power Supply – Retail&lt;/A&gt;&amp;nbsp; &lt;BR&gt;13.5” x 5.8” x 14.5" (HxWxD)&lt;A href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811121039" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811121039"&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top align=right&gt;
&lt;P align=right&gt;$42.99 &lt;BR&gt;Shipping: $11.99&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;A href="http://danhounshell.com/blogs/dan/athenatech_A100bb270_12173DC7.jpg"&gt;&lt;IMG title=athenatech_A100bb270 style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=139 alt=athenatech_A100bb270 src="http://danhounshell.com/blogs/dan/athenatech_A100bb270_thumb_6D85B042.jpg" width=184 border=0&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;&lt;A href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811190057"&gt;Athenatech Black Steel A100BB.270 Micro ATX Media Center / HTPC Case – Retail&lt;/A&gt; &lt;BR&gt;13.5” x 5.8” x 14.5" (HxWxD)&lt;/TD&gt;
&lt;TD class="" vAlign=top align=right&gt;$49.99 &lt;BR&gt;Shipping: $11.99&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;A href="http://danhounshell.com/blogs/dan/athenatech_A106SB_06154D93.jpg"&gt;&lt;IMG title=athenatech_A106SB style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=139 alt=athenatech_A106SB src="http://danhounshell.com/blogs/dan/athenatech_A106SB_thumb_6183C00E.jpg" width=184 border=0&gt;&lt;/A&gt; &lt;/TD&gt;
&lt;TD class="" vAlign=top&gt;
&lt;P&gt;&lt;A href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811190017"&gt;Athenatech Silver/ Black Steel A106SB.200 Micro ATX Media Center / HTPC Case – Retail&lt;/A&gt; &lt;BR&gt;14.5” x 5.8” x 15" (HxWxD)&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top align=right&gt;$62.99 &lt;BR&gt;Shipping: $15.99&amp;nbsp; &lt;BR&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&lt;BR&gt;The A100SC and the A100BB are both 2 inches shorter, more than 1 inch narrower, and about the same depth as the &lt;A href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811121039"&gt;CompuCase 6K28BS&lt;/A&gt; and I think they look a little sleeker, too. Swapping for either of these would increase the build price by $15-$20. The A106SB is not quite as diminutive as the other two but it still comes in 1” shorter and 1” narrower than the CompuCase 6K28BS, but looks a lot nicer for a $35 price increase. Any of these three cases would look just as good set horizontally or vertically. I like the looks and reviews of these cases, I may keep them in mind for a future budget Media Center/HTPC build. Or I might just go ahead and order one of these now for my WHS box and store the previously ordered case for a future project.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx&amp;amp;;subject=Can+I+get+a+Mulligan+on+the+case+order%3f" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx&amp;amp;;title=Can+I+get+a+Mulligan+on+the+case+order%3f" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx&amp;amp;;title=Can+I+get+a+Mulligan+on+the+case+order%3f" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx&amp;amp;;title=Can+I+get+a+Mulligan+on+the+case+order%3f&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/21/can-i-get-a-mulligan-on-the-case-order.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10255" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Windows+Home+Server/default.aspx">Windows Home Server</category></item><item><title>Ordered parts for Eco-friendly Economical Windows Home Server</title><link>http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx</link><pubDate>Sun, 19 Oct 2008 03:33:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10239</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>9</slash:comments><description>&lt;p&gt;This is part 4 in a series about building an Eco-Friendly Economical Windows Home Server. &lt;br&gt;Part 1: &lt;a href="http://danhounshell.com/blogs/dan/archive/2008/03/27/in-search-of-an-eco-friendly-economical-home-server.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/03/27/in-search-of-an-eco-friendly-economical-home-server.aspx"&gt;In search of an Eco-Friendly Economical Home Server&lt;/a&gt; &lt;br&gt;Part 2: &lt;a href="http://danhounshell.com/blogs/dan/archive/2008/03/28/in-search-of-an-eco-friendly-economical-home-server-2-electric-boogaloo.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/03/28/in-search-of-an-eco-friendly-economical-home-server-2-electric-boogaloo.aspx"&gt;In search of an Eco-Friendly Economical Home Server 2, Electric Boogaloo&lt;/a&gt; &lt;br&gt;Part 3: &lt;a href="http://danhounshell.com/blogs/dan/archive/2008/07/07/a-cheap-and-green-windows-home-server.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/07/07/a-cheap-and-green-windows-home-server.aspx"&gt;A Cheap and Green Windows Home Server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What a difference six months makes in the price of run-of-the-mill computer desktop hardware. In my last article the cheapest I could get a decently powerful Home Server setup was for about &lt;b&gt;$470 including shipping&lt;/b&gt;. By the time I added the $149 cost for Windows Home Server I was in the same ballpark as the HP MediaSmart Home Server setups, though it was a little greener and a little more powerful. Still, it didn’t make a lot of sense to go ahead and do the build.&lt;/p&gt;
&lt;p&gt;Fast forward 8 months and with a little tweaking of chosen parts I was able to order a kit with better specs than the $650 version of the HP Home server for &lt;b&gt;just over $300&lt;/b&gt;. That price does not include the cost of WHS itself ($149), but I’ll be enjoying a 120-day eval for a couple of months so I can defer that cost. Even if I included it, though, I’d still be at only $450, which is about $200 less than the similarly spec’d (yet still not as much RAM or CPU and not as green as my setup) &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16859105383" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16859105383"&gt;HP MediaSmart EX 475 at around $650&lt;/a&gt;. At $200 less and better specs the timing is right for me to pull the trigger and do it.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Here are the parts I ordered a few nights ago from NewEgg. I should receive everything this week so I plan on putting it together next weekend and then basking in the wonderfulness that is promised with WHS. &lt;/p&gt;

&lt;table border="0" cellpadding="2" cellspacing="0" width="100%"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&amp;nbsp;&lt;a href="http://danhounshell.com/blogs/dan/hec6k28bs_725C34AD.jpg" mce_href="http://danhounshell.com/blogs/dan/hec6k28bs_725C34AD.jpg"&gt;&lt;img src="http://danhounshell.com/blogs/dan/hec6k28bs_thumb_1FDD5471.jpg" title="http://danhounshell.com/blogs/dan/hec6k28bs_725C34AD.jpg
hec6k28bs" alt="hec6k28bs" mce_src="http://danhounshell.com/blogs/dan/hec6k28bs_thumb_1FDD5471.jpg" border="0" height="139" width="184"&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td valign="top"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811121039" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811121039"&gt;HEC 6K28BS Black / Silver 0.8mm SECC Steel MicroATX Mini Tower Computer Case - Retail&lt;/a&gt;&lt;/td&gt;
&lt;td align="right" valign="top"&gt;
&lt;p align="right"&gt;$42.99 &lt;br&gt;Shipping: $11.99&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;a href="http://danhounshell.com/blogs/dan/antec_earthwatts_380_14479732.jpg" mce_href="http://danhounshell.com/blogs/dan/antec_earthwatts_380_14479732.jpg"&gt;&lt;img src="http://danhounshell.com/blogs/dan/antec_earthwatts_380_thumb_0F64E376.jpg" title="http://danhounshell.com/blogs/dan/antec_earthwatts_380_14479732.jpg
antec_earthwatts_380" alt="antec_earthwatts_380" mce_src="http://danhounshell.com/blogs/dan/antec_earthwatts_380_thumb_0F64E376.jpg" border="0" height="139" width="184"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817371005" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817371005"&gt;Antec earthwatts EA380 380W ATX12V v2.0 80 PLUS Certified Active PFC Power Supply - Retail&lt;/a&gt;&lt;/td&gt;
&lt;td align="right" valign="top"&gt;$29.99&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;a href="http://danhounshell.com/blogs/dan/WDGP500GB_4AB84934.jpg" mce_href="http://danhounshell.com/blogs/dan/WDGP500GB_4AB84934.jpg"&gt;&lt;img src="http://danhounshell.com/blogs/dan/WDGP500GB_thumb_33F901AB.jpg" title="http://danhounshell.com/blogs/dan/WDGP500GB_4AB84934.jpg
WDGP500GB" alt="WDGP500GB" mce_src="http://danhounshell.com/blogs/dan/WDGP500GB_thumb_33F901AB.jpg" border="0" height="157" width="184"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16822136149" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16822136149"&gt;Western Digital Caviar GP WD5000AACS 500GB 5400 to 7200 RPM 16MB Cache SATA 3.0Gb/s Hard Drive&lt;/a&gt; – OEM x 2&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" valign="top"&gt;$64.99 x 2 &lt;br&gt;Free Shipping &lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;a href="http://danhounshell.com/blogs/dan/Kingston1GBDDR2800_5A5AE4F6.jpg" mce_href="http://danhounshell.com/blogs/dan/Kingston1GBDDR2800_5A5AE4F6.jpg"&gt;&lt;img src="http://danhounshell.com/blogs/dan/Kingston1GBDDR2800_thumb_6EE03474.jpg" title="http://danhounshell.com/blogs/dan/Kingston1GBDDR2800_5A5AE4F6.jpg
Kingston1GBDDR2800" alt="Kingston1GBDDR2800" mce_src="http://danhounshell.com/blogs/dan/Kingston1GBDDR2800_thumb_6EE03474.jpg" border="0" height="139" width="184"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820134114" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820134114"&gt;Kingston 1GB 240-Pin DDR2 SDRAM DDR2 800 (PC2 6400) Desktop Memory - Retail&lt;/a&gt;&lt;/td&gt;
&lt;td align="right" valign="top"&gt;$15.49&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;a href="http://danhounshell.com/blogs/dan/AMDAthlonX2BE2400_4A4EA6F0.jpg" mce_href="http://danhounshell.com/blogs/dan/AMDAthlonX2BE2400_4A4EA6F0.jpg"&gt;&lt;img src="http://danhounshell.com/blogs/dan/AMDAthlonX2BE2400_thumb_25BD196C.jpg" title="http://danhounshell.com/blogs/dan/AMDAthlonX2BE2400_4A4EA6F0.jpg
AMDAthlonX2BE2400" alt="AMDAthlonX2BE2400" mce_src="http://danhounshell.com/blogs/dan/AMDAthlonX2BE2400_thumb_25BD196C.jpg" border="0" height="139" width="184"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819103215" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819103215"&gt;AMD Athlon X2 BE-2400 Brisbane 2.3GHz 2 x 512KB L2 Cache Socket AM2 Dual-Core Processor - OEM&lt;/a&gt;&lt;/td&gt;
&lt;td align="right" valign="top"&gt;$39.99 &lt;br&gt;Free Shipping&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;a href="http://danhounshell.com/blogs/dan/MSIK9A2GM-F_6C3A0974.jpg" mce_href="http://danhounshell.com/blogs/dan/MSIK9A2GM-F_6C3A0974.jpg"&gt;&lt;img src="http://danhounshell.com/blogs/dan/MSIK9A2GM-F_thumb_47A87BF0.jpg" title="http://danhounshell.com/blogs/dan/MSIK9A2GM-F_6C3A0974.jpg
MSIK9A2GM-F" alt="MSIK9A2GM-F" mce_src="http://danhounshell.com/blogs/dan/MSIK9A2GM-F_thumb_47A87BF0.jpg" border="0" height="139" width="184"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813130188" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813130188"&gt;MSI K9A2GM-F V3 AM2 AMD 740G Micro ATX AMD Motherboard - Retail&lt;/a&gt;&lt;/td&gt;
&lt;td align="right" valign="top"&gt;$52.99 &lt;br&gt;Open Box: &lt;br&gt;$36.76&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;a href="http://danhounshell.com/blogs/dan/MASSCOOL5f9001b1h3_02FBE1AF.jpg" mce_href="http://danhounshell.com/blogs/dan/MASSCOOL5f9001b1h3_02FBE1AF.jpg"&gt;&lt;img src="http://danhounshell.com/blogs/dan/MASSCOOL5f9001b1h3_thumb_7766246F.jpg" title="http://danhounshell.com/blogs/dan/MASSCOOL5f9001b1h3_02FBE1AF.jpg
MASSCOOL5f9001b1h3" alt="MASSCOOL5f9001b1h3" mce_src="http://danhounshell.com/blogs/dan/MASSCOOL5f9001b1h3_thumb_7766246F.jpg" border="0" height="139" width="184"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16835150087" mce_href="http://www.newegg.com/Product/Product.aspx?Item=N82E16835150087"&gt;MASSCOOL 5F9001B1H3 80mm Ball CPU Cooler - Retail&lt;/a&gt;&lt;/td&gt;
&lt;td align="right" valign="top"&gt;$9.99&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CASE: I wanted a case that was small(ish), looked pretty good, fairly quiet, and could hold 4 internal hard drives. The case I chose has a nice clean look, got good reviews on NewEgg, and it is fairly small: about the same size as the HP MediaSmart boxes. Over the next week I will re-review blog posts and articles I’ve read in the past about building a quiet PC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;POWER SUPPLY: I wanted an 80+ certified power supply in about the 300W range. I had been looking at the 300W Seasonic at about $40. But then I saw the Antec Earthwatts on sale for $30 and I couldn’t pass up the $10 in savings. Plus I’ve read in a couple of places that Seasonic makes those power supplies for Antec. That may or may not be true, but even if it isn’t true the two must be very close in quality for the comparison.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HARD DRIVES: I’m sold on the Western Digital Green Power drives for this application. I got two 500GB drives at $65 each. These things were over a hundred dollars each 8 months ago. With the price of the 1TB versions at just $129 I came very close to going with two of those instead. Personally I would have done that, but the WAF (Wife Acceptance Factor) played a big part in that specific decision. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RAM: The HP WHS boxes come with just 512MB of RAM, even the higher end box with 1TB of drives, so I figured that is a good place to start with my setup. I could have gone with 2GB of RAM here for $30, but I figure that 1GB is good enough for now and if the box needs more I can easily and cheaply add another 1GB stick later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CPU: I think that the AMD Athlon X2 BE-2400 may be the perfect CPU for this setup. It is 2.3 GHz, dual core, 512KB L2 Cache AND it’s rated at 45W – the same as the AMD single core processers. Plus it was only $40! So basically for the same price and footprint as a single core 1.8 GHz Sempron (like what is in the HP boxes) I was able to go with faster dual cores and more L2 cache. That is a no-brainer!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MOTHERBOARD: The minimum specs that I wanted for a board were MicroATX, AM2 processor, 4 SATAII connectors, support for at least 4GB of RAM, onboard Gigabit Ethernet, and lots of USB connectors. I chose the cheapest name-brand board that met those requirements and had good reviews. I was also lucky(?) enough to find an open-box version for $15 less. The jury is still out on whether the open box version was a good choice – I’ll let you know the answer to that after I assemble and make sure it isn’t DOA.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CPU COOLER: Since I ordered an OEM CPU it doesn’t come with a cooler. I chose one similar to the OEM style that was cheap and got good reviews. It should meet my needs fine. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;OTHER: The reviews I read about the HEC/Compucase case that I selected said that the rear case fan was sufficient and rather quiet (surprising for one that’s included in a case) so I’ll delay purchasing any additional or replacement case fans for now.&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The total price for everything that I ordered was right about $310 (I added 2 SATA cables that I may or may not need) and was about $330 after shipping. Had I not added the SATA cables and gone with an AMD single-core Sempron (saving $10) the total price including shipping would have been right around $300. &lt;/p&gt;
&lt;p&gt;I’m very pleased with the parts and the value. Hopefully I’ll be just as pleased with the end result. I plan a follow up with notes on the build after next weekend. &lt;/p&gt;
&lt;p&gt;I’m excited. I cannot wait for the BBT (Big Brown Truck) to show up at the door with my box(es) of parts. &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx&amp;amp;;subject=Ordered+parts+for+Eco-friendly+Economical+Windows+Home+Server" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx&amp;amp;;title=Ordered+parts+for+Eco-friendly+Economical+Windows+Home+Server" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx&amp;amp;;title=Ordered+parts+for+Eco-friendly+Economical+Windows+Home+Server" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx&amp;amp;;title=Ordered+parts+for+Eco-friendly+Economical+Windows+Home+Server&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/18/ordered-parts-for-eco-friendly-economical-windows-home-server.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10239" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Windows+Home+Server/default.aspx">Windows Home Server</category></item><item><title>Sample OpenID ASP.NET Web Site</title><link>http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx</link><pubDate>Thu, 09 Oct 2008 03:31:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10205</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>12</slash:comments><description>&lt;P mce_keep="true"&gt;A&amp;nbsp;couple of&amp;nbsp;months ago I&amp;nbsp;posted &lt;A class="" title="Add OpenID to your ASP.NET web site" href="http://danhounshell.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx"&gt;how to add OpenID to your existing web site in conjunction with ASP.NET Membership&lt;/A&gt;. In the comments a few times I was asked to post the&amp;nbsp;code to the OpenID login user control or to create a sample project to share. Even though there really isn't a lot to the code other than what I shared in that article I said that I would post the sample code.&amp;nbsp;After &lt;A class="" href="http://weblogs.asp.net/scottgu/archive/2008/10/02/october-2nd-links-asp-net-asp-net-mvc-asp-net-dynamic-data.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2008/10/02/october-2nd-links-asp-net-asp-net-mvc-asp-net-dynamic-data.aspx"&gt;ScottGu linked to&amp;nbsp;my original&amp;nbsp;post&amp;nbsp;last week&lt;/A&gt;&amp;nbsp;I felt compelled to step up the pace of doing so.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Below&amp;nbsp;is a link to&amp;nbsp;the sample solution/project/web application. There is really nothing to the web site itself, just&amp;nbsp;a static home page,&amp;nbsp;a&amp;nbsp;"join" page and a "login" page that use traditional membership controls and the OpenID login user control. Go ahead and check out the code and feel free to use that control and the accompanying utility code&amp;nbsp;in your own projects. Please read the Readme.txt file included in the zip for setup instructions.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://danhounshell.com/files/folders/samples/entry10206.aspx" target=_blank mce_href="http://danhounshell.com/files/folders/samples/entry10206.aspx"&gt;Sample OpenID Web Site&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx&amp;amp;;subject=Sample+OpenID+ASP.NET+Web+Site" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx&amp;amp;;title=Sample+OpenID+ASP.NET+Web+Site" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx&amp;amp;;title=Sample+OpenID+ASP.NET+Web+Site" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx&amp;amp;;title=Sample+OpenID+ASP.NET+Web+Site&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10205" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/OpenID/default.aspx">OpenID</category></item><item><title>Save your Kudos for your Annual Review</title><link>http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx</link><pubDate>Thu, 02 Oct 2008 04:04:06 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10183</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Over the last several years I’ve gotten into the habit of saving any “kudos” emails that get sent to me into a folder with the creative name of “Kudos”. I don’t know where I picked up this habit, but from time to time I’ve shared this tip with others. After letting &lt;a title="Jose" href="http://www.tankete.com/"&gt;Jose&lt;/a&gt; in on my little secret earlier today he suggested that I blog about it and share it with everyone. Good idea, Jose. Hopefully this doesn’t kill my competitive advantage :), but here goes…&lt;/p&gt;  &lt;p&gt;When the occasional email comes in that says “Hey Dan, good work staying up late and making sure that foo got fixed. You really went above and beyond this time. You rock!”, I stash it away into my Kudos folder for safe keeping.&lt;/p&gt;  &lt;p&gt;No, I don’t keep the “atta boy” emails in one place for an easy pick-me-up when I’m feeling like a dummy – though they do help – that and a beer or two or three. I have a more pragmatic reason for keeping them – for easy access come annual review and/or self-evaluation time. Prior to a review I will thumb through them looking for some good examples and evidence that I am indeed a useful employee.&lt;/p&gt;  &lt;p&gt;Because of this evidence rather than just telling my reviewer “I’m a hard worker; I go the extra mile.” and hope he or she takes my word for it, I have proof to back up my claim in the form of a quote or two from those emails. I can then follow up my claim with “… and Willy, your boss, thinks so too – here’s an email I got from him in February where he said so.” Instead of just stopping at saying “I communicate well with others, both co-workers and clients” I can pull a couple of quotes from my stashed emails from a co-worker and a client to support it.&lt;/p&gt;  &lt;p&gt;Saving, organizing, and using “kudos” emails has proven to be a good tool for me come review time. Even if you’re not a traditional employee this can still be useful. As an independent contractor having a repository where you can pull “quotes from satisfied clients” might be valuable. Or as a micro ISV it will give you fodder for that “what people are saying about Product X” spot on your web site. &lt;/p&gt;  &lt;p&gt;Bonus Tip #1: A lot of written conversation these days take place in mediums other than email. Twitter, instant message clients, and LinkedIn are good examples of this. If you get an IM or other message that contains a special “way to go” message, copy and paste it into an email to yourself (along with who it was from, a date/time, and a note about the circumstances) and move it to your Kudos folder so it will be stored along with everything else. &lt;/p&gt;  &lt;p&gt;Bonus Tip #2: The Kudos folder is a good place to store other things besides emails and “atta boy” messages. If I get a good evaluation for a presentation I did at a .NET user group I’ll store the results there. If I write a blog post that shows up on the front page of DotNetKicks I’ll take a screenshot, make a note, and store that in Kudos. If I implement a widget for Client XYZ and they see an immediate 20% increase in traffic I’ll make a note and save that, too. I may not use each and every thing that I put in there for reviews, but if I think it might be useful at some time in the future for some shameful self-promotion I’ll save it. It’s reassuring to know that if I ever feel the need to find some long forgotten piece of information like that I can easily find it in that one folder. &lt;/p&gt;  &lt;p&gt;Good luck. Great Job. Kudos!&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx&amp;amp;;subject=Save+your+Kudos+for+your+Annual+Review" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx&amp;amp;;title=Save+your+Kudos+for+your+Annual+Review" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx&amp;amp;;title=Save+your+Kudos+for+your+Annual+Review" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx&amp;amp;;title=Save+your+Kudos+for+your+Annual+Review&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/10/02/save-your-kudos-for-your-annual-review.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10183" width="1" height="1"&gt;</description></item><item><title>The double dog dare gets me every time!</title><link>http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx</link><pubDate>Mon, 22 Sep 2008 18:17:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10171</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;I wondered when some of these pictures from DevLink would surface. Between the dares and doubts of those who said I couldn't fit into a medium t-shirt - I had to do it. A big "thanks" to &lt;A title="Dave Giard" href="http://www.davidgiard.com/" mce_href="http://www.davidgiard.com/"&gt;Dave Giard&lt;/A&gt; for capturing the moment. Check out the guns! I should have flexed for the pics!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://danhounshell.com/blogs/dan/WindowsLiveWriter/Thedoubledogdaregetsmeeverytime_C869/danh_geekette_2.jpg" mce_href="http://danhounshell.com/blogs/dan/WindowsLiveWriter/Thedoubledogdaregetsmeeverytime_C869/danh_geekette_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=484 alt=danh_geekette src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/Thedoubledogdaregetsmeeverytime_C869/danh_geekette_thumb.jpg" width=470 border=0 mce_src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/Thedoubledogdaregetsmeeverytime_C869/danh_geekette_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx&amp;amp;;subject=The+double+dog+dare+gets+me+every+time!" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx&amp;amp;;title=The+double+dog+dare+gets+me+every+time!" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx&amp;amp;;title=The+double+dog+dare+gets+me+every+time!" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx&amp;amp;;title=The+double+dog+dare+gets+me+every+time!&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/the-double-dog-dare-gets-me-every-time.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10171" width="1" height="1"&gt;</description></item><item><title>Sites for Sale</title><link>http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx</link><pubDate>Mon, 22 Sep 2008 14:11:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10167</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>0</slash:comments><description>&lt;P mce_keep="true"&gt;In an effort to simplify my portfolio I am selling one of my sites and the domain names that go with it. See the full post about the &lt;A class="" title="Sites for Sale" href="http://danhounshell.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx"&gt;sites for sale here&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx&amp;amp;;subject=Sites+for+Sale" target="_blank" title = "Post http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx&amp;amp;;title=Sites+for+Sale" target="_blank" title = "Post http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx&amp;amp;;title=Sites+for+Sale" target="_blank" title = "Post http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx&amp;amp;;title=Sites+for+Sale&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/diggersolutions/archive/2008/09/22/sites-for-sale.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10167" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/diggersolutions/archive/tags/Domain+names/default.aspx">Domain names</category><category domain="http://diggersolutions.com/blogs/diggersolutions/archive/tags/Sale/default.aspx">Sale</category><category domain="http://diggersolutions.com/blogs/diggersolutions/archive/tags/SEO/default.aspx">SEO</category></item><item><title>My cast-offs may be your treasure</title><link>http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx</link><pubDate>Mon, 22 Sep 2008 14:08:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10166</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;As a web developer I like building new web sites, web applications, mashups, widgets, etc. &lt;/P&gt;
&lt;P&gt;Just like most other men I like shiny new toys and sometimes not-so-shiny older toys tend to become less used, become a little rusty and maybe even feel a little unloved. &lt;/P&gt;
&lt;P&gt;If I were able to find a way to graph those two statements we'd see that their intersection occurs at about 9-12 months and afterwards usage drops off dramatically. By that time I've moved on to the next shiny new toy - I've already started working on a new personal project. I like building sites but I don't necessarily like running them over the long haul.&lt;/P&gt;
&lt;P&gt;If you're not afflicted with this disease, are interested in leveraging social networking sites or just looking for a good domain name investment or an SEO investment then I have a deal for you. In an effort to simplify my portfolio I am selling the following domains/site(s):&lt;/P&gt;
&lt;P&gt;&lt;A title=RandomTweets.com href="http://randomtweets.com/" mce_href="http://randomtweets.com"&gt;RandomTweets.com&lt;/A&gt; (&lt;A title="Google Page Rank = 4" href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandomtweets.com" mce_href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandomtweets.com"&gt;Google Page Rank = 4&lt;/A&gt;)&lt;BR&gt;&lt;A title=RandomTwitter.com href="http://randomtwitter.com/" mce_href="http://randomtwitter.com"&gt;RandomTwitter.com&lt;/A&gt; - redirects to RandomTweets.com&lt;BR&gt;&lt;A title=RandomTwits.com href="http://randomtwits.com/" mce_href="http://randomtwits.com"&gt;RandomTwits.com&lt;/A&gt; - redirects to RandomTweets.com&lt;BR&gt;&lt;BR&gt;&lt;A title=RandomJaikus.com href="http://randomjaikus.com/" mce_href="http://randomjaikus.com"&gt;RandomJaikus.com&lt;/A&gt; (&lt;A title="Google Page Rank = 4" href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandomjaikus.com" mce_href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandomjaikus.com"&gt;Google Page Rank = 4&lt;/A&gt;)&lt;BR&gt;&lt;A title=RandomJaiku.com href="http://randomjaiku.com/" mce_href="http://randomjaiku.com"&gt;RandomJaiku.com&lt;/A&gt; - redirects to RandomJaikus.com&lt;BR&gt;&lt;BR&gt;&lt;A title=RandomPownce.com href="http://randompownce.com/" mce_href="http://randompownce.com"&gt;RandomPownce.com&lt;/A&gt; (&lt;A title="Google Page Rank = 4" href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandompownce.com" mce_href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandompownce.com"&gt;Google Page Rank = 4&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;&lt;A title=RandomFlickr.com href="http://randomflickr.com/" mce_href="http://randomflickr.com"&gt;RandomFlickr.com&lt;/A&gt; (&lt;A title="Google Page Rank = 3" href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandomflickr.com" mce_href="http://www.pageranktool.net/google_pr.php?url=http%3A%2F%2Frandomflickr.com"&gt;Google Page Rank = 3&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;The domains, the sites, all source code, etc. will be included - you will have to find your own hosting. I do not plan on splitting them up unless someone makes me an offer I cannot refuse, but I will consider offers for just the domain names themselves (all of them together). Offers for the entire kit will be considered before offers for just the domain names. &lt;/P&gt;
&lt;P&gt;For more information about the sites, the code, the domains for sale, traffic history, etc. or to make an offer &lt;A href="http://danhounshell.com/blogs/dan/contact.aspx" mce_href="http://danhounshell.com/blogs/dan/contact.aspx"&gt;contact me through my site&lt;/A&gt; or email me at: sites4sale AT danhounshell.com.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx&amp;amp;;subject=My+cast-offs+may+be+your+treasure" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx&amp;amp;;title=My+cast-offs+may+be+your+treasure" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx&amp;amp;;title=My+cast-offs+may+be+your+treasure" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx&amp;amp;;title=My+cast-offs+may+be+your+treasure&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/22/my-cast-offs-may-be-your-treasure.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10166" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/SEO/default.aspx">SEO</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Domain+Names/default.aspx">Domain Names</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Sale/default.aspx">Sale</category></item><item><title>Telligent Wants You!</title><link>http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx</link><pubDate>Tue, 02 Sep 2008 18:55:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10125</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;I joined Telligent nearly two years ago. Over that time we've grown nearly threefold and we're still growing and going strong. &lt;/P&gt;
&lt;P&gt;&lt;A title="Scott W" href="http://simpable.com/code/senior-developer-positions/" mce_href="http://simpable.com/code/senior-developer-positions/"&gt;Scott W&lt;/A&gt;, &lt;A title="Rob Howard" href="http://grokable.com/telligent-is-still-hiring/" mce_href="http://grokable.com/telligent-is-still-hiring/"&gt;Rob Howard&lt;/A&gt;, &lt;A title="Dave D" href="http://arcware.net/archive/2008/08/31/Why-Dont-You-Work-for-Telligent.aspx" mce_href="http://arcware.net/archive/2008/08/31/Why-Dont-You-Work-for-Telligent.aspx"&gt;Dave Donaldson&lt;/A&gt;, &lt;A title="David Penton" href="http://pentonizer.com/business/telligent-and-your-future/" mce_href="http://pentonizer.com/business/telligent-and-your-future/"&gt;the Pentonizer&lt;/A&gt; and others have already said it but it bears repeating... We need more great developers! We want to do some really great things in the next version of Community Server, but we need more people to help make them happen. &lt;A title="What we're looking for" href="http://simpable.com/code/senior-developer-positions/" mce_href="http://simpable.com/code/senior-developer-positions/"&gt;Check out Scott's post for the skills we are looking for&lt;/A&gt;. If you fit the bill then we want to hear from you.&lt;/P&gt;
&lt;P&gt;Do you want to become a member of the Telligent team? Give me a shout at &lt;A href="mailto:dhounshell@telligent.com" mce_href="mailto:dhounshell@telligent.com"&gt;dhounshell@telligent.com&lt;/A&gt;.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx&amp;amp;;subject=Telligent+Wants+You!" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx&amp;amp;;title=Telligent+Wants+You!" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx&amp;amp;;title=Telligent+Wants+You!" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx&amp;amp;;title=Telligent+Wants+You!&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/09/02/telligent-wants-you.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10125" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Telligent/default.aspx">Telligent</category></item><item><title>One Thought: Why Regional Conferences + Open Spaces Rock</title><link>http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx</link><pubDate>Mon, 25 Aug 2008 16:09:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:10103</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>3</slash:comments><description>&lt;P&gt;I'm still trying to gather my thoughts after attending &lt;A title=DevLink href="http://www.devlink.net/" mce_href="http://www.devlink.net/"&gt;DevLink&lt;/A&gt; this past weekend. One thing that I want to highlight is how great these regional conferences are and how much they are a perfect fit for &lt;A title="Open Spaces" href="http://en.wikipedia.org/wiki/Open_Space_Technology" mce_href="http://en.wikipedia.org/wiki/Open_Space_Technology"&gt;Open Spaces&lt;/A&gt;. [Much props to &lt;A title="Alan Stevens" href="http://netcave.org/" mce_href="http://netcave.org/"&gt;Alan Stevens&lt;/A&gt; for making the DevLink Open Spaces a huge success]&lt;/P&gt;
&lt;P&gt;One thought defines this for me: &lt;/P&gt;
&lt;P&gt;How much would you pay to take part in a group discussion with leading-edgers of the .NET TDD movement like Alan Stevens and &lt;A href="http://stevenharman.net/" mce_href="http://stevenharman.net/"&gt;Steven Harman&lt;/A&gt; and ask them anything you want about what they're doing, how they're doing it, why they're doing it and even have them fire up a laptop and give you an example. What if they offered to do some pair programming with you on the spot to help you grok what they are talking about? Did it!&lt;/P&gt;
&lt;P&gt;And if you're not interested in TDD then what if the topic was something else you are interested in? Ruby - got you covered by Ruby heavyweights&amp;nbsp; [No pun intended - much love!] like &lt;A href="http://www.coreyhaines.com/coreysramblings/" mce_href="http://www.coreyhaines.com/coreysramblings/"&gt;Corey Haines&lt;/A&gt;, &lt;A href="http://www.fallenrogue.com/" mce_href="http://www.fallenrogue.com/"&gt;FallenRogue&lt;/A&gt;, and &lt;A href="http://objo.com/" mce_href="http://objo.com/"&gt;Joe O'Brien&lt;/A&gt;. Did it. Want to ask questions about SOA from people who are neck deep into it every day&amp;nbsp; like &lt;A href="http://jamescbender.com/bendersblog/Default.aspx" mce_href="http://jamescbender.com/bendersblog/Default.aspx"&gt;James Bender&lt;/A&gt; and &lt;A href="http://www.vinull.com/" mce_href="http://www.vinull.com/"&gt;Michael Neel&lt;/A&gt;? Covered there, too. Is there anything that you are passionate about that you'd like to talk with others equally as passionate? That is the beauty of Open Spaces - you can and will.&lt;/P&gt;
&lt;P&gt;Wait, so what is the cost? Because it's a regional conference it is affordable. How affordable? How does less than $100 for two days sound? How about even $50 for two days? Truly a bargain in my book.&lt;/P&gt;
&lt;P&gt;We WILL be carrying on what we've learned about Open Spaces over the last year in the Heartland District to &lt;A href="http://www.codemash.org/" mce_href="http://www.codemash.org/"&gt;CodeMash in January in Sandusky, OH&lt;/A&gt;. I hope to see you there.&lt;/P&gt;
&lt;P&gt;UPDATE: A very similar post by &lt;A class="" title=Inetmac href="http://twitter.com/inetmac" mce_href="http://twitter.com/inetmac"&gt;inetmac&lt;/A&gt; (Doug "Mac" Fowler)&amp;nbsp;: &lt;A href="http://macfowler.com/post/47352009/devlink-open-spaces"&gt;http://macfowler.com/post/47352009/devlink-open-spaces&lt;/A&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx&amp;amp;;subject=One+Thought%3a+Why+Regional+Conferences+%2b+Open+Spaces+Rock" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx&amp;amp;;title=One+Thought%3a+Why+Regional+Conferences+%2b+Open+Spaces+Rock" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx&amp;amp;;title=One+Thought%3a+Why+Regional+Conferences+%2b+Open+Spaces+Rock" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx&amp;amp;;title=One+Thought%3a+Why+Regional+Conferences+%2b+Open+Spaces+Rock&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/08/25/one-thought-why-regional-conferences-open-spaces-rock.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=10103" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/DevLink/default.aspx">DevLink</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/OpenSpaces/default.aspx">OpenSpaces</category></item><item><title>Community Server does "Am I ___ or Not?"</title><link>http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx</link><pubDate>Tue, 29 Jul 2008 04:05:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:9709</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>5</slash:comments><description>&lt;A href="http://danhounshell.com/blogs/dan/WindowsLiveWriter/CommunityServerdoesAmIHotorNot_14938/CommunityServer_AmIHotOrNot_2.jpg" mce_href="http://danhounshell.com/blogs/dan/WindowsLiveWriter/CommunityServerdoesAmIHotorNot_14938/CommunityServer_AmIHotOrNot_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 5px 0px 5px 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=274 alt=CommunityServer_AmIHotOrNot src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/CommunityServerdoesAmIHotorNot_14938/CommunityServer_AmIHotOrNot_thumb.jpg" width=354 align=right border=0 mce_src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/CommunityServerdoesAmIHotorNot_14938/CommunityServer_AmIHotOrNot_thumb.jpg"&gt;&lt;/A&gt; 
&lt;P&gt;We're always working on something cool at &lt;A class="" title=Telligent href="http://telligent.com/" mce_href="http://telligent.com"&gt;Telligent&lt;/A&gt;, whether it be &lt;A title=Graffiti href="http://graffiticms.com/" mce_href="http://graffiticms.com/"&gt;an entirely new product&lt;/A&gt; or some type of addition or extension to &lt;A title="Community Server" href="http://communityserver.com/" mce_href="http://communityserver.com/"&gt;Community Server&lt;/A&gt;. Some good examples are some of the things we came up with in Hackathon II, including the couple of IM clients that work with Community Server messaging. If you haven't already read about some of the thing we came up with you can see them &lt;A title="Community Server Hack-a-thon II" href="http://communityserver.com/news/team-blog/community-server-hack-a-thon/" mce_href="http://communityserver.com/news/team-blog/community-server-hack-a-thon/"&gt;here&lt;/A&gt; and &lt;A title="More Hack-a-thon videos" href="http://communityserver.com/news/team-blog/more-hack-a-thon-videos/" mce_href="http://communityserver.com/news/team-blog/more-hack-a-thon-videos/"&gt;here&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Recently over a late night IM session with &lt;A title="Dave D" href="http://arcware.net/" mce_href="http://arcware.net/"&gt;Dave Donaldson&lt;/A&gt;, we pondered the benefits of certain types of social bookmarking functionality as well as other Web 2.0-like features. After our talk my thoughts turned to even more features and functionality and eventually settled on "Am I Hot or Not?". No, I'm not a perv - well not most of the time. However, a long time ago I built a clone called "Am I Dan Hounshell or Not?" in about an evening and ran it as part of my site for a while. My friends and I had a lot of fun with it. &lt;/P&gt;
&lt;P&gt;I began wondering what it would take to to build the same type of application on top of Community Server. CS has a media gallery, right? It shouldn't be too difficult to build the rest of the needed functionality on top of the media gallery, right? As I began looking into it I realized that my initial assumptions were wrong. Everything for Am I ___ or Not? is already there. In fact if you look at the screen shot at right you'll see a mini Am I Hot or Not application running right inside of Community Server! That's with a bone stock installation of Community Server 2008 running on my local PC right now, with no modifications, no skin changes, nothing. Everything is built in :). [Editor's Note: Maybe in the case of the jokers in the screenshot it should be "Am I Nerdy or Not?"]&lt;/P&gt;
&lt;P&gt;Community Server already has a Media Gallery which allows for uploading and viewing images, among other things. But it also has ratings and comments for each image/file built-in as well. You can also sort by Most Recent, Most Downloads, Most Popular and Most Comments. You can view all the images as a slideshow and there is even RSS! What more do you need for an Am I ___ or Not site? The only thing I needed to do was create a new Media Gallery, named "Am I Hot or Not?" (of course) and then give Registered Users permission to upload files to that gallery. If you want you could even add a link to the gallery in your site's main navigation.&lt;/P&gt;
&lt;P&gt;I doubt that most people and organizations running Community Server need or even want an Am I ___ or Not? application as part of their site (or give all registered users the ability to upload files to a gallery), but for the one or two of you out there who do - look no further than the Community Server platform you already have!&lt;/P&gt;
&lt;P&gt;And if you're wondering what else you can do with Community Server, come join us at &lt;A title=in.telligent href="http://in.telligent.com/" mce_href="http://in.telligent.com/"&gt;in.telligent 2008 in Dallas October 20-22&lt;/A&gt; and take part in some of the great workshops, including &lt;A title="theming and extending Community Server" href="http://in.telligent.com/sessions-and-workshops/#tech1" mce_href="http://in.telligent.com/sessions-and-workshops/#tech1"&gt;theming and extending Community Server&lt;/A&gt;.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx&amp;amp;;subject=Community+Server+does+%26quot%3bAm+I+___+or+Not%3f%26quot%3b" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx&amp;amp;;title=Community+Server+does+%26quot%3bAm+I+___+or+Not%3f%26quot%3b" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx&amp;amp;;title=Community+Server+does+%26quot%3bAm+I+___+or+Not%3f%26quot%3b" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx&amp;amp;;title=Community+Server+does+%26quot%3bAm+I+___+or+Not%3f%26quot%3b&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/29/community-server-does-quot-am-i-or-not-quot.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=9709" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Lan and Deon #3</title><link>http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx</link><pubDate>Wed, 23 Jul 2008 18:33:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:9683</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>9</slash:comments><description>&lt;P mce_keep="true"&gt;Lan and Deon go to their local .NET User Group meeting...&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A title="Those who live in glass houses..." href="http://danhounshell.com/photos/diggerdanh/picture9682.aspx" target=_blank mce_href="http://danhounshell.com/photos/diggerdanh/picture9682.aspx"&gt;&lt;IMG alt="Those who live in glass houses..." src="http://danhounshell.com/photos/diggerdanh/images/9682/500x375.aspx" border=0 mce_src="http://danhounshell.com/photos/diggerdanh/images/9682/500x375.aspx"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx&amp;amp;;subject=Lan+and+Deon+%233" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx&amp;amp;;title=Lan+and+Deon+%233" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx&amp;amp;;title=Lan+and+Deon+%233" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx&amp;amp;;title=Lan+and+Deon+%233&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/23/lan-and-deon-3.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=9683" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Lan+and+Deon/default.aspx">Lan and Deon</category></item><item><title>I like VisualSVN</title><link>http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx</link><pubDate>Mon, 21 Jul 2008 20:39:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:9671</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>5</slash:comments><description>&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 5px 0px 5px 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=504 alt=VisualSVN src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/VisualSVN_9DF7/VisualSVN_3.jpg" width=286 align=right border=0 mce_src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/VisualSVN_9DF7/VisualSVN_3.jpg"&gt; I'm not a big fan of Source Code Management integration with Visual Studio. I don't know, maybe VSS soured me years ago. When using Vault in the past I installed the Visual Studio integration tools once and uninstalled them a few days later. While using &lt;A title=Subversion href="http://subversion.tigris.org/" mce_href="http://subversion.tigris.org/"&gt;Subversion&lt;/A&gt; almost exclusively over the last three years I've been more than happy using &lt;A title=TortoiseSVN href="http://tortoisesvn.tigris.org/" mce_href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/A&gt; in an explorer window. The separation of SCM and programming IDE has been refreshing and actually lends itself well to the way Subversion works by default, not requiring a checkout or lock when editing a file.&lt;/P&gt;
&lt;P&gt;A few months ago, however, I won a license for &lt;A title=VisualSVN href="http://www.visualsvn.com/" mce_href="http://www.visualsvn.com/"&gt;VisualSVN&lt;/A&gt; at the &lt;A title="Indy Code Camp" href="http://www.indycodecamp.com/" mce_href="http://www.indycodecamp.com/"&gt;Indy Code Camp&lt;/A&gt;. The license sat on a table beside my desk for about a month before I finally decided to give it a spin. I have to admit that I'm growing fond of it. I still don't run updates and commits inside VS using VisualSVN (even though it just defaults to TortoiseSVN), but I really like the visual indicators that it provides. Showing me which files I've added or modified with the yellow icon greatly reduces any chance of me forgetting files when I make a commit. Or it helps me quickly find any files that I may have forgotten to commit. &lt;/P&gt;
&lt;P&gt;The other cool thing is that when I add any new files to a project via Visual Studio, VisualSVN automatically adds the file to SVN. I don't have to remember to browse to the file in Windows Explorer, right click the file, choose TortoiseSVN and then click Add. That may not seem like much of a time saver, but I always forget to manually add the files until after I've done commit (and maybe broken the build).&lt;/P&gt;
&lt;P&gt;Even it you don't like mixing your chocolate and peanut butter, um... I mean SCM tools with your IDE, you may like some of the features that VisualSVN provides. &lt;A title=VisualSVN href="http://www.visualsvn.com/visualsvn/download/" mce_href="http://www.visualsvn.com/visualsvn/download/"&gt;Give it a try, they offer a 30-day trial and the licenses start at $49 per seat&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Okay, that probably came off sounding like a commercial for VisualSVN. I am in no way affilated with the product or company and I stand to make no money from a couple more licenses being sold. I simply like the product and I thought I'd pass on my experiences with it. Besides, "if I can change and you can change, we all can change!" :)&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx&amp;amp;;subject=I+like+VisualSVN" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx&amp;amp;;title=I+like+VisualSVN" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx&amp;amp;;title=I+like+VisualSVN" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx&amp;amp;;title=I+like+VisualSVN&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/21/i-like-visualsvn.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=9671" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/Subversion/default.aspx">Subversion</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/VisualSVN/default.aspx">VisualSVN</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/TortoiseSVN/default.aspx">TortoiseSVN</category></item><item><title>Adding OpenID to your web site in conjunction with ASP.NET Membership</title><link>http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx</link><pubDate>Sat, 19 Jul 2008 02:17:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:9658</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>32</slash:comments><description>&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 5px 15px 5px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=235 alt=AspDotNetMVC_OpenIdLogin src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/AddingOpenIDtoyourwebsitei.NETMembership_1CDC/AspDotNetMVC_OpenIdLogin_3.jpg" width=304 align=left border=0 mce_src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/AddingOpenIDtoyourwebsitei.NETMembership_1CDC/AspDotNetMVC_OpenIdLogin_3.jpg"&gt;I recently added membership, accounts, login, etc. to the &lt;A class="" title=AspDotNetMVC href="http://aspdotnetmvc.com/members/login/" mce_href="http://aspdotnetmvc.com/members/login/"&gt;AspDotNetMVC&lt;/A&gt; site. While doing so I decided I wanted to support OpenID, too. However, I didn't want to go with only OpenID because I needed ASP.NET Membership in place to work in conjunction with another application, a Kigg site used as a service for rating content on the AspDotNetMVC site. I could have probably converted the Kigg code base to use OpenID but I also wanted to allow people who may not have OpenID to create traditional accounts on the site without signing up for OpenID. Following are the steps I took to implement an OpenID login and integrate it with "traditional ASP.NET" membership. Follow these six steps and you can do the same.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1.&lt;/STRONG&gt; Download the awesome C# OpenID library, &lt;A title=DotNetOpenId href="http://code.google.com/p/dotnetopenid/" mce_href="http://code.google.com/p/dotnetopenid/"&gt;DotNetOpenId&lt;/A&gt; from Google Code, and add it as a reference in your project. This is a great open source library developed by Andrew Arnott, Jason Alexander, Scott Watermasysk, Scott Hanselman, Joe Brinkman and others. It seriously does all the heavy lifting, comes with some good examples, and &lt;A href="http://blog.nerdbank.net/search/label/OpenID" mce_href="http://blog.nerdbank.net/search/label/OpenID"&gt;Andrew Arnott is doing a great job of making posts about fringe cases on his blog&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2.&lt;/STRONG&gt; Add some nice usability features to your OpenID login. Go to &lt;A title="ID Selector" href="https://www.idselector.com/" mce_href="https://www.idselector.com/"&gt;ID Selector&lt;/A&gt;, create an account and grab the couple of lines of JavaScript to create the cool OpenID service selector shown in the image at right.&lt;/P&gt;
&lt;P&gt;Did I mention that this is so easy that I don't know why everyone isn't supporting OpenID? Going forward I will be doing so in every new site that I create and I'll retrofit existing sites when I get the chance.&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 5px 0px 5px 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=236 alt=AspDotNetMVC_OpenIdLogin2 src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/AddingOpenIDtoyourwebsitei.NETMembership_1CDC/AspDotNetMVC_OpenIdLogin2_4.jpg" width=304 align=right border=0 mce_src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/AddingOpenIDtoyourwebsitei.NETMembership_1CDC/AspDotNetMVC_OpenIdLogin2_4.jpg"&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3.&lt;/STRONG&gt; Read the following articles:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title="How to add OpenID to your ASP.NET web site (in C# or VB.NET)" href="http://blog.nerdbank.net/2008/04/how-to-add-openid-to-your-aspnet-web.html" mce_href="http://blog.nerdbank.net/2008/04/how-to-add-openid-to-your-aspnet-web.html"&gt;How to add OpenID to your ASP.NET web site (in C# or VB.NET)&lt;/A&gt; - Andrew Arnott&lt;/LI&gt;
&lt;LI&gt;&lt;A title="Add OpenID login support to your ASP.NET MVC site" href="http://blog.nerdbank.net/2008/04/add-openid-login-support-to-your-aspnet.html" mce_href="http://blog.nerdbank.net/2008/04/add-openid-login-support-to-your-aspnet.html"&gt;Add OpenID login support to your ASP.NET MVC site&lt;/A&gt; - Andrew Arnott&lt;/LI&gt;
&lt;LI&gt;&lt;A title="Enhancing the ASP.NET MVC OpenID login experience" href="http://blog.nerdbank.net/2008/04/enhancing-aspnet-mvc-openid-login.html" mce_href="http://blog.nerdbank.net/2008/04/enhancing-aspnet-mvc-openid-login.html"&gt;Enhancing the ASP.NET MVC OpenID login experience&lt;/A&gt; - Andrew Arnott&lt;/LI&gt;
&lt;LI&gt;&lt;A title="How to add OpenID to your ASP.NET forms web site without using ASP.NET Controls" href="http://blog.nerdbank.net/2008/07/how-to-add-openid-to-your-aspnet-forms.html" mce_href="http://blog.nerdbank.net/2008/07/how-to-add-openid-to-your-aspnet-forms.html"&gt;How to add OpenID to your ASP.NET forms web site without using ASP.NET Controls&lt;/A&gt; - Andrew Arnott&lt;/LI&gt;
&lt;LI&gt;&lt;A title="How to use DotNetOpenId's Attribute Exchange extension" href="http://blog.nerdbank.net/2008/07/how-to-use-dotnetopenid-attribute.html" mce_href="http://blog.nerdbank.net/2008/07/how-to-use-dotnetopenid-attribute.html"&gt;How to use DotNetOpenId's Attribute Exchange extension&lt;/A&gt; - Andrew Arnott&lt;/LI&gt;
&lt;LI&gt;&lt;A title="The Weekly Source Code #35 - OpenID Edition" href="http://www.hanselman.com/blog/TheWeeklySourceCode25OpenIDEdition.aspx" mce_href="http://www.hanselman.com/blog/TheWeeklySourceCode25OpenIDEdition.aspx"&gt;The Weekly Source Code #35 - OpenID Edition&lt;/A&gt; - Scott Hanselman&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;After reading the above you will have a pretty good understanding of how to add OpenID to your site. Some of the code examples in the earlier 3 posts by Andrew are a little out of date. As of the writing of this post the code provided in Hanselman's blog post are the most up to date. Go ahead and read the two "MVC" posts by Andrew even if you are not interested in ASP.NET MVC. The concepts displayed in those posts can be used anywhere. In fact, it was in of those posts where I found my inspiration for overcoming my next hurdle. &lt;/P&gt;
&lt;P&gt;The only thing that was missing for me was integration with ASP.NET membership. I actually found very little information for accomplishing this. I found quite a lot of questions asking how to do it, but most of the answers were just more questions asking why you would want to do it. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4.&lt;/STRONG&gt; Create your login form (or user control or composite server control or whatever you prefer). In my case I created a user control that holds just the fields necessary for OpenID login&amp;nbsp;and the logic behind them. Doing so allows me to drop that control into&amp;nbsp;any existing login page (shown in image above) or my existing create account page or anywhere else I want to use it. Make sure you add the javascript for the ID Selector. &lt;/P&gt;
&lt;P&gt;For allowing traditional ASP.NET membership login and user account creation I just dropped the basic out of the box controls on the page.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5.&lt;/STRONG&gt; Wire up the login submit button. I did something like below, which is very similar to examples that Andrew and Scott Hanselman provided. Basically I'm just telling the OpenID provider that I need the user's email and nickname (for use in the next step): &lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; loginButton_Click(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, EventArgs e) {&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!openidValidator.IsValid) &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt;; &lt;SPAN class=rem&gt;// don't login if custom validation failed.  &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;   OpenIdRelyingParty openid = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; OpenIdRelyingParty();&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE class=alt&gt;      IAuthenticationRequest request = openid.CreateRequest(openid_identifier.Text);&lt;/PRE&gt;&lt;PRE&gt;      ClaimsRequest fetch = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; ClaimsRequest();&lt;/PRE&gt;&lt;PRE class=alt&gt;      fetch.Nickname = DemandLevel.Require;&lt;/PRE&gt;&lt;PRE&gt;      fetch.Email = DemandLevel.Require;&lt;/PRE&gt;&lt;PRE class=alt&gt;      request.AddExtension(fetch);&lt;/PRE&gt;&lt;PRE&gt;      request.RedirectToProvider();&lt;/PRE&gt;&lt;PRE class=alt&gt;   } &lt;SPAN class=kwrd&gt;catch&lt;/SPAN&gt; (OpenIdException ex) {&lt;/PRE&gt;&lt;PRE&gt;      &lt;SPAN class=rem&gt;// The user probably entered an Identifier that   &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;      &lt;SPAN class=rem&gt;// was not a valid OpenID endpoint.  &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;      openidValidator.Text = ex.Message;&lt;/PRE&gt;&lt;PRE class=alt&gt;      openidValidator.IsValid = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;   }&lt;/PRE&gt;&lt;PRE class=alt&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;
&lt;STYLE type=text/css&gt;.csharpcode {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	MARGIN: 0em
}
.csharpcode .rem {
	COLOR: #008000
}
.csharpcode .kwrd {
	COLOR: #0000ff
}
.csharpcode .str {
	COLOR: #006080
}
.csharpcode .op {
	COLOR: #0000c0
}
.csharpcode .preproc {
	COLOR: #cc6633
}
.csharpcode .asp {
	BACKGROUND-COLOR: #ffff00
}
.csharpcode .html {
	COLOR: #800000
}
.csharpcode .attr {
	COLOR: #ff0000
}
.csharpcode .alt {
	MARGIN: 0em; WIDTH: 100%; BACKGROUND-COLOR: #f4f4f4
}
.csharpcode .lnum {
	COLOR: #606060
}
&lt;/STYLE&gt;
&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;6.&lt;/STRONG&gt; Handle the response from the OpenID provider. This snippet of code is part of the login process and expands upon examples from Andrew Arnott's and Scott Hanselman's posts linked to previously. &lt;/P&gt;
&lt;P&gt;Here I'm pulling the alias and email address that I requested in the previous step. With that information I check to see if the user already exists in the ASP.NET membership datastore. If not I will create a Membership account for them using their OpenID URI as their username. When I create the account you can see that I'm generating a random string for the user's password field and password answer field. You'll also see that I'm adding "This is an OpenID account. You should log in with your OpenID." as the password question. That way if a user forgets they used OpenID and tries to login through the traditional username/password login form and selects that they forgot their password when the login doesn't work, he or she will get a reminder about their OpenID in the form of the password question. I know it's a hack, but it works for now for my modest needs and I'm happy with it. &lt;/P&gt;
&lt;P&gt;Next you'll see that after I create the Membership User I then set the user's "comment" field to their Nickname. This is because the "Hello, Username. Welcome back to the site." message at the top of the page would normally display the user's "username". In the case of OpenID users their username would be their OpenID URI - something like: &lt;A href="http://danhounshell.openidprovidername.com/" mce_href="http://danhounshell.openidprovidername.com/"&gt;http://danhounshell.openidprovidername.com/&lt;/A&gt;. That's a bit ugly and I'd rather use the Nickname that I asked from then when they logged in with OpenID. By shoving the Nickname into the comments field I can first check to see if&amp;nbsp;it has a value&amp;nbsp;and if so use it in the display rather than their username. If it doesn't have a value then&amp;nbsp;I can&amp;nbsp;default to the username. So now using my previous example it will say "Hello, DanHounshell. Welcome back to the site." This same thing could be accomplished in a couple of other ways. Throwing the nickname into the session object or putting it in a cookie are other reasonable alternatives. In my case I don't use the comments field for anything else so once again - I know it's a hack, but it works for now for my modest needs and I'm happy with it. Plus it's easy to get to by just writing "user.Comment". Thinking about it, it might be nice to write an extension method for MembershipUser called DisplayName that determines whether to use the user.Comment property or the user.Username property. &lt;/P&gt;
&lt;P&gt;Finally, I just call FormsAuthentication.RedirectFromLoginPage() passing in their OpenID URI that they provided, logging them into the site.&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;case&lt;/SPAN&gt; AuthenticationStatus.Authenticated:&lt;/PRE&gt;&lt;PRE&gt;   ClaimsResponse fetch = openid.Response.GetExtension(&lt;SPAN class=kwrd&gt;typeof&lt;/SPAN&gt;(ClaimsResponse)) &lt;SPAN class=kwrd&gt;as&lt;/SPAN&gt; ClaimsResponse;&lt;/PRE&gt;&lt;PRE class=alt&gt;   &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; alias = fetch.Nickname;&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; email = fetch.Email; &lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.IsNullOrEmpty(alias))&lt;/PRE&gt;&lt;PRE class=alt&gt;      alias = openid.Response.ClaimedIdentifier;&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.IsNullOrEmpty(email))&lt;/PRE&gt;&lt;PRE class=alt&gt;      email = openid.Response.ClaimedIdentifier;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;   &lt;SPAN class=rem&gt;//Now see if the user already exists, if not create them&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Membership.GetUser(openid.Response.ClaimedIdentifier) == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;) &lt;/PRE&gt;&lt;PRE class=alt&gt;   {&lt;/PRE&gt;&lt;PRE&gt;      MembershipCreateStatus membershipCreateStatus;&lt;/PRE&gt;&lt;PRE class=alt&gt;      MembershipUser user = Membership.CreateUser(openid.Response.ClaimedIdentifier, &lt;/PRE&gt;&lt;PRE&gt;         Common.GetRandomString(5,7), &lt;/PRE&gt;&lt;PRE class=alt&gt;         email, &lt;/PRE&gt;&lt;PRE&gt;         &lt;SPAN class=str&gt;"This is an OpenID account. You should log in with your OpenID."&lt;/SPAN&gt;, &lt;/PRE&gt;&lt;PRE class=alt&gt;         Common.GetRandomString(5,7), &lt;/PRE&gt;&lt;PRE&gt;         &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;, &lt;/PRE&gt;&lt;PRE class=alt&gt;         &lt;SPAN class=kwrd&gt;out&lt;/SPAN&gt; membershipCreateStatus);&lt;/PRE&gt;&lt;PRE&gt;       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (membershipCreateStatus != MembershipCreateStatus.Success) &lt;/PRE&gt;&lt;PRE class=alt&gt;      {&lt;/PRE&gt;&lt;PRE&gt;          loginFailedLabel.Text += &lt;SPAN class=str&gt;": Unsuccessful creation of Account: "&lt;/SPAN&gt; + membershipCreateStatus.ToString();&lt;/PRE&gt;&lt;PRE class=alt&gt;          loginFailedLabel.Visible = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;          &lt;SPAN class=kwrd&gt;break&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;       }&lt;/PRE&gt;&lt;PRE&gt;       user.Comment = alias;&lt;/PRE&gt;&lt;PRE class=alt&gt;       Membership.UpdateUser(user);&lt;/PRE&gt;&lt;PRE&gt;    }&lt;/PRE&gt;&lt;PRE class=alt&gt;    &lt;SPAN class=rem&gt;// Use FormsAuthentication to tell ASP.NET that the user is now logged in,  &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;    &lt;SPAN class=rem&gt;// with the OpenID Claimed Identifier as their username. &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;    FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, chkRememberMe.Checked);&lt;/PRE&gt;&lt;PRE&gt;    &lt;SPAN class=kwrd&gt;break&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;.csharpcode {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	MARGIN: 0em
}
.csharpcode .rem {
	COLOR: #008000
}
.csharpcode .kwrd {
	COLOR: #0000ff
}
.csharpcode .str {
	COLOR: #006080
}
.csharpcode .op {
	COLOR: #0000c0
}
.csharpcode .preproc {
	COLOR: #cc6633
}
.csharpcode .asp {
	BACKGROUND-COLOR: #ffff00
}
.csharpcode .html {
	COLOR: #800000
}
.csharpcode .attr {
	COLOR: #ff0000
}
.csharpcode .alt {
	MARGIN: 0em; WIDTH: 100%; BACKGROUND-COLOR: #f4f4f4
}
.csharpcode .lnum {
	COLOR: #606060
}
&lt;/STYLE&gt;

&lt;P&gt;That's all there is to it. Now you can allow your user's to choose whether they'd like to create an account on your site by creating a new username and password or by using their new or existing OpenID. The bonus with this method is that it allows you to add OpenID support to an existing site that already has traditional membership without breaking anything.&lt;/P&gt;
&lt;P&gt;Enjoy and let me know if you have any questions or comments.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Update:&lt;/STRONG&gt; October 09, 2008 -&lt;STRONG&gt; &lt;/STRONG&gt;&amp;nbsp;&lt;A class="" title="Sample OpenID ASP.NET Web site" href="http://danhounshell.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/10/08/sample-openid-web-site.aspx"&gt;I posted a sample web application that uses the OpenID login control described in this post.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fdanhounshell.com%2fblogs%2fdan%2farchive%2f2008%2f07%2f18%2fadding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx"&gt;&lt;IMG alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fdanhounshell.com%2fblogs%2fdan%2farchive%2f2008%2f07%2f18%2fadding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx&amp;amp;;subject=Adding+OpenID+to+your+web+site+in+conjunction+with+ASP.NET+Membership" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx&amp;amp;;title=Adding+OpenID+to+your+web+site+in+conjunction+with+ASP.NET+Membership" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx&amp;amp;;title=Adding+OpenID+to+your+web+site+in+conjunction+with+ASP.NET+Membership" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx&amp;amp;;title=Adding+OpenID+to+your+web+site+in+conjunction+with+ASP.NET+Membership&amp;amp;;top=1" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/18/adding-openid-to-your-web-site-in-conjunction-with-asp-net-membership.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://diggersolutions.com/aggbug.aspx?PostID=9658" width="1" height="1"&gt;</description><category domain="http://diggersolutions.com/blogs/dan/archive/tags/AspDotNetMVC.com/default.aspx">AspDotNetMVC.com</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/DotNetOpenId/default.aspx">DotNetOpenId</category><category domain="http://diggersolutions.com/blogs/dan/archive/tags/OpenID/default.aspx">OpenID</category></item><item><title>How to use Kigg as a service from other sites</title><link>http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx</link><pubDate>Tue, 15 Jul 2008 06:33:00 GMT</pubDate><guid isPermaLink="false">77552a6a-5aec-40f5-92f3-52e0639c4162:9640</guid><dc:creator>Dan Hounshell</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 5px 0px 5px 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=204 alt=AspDotNetMVCGetsKigg src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/IntegratingKiggintoanothersite_2A61/AspDotNetMVCGetsKigg_3.jpg" width=352 align=right border=0 mce_src="http://danhounshell.com/blogs/dan/WindowsLiveWriter/IntegratingKiggintoanothersite_2A61/AspDotNetMVCGetsKigg_3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;In &lt;A title="How to decouple the ASP.NET Membership database from Kigg" href="http://danhounshell.com/blogs/dan/archive/2008/07/14/how-to-decouple-the-asp-net-membership-database-from-kigg.aspx" mce_href="http://danhounshell.com/blogs/dan/archive/2008/07/14/how-to-decouple-the-asp-net-membership-database-from-kigg.aspx"&gt;yesterday's post&lt;/A&gt; I started providing some detail about my use of &lt;A title="Kigg on Codeplex" href="http://codeplex.com/kigg" mce_href="http://codeplex.com/kigg"&gt;Kigg&lt;/A&gt; to add rating functionality to the &lt;A title=AspDotNetMVC href="http://aspdotnetmvc.com/" mce_href="http://aspdotnetmvc.com"&gt;AspDotNetMVC site&lt;/A&gt;. Because I wanted to integrate the ASP.NET Membership store between the two sites into an external database I started by decoupling the membership data from the Kigg database, model and code. &lt;/P&gt;
&lt;P&gt;My end goal was to allow visitors to the AspDotNetMVC site to view the number of existing votes for each article (blog post, buzz, news, or video) and to vote for an article if they were logged in without having to jump over to the Kigg site to do so. Because each of the items listed on the AspDotNetMVC are basically just pointers to some content on the Internet at a unique URL I needed a way to request the rating count from Kigg by URL. I also needed a way to vote for an article by passing some (url, title, description, category, tags and user) from the main site to Kigg. Of course as a web developer my first thought was to create a web service in Kigg with two methods, GetVoteCount(url) and SubmitOrVote(url, title, desc...). Since I had never previously created a WCF web service I chose to go that route rather than the asmx approach. &lt;/P&gt;
&lt;P&gt;YMMV, but the first thing I needed was a new method in my Kigg data model to allow for retrieving the "story details" by url rather than id. In Kigg, like Digg, a story is an item submitted to the site. Since I'd be using an external site I wouldn't know the ID of a story (or care what the id was) I wanted to be able to perform lookups by the story's URL. I added the following to the KiggDataContext model (and the signature to the IDataContext interface):&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; StoryDetailItem GetStoryDetailByUrl(Guid userId, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; url) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;   return&lt;/SPAN&gt; Stories&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(s =&amp;gt; s.Url.ToLower() == url.ToLower())&lt;/PRE&gt;&lt;PRE&gt;      .Select(s =&amp;gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StoryDetailItem&lt;/PRE&gt;&lt;PRE&gt;         {&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID = s.ID,&lt;/PRE&gt;&lt;PRE&gt;            Title = s.Title,&lt;/PRE&gt;&lt;PRE class=alt&gt;            Description = s.Description,&lt;/PRE&gt;&lt;PRE&gt;            Url = s.Url,&lt;/PRE&gt;&lt;PRE class=alt&gt;            Category = s.Category.Name,&lt;/PRE&gt;&lt;PRE&gt;            Tags = s.StoryTags.Select(st =&amp;gt; st.Tag.Name).ToArray(),&lt;/PRE&gt;&lt;PRE class=alt&gt;            PostedBy = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; UserItem(s.PostedBy),&lt;/PRE&gt;&lt;PRE&gt;            PostedOn = s.PostedOn,&lt;/PRE&gt;&lt;PRE class=alt&gt;            PublishedOn = s.PublishedOn,&lt;/PRE&gt;&lt;PRE&gt;            VoteCount = s.Votes.Count(),&lt;/PRE&gt;&lt;PRE class=alt&gt;            HasVoted = (s.Votes.Count(v =&amp;gt; v.UserID == userId) &amp;gt; 0),&lt;/PRE&gt;&lt;PRE&gt;            VotedBy = s.Votes&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .OrderBy(v =&amp;gt; v.Timestamp)&lt;/PRE&gt;&lt;PRE&gt;               .Select(v =&amp;gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; UserItem(v.UserID))&lt;/PRE&gt;&lt;PRE class=alt&gt;               .ToArray(),&lt;/PRE&gt;&lt;PRE&gt;            Comments = s.Comments&lt;/PRE&gt;&lt;PRE class=alt&gt;               .OrderBy(c =&amp;gt; c.PostedOn)&lt;/PRE&gt;&lt;PRE&gt;               .Select(c =&amp;gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; CommentItem&lt;/PRE&gt;&lt;PRE&gt;                  {&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PostedBy = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; UserItem(c.PostedBy),&lt;/PRE&gt;&lt;PRE&gt;                     PostedOn = c.PostedOn,&lt;/PRE&gt;&lt;PRE class=alt&gt;                     Content = c.Content&lt;/PRE&gt;&lt;PRE&gt;                  }&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ).ToArray()&lt;/PRE&gt;&lt;PRE&gt;         }&lt;/PRE&gt;&lt;PRE class=alt&gt;      )&lt;/PRE&gt;&lt;PRE&gt;      .FirstOrDefault();&lt;/PRE&gt;&lt;PRE class=alt&gt;  } &lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV class=csharpcode&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P&gt;This is very much just a copy and paste of the existing GetStoryDetailById method, just querying by URL rather than ID. &lt;/P&gt;
&lt;P&gt;Next I needed to create the web service and two new methods in it. I created the service at /services/KiggService.svc and the two methods look like the following:&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;[WebGet(ResponseFormat = WebMessageFormat.Xml)]&lt;/PRE&gt;&lt;PRE&gt;[OperationContract]&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; GetVoteCount(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; url) {&lt;/PRE&gt;&lt;PRE&gt;       &lt;SPAN class=rem&gt;//MembershipID doesn't matter because we're just getting the vote count.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;       Guid _currentUserID = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Guid();&lt;/PRE&gt;&lt;PRE&gt;       IDataContext db = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; KiggDataContext();&lt;/PRE&gt;&lt;PRE class=alt&gt;       var story = db.GetStoryDetailByUrl(_currentUserID, url);&lt;/PRE&gt;&lt;PRE&gt;       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (story != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; story.VoteCount.ToString();&lt;/PRE&gt;&lt;PRE&gt;       &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=str&gt;"0"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;[WebGet(ResponseFormat = WebMessageFormat.Xml)]&lt;/PRE&gt;&lt;PRE&gt;[OperationContract]&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; SubmitOrVote(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; userid, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; url, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; title, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; desc, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; categoryName, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; tag)&lt;/PRE&gt;&lt;PRE&gt;{&lt;/PRE&gt;&lt;PRE class=alt&gt;   &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.IsNullOrEmpty(userid))&lt;/PRE&gt;&lt;PRE&gt;      &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt;(&lt;SPAN class=str&gt;"You must be authenticated prior hitting this url"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;   Guid _currentUserID = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Guid(userid);&lt;/PRE&gt;&lt;PRE&gt;   Category[] _categories;&lt;/PRE&gt;&lt;PRE class=alt&gt;   IDataContext db = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; KiggDataContext();&lt;/PRE&gt;&lt;PRE&gt;   _categories = db.GetCategories();&lt;/PRE&gt;&lt;PRE class=alt&gt;   &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE&gt;       Category cat = _categories.First(c =&amp;gt; c.Name == &lt;SPAN class=str&gt;"General"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.IsNullOrEmpty(categoryName)) {&lt;/PRE&gt;&lt;PRE&gt;           cat = _categories.First(c =&amp;gt; c.Name.ToLower() == categoryName.ToLower());&lt;/PRE&gt;&lt;PRE class=alt&gt;       }&lt;/PRE&gt;&lt;PRE&gt;       var categoryId = cat.ID;&lt;/PRE&gt;&lt;PRE class=alt&gt;       var story = db.GetStoryDetailByUrl(_currentUserID, url);&lt;/PRE&gt;&lt;PRE&gt;       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (story == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;) {&lt;/PRE&gt;&lt;PRE class=alt&gt;           db.SubmitStory(url, title, categoryId, desc, tag, _currentUserID);&lt;/PRE&gt;&lt;PRE&gt;           &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=str&gt;"1"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=alt&gt;       } &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE&gt;           db.KiggStory(story.ID, _currentUserID, 3);&lt;/PRE&gt;&lt;PRE class=alt&gt;           var story2 = db.GetStoryDetailById(_currentUserID, story.ID);&lt;/PRE&gt;&lt;PRE&gt;           &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; story2.VoteCount.ToString();&lt;/PRE&gt;&lt;PRE class=alt&gt;       }&lt;/PRE&gt;&lt;PRE&gt;   } &lt;SPAN class=kwrd&gt;catch&lt;/SPAN&gt; (Exception e) {&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=str&gt;"error"&lt;/SPAN&gt; + e.Message;&lt;/PRE&gt;&lt;PRE&gt;   }           &lt;/PRE&gt;&lt;PRE class=alt&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;P&gt;There's not much to the GetVoteCount method, it just checks to see if a story already exists in Kigg for the given URL, if it does then it returns the vote count, otherwise it returns 0.&lt;/P&gt;
&lt;P&gt;The second method SubmitOrVote probably needs a little more explanation. It allows for a user to click a vote button on the AspDotNetMVC site and if the story already exists then it adds an additional vote. If the story does not already exist in Kigg then it submits it. Sounds simple enough. Since the category the story belongs in is passed in by a string I need to check the categories that exist in Kigg to find a match for that passed in categoryName string. First I set "cat" to the default category, "General", and then try to find the match. If there is a match then I use the Kigg category that I found, otherwise I stick with General. Next I just lookup the story and then give it the additional vote or create it if it doesn't exist and then return the appropriate new vote count. &lt;/P&gt;
&lt;P&gt;You'll notice that I'm passing the userId across the wire. In my case it's not a big deal because my calls to the service are done server side in my client application and the Kigg site is not publicly accessible. Since the Kigg site is only accessible by the AspDotNetMVC site I also don't have to worry about authentication or authorization either. Again YMMV. Also you may not want to expose your exception like I have to callers of your Kigg service. In my case it's fine because I'm the only one calling it and I wanted to be able to log any exceptions in the client application for later review.&lt;/P&gt;
&lt;P&gt;You'll have to add appropriate error handling around the calls to these web service service and it would be a good idea to cache the votes for each article/url/story in your consuming application so you aren't calling that method every time you need to show the votecount. &lt;/P&gt;
&lt;P&gt;That's all the adjustments that you need to make to Kigg to allow it act as a service for other applications. I'll admit that it did take me a while to get the web.config setup properly to allow for the WCF services, but that has more to do with my first time doing doing anything with WCF than it does with the Kigg updates. If you have any WCF experience at all I'm sure it will take you much less time than the 30 minutes I spent doing so (mostly spent searching for answers on Google).&lt;/P&gt;
&lt;P&gt;Hopefully these last two posts will provide you with a jumpstart for integrating Digg-style ratings (um... I mean Kigg-style) into your existing or new web applications. Have fun with those new mashups.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx&amp;amp;;subject=How+to+use+Kigg+as+a+service+from+other+sites" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx&amp;amp;;title=How+to+use+Kigg+as+a+service+from+other+sites" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx&amp;amp;;title=How+to+use+Kigg+as+a+service+from+other+sites" target="_blank" title = "Post http://diggersolutions.com/blogs/dan/archive/2008/07/15/how-to-use-kigg-as-a-service-from-other-sites.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://diggersoluti