<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>.Hibri - .Net General</title>
    <link>http://www.hibri.net/</link>
    <description>Thoughts on the craft of building software</description>
    <language>en-gb</language>
    <copyright>Hibri Marzook</copyright>
    <lastBuildDate>Sun, 14 Feb 2010 11:38:53 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>hibri@hibri.net</managingEditor>
    <webMaster>hibri@hibri.net</webMaster>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=e0ea9c92-52e4-4e59-8f65-b2e71aac8af4</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,e0ea9c92-52e4-4e59-8f65-b2e71aac8af4.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,e0ea9c92-52e4-4e59-8f65-b2e71aac8af4.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e0ea9c92-52e4-4e59-8f65-b2e71aac8af4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The past week I’ve been doing a spike to talk to <a href="http://www.adobe.com/products/contentserver/" target="_blank">Adobe
Content Server 4</a> (ACS4). Querying the content in ACS4 is done in a REST style.
The client sends a XML message via HTTP POST to the admin endpoint. The endpoint details
are in the documentation but are vague.  This is usually at  <strong><a href="http://youracs4server/admin/EndPoint">http://youracs4server/admin/EndPoint</a></strong>. 
</p>
        <p>
These need a signed XML message, in the POST body. A typical message looks like this
</p>
        <pre class="csharpcode">
          <span class="kwrd">&lt;</span>
          <span class="html">request</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">nonce</span>
          <span class="kwrd">&gt;</span>ABCD123==<span class="kwrd">&lt;/</span><span class="html">nonce</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">hmac</span><span class="kwrd">&gt;</span>XXXXXXXXX===<span class="kwrd">&lt;/</span><span class="html">hmac</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">distributor</span><span class="kwrd">&gt;</span>uid:8888-43434-34343434<span class="kwrd">&lt;/</span><span class="html">distributor</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">resource</span><span class="kwrd">&gt;</span> ...... <span class="kwrd">&lt;/</span><span class="html">resouce</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;/</span><span class="html">request</span><span class="kwrd">&gt;</span></pre>
        <pre class="csharpcode">
          <span class="kwrd">
          </span>
          <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        </pre>
        <p>
The hmac element contains the SHA1 signature  of the XML message. The signature
is generated using a shared secret.  The signature is for the whole XML except
the hmac element. Before signing the message, we have to construct the XML without
the hmac, then sign it, and then add then hmac.
</p>
        <p>
I did this by using a two stage Xml serialization process. This may not be the best
way to do it, and there has to be a better solution.  I created a class named
SignedXMLSerializer, and this inherits from <a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx" target="_blank">XmlSerializer</a>.
SignedXMLSerializer serializes objects that are of the base type Signable. The Signable
class has two properties, Nonce and Hmac. Any class that has to be sent as a signed
XML message must inherit from Signable
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">abstract</span>
          <span class="kwrd">class</span> Signable
{ [XmlElement(<span class="str">"nonce"</span>)] <span class="kwrd">public</span><span class="kwrd">string</span> Nonce
{ get; set; } [XmlElement(<span class="str">"hmac"</span>)] <span class="kwrd">public</span><span class="kwrd">string</span> HMAC
{ get; set; } }</pre>
        <p>
          <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        </p>
        <p>
In the serialize method of the SignedXMLSerializer, we first generate the nonce. The
nonce makes each message unique. Then we serialize the object to a string. The signature
is generated using this string, and assigned it to the Hmac property.
</p>
        <p>
We then serialize the signed object to the writer that was passed in.
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">void</span> Serialize(T
o, XmlTextWriter writer) { o.Nonce = GenerateNonce(); StringBuilder stringBuilder
= GetXMLToSign(o); <span class="kwrd">string</span> hmac = GetSignature(stringBuilder);
o.HMAC = hmac; Serialize(writer, o); }</pre>
        <pre class="csharpcode">To use the SignedXMLSerializer, pass in one of the <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspx" target="_blank">HashAlgorithm</a> types.
I’ve used SHA1 in my case.</pre>
        <pre class="csharpcode">This makes it easier to use with different signing algorithms. </pre>
        <pre class="csharpcode">Typical usage of the SignedXMLSerializer is as follows</pre>
        <pre class="csharpcode">HMACSHA1 hmacsha1 = <span class="kwrd">new</span> HMACSHA1
{Key = Encoding.ASCII.GetBytes(<span class="str">"consumerSecret"</span>)};
SignedXmlSerializer&lt;Request&gt; signedXmlSerializer = <span class="kwrd">new</span> SignedXmlSerializer&lt;Request&gt;(hmacsha1);
StringBuilder sb = <span class="kwrd">new</span> StringBuilder(); StringWriter writer
= <span class="kwrd">new</span> StringWriter(sb); signedXmlSerializer.Serialize(req, <span class="kwrd">new</span> XmlTextWriter(writer));</pre>
        <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
The final serialized string can be sent via HTTP post to ACS4.  
</p>
        <p>
Code for the SignedXMLSerializer class is here <a title="http://gist.github.com/303962" href="http://gist.github.com/303962">http://gist.github.com/303962</a></p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dce654d7-c3f9-4b00-8118-1e8524af3791" class="wlWriterEditableSmartContent">del.icio.us
Tags: <a href="http://del.icio.us/popular/%22Adobe+Content+Server%22" rel="tag">"Adobe
Content Server"</a>,<a href="http://del.icio.us/popular/xml" rel="tag">xml</a>,<a href="http://del.icio.us/popular/sha-1" rel="tag">sha-1</a>,<a href="http://del.icio.us/popular/%22signing+xml+messages%22" rel="tag">"signing
xml messages"</a></div>
      </body>
      <title>How to : Sign XML messages with a SHA-1 signature, for Adobe Content Server</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,e0ea9c92-52e4-4e59-8f65-b2e71aac8af4.aspx</guid>
      <link>http://www.hibri.net/2010/02/14/HowToSignXMLMessagesWithASHA1SignatureForAdobeContentServer.aspx</link>
      <pubDate>Sun, 14 Feb 2010 11:38:53 GMT</pubDate>
      <description>&lt;p&gt;
The past week I’ve been doing a spike to talk to &lt;a href="http://www.adobe.com/products/contentserver/" target="_blank"&gt;Adobe
Content Server 4&lt;/a&gt; (ACS4). Querying the content in ACS4 is done in a REST style.
The client sends a XML message via HTTP POST to the admin endpoint. The endpoint details
are in the documentation but are vague.&amp;#160; This is usually at&amp;#160; &lt;strong&gt;&lt;a href="http://youracs4server/admin/EndPoint"&gt;http://youracs4server/admin/EndPoint&lt;/a&gt;&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
These need a signed XML message, in the POST body. A typical message looks like this
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;request&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;nonce&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ABCD123==&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;nonce&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hmac&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;XXXXXXXXX===&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hmac&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;distributor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;uid:8888-43434-34343434&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;distributor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;resource&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; ...... &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;resouce&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;request&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/pre&gt;
&lt;p&gt;
The hmac element contains the SHA1 signature&amp;#160; of the XML message. The signature
is generated using a shared secret.&amp;#160; The signature is for the whole XML except
the hmac element. Before signing the message, we have to construct the XML without
the hmac, then sign it, and then add then hmac.
&lt;/p&gt;
&lt;p&gt;
I did this by using a two stage Xml serialization process. This may not be the best
way to do it, and there has to be a better solution.&amp;#160; I created a class named
SignedXMLSerializer, and this inherits from &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx" target="_blank"&gt;XmlSerializer&lt;/a&gt;.
SignedXMLSerializer serializes objects that are of the base type Signable. The Signable
class has two properties, Nonce and Hmac. Any class that has to be sent as a signed
XML message must inherit from Signable
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Signable
{ [XmlElement(&lt;span class="str"&gt;&amp;quot;nonce&amp;quot;&lt;/span&gt;)] &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Nonce
{ get; set; } [XmlElement(&lt;span class="str"&gt;&amp;quot;hmac&amp;quot;&lt;/span&gt;)] &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; HMAC
{ get; set; } }&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
In the serialize method of the SignedXMLSerializer, we first generate the nonce. The
nonce makes each message unique. Then we serialize the object to a string. The signature
is generated using this string, and assigned it to the Hmac property.
&lt;/p&gt;
&lt;p&gt;
We then serialize the signed object to the writer that was passed in.
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Serialize(T
o, XmlTextWriter writer) { o.Nonce = GenerateNonce(); StringBuilder stringBuilder
= GetXMLToSign(o); &lt;span class="kwrd"&gt;string&lt;/span&gt; hmac = GetSignature(stringBuilder);
o.HMAC = hmac; Serialize(writer, o); }&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;To use the SignedXMLSerializer, pass in one of the &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspx" target="_blank"&gt;HashAlgorithm&lt;/a&gt; types.
I’ve used SHA1 in my case.&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;This makes it easier to use with different signing algorithms. &lt;/pre&gt;
&lt;pre class="csharpcode"&gt;Typical usage of the SignedXMLSerializer is as follows&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;HMACSHA1 hmacsha1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; HMACSHA1
{Key = Encoding.ASCII.GetBytes(&lt;span class="str"&gt;&amp;quot;consumerSecret&amp;quot;&lt;/span&gt;)};
SignedXmlSerializer&amp;lt;Request&amp;gt; signedXmlSerializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; SignedXmlSerializer&amp;lt;Request&amp;gt;(hmacsha1);
StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(); StringWriter writer
= &lt;span class="kwrd"&gt;new&lt;/span&gt; StringWriter(sb); signedXmlSerializer.Serialize(req, &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextWriter(writer));&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
The final serialized string can be sent via HTTP post to ACS4.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Code for the SignedXMLSerializer class is here &lt;a title="http://gist.github.com/303962" href="http://gist.github.com/303962"&gt;http://gist.github.com/303962&lt;/a&gt;
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dce654d7-c3f9-4b00-8118-1e8524af3791" class="wlWriterEditableSmartContent"&gt;del.icio.us
Tags: &lt;a href="http://del.icio.us/popular/%22Adobe+Content+Server%22" rel="tag"&gt;&amp;quot;Adobe
Content Server&amp;quot;&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/xml" rel="tag"&gt;xml&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/sha-1" rel="tag"&gt;sha-1&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/%22signing+xml+messages%22" rel="tag"&gt;&amp;quot;signing
xml messages&amp;quot;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,e0ea9c92-52e4-4e59-8f65-b2e71aac8af4.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=64d23b3c-0a4e-47e2-b83f-e022f4abdf8c</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,64d23b3c-0a4e-47e2-b83f-e022f4abdf8c.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,64d23b3c-0a4e-47e2-b83f-e022f4abdf8c.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=64d23b3c-0a4e-47e2-b83f-e022f4abdf8c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <p>
When you are in the zone, and want to add a reference to Rhino, NUnit or any other
common reference, adding it via the Add Reference dialog can be painfully slow. Fortunately
VS has a good automation interface, which lets you to write macros.
</p>
        <p>
I wrote a simple macro to add a NUnit reference to the current project. Add this to
your Macros project in Visual Studio, map a button or a shortcut key to it. This way
you can add those common references pretty quick. 
</p>
        <p>
This is a cleaned up version of the sample here <a title="http://msdn.microsoft.com/en-us/library/vslangproj80.reference3%28VS.80%29.aspx" href="http://msdn.microsoft.com/en-us/library/vslangproj80.reference3%28VS.80%29.aspx">http://msdn.microsoft.com/en-us/library/vslangproj80.reference3%28VS.80%29.aspx</a></p>
        <p>
 
</p>
        <div class="csharpcode">
          <pre>
            <span class="lnum"> 1: </span>
            <span class="kwrd">Sub</span> AddNUnitReference()</pre>
          <pre>
            <span class="lnum"> 2: </span> AddNewReference(DTE, <span class="str">"C:\Tools\NUnit\nunit.framework.dll"</span>)</pre>
          <pre>
            <span class="lnum"> 3: </span>
            <span class="kwrd">End</span>
            <span class="kwrd">Sub</span>
          </pre>
          <pre>
            <span class="lnum"> 4: </span> </pre>
          <pre>
            <span class="lnum"> 5: </span>
            <span class="kwrd">Sub</span> AddNewReference(<span class="kwrd">ByVal</span> dte <span class="kwrd">As</span> DTE2, <span class="kwrd">ByVal</span> referencePath <span class="kwrd">As</span><span class="kwrd">String</span>)</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">Dim</span> aProject <span class="kwrd">As</span> Project</pre>
          <pre>
            <span class="lnum"> 7: </span>
            <span class="kwrd">Dim</span> aVSProject <span class="kwrd">As</span> VSProject</pre>
          <pre>
            <span class="lnum"> 8: </span> </pre>
          <pre>
            <span class="lnum"> 9: </span> aProject = dte.ActiveDocument.ProjectItem.ContainingProject</pre>
          <pre>
            <span class="lnum"> 10: </span> </pre>
          <pre>
            <span class="lnum"> 11: </span> aVSProject = <span class="kwrd">CType</span>(dte.ActiveDocument.ProjectItem.ContainingProject.<span class="kwrd">Object</span>,
VSProject)</pre>
          <pre>
            <span class="lnum"> 12: </span>
            <span class="rem">' Add an Assembly reference
and display its type and additional</span>
          </pre>
          <pre>
            <span class="lnum"> 13: </span>
            <span class="rem">' information.</span>
          </pre>
          <pre>
            <span class="lnum"> 14: </span>
            <span class="kwrd">Dim</span> newRef <span class="kwrd">As</span> Reference</pre>
          <pre>
            <span class="lnum"> 15: </span> newRef = aVSProject.References.Add(referencePath)</pre>
          <pre>
            <span class="lnum"> 16: </span> </pre>
          <pre>
            <span class="lnum"> 17: </span>
            <span class="kwrd">End</span> Sub</pre>
        </div>
        <style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
      </body>
      <title>Avoid the slow Add Reference dialog box in Visual Studio 2008</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,64d23b3c-0a4e-47e2-b83f-e022f4abdf8c.aspx</guid>
      <link>http://www.hibri.net/2009/11/28/AvoidTheSlowAddReferenceDialogBoxInVisualStudio2008.aspx</link>
      <pubDate>Sat, 28 Nov 2009 13:31:31 GMT</pubDate>
      <description>&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
When you are in the zone, and want to add a reference to Rhino, NUnit or any other
common reference, adding it via the Add Reference dialog can be painfully slow. Fortunately
VS has a good automation interface, which lets you to write macros.
&lt;/p&gt;
&lt;p&gt;
I wrote a simple macro to add a NUnit reference to the current project. Add this to
your Macros project in Visual Studio, map a button or a shortcut key to it. This way
you can add those common references pretty quick. 
&lt;/p&gt;
&lt;p&gt;
This is a cleaned up version of the sample here &lt;a title="http://msdn.microsoft.com/en-us/library/vslangproj80.reference3%28VS.80%29.aspx" href="http://msdn.microsoft.com/en-us/library/vslangproj80.reference3%28VS.80%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/vslangproj80.reference3%28VS.80%29.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 1: &lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; AddNUnitReference()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 2: &lt;/span&gt; AddNewReference(DTE, &lt;span class="str"&gt;&amp;quot;C:\Tools\NUnit\nunit.framework.dll&amp;quot;&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; AddNewReference(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; dte &lt;span class="kwrd"&gt;As&lt;/span&gt; DTE2, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; referencePath &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; aProject &lt;span class="kwrd"&gt;As&lt;/span&gt; Project&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; aVSProject &lt;span class="kwrd"&gt;As&lt;/span&gt; VSProject&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt; aProject = dte.ActiveDocument.ProjectItem.ContainingProject&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 11: &lt;/span&gt; aVSProject = &lt;span class="kwrd"&gt;CType&lt;/span&gt;(dte.ActiveDocument.ProjectItem.ContainingProject.&lt;span class="kwrd"&gt;Object&lt;/span&gt;,
VSProject)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt; &lt;span class="rem"&gt;' Add an Assembly reference
and display its type and additional&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 13: &lt;/span&gt; &lt;span class="rem"&gt;' information.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 14: &lt;/span&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; newRef &lt;span class="kwrd"&gt;As&lt;/span&gt; Reference&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 15: &lt;/span&gt; newRef = aVSProject.References.Add(referencePath)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 16: &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt; 17: &lt;/span&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,64d23b3c-0a4e-47e2-b83f-e022f4abdf8c.aspx</comments>
      <category>.Net General</category>
      <category>development</category>
      <category>TDD</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=0a8b21b9-1d2e-4522-b9cd-f7c8f75467f9</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,0a8b21b9-1d2e-4522-b9cd-f7c8f75467f9.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,0a8b21b9-1d2e-4522-b9cd-f7c8f75467f9.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0a8b21b9-1d2e-4522-b9cd-f7c8f75467f9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
here is a random thought I had today.
</p>
        <p>
From what I've seen, in the past 2 years, agile practices have spread among the .Net
community.  The .Net framework  gives us the power to do TDD and follow
other agile principles.  the community is now empowered with a rich API , so
that we don't have to worry about how to build things.  We now have to worry
about what we can build and how to build it better. 
</p>
        <p>
We have been freed from the shackles of VB and classic asp, with a good OO framework,
that is getting better. You name the problem and there is a very good .Net based tool
to help you solve it. You want mocking , you have Rhino Mocks, you want persistence
you have NHibernate, you want testing APIs, you have Nunit, Mbunit and what not.  
</p>
        <p>
The technology and tools to build better software is here, are you using it ? if not
what's stopping you ? 
</p>
      </body>
      <title>The technology is there to build better software. are you doing it ?</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,0a8b21b9-1d2e-4522-b9cd-f7c8f75467f9.aspx</guid>
      <link>http://www.hibri.net/2008/12/11/TheTechnologyIsThereToBuildBetterSoftwareAreYouDoingIt.aspx</link>
      <pubDate>Thu, 11 Dec 2008 20:03:25 GMT</pubDate>
      <description>&lt;p&gt;
here is a random thought I had today.
&lt;/p&gt;
&lt;p&gt;
From what I've seen, in the past 2 years, agile practices have spread among the .Net
community.&amp;#160; The .Net framework&amp;#160; gives us the power to do TDD and follow
other agile principles.&amp;#160; the community is now empowered with a rich API , so
that we don't have to worry about how to build things.&amp;#160; We now have to worry
about what we can build and how to build it better. 
&lt;/p&gt;
&lt;p&gt;
We have been freed from the shackles of VB and classic asp, with a good OO framework,
that is getting better. You name the problem and there is a very good .Net based tool
to help you solve it. You want mocking , you have Rhino Mocks, you want persistence
you have NHibernate, you want testing APIs, you have Nunit, Mbunit and what not.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
The technology and tools to build better software is here, are you using it ? if not
what's stopping you ? 
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,0a8b21b9-1d2e-4522-b9cd-f7c8f75467f9.aspx</comments>
      <category>.Net General</category>
      <category>Agile</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=79e08ace-f4d2-46a1-b013-b0cabf5bf43c</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,79e08ace-f4d2-46a1-b013-b0cabf5bf43c.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,79e08ace-f4d2-46a1-b013-b0cabf5bf43c.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=79e08ace-f4d2-46a1-b013-b0cabf5bf43c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
 
</p>
        <p>
If you get an error with the message in the install log like;
</p>
        <p>
dotnetfx35.exe failed with 0x80070643 - Fatal error during installation
</p>
        <p>
It helps to run a manual cleanup of any .Net 3.5 framework installations before trying
again. Use the automated cleanup tool <a title="Automated cleanup tool to remove the .NET Framework 1.0, 1.1, 2.0, 3.0 and 3.5" href="http://blogs.msdn.com/astebner/archive/2006/05/30/611355.aspx">here</a>.
Remove the .Net 3.5 version already installed. You may need to do it twice to do a
complete cleanup. Then start the SP 1 setup again.
</p>
      </body>
      <title>Workaround &amp;ndash; Error while installing VS 2008 SP1 and .Net 3.5 SP1</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,79e08ace-f4d2-46a1-b013-b0cabf5bf43c.aspx</guid>
      <link>http://www.hibri.net/2008/08/18/WorkaroundNdashErrorWhileInstallingVS2008SP1AndNet35SP1.aspx</link>
      <pubDate>Mon, 18 Aug 2008 21:58:32 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
If you get an error with the message in the install log like;
&lt;/p&gt;
&lt;p&gt;
dotnetfx35.exe failed with 0x80070643 - Fatal error during installation
&lt;/p&gt;
&lt;p&gt;
It helps to run a manual cleanup of any .Net 3.5 framework installations before trying
again. Use the automated cleanup tool &lt;a title="Automated cleanup tool to remove the .NET Framework 1.0, 1.1, 2.0, 3.0 and 3.5" href="http://blogs.msdn.com/astebner/archive/2006/05/30/611355.aspx"&gt;here&lt;/a&gt;.
Remove the .Net 3.5 version already installed. You may need to do it twice to do a
complete cleanup. Then start the SP 1 setup again.
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,79e08ace-f4d2-46a1-b013-b0cabf5bf43c.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=d201f27d-4c5d-4eb4-b05c-675d3472141a</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,d201f27d-4c5d-4eb4-b05c-675d3472141a.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,d201f27d-4c5d-4eb4-b05c-675d3472141a.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d201f27d-4c5d-4eb4-b05c-675d3472141a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thinking of ways to measure code readability. How easy is it to read and understand
a  method, or class ?
</p>
        <p>
Number of branches in a method ? more branches -&gt; more complex  hence a more
complex method  that is hard to read 
</p>
        <p>
Split the camel casing of a method/class into words and run some sort of word analysis
to check if the words make sense ?
</p>
        <p>
The analysis has to be automated, and run as part of CI ideally..
</p>
        <p>
 
</p>
        <div style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:581ae04a-9af0-4fcb-b3f0-cceb69ae51f3" class="wlWriterSmartContent">Technorati
Tags: <a href="http://technorati.com/tags/.net" rel="tag">.net</a>,<a href="http://technorati.com/tags/thinking%20out%20loud" rel="tag">thinking
out loud</a>,<a href="http://technorati.com/tags/code%20metrics" rel="tag">code metrics</a></div>
      </body>
      <title>Measuring code readability ?</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,d201f27d-4c5d-4eb4-b05c-675d3472141a.aspx</guid>
      <link>http://www.hibri.net/2008/05/28/MeasuringCodeReadability.aspx</link>
      <pubDate>Wed, 28 May 2008 18:51:38 GMT</pubDate>
      <description>&lt;p&gt;
Thinking of ways to measure code readability. How easy is it to read and understand
a&amp;nbsp; method, or class ?
&lt;/p&gt;
&lt;p&gt;
Number of branches in a method ? more branches -&amp;gt; more complex&amp;nbsp; hence a more
complex method&amp;nbsp; that is hard to read 
&lt;/p&gt;
&lt;p&gt;
Split the camel casing of a method/class into words and run some sort of word analysis
to check if the words make sense ?
&lt;/p&gt;
&lt;p&gt;
The analysis has to be automated, and run as part of CI ideally..
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:581ae04a-9af0-4fcb-b3f0-cceb69ae51f3" class="wlWriterSmartContent"&gt;Technorati
Tags: &lt;a href="http://technorati.com/tags/.net" rel="tag"&gt;.net&lt;/a&gt;,&lt;a href="http://technorati.com/tags/thinking%20out%20loud" rel="tag"&gt;thinking
out loud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/code%20metrics" rel="tag"&gt;code metrics&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,d201f27d-4c5d-4eb4-b05c-675d3472141a.aspx</comments>
      <category>.Net General</category>
      <category>Software Design</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=8410ff38-3c46-4303-9905-cabbeab00131</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,8410ff38-3c46-4303-9905-cabbeab00131.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,8410ff38-3c46-4303-9905-cabbeab00131.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8410ff38-3c46-4303-9905-cabbeab00131</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, at <a href="http://www.bbcworldwide.com/" target="_blank">work</a> I was treated
to a rare opportunity to attend a talk by <a href="http://martinfowler.com/" target="_blank">Martin
Fowler</a>. I may or may not get the chance to hear someone who can profoundly inspire
developers. with simple( sometimes obvious) nuggets of wisdom, that will make us build
better software.
</p>
        <p>
The talk didn't have a specific title, but centred around the theme of software design
and how we go about it. His talk mostly focused on how keeping things simple can help
build better software. This concept is obvious, but many of us loose sight of it.
</p>
        <p>
          <em>
            <strong>look at what has already been done.</strong>
          </em>
        </p>
        <p>
Similar problems have already been solved, someone out there knows how to solve it. 
This is the basis of all the design patterns that have been collated by Eric Gamma
et al and Martin Fowler himself.  Patterns are nothing new, they are not the
future. They are practices that have been used in successful software in the past,
and we can draw on the lessons learnt during the past 30 (or more)  years of
software development.
</p>
        <p>
          <em>
            <strong>spread knowledge backward</strong>
          </em>
        </p>
        <p>
it's important that older, experienced developers pass on their knowledge to new or
less experienced developers. He made an interesting point on how software architects
at Thoughtworks pair up with less experienced developers. A good software architect
is one who does not have to make any decisions. On a related subject Martin said <em>"burn
your architecture document"</em>. If the developers have to refer back to a <em>document</em>,
it means that they haven't fully absorbed the architecture of the system being built,
and there are gaps in their knowledge.
</p>
        <p>
          <em>
            <strong>keep things simple, expect and prepare for change</strong>
          </em>
        </p>
        <p>
This is what inspired me the most. Software is soft( malleable). It always changes,
expect and be ready to change. Importantly be prepared to undo change. Work with what
you know, and do not worry about changes that can happen. Postpone decisions till
you absolutely need to make them. Organise work into incremental chunks of changes.
</p>
        <p>
There is a lot more I took away from the talk. Might take a while to digest it all
:). However these are concepts that are stressed in the books listed below, specially
in<em> </em>The Pragmatic Programmer.
</p>
        <p>
If you haven't read any of Martin Fowler's books, I strongly suggest you do so immediately,
along with a few other books that will inspire ( and shock you) into being a better
developer.
</p>
        <p>
          <a href="http://www.amazon.co.uk/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1205962255&amp;sr=8-1">Patterns
of Enterprise Application Architecture</a>
        </p>
        <p>
          <a href="http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672/ref=pd_bbs_sr_2?ie=UTF8&amp;s=books&amp;qid=1205962255&amp;sr=8-2">Refactoring:
Improving the Design of Existing Code</a>
        </p>
        <p>
          <a href="http://www.amazon.co.uk/Domain-driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1205962400&amp;sr=8-1">Domain-driven
Design: Tackling Complexity in the Heart of Software</a>
        </p>
        <p>
          <a href="http://www.amazon.co.uk/Pragmatic-Programmer-Andrew-Hunt/dp/020161622X/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1205962444&amp;sr=8-1" target="_blank">The
Pragmatic Programmer</a>
        </p>
        <p>
Kudos to <a title="Jason Gorman" href="http://parlezuml.com/blog/" target="_blank">Jason</a> for
organising the talk.
</p>
      </body>
      <title>Martin Fowler Talk</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,8410ff38-3c46-4303-9905-cabbeab00131.aspx</guid>
      <link>http://www.hibri.net/2008/03/20/MartinFowlerTalk.aspx</link>
      <pubDate>Thu, 20 Mar 2008 02:37:05 GMT</pubDate>
      <description>&lt;p&gt;
Today, at &lt;a href="http://www.bbcworldwide.com/" target="_blank"&gt;work&lt;/a&gt; I was treated
to a rare opportunity to attend a talk by &lt;a href="http://martinfowler.com/" target="_blank"&gt;Martin
Fowler&lt;/a&gt;. I may or may not get the chance to hear someone who can profoundly inspire
developers. with simple( sometimes obvious) nuggets of wisdom, that will make us build
better software.
&lt;/p&gt;
&lt;p&gt;
The talk didn't have a specific title, but centred around the theme of software design
and how we go about it. His talk mostly focused on how keeping things simple can help
build better software. This concept is obvious, but many of us loose sight of it.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;look at what has already been done.&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Similar problems have already been solved, someone out there knows how to solve it.&amp;nbsp;
This is the basis of all the design patterns that have been collated by Eric Gamma
et al and Martin Fowler himself.&amp;nbsp; Patterns are nothing new, they are not the
future. They are practices that have been used in successful software in the past,
and we can draw on the lessons learnt during the past 30 (or more)&amp;nbsp; years of
software development.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;spread knowledge backward&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
it's important that older, experienced developers pass on their knowledge to new or
less experienced developers. He made an interesting point on how software architects
at Thoughtworks pair up with less experienced developers. A good software architect
is one who does not have to make any decisions. On a related subject Martin said &lt;em&gt;"burn
your architecture document"&lt;/em&gt;. If the developers have to refer back to a &lt;em&gt;document&lt;/em&gt;,
it means that they haven't fully absorbed the architecture of the system being built,
and there are gaps in their knowledge.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;keep things simple, expect and prepare for change&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
This is what inspired me the most. Software is soft( malleable). It always changes,
expect and be ready to change. Importantly be prepared to undo change. Work with what
you know, and do not worry about changes that can happen. Postpone decisions till
you absolutely need to make them. Organise work into incremental chunks of changes.
&lt;/p&gt;
&lt;p&gt;
There is a lot more I took away from the talk. Might take a while to digest it all
:). However these are concepts that are stressed in the books listed below, specially
in&lt;em&gt;&amp;nbsp;&lt;/em&gt;The Pragmatic Programmer.
&lt;/p&gt;
&lt;p&gt;
If you haven't read any of Martin Fowler's books, I strongly suggest you do so immediately,
along with a few other books that will inspire ( and shock you) into being a better
developer.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.co.uk/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1205962255&amp;amp;sr=8-1"&gt;Patterns
of Enterprise Application Architecture&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1205962255&amp;amp;sr=8-2"&gt;Refactoring:
Improving the Design of Existing Code&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.co.uk/Domain-driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1205962400&amp;amp;sr=8-1"&gt;Domain-driven
Design: Tackling Complexity in the Heart of Software&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.co.uk/Pragmatic-Programmer-Andrew-Hunt/dp/020161622X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1205962444&amp;amp;sr=8-1" target="_blank"&gt;The
Pragmatic Programmer&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Kudos to &lt;a title="Jason Gorman" href="http://parlezuml.com/blog/" target="_blank"&gt;Jason&lt;/a&gt; for
organising the talk.
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,8410ff38-3c46-4303-9905-cabbeab00131.aspx</comments>
      <category>.Net General</category>
      <category>Software Design</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=b81af2a9-36b0-4cfc-99f3-e97a73e3d490</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,b81af2a9-36b0-4cfc-99f3-e97a73e3d490.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,b81af2a9-36b0-4cfc-99f3-e97a73e3d490.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b81af2a9-36b0-4cfc-99f3-e97a73e3d490</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
VS 2008 throws a COM Exception when loading a web application project. This happens
when the project was made in VS 2005 and upgraded using the Upgrade Wizard. It loads
web application projects made natively without a problem. There is a work around if
this happens to you.
</p>
        <p>
Via <a title="http://www.codeattest.com/blogs/martin/2008/01/comexception-loading-solution.html" href="http://www.codeattest.com/blogs/martin/2008/01/comexception-loading-solution.html">http://www.codeattest.com/blogs/martin/2008/01/comexception-loading-solution.html</a></p>
        <p>
          <em>"In order to load the Web Application Project you must make sure that the URL
that the project is using, is valid and can be resolved. This can happen pretty often
since when you download a project from source control for the first time, it is highly
unlikely that you will have the web site already set up."</em>
        </p>
        <p>
 
</p>
        <p>
If this happens to you, the project will not load and will be grayed out in the solution
explorer. Right click and edit the project, (or edit the .csproj file in notepad)
look for the WebProjectProperties element. Check if the IISUrl child element points
to a valid location. The server should exists, and the virtual directory should point
to the same location as the web application project.
</p>
      </body>
      <title>COM Exception while loading a Web Application Project</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,b81af2a9-36b0-4cfc-99f3-e97a73e3d490.aspx</guid>
      <link>http://www.hibri.net/2008/03/01/COMExceptionWhileLoadingAWebApplicationProject.aspx</link>
      <pubDate>Sat, 01 Mar 2008 13:17:44 GMT</pubDate>
      <description>&lt;p&gt;
VS 2008 throws a COM Exception when loading a web application project. This happens
when the project was made in VS 2005 and upgraded using the Upgrade Wizard. It loads
web application projects made natively without a problem. There is a work around if
this happens to you.
&lt;/p&gt;
&lt;p&gt;
Via &lt;a title="http://www.codeattest.com/blogs/martin/2008/01/comexception-loading-solution.html" href="http://www.codeattest.com/blogs/martin/2008/01/comexception-loading-solution.html"&gt;http://www.codeattest.com/blogs/martin/2008/01/comexception-loading-solution.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;"In order to load the Web Application Project you must make sure that the URL
that the project is using, is valid and can be resolved. This can happen pretty often
since when you download a project from source control for the first time, it is highly
unlikely that you will have the web site already set up."&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
If this happens to you, the project will not load and will be grayed out in the solution
explorer. Right click and edit the project, (or edit the .csproj file in notepad)
look for the WebProjectProperties element. Check if the IISUrl child element points
to a valid location. The server should exists, and the virtual directory should point
to the same location as the web application project.
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,b81af2a9-36b0-4cfc-99f3-e97a73e3d490.aspx</comments>
      <category>.Net General</category>
      <category>.Net Web</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=80a030bb-3b37-4c86-adc3-1c90b870ca67</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,80a030bb-3b37-4c86-adc3-1c90b870ca67.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,80a030bb-3b37-4c86-adc3-1c90b870ca67.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=80a030bb-3b37-4c86-adc3-1c90b870ca67</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the midst of fiddling with the Xbox, I took the second part of the MCSD to MCPD
uprade exams. I got a  voucher to do the first part (70-553) at the Visual Studio
2005 launch event. I got around to doing the second part (70-554) yesterday. I passed
with a comfortable 820. This is the last of the certifications till the .net 3.5 series
comes out. 
</p>
      </body>
      <title>I'm now an MCPD : Enterprise Application Developer</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,80a030bb-3b37-4c86-adc3-1c90b870ca67.aspx</guid>
      <link>http://www.hibri.net/2007/11/13/ImNowAnMCPDEnterpriseApplicationDeveloper.aspx</link>
      <pubDate>Tue, 13 Nov 2007 11:52:16 GMT</pubDate>
      <description>&lt;p&gt;
In the midst of fiddling with the Xbox, I took the second part of the MCSD to MCPD
uprade exams. I got a&amp;nbsp; voucher to do the first part (70-553) at the Visual Studio
2005 launch event. I got around to doing the second part (70-554) yesterday. I passed
with a comfortable 820. This is the last of the certifications till the .net 3.5 series
comes out. 
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,80a030bb-3b37-4c86-adc3-1c90b870ca67.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=e58836f4-08e7-4060-b902-6745f31db668</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,e58836f4-08e7-4060-b902-6745f31db668.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,e58836f4-08e7-4060-b902-6745f31db668.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e58836f4-08e7-4060-b902-6745f31db668</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a title="http://www.codinghorror.com/blog/archives/000771.html" href="http://www.codinghorror.com/blog/archives/000771.html">http://www.codinghorror.com/blog/archives/000771.html</a>
        </p>
        <p>
          <em>"The certification alphabet is no substitute for a solid portfolio; you should
be spending your time building stuff, not studying for multiple choice tests. But
that doesn't mean they're worthless, either. I don't think certifications get in the
way, as long as you can demonstrate an impressive body of work along with them."</em>
        </p>
        <p>
I couldn't agree more. I find that there is a misconception MS certifications
are software development qualifications. Many budding developers think of this as
a must have and expect to get programming skills through the certification program.
They fail to realize that the MCP/MCSD/MCPD certifications are product certifications
rather than programming certifications. 
</p>
      </body>
      <title>Do certifications matter ?</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,e58836f4-08e7-4060-b902-6745f31db668.aspx</guid>
      <link>http://www.hibri.net/2007/07/15/DoCertificationsMatter.aspx</link>
      <pubDate>Sun, 15 Jul 2007 12:12:58 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a title="http://www.codinghorror.com/blog/archives/000771.html" href="http://www.codinghorror.com/blog/archives/000771.html"&gt;http://www.codinghorror.com/blog/archives/000771.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;"The certification alphabet is no substitute for a solid portfolio; you should
be spending your time building stuff, not studying for multiple choice tests. But
that doesn't mean they're worthless, either. I don't think certifications get in the
way, as long as you can demonstrate an impressive body of work along with them."&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
I couldn't agree more. I find that there is a misconception&amp;nbsp;MS certifications
are software development qualifications. Many budding developers think of this as
a must have and expect to get programming skills through the certification program.
They fail to realize that the MCP/MCSD/MCPD certifications are product certifications
rather than programming certifications. 
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,e58836f4-08e7-4060-b902-6745f31db668.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=d699a569-8ad7-45fc-83e1-1ed3dcf0447b</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,d699a569-8ad7-45fc-83e1-1ed3dcf0447b.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,d699a569-8ad7-45fc-83e1-1ed3dcf0447b.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d699a569-8ad7-45fc-83e1-1ed3dcf0447b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Quick and dirty function to return the size of a file in a properly formatted string
in KB, MB or GB. There has to be an easier way than this .....
</p>
        <p>
 
</p>
        <pre>
          <span style="color: blue">private</span>
          <span style="color: blue">const</span>
          <span style="color: blue">double</span> KByte
= <span style="color: maroon">1024</span>; <span style="color: blue">private</span><span style="color: blue">const</span><span style="color: blue">double</span> MByte
= KByte * <span style="color: maroon">1024</span>; <span style="color: blue">private</span><span style="color: blue">const</span><span style="color: blue">double</span> GByte
= MByte * <span style="color: maroon">1024</span>; <span style="color: blue">public</span><span style="color: blue">static</span><span style="color: blue">string</span> GetFileSizeString(<span style="color: blue">int</span> bytes)
{ <span style="color: blue">if</span> ((bytes / GByte) &lt; <span style="color: maroon">1</span>)
{ <span style="color: blue">if</span> ((bytes / MByte) &lt; <span style="color: maroon">1</span>)
{ <span style="color: blue">if</span> ((bytes / KByte) &lt; <span style="color: maroon">1</span>)
{ <span style="color: blue">return</span> String.Format(<span style="color: maroon">"{0}
B"</span>, bytes); } <span style="color: blue">else</span> { <span style="color: blue">return</span> String.Format(<span style="color: maroon">"{0}
KB"</span>, Math.Round((bytes / KByte), <span style="color: maroon">2</span>)); }
} <span style="color: blue">else</span> { <span style="color: blue">return</span> String.Format(<span style="color: maroon">"{0}
MB"</span>, Math.Round((bytes / MByte), <span style="color: maroon">2</span>)); }
} <span style="color: blue">else</span> { <span style="color: blue">return</span> String.Format(<span style="color: maroon">"{0}
GB"</span>, Math.Round((bytes / GByte), <span style="color: maroon">2</span>)); }
}</pre>
      </body>
      <title>HOWTO Get the size of a file as a formatted string</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,d699a569-8ad7-45fc-83e1-1ed3dcf0447b.aspx</guid>
      <link>http://www.hibri.net/2007/03/30/HOWTOGetTheSizeOfAFileAsAFormattedString.aspx</link>
      <pubDate>Fri, 30 Mar 2007 13:54:54 GMT</pubDate>
      <description>&lt;p&gt;
Quick and dirty function to return the size of a file in a properly formatted string
in KB, MB or GB. There has to be an easier way than this .....
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;pre&gt;    &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;const&lt;/span&gt; &lt;span style="color: blue"&gt;double&lt;/span&gt; KByte
= &lt;span style="color: maroon"&gt;1024&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;const&lt;/span&gt; &lt;span style="color: blue"&gt;double&lt;/span&gt; MByte
= KByte * &lt;span style="color: maroon"&gt;1024&lt;/span&gt;; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;const&lt;/span&gt; &lt;span style="color: blue"&gt;double&lt;/span&gt; GByte
= MByte * &lt;span style="color: maroon"&gt;1024&lt;/span&gt;; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; GetFileSizeString(&lt;span style="color: blue"&gt;int&lt;/span&gt; bytes)
{ &lt;span style="color: blue"&gt;if&lt;/span&gt; ((bytes / GByte) &amp;lt; &lt;span style="color: maroon"&gt;1&lt;/span&gt;)
{ &lt;span style="color: blue"&gt;if&lt;/span&gt; ((bytes / MByte) &amp;lt; &lt;span style="color: maroon"&gt;1&lt;/span&gt;)
{ &lt;span style="color: blue"&gt;if&lt;/span&gt; ((bytes / KByte) &amp;lt; &lt;span style="color: maroon"&gt;1&lt;/span&gt;)
{ &lt;span style="color: blue"&gt;return&lt;/span&gt; String.Format(&lt;span style="color: maroon"&gt;"{0}
B"&lt;/span&gt;, bytes); } &lt;span style="color: blue"&gt;else&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; String.Format(&lt;span style="color: maroon"&gt;"{0}
KB"&lt;/span&gt;, Math.Round((bytes / KByte), &lt;span style="color: maroon"&gt;2&lt;/span&gt;)); }
} &lt;span style="color: blue"&gt;else&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; String.Format(&lt;span style="color: maroon"&gt;"{0}
MB"&lt;/span&gt;, Math.Round((bytes / MByte), &lt;span style="color: maroon"&gt;2&lt;/span&gt;)); }
} &lt;span style="color: blue"&gt;else&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; String.Format(&lt;span style="color: maroon"&gt;"{0}
GB"&lt;/span&gt;, Math.Round((bytes / GByte), &lt;span style="color: maroon"&gt;2&lt;/span&gt;)); }
}&lt;/pre&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,d699a569-8ad7-45fc-83e1-1ed3dcf0447b.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=73c69356-f841-4aa0-b88e-6a375b2afc41</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,73c69356-f841-4aa0-b88e-6a375b2afc41.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,73c69356-f841-4aa0-b88e-6a375b2afc41.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=73c69356-f841-4aa0-b88e-6a375b2afc41</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A nice step by step tutorial, on how to submit a patch/bug fix to a OSS .net project
on Sourceforge.
</p>
        <p>
          <a title="http://www.dasblog.info/ExampleHowToContributeAPatchToAnOpenSourceProjectLikeDasBlog.aspx" href="http://www.dasblog.info/ExampleHowToContributeAPatchToAnOpenSourceProjectLikeDasBlog.aspx" target="_blank">How
to contribute a patch</a>
        </p>
      </body>
      <title>How to contribute a patch to Open Source projects</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,73c69356-f841-4aa0-b88e-6a375b2afc41.aspx</guid>
      <link>http://www.hibri.net/2007/01/28/HowToContributeAPatchToOpenSourceProjects.aspx</link>
      <pubDate>Sun, 28 Jan 2007 20:21:32 GMT</pubDate>
      <description>&lt;p&gt;
A nice step by step tutorial, on how to submit a patch/bug fix to a OSS .net project
on Sourceforge.
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.dasblog.info/ExampleHowToContributeAPatchToAnOpenSourceProjectLikeDasBlog.aspx" href="http://www.dasblog.info/ExampleHowToContributeAPatchToAnOpenSourceProjectLikeDasBlog.aspx" target="_blank"&gt;How
to contribute a patch&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,73c69356-f841-4aa0-b88e-6a375b2afc41.aspx</comments>
      <category>.Net General</category>
      <category>OSS</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=6011a642-fdcb-4618-a25b-e2ca59d89018</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,6011a642-fdcb-4618-a25b-e2ca59d89018.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,6011a642-fdcb-4618-a25b-e2ca59d89018.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6011a642-fdcb-4618-a25b-e2ca59d89018</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <p>
Handy online tool. <a title="http://www.hitsw.com/xml_utilites/" href="http://www.hitsw.com/xml_utilites/">http://www.hitsw.com/xml_utilites/</a></p>
      </body>
      <title>Generate a DTD from an XML File</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,6011a642-fdcb-4618-a25b-e2ca59d89018.aspx</guid>
      <link>http://www.hibri.net/2006/11/27/GenerateADTDFromAnXMLFile.aspx</link>
      <pubDate>Mon, 27 Nov 2006 10:53:51 GMT</pubDate>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Handy&amp;nbsp;online tool. &lt;a title="http://www.hitsw.com/xml_utilites/" href="http://www.hitsw.com/xml_utilites/"&gt;http://www.hitsw.com/xml_utilites/&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,6011a642-fdcb-4618-a25b-e2ca59d89018.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=56cafa58-20ac-42eb-8182-3fda77354f78</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,56cafa58-20ac-42eb-8182-3fda77354f78.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,56cafa58-20ac-42eb-8182-3fda77354f78.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=56cafa58-20ac-42eb-8182-3fda77354f78</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Make your code posts pretty.
</p>
        <p>
          <a title="http://puzzleware.net/blogs/archive/2006/10/29/CodeHTMLer-plugin-for-Windows-Live-Writer.aspx" href="http://puzzleware.net/blogs/archive/2006/10/29/CodeHTMLer-plugin-for-Windows-Live-Writer.aspx">http://puzzleware.net/blogs/archive/2006/10/29/CodeHTMLer-plugin-for-Windows-Live-Writer.aspx</a>
        </p>
        <pre>
          <span style="color: teal"> 1</span>
          <span style="color: gray">/// &lt;summary&gt;</span>
          <span style="color: teal"> 2</span>
          <span style="color: gray">///
Summary description for Main.</span>
          <span style="color: teal"> 3</span>
          <span style="color: gray">///
&lt;/summary&gt;</span>
          <span style="color: teal"> 4</span>
          <span style="color: blue">static</span>
          <span style="color: blue">void</span> Main(<span style="color: blue">string</span>[]
args) <span style="color: teal"> 5</span> { <span style="color: teal"> 6</span><span style="color: green">//
string variable</span><span style="color: teal"> 7</span><span style="color: blue">string</span> myString
= <span style="color: maroon">"myString"</span>; <span style="color: teal"> 8</span><span style="color: teal"> 9</span><span style="color: green">/*
integer <span style="color: teal"> 10</span> variable */</span><span style="color: teal"> 11</span><span style="color: blue">int</span> myInt
= <span style="color: maroon">2</span>; <span style="color: teal"> 12</span> }</pre>
      </body>
      <title>Windows Live Writer code syntax highligting plugin.</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,56cafa58-20ac-42eb-8182-3fda77354f78.aspx</guid>
      <link>http://www.hibri.net/2006/11/26/WindowsLiveWriterCodeSyntaxHighligtingPlugin.aspx</link>
      <pubDate>Sun, 26 Nov 2006 17:52:27 GMT</pubDate>
      <description>&lt;p&gt;
Make your code posts pretty.
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://puzzleware.net/blogs/archive/2006/10/29/CodeHTMLer-plugin-for-Windows-Live-Writer.aspx" href="http://puzzleware.net/blogs/archive/2006/10/29/CodeHTMLer-plugin-for-Windows-Live-Writer.aspx"&gt;http://puzzleware.net/blogs/archive/2006/10/29/CodeHTMLer-plugin-for-Windows-Live-Writer.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;span style="color: teal"&gt; 1&lt;/span&gt; &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt; &lt;span style="color: teal"&gt; 2&lt;/span&gt; &lt;span style="color: gray"&gt;///
Summary description for Main.&lt;/span&gt; &lt;span style="color: teal"&gt; 3&lt;/span&gt; &lt;span style="color: gray"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;span style="color: teal"&gt; 4&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[]
args) &lt;span style="color: teal"&gt; 5&lt;/span&gt; { &lt;span style="color: teal"&gt; 6&lt;/span&gt; &lt;span style="color: green"&gt;//
string variable&lt;/span&gt; &lt;span style="color: teal"&gt; 7&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; myString
= &lt;span style="color: maroon"&gt;"myString"&lt;/span&gt;; &lt;span style="color: teal"&gt; 8&lt;/span&gt; &lt;span style="color: teal"&gt; 9&lt;/span&gt; &lt;span style="color: green"&gt;/*
integer &lt;span style="color: teal"&gt; 10&lt;/span&gt; variable */&lt;/span&gt; &lt;span style="color: teal"&gt; 11&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; myInt
= &lt;span style="color: maroon"&gt;2&lt;/span&gt;; &lt;span style="color: teal"&gt; 12&lt;/span&gt; }&lt;/pre&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,56cafa58-20ac-42eb-8182-3fda77354f78.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=41c9b471-5438-47b0-8bf4-6cdca37f58f8</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,41c9b471-5438-47b0-8bf4-6cdca37f58f8.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,41c9b471-5438-47b0-8bf4-6cdca37f58f8.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=41c9b471-5438-47b0-8bf4-6cdca37f58f8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Download  <a href="http://www.microsoft.com/downloads/details.aspx?Fa...">http://www.microsoft.com/downloads/details.aspx?Fa...</a></p>
        <p>
Fixes <a href="http://support.microsoft.com/kb/918007">http://support.microsoft.com/kb/918007</a></p>
        <p>
and yes they have finally fixed this 
</p>
        <p>
          <a href="http://support.microsoft.com/kb/313512/" target="_blank">BUG: "Could not
copy temporary files to the output directory" error message when you build a solution
that contains multiple projects</a>
        </p>
        <p>
I have to deal with this bug all the time. Phew, glad its been fixed.
</p>
      </body>
      <title>VS 2003 Service Pack 1 Released</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,41c9b471-5438-47b0-8bf4-6cdca37f58f8.aspx</guid>
      <link>http://www.hibri.net/2006/08/21/VS2003ServicePack1Released.aspx</link>
      <pubDate>Mon, 21 Aug 2006 09:13:06 GMT</pubDate>
      <description>&lt;p&gt;
Download&amp;nbsp; &lt;a href="http://www.microsoft.com/downloads/details.aspx?Fa..."&gt;http://www.microsoft.com/downloads/details.aspx?Fa...&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Fixes &lt;a href="http://support.microsoft.com/kb/918007"&gt;http://support.microsoft.com/kb/918007&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
and yes they have finally fixed this 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://support.microsoft.com/kb/313512/" target="_blank"&gt;BUG: "Could not
copy temporary files to the output directory" error message when you build a solution
that contains multiple projects&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I have to deal with this bug all the time. Phew, glad its been fixed.
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,41c9b471-5438-47b0-8bf4-6cdca37f58f8.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=343f068c-c450-4868-abfe-8481b3eacac4</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,343f068c-c450-4868-abfe-8481b3eacac4.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,343f068c-c450-4868-abfe-8481b3eacac4.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=343f068c-c450-4868-abfe-8481b3eacac4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Found this nice article.
</p>
        <p>
          <a href="http://www.codeproject.com/csharp/MMCFileActCs.asp" target="_blank">Creating
MMC Snapin using C# (Part I)</a>
        </p>
        <p>
Requires a the MMC .Net library over at sourceforge.
</p>
        <p>
          <a href="http://sourceforge.net/projects/mmclibrary/">http://sourceforge.net/projects/mmclibrary/</a>
        </p>
      </body>
      <title>How to create a MMC SnapIn using .Net</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,343f068c-c450-4868-abfe-8481b3eacac4.aspx</guid>
      <link>http://www.hibri.net/2006/08/21/HowToCreateAMMCSnapInUsingNet.aspx</link>
      <pubDate>Mon, 21 Aug 2006 08:46:32 GMT</pubDate>
      <description>&lt;p&gt;
Found this nice article.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.codeproject.com/csharp/MMCFileActCs.asp" target="_blank"&gt;Creating
MMC Snapin using C# (Part I)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Requires&amp;nbsp;a the&amp;nbsp;MMC .Net library over at sourceforge.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://sourceforge.net/projects/mmclibrary/"&gt;http://sourceforge.net/projects/mmclibrary/&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,343f068c-c450-4868-abfe-8481b3eacac4.aspx</comments>
      <category>.Net General</category>
      <category>.Net Net</category>
      <category>.Net UI</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=dbd4e3ae-c4eb-41a3-a1b3-3788e0711d9c</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,dbd4e3ae-c4eb-41a3-a1b3-3788e0711d9c.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,dbd4e3ae-c4eb-41a3-a1b3-3788e0711d9c.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=dbd4e3ae-c4eb-41a3-a1b3-3788e0711d9c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;displaylang=en">Download
here</a>
        </p>
        <p>
Makes code more readable, works only if ClearType is enabled. Looks good on my laptop
</p>
        <p>
via <a href="http://blogs.msdn.com/vseditor/archive/2006/05/08/593399.aspx">http://blogs.msdn.com/vseditor/archive/2006/05/08/593399.aspx</a></p>
        <p>
Update: Works with VS 2003 as well, just go to Tools -&gt;Environment and set Consolas
font for the text editor
</p>
      </body>
      <title>New Font for the Visual Studio 2005 Editor</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,dbd4e3ae-c4eb-41a3-a1b3-3788e0711d9c.aspx</guid>
      <link>http://www.hibri.net/2006/05/09/NewFontForTheVisualStudio2005Editor.aspx</link>
      <pubDate>Tue, 09 May 2006 16:59:54 GMT</pubDate>
      <description>
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;amp;displaylang=en"&gt;Download
here&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Makes code more readable, works only if ClearType is enabled. Looks good on my laptop
&lt;/p&gt;
&lt;p&gt;
via &lt;a href="http://blogs.msdn.com/vseditor/archive/2006/05/08/593399.aspx"&gt;http://blogs.msdn.com/vseditor/archive/2006/05/08/593399.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Update: Works with VS 2003 as well, just go to Tools -&amp;gt;Environment and set Consolas
font for the text editor
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,dbd4e3ae-c4eb-41a3-a1b3-3788e0711d9c.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=aa1fe2b7-d088-4eea-bb8b-0dd284d9d231</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,aa1fe2b7-d088-4eea-bb8b-0dd284d9d231.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,aa1fe2b7-d088-4eea-bb8b-0dd284d9d231.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=aa1fe2b7-d088-4eea-bb8b-0dd284d9d231</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.developerday.co.uk">http://www.developerday.co.uk</a>
        </p>
        <p>
Registrations are now open for DDD, on the 3rd of June.
</p>
        <p>
 
</p>
      </body>
      <title>UK Developer Day</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,aa1fe2b7-d088-4eea-bb8b-0dd284d9d231.aspx</guid>
      <link>http://www.hibri.net/2006/05/03/UKDeveloperDay.aspx</link>
      <pubDate>Wed, 03 May 2006 09:30:17 GMT</pubDate>
      <description>
&lt;p&gt;
&lt;a href="http://www.developerday.co.uk"&gt;http://www.developerday.co.uk&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Registrations are now open for DDD, on the 3rd of June.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,aa1fe2b7-d088-4eea-bb8b-0dd284d9d231.aspx</comments>
      <category>.Net General</category>
    </item>
    <item>
      <trackback:ping>http://www.hibri.net/Trackback.aspx?guid=93f18d20-30ca-4e2c-8c15-d77fec7a455f</trackback:ping>
      <pingback:server>http://www.hibri.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.hibri.net/PermaLink,guid,93f18d20-30ca-4e2c-8c15-d77fec7a455f.aspx</pingback:target>
      <dc:creator>Hibri</dc:creator>
      <wfw:comment>http://www.hibri.net/CommentView,guid,93f18d20-30ca-4e2c-8c15-d77fec7a455f.aspx</wfw:comment>
      <wfw:commentRss>http://www.hibri.net/SyndicationService.asmx/GetEntryCommentsRss?guid=93f18d20-30ca-4e2c-8c15-d77fec7a455f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Added these blogs to my feed list.
</p>
        <p>
          <a href="http://blogs.msdn.com/tess">http://blogs.msdn.com/tess</a>
        </p>
        <p>
          <a href="http://dotnetdebug.blogspot.com/">http://dotnetdebug.blogspot.com/</a>
        </p>
        <p>
Tess's blog is full of  debugging and trouble-shooting tips. 
</p>
        <p>
          <a href="http://blogs.msdn.com/tess/archive/2006/02/23/537681.aspx">http://blogs.msdn.com/tess/archive/2006/02/23/537681.aspx</a>
        </p>
      </body>
      <title>.Net debugging tips</title>
      <guid isPermaLink="false">http://www.hibri.net/PermaLink,guid,93f18d20-30ca-4e2c-8c15-d77fec7a455f.aspx</guid>
      <link>http://www.hibri.net/2006/04/28/NetDebuggingTips.aspx</link>
      <pubDate>Fri, 28 Apr 2006 10:25:38 GMT</pubDate>
      <description>
&lt;p&gt;
Added these blogs to my feed list.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/tess"&gt;http://blogs.msdn.com/tess&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dotnetdebug.blogspot.com/"&gt;http://dotnetdebug.blogspot.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Tess's blog is full of&amp;nbsp; debugging and trouble-shooting tips. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/tess/archive/2006/02/23/537681.aspx"&gt;http://blogs.msdn.com/tess/archive/2006/02/23/537681.aspx&lt;/a&gt;
&lt;/p&gt;</description>
      <comments>http://www.hibri.net/CommentView,guid,93f18d20-30ca-4e2c-8c15-d77fec7a455f.aspx</comments>
      <category>.Net General</category>
      <category>Odds &amp; Sods</category>
    </item>
  </channel>
</rss>