<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>ProgramGood.Net</title>
  <link rel="alternate" type="text/html" href="http://www.programgood.net/" />
  <link rel="self" href="http://www.programgood.net/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2012-05-20T14:32:15.759125-04:00</updated>
  <author>
    <name>Dave Mateer</name>
  </author>
  <subtitle>The journey to becoming a great programmer</subtitle>
  <id>http://www.programgood.net/</id>
  <generator uri="http://dasblog.info/" version="2.2.8279.16125">DasBlog</generator>
  <entry>
    <title>Mastering C#–Properties</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/20/MasteringCProperties.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,bd110f83-9804-4d7b-882e-1dc722ae449a.aspx</id>
    <published>2012-05-20T14:04:01.2435-04:00</published>
    <updated>2012-05-20T14:32:15.759125-04:00</updated>
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:70b6fd2f-3bc8-40e6-aa12-87b5f2ed451f" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Greeter</span>
              <br />
{<br /><span style="color:#008000">//field</span><br /><span style="color:#008000">//generally speaking don't give other classes access
to your fields</span><br /><span style="color:#008000">//can think of it as how it is storing state for the class</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">string</span> speaker;<br /><br /><span style="color:#008000">//property.. this is public.. the behaviour</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> Speaker<br />
{<br /><span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> speaker;
}<br /><span style="color:#008000">//we've got an immutable type.. something that can't
be changed after it is constructed</span><br /><span style="color:#008000">//immutable is nice as don't need to worry about change
of state</span><br /><span style="color:#008000">//set { speaker = value; }</span><br />
}<br /><br /><span style="color:#0000ff">public</span> Greeter(<span style="color:#0000ff">string</span> speaker)<br />
{<br /><span style="color:#008000">//this is referring to current object</span><br /><span style="color:#0000ff">this</span>.speaker = speaker;<br />
}<br /><br /><span style="color:#008000">//public methods are part of the API</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> SayHello(<span style="color:#0000ff">string</span> recipient)<br />
{<br /><span style="color:#0000ff">if</span> (recipient == <span style="color:#0000ff">null</span>)<br />
{<br /><span style="color:#0000ff">throw</span><span style="color:#0000ff">new</span><span style="color:#2b91af">ArgumentNullException</span>(<span style="color:#a31515">"recipient"</span>);<br />
}<br /><span style="color:#0000ff">if</span> (speaker == <span style="color:#0000ff">null</span>)<br />
{ 
<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello
"</span> + recipient;<br />
}<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello
"</span> + recipient + <span style="color:#a31515">" from "</span> +
speaker;<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
private fields good.. readonly v.good as then we’re immutable therefore easier as
don’t need to worry about changes in state
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:157a1340-7437-4327-aacd-9bc19f012924" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">[<span style="color:#2b91af">Test</span>] 
<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> SpeakerProperty_IsSetFromConstructor()<br />
{<br /><span style="color:#2b91af">Greeter</span> greeter = <span style="color:#0000ff">new</span><span style="color:#2b91af">Greeter</span>(<span style="color:#a31515">"Rob"</span>);<br /><span style="color:#2b91af">Assert</span>.AreEqual(<span style="color:#a31515">"Rob"</span>,
greeter.Speaker);<br /><span style="color:#2b91af">Assert</span>.AreNotEqual(<span style="color:#a31515">"rob"</span>,
greeter.Speaker);<br />
}
</div>
          </div>
        </div>
        <p>
asdf
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3daaf738-74f9-45cb-abab-11acf8a1f2cf" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Greeter</span>
              <br />
{<br /><span style="color:#008000">//field</span><br /><span style="color:#008000">//generally speaking don't give other classes access
to your fields</span><br /><span style="color:#008000">//can think of it as how it is storing state for the class</span><br /><span style="color:#008000">//private string speaker;</span><br /><br /><span style="color:#008000">//property.. this is public.. the behaviour</span><br /><span style="color:#008000">//public string Speaker</span><br /><span style="color:#008000">//{</span><br /><span style="color:#008000">// get { return speaker; }</span><br /><span style="color:#008000">// //we've got an immutable type.. something that
can't be changed after it is constructed</span><br /><span style="color:#008000">// //immutable is nice as don't need to worry about
change of state</span><br /><br /><span style="color:#008000">// //value is a contextual keyword</span><br /><span style="color:#008000">// set { speaker = value; }</span><br /><span style="color:#008000">//}</span><br /><br /><span style="color:#008000">//auto props introduced in C#3</span><br /><span style="color:#008000">//with private property is now immutable..however not
quite as could change it in this class</span><br /><span style="color:#008000">//if want to protect against this, then make a backing
field with readonly like above</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> Speaker
{ <span style="color:#0000ff">get</span>; <span style="color:#0000ff">private</span><span style="color:#0000ff">set</span>;
}<br /><br /><span style="color:#0000ff">public</span> Greeter(<span style="color:#0000ff">string</span> speaker)<br />
{<br /><span style="color:#008000">//this is referring to current object</span><br /><span style="color:#0000ff">this</span>.Speaker = speaker;<br />
}
</div>
          </div>
        </div>
        <p>
asdf
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b3d797f1-1ea6-4652-b3d5-a13133f92af9" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Greeter</span>
              <br />
{<br /><span style="color:#008000">//field</span><br /><span style="color:#008000">//generally speaking don't give other classes access
to your fields</span><br /><span style="color:#008000">//can think of it as how it is storing state for the class</span><br /><span style="color:#008000">//private string speaker;</span><br /><br /><span style="color:#008000">//property.. this is public.. the behaviour</span><br /><span style="color:#008000">//public string Speaker</span><br /><span style="color:#008000">//{</span><br /><span style="color:#008000">// get { return speaker; }</span><br /><span style="color:#008000">// //we've got an immutable type.. something that
can't be changed after it is constructed</span><br /><span style="color:#008000">// //immutable is nice as don't need to worry about
change of state</span><br /><br /><span style="color:#008000">// //value is a contextual keyword</span><br /><span style="color:#008000">// set { speaker = value; }</span><br /><span style="color:#008000">//}</span><br /><br /><span style="color:#008000">//auto props introduced in C#3</span><br /><span style="color:#008000">//with private property is now immutable..however not
quite as could change it in this class</span><br /><span style="color:#008000">//if want to protect against this, then make a backing
field with readonly like above</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> Speaker
{ <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>;
}<br /><span style="color:#008000">//private readonly string speaker;</span><br /><span style="color:#008000">//public string Speaker</span><br /><span style="color:#008000">//{</span><br /><span style="color:#008000">// get</span><br /><span style="color:#008000">// {</span><br /><span style="color:#008000">// Console.WriteLine("Returning speaker = "
+ speaker);</span><br /><span style="color:#008000">// return speaker;</span><br /><span style="color:#008000">// }</span><br /><span style="color:#008000">//}</span><br /><br /><span style="color:#0000ff">public</span> Greeter(<span style="color:#0000ff">string</span> speaker)<br />
{<br /><span style="color:#0000ff">this</span>.Speaker = speaker;<br />
}<br /><br /><span style="color:#008000">//public methods are part of the API</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> SayHello(<span style="color:#0000ff">string</span> recipient)<br />
{<br /><span style="color:#0000ff">if</span> (recipient == <span style="color:#0000ff">null</span>)<br />
{<br /><span style="color:#0000ff">throw</span><span style="color:#0000ff">new</span><span style="color:#2b91af">ArgumentNullException</span>(<span style="color:#a31515">"recipient"</span>);<br />
}<br /><span style="color:#0000ff">if</span> (Speaker == <span style="color:#0000ff">null</span>)<br />
{ 
<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello
"</span> + recipient;<br />
}<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello
"</span> + recipient + <span style="color:#a31515">" from "</span> +
Speaker;<br />
}
</div>
          </div>
        </div>
        <p>
auto properties.  Backing fields.
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=bd110f83-9804-4d7b-882e-1dc722ae449a" />
      </div>
    </content>
  </entry>
  <entry>
    <title>C# Jon Skeet–Methods Constructors and Exceptions</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/20/CJonSkeetMethodsConstructorsAndExceptions.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,e1094a33-fd51-4c0b-897d-31a2789cf9ff.aspx</id>
    <published>2012-05-20T13:32:16.540375-04:00</published>
    <updated>2012-05-20T13:32:33.352875-04:00</updated>
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c2d5a367-4577-47b5-87b0-80ae095e1512" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Greeter</span>
              <br />
{<br /><span style="color:#008000">//adding a parameter</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> SayHello(<span style="color:#0000ff">string</span> recipient)<br />
{<br /><span style="color:#008000">//return "Hello " + recipient;</span><br /><span style="color:#0000ff">return</span><span style="color:#0000ff">string</span>.Concat(<span style="color:#a31515">"Hello
"</span>,recipient);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
compiled changes the + to a string.Concat
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a6ebda93-f76a-481d-b82b-b60a5d239741" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">GreeterTest</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> SayHello_ReturnsHelloWithReceipientName()<br />
{<br /><span style="color:#2b91af">Greeter</span> greeter = <span style="color:#0000ff">new</span><span style="color:#2b91af">Greeter</span>();<br /><span style="color:#008000">//adding an argument</span><br /><span style="color:#0000ff">string</span> greeting = greeter.SayHello(<span style="color:#a31515">"Jon"</span>);<br /><span style="color:#2b91af">Assert</span>.AreEqual(<span style="color:#a31515">"Hello
Jon"</span>, greeting);<br />
}<br />
}
</div>
          </div>
        </div>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bb4bb6f1-47b7-450f-bff3-65fbb6accd8b" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//constructor
is used to build an instance of a class, an object</span>
              <br />
              <span style="color:#008000">//if no constructor the compiler will make one for us.</span>
              <br />
              <span style="color:#008000">//which calls the base class constructor..</span>
              <br />
              <span style="color:#0000ff">public</span> Greeter() : <span style="color:#0000ff">base</span>()<br />
{<br />
}
</div>
          </div>
        </div>
        <p>
adding a constructor (ctor)
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b28a571d-f676-4c5a-8c8a-222f6e2191c1" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Greeter</span>
              <br />
{<br /><span style="color:#008000">//a private field..if it is only set within the constructor
then set it readonly</span><br /><span style="color:#008000">//the = "asdf" is a variable initialiser</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">string</span> speaker
= <span style="color:#a31515">"Rob"</span>;<br /><br /><span style="color:#0000ff">public</span> Greeter(<span style="color:#0000ff">string</span> speaker)<br />
{<br /><span style="color:#0000ff">this</span>.speaker = speaker;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> SayHello(<span style="color:#0000ff">string</span> recipient)<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello
"</span> + recipient + <span style="color:#a31515">" from "</span> +
speaker;<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
variable initialiser.. and readonly field
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4c34ccf0-00e0-4674-a824-b05f599b3914" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">GreeterTest</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> SayHello_ReturnsHelloWithReceipientNameAndSpeakerName()<br />
{<br /><span style="color:#2b91af">Greeter</span> greeter = <span style="color:#0000ff">new</span><span style="color:#2b91af">Greeter</span>(<span style="color:#a31515">"Rob"</span>);<br /><span style="color:#0000ff">string</span> greeting = greeter.SayHello(<span style="color:#a31515">"Jon"</span>);<br /><span style="color:#2b91af">Assert</span>.AreEqual(<span style="color:#a31515">"Hello
Jon from Rob"</span>, greeting);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> CanConstructingGreeterWithoutSpeakerName()<br />
{<br /><span style="color:#008000">//null here... is a special kind of reference.. ie a blank
piece of paper with directions to nowhere</span><br /><span style="color:#008000">//it is not an empty string</span><br /><span style="color:#0000ff">new</span><span style="color:#2b91af">Greeter</span>(<span style="color:#0000ff">null</span>);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> SayHello_ReturnsHelloWithReceipientNameButNoSpeakerName()<br />
{<br /><span style="color:#2b91af">Greeter</span> greeter = <span style="color:#0000ff">new</span><span style="color:#2b91af">Greeter</span>(<span style="color:#0000ff">null</span>);<br /><span style="color:#0000ff">string</span> greeting = greeter.SayHello(<span style="color:#a31515">"Jon"</span>);<br /><span style="color:#2b91af">Assert</span>.AreEqual(<span style="color:#a31515">"Hello
Jon"</span>, greeting);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> SayHello_ThrowsExceptionWithNullReceipient()<br />
{<br /><span style="color:#2b91af">Greeter</span> greeter = <span style="color:#0000ff">new</span><span style="color:#2b91af">Greeter</span>(<span style="color:#a31515">"Rob"</span>);<br /><span style="color:#008000">//Assert.Throws&lt;ArgumentNullException&gt;(() =&gt;
greeter.SayHello(null));</span><br /><span style="color:#2b91af">Assert</span>.Throws(<span style="color:#0000ff">typeof</span> (<span style="color:#2b91af">ArgumentNullException</span>), <span style="color:#0000ff">delegate</span><br />
{<br />
greeter.SayHello(<span style="color:#0000ff">null</span>);<br />
});<br />
}
</div>
          </div>
        </div>
        <p>
null references.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:daea5a5d-ae5f-4b29-acf7-c2f6ac41d776" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Greeter</span>
              <br />
{<br /><span style="color:#008000">//a private field..if it is only set within the constructor
then set it readonly</span><br /><span style="color:#008000">//the = "asdf" is a variable initialiser</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">string</span> speaker;<br /><br /><span style="color:#0000ff">public</span> Greeter(<span style="color:#0000ff">string</span> speaker)<br />
{<br /><span style="color:#0000ff">this</span>.speaker = speaker;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> SayHello(<span style="color:#0000ff">string</span> recipient)<br />
{<br /><span style="color:#0000ff">if</span> (recipient == <span style="color:#0000ff">null</span>)<br />
{<br /><span style="color:#0000ff">throw</span><span style="color:#0000ff">new</span><span style="color:#2b91af">ArgumentNullException</span>(<span style="color:#a31515">"recipient"</span>);<br />
}<br /><span style="color:#0000ff">if</span> (speaker == <span style="color:#0000ff">null</span>)<br />
{ 
<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello
"</span> + recipient;<br />
}<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello
"</span> + recipient + <span style="color:#a31515">" from "</span> +
speaker;<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
variable initialiser.  readonly fields – use where only set in the constructor
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=e1094a33-fd51-4c0b-897d-31a2789cf9ff" />
      </div>
    </content>
  </entry>
  <entry>
    <title>C#–Jon Skeet VS Environment and First Class</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/20/CJonSkeetVSEnvironmentAndFirstClass.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,bbbf20de-d517-4619-adf3-e89b025da68c.aspx</id>
    <published>2012-05-19T22:03:06.8534359-04:00</published>
    <updated>2012-05-20T12:48:39.7435-04:00</updated>
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
an assembly is a library or executable or website
</p>
        <p>
System.Core   are the standard(ish) libraries..more general
</p>
        <p>
Microsoft.CSharp  .. are something lke the mono team would create their own ones..?
eg Win32 specific..but mono would probably have to do a Microsoft.CSharp..
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/CJon-Skeet-VS-Environment_11EF9/image_2.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/CJon-Skeet-VS-Environment_11EF9/image_thumb.png" width="306" height="178" />
          </a>
        </p>
        <p>
Jon doesn’t like warnings.. there is a VS setting to make all warnings errors.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e61c7239-1189-48e8-be3e-c54f69118e8d" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#008000">//PascalCase</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">GreeterTest</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> SayHello_ReturnsHello()<br />
{<br /><span style="color:#008000">//declaring a variable of type Greeter.</span><br /><span style="color:#008000">//calling the constructor</span><br /><span style="color:#008000">//assign the value back from the constructor to greeter</span><br /><span style="color:#008000">//the value of the greeter variable is 'directions'
to the Greeter... way of getting to the object</span><br /><span style="color:#008000">//eg directions to house of a bit of paper</span><br /><span style="color:#008000">//ie it is the reference type</span><br /><span style="color:#2b91af">Greeter</span> greeter = <span style="color:#0000ff">new</span><span style="color:#2b91af">Greeter</span>();<br /><span style="color:#008000">//this has the same reference.. there is only 1 instance
of greeter</span><br /><span style="color:#008000">//the value isn't the object</span><br /><span style="color:#2b91af">Greeter</span> theSameGreeter = greeter;<br /><span style="color:#008000">//camelCase</span><br /><span style="color:#008000">//Greeter greeterOther;</span><br /><br /><span style="color:#008000">//all types begin with Capital</span><br /><span style="color:#008000">//string, int, unit, byte, object.. alias for full type
name System.String ... int is to System.Int32 </span><br /><span style="color:#008000">//not Random</span><br /><span style="color:#008000">//string (System.String) is a reference type</span><br /><span style="color:#0000ff">string</span> greeting = greeter.SayHello();<br /><span style="color:#008000">//passing in arguments.. a string literal</span><br /><span style="color:#2b91af">Assert</span>.AreEqual(<span style="color:#a31515">"Hello"</span>,
greeting);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
Jon describing in detail 3 lines of code.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:64adf30c-f56b-43c4-9e80-c749c4c50204" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//a class is a sort of blueprint of an object</span>
              <br />
              <span style="color:#008000">//some information</span>
              <br />
              <span style="color:#008000">//some associated behaviours</span>
              <br />
              <span style="color:#008000">//eg a house... </span>
              <br />
              <span style="color:#008000">//colour walls are, colour windows are...</span>
              <br />
              <span style="color:#008000">//behaviour change colour, turn on heating</span>
              <br />
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Greeter</span>
              <br />
{<br /><span style="color:#008000">//behaviour is usually in methods in c#</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> SayHello()<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#a31515">"Hello"</span>;<br />
}<br />
}
</div>
          </div>
        </div>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=bbbf20de-d517-4619-adf3-e89b025da68c" />
      </div>
    </content>
  </entry>
  <entry>
    <title>TekPub C#4 Jon Skeet</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/19/TekPubC4JonSkeet.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,616d76f6-b63e-4e7e-b95d-313a442b6665.aspx</id>
    <published>2012-05-19T16:20:34.7909359-04:00</published>
    <updated>2012-05-19T16:20:34.7909359-04:00</updated>
    <category term="c# language" label="c# language" scheme="http://www.programgood.net/CategoryView,category,cLanguage.aspx" />
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Supposed to be the introduction episode <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.programgood.net/content/binary/Windows-Live-Writer/29d7293f30dc_C366/wlEmoticon-smile_2.png" /></p>
        <h2>Dynamic
</h2>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:64f7a965-b356-44e1-b6dd-c29f8606726b" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">static</span>
              <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[]
args)<br />
{<br /><span style="color:#0000ff">object</span> x = <span style="color:#0000ff">new</span><span style="color:#2b91af">List</span>&lt;<span style="color:#0000ff">int</span>&gt;();<br /><span style="color:#008000">//will give an InvalidCastException at runtime</span><br /><span style="color:#0000ff">string</span> y = (<span style="color:#0000ff">string</span>)
x;<br /><span style="color:#2b91af">Console</span>.WriteLine(y.Length);<br />
}
</div>
          </div>
        </div>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f5a82609-b590-4871-b2eb-6f439f6fa5cd" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 500px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">object</span> x
= <span style="color:#a31515">"hello"</span>;<br /><span style="color:#0000ff">string</span> y = (<span style="color:#0000ff">string</span>)
x;<br /><span style="color:#2b91af">Console</span>.WriteLine(y.Length);
</div>
          </div>
        </div>
        <p>
gives answer of 5
</p>
        <p>
        </p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d154d44a-01fe-4346-ad33-cddfe410c9ca" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">object</span> x
= <span style="color:#0000ff">null</span>;<br /><span style="color:#008000">//we can cast a null reference</span><br /><span style="color:#0000ff">string</span> y = (<span style="color:#0000ff">string</span>)x;<br /><span style="color:#008000">//but we cant dereference it..get a nullReferenceException</span><br /><span style="color:#2b91af">Console</span>.WriteLine(y.Length);
</div>
          </div>
        </div>
        <p>
sdf
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ccf3e83e-09cb-4b0a-8a97-5c9a0cbfccdc" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//don't
think of x at any type... sort out at execution time</span>
              <br />
              <span style="color:#0000ff">dynamic</span> x = <span style="color:#a31515">"hello"</span>;<br /><span style="color:#008000">//5</span><br /><span style="color:#2b91af">Console</span>.WriteLine(x.Length);<br /><br /><span style="color:#008000">//an array</span><br />
x = <span style="color:#0000ff">new</span><span style="color:#0000ff">int</span>[]
{10, 20, 30 };<br /><span style="color:#008000">//3</span><br /><span style="color:#2b91af">Console</span>.WriteLine(x.Length);
</div>
          </div>
        </div>
        <p>
from
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5191df73-7849-4858-91dd-2f91cf754dfd" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">int</span> x
= 123;<br /><span style="color:#0000ff">int</span> y = 10;<br /><span style="color:#2b91af">Console</span>.WriteLine(x-y);
</div>
          </div>
        </div>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/29d7293f30dc_C366/image_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/29d7293f30dc_C366/image_thumb.png" width="533" height="512" />
          </a>
        </p>
        <p>
using ildasm to disassemble the debug assembly.  The nop statements are for debug.
</p>
        <p>
This is op code (IL).. i4 is like int32
</p>
        <p>
load 123 and put into stack position 0
</p>
        <p>
load 10 and put into stack position 1
</p>
        <p>
then put into dynamic types
</p>
        <h2>Named Arguments
</h2>
        <p>
Whats an argument and whats a parameter?
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b4dac9ec-2f0d-4d1b-b1b9-c8e423a803dc" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">static</span>
              <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[]
args)<br />
{<br /><span style="color:#008000">//provide an argument</span><br />
Foo(<span style="color:#a31515">"hello"</span>);<br />
}<br /><br /><span style="color:#008000">//x is a parameter</span><br /><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> Foo(<span style="color:#0000ff">string</span> x)<br />
{<br /><span style="color:#2b91af">Console</span>.WriteLine(x);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/29d7293f30dc_C366/image_4.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/29d7293f30dc_C366/image_thumb_1.png" width="270" height="353" />
          </a>
        </p>
        <p>
Got it the wrong way round.. hard to tell which is which in MessageBox.Show
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:23b168ab-1590-4db7-8367-b86e9c979516" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">static</span>
              <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[]
args)<br />
{<br /><span style="color:#008000">//named argument C#4</span><br />
Foo(x: <span style="color:#a31515">"hello"</span>, y:<span style="color:#a31515">"Rob"</span>);<br /><span style="color:#008000">//referenced System.Windows.Forms</span><br /><span style="color:#2b91af">MessageBox</span>.Show(caption:<span style="color:#a31515">"title"</span>,
text:<span style="color:#a31515">"body"</span>);<br />
}<br /><br /><span style="color:#008000">//x is a parameter</span><br /><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> Foo(<span style="color:#0000ff">string</span> x, <span style="color:#0000ff">string</span> y)<br />
{<br /><span style="color:#2b91af">Console</span>.WriteLine(x + <span style="color:#a31515">"
"</span> + y);<br />
}
</div>
          </div>
        </div>
        <p>
better!
</p>
        <h2>Optional Parameters
</h2>
        <p>
        </p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:af2b379f-46a9-43a6-bd15-e8c4cdb74cdc" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">static</span>
              <span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[]
args)<br />
{<br /><span style="color:#008000">//named arguments</span><br />
Foo(y: <span style="color:#a31515">"Rob"</span>);<br />
Foo(y: <span style="color:#a31515">"Dave"</span>);<br />
Foo(y: <span style="color:#a31515">"Mike"</span>);<br />
Foo(y: <span style="color:#a31515">"Bill"</span>);<br />
Foo(<span style="color:#a31515">"Hi"</span>, <span style="color:#a31515">"Anders"</span>);<br />
Foo();<br />
}<br /><br /><span style="color:#008000">//optional parameters</span><br /><span style="color:#008000">//if first parameter is optional all have to be</span><br /><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> Foo(<span style="color:#0000ff">string</span> x
= <span style="color:#a31515">"Hello"</span>, <span style="color:#0000ff">string</span> y
= <span style="color:#a31515">"Everone"</span>)<br />
{ 
<br /><span style="color:#2b91af">Console</span>.WriteLine(x + <span style="color:#a31515">"
"</span> + y);<br />
}<br />
}
</div>
          </div>
        </div>
        <h2>Covariance and Contravariance
</h2>
        <p>
Some code here.. poster child of the more used covariance is IEnumerable&lt;T&gt;..
look for out keword.  And it is to do with hierarchies.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e1a928d3-bffc-47df-b173-ef3b54e9eceb" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Fruit</span> {
}<br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Banana</span> : <span style="color:#2b91af">Fruit</span> {
}<br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Apple</span> : <span style="color:#2b91af">Fruit</span> {
}<br /><br /><span style="color:#008000">//interface IEnumerable&lt;out T&gt;</span><br /><span style="color:#008000">//{</span><br /><span style="color:#008000">// IEnumerator&lt;T&gt; GetEnumerator();</span><br /><span style="color:#008000">//}</span><br /><br /><span style="color:#008000">//interface IEnumerator&lt;out T&gt; : IDisposable</span><br /><span style="color:#008000">//{</span><br /><span style="color:#008000">// T Current { get; }</span><br /><span style="color:#008000">// bool MoveNext();</span><br /><span style="color:#008000">// void Reset();</span><br /><span style="color:#008000">//}</span><br /><br /><span style="color:#008000">//covariance values coming out of an interface</span><br /><span style="color:#008000">//usually happens with IEnumerable of T</span><br /><span style="color:#0000ff">interface</span><span style="color:#2b91af">IFoo</span>&lt;<span style="color:#0000ff">out</span> T&gt;<br />
{<br />
T GiveMeAnInstanceOfT();<br /><span style="color:#008000">//void TakeanInstanceOfT(T instance);</span><br />
}<br /><br /><span style="color:#008000">//contravariance is in</span><br /><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Program</span><br />
{<br /><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[]
args)<br />
{<br /><span style="color:#008000">//List&lt;Banana&gt; bunchOfBananas = new List&lt;Banana&gt;();</span><br /><span style="color:#2b91af">IFoo</span>&lt;<span style="color:#2b91af">Banana</span>&gt;
bunchOfBananas = <span style="color:#0000ff">null</span>;<br /><br /><span style="color:#008000">//cant convert from a list of banana to a list of fruit</span><br /><span style="color:#008000">//List&lt;Fruit&gt; fruitBowl = new List&lt;Banana&gt;();</span><br /><br /><span style="color:#008000">//List&lt;Fruit&gt; fruitBowl = bunchOfBananas;</span><br /><span style="color:#008000">//fruitBowl.Add(new Apple());</span><br /><br /><span style="color:#008000">//Banana banana = bunchOfBananas[0]; </span><br /><br /><span style="color:#008000">//IEnumerable - sequence..cant add.. can only observe</span><br /><span style="color:#008000">//IEnumerable&lt;Fruit&gt; fruitBowl = bunchOfBananas;</span><br /><span style="color:#2b91af">IFoo</span>&lt;<span style="color:#2b91af">Fruit</span>&gt;
fruitBowl = bunchOfBananas;<br />
}<br />
}
</div>
          </div>
        </div>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=616d76f6-b63e-4e7e-b95d-313a442b6665" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tekpub–Jon Skeet–Builder Pattern</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/19/TekpubJonSkeetBuilderPattern.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,9cb222d4-ec06-495b-b053-e5fa1b84cbb2.aspx</id>
    <published>2012-05-19T12:33:42.3690609-04:00</published>
    <updated>2012-05-19T12:33:42.3690609-04:00</updated>
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
When constructors get out of control and Factory gets cumbersome.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c4dd083d-5bad-428e-bb01-ac6ab857b1db" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">BuilderTests</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> BuilderPattern()<br />
{<br /><span style="color:#2b91af">Period</span> period = <span style="color:#2b91af">Period</span>.FromHours(5);<br /><span style="color:#008000">//gets longwinded</span><br />
period = <span style="color:#2b91af">Period</span>.FromHours(5) + <span style="color:#2b91af">Period</span>.FromMinutes(3);<br /><br /><span style="color:#008000">//mandatory stuff in constructor</span><br /><span style="color:#008000">//eg if this were an EmailBuilder then to, from etc..</span><br /><span style="color:#008000">//PeriodBuilder builder = new PeriodBuilder();</span><br /><span style="color:#008000">////option stuff</span><br /><span style="color:#008000">//builder.Hours = 5;</span><br /><span style="color:#008000">//builder.Minutes = 3;</span><br /><span style="color:#008000">//Period built = builder.Build();</span><br /><br /><span style="color:#008000">//using object initialiser syntax C#3</span><br /><span style="color:#2b91af">Period</span> built = <span style="color:#0000ff">new</span><span style="color:#2b91af">PeriodBuilder</span> {
Hours = 5, Minutes = 3 }.Build();<br /><br /><span style="color:#008000">//this wont change anything</span><br /><span style="color:#008000">//builder.Seconds = 10;</span><br /><span style="color:#2b91af">Assert</span>.AreEqual(0, built.Seconds);<br /><span style="color:#2b91af">Assert</span>.AreEqual(built, period);<br />
}<br />
}
</div>
          </div>
        </div>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=9cb222d4-ec06-495b-b053-e5fa1b84cbb2" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tekpub8–Jon Skeet–Factory Pattern</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/19/Tekpub8JonSkeetFactoryPattern.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,e4065768-8468-4a93-b10b-01517da211b4.aspx</id>
    <published>2012-05-18T22:39:06.4375-04:00</published>
    <updated>2012-05-18T22:39:06.4375-04:00</updated>
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b2504b65-04a9-4688-8199-172f125192c5" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//this is an immutable type</span>
              <br />
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">sealed</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Point</span>
              <br />
{<br /><span style="color:#008000">//field</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">int</span> x;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">int</span> y;<br /><br /><span style="color:#008000">//property</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">int</span> X
{ <span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> x;
} }<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">int</span> Y
{ <span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> y;
} }<br /><br /><span style="color:#0000ff">public</span> Point(<span style="color:#0000ff">int</span> x, <span style="color:#0000ff">int</span> y)<br />
{<br /><span style="color:#0000ff">this</span>.x = x;<br /><span style="color:#0000ff">this</span>.y = y;<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
asdf
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:12c200af-5eea-46af-8736-27f8f8605850" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">struct</span>
              <span style="color:#2b91af">BadDuration</span>
              <br />
{<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">long</span> seconds;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">long</span> milliseconds;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">long</span> ticks;<br /><br /><span style="color:#008000">//multiple constructors are a code smell and can mean
you're trying to do too much with a single class or struct</span><br /><span style="color:#0000ff">public</span> BadDuration(<span style="color:#0000ff">long</span> ticks)<br />
{<br /><span style="color:#0000ff">this</span>.ticks = ticks;<br />
}<br /><br /><span style="color:#0000ff">public</span> BadDuration(<span style="color:#0000ff">long</span> milliseconds)<br />
{<br /><span style="color:#0000ff">this</span>.ticks = milliseconds * 10000;<br />
}<br /><br /><span style="color:#0000ff">public</span> BadDuration(<span style="color:#0000ff">long</span> seconds)<br />
{<br /><span style="color:#0000ff">this</span>.ticks = seconds * 10000 * 1000;<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
wont compile as signatures are the same eg all are longs
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:08fcb9d4-9114-4244-b302-6180c6d9e4c2" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">struct</span>
              <span style="color:#2b91af">BadDuration</span>
              <br />
{<br /><span style="color:#008000">//fields</span><br /><span style="color:#008000">//private readonly long seconds;</span><br /><span style="color:#008000">//private readonly long milliseconds;</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#0000ff">long</span> ticks;<br /><br /><span style="color:#008000">//property</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">long</span> Ticks
{ <span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> ticks;
} }<br /><br /><span style="color:#008000">//this works in a class.. sort of immutable</span><br /><br /><span style="color:#008000">//multiple constructors are a code smell and can mean
you're trying to do too much with a single class or struct</span><br /><span style="color:#0000ff">private</span> BadDuration(<span style="color:#0000ff">long</span> ticks)<br />
{<br /><span style="color:#0000ff">this</span>.ticks = ticks;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#2b91af">BadDuration</span> FromTicks(<span style="color:#0000ff">long</span> ticks)<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">new</span><span style="color:#2b91af">BadDuration</span>(ticks);<br />
}<br /><br /><span style="color:#008000">//the classic Factory pattern that can help clear up a
constructor overload mess. downside is requires a knowledge of your api.</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#2b91af">BadDuration</span> FromMilliseconds(<span style="color:#0000ff">long</span> milliseconds)<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">new</span><span style="color:#2b91af">BadDuration</span>(milliseconds
* 10000);<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#2b91af">BadDuration</span> FromSeconds(<span style="color:#0000ff">long</span> seconds)<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">new</span><span style="color:#2b91af">BadDuration</span>(seconds
* 10000 * 1000);<br />
}<br />
}<br /><br /><span style="color:#008000">//immutable - state cannot be modified after it has been
created</span><br />
[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">SimpleImmutability</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> FromSeconds()<br />
{<br /><span style="color:#2b91af">BadDuration</span> duration = <span style="color:#2b91af">BadDuration</span>.FromMilliseconds(5);<br /><span style="color:#2b91af">Assert</span>.AreEqual(50000, duration.Ticks);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> Ticks()<br />
{<br /><span style="color:#2b91af">BadDuration</span> duration = <span style="color:#2b91af">BadDuration</span>.FromTicks(10);<br /><span style="color:#2b91af">Assert</span>.AreEqual(10, duration.Ticks);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
very interesting code with with classic Factory pattern.  Very nice way of easily
making objects.
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=e4065768-8468-4a93-b10b-01517da211b4" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tekpub 7–Jon Skeet–Open/Closed Principle and Liskov Substitution</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/19/Tekpub7JonSkeetOpenClosedPrincipleAndLiskovSubstitution.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,80a44ba0-6ba6-4ad4-8c2e-16e846b674f3.aspx</id>
    <published>2012-05-18T22:16:14.828125-04:00</published>
    <updated>2012-05-18T22:16:14.828125-04:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
SOLID Principles (Uncle Bob)
</p>
        <p>
Single Responsibility – Epi 6
</p>
        <p>
Open / Closed – 7
</p>
        <p>
Liskov Substitution – 7
</p>
        <p>
Interface Segregation – 2
</p>
        <p>
Dependency Inversion – 3 and 4
</p>
        <p>
 
</p>
        <h2>Open/Closed Principle
</h2>
        <p>
Change is inevitable in software, but when we change this chaotically we get chaotic
results.
</p>
        <p>
Must easier to think of complex system of small bits, which are tested well, then
we put them together.
</p>
        <p>
When a class is ‘done’.. it is 
</p>
        <ul>
          <li>
Open for extension</li>
          <li>
Closed for modification</li>
        </ul>
        <p>
ie don’t touch stuff that works
</p>
        <p>
maybe derived from class… or chage source code of class… just don’t change behaviour
</p>
        <h2>Barbara Liskovs Substitution Principle
</h2>
        <p>
all about inheritance.
</p>
        <p>
eg I should be able to use any implementation of IClock without knowing which one
I’m using
</p>
        <p>
 
</p>
        <p>
Software engineering is a tradeoff… pragmatic rather than dogmatic
</p>
        <p>
Jon – inheritance should be used judiciously!
</p>
        <p>
internal and sealed classes….
</p>
        <p>
System.Web is notorious for hiding classes making is very difficult to test
</p>
        <p>
HttpContext has caused many sleepless nights.
</p>
        <p>
“Deisgn for inheritance or prohibit it”
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2d0104ae-9481-4936-8b3d-d36ac762dca4" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Point</span>
              <br />
{<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">int</span> X
{ <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>;
}<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">int</span> Y
{ <span style="color:#0000ff">get</span>; <span style="color:#0000ff">set</span>;
}<br />
}<br /><br /><span style="color:#008000">//I haven't put the time into figuring out what this
class should do under</span><br /><span style="color:#008000">//inheritance</span><br /><span style="color:#008000">//public sealed class Liskov</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">Liskov</span><br />
{<br /><span style="color:#008000">//Virtual methods and properties in base classes </span><br /><span style="color:#008000">//REQUIRE derived classes to use the ?override? keyword
when, well, overriding said methods and properties</span><br /><br /><span style="color:#008000">//document what it does, not how it achieves it</span><br /><span style="color:#008000">//ignoring derived.. Foo is going to return hello, Bar
is going to return hello there</span><br /><span style="color:#008000">//noone else should care</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">virtual</span><span style="color:#0000ff">string</span> FormatPoint(<span style="color:#2b91af">Point</span> point)<br />
{<br /><span style="color:#0000ff">return</span> FormatPoint(point.X, point.Y);<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">virtual</span><span style="color:#0000ff">string</span> FormatPoint(<span style="color:#0000ff">int</span> x, <span style="color:#0000ff">int</span> y)<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">string</span>.Format(<span style="color:#a31515">"x={</span><span style="color:#3cb371">0}</span><span style="color:#a31515">,
y={</span><span style="color:#3cb371">1}</span><span style="color:#a31515">"</span>,
x, y);<br />
}<br />
}<br /><br /><span style="color:#008000">//person deriving here, won't know they've changed
Bars behaviour too</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">Breakage</span> : <span style="color:#2b91af">Liskov</span><br />
{<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">override</span><span style="color:#0000ff">string</span> FormatPoint(<span style="color:#0000ff">int</span> x, <span style="color:#0000ff">int</span> y)<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">base</span>.FormatPoint(x,
y) + <span style="color:#a31515">"&lt;===="</span>;<br />
}<br />
}
</div>
          </div>
        </div>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=80a44ba0-6ba6-4ad4-8c2e-16e846b674f3" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tekpub 6–Jon Skeet–Single Responsibility and Type Meaning</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/19/Tekpub6JonSkeetSingleResponsibilityAndTypeMeaning.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,8c565a08-afc9-49b7-a0b1-a7efda897655.aspx</id>
    <published>2012-05-18T21:27:16.515625-04:00</published>
    <updated>2012-05-18T21:27:16.515625-04:00</updated>
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Designing types and using types.
</p>
        <p>
“Single Responsibility Principle” every class should be responsible for only one thing. 
Part of this is being completely clear about what the class does
</p>
        <p>
Try to have types that represent what you want them to.
</p>
        <p>
Summary for DateTime:
</p>
        <ul>
          <li>
can’t represent just a date</li>
          <li>
can’t represent just a time of day</li>
          <li>
got to use same time whether universal time, this computer, another timezone</li>
        </ul>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=8c565a08-afc9-49b7-a0b1-a7efda897655" />
      </div>
    </content>
  </entry>
  <entry>
    <title>TekPub4–IoC continued</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/18/TekPub4IoCContinued.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,afbde867-9ae7-4726-a8ac-7a1f7f2c9a9d.aspx</id>
    <published>2012-05-18T18:33:20.515625-04:00</published>
    <updated>2012-05-18T18:33:20.515625-04:00</updated>
    <category term="IoC" label="IoC" scheme="http://www.programgood.net/CategoryView,category,IoC.aspx" />
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In addition to handling instance construction, Inversion of Control containers can
also handle lifetime and scope for you.
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/TekPub4IoC-continued_F29C/image_2.png">
            <img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/TekPub4IoC-continued_F29C/image_thumb.png" width="244" height="128" />
          </a>
        </p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:05c0503c-4f16-4286-9613-53529c9a9da9" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//.InSingletonScope
resolve it later on, but resolve it only once, use the same instance after that.</span>
              <br />
              <span style="color:#008000">//injector.Bind&lt;IClock, SystemClock&gt;().InSingletonScope();</span>
            </div>
          </div>
        </div>
        <p>
.InSingletonScope resolve it later on, but resolve it only once, use the same instance
after that.
</p>
        <p>
Testability!
</p>
        <p>
singletons – global state is the enemy of simplicity! let IoC containers do stuff.
</p>
        <p>
logging is okay as its fine generally to have all the system call into the same logger
</p>
        <p>
for the clock – Jon is always using an interface, and DI.
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=afbde867-9ae7-4726-a8ac-7a1f7f2c9a9d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>TekPub4 and 5–Jon Skeet–IoC</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/18/TekPub4And5JonSkeetIoC.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,fb929952-3bbf-4110-8adf-bd1e6d02c178.aspx</id>
    <published>2012-05-18T17:22:46.921875-04:00</published>
    <updated>2012-05-18T18:14:15.125-04:00</updated>
    <category term="Factory" label="Factory" scheme="http://www.programgood.net/CategoryView,category,Factory.aspx" />
    <category term="JonSkeet" label="JonSkeet" scheme="http://www.programgood.net/CategoryView,category,JonSkeet.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Taking the manually done dependency injection and using a factory now (then go away
from factory to home grown  IoC)
</p>
        <p>
        </p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:729929f0-1e97-411a-bfd7-bbcaf872ca59" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//is
this unneeded complexity if its a smaller app? Actually this is a Factory</span>
              <br />
              <span style="color:#008000">//jon recommends if can keep in main method, then keep
manual DI.</span>
              <br />
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Injector</span>
              <br />
{<br /><span style="color:#008000">//getting ugly as can be literally 100's of dependencies</span><br /><span style="color:#0000ff">public</span><span style="color:#2b91af">IClock</span> CreateClock()<br />
{<br /><span style="color:#008000">//a singleton</span><br /><span style="color:#0000ff">return</span><span style="color:#2b91af">SystemClock</span>.Instance;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#2b91af">Licence</span> CreateLicence()<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#2b91af">Instant</span>.UnixEpoch,
CreateClock());<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#2b91af">DateTimeZone</span> CreateTimeZone()<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#2b91af">DateTimeZone</span>.GetSystemDefault();<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#2b91af">CalendarSystem</span> CreateCalendarSystem()<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#2b91af">CalendarSystem</span>.Iso;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#2b91af">Diary</span> CreateDiary()<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">new</span><span style="color:#2b91af">Diary</span>(CreateClock(),
CreateCalendarSystem(), CreateTimeZone());<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#2b91af">DiaryPresenter</span> CreateDiaryPresenter()<br />
{<br /><span style="color:#0000ff">return</span><span style="color:#0000ff">new</span><span style="color:#2b91af">DiaryPresenter</span>(CreateDiary(),
CreateLicence());<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
 
</p>
        <p>
and then:
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a15304bb-624c-486f-b905-57e6abfd6165" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">static</span>
              <span style="color:#0000ff">void</span> Main()<br />
{<br /><span style="color:#008000">// newing up the factory</span><br /><span style="color:#2b91af">Injector</span> injector = <span style="color:#0000ff">new</span><span style="color:#2b91af">Injector</span>();<br /><span style="color:#0000ff">var</span> presenter = injector.CreateDiaryPresenter();<br />
presenter.Start();<br />
}
</div>
          </div>
        </div>
        <p>
outtake to video 5..outtake…IoC.  Basically wanting to make things more generic:
</p>
        <p>
structuremap, ninject, autofac, Unity are IoC
</p>
        <p>
eg in an MVC app I  <a href="http://www.programgood.net/2011/09/20/VidPub1SettingUpSolution.aspx">http://www.programgood.net/2011/09/20/VidPub1SettingUpSolution.aspx</a>:
</p>
        <p>
“Every time you see a request for ILogger interface in a controller, return a new
NLogger class”
</p>
        <pre>kernel.Bind&lt;ILogger&gt;().To&lt;NLogger&gt;();</pre>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:72bc327c-691a-46b4-8185-fd5cd44343af" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">Program</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> MainTest()<br />
{<br /><span style="color:#008000">//manually setting up the dependencies</span><br /><span style="color:#2b91af">IClock</span> clock = <span style="color:#2b91af">SystemClock</span>.Instance;<br /><span style="color:#2b91af">Diary</span> diary = <span style="color:#0000ff">new</span><span style="color:#2b91af">Diary</span>(clock, <span style="color:#2b91af">CalendarSystem</span>.Iso, <span style="color:#2b91af">DateTimeZone</span>.GetSystemDefault());<br /><span style="color:#008000">//licence expired in 1970, and current time is systemclock
time</span><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#2b91af">Instant</span>.UnixEpoch,
clock);<br /><span style="color:#0000ff">var</span> presenter = <span style="color:#0000ff">new</span><span style="color:#2b91af">DiaryPresenter</span>(diary,
licence);<br />
presenter.Start();<br /><br /><span style="color:#008000">//IoC</span><br /><span style="color:#008000">//Injector injector = new Injector();</span><br /><span style="color:#008000">//injector.Bind&lt;IClock, SystemClock&gt;();</span><br /><span style="color:#008000">//injector.Bind&lt;DateTimeZone&gt;(DateTimeZone.GetSystemDefault());</span><br /><span style="color:#008000">//injector.Bind&lt;Instant&gt;(Instant.FromUtc(2000,1,1,0,0,0));</span><br /><span style="color:#008000">//injector.Bind&lt;CalendarSystem&gt;(CalendarSystem.Iso);</span><br /><br /><span style="color:#008000">////you've got all these things.. now do stuff please</span><br /><span style="color:#008000">//var presenter = injector.Resolve&lt;DiaryPresenter&gt;();</span><br /><span style="color:#008000">//presenter.Start();</span><br /><br /><br />
}<br />
}<br /><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">DiaryPresenter</span><br />
{<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">Diary</span> diary;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">Licence</span> licence;<br /><br /><span style="color:#0000ff">public</span> DiaryPresenter(<span style="color:#2b91af">Diary</span> diary, <span style="color:#2b91af">Licence</span> licence)<br />
{<br /><span style="color:#0000ff">this</span>.diary = diary;<br /><span style="color:#0000ff">this</span>.licence = licence;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> Start()<br />
{<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Today
is {</span><span style="color:#3cb371">0}</span><span style="color:#a31515">"</span>,
diary.FormatToday());<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Licence
expired? {</span><span style="color:#3cb371">0}</span><span style="color:#a31515">"</span>,
licence.HasExpired);<br />
}<br />
}<br /><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Licence</span><br />
{<br /><span style="color:#008000">//fields</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">Instant</span> expirey;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">IClock</span> clock;<br /><br /><span style="color:#0000ff">public</span> Licence(<span style="color:#2b91af">Instant</span> expirey, <span style="color:#2b91af">IClock</span> clock)<br />
{<br /><span style="color:#008000">//variables or local variables</span><br /><span style="color:#0000ff">this</span>.expirey = expirey;<br /><span style="color:#0000ff">this</span>.clock = clock;<br />
}<br /><br /><span style="color:#008000">//property</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">bool</span> HasExpired<br />
{<br /><span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> clock.Now
&gt;= expirey; }<br />
}<br />
}<br /><br /><span style="color:#008000">//calendaring application which will want to know what
time it is too!</span><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Diary</span><br />
{<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">LocalDatePattern</span> outputPattern
= <span style="color:#2b91af">LocalDatePattern</span>.CreateWithInvariantInfo(<span style="color:#a31515">"yyyy-MM-dd"</span>);<br /><span style="color:#008000">//fields</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">IClock</span> clock;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">CalendarSystem</span> calendar;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">DateTimeZone</span> timeZone;<br /><br /><span style="color:#008000">//by demanding the dependencies in the constructor, classes
are more flexible</span><br /><span style="color:#008000">//especially if they are interfacess</span><br /><span style="color:#0000ff">public</span> Diary(<span style="color:#2b91af">IClock</span> clock, <span style="color:#2b91af">CalendarSystem</span> calendar, <span style="color:#2b91af">DateTimeZone</span> timeZone)<br />
{<br /><span style="color:#0000ff">this</span>.clock = clock;<br /><span style="color:#0000ff">this</span>.calendar = calendar;<br /><span style="color:#0000ff">this</span>.timeZone = timeZone;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> FormatToday()<br />
{<br /><span style="color:#008000">//in system default timezone, and system default calendar</span><br /><span style="color:#008000">//DateTime dateTime = DateTime.Today;</span><br /><span style="color:#2b91af">LocalDate</span> date = clock.Now.InZone(timeZone, calendar).LocalDateTime.Date;<br /><span style="color:#0000ff">if</span> (date.Month == 4)<br />
{ <span style="color:#008000">//ncrunch showing black here - so tests are not covering
this codepath</span><br /><span style="color:#0000ff">return</span><span style="color:#a31515">"April
fool"</span>;<br />
}<br /><span style="color:#0000ff">return</span> outputPattern.Format(date);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
A working version of the code with manual DI.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:eeeaa83d-674a-445c-8b7a-13bfc612dd2c" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Program</span>
              <br />
{<br /><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> Main(<span style="color:#0000ff">string</span>[]
args)<br />
{<br /><span style="color:#008000">//manually setting up the dependencies</span><br /><span style="color:#2b91af">IClock</span> clock = <span style="color:#2b91af">SystemClock</span>.Instance;<br /><span style="color:#2b91af">Diary</span> diary = <span style="color:#0000ff">new</span><span style="color:#2b91af">Diary</span>(clock, <span style="color:#2b91af">CalendarSystem</span>.Iso, <span style="color:#2b91af">DateTimeZone</span>.GetSystemDefault());<br /><span style="color:#008000">//licence expired in 1970, and current time is systemclock
time</span><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#2b91af">Instant</span>.UnixEpoch,
clock);<br /><span style="color:#0000ff">var</span> presenter = <span style="color:#0000ff">new</span><span style="color:#2b91af">DiaryPresenter</span>(diary,
licence);<br />
presenter.Start();<br /><br /><br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Type
in 1 for good licence, 2 for expired"</span>);<br /><span style="color:#0000ff">string</span> userInput = <span style="color:#2b91af">Console</span>.ReadLine();<br /><span style="color:#0000ff">if</span> (userInput == <span style="color:#a31515">"1"</span>)<br />
{<br /><span style="color:#008000">//really need public properties on licence to reset it
rather than instantiating a new one!</span><br />
licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#2b91af">Instant</span>.FromUtc(2020,1,1,0,0,0),
clock);<br />
presenter = <span style="color:#0000ff">new</span><span style="color:#2b91af">DiaryPresenter</span>(diary,
licence);<br />
}<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"License
expiredx: {</span><span style="color:#3cb371">0}</span><span style="color:#a31515">"</span>,
licence.HasExpired);<br /><span style="color:#2b91af">Console</span>.ReadLine();<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
Made a new console project referencing the class project.  Proves that it does
work as a real application and not just in test.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ea17f983-fecd-4561-b44b-0c8e9dd77126" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 400px; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Injector</span>
              <br />
{<br /><span style="color:#008000">//going to be able to bind by instance and by type</span><br /><span style="color:#008000">//where TConcrete derives from TKey</span><br /><span style="color:#008000">//TKey is going to be what we provide</span><br /><br /><span style="color:#008000">//from type to a way of getting to an instance of that
type</span><br /><span style="color:#0000ff">private</span><span style="color:#2b91af">Dictionary</span>&lt;<span style="color:#2b91af">Type</span>,<span style="color:#2b91af">Func</span>&lt;<span style="color:#0000ff">object</span>&gt;&gt;
providers = <span style="color:#0000ff">new</span><span style="color:#2b91af">Dictionary</span>&lt;<span style="color:#2b91af">Type</span>, <span style="color:#2b91af">Func</span>&lt;<span style="color:#0000ff">object</span>&gt;&gt;();<br /><br /><span style="color:#008000">//eg whenever you want IClock, use the SystemClock type</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> Bind
&lt;TKey, TConcrete&gt;() <span style="color:#0000ff">where</span> TConcrete : TKey<br />
{<br /><span style="color:#008000">//where we're </span><br />
providers[<span style="color:#0000ff">typeof</span>(TKey)] = () =&gt; ResolveByType(<span style="color:#0000ff">typeof</span>(TConcrete));<br />
}<br /><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">object</span> ResolveByType(<span style="color:#2b91af">Type</span> type)<br />
{<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Resolving...{</span><span style="color:#3cb371">0}</span><span style="color:#a31515">"</span>,
type);<br /><span style="color:#008000">//assume we're got a single constructor in the type
we're passing in</span><br /><span style="color:#0000ff">var</span> constructor = type.GetConstructors().SingleOrDefault();<br /><span style="color:#008000">//if we don't have a constructor then maybe a static
method</span><br /><span style="color:#0000ff">if</span> (constructor != <span style="color:#0000ff">null</span>)<br />
{<br /><span style="color:#008000">//want to invoke the constructor, but need to resolve
all of its dependencies</span><br /><span style="color:#008000">//eg when we ask for a diary, get me a clock, get me a
calendar, get me a timezone</span><br /><span style="color:#0000ff">var</span> arguments = constructor.GetParameters() 
<br />
.Select(parameterInfo =&gt; Resolve(parameterInfo.ParameterType))<br />
.ToArray();<br /><span style="color:#0000ff">return</span> constructor.Invoke(arguments);<br />
}<br /><span style="color:#008000">//Instance is a property on system clock</span><br /><span style="color:#008000">//we're trying to find something on systemclock...
however it was a field, thats why GetProperty wasn't returning it.</span><br /><span style="color:#008000">//var instanceProperty = type.GetProperty("Instance",
BindingFlags.Public | BindingFlags.Static);</span><br /><span style="color:#0000ff">var</span> instanceField = type.GetField(<span style="color:#a31515">"Instance"</span>);<br /><span style="color:#0000ff">return</span> instanceField.GetValue(<span style="color:#0000ff">null</span>);<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> Bind&lt;T&gt;(T
instance)<br />
{<br /><span style="color:#008000">//returns the instance</span><br />
providers[<span style="color:#0000ff">typeof</span>(T)] = () =&gt; instance;<br />
}<br /><br /><span style="color:#0000ff">internal</span> TKey Resolve&lt;TKey&gt;()<br />
{<br /><span style="color:#0000ff">return</span> (TKey)Resolve(<span style="color:#0000ff">typeof</span>(TKey));<br />
}<br /><br /><span style="color:#008000">//how do we resolve something?</span><br /><span style="color:#0000ff">internal</span><span style="color:#0000ff">object</span> Resolve(<span style="color:#2b91af">Type</span> type)<br />
{<br /><span style="color:#2b91af">Func</span>&lt;<span style="color:#0000ff">object</span>&gt;
provider; 
<br /><br /><span style="color:#0000ff">if</span> (providers.TryGetValue(type, <span style="color:#0000ff">out</span> provider))<br />
{<br /><span style="color:#0000ff">return</span> provider();<br />
}<br /><span style="color:#0000ff">return</span> ResolveByType(type);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
need to come back to this and understand**
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=fb929952-3bbf-4110-8adf-bd1e6d02c178" />
      </div>
    </content>
  </entry>
  <entry>
    <title>NTP Time Server Monitor</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/17/NTPTimeServerMonitor.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,53d87f43-44e2-40ae-88da-7d9fb40894af.aspx</id>
    <published>2012-05-17T15:41:36.9375-04:00</published>
    <updated>2012-05-17T15:50:56.84375-04:00</updated>
    <category term="NTP" label="NTP" scheme="http://www.programgood.net/CategoryView,category,NTP.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/NTP-Time-Server-Monitor_CE9E/image_2.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/NTP-Time-Server-Monitor_CE9E/image_thumb.png" width="546" height="282" />
          </a>
        </p>
        <p>
To get to this screen, press the icon on NTP Status tab.
</p>
        <p>
needs port UDP 123 opened inbound
</p>
        <p>
          <a href="http://serverfault.com/questions/390061/windows-7-as-ntp-time-server">http://serverfault.com/questions/390061/windows-7-as-ntp-time-server</a>
        </p>
        <p>
useful to sync up local servers clock with the ntpd service ie clock, internet time,
point to localhost.
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=53d87f43-44e2-40ae-88da-7d9fb40894af" />
      </div>
    </content>
  </entry>
  <entry>
    <title>TekPub 3–Jon Skeet–Dependency Injection manually</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/17/TekPub3JonSkeetDependencyInjectionManually.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,73d3a976-570c-438f-a905-d86a715e8bc8.aspx</id>
    <published>2012-05-16T23:03:46.578125-04:00</published>
    <updated>2012-05-16T23:03:46.578125-04:00</updated>
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Any time you instantiate or reference a concrete type within a class, you take a Dependency
and make your code harder to test.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:31c1fb47-7284-4a2f-b2a7-9ee4d0a2803c" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span> Licence(<span style="color:#2b91af">Instant</span> expirey, <span style="color:#2b91af">IClock</span> clock)<br />
{<br /><span style="color:#008000">//variables or local variables</span><br /><span style="color:#0000ff">this</span>.expirey = expirey;<br /><span style="color:#0000ff">this</span>.clock = clock;<br />
}
</div>
          </div>
        </div>
        <p>
we are injecting a dependency here.  More loosely bound here than
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0817e05f-b018-4ac6-ba26-8a135ce72b2c" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <br />
              <span style="color:#0000ff">public</span> Licence(<span style="color:#2b91af">Instant</span> expirey)<br />
{<br /><span style="color:#008000">//variables or local variables</span><br /><span style="color:#0000ff">this</span>.expirey = expirey;<br /><span style="color:#0000ff">this</span>.clock = <span style="color:#2b91af">SystemClock</span>.Instance;<br />
}
</div>
          </div>
        </div>
        <p>
tightly bound to a concrete implementation here.
</p>
        <p>
We made another class here called Diary which uses a clock too:
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fbc030eb-2177-4668-9226-1d6737d059be" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//calendaring application which will want to know what
time it is too!</span>
              <br />
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Diary</span>
              <br />
{<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">LocalDatePattern</span> outputPattern
= <span style="color:#2b91af">LocalDatePattern</span>.CreateWithInvariantInfo(<span style="color:#a31515">"yyyy-MM-dd"</span>);<br /><span style="color:#008000">//fields</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">IClock</span> clock;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">CalendarSystem</span> calendar;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">DateTimeZone</span> timeZone;<br /><br /><span style="color:#008000">//by demanding the dependencies in the constructor, classes
are more flexible</span><br /><span style="color:#008000">//especially if they are interfacess</span><br /><span style="color:#0000ff">public</span> Diary(<span style="color:#2b91af">IClock</span> clock, <span style="color:#2b91af">CalendarSystem</span> calendar, <span style="color:#2b91af">DateTimeZone</span> timeZone)<br />
{<br /><span style="color:#0000ff">this</span>.clock = clock;<br /><span style="color:#0000ff">this</span>.calendar = calendar;<br /><span style="color:#0000ff">this</span>.timeZone = timeZone;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> FormatToday()<br />
{<br /><span style="color:#008000">//in system default timezone, and system default calendar</span><br /><span style="color:#008000">//DateTime dateTime = DateTime.Today;</span><br /><span style="color:#2b91af">LocalDate</span> date = clock.Now.InZone(timeZone, calendar).LocalDateTime.Date;<br /><span style="color:#0000ff">if</span> (date.Month == 4)<br />
{ <span style="color:#008000">//ncrunch showing black here - so tests are not covering
this codepath</span><br /><span style="color:#0000ff">return</span><span style="color:#a31515">"April
fool"</span>;<br />
}<br /><span style="color:#0000ff">return</span> outputPattern.Format(date);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
 
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b1f0eaed-b21a-46cf-b63f-ca1ec5bdaaf7" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 500px; overflow: auto; padding: 2px 5px;">
              <span style="color:#008000">//still a class lib so can't run it.. demonstrates
concept</span>
              <br />
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Program</span>
              <br />
{<br /><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> Main()<br />
{<br /><span style="color:#008000">//manual dependency injection - this takes a lot of time
and code to do</span><br /><span style="color:#008000">//so people invented dependency injection frameworks aka
Inversion of Control.</span><br /><span style="color:#2b91af">IClock</span> clock = <span style="color:#2b91af">SystemClock</span>.Instance;<br /><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#2b91af">Instant</span>.UnixEpoch,
clock);<br /><span style="color:#2b91af">Diary</span> diary = <span style="color:#0000ff">new</span><span style="color:#2b91af">Diary</span>(clock,<span style="color:#2b91af">CalendarSystem</span>.Iso, <span style="color:#2b91af">DateTimeZone</span>.GetSystemDefault());<br /><br /><span style="color:#2b91af">DiaryPresenter</span> presenter = <span style="color:#0000ff">new</span><span style="color:#2b91af">DiaryPresenter</span>(diary,
licence);<br />
}<br />
}<br /><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">DiaryPresenter</span><br />
{<br /><span style="color:#0000ff">public</span> DiaryPresenter(<span style="color:#2b91af">Diary</span> diary, <span style="color:#2b91af">Licence</span> licence)<br />
{<br />
}<br />
}<br /><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Licence</span><br />
{<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">Instant</span> expirey;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">IClock</span> clock;<br /><br /><span style="color:#0000ff">public</span> Licence(<span style="color:#2b91af">Instant</span> expirey, <span style="color:#2b91af">IClock</span> clock)<br />
{<br /><span style="color:#008000">//variables or local variables</span><br /><span style="color:#0000ff">this</span>.expirey = expirey;<br /><span style="color:#0000ff">this</span>.clock = clock;<br />
}<br /><br /><span style="color:#008000">//property</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">bool</span> HasExpired<br />
{<br /><span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> clock.Now
&gt;= expirey; }<br />
}<br />
}<br /><br /><span style="color:#008000">//calendaring application which will want to know what
time it is too!</span><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Diary</span><br />
{<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">LocalDatePattern</span> outputPattern
= <span style="color:#2b91af">LocalDatePattern</span>.CreateWithInvariantInfo(<span style="color:#a31515">"yyyy-MM-dd"</span>);<br /><span style="color:#008000">//fields</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">IClock</span> clock;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">CalendarSystem</span> calendar;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">DateTimeZone</span> timeZone;<br /><br /><span style="color:#008000">//by demanding the dependencies in the constructor, classes
are more flexible</span><br /><span style="color:#008000">//especially if they are interfacess</span><br /><span style="color:#0000ff">public</span> Diary(<span style="color:#2b91af">IClock</span> clock, <span style="color:#2b91af">CalendarSystem</span> calendar, <span style="color:#2b91af">DateTimeZone</span> timeZone)<br />
{<br /><span style="color:#0000ff">this</span>.clock = clock;<br /><span style="color:#0000ff">this</span>.calendar = calendar;<br /><span style="color:#0000ff">this</span>.timeZone = timeZone;<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">string</span> FormatToday()<br />
{<br /><span style="color:#008000">//in system default timezone, and system default calendar</span><br /><span style="color:#008000">//DateTime dateTime = DateTime.Today;</span><br /><span style="color:#2b91af">LocalDate</span> date = clock.Now.InZone(timeZone, calendar).LocalDateTime.Date;<br /><span style="color:#0000ff">if</span> (date.Month == 4)<br />
{ <span style="color:#008000">//ncrunch showing black here - so tests are not covering
this codepath</span><br /><span style="color:#0000ff">return</span><span style="color:#a31515">"April
fool"</span>;<br />
}<br /><span style="color:#0000ff">return</span> outputPattern.Format(date);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
Manually doing dependency injection.  Setting up each component explicitly. 
Each is loosely coupled
</p>
        <p>
Licences don’t know about Diaries
</p>
        <p>
Diaries don’t know about Licences..
</p>
        <p>
DiaryPresenter knows about diary and licence, but not about a clock or timezone directly.
</p>
        <p>
notice SystemClock.Instance is a singleton.
</p>
        <p>
can get very hard to maintain
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=73d3a976-570c-438f-a905-d86a715e8bc8" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tekpub–Jon Skeet–Interfaces</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/16/TekpubJonSkeetInterfaces.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,5c06637b-c987-40bf-9c40-37f8336b9de1.aspx</id>
    <published>2012-05-16T17:48:48.140625-04:00</published>
    <updated>2012-05-16T18:23:00.734375-04:00</updated>
    <category term="interfaces" label="interfaces" scheme="http://www.programgood.net/CategoryView,category,interfaces.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Why are interfaces important?
</p>
        <p>
not a pattern.. a language feature.
</p>
        <p>
time zone changes..
</p>
        <p>
We want to give the current Date and Time as a dependency.. so can test properly eg
</p>
        <blockquote>
          <p>
what if our licence never expires in following 5 years.. want to inject what would
happen in the future,  and using DateTime.Now in our licence code means can’t
test that.
</p>
        </blockquote>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:37cf3646-5297-477a-8a95-56d4bb6adc17" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; max-height: 500px; overflow: auto; padding: 2px 5px;">[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">LicenceTests</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> HasExpired_AnExpiredDate_ReturnFalse()<br />
{<br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#0000ff">new</span><span style="color:#2b91af">DateTime</span>(2000,1,1,0,0,0));<br /><span style="color:#2b91af">Assert</span>.IsTrue(licence.HasExpired);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> HasExpired_AFutureDate_ReturnTrue()<br />
{<br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#0000ff">new</span><span style="color:#2b91af">DateTime</span>(2020,
1, 1, 0, 0, 0));<br /><span style="color:#2b91af">Assert</span>.IsFalse(licence.HasExpired);<br />
}<br />
}<br /><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Licence</span><br />
{<br /><span style="color:#008000">//field</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">DateTime</span> expirey;<br /><br /><span style="color:#0000ff">public</span> Licence(<span style="color:#2b91af">DateTime</span> expirey)<br />
{<br /><span style="color:#008000">//expirey is a variable or local variable</span><br /><span style="color:#0000ff">this</span>.expirey = expirey;<br />
}<br /><br /><span style="color:#008000">//property</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">bool</span> HasExpired<br />
{<br /><span style="color:#008000">//a dependency on a static method</span><br /><span style="color:#008000">//nothing we can do to make it behave differtly in tests </span><br /><span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span><span style="color:#2b91af">DateTime</span>.UtcNow
&gt; expirey; }<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
 
</p>
        <p>
StubClock and SystemClock both implement IClock
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2e48b12c-81f3-4d58-ae75-af3164b41478" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">interface</span>
              <span style="color:#2b91af">IClock</span>
              <br />
{<br /><span style="color:#808080">///</span><span style="color:#008000"></span><span style="color:#808080">&lt;summary&gt;</span><br /><span style="color:#808080">///</span><span style="color:#008000"> Gets the current </span><span style="color:#808080">&lt;see
cref="Instant"/&gt;</span><span style="color:#008000"> on the time line
according to this clock.</span><br /><span style="color:#808080">///</span><span style="color:#008000"></span><span style="color:#808080">&lt;/summary&gt;</span><br /><span style="color:#2b91af">Instant</span> Now { <span style="color:#0000ff">get</span>;
}<br />
}
</div>
          </div>
        </div>
        <p>
so thats how this code uses interfaces.. for testing we’ve got a StubClock that we
can set the time on.  For production we pass in the actual time.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:48795953-c173-4e7d-9d8f-25ad48f1637d" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">LicenceTests</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> HasExpired_AnExpiredDate_ReturnTrue()<br />
{<br /><span style="color:#2b91af">Instant</span> expirey = <span style="color:#2b91af">Instant</span>.FromUtc(2000,
1, 1, 0, 0, 0);<br /><span style="color:#2b91af">StubClock</span> clock = <span style="color:#0000ff">new</span><span style="color:#2b91af">StubClock</span>(expirey
+ <span style="color:#2b91af">Duration</span>.FromTicks(1));<br /><br /><span style="color:#008000">//injecting the dependency</span><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(expirey,
clock);<br /><br /><span style="color:#2b91af">Assert</span>.IsTrue(licence.HasExpired);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> HasExpired_AFutureDate_ReturnTrue()<br />
{<br /><span style="color:#2b91af">Instant</span> expirey = <span style="color:#2b91af">Instant</span>.FromUtc(2000,
1, 1, 0, 0, 0);<br /><span style="color:#2b91af">StubClock</span> clock = <span style="color:#0000ff">new</span><span style="color:#2b91af">StubClock</span>(expirey
- <span style="color:#2b91af">Duration</span>.FromTicks(1));<br /><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(expirey,
clock);<br /><br /><span style="color:#2b91af">Assert</span>.IsFalse(licence.HasExpired);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> HasExpired_AtExactInstant_ReturnTrue()<br />
{<br /><span style="color:#2b91af">Instant</span> expirey = <span style="color:#2b91af">Instant</span>.FromUtc(2000,
1, 1, 0, 0, 0);<br /><span style="color:#2b91af">StubClock</span> clock = <span style="color:#0000ff">new</span><span style="color:#2b91af">StubClock</span>(expirey);<br /><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(expirey,
clock);<br /><br /><span style="color:#2b91af">Assert</span>.IsTrue(licence.HasExpired);<br />
}<br /><br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> HasExpired_NonExpiredLicenceBecomesExpires_ReturnTrue()<br />
{<br /><span style="color:#2b91af">Instant</span> expirey = <span style="color:#2b91af">Instant</span>.FromUtc(2000,
1, 1, 0, 0, 0);<br /><span style="color:#2b91af">StubClock</span> clock = <span style="color:#0000ff">new</span><span style="color:#2b91af">StubClock</span>(expirey
- <span style="color:#2b91af">Duration</span>.FromTicks(1));<br /><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(expirey,
clock);<br /><br /><span style="color:#2b91af">Assert</span>.IsFalse(licence.HasExpired);<br />
clock.AdvanceTicks(1);<br /><span style="color:#2b91af">Assert</span>.IsTrue(licence.HasExpired);<br />
}<br />
}<br /><br /><span style="color:#0000ff">class</span><span style="color:#2b91af">Licence</span><br />
{<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">Instant</span> expirey;<br /><span style="color:#0000ff">private</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">IClock</span> clock;<br /><br /><span style="color:#0000ff">public</span> Licence(<span style="color:#2b91af">Instant</span> expirey, <span style="color:#2b91af">IClock</span> clock)<br />
{<br /><span style="color:#008000">//variables or local variables</span><br /><span style="color:#0000ff">this</span>.expirey = expirey;<br /><span style="color:#0000ff">this</span>.clock = clock;<br />
}<br /><br /><span style="color:#008000">//property</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">bool</span> HasExpired<br />
{<br /><span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> clock.Now
&gt;= expirey; }<br />
}<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">BigApplicatiion</span><br />
{<br /><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> Main
()<br />
{<br /><span style="color:#008000">//a natural singleton! there is only 1 system clock</span><br /><span style="color:#008000">//but there is no way to test this business code...want
dependency injection</span><br /><span style="color:#2b91af">Licence</span> licence = <span style="color:#0000ff">new</span><span style="color:#2b91af">Licence</span>(<span style="color:#2b91af">Instant</span>.FromUtc(2012,4,19,0,0), <span style="color:#2b91af">SystemClock</span>.Instance);<br /><span style="color:#0000ff">if</span> (licence.HasExpired)<br />
{<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Licence
expired"</span>);<br /><span style="color:#0000ff">return</span>;<br />
}<br />
}<br />
}
</div>
          </div>
        </div>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=5c06637b-c987-40bf-9c40-37f8336b9de1" />
      </div>
    </content>
  </entry>
  <entry>
    <title>NCrunch–Automated Testing</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/16/NCrunchAutomatedTesting.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,d48a6ac1-12a9-4875-98f0-6cc524809337.aspx</id>
    <published>2012-05-16T17:42:36.09375-04:00</published>
    <updated>2012-05-16T17:42:36.09375-04:00</updated>
    <category term="NCrunch" label="NCrunch" scheme="http://www.programgood.net/CategoryView,category,NCrunch.aspx" />
    <category term="Testing" label="Testing" scheme="http://www.programgood.net/CategoryView,category,Testing.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.ncrunch.net/download.htm">http://www.ncrunch.net/download.htm</a>
        </p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/NCrunchAutomated-Testing_E97D/image_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/NCrunchAutomated-Testing_E97D/image_thumb.png" width="323" height="193" />
          </a>
        </p>
        <p>
Just sits there and runs any test that I change.
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=d48a6ac1-12a9-4875-98f0-6cc524809337" />
      </div>
    </content>
  </entry>
  <entry>
    <title>TekPub Design Patterns Jon Skeet–Singleton</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/16/TekPubDesignPatternsJonSkeetSingleton.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,8b56021a-98e4-44b1-a138-0052459da335.aspx</id>
    <published>2012-05-16T15:52:47.171875-04:00</published>
    <updated>2012-05-16T16:49:51.078125-04:00</updated>
    <category term="Patterns" label="Patterns" scheme="http://www.programgood.net/CategoryView,category,Patterns.aspx" />
    <category term="TekPub" label="TekPub" scheme="http://www.programgood.net/CategoryView,category,TekPub.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Singleton: A class which only allows a single instance
</p>
        <p>
Very controversial in general. 
</p>
        <p>
NodaTime – Jons open source library, which implements good practices
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:65ff6c4f-6de1-43c1-b4d4-423f67900240" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">namespace</span> Sandbox<br />
{<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">Singleton</span><br />
{<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> DoSomething()<br />
{<br />
}<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">SingletonClient</span><br />
{<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> UseSingleton()<br />
{<br /><span style="color:#2b91af">Singleton</span> s1 = <span style="color:#0000ff">new</span><span style="color:#2b91af">Singleton</span>();<br />
s1.DoSomething();<br /><span style="color:#2b91af">Singleton</span> s2 = <span style="color:#0000ff">new</span><span style="color:#2b91af">Singleton</span>();<br />
s2.DoSomething();<br />
}<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
Ahh – can make 2 of the singleton class!
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:48bc8eb5-9c1f-4e55-b89c-3024a30347ee" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">static</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Singleton</span>
              <br />
{<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> DoSomething()<br />
{<br />
}<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">SingletonClient</span><br />
{<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> UseSingleton()<br />
{<br /><span style="color:#008000">//Singleton s1 = new Singleton();</span><br /><span style="color:#008000">//s1.DoSomething();</span><br /><span style="color:#008000">//Singleton s2 = new Singleton();</span><br /><span style="color:#008000">//s2.DoSomething();</span><br /><span style="color:#2b91af">Singleton</span>.DoSomething();<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
but want to instantiate class.. just not have 2 possible
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4b19a61d-d772-4c0a-9b82-a1c6bd759cf8" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Singleton</span>
              <br />
{<br /><span style="color:#008000">//global state - bad</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">static</span><span style="color:#2b91af">Singleton</span> instance;<br /><br /><span style="color:#0000ff">private</span> Singleton()<br />
{<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#2b91af">Singleton</span> CreateInstance()<br />
{<br /><span style="color:#0000ff">if</span> (instance == <span style="color:#0000ff">null</span>)<br />
{<br />
instance = <span style="color:#0000ff">new</span><span style="color:#2b91af">Singleton</span>();<br />
}<br /><span style="color:#0000ff">return</span> instance;<br />
}<br /><br /><span style="color:#008000">//raison d'etre for the class</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> DoSomething()<br />
{<br />
}<br />
}<br /><br />
[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">SingletonClient</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> UseSingleton()<br />
{<br /><span style="color:#2b91af">Singleton</span> s1 = <span style="color:#2b91af">Singleton</span>.CreateInstance();<br /><span style="color:#2b91af">Singleton</span> s2 = <span style="color:#2b91af">Singleton</span>.CreateInstance();<br /><span style="color:#2b91af">Assert</span>.AreSame(s1,s2);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
However if on multiple threads this could be bad as both could get to the new Singleton()
line at the same time.
</p>
        <p>
mutex locks..complex
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:33ed9973-021e-4a3e-8368-7e869d876038" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Singleton</span>
              <br />
{<br /><span style="color:#008000">//clr manages locking, mutex and volatile stuff</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">static</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">Singleton</span> instance
= <span style="color:#0000ff">new</span><span style="color:#2b91af">Singleton</span>();<br /><br /><span style="color:#008000">//empty static constructor - chaanges when the clr is
allowed to initialise this...</span><br /><span style="color:#008000">//will only initialise before it is first used.</span><br /><span style="color:#0000ff">static</span> Singleton() {}<br /><br /><span style="color:#0000ff">private</span> Singleton()<br />
{<br /><span style="color:#008000">//stuff that must only happen once</span><br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Singleton
constructor"</span>);<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#2b91af">Singleton</span> Instance
{ <span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span> instance;
} }<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> SayHi()<br />
{<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"hi"</span>);<br />
}<br /><br /><span style="color:#008000">//raison d'etre for the class</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> DoSomething()<br />
{<br /><span style="color:#008000">// This must be thread-safe... it can be got at from multiple
threads... thats its purpose</span><br />
}<br />
}<br /><br />
[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">SingletonClient</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> UseSingleton()<br />
{<br /><span style="color:#2b91af">Singleton</span>.SayHi();<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Start
of test"</span>);<br /><span style="color:#2b91af">Singleton</span> s1 = <span style="color:#2b91af">Singleton</span>.Instance;<br /><span style="color:#2b91af">Singleton</span> s2 = <span style="color:#2b91af">Singleton</span>.Instance;<br /><span style="color:#2b91af">Assert</span>.AreSame(s1,s2);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
asdf
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/TekPub-Design-Patterns-Jon-SkeetSingleto_CD1A/image_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/TekPub-Design-Patterns-Jon-SkeetSingleto_CD1A/image_thumb.png" width="244" height="220" />
          </a>
        </p>
        <p>
but say we wanted real laziness ie only creating the singleton when needed:
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9f37c262-15cf-4bd9-96a0-16725b1043c7" class="wlWriterEditableSmartContent">
          <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
            <div style="background-color: #ffffff; overflow: auto; padding: 2px 5px;">
              <span style="color:#0000ff">public</span>
              <span style="color:#0000ff">class</span>
              <span style="color:#2b91af">Singleton</span>
              <br />
{<br /><span style="color:#008000">//nested class</span><br /><span style="color:#0000ff">private</span><span style="color:#0000ff">static</span><span style="color:#0000ff">class</span><span style="color:#2b91af">SingletonHolder</span><br />
{<br /><span style="color:#0000ff">internal</span><span style="color:#0000ff">static</span><span style="color:#0000ff">readonly</span><span style="color:#2b91af">Singleton</span> instance
= <span style="color:#0000ff">new</span><span style="color:#2b91af">Singleton</span>();<br /><span style="color:#008000">//empty static constructor - forces laziness!</span><br /><span style="color:#0000ff">static</span> SingletonHolder() {}<br />
}<br /><br /><span style="color:#0000ff">private</span> Singleton()<br />
{<br /><span style="color:#008000">//stuff that must only happen once</span><br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Singleton
constructor"</span>);<br />
}<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#2b91af">Singleton</span> Instance
{ <span style="color:#0000ff">get</span> { <span style="color:#0000ff">return</span><span style="color:#2b91af">SingletonHolder</span>.instance;
} }<br /><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">static</span><span style="color:#0000ff">void</span> SayHi()<br />
{<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"hi"</span>);<br />
}<br /><br /><span style="color:#008000">//raison d'etre for the class</span><br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> DoSomething()<br />
{<br /><span style="color:#008000">// This must be thread-safe... it can be got at from multiple
threads... thats its purpose</span><br />
}<br />
}<br /><br />
[<span style="color:#2b91af">TestFixture</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">class</span><span style="color:#2b91af">SingletonClient</span><br />
{<br />
[<span style="color:#2b91af">Test</span>]<br /><span style="color:#0000ff">public</span><span style="color:#0000ff">void</span> UseSingleton()<br />
{<br /><span style="color:#2b91af">Singleton</span>.SayHi();<br /><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Start
of test"</span>);<br /><span style="color:#2b91af">Singleton</span> s1 = <span style="color:#2b91af">Singleton</span>.Instance;<br /><span style="color:#2b91af">Singleton</span> s2 = <span style="color:#2b91af">Singleton</span>.Instance;<br /><span style="color:#2b91af">Assert</span>.AreSame(s1,s2);<br />
}<br />
}
</div>
          </div>
        </div>
        <p>
.NET4 could use Lazy&lt;T&gt;
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=8b56021a-98e4-44b1-a138-0052459da335" />
      </div>
    </content>
  </entry>
  <entry>
    <title>SpaceBlock–Viewing Amazon S3</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/15/SpaceBlockViewingAmazonS3.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,64eaa317-8d56-499a-8a20-87a6fece6042.aspx</id>
    <published>2012-05-15T14:36:48.625-04:00</published>
    <updated>2012-05-15T14:36:48.625-04:00</updated>
    <category term="amazon S3" label="amazon S3" scheme="http://www.programgood.net/CategoryView,category,amazonS3.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Do be able to multiple delete files in a folder
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/SpaceBlockViewing-Amazon-S3_BF66/image_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/SpaceBlockViewing-Amazon-S3_BF66/image_thumb.png" width="525" height="367" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=64eaa317-8d56-499a-8a20-87a6fece6042" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Scrum</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/07/Scrum.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,585601a5-8c09-482c-aeb9-db96005d7dcd.aspx</id>
    <published>2012-05-07T14:12:41.43575-04:00</published>
    <updated>2012-05-07T14:12:41.43575-04:00</updated>
    <category term="Scrum" label="Scrum" scheme="http://www.programgood.net/CategoryView,category,Scrum.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
From wikipedia:
</p>
        <p>
During the meeting, each team member answers three questions:<sup><a href="http://en.wikipedia.org/wiki/Scrum_(development)#cite_note-schwaberp135-10">[11]</a></sup></p>
        <ul>
          <li>
What have you done since yesterday? 
</li>
          <li>
What are you planning to do today? 
</li>
          <li>
Any impediments/stumbling blocks?</li>
        </ul>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=585601a5-8c09-482c-aeb9-db96005d7dcd" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Web Design</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/05/04/WebDesign.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,ce3587ec-01d6-499b-8a7d-59a2340510a4.aspx</id>
    <published>2012-05-04T07:29:37.189-04:00</published>
    <updated>2012-05-04T07:29:37.189-04:00</updated>
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.artisteer.com/">http://www.artisteer.com/</a>
        </p>
        <p>
          <a href="http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2011/08/28/create-a-template-for-orchard.aspx">http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2011/08/28/create-a-template-for-orchard.aspx</a>
        </p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=ce3587ec-01d6-499b-8a7d-59a2340510a4" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Orchard–Setting Up Portfolio Website</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/04/17/OrchardSettingUpPortfolioWebsite.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,a5ea8e71-76ec-46b5-822b-c34a64479a21.aspx</id>
    <published>2012-04-17T08:57:42.941875-04:00</published>
    <updated>2012-04-17T08:57:42.941875-04:00</updated>
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Goals: 
<br />
    website demoing projects I've done over many years 
<br />
        to give people ideas about what can be
done easily 
<br />
        to sell myself 
<br />
        for it to become my 'CV' 
<br />
            look at stackoverflow
CV - link to it 
<br />
            actual CV - link
to it 
<br />
        
<br />
    CMS that I can use in many places 
<br />
    large codebase to explore
</p>
        <h3>Examples
</h3>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/OrchardSetting-Up-Portfolio-Website_A643/image_2.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/OrchardSetting-Up-Portfolio-Website_A643/image_thumb.png" width="644" height="380" />
          </a>
        </p>
        <p>
nice and simple.
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=a5ea8e71-76ec-46b5-822b-c34a64479a21" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Orchard Reference Sites</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/04/17/OrchardReferenceSites.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,e5ec86e5-7977-4bec-bfc1-be97efdaee09.aspx</id>
    <published>2012-04-17T08:55:53.5825-04:00</published>
    <updated>2012-04-17T08:56:04.55125-04:00</updated>
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Also good ref sites are: <a href="http://www.johnpapa.net">www.johnpapa.net</a></p>
        <p>
          <a href="http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-part-1">http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-part-1</a>
        </p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=e5ec86e5-7977-4bec-bfc1-be97efdaee09" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Orchard Performance</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/04/17/OrchardPerformance.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,f0426fba-7042-4ad6-bd6a-73af77e6a4f0.aspx</id>
    <published>2012-04-17T08:55:15.441875-04:00</published>
    <updated>2012-04-17T08:55:15.441875-04:00</updated>
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <h3>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Orchard-Performance_BECF/image_thumb%5B11%5D_2.png">
            <img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image_thumb[11]" border="0" alt="image_thumb[11]" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Orchard-Performance_BECF/image_thumb%5B11%5D_thumb.png" width="554" height="388" />
          </a>
        </h3>
        <p>
and have turned off worker process recycling in Performance too.
</p>
        <p>
Trust level is set to full in web.config, and debug is set to false.
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=f0426fba-7042-4ad6-bd6a-73af77e6a4f0" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Customising Orchard</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/04/17/CustomisingOrchard.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,ff505b42-0865-4037-9705-5fc9a1367c3f.aspx</id>
    <published>2012-04-17T08:54:25.48875-04:00</published>
    <updated>2012-04-17T08:54:25.48875-04:00</updated>
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
From 4 part video by Brent Arias <a href="http://www.ariasamp.net/">http://www.ariasamp.net/</a> linked
on <a href="http://www.orchardproject.net">www.orchardproject.net</a></p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_2.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb.png" width="644" height="360" />
          </a>
        </p>
        <p>
adding in a subtitle to the minty theme
</p>
        <p>
Downloading Modules – Bing Maps and Image Gallery
</p>
        <p>
Adding them into the page via Widgets again:  (found that with Multiple themese
installed, I had to disable other themes and only have the enabled one that I want
to work).
</p>
        <h3>Image Gallery
</h3>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_4.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_1.png" width="244" height="147" />
          </a>
        </p>
        <p>
impressive and has nice lightbox feature.
</p>
        <p>
Trying to go live – have copied the database up to live using generate scripts and
this to do a complete blank of the tables:
</p>
        <p>
exec sp_msforeachtable 'DROP TABLE ?'
</p>
        <p>
want to exclude settings.txt when I do a deploy as it overwrites the db connection
string on the live server.
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image7.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image7_thumb.png" width="244" height="138" />
          </a>
        </p>
        <p>
bin\orchard
</p>
        <p>
if problems then can remove stuff from here.
</p>
        <h2>Content Types
</h2>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_16.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_7.png" width="644" height="289" />
          </a>
        </p>
        <p>
going into Content Types, Blog
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_18.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_8.png" width="644" height="468" />
          </a>
        </p>
        <p>
adding a Body part which allows us to use html
</p>
        <p>
Added in a blog, and a blog post.  However only get the first 120 characters
of the blog and not the whole article which is annoying.
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_20.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_9.png" width="644" height="272" />
          </a>
        </p>
        <p>
Add in Designer Tools – going for a Shape Tracing feature.
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_22.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_10.png" width="644" height="432" />
          </a>
        </p>
        <p>
shape tracing
</p>
        <p>
Content Type
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_24.png">
            <img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_11.png" width="244" height="174" />
          </a>
        </p>
        <p>
now can see the entire blogpost
</p>
        <p>
Top Level Zones / Content Types / Local Zones
</p>
        <p>
Keep changes in a theme (or ideally a new one)
</p>
        <h3>No Tags
</h3>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_28.png">
            <img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_13.png" width="244" height="107" />
          </a>
        </p>
        <p>
change footer:31 to -
</p>
        <h3>No Comments
</h3>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_30.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_14.png" width="644" height="261" />
          </a>
        </p>
        <p>
but this is in the Module..bad practice to edit directly.
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_32.png">
            <img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_15.png" width="244" height="188" />
          </a>
        </p>
        <p>
Footer is the zone.
</p>
        <h3>Layers
</h3>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_34.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_16.png" width="279" height="413" />
          </a>
        </p>
        <p>
Creating a custom layer so that the image gallery will display only when the user
is authenticated and not on home page.
</p>
        <h3>Users
</h3>
        <p>
Add new users into Roles which are settable.  The roles just are reallly what
is allowed in the back end.
</p>
        <p>
If want users to see different content on the front end then look at module Quanta
</p>
        <h3>Eventing / Messaging
</h3>
        <p>
.. eg if anyone leaves a comment then we want an email.
</p>
        <h2>Book Review Widget
</h2>
        <p>
Content Type has Content Parts
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_11.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_2.png" width="195" height="277" />
          </a>
        </p>
        <p>
content type is book review, content parts are: Body, Containable (lists) and Tags
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_13.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Customising-Orchard_B7A2/image_thumb_3.png" width="288" height="312" />
          </a>
        </p>
        <p>
have added 2 custom fields
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=ff505b42-0865-4037-9705-5fc9a1367c3f" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Orchard Deployment from Source</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/04/17/OrchardDeploymentFromSource.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,ada43cf5-b0bf-438c-84f8-3502f32c4777.aspx</id>
    <published>2012-04-17T08:35:32.035625-04:00</published>
    <updated>2012-04-17T08:35:32.035625-04:00</updated>
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
rom VS2010 command prompt.. build “compile;package” from c:\dev\orchard\hg
</p>
        <p>
then package is … but got issues with newly installed image modules
</p>
        <p>
error when building and using imagegallery.
</p>
        <p>
Tried disabling it on the interface and removing from front end, however it is still
in the solution.
</p>
        <p>
          <a href="http://stefantsov.com/msbuild-and-msdeploy-for-orchard">http://stefantsov.com/msbuild-and-msdeploy-for-orchard</a> –
deploying with MSBUILD
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Orchard-Deploying_BEF1/image_thumb5_thumb_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image_thumb5_thumb" border="0" alt="image_thumb5_thumb" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Orchard-Deploying_BEF1/image_thumb5_thumb_thumb.png" width="644" height="406" />
          </a>
        </p>
        <p>
used to be all files in this project folder.. now all files in project.
</p>
        <p>
          <a href="http://orchard.codeplex.com/discussions/350016">http://orchard.codeplex.com/discussions/350016</a> –
Bertrand describes how he deploys using webdeploy.
</p>
        <p>
          <a href="http://orchard.codeplex.com/discussions/283821">http://orchard.codeplex.com/discussions/283821</a> –
looks like it should work!
</p>
        <p>
Make sure connection string settings are correct on the server, otherwise will get
a 404 error!
</p>
        <p>
look in Logs
</p>
        <p>
DataConnectionString: Data Source=.\SQLEXPRESS;Initial Catalog=orcharddb;Persist Security
Info=True;User ID=orcharddb;Password=secret
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=ada43cf5-b0bf-438c-84f8-3502f32c4777" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Connecting to SQL Server on EC2</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/04/16/ConnectingToSQLServerOnEC2.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,29f49793-0b91-4f43-ae99-fcecc9dadbf0.aspx</id>
    <published>2012-04-16T06:15:52.3325-04:00</published>
    <updated>2012-04-16T06:15:52.3325-04:00</updated>
    <category term="Amazon EC2" label="Amazon EC2" scheme="http://www.programgood.net/CategoryView,category,AmazonEC2.aspx" />
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
As I’ve got an MSDE instance running on .\ which is listening on 1433 so maybe my
setup was a bit more complex than usual.
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Connecting-to-SQL-Server-on-EC2_9CEB/image_2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Connecting-to-SQL-Server-on-EC2_9CEB/image_thumb.png" width="644" height="402" />
          </a>
        </p>
        <p>
setup TCP/IP on the server for another port. (it had a blank port to begin with)
</p>
        <p>
Open up the firewall on EC2
</p>
        <p>
          <a href="http://www.programgood.net/content/binary/Windows-Live-Writer/Connecting-to-SQL-Server-on-EC2_9CEB/image_4.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.programgood.net/content/binary/Windows-Live-Writer/Connecting-to-SQL-Server-on-EC2_9CEB/image_thumb_1.png" width="420" height="309" />
          </a>
        </p>
        <p>
Connection string in SQL Management Studio: 
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=29f49793-0b91-4f43-ae99-fcecc9dadbf0" />
      </div>
    </content>
  </entry>
  <entry>
    <title>404 Error when Deploying Orchard from Visual Studio</title>
    <link rel="alternate" type="text/html" href="http://www.programgood.net/2012/04/16/404ErrorWhenDeployingOrchardFromVisualStudio.aspx" />
    <id>http://www.programgood.net/PermaLink,guid,4e0e5d4a-b17d-4f38-8579-e75df3d23c60.aspx</id>
    <published>2012-04-16T04:53:52.910625-04:00</published>
    <updated>2012-04-16T04:53:52.910625-04:00</updated>
    <category term="Orchard" label="Orchard" scheme="http://www.programgood.net/CategoryView,category,Orchard.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was getting nothing.  Turned out to be the connection string on the live server
wasn’t right.
</p>
        <p>
To see the error look in App_Data\Logs
</p>
        <p>
To change connection string look in \App_Data\Sites\Default\Settings.txt
</p>
        <img width="0" height="0" src="http://www.programgood.net/aggbug.ashx?id=4e0e5d4a-b17d-4f38-8579-e75df3d23c60" />
      </div>
    </content>
  </entry>
</feed>
