﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>bloggingonit.com -- IT Blog Feeds Consolidated</title>
    <link>http://www.bloggingonit.com</link>
    <description>IT Blog Feeds Consolidated</description>
    <copyright>Copyright 2006 bloggingonit.com</copyright>
    <language>en-us</language>
    <lastBuildDate>Tue, 21 Feb 2006 17:25:21 GMT</lastBuildDate>
    <category>IT Blogs</category>
    <ttl>60</ttl>
    <image>
      <url>http://www.bloggingonit.com/logo.gif</url>
      <title>bloggingonit.com</title>
      <link>http://www.bloggingonit.com/</link>
    </image>
    <item>
      <title>Creating A Global Error Handler In WCF</title>
      <category>WCF</category>
      <link>http://haveyougotwoods.com/archive/2009/06/24/creating-a-global-error-handler-in-wcf.aspx</link>
      <description>&lt;p&gt;One of the key things in any application is to have an exception handler that logs any unhandled exception so that the application can be debugged in the future. &lt;/p&gt;  &lt;p&gt;In many applications I see this done by wrapping every external method in a try / catch block. While this works it has several drawbacks. First of all it is a pain to type the same code over and over again. It is easy to forget to add the try / catch / log block one one method. The biggest pain is if you need to change the way you log you have to change every single instance of that code. &lt;/p&gt;  &lt;p&gt;In WCF there is an easy way to intercept all exceptions and log them via adding in by implementing a few simple interfaces that extend WCF.&lt;/p&gt;  &lt;p&gt;The first one is the IErrorHandler interface:&lt;/p&gt;  &lt;p&gt; &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt; ErrorHandler : IErrorHandler    &lt;br /&gt;    {    &lt;br /&gt;        &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ProvideFault(Exception error, MessageVersion version, &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt; Message fault)    &lt;br /&gt;        {    &lt;br /&gt;           &lt;br /&gt;        }    &lt;br /&gt;    &lt;br /&gt;        &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; HandleError(Exception error)    &lt;br /&gt;        {    &lt;br /&gt;            &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!EventLog.SourceExists(&lt;span class="str"&gt;&lt;font color="#006080"&gt;"Operations"&lt;/font&gt;&lt;/span&gt;)) EventLog.CreateEventSource(&lt;span class="str"&gt;&lt;font color="#006080"&gt;"Operations"&lt;/font&gt;&lt;/span&gt;, &lt;span class="str"&gt;&lt;font color="#006080"&gt;"Application"&lt;/font&gt;&lt;/span&gt;);    &lt;br /&gt;            EventLog.WriteEntry(&lt;span class="str"&gt;&lt;font color="#006080"&gt;"Operations"&lt;/font&gt;&lt;/span&gt;, error.ToString());    &lt;br /&gt;            &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;    &lt;br /&gt;        }    &lt;br /&gt;    }&lt;/p&gt;  &lt;p&gt;The HandleError() method will be called whenever an exception occurs. Here we log to the event log and then return false so the error can continue to propagate up the chain. The ProvideFault() method can be used to transform exceptions into faults but for this example we are not going to do any rewriting of the fault message that is to be returned and will leave the method blank.&lt;/p&gt;  &lt;p&gt;Next we have to write a service behaviour that will allow us to add our custom error handler for each channel we have a service running on. This is done by implementing the IServiceBehavior interface.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ErrorServiceBehavior : IServiceBehavior 
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
           
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection&amp;lt;ServiceEndpoint&amp;gt; endpoints, BindingParameterCollection bindingParameters)
        {
            
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
            ErrorHandler handler = &lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorHandler();
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ChannelDispatcher dispatcher &lt;span class="kwrd"&gt;in&lt;/span&gt; serviceHostBase.ChannelDispatchers)
            {
                dispatcher.ErrorHandlers.Add(handler);
            }
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;Here we are enumerating all channels and adding the error handler to the collection. We do not need to change anything in the other methods of the interface.&lt;/p&gt;

&lt;p&gt;Now we need to do is create a simple behaviour extension element so that we can use the error service behaviour in our config.&lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ErrorHandlerBehavior : BehaviorExtensionElement
    {
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; CreateBehavior()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorServiceBehavior();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Type BehaviorType
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(ErrorServiceBehavior); }
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;Lastly we can put the behaviour in the config file for our service.&lt;/p&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;extensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviorExtensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;br /&gt;         &amp;lt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;!—&lt;font color="#008000"&gt;Add in our custom error handler&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt; &lt;font size="2"&gt;&lt;font size="2"&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="ErrorLogging"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="Dispatch.Service.ErrorHandlerBehavior, Dispatch.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c62bf877ee633f38"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviorExtensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;extensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Dispatch.Service.DispatchService"&lt;/span&gt; &lt;span class="attr"&gt;behaviorConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;="Dispatch.Service.Service1Behavior"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpoint&lt;/span&gt; &lt;span class="attr"&gt;address&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt; &lt;span class="attr"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;="wsHttpBinding"&lt;/span&gt; &lt;span class="attr"&gt;contract&lt;/span&gt;&lt;span class="kwrd"&gt;="Dispatch.Service.IDispatchService" /&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;endpoint&lt;/span&gt; &lt;span class="attr"&gt;address&lt;/span&gt;&lt;span class="kwrd"&gt;="mex"&lt;/span&gt; &lt;span class="attr"&gt;binding&lt;/span&gt;&lt;span class="kwrd"&gt;="mexHttpBinding"&lt;/span&gt; &lt;span class="attr"&gt;contract&lt;/span&gt;&lt;span class="kwrd"&gt;="IMetadataExchange"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;service&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;services&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Dispatch.Service.Service1Behavior"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
          &lt;font color="#008000"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ErrorLogging&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt; &amp;lt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;!—&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000" size="2"&gt;&lt;font color="#008000" size="2"&gt;Name from behaviorExtensions Element &lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/font&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
   
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.serviceModel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;As you can see I added the extension to the Extensions element and then placed the name in the behaviour. My assembly is strong named but it should not be required to implement this behaviour (you should just be able to use PublicKeyToken=null if it is not strong named).&lt;/p&gt;&lt;img src="http://haveyougotwoods.com/aggbug/293.aspx" width="1" height="1" /&gt;</description>
      <creator>Dave Woods</creator>
      <guid>http://haveyougotwoods.com/archive/2009/06/24/creating-a-global-error-handler-in-wcf.aspx</guid>
      <pubDate>Wed, 24 Jun 2009 16:23:57 GMT</pubDate>
      <comment>http://haveyougotwoods.com/comments/293.aspx</comment>
      <comments>http://haveyougotwoods.com/archive/2009/06/24/creating-a-global-error-handler-in-wcf.aspx#feedback</comments>
      <comments>2</comments>
      <commentRss>http://haveyougotwoods.com/comments/commentRss/293.aspx</commentRss>
    </item>
    <item>
      <title>Using IntelliJ for Android Development</title>
      <link>http://www.opgenorth.net/using-intellij-for-android-development.aspx</link>
      <pubDate>Thu, 18 Jun 2009 03:58:18 GMT</pubDate>
      <guid>http://www.opgenorth.net/using-intellij-for-android-development.aspx</guid>
      <comments>http://www.opgenorth.net/using-intellij-for-android-development.aspx</comments>
      <description>&lt;p&gt;So I have this semi-fancy Google &lt;a href="http://developer.android.com/guide/developing/device.html"&gt;Android Dev Phone 1&lt;/a&gt;.&amp;#160; Lately I've been devoting part of my spare time to learning about programming for &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt; (the OS of the phone).&amp;#160; Google (probably because they didn't ask for my opinion and/or input) decided to use Java as the lingua franca for Android programming.&amp;#160; If you ask me - and I know you will - they should have used C# and Mono (I might be a bit biased here).&amp;#160; Luckily, years ago I had done Java programming, so I wasn't that intimidated by the use of Java on Android.&lt;/p&gt;
&lt;p&gt;The first big question that every developer faces is which IDE?&amp;#160; There are a few Java IDE's out there, but if you ask me the only ones worth considering are &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; and &lt;a href="http://www.jetbrains.com/idea"&gt;IntelliJ&lt;/a&gt;.&amp;#160; The documentation for Android points you to using Eclipse.&amp;#160; Eclipse is a good IDE.&amp;#160; However, back in the day when I was getting paid for Java development, my employer got us all copies of &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ&lt;/a&gt;, from JetBrains.&amp;#160; I liked it.&amp;#160; I like it enough that if I landed a contract tomorrow that involved Java, I'd buy me a copy of IntelliJ.&amp;#160;&lt;/p&gt;
&lt;p&gt;So, all that being said, I figured I'd give IntelliJ a spin as I travelled down the stack-trace of Android programming.&amp;#160; Here are my observations, in general:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;There is an Android plug-in for IntelliJ.&amp;#160; Now, you might believe that development on the Android plug is dead.&amp;#160; Not true.&amp;#160; The plug-in is undergoing active development - it just seems to be kind of slow&lt;/li&gt;
    &lt;li&gt;I found the installation of the Android plug-in for IntelliJ far easier than for Eclipse.&amp;#160; Just download the most current release, and then unzip to your plugins folder in your IntelliJ installation.&amp;#160; With Eclipse, &lt;a href="http://www.opgenorth.net/getting-started-coding-for-my-android-dev-phone-1.aspx"&gt;it is simple&lt;/a&gt;, but not when the documentation is wrong.&lt;/li&gt;
    &lt;li&gt;The IntelliJ plug-in is simple, and seems to get the job done.&amp;#160; It's a bit to simple at this time, if you ask me.&amp;#160; The &lt;a href="http://developer.android.com/guide/developing/tools/adt.html"&gt;ADT&lt;/a&gt; for Eclipse provides a far richer dev-centric experience for Android coding.&amp;#160; For example there are designers to help you with laying out your form, a lot more control over starting up the Android emulator, and better tooling for hooking up the debugger to either the emulator or an app running on the physical phone.&lt;/li&gt;
    &lt;li&gt;Being a Resharper junkie, I found that IntelliJ was more natural for me to use.&lt;/li&gt;
    &lt;li&gt;I didn't run into to many problems when I was trying to use/convert Eclipse project with IntelliJ. This is good, because the vast majority (all?) projects I've seen are all Eclipse based.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So, my conclusion at the end of the day, is that I'm going to stick with Eclipse for my Android development.&amp;#160; There just seems to be less friction at the moment if you're using Eclipse.&amp;#160; In a couple of months maybe I revisit IntelliJ and see what's new with it and Android development.&amp;#160; However, at this time, I'd like to really concentrate on learning the Android SDK, and it seems simplest to me right now with Eclipse.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.opgenorth.net'&gt;Tom Opgenorth&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='http://www.opgenorth.net/using-intellij-for-android-development.aspx'&gt;...&lt;/a&gt;</description>
    </item>
    <item>
      <title>Apply SRP to your emails&amp;hellip;.please</title>
      <link>http://igloocoder.com/archive/2009/06/16/apply-srp-to-your-emailshellip.please.aspx</link>
      <description>&lt;p&gt;I recently got an email that had no fewer than eight significant topics in it. Yes, it was a long email. As a result of this email I was unable to remember and act on all the different topics.  Sound like a big messy class/method to you?  Sure it does.  &lt;/p&gt;  &lt;p&gt;I propose that people now send emails as they would write code: singly responsible. I don’t care if I get eight emails instead of one, it didn’t cost me anything. I can, however flag for follow up, organize or delete each as I see fit.  Like a good method name the subject line should reveal the entire intent of the email.  Like a method name, the urge to put “and”, “or”, and “plus” in the subject line should be a smell indicating that you have too many topics.&lt;/p&gt;  &lt;p&gt;If your emails come in with more than one topic in them I’m likely to miss one item. Heck, I’m likely to delete the email when I’ve acted only on part of what you need me to. In that case, it’s tough shit on you I’m afraid. While it’s convenient for you to type it all up in one window, it’s easier for me to do the job you require of me if I have the separate.&lt;/p&gt;  &lt;p&gt;With that, I’m going to start working on an intelligent Outlook filter for this problem.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1441.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/06/16/apply-srp-to-your-emailshellip.please.aspx</guid>
      <pubDate>Wed, 17 Jun 2009 03:11:13 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1441.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/06/16/apply-srp-to-your-emailshellip.please.aspx#feedback</comments>
      <comments>3</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1441.aspx</commentRss>
    </item>
    <item>
      <guid>9D2E96F2AA6AE85F!787</guid>
      <category>Computers and Internet</category>
      <title>Plain text passwords are bad. Period. Don't do it.</title>
      <description>In conversation with a support representative for my domain registrar regarding me locking out my account I was able to discern they store at least some part of my password in plain text. For you're viewing pleasure, here's the conversation and how it played out. You'll easily be able to find the spot where the representative gives the clue that they have access to at least some portion of my password in plain text. Please, please, please, don't ever store passwords in your applications in plain text. Think about this whenever you decide you need security in your system. Just &lt;a target="_blank" href="http://seclists.org/dailydave/2009/q1/0097.html"&gt;read what happened to PHPBB&lt;/a&gt; (one of the largest PHP-based forum software deployed worldwide).&lt;br /&gt;&lt;br /&gt;Again.. Don't ever think it's alright to store passwords in plain text. Anywhere.&lt;br /&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Hello, you've contacted **** Live Support! How can I help you today?&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Hello....
I can't log into my account... I have reset my password and then tried
logging in with the changed credentials and it says I am now not able
to log in due to failed attempts.&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; username: ****&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Wait a minute please&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; waiting&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I'll check&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; thank you&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Could you please provide me with 2 first and 2 last symbols of your new password&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; **  **&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; You account was locked due to 6 failed attempts to login&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; seems an odd request... unless my password is stored in PLAIN TEXT *grrr*&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I'll unlock it in a moment&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; thank you&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; and, please, get rid of plain text passwords... that is unsecure and concerning to me as a customer&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Now your account is unlocked&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I am logged in.. thank you&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; please log a service request to have the passwords changed from plain text to hashed&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; very high priority&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; You can chenge this password&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; if you like&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; yes I can.. but what difference does it make if YOU can still read it?&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; We can't read it&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; It is saved in our system&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; We don't have access to it&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; You wouldn't have asked for the first two and last two symbols in my password otherwise&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; at least SOME part of my password is stored in a format that is plain text that you can read and verify. Insecure&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; We usually don't ask whole passwords&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Anyone can log in using part of password&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; fact is... you should NEVER have access to ANY part of the password... should be another security question&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; you mean I can log in with using only four characters of my password?&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; how secure is that?&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Sorry, can not&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; that's better&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I have mistyped&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I'msorry&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; and also we have secure connection&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; please
log a service request to have ANY portion of plain text of user
passwords removed from the services provided by ****&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; So nobody will be able to steel your password&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I
don't care if it's a secure connection... YOU have access to my
password... if I use it on any other site... YOUR staff could be the
ones to steal it&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; not that I don't trust your staff... but I just don't trust your staff&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Please write your suggestion at ****&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; It is our forum&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I think I'll blog about it&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; Our developers will fix it&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; I certainly hope so&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#0080ff" face="Verdana, Arial, Helvetica"&gt;Jason Hunt:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; thank you, again, for helping me with this&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; We'll do our best to make your information secure&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; You are always welcome.&lt;/font&gt;&lt;br /&gt;&lt;font size="2" color="#ff3232" face="Verdana, Arial, Helvetica"&gt;Catherine P.:&lt;/font&gt;&lt;font size="2" color="#333333" face="Verdana, Arial, Helvetica"&gt; If you have any other questions feel free to contact us again.&lt;/font&gt;&lt;br /&gt;</description>
      <pubDate>Wed, 10 Jun 2009 16:10:24 Z</pubDate>
      <link>http://huntjason.spaces.live.com/Blog/cns!9D2E96F2AA6AE85F!787.entry</link>
      <comments>http://huntjason.spaces.live.com/Blog/cns!9D2E96F2AA6AE85F!787.entry#comment</comments>
      <comments>0</comments>
      <type>blogentry</type>
      <typelabel>Blog Entry</typelabel>
      <commentRss>http://cid-9d2e96f2aa6ae85f.users.api.live.net/Users(-7120587991840790433)/Blogs('9D2E96F2AA6AE85F!102')/Entries('9D2E96F2AA6AE85F!787')/Comments?$format=application%2frss%2bxml</commentRss>
      <modified>2009-06-10T16:10:24.3170000Z</modified>
    </item>
    <item>
      <title>Ubuntu 9.04 &amp;amp; Microsoft Notebook Mouse 5000</title>
      <link>http://www.opgenorth.net/ubuntu-904-amp-microsoft-notebook-mouse-5000.aspx</link>
      <pubDate>Fri, 05 Jun 2009 04:53:24 GMT</pubDate>
      <guid>http://www.opgenorth.net/ubuntu-904-amp-microsoft-notebook-mouse-5000.aspx</guid>
      <comments>http://www.opgenorth.net/ubuntu-904-amp-microsoft-notebook-mouse-5000.aspx</comments>
      <description>&lt;p&gt;A while ago I picked up a &lt;a href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=099"&gt;Microsoft Notebook Mouse 5000&lt;/a&gt;.&amp;#160; Finally decided to use it on my laptop.&amp;#160; I figured that having a bluetooth mouse would mean that I wouldn't have a USB receiver hanging off my laptop all the time.&amp;#160; Plus, I thought it would be nice to use &lt;a href="http://blueproximity.sourceforge.net"&gt;Blue Proximity&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Now, the hiccup came when setting up the new mouse on Ubuntu 9.04 64-bit.&amp;#160; It seems that you have to do a little bit extra to get the mouse working. I found the solution on the &lt;a href="http://ubuntuforums.org/showpost.php?p=7374310&amp;amp;postcount=8"&gt;Ubuntu forums&lt;/a&gt;.&amp;#160; For my one selfish purposes, I will repeat the instructions here:&lt;/p&gt;  &lt;pre class="prettyprint"&gt;1) install the bluez-compat package with terminal
sudo apt-get install bluez-compat

2)Pair the mouse with the bluetooth manager. The manager will say that the pairing is &amp;quot;successfull&amp;quot;
Although the mouse won't worked... this step has to be done...

3) In the terminal, type :

sudo hidd --search

You should see something like

Searching ...
Connecting to device 00:XX:XX:XX:XX:XX (your mouse MAC)

Done. Your mouse should be working now.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.opgenorth.net'&gt;Tom Opgenorth&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='http://www.opgenorth.net/ubuntu-904-amp-microsoft-notebook-mouse-5000.aspx'&gt;...&lt;/a&gt;</description>
    </item>
    <item>
      <title>Starting Up The Development Webserver From An Integration Test</title>
      <category>General</category>
      <link>http://haveyougotwoods.com/archive/2009/05/31/starting-up-the-development-webserver-from-an-integration-test.aspx</link>
      <description>&lt;p&gt;Often you will have tests written that hit a service that is going to be hosted via IIS. On our development box we will probably be using the development webserver that ships with Visual Studio. Often the development webserver is not running when we start our tests which causes a failure. To combat that we have all our service tests inherit from a base class that starts up the webserver if it is not already running. This gives us consistent testability:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;    [TestFixture]&lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ServiceTestBase&lt;/pre&gt;

  &lt;pre class="alt"&gt;    {&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Process process;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;/pre&gt;

  &lt;pre&gt;        [TestFixtureSetUp]&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Start()&lt;/pre&gt;

  &lt;pre&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!IsWebServerAlreadyRunning())&lt;/pre&gt;

  &lt;pre&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; x86Location = &lt;span class="str"&gt;@"C:\Program Files (x86)\Common Files\microsoft shared\DevServer\9.0\WebDev.WebServer.Exe"&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;                &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; non64BitSystemLocation = &lt;span class="str"&gt;@"C:\Program Files\Common Files\microsoft shared\DevServer\9.0\WebDev.WebServer.Exe"&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;/pre&gt;

  &lt;pre&gt;                &lt;span class="rem"&gt;//create a normalized path (Path.GetFullPath() will remove our ..\ characters&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; physicalPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, &lt;span class="str"&gt;"..\\..\\..\\Dispatch.Service\\"));&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;                process = new Process();&lt;/pre&gt;

  &lt;pre&gt;                if (File.Exists(x86Location))&lt;/pre&gt;

  &lt;pre class="alt"&gt;                    process.StartInfo.FileName = x86Location;&lt;/pre&gt;

  &lt;pre&gt;                else if (File.Exists(non64BitSystemLocation))&lt;/pre&gt;

  &lt;pre class="alt"&gt;                    process.StartInfo.FileName = non64BitSystemLocation;&lt;/pre&gt;

  &lt;pre&gt;                else&lt;/pre&gt;

  &lt;pre class="alt"&gt;                    throw new FileNotFoundException("Could not find WebDev.WebServer.Exe&lt;span class="str"&gt;");&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;                &lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;/pre&gt;

  &lt;pre&gt;                process.StartInfo.Arguments = string.Format("/port:{0} /&lt;span class="kwrd"&gt;virtual&lt;/span&gt;:\&lt;span class="str"&gt;"\" /path:\"{1}\\\""&lt;/span&gt;, 50256, physicalPath);&lt;/pre&gt;

  &lt;pre class="alt"&gt;                process.StartInfo.CreateNoWindow = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;                process.StartInfo.UseShellExecute = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;/pre&gt;

  &lt;pre&gt;                &lt;span class="rem"&gt;// start the web server&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;                process.Start();&lt;/pre&gt;

  &lt;pre&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;        }&lt;/pre&gt;

  &lt;pre&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsWebServerAlreadyRunning()&lt;/pre&gt;

  &lt;pre&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;            Process[] processes = Process.GetProcessesByName(&lt;span class="str"&gt;"WebDev.WebServer.Exe"&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (processes.Length &amp;gt; 1)&lt;/pre&gt;

  &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        }&lt;/pre&gt;

  &lt;pre&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="rem"&gt;//if you want to stop the webserver after each test fixture is run then &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="rem"&gt;//uncomment the following &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="rem"&gt;//[TestFixtureTearDown]&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="rem"&gt;//public void TearDown()&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="rem"&gt;//{&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="rem"&gt;//  if (process != null)  &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;        &lt;span class="rem"&gt;//      process.Kill();&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="rem"&gt;//}&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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; }]]&gt;&lt;/style&gt;&lt;img src="http://haveyougotwoods.com/aggbug/292.aspx" width="1" height="1" /&gt;</description>
      <creator>Dave Woods</creator>
      <guid>http://haveyougotwoods.com/archive/2009/05/31/starting-up-the-development-webserver-from-an-integration-test.aspx</guid>
      <pubDate>Sun, 31 May 2009 18:55:32 GMT</pubDate>
      <comment>http://haveyougotwoods.com/comments/292.aspx</comment>
      <comments>http://haveyougotwoods.com/archive/2009/05/31/starting-up-the-development-webserver-from-an-integration-test.aspx#feedback</comments>
      <comments>1</comments>
      <commentRss>http://haveyougotwoods.com/comments/commentRss/292.aspx</commentRss>
    </item>
    <item>
      <title>Quick take on Bing</title>
      <link>http://igloocoder.com/archive/2009/05/31/quick-take-on-bing.aspx</link>
      <description>&lt;p&gt;I’ve been playing around with Microsoft’s new, &lt;a href="http://www.canada.com/Technology/Microsoft+revamps+search+engine+dubbed+Bing/1639900/story.html" target="_blank"&gt;yet to be released, search engine (bing.com)&lt;/a&gt; for the last couple of days.  &lt;a href="http://www.realsoftwaredevelopment.com/" target="_blank"&gt;Miguel Carrasco&lt;/a&gt; has done a pretty detailed review of &lt;a href="http://www.realsoftwaredevelopment.com/an-inside-look-at-bing/" target="_blank"&gt;it’s capabilities here&lt;/a&gt;.  I don’t see the point in me re-hashing his findings so I’m going to point out some things that I’ve noticed and liked.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Image Search Paging&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The best thing about the paging model on image searches is that there isn’t any.  Yah, no longer do you have to click through the page numbers or “Next” button/links on the bottom of the current page.  Instead, with Bing you just scroll down and it will fill in the next set of images for you. Scroll down some more and it will fill in the next batch for you again.  Personally, I think this is a fantastic way to navigate through results.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Web Search Paging&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Unfortunately, the people responsible for the web search results didn’t work closely enough with the image search people to get the same paging model implemented.  You still have to click “Next” or a page number to see more result.  This is a fail in my mind.  So close to success, but a usability miss.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Content Preview&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Hovering over a search result allows you to move to the far right of it and expand out a preview of the content in the web page that contains the term you’re searching for.  Too often I search for stuff and find that the previews provided in search results don’t let me understand the context of the terms use.  This looks like it could help with that&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img src="http://www.igloocoder.com/images/bing_preview.gif" width="553" height="200" /&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Grouping of Information&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you look at this search for Ferrari you see that there are groupings for content such as “Cars”, “For Sale”, “Dealers” and more.  The more that I use the search engine, the more I wish that this would be expanded to other search terms. For example, searching for “NHibernate WCF” doesn’t bring back results that are grouped.  Why not have them grouped under headings like “Blog”, “Magazine”, “Provider Content”, etc?  I think this would help people to better decide what trust level to assign certain content.  I know it would certainly help me to focus on the areas that I think provided better content value.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.igloocoder.com/images/bing_group.gif" width="112" height="328" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Overall&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It’ll be really interesting to see how Bing turns on.  Maybe Google’s search really isn’t all that.  Maybe it was just the best that we had, but it could be improved a lot.  Maybe Bing does this.  Time will tell.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1440.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/05/31/quick-take-on-bing.aspx</guid>
      <pubDate>Sun, 31 May 2009 15:21:46 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1440.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/05/31/quick-take-on-bing.aspx#feedback</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1440.aspx</commentRss>
    </item>
    <item>
      <ping>http://graysmatter.codivation.com/Trackback.aspx?guid=d090ab0c-475a-4579-9387-c6bf1df227da</ping>
      <server>http://graysmatter.codivation.com/pingback.aspx</server>
      <target>http://graysmatter.codivation.com/PermaLink,guid,d090ab0c-475a-4579-9387-c6bf1df227da.aspx</target>
      <creator>justice.gray@gmail.com (Justice)</creator>
      <comment>http://graysmatter.codivation.com/CommentView,guid,d090ab0c-475a-4579-9387-c6bf1df227da.aspx</comment>
      <commentRss>http://graysmatter.codivation.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d090ab0c-475a-4579-9387-c6bf1df227da</commentRss>
      <comments>7</comments>
      <title>Just when you thought the development industry couldn't be taken *less* seriously</title>
      <guid>http://graysmatter.codivation.com/PermaLink,guid,d090ab0c-475a-4579-9387-c6bf1df227da.aspx</guid>
      <link>http://graysmatter.codivation.com/JustWhenYouThoughtTheDevelopmentIndustryCouldntBeTakenLessSeriously.aspx</link>
      <pubDate>Wed, 27 May 2009 02:57:14 GMT</pubDate>
      <description>&lt;div align="center"&gt;
   &lt;object height="285" width="340"&gt;
      &lt;param name="movie" value="http://www.youtube.com/v/KZ04mfAY2BU&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;border=1"&gt;
      &lt;param name="allowFullScreen" value="true"&gt;
      &lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/KZ04mfAY2BU&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="285" width="340"&gt;
   &lt;/object&gt;
   &lt;br&gt;
   &lt;font size="1"&gt;Footage of the *secret* first meeting of the Sharepoint Knights&lt;/font&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
I had some spare time tonight and against my better instincts I decided to read some
technical blogs.&amp;nbsp; It turned out to be quite a historic night for two reasons:&lt;br&gt;
a) I was introduced to the concept of something called &lt;a href="http://www.sharepointjoel.com/Lists/Posts/Post.aspx?List=0cd1a63d-183c-4fc2-8320-ba5369008acb&amp;amp;ID=218"&gt;"The
Sharepoint Knights"&lt;/a&gt;.&amp;nbsp; 
&lt;br&gt;
b) It marked one of the only times in my life that I wished I was &lt;b&gt;functionally
illiterate&lt;/b&gt;.&lt;br&gt;
&lt;br&gt;
Sharp observers will realize that these two reasons are (like 75% of the married couples
in Winnipeg, MB) strongly related.&lt;br&gt;
&lt;br&gt;
Some of the ways *you* can be under consideration for membership in the Sharepoint
Knights include:&lt;br&gt;
&lt;ul&gt;
   &lt;li&gt;
      User Group Management&lt;/li&gt;
   &lt;li&gt;
      Conference Speaking&lt;/li&gt;
   &lt;li&gt;
      Getting Regularly Beaten For Lunch Money&lt;/li&gt;
   &lt;li&gt;
      Never Having Intimate Relations With Another Human Being&lt;br&gt;
   &lt;/li&gt;
&lt;/ul&gt;
I know a lot of you out there have leaned over to your cube-mate to excitedly proclaim,
"Hey, I think I qualify on all four of these!!" and are anxious to hear a little more
about this undoubtedly prestiguous group.&amp;nbsp; Here's some notes from the initial
announcement:&lt;br&gt;
&lt;br&gt;
"&lt;i&gt;Some might compare it to the MVP program, but it's much more behind the scenes.&amp;nbsp;
It isn't used to promote your skills more than it is to help share information amongst
the group and to help each other and the community.&amp;nbsp; The SharePoint knights do
recognize each other for their skills and boost each other up.&amp;nbsp; The knights are
made up of Devs, IT, and PM and Business Analysts.&lt;b&gt;&amp;nbsp; Male and Female alike
as in the Jedi Knights.&lt;/b&gt;&lt;/i&gt;"&lt;br&gt;
&lt;br&gt;
I'm glad this was laid out for me, because I know that when *I* am trying to determine
if a group is an elite representation of industry professionals, I *immediately* ask,
"Do they compare themselves to concepts in &lt;b&gt;STAR WARS???"&lt;/b&gt; 
&lt;br&gt;
&lt;br&gt;
But don't worry, it gets better.&amp;nbsp; Way better!!&amp;nbsp; Apparently if *you* become
a Sharepoint Knight you will also receive "An unique ranking Knight icon to put on
your business card, blog, site that sets you apart as a Knight who provides a service
of SharePoint chivalry".&amp;nbsp; &lt;b&gt;Sharepoint chivalry.&amp;nbsp; &lt;/b&gt;Seriously.&amp;nbsp;
Can you imagine explaining this icon to a business client over the age of 12 without
them laughing you out of the office? &amp;nbsp; &amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
I have heard some rumors that the next Sharepoint Knights summit will figure 20-sided
die rolls for that coveted Charisma+3 bonus.&amp;nbsp; Unfortunately, I will probably
never know for sure because I am not and never will be a Sharepoint knight.&amp;nbsp;
Yes, let's be open here - by virtue of:&lt;br&gt;
&lt;ul&gt;
   &lt;li&gt;
      this post&lt;/li&gt;
   &lt;li&gt;
      not having a life-sized replica suit of armor at home&lt;/li&gt;
   &lt;li&gt;
      having hobbies involving the outdoors&lt;/li&gt;
&lt;/ul&gt;
I am disqualified from contention.&amp;nbsp; It's entirely possible that if *you* have
ever kissed someone with tongue, *you* can't be a part of the Sharepoint knights either.&amp;nbsp;&amp;nbsp;
I know, I know, "Justice, if I can't be part of the Sharepoint Knights,&amp;nbsp; how
will I &lt;b&gt;ever&lt;/b&gt; have a chance to be part of a group of pasty middle-aged geeks
shunned and feared by regular looking people of society?" and to that my friends,
I can only say that the &lt;a href="http://mvp.support.microsoft.com/"&gt;Microsoft MVP
program&lt;/a&gt; brings in new people twice a year, so there's still hope!! &amp;nbsp;&amp;nbsp;
Keep chasing that dream!!&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://graysmatter.codivation.com/aggbug.ashx?id=d090ab0c-475a-4579-9387-c6bf1df227da" /&gt;</description>
      <comments>http://graysmatter.codivation.com/CommentView,guid,d090ab0c-475a-4579-9387-c6bf1df227da.aspx</comments>
      <category>Technical</category>
    </item>
    <item>
      <title>Expensive WCF Operations cause unresponsive service</title>
      <link>http://shane.jscconsulting.ca/archive/2009/05/26/expensive-wcf-operations-cause-unresponsive-service.aspx</link>
      <description>&lt;p&gt;Recently I ran into a situation where one of our WCF Operations was taking a long time to complete (in the range of a few minutes).  The problem was that while this was going on the server stopped responding to all other responses.  &lt;/p&gt;  &lt;p&gt;After a bit of time with Google I was able to find a post that seemed to explain the problem we were having &lt;a href="http://blogs.thinktecture.com/buddhike/archive/2007/08/02/414902.aspx"&gt;WCF Threading Internals (Updated)&lt;/a&gt;.  &lt;/p&gt;  &lt;p&gt;At the end of the day the solution (which took a bit more work to find) turned out to be fairly simple.  It involves making your Operation asynchronous via the &lt;a href="http://msdn.microsoft.com/en-us/library/ms734701.aspx"&gt;AsyncPattern&lt;/a&gt; contract parameter (and a bit of other stuff).&lt;/p&gt;  &lt;p&gt;So lesson of the day is.. if your WCF Operation is going to take a long time.. Asynch it.&lt;/p&gt;&lt;img src="http://shane.jscconsulting.ca/aggbug/39.aspx" width="1" height="1" /&gt;</description>
      <creator>Shane Courtrille</creator>
      <guid>http://shane.jscconsulting.ca/archive/2009/05/26/expensive-wcf-operations-cause-unresponsive-service.aspx</guid>
      <pubDate>Wed, 27 May 2009 02:30:50 GMT</pubDate>
      <comment>http://shane.jscconsulting.ca/comments/39.aspx</comment>
      <comments>http://shane.jscconsulting.ca/archive/2009/05/26/expensive-wcf-operations-cause-unresponsive-service.aspx#feedback</comments>
      <commentRss>http://shane.jscconsulting.ca/comments/commentRss/39.aspx</commentRss>
      <ping>http://shane.jscconsulting.ca/services/trackbacks/39.aspx</ping>
    </item>
    <item>
      <title>Meet The Monkey on CoDE Magazine</title>
      <link>http://www.opgenorth.net/meet-the-monkey-on-code-magazine.aspx</link>
      <pubDate>Sun, 24 May 2009 02:26:20 GMT</pubDate>
      <guid>http://www.opgenorth.net/meet-the-monkey-on-code-magazine.aspx</guid>
      <comments>http://www.opgenorth.net/meet-the-monkey-on-code-magazine.aspx</comments>
      <description>&lt;p&gt;For those who have a subscription to &lt;a href="http://www.code-magazine.com/"&gt;CoDe Magazine&lt;/a&gt; (and you should) and are interested in getting their feet wet with Mono, you might want to check out the &lt;a href="http://www.code-magazine.com/Article.aspx?quickid=0906041"&gt;May/June issue&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.opgenorth.net'&gt;Tom Opgenorth&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='http://www.opgenorth.net/meet-the-monkey-on-code-magazine.aspx'&gt;...&lt;/a&gt;</description>
    </item>
    <item>
      <title>Ping</title>
      <link>http://www.opgenorth.net/ping.aspx</link>
      <pubDate>Thu, 21 May 2009 04:50:07 GMT</pubDate>
      <guid>http://www.opgenorth.net/ping.aspx</guid>
      <comments>http://www.opgenorth.net/ping.aspx</comments>
      <description>&lt;p&gt;Yes, I'm still alive and kicking.&amp;#160; With the weather here trying to warm up, I've been distracted from my usual routine of IT-geek-nerd-technology stuff, hence the long silence.&amp;#160; As well, I do find myself largely unmotivated by the whole IT-software development thing in general lately.&amp;#160; Probably the weather.&lt;/p&gt;  &lt;p&gt;I've been keeping myself pretty busy learning about Android development.&amp;#160; Quick summary:&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I will say that I'm like my ADP1, and I'm happy that Roger's will be carrying the G1 and the G2 in just a couple of weeks.&amp;#160; I'm thinking very soon phones will kind of disappear, and turn into some sort of Star Trek-ish tricorder/communicator/fashion accessory in short order.&lt;/li&gt;    &lt;li&gt;I'm playing catch up with Java.&amp;#160; It's been about 5 years since I last worked with Java so I'm playing catch up to the changes in the JDK world.&amp;#160; &lt;/li&gt;    &lt;li&gt;I was using IntelliJ for my IDE, as I really liked using in back in the day when I did Java development.&amp;#160; However, the Android plug-in for IntelliJ just didn't seem to smooth over the rough spots enough, especially when you're trying to learn the Android SDK.&amp;#160; So, after about two weeks of that, I switched to Eclipse.&amp;#160; The ADT plugin for Eclipse makes Android development reduces more of the friction.&amp;#160; However, I do believe that IntelliJ is the superior IDE.&amp;#160; I'm hoping to put together a&amp;#160; more detailed blog post soon, where soon is some time period that I will define as "between now and in the next ten years".&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The other side project that is distracting me is I'm trying to build a Mono 2.4 virtual machine for running Mono web apps, ASP.NET MVC in particular.&amp;#160; That is really going slow, largely because Android is occupying most of time (it's more shiny and new).&amp;#160; If you know of any decent VMware appliances specifically tailored to this, it would be great if you could let me know as this would save me some steps along the way.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.opgenorth.net'&gt;Tom Opgenorth&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='http://www.opgenorth.net/ping.aspx'&gt;...&lt;/a&gt;</description>
    </item>
    <item>
      <title>Registration For ALT.NET Canada Now Open!</title>
      <category>General</category>
      <link>http://haveyougotwoods.com/archive/2009/05/20/registration-for-alt.net-canada-now-open.aspx</link>
      <description>&lt;p&gt;That’s right! After a great event last year we are doing ALT.NET Canada again. This year it will be taking place in Vancouver, B.C. on June 12-14 which is right after &lt;a href="http://www.devteach.com/" target="_blank"&gt;DevTeach&lt;/a&gt;! In fact we are in the same location as DevTeach so it makes for a great week of training and discussions of some of the best techniques and tools in the industry&lt;/p&gt;  &lt;p&gt;Registration is limited to 100 people so get in quick. More info and registration can be found on the ALT.NET Canada &lt;a href="http://www.altnetconfcanada.com" target="_blank"&gt;Website&lt;/a&gt;&lt;/p&gt;&lt;img src="http://haveyougotwoods.com/aggbug/291.aspx" width="1" height="1" /&gt;</description>
      <creator>Dave Woods</creator>
      <guid>http://haveyougotwoods.com/archive/2009/05/20/registration-for-alt.net-canada-now-open.aspx</guid>
      <pubDate>Wed, 20 May 2009 15:48:43 GMT</pubDate>
      <comment>http://haveyougotwoods.com/comments/291.aspx</comment>
      <comments>http://haveyougotwoods.com/archive/2009/05/20/registration-for-alt.net-canada-now-open.aspx#feedback</comments>
      <commentRss>http://haveyougotwoods.com/comments/commentRss/291.aspx</commentRss>
    </item>
    <item>
      <title>Parallelism</title>
      <category>General</category>
      <link>http://haveyougotwoods.com/archive/2009/05/14/parallelism.aspx</link>
      <description>The big talk lately seems to be about parallelism and writing multithreaded code to take advantage of multi-core/threaded processors. While this is a great way to do more tasks at once it is not usually required for the common line of business apps most of us are writing.&lt;br /&gt;
&lt;br /&gt;
Multi-threading is great when you have a big job that can be split appart into chunks for processing on multiple threads. Gaming for instance can benefit a lot from this as gaming is usually a CPU intensive activity. If you are writing a simple app to get things from a database and display it on the screen, multithreading will probably not make a difference in the speed of your app. In fact multithreading may slow down your application as you now have to dedicate CPU resources to creating, managing, and monitoring of threads and that is not free.&lt;br /&gt;
&lt;br /&gt;
Where I love multi-core machines is on boxes that are doing more than one thing. If I am running four non-threaded CPU applications on a four core box then they should perform almost like they were on their own CPU. I almost view having multicore boxes as freeing us from having to write multithreaded code as we are only consuming one core with our apps which leaves cores for other applications. Now I am not saying write sloppy code, just trying to frame what this multicore movement in the industry does for us.&lt;br /&gt;
&lt;br /&gt;
The other thing to realize is that writing multithreaded applications is hard. Worrying about locking, syncing, and race conditions are something I would rather do without. It takes a lot of carefull thought and planning to do it right, and even when you do, missing something can have some drastic consequences. Multi-threaded code is not only hard to design, but hard to debug and test as well. &lt;br /&gt;
&lt;br /&gt;
If you think that you need a multithreaded app then really think about it as it can be a tough road to walk.&lt;img src="http://haveyougotwoods.com/aggbug/290.aspx" width="1" height="1" /&gt;</description>
      <creator>Dave Woods</creator>
      <guid>http://haveyougotwoods.com/archive/2009/05/14/parallelism.aspx</guid>
      <pubDate>Thu, 14 May 2009 21:38:02 GMT</pubDate>
      <comment>http://haveyougotwoods.com/comments/290.aspx</comment>
      <comments>http://haveyougotwoods.com/archive/2009/05/14/parallelism.aspx#feedback</comments>
      <commentRss>http://haveyougotwoods.com/comments/commentRss/290.aspx</commentRss>
    </item>
    <item>
      <title>A little more WCF NHibernate</title>
      <category>IglooCommons</category>
      <link>http://igloocoder.com/archive/2009/05/01/a-little-more-wcf-nhibernate.aspx</link>
      <description>&lt;p&gt;As part of my recent changes to the WCF-NHibernate code I have, I declared that there wasn’t going to be a way to handle automatic transaction rollbacks when WCF faults were going to be raised.  I wasn’t even sure that I wanted them in tool.  &lt;a href="http://andreasohlund.blogspot.com/"&gt;Andreas Öhlund&lt;/a&gt; &lt;a href="http://igloocoder.com/archive/2009/04/23/wcf-and-nhibernate-redux.aspx#4293" target="_blank"&gt;pointed out&lt;/a&gt; that rollback could be handled quite nicely using the IErrorHandler interface within WCF.  After some toying around with the idea and some proof-of-concept implementations, I decided to add this ability in.&lt;/p&gt;  &lt;p&gt;Currently you identify a WCF service as using the NHibernate code by adding a [NHibernateContext] attribute to the *.svc.cs file.  I wanted to keep that syntax, and the rollback capability, as clean as possible.  Rather than adding another attribute, I parameterized the existing one.  Now you can indicate that the service should automatically rollback the NHibernate transaction when WCF Faults are being raised simply by attributing the *.svc.cs file with [NHibernateContext(Rollback.Automatically)].  The default [NHibernateContext] requires manual rollbacks and exists as such for backwards compatibility.&lt;/p&gt;  &lt;p&gt;More information can be found over on the wiki (&lt;a href="http://www.igloocoder.net/wiki"&gt;http://www.igloocoder.net/wiki&lt;/a&gt;) and the code can be grabbed from the svn trunk (&lt;a href="https://igloocoder.net:8443/svn/IglooCommons/trunk"&gt;https://igloocoder.net:8443/svn/IglooCommons/trunk&lt;/a&gt;).&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1439.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/05/01/a-little-more-wcf-nhibernate.aspx</guid>
      <pubDate>Fri, 01 May 2009 19:07:05 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1439.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/05/01/a-little-more-wcf-nhibernate.aspx#feedback</comments>
      <comments>2</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1439.aspx</commentRss>
    </item>
    <item>
      <title>Soft Skills Book Series &amp;ndash; My Job Went To India Update</title>
      <link>http://shane.jscconsulting.ca/archive/2009/04/28/soft-skills-book-series-ndash-my-job-went-to-india-again.aspx</link>
      <description>&lt;p&gt;I’m happy to announce that the “My Job Went To India…” &lt;a href="http://www.jscconsulting.ca/images/7f75041425e2_10618/passionate.jpg"&gt;&lt;img title="passionate" style="border-right: 0px; border-top: 0px; display: inline; margin: 10px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="244" alt="passionate" src="http://www.jscconsulting.ca/images/7f75041425e2_10618/passionate_thumb.jpg" width="164" align="left" border="0" /&gt;&lt;/a&gt; book I talked about in an &lt;a href="http://shane.jscconsulting.ca/archive/2009/03/22/soft-skills-book-series-ndash-my-job-went-to-india.aspx"&gt;earlier post&lt;/a&gt; is being re-released.  This time the title has been changed to &lt;a href="http://www.amazon.com/Passionate-Programmer-Creating-Remarkable-Development/dp/1934356344/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1240965571&amp;amp;sr=8-1"&gt;The Passionate Programmer: Creating a Remarkable Career in Software Development&lt;/a&gt;.  &lt;/p&gt;  &lt;p&gt;I’m quite happy to see the re-release and name change.  I think the earlier name cast this book in a way that might have limited its audience.  This is quite unfortunate when you consider how valuable this book is for every developer to read.  &lt;/p&gt;  &lt;p&gt;I’ve got the earlier version but I’m definitely going to pick this one up as well since I found the first one so valuable.&lt;/p&gt;&lt;img src="http://shane.jscconsulting.ca/aggbug/38.aspx" width="1" height="1" /&gt;</description>
      <creator>Shane Courtrille</creator>
      <guid>http://shane.jscconsulting.ca/archive/2009/04/28/soft-skills-book-series-ndash-my-job-went-to-india-again.aspx</guid>
      <pubDate>Wed, 29 Apr 2009 00:41:40 GMT</pubDate>
      <comment>http://shane.jscconsulting.ca/comments/38.aspx</comment>
      <comments>http://shane.jscconsulting.ca/archive/2009/04/28/soft-skills-book-series-ndash-my-job-went-to-india-again.aspx#feedback</comments>
      <commentRss>http://shane.jscconsulting.ca/comments/commentRss/38.aspx</commentRss>
      <ping>http://shane.jscconsulting.ca/services/trackbacks/38.aspx</ping>
    </item>
    <item>
      <title>The Possessive Developer</title>
      <link>http://igloocoder.com/archive/2009/04/27/the-possessive-developer.aspx</link>
      <description>&lt;p&gt;Wrapping up our first pass at &lt;a href="http://www.igloocoder.com/archive/2009/04/01/development-project-archetypes.aspx" target="_blank"&gt;Development Project Archetypes&lt;/a&gt; we look at a common culprit on &lt;a href="http://www.igloocoder.com/archive/2007/12/23/what-is-brownfield.aspx" target="_blank"&gt;brownfield&lt;/a&gt; teams.&lt;/p&gt;  &lt;p&gt;During your first week on the project you’re assigned to have a mentor who has written a large portion of the existing application. While working on your first serious defect in the system, you ask the Possessive Developer about an existing piece of code and suggest refactoring. She looks back at you and states “There’s no reason to change that code. It works just as I want it to.” After explaining its deficiencies, the Possessive Developer is sullen and in a less-than-cordial mood. At the end of the conversation she has neither agreed nor disagreed with the suggested changes, but there is tension in the air.&lt;/p&gt;  &lt;p&gt;The following morning the Possessive Developer corners you at the water cooler and lashes into a list of reasons that there should be no changes to the code discussed the previous day. At the end of the one-way conversation she walks away with confidence in her stride. You now know. It is her code, her creation and her domain. Only the Possessive Developer can state when her code is to be changed.&lt;/p&gt;  &lt;p&gt;Like the &lt;a href="http://www.igloocoder.com/archive/2009/04/26/the-oooo.shiney-developer.aspx" target="_blank"&gt;“Oooo…Shiny!” Developer&lt;/a&gt;, code reviews with peers can be useful. In a more neutral forum, it’s much harder to argue against the majority. But don’t ignore The Possessive Developer. It doesn’t take long to turn her into a &lt;a href="http://www.igloocoder.com/archive/2009/04/21/the-skeptic.aspx" target="_blank"&gt;Skeptic&lt;/a&gt; or a &lt;a href="http://www.igloocoder.com/archive/2009/04/23/the-hero-developer.aspx" target="_blank"&gt;Hero&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1438.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/04/27/the-possessive-developer.aspx</guid>
      <pubDate>Mon, 27 Apr 2009 23:43:10 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1438.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/04/27/the-possessive-developer.aspx#feedback</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1438.aspx</commentRss>
    </item>
    <item>
      <title>The 'Oooo...Shiney!' Developer</title>
      <link>http://igloocoder.com/archive/2009/04/26/the-oooo.shiney-developer.aspx</link>
      <description>&lt;p&gt;For the final few posts in the &lt;a href="http://www.igloocoder.com/archive/2009/04/01/development-project-archetypes.aspx" target="_blank"&gt;Development Project Archetypes&lt;/a&gt; we'll focus on developers.&lt;/p&gt;  &lt;p&gt;An incestuous cousin to the &lt;a href="http://www.igloocoder.com/archive/2009/04/06/the-front-of-the-magazine-architect.aspx" target="_blank"&gt;Front of the Magazine Architect&lt;/a&gt;, this developer is easily distracted by any new technology. Not only will he want to talk about it endlessly, the ‘Oooo…Shiny!’ Developer will simply add the technology to the project without telling anyone. You will find, scattered through the code base, a number of different techniques, tools or frameworks that are used one time and then abandoned. While adding to your technical debt, the ‘Oooo…Shiny!’ Developer is working feverishly to keep adding new entries to the “Experience Using” section of his resume. &lt;/p&gt;  &lt;p&gt;Sometimes it is easy enough to counter his predilection for new and shiny simply by placing a pretty glass bead on their keyboard every morning. When that fails, it’s time to up the priority of the code reviews for The “Oooo…Shiny!” Developer. And be merciless.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1437.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/04/26/the-oooo.shiney-developer.aspx</guid>
      <pubDate>Sun, 26 Apr 2009 23:01:07 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1437.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/04/26/the-oooo.shiney-developer.aspx#feedback</comments>
      <comments>1</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1437.aspx</commentRss>
    </item>
    <item>
      <title>The Enhancing Tester/QA</title>
      <link>http://igloocoder.com/archive/2009/04/25/the-enhancing-testerqa.aspx</link>
      <description>&lt;p&gt;Still avoiding developers, we continue talking about &lt;a href="http://www.igloocoder.com/archive/2009/04/01/development-project-archetypes.aspx" target="_blank"&gt;archetypes&lt;/a&gt;...&lt;/p&gt;  &lt;p&gt;Usually found in the confines of an organization that has heavily silo’d roles and responsibilities, the Enhancing Tester will be assigned responsibility for ensuring the product quality. She believes it is her personal responsibility to question and alter any specifications that were used in creating the software. Since she wasn’t involved at the start of the development cycle, the Enhancing Tester will question the design and requirements only after the development team has passed them on for test. The proposed ‘enhancements’ are usually obscure and with far reaching architectural ramifications. For example, “this really should be an MDI application.”&lt;/p&gt;  &lt;p&gt;Since she understands the original requirements, but not the overall business, the Enhancing Tester has no choice but to log these as software bugs so that they will get the attention of the team. After working with her for a few months you will wake up in a cold sweat yelling “It’s not a bug, it’s a feature change!”&lt;/p&gt;  &lt;p&gt;Usually, you can counter this by assigning cost estimates to the “bug fixes”. It helps to do so in front of the client.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1436.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/04/25/the-enhancing-testerqa.aspx</guid>
      <pubDate>Sat, 25 Apr 2009 15:26:46 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1436.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/04/25/the-enhancing-testerqa.aspx#feedback</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1436.aspx</commentRss>
    </item>
    <item>
      <title>NAS-less in the North</title>
      <link>http://www.opgenorth.net/nas-less-in-the-north.aspx</link>
      <pubDate>Fri, 24 Apr 2009 21:48:11 GMT</pubDate>
      <guid>http://www.opgenorth.net/nas-less-in-the-north.aspx</guid>
      <comments>http://www.opgenorth.net/nas-less-in-the-north.aspx</comments>
      <description>&lt;p&gt;Over the Easter long weekend, I experience my own resurrection of sorts.&amp;#160; On Thursday just before Easter I noticed that my NAS, a Thecus N3200 Pro with three Seagate Barracuda 7200.11 drives in a RAID5 array, was beeping and displaying a "RAID degraded" message.&amp;#160; I didn't worry about it to much, as it was late on Thursday, and I figured I was safe/okay with three drives in a RAID5 array.&lt;/p&gt;  &lt;p&gt;So, the next morning I check things out.&amp;#160; Turns out all was not well in Whoville.&amp;#160; While check the RAID config, I saw that two of the three drives had "warnings" associated with them.&amp;#160; This was Not Good.&amp;#160; Two out of three failing HDD in a RAID5 array is A Bad Thing.&amp;#160; A bit of Googling and conversing with the &lt;a href="http://www.harddata.com"&gt;vendor who sold me the NAS&lt;/a&gt; (note- I've got no problems with them, Hard Data has always been great for me for the past six or seven years) and it seems that there is a &lt;a href="http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207951&amp;amp;Hilite="&gt;firmware upgrade&lt;/a&gt; for my particular trio of NAS drives.&amp;#160; Luckily, I managed to get all my critical stuff off the NAS, so I'm not to worried about data loss.&amp;#160; &lt;/p&gt;  &lt;p&gt;So, I pull the drives, apply the firmware update, and try to rebuild. The NAS will not let me create a RAID5 array.&amp;#160; So, I pull the drives one by one, and then proceed to check them out in a computer.&amp;#160; Turns out that the two drives that had the warnings were okay, but the third drive, that was "warning-less" is toast.&amp;#160; What is wrong with it I'm not sure, but the BIOS on the computer won't recognize the drive after boot up.&amp;#160; Had to RMA the drive back to Seagate.&amp;#160; &lt;/p&gt;  &lt;p&gt;So, now I sit, alone in my room, without my NAS.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.opgenorth.net'&gt;Tom Opgenorth&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href='http://www.opgenorth.net/nas-less-in-the-north.aspx'&gt;...&lt;/a&gt;</description>
    </item>
    <item>
      <title>The Over Protective DBA</title>
      <link>http://igloocoder.com/archive/2009/04/24/the-over-protective-dba.aspx</link>
      <description>&lt;p&gt;Deviating from the developer sphere, we continue the &lt;a href="http://www.igloocoder.com/archive/2009/04/01/development-project-archetypes.aspx" target="_blank"&gt;Development Project Archetypes&lt;/a&gt;...&lt;/p&gt;  &lt;p&gt;A good many application require access to a database. If you’re lucky, you’ll have free rein over the database to make whatever changes you deem necessary. If you’re unlucky, you’ll need to make those changes through an Over-Protective DBA.&lt;/p&gt;  &lt;p&gt;The Over-Protective DBA protects his database with an iron fist. Requests for changes to a stored procedure go through several iterations to ensure they include the standard corporate header and naming conventions. He also challenges every single piece of code in the procedure to see whether you really need it. Only when satisfied that the application can’t be deployed without it will he grace the database with your changes. In the development environment, at least…&lt;/p&gt;  &lt;p&gt;If you really want a battle on your hands, suggest to an Over-Protective DBA that you should switch to an object-relational mapper. Be prepared to launch into a prolonged debate on the performance of stored procedures vs. dynamic SQL, the dangers of SQL injection, and the “importance” of being able to deploy changes to business logic without re-compiling the application.&lt;/p&gt;  &lt;p&gt;The Over-Protective DBA often has company policy on his side so he will be a challenge. Don’t spend a lot of time confronting him head-to-head. Your database is an important part of your application, it behoves you to get along with him. Instead, arm yourself with knowledge and talk to him in common terms. In our experience, DBAs can often be negotiated with for certain things, such as an automated database deployment.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1435.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/04/24/the-over-protective-dba.aspx</guid>
      <pubDate>Fri, 24 Apr 2009 17:52:57 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1435.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/04/24/the-over-protective-dba.aspx#feedback</comments>
      <comments>1</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1435.aspx</commentRss>
    </item>
    <item>
      <title>Still Alive&amp;hellip;</title>
      <link>http://shane.jscconsulting.ca/archive/2009/04/23/still-alivehellip.aspx</link>
      <description>&lt;p&gt;Well the last month has been a bit hectic around here.  Between moving and being sick twice I’m just getting to the point where I’ll have some time to type out some of the random thoughts and maybe a few more book recommendations….&lt;/p&gt;&lt;img src="http://shane.jscconsulting.ca/aggbug/37.aspx" width="1" height="1" /&gt;</description>
      <creator>Shane Courtrille</creator>
      <guid>http://shane.jscconsulting.ca/archive/2009/04/23/still-alivehellip.aspx</guid>
      <pubDate>Fri, 24 Apr 2009 01:22:34 GMT</pubDate>
      <comment>http://shane.jscconsulting.ca/comments/37.aspx</comment>
      <comments>http://shane.jscconsulting.ca/archive/2009/04/23/still-alivehellip.aspx#feedback</comments>
      <commentRss>http://shane.jscconsulting.ca/comments/commentRss/37.aspx</commentRss>
      <ping>http://shane.jscconsulting.ca/services/trackbacks/37.aspx</ping>
    </item>
    <item>
      <title>The Hero Developer</title>
      <link>http://igloocoder.com/archive/2009/04/23/the-hero-developer.aspx</link>
      <description>&lt;p&gt;Another in the &lt;a href="http://www.igloocoder.com/archive/2009/04/01/development-project-archetypes.aspx" target="_blank"&gt;Archetypes series&lt;/a&gt;...&lt;/p&gt;  &lt;p&gt;Everyone loves a hero. The PM, the architects and the client relish the long hours he puts into delivering results. When the client is told we don’t have the budget or manpower to add a feature, the hero’s cubicle is his first stop after the meeting. “Old man Baley says we can’t have this. But we NEED it.” The Hero hums and haws and complains how badly the project is being managed, then with a sigh says, “I’ll put it in. But this is the LAST TIME.”&lt;/p&gt;  &lt;p&gt;The Hero then proceeds to circumvent your entire development architecture wedging the feature in because he doesn’t understand terms like “budget” and “resources”. All he cares about is getting his ego stroked and being the martyr that saved the project. The long hours he puts in are heralded by the PM and the client who don’t realize his effort is not directly correlated to the value he is delivering.&lt;/p&gt;  &lt;p&gt;Project Managers and Clients will scoff at you when you make claims against their Hero. In their mind, he is a cornerstone in the project and whose absence will wreak havoc on the success of the project. Regardless of their actual ability, Heroes are often more trouble than they’re worth.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1434.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/04/23/the-hero-developer.aspx</guid>
      <pubDate>Thu, 23 Apr 2009 22:27:12 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1434.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/04/23/the-hero-developer.aspx#feedback</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1434.aspx</commentRss>
    </item>
    <item>
      <title>High Performance Timing</title>
      <category>General</category>
      <link>http://haveyougotwoods.com/archive/2009/04/23/high-performance-timing.aspx</link>
      <description>&lt;p&gt;A lot of times we need to know how long a process takes. The simple way to do this is &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;dim&lt;/span&gt; startDate &lt;span class="kwrd"&gt;as&lt;/span&gt; DateTime = DateTime.Now 

&lt;span class="rem"&gt;' do work &lt;/span&gt;

&lt;span class="kwrd"&gt;dim&lt;/span&gt; elapsed &lt;span class="kwrd"&gt;as&lt;/span&gt; TimeSpan = startDate.Subtract(DateTime.Now) 
Console.WriteLine(elapsed.TotalMilliseconds)&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;For a general sense of time this works fine but this is not entirely accurate. DateTime.Now pulls from a lower frequency clock and can be off by milliseconds (or more).&lt;/p&gt;

&lt;p&gt;To use a highly accurate timing MS introduced the stopwatch  class in .NET 2.0. This class polls the high frequency clock to get accurate timings:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;dim&lt;/span&gt; timer &lt;span class="kwrd"&gt;as&lt;/span&gt; Stopwatch = Stopwatch.StartNew

&lt;span class="rem"&gt;'do work&lt;/span&gt;

timer.&lt;span class="kwrd"&gt;Stop&lt;/span&gt;()
console.WriteLine(timer.ElapsedMilliseconds)&lt;/pre&gt;

&lt;p /&gt;&lt;style type="text/css"&gt;&lt;![CDATA[

.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; }]]&gt;&lt;/style&gt;

&lt;p&gt;Another thing you can do is call Start() and Stop() on the timer multiple times and it will still keep summing up the time elapsed (just like a regular stopwatch). &lt;/p&gt;&lt;img src="http://haveyougotwoods.com/aggbug/289.aspx" width="1" height="1" /&gt;</description>
      <creator>Dave Woods</creator>
      <guid>http://haveyougotwoods.com/archive/2009/04/23/high-performance-timing.aspx</guid>
      <pubDate>Thu, 23 Apr 2009 15:34:18 GMT</pubDate>
      <comment>http://haveyougotwoods.com/comments/289.aspx</comment>
      <comments>http://haveyougotwoods.com/archive/2009/04/23/high-performance-timing.aspx#feedback</comments>
      <comments>1</comments>
      <commentRss>http://haveyougotwoods.com/comments/commentRss/289.aspx</commentRss>
    </item>
    <item>
      <title>Iterative Hashing: Less Secure Is More Secure (in theory)</title>
      <category>Security</category>
      <link>http://haveyougotwoods.com/archive/2009/04/23/iterative-hashing-less-secure-is-more-secure-in-theory.aspx</link>
      <description>&lt;p&gt;*DISCLAIMER: This is only a theoretical idea. I have not confirmed that this could increase security of an iterative hash. Please take that into account when reading this.&lt;/p&gt;  &lt;p&gt;I was explaining &lt;a href="http://haveyougotwoods.com/archive/2008/01/30/hashing-the-iterative-hash.aspx" target="_blank"&gt;iterative hashing&lt;/a&gt; the other day and came up with an interesting theory: Using a weak algorithm may result in a stronger hash. The reason for this is collisions that can happen in algorithms like SHA0, SHA1, and MD5 (a collision is when two separate strings yield the exact same hash). By using a collisionable algorithm in an iterative hash we could potentially throw an attacker way off.&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="133"&gt; &lt;/td&gt;        &lt;td valign="top" width="133"&gt;Valid&lt;/td&gt;        &lt;td valign="top" width="133"&gt;Attacker&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Original Data&lt;/td&gt;        &lt;td valign="top" width="133"&gt;HelloIAmData&lt;/td&gt;        &lt;td valign="top" width="133"&gt;56r335u8425&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;iteration 1&lt;/td&gt;        &lt;td valign="top" width="133"&gt;dfti34548247&lt;/td&gt;        &lt;td valign="top" width="133"&gt;fskwrtujrwf&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;iteration 2&lt;/td&gt;        &lt;td valign="top" width="133"&gt;est84354u544&lt;/td&gt;        &lt;td valign="top" width="133"&gt;rtietyrt3487&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;iteration 700&lt;/td&gt;        &lt;td valign="top" width="133"&gt;er54djrt5ejh&lt;/td&gt;        &lt;td valign="top" width="133"&gt;458432423uitd&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;font color="#ff0000"&gt;iteration 701&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;font color="#ff0000"&gt;dfsujweru5&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;font color="#ff0000"&gt;6483247435u&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;iteration 702&lt;/td&gt;        &lt;td valign="top" width="133"&gt;ase6ae4rha&lt;/td&gt;        &lt;td valign="top" width="133"&gt;ase6ae4rha&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;iteration 1000&lt;/td&gt;        &lt;td valign="top" width="133"&gt;a473uj4w5h&lt;/td&gt;        &lt;td valign="top" width="133"&gt;a473uj4w5h&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Iteration 701 is where things break down. The hash we had from iteration 702 (ase6ae4rha) has a collision on it. Both dfsujweru5 and 6483247435u will create that hash. In this case the attacker broke ase6ae4rha with 6483247435u not dfsujweru5. Now the attacker tries to break 6483247435u and the hash that results from that which has now put them on the totally wrong path and they will never crack this hash.&lt;/p&gt;  &lt;p&gt;Now don't run out and start using a lesser algorithm based on this information collisions do not happen that often. The collisions in SHA1 are only considered theoretically possible as it would take 2^69 operations to find a collision that matches an existing hash (for SHA0 it would take 2^39 operations). &lt;/p&gt;  &lt;p&gt;As I do not have the processing power required to do this I can not calculate the chances of this actually happening. Nor can I vouch for if this is a feasible defence strategy. &lt;/p&gt;&lt;img src="http://haveyougotwoods.com/aggbug/288.aspx" width="1" height="1" /&gt;</description>
      <creator>Dave Woods</creator>
      <guid>http://haveyougotwoods.com/archive/2009/04/23/iterative-hashing-less-secure-is-more-secure-in-theory.aspx</guid>
      <pubDate>Thu, 23 Apr 2009 15:33:32 GMT</pubDate>
      <comment>http://haveyougotwoods.com/comments/288.aspx</comment>
      <comments>http://haveyougotwoods.com/archive/2009/04/23/iterative-hashing-less-secure-is-more-secure-in-theory.aspx#feedback</comments>
      <commentRss>http://haveyougotwoods.com/comments/commentRss/288.aspx</commentRss>
    </item>
    <item>
      <title>WCF and nHibernate redux</title>
      <category>IglooCommons</category>
      <link>http://igloocoder.com/archive/2009/04/23/wcf-and-nhibernate-redux.aspx</link>
      <description>&lt;p&gt;A while back I posted about a small framework that I wrote to make handling of &lt;a target="_blank" href="http://igloocoder.com/archive/2008/07/21/nhibernate-on-wcf.aspx"&gt;nHibernate Sessions easier in a WCF&lt;/a&gt; world.  There were a couple of problems with it and I've spent some time fixing it recently.  The entries on &lt;a target="_blank" href="http://www.igloocoder.net/wiki/WcfNHibernate.ashx"&gt;the wiki&lt;/a&gt; have been updated to fix problems in the documentation as well.&lt;/p&gt;
&lt;p&gt;The big changes in the framework were a bug fix that was preventing the commit from being run, moving to the latest version of nHibernate, and making better use of nHibernate transactions.  The svn source code repository is &lt;a target="_blank" href="https://igloocoder.net:8443/svn/IglooCommons/trunk"&gt;available here&lt;/a&gt;.  If you get it and run the b.bat at the root of the trunk you will be able to grab the latest artifacts from the release folder that is created in the trunk.&lt;/p&gt;&lt;img src="http://igloocoder.com/aggbug/1433.aspx" width="1" height="1" /&gt;</description>
      <creator>The Igloo Coder</creator>
      <guid>http://igloocoder.com/archive/2009/04/23/wcf-and-nhibernate-redux.aspx</guid>
      <pubDate>Thu, 23 Apr 2009 14:02:17 GMT</pubDate>
      <comment>http://igloocoder.com/comments/1433.aspx</comment>
      <comments>http://igloocoder.com/archive/2009/04/23/wcf-and-nhibernate-redux.aspx#feedback</comments>
      <comments>1</comments>
      <commentRss>http://igloocoder.com/comments/commentRss/1433.aspx</commentRss>
    </item>
  </channel>
</rss>