<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11129572</id><updated>2011-08-03T04:41:49.250-04:00</updated><title type='text'>Jorge's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11129572.post-292143328015928426</id><published>2008-02-17T22:17:00.001-05:00</published><updated>2008-02-17T22:20:08.568-05:00</updated><title type='text'>Moved To MS Spaces</title><content type='html'>I've moved my blog to MS Spaces.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://matosjorge.spaces.live.com/default.aspx"&gt;http://matosjorge.spaces.live.com/default.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-292143328015928426?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/292143328015928426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=292143328015928426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/292143328015928426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/292143328015928426'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2008/02/moved-to-ms-spaces.html' title='Moved To MS Spaces'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-3973659745082451962</id><published>2007-07-12T10:41:00.000-04:00</published><updated>2007-07-12T10:50:46.267-04:00</updated><title type='text'>ReSharper V3.0 and XML Comments</title><content type='html'>If you are using ReSharper V3, you may notice that instead of seeing the little green box at the top right of the code window (which normally indicates that you have no errors or warnings in your code) you now have a yellow box that indicates that you have a warning in your code!  That warning is most likely due to missing XML comments in your C# code. You can get ReSharper to ignore missing XML comments by going into your project's properties and entering the warning number 1591 into the "Suppress Warnings" text box.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-3973659745082451962?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/3973659745082451962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=3973659745082451962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/3973659745082451962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/3973659745082451962'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2007/07/resharper-v30-and-xml-comments.html' title='ReSharper V3.0 and XML Comments'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-971766774964868118</id><published>2007-07-12T10:39:00.001-04:00</published><updated>2007-07-12T10:39:55.271-04:00</updated><title type='text'>Solution Item Tracking in VS.NET 2005</title><content type='html'>One of my favorite features in VS.NET is the ability to click anywhere in an open class file and have the solution explorer automatically select that file in its window.  This way I can see exactly which project the file resides in.  You can turn this feature on in VS.NET by selecting Tools/Options/Projects &amp; Solutions and click on the checkbox labeled "Track Active Item In Solution Explorer".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-971766774964868118?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/971766774964868118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=971766774964868118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/971766774964868118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/971766774964868118'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2007/07/solution-item-tracking-in-vsnet-2005.html' title='Solution Item Tracking in VS.NET 2005'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-6990879511699763325</id><published>2007-02-19T01:04:00.000-05:00</published><updated>2007-02-19T02:03:26.986-05:00</updated><title type='text'>HP dv9000 Laptop, QuickPlay and Vista</title><content type='html'>The HP QuickPlay application on my new HP dv9000t laptop just didn't work with Vista.  I found a couple of solutions that worked:&lt;br /&gt;&lt;br /&gt;1) Disable user account control&lt;br /&gt;2) Set the HP QuickPlay executable (QP.EXE) to run as administrator&lt;br /&gt;&lt;br /&gt;I chose option 2.  If there's another way to get QuickPlay to work on Vista, please post a reply and let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-6990879511699763325?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/6990879511699763325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=6990879511699763325' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/6990879511699763325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/6990879511699763325'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2007/02/hp-dv9000-laptop-quickplay-and-vista.html' title='HP dv9000 Laptop, QuickPlay and Vista'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-6292021838010301079</id><published>2007-02-03T19:54:00.000-05:00</published><updated>2007-02-03T23:37:41.932-05:00</updated><title type='text'>My son Alexander!</title><content type='html'>He was born on Dec 27th, 7 lbs 3.2 ounces, 19 inches long&lt;br /&gt;&lt;iframe style="MARGIN-TOP: 10px" src="http://www.flickr.com/slideShow/index.gne?tags=babyalex3weeksold" frameborder="0" width="500" scrolling="no" height="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-6292021838010301079?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/6292021838010301079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=6292021838010301079' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/6292021838010301079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/6292021838010301079'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2007/02/my-son-alexander.html' title='My son Alexander!'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-115664999231091257</id><published>2006-08-26T23:39:00.000-04:00</published><updated>2006-08-29T09:29:39.083-04:00</updated><title type='text'>Notepad++</title><content type='html'>&lt;p&gt;Try &lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt; its lightweight, better than Notepad2, and its free!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-115664999231091257?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/115664999231091257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=115664999231091257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115664999231091257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115664999231091257'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/08/notepad.html' title='Notepad++'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-115379382781180705</id><published>2006-07-24T22:15:00.000-04:00</published><updated>2006-09-18T10:29:58.126-04:00</updated><title type='text'>Its a Boy !!!</title><content type='html'>The due date is December 29th.&lt;br /&gt;&lt;iframe style="MARGIN-TOP: 10px" src="http://www.flickr.com/slideShow/index.gne?set_id=72157594210861011" frameborder="0" width="500" scrolling="no" height="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-115379382781180705?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/115379382781180705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=115379382781180705' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115379382781180705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115379382781180705'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/07/its-boy.html' title='Its a Boy !!!'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-115327619105195936</id><published>2006-07-18T22:27:00.000-04:00</published><updated>2006-07-18T22:30:57.473-04:00</updated><title type='text'>Virtual PC is Free!</title><content type='html'>Virtual PC is a cool product and I'm glad to see that Microsoft is giving it away for free. They're giving away the 2004 version but apparently they are going to give away the 2007 version (which supports windows vista) when it becomes available.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/windows/virtualpc/default.mspx"&gt;http://www.microsoft.com/windows/virtualpc/default.mspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-115327619105195936?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/115327619105195936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=115327619105195936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115327619105195936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115327619105195936'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/07/virtual-pc-is-free.html' title='Virtual PC is Free!'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-115250066961330089</id><published>2006-07-09T23:04:00.000-04:00</published><updated>2006-07-09T23:48:55.226-04:00</updated><title type='text'>NMock Constraints</title><content type='html'>NMock constraints allow you to run a validation against a parameter that is passed to your NMock object's method during an NUnit test. I want to share a custom NMock constraint I've written. With this constraint you can write an expectation that compares an expected XML document and the actual XML document. The constraint is called &lt;b&gt;IsEquivalentXml&lt;/b&gt;. The constraint class uses a class library written by Microsoft called &lt;a href="http://apps.gotdotnet.com/xmltools/XMLDiff/default.aspx"&gt;XmlDiffPatch&lt;/a&gt; to do the actual xml comparison.&lt;br /&gt;&lt;br /&gt;Some tests that use the new constraint are shown below:&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Test]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MyTest1()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; expectedXml = &lt;span class="str"&gt;"&amp;lt;Order&amp;gt;&amp;lt;/Order&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; actualXml = &lt;span class="str"&gt;"&amp;lt;Order&amp;gt;&amp;lt;/Order&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    DynamicMock mockObject = &lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicMock(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IOrderManager));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    mockObject.Expect(&lt;span class="str"&gt;"SubmitOrder"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;strong&gt;IsEquivalentXml&lt;/strong&gt;(expectedXml));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    ClassUnderTest classUnderTest = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; ClassUnderTest((IOrderManager)mockObject.MockInstance);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    classUnderTest.DoSometing(actualXml);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    mockObject.Verify();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;!-- code formatted by &lt;a href="http://manoli.net/csharpformat/"&gt;http://manoli.net/csharpformat/&lt;/a&gt; --&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Test]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MyTest2()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; expectedXml = &lt;span class="str"&gt;"&amp;lt;Order/&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; actualXml = &lt;span class="str"&gt;"&amp;lt;Order&amp;gt;&amp;lt;/Order&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    DynamicMock mockObject = &lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicMock(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IOrderManager));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    mockObject.Expect(&lt;span class="str"&gt;"SubmitOrder"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;strong&gt;IsEquivalentXml&lt;/strong&gt;(expectedXml));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    ClassUnderTest classUnderTest = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; ClassUnderTest((IOrderManager)mockObject.MockInstance);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    classUnderTest.DoSometing(actualXml);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    mockObject.Verify();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;!-- code formatted by &lt;a href="http://manoli.net/csharpformat/"&gt;http://manoli.net/csharpformat/&lt;/a&gt; --&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Test]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MyTest3()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; expectedXml = &lt;span class="str"&gt;@"&amp;lt;Order id="&lt;/span&gt;&lt;span class="str"&gt;"123"&lt;/span&gt;&lt;span class="str"&gt;"&amp;gt;&amp;lt;/Order&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; actualXml = &lt;span class="str"&gt;"&amp;lt;Order id='123'&amp;gt;&amp;lt;/Order&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    DynamicMock mockObject = &lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicMock(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IOrderManager));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    mockObject.Expect(&lt;span class="str"&gt;"SubmitOrder"&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;strong&gt;IsEquivalentXml&lt;/strong&gt;(expectedXml));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    ClassUnderTest classUnderTest = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; ClassUnderTest((IOrderManager)mockObject.MockInstance);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    classUnderTest.DoSometing(actualXml);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    mockObject.Verify();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;!-- code formatted by &lt;a href="http://manoli.net/csharpformat/"&gt;http://manoli.net/csharpformat/&lt;/a&gt; --&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Test]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MyTest10()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; expectedXml = &lt;span class="str"&gt;@"&amp;lt;Order&amp;gt;abc123&amp;lt;/Order&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; actualXml = &lt;span class="str"&gt;"&amp;lt;Order&amp;gt;    abc123    &amp;lt;/Order&amp;gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    DynamicMock mockObject = &lt;span class="kwrd"&gt;new&lt;/span&gt; DynamicMock(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IOrderManager));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    mockObject.Expect(&lt;span class="str"&gt;"SubmitOrder"&lt;/span&gt;, &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;strong&gt;IsEquivalentXml&lt;/strong&gt;(expectedXml, XmlDiffOptions.IgnoreWhitespace));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    ClassUnderTest classUnderTest = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;new&lt;/span&gt; ClassUnderTest((IOrderManager)mockObject.MockInstance);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    classUnderTest.DoSometing(actualXml);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    mockObject.Verify();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;The ClassUnderTest code is shown below:&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CustomNMockConstraintsClassLibrary&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClassUnderTest&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        IOrderManager _orderManager;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; ClassUnderTest(IOrderManager orderManager)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;._orderManager = orderManager;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DoSometing(&lt;span class="kwrd"&gt;string&lt;/span&gt; orderXml)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;._orderManager.SubmitOrder(orderXml);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The actual Constraint class is shown below. Notice that I inherit from the NMock &lt;strong&gt;BaseConstraint&lt;/strong&gt; class instead of the &lt;strong&gt;IConstraint&lt;/strong&gt; interface. BaseConstraint is an abstract class that already implements the IConstraint interface.&lt;/p&gt;&lt;p&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;!-- code formatted by &lt;a href="http://manoli.net/csharpformat/"&gt;http://manoli.net/csharpformat/&lt;/a&gt; --&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Xml;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NMock;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NMock.Constraints;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.XmlDiffPatch;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CustomNMockConstraintsClassLibrary&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; &lt;strong&gt;IsEquivalentXml&lt;/strong&gt; : BaseConstraint&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _expectedXml = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; XmlDiff _xmlDiff = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDiff();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;strong&gt;IsEquivalentXml&lt;/strong&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; xml) : &lt;span class="kwrd"&gt;this&lt;/span&gt;(xml, XmlDiffOptions.None)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        {            &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;strong&gt;IsEquivalentXml&lt;/strong&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; expectedXml, XmlDiffOptions options)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            _expectedXml = expectedXml;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            _xmlDiff.Options = options;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Eval(&lt;span class="kwrd"&gt;object&lt;/span&gt; val)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        {            &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; actualXml = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)ExtractActualValue(val);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; AreEqual(_expectedXml, actualXml);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Message&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            get    { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"&amp;lt;"&lt;/span&gt; + _expectedXml + &lt;span class="str"&gt;"&amp;gt;"&lt;/span&gt;;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; AreEqual(&lt;span class="kwrd"&gt;string&lt;/span&gt; expectedXml, &lt;span class="kwrd"&gt;string&lt;/span&gt; actualXml)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            &lt;span class="kwrd"&gt;bool&lt;/span&gt; areEqual = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                areEqual = _xmlDiff.Compare(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(&lt;span class="kwrd"&gt;new&lt;/span&gt; StringReader(expectedXml)), &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(&lt;span class="kwrd"&gt;new&lt;/span&gt; StringReader(actualXml)));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception e)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;                _expectedXml += &lt;span class="str"&gt;"\n"&lt;/span&gt; + e.ToString();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; areEqual;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-115250066961330089?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/115250066961330089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=115250066961330089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115250066961330089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115250066961330089'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/07/nmock-constraints.html' title='NMock Constraints'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-115224265291558718</id><published>2006-07-06T23:14:00.000-04:00</published><updated>2006-07-07T01:01:06.230-04:00</updated><title type='text'>My First Soap Extension</title><content type='html'>I've finally got a chance to write a Soap Extension. This one allows you to have caching for a web service method but the cache duration can be specified in the web.config file. The .NET "WebMethod" attribute supports caching but requires a constant value for the cache duration.&lt;br /&gt;&lt;br /&gt;Here's the code for the extension:&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Services.Protocols;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; CacheExtensionProj&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    [AttributeUsage(AttributeTargets.Method)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CacheExtensionAttribute : SoapExtensionAttribute &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; cacheDurationConfigKey;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; priority;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Type ExtensionType &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(CacheExtension); }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Priority &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; priority; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            set { priority = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        }    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CacheDurationConfigKey&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; cacheDurationConfigKey;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            set { cacheDurationConfigKey = &lt;span class="kwrd"&gt;value&lt;/span&gt;;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CacheExtension : SoapExtension &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        Stream originalStream;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        Stream newStream;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; cacheKey = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; cacheDurationConfigKey;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; cacheDuration = 0;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; GetInitializer(LogicalMethodInfo methodInfo,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            SoapExtensionAttribute attribute) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            &lt;span class="rem"&gt;//Cast attribute and return attribute value&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;            CacheExtensionAttribute cea = (CacheExtensionAttribute)attribute;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; cea.CacheDurationConfigKey;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; GetInitializer(Type serviceType)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Initialize(&lt;span class="kwrd"&gt;object&lt;/span&gt; initializer) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;            cacheDurationConfigKey = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)initializer;            &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (cacheDurationConfigKey == &lt;span class="kwrd"&gt;null&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                 cacheDurationConfigKey == &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                cacheDurationConfigKey = &lt;span class="str"&gt;"DefaultCacheDuration"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;            cacheDuration = GetCacheDuration(cacheDurationConfigKey);        &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessMessage(SoapMessage message) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;            &lt;span class="kwrd"&gt;switch&lt;/span&gt; (message.Stage) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; SoapMessageStage.BeforeSerialize:&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; SoapMessageStage.AfterSerialize:                &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;                    newStream.Position = 0;  &lt;span class="rem"&gt;//need to reset stream &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;                    CopyStream(newStream, originalStream);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;                    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;                    SaveStreamToCache(cacheKey, newStream);                    &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; SoapMessageStage.BeforeDeserialize:&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;                    &lt;span class="rem"&gt;//Cache key is the entire request xml string&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;                    cacheKey = GenerateCacheKeyFromStream(originalStream);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;                                        &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  85:  &lt;/span&gt;                    Stream stream = GetStreamFromCache(cacheKey);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (stream != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt;                        Trace.WriteLine(&lt;span class="str"&gt;"Returning Cached Version"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  89:  &lt;/span&gt;                        HttpContext.Current.Response.ContentType = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  90:  &lt;/span&gt;                                &lt;span class="str"&gt;"text/xml"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  91:  &lt;/span&gt;                        CopyStream(stream, &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  92:  &lt;/span&gt;                            HttpContext.Current.Response.OutputStream);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  93:  &lt;/span&gt;                        HttpContext.Current.Response.Flush();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  94:  &lt;/span&gt;                        HttpContext.Current.Response.End(); &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  95:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  96:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  97:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  98:  &lt;/span&gt;                        CopyStream(originalStream, newStream);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  99:  &lt;/span&gt;                        newStream.Position = 0;  &lt;span class="rem"&gt;//need to reset stream&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 100:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 101:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 102:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 103:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; SoapMessageStage.AfterDeserialize:&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 104:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 105:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 106:  &lt;/span&gt;                &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 107:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"invalid stage"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 108:  &lt;/span&gt;            }            &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 109:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 110:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 111:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Stream ChainStream( Stream stream )&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 112:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 113:  &lt;/span&gt;            originalStream = stream;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 114:  &lt;/span&gt;            newStream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 115:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; newStream;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 116:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 117:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 118:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CopyStream(Stream from, Stream to) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 119:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 120:  &lt;/span&gt;            TextReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(from);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 121:  &lt;/span&gt;            TextWriter writer = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamWriter(to);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 122:  &lt;/span&gt;            writer.WriteLine(reader.ReadToEnd());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 123:  &lt;/span&gt;            writer.Flush();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 124:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 125:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 126:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GenerateCacheKeyFromStream(Stream stream)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 127:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 128:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; cacheKey = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(stream).ReadToEnd();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 129:  &lt;/span&gt;            stream.Position = 0;  &lt;span class="rem"&gt;//need to reset stream&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 130:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; cacheKey;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 131:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 132:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 133:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SaveStreamToCache(&lt;span class="kwrd"&gt;string&lt;/span&gt; cacheKey, Stream stream)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 134:  &lt;/span&gt;        {            &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 135:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (cacheDuration &amp;gt; 0) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 136:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 137:  &lt;/span&gt;                Trace.WriteLine(&lt;span class="str"&gt;"Saving result in Cache"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 138:  &lt;/span&gt;                Trace.WriteLine(&lt;span class="str"&gt;"cacheKey = "&lt;/span&gt; + cacheKey);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 139:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 140:  &lt;/span&gt;                MemoryStream ms = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 141:  &lt;/span&gt;                stream.Position = 0;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 142:  &lt;/span&gt;                CopyStream(stream, ms);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 143:  &lt;/span&gt;                ms.Position = 0;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 144:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 145:  &lt;/span&gt;                HttpContext.Current.Cache.Insert(cacheKey, ms, &lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 146:  &lt;/span&gt;                    DateTime.Now.AddHours((&lt;span class="kwrd"&gt;double&lt;/span&gt;)cacheDuration), &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 147:  &lt;/span&gt;                    TimeSpan.Zero);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 148:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 149:  &lt;/span&gt;        }        &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 150:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 151:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Stream GetStreamFromCache(&lt;span class="kwrd"&gt;string&lt;/span&gt; cacheKey)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 152:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 153:  &lt;/span&gt;            Stream stream = HttpContext.Current.Cache[cacheKey] &lt;span class="kwrd"&gt;as&lt;/span&gt; Stream;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 154:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (stream != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 155:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 156:  &lt;/span&gt;                stream.Position = 0;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 157:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 158:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; stream;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 159:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 160:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 161:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; GetCacheDuration(&lt;span class="kwrd"&gt;string&lt;/span&gt; cacheDurationConfigKey)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 162:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 163:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; cacheDurationValue = -1;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 164:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; cacheDurationStringValue = &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 165:  &lt;/span&gt;                ConfigurationSettings.AppSettings[cacheDurationConfigKey];&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 166:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (cacheDurationStringValue != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;&amp;amp; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 167:  &lt;/span&gt;                cacheDurationStringValue != &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 168:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 169:  &lt;/span&gt;                &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 170:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 171:  &lt;/span&gt;                    cacheDurationValue = &lt;span class="kwrd"&gt;int&lt;/span&gt;.Parse(cacheDurationStringValue);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 172:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (cacheDurationValue &amp;lt;=0)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 173:  &lt;/span&gt;                    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 174:  &lt;/span&gt;                        Trace.WriteLine(&lt;span class="str"&gt;"Caching disabled. "&lt;/span&gt; +&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 175:  &lt;/span&gt;                            cacheDurationConfigKey + &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 176:  &lt;/span&gt;                            &lt;span class="str"&gt;" must be positive and greater than zero."&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 177:  &lt;/span&gt;                    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 178:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 179:  &lt;/span&gt;                &lt;span class="kwrd"&gt;catch&lt;/span&gt;(Exception e)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 180:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 181:  &lt;/span&gt;                    Trace.WriteLine(&lt;span class="str"&gt;"Caching disabled. Unable to convert "&lt;/span&gt; +&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 182:  &lt;/span&gt;                        cacheDurationConfigKey + &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 183:  &lt;/span&gt;                &lt;span class="str"&gt;" value from configuration file into int type. \nException: "&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 184:  &lt;/span&gt;                        + e.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 185:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 186:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 187:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 188:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 189:  &lt;/span&gt;                Trace.WriteLine(&lt;span class="str"&gt;"Caching disabled. "&lt;/span&gt; + &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 190:  &lt;/span&gt;                    cacheDurationConfigKey + &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 191:  &lt;/span&gt;                    &lt;span class="str"&gt;" value is null or empty string."&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 192:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 193:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 194:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; cacheDurationValue;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 195:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 196:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 197:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;You use the extension by adding the CacheExtension attribute to your&lt;br /&gt;web service method:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[WebMethod]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;[CacheExtension(CacheDurationConfigKey=&lt;span class="str"&gt;"GetDateTime.CacheDuration"&lt;/span&gt;)]        &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetDateTime(&lt;span class="kwrd"&gt;string&lt;/span&gt; name)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:    &lt;/span&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"Hello "&lt;/span&gt; + name + &lt;span class="str"&gt;" the time is "&lt;/span&gt; + DateTime.Now.ToString();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Your web.config file should look something like this:&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:    &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="DefaultCacheDuration"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="8"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;="GetDateTime.CacheDuration"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Some good links about Soap Extensions:&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/03/ASPColumn/" target="_blank"&gt;http://msdn.microsoft.com/msdnmag/issues/04/03/ASPColumn/&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;a href="http://www.theserverside.net/tt/articles/showarticle.tss?id=SOAPExtensions" target="_blank"&gt;http://www.theserverside.net/tt/articles/showarticle.tss?id=SOAPExtensions&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp03222001.asp" target="_blank"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp03222001.asp&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;a href="http://www.codeguru.com/columns/experts/article.php/c5479/" target="_blank"&gt;http://www.codeguru.com/columns/experts/article.php/c5479/&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;a href="http://www.mastercsharp.com/article.aspx?ArticleID=86&amp;&amp;amp;TopicID=7" target="_blank"&gt;http://www.mastercsharp.com/article.aspx?ArticleID=86&amp;&amp;amp;TopicID=7&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-115224265291558718?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/115224265291558718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=115224265291558718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115224265291558718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115224265291558718'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/07/my-first-soap-extension.html' title='My First Soap Extension'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-115198658697392248</id><published>2006-07-04T00:14:00.000-04:00</published><updated>2006-07-04T00:18:45.740-04:00</updated><title type='text'>We're having a baby!</title><content type='html'>&lt;iframe style="margin-top:10px" src='http://www.flickr.com/slideShow/index.gne?set_id=72157594186562698' frameBorder=0 width=500 height=500 scrolling=no&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The baby was putting on quite a show for us during the ultrasound, it was kicking and moving its arms around, it was amazing! Its' too early to know the baby's sex, so stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-115198658697392248?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/115198658697392248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=115198658697392248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115198658697392248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115198658697392248'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/07/were-having-baby.html' title='We&apos;re having a baby!'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-115198611702141087</id><published>2006-07-03T23:36:00.000-04:00</published><updated>2006-07-04T00:08:37.033-04:00</updated><title type='text'>Mexico Vacation April 2006</title><content type='html'>&lt;iframe style="margin-top:10px" src='http://www.flickr.com/slideShow/index.gne?set_id=72157594186516347' frameBorder=0 width=500 height=500 scrolling=no&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-115198611702141087?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/115198611702141087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=115198611702141087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115198611702141087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/115198611702141087'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/07/mexico-vacation-april-2006.html' title='Mexico Vacation April 2006'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-113676915354250983</id><published>2006-01-08T20:03:00.000-05:00</published><updated>2006-10-30T09:31:51.166-05:00</updated><title type='text'>New Position!</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/logo[1].0.gif"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/logo%5B1%5D.0.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I recently started a new position with Progressive Insurance as a software architect and I'm very happy about it. I've been a consultant for the last six years and it was about time for a change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-113676915354250983?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/113676915354250983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=113676915354250983' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113676915354250983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113676915354250983'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2006/01/new-position.html' title='New Position!'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-113489568380686231</id><published>2005-12-18T03:45:00.000-05:00</published><updated>2006-01-14T06:44:34.393-05:00</updated><title type='text'>NMock Presentation</title><content type='html'>I recently gave a &lt;a href="http://www.bennettadelson.com/downloads/NMockPresentation.zip"&gt;presentation&lt;/a&gt; at the Cleveland .NET SIG.   If you're interested in using mock objects, I suggest you check it out :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-113489568380686231?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/113489568380686231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=113489568380686231' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113489568380686231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113489568380686231'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/12/nmock-presentation.html' title='NMock Presentation'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-113485165102603353</id><published>2005-12-17T15:29:00.000-05:00</published><updated>2005-12-17T15:34:11.026-05:00</updated><title type='text'>How to replace MSN Toolbar default search</title><content type='html'>Do you like using MSN Search Toolbar but you still want to use Google for your searches?&lt;br /&gt;&lt;br /&gt;Then follow these simple steps:&lt;br /&gt;&lt;br /&gt;1) Go into the toolbar options and click on General&lt;br /&gt;2) Enter http://www.google.com/search?hl=en&amp;amp;q=$w ($w represents the search term you are looking for)&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/MSNToolbar.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/MSNToolbar.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-113485165102603353?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/113485165102603353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=113485165102603353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113485165102603353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113485165102603353'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/12/how-to-replace-msn-toolbar-default.html' title='How to replace MSN Toolbar default search'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-113477147487737663</id><published>2005-12-16T17:17:00.000-05:00</published><updated>2005-12-16T17:23:58.473-05:00</updated><title type='text'>Favorite Resharper Keyboard Shortcuts</title><content type='html'>&lt;div id="idOWAReplyText6636" dir="ltr"&gt;&lt;div dir="ltr"&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;&lt;/span&gt;&lt;table width="100%" border="1" style="background:white"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;td width="50%"&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/RS1.2.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/RS1.2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;td width="50%"&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/RS2.0.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/RS2.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-113477147487737663?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/113477147487737663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=113477147487737663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113477147487737663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113477147487737663'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/12/favorite-resharper-keyboard-shortcuts_16.html' title='Favorite Resharper Keyboard Shortcuts'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-113474801770178631</id><published>2005-12-16T10:10:00.000-05:00</published><updated>2007-01-20T11:01:57.440-05:00</updated><title type='text'>VSS Tips</title><content type='html'>Open VSS and select the project you want to work with.&lt;br /&gt;&lt;br /&gt;On the Tools menu, click Options, click on the General tab.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/vss1.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/vss1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;• Set &lt;strong&gt;Use visual merge&lt;/strong&gt; to &lt;em&gt;Yes &lt;/em&gt;– this settings shows all the changes made during a merge.&lt;br /&gt;&lt;br /&gt;• Set &lt;strong&gt;Folder for temporary files&lt;/strong&gt; to &lt;em&gt;C:\TEMP&lt;/em&gt; (or another directory on your hard drive) - Creating the temp folder locally, rather than on a server, may increase VSS performance.&lt;br /&gt;&lt;br /&gt;Click on the Local Files tab.&lt;br /&gt;&lt;br /&gt;• Set &lt;strong&gt;Compare files by&lt;/strong&gt; to &lt;em&gt;Contents&lt;/em&gt; – Compares the full contents of your local file to VSS’s copy. This ensures that you really get the latest version of the file when you click on Get Latest Version in the VS.NET IDE.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/vss2.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/vss2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When retrieving the latest version of a project from VSS you only need to specify the &lt;strong&gt;recursive&lt;/strong&gt; option. You do not need to select the &lt;strong&gt;Build tree&lt;/strong&gt; option unless you do not want VSS to store the files in the working folder directory on your local drive.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/vss4.0.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/vss4.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-113474801770178631?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/113474801770178631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=113474801770178631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113474801770178631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113474801770178631'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/12/vss-tips.html' title='VSS Tips'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-113039117693701178</id><published>2005-10-27T01:31:00.000-04:00</published><updated>2005-10-27T01:32:56.936-04:00</updated><title type='text'>NUnit VS2003 Template</title><content type='html'>If you're using NUnit, then try this VS2003 template. It adds a test fixture class item to the "Add Items" dialog box.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/NUnit_AddNewItem.JPG"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/NUnit_AddNewItem2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After selecting the "Test" item you will see a class file like below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/NUnit_Class.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/NUnit_Class.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download &lt;a href="http://members.cox.net/jmatos/NUnit_Template.msi"&gt;msi installer&lt;/a&gt; or &lt;a href="http://members.cox.net/jmatos/NUnit_Template.zip"&gt;installer project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-113039117693701178?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/113039117693701178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=113039117693701178' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113039117693701178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113039117693701178'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/10/nunit-vs2003-template.html' title='NUnit VS2003 Template'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-113039105046282553</id><published>2005-10-27T01:27:00.000-04:00</published><updated>2006-11-06T15:41:39.976-05:00</updated><title type='text'>Installing Vista on Virtual PC</title><content type='html'>Make sure you have a good computer (3 GHz or higher &amp;amp; 2 GB of RAM or higher)&lt;br /&gt;Download and install Virtual PC&lt;br /&gt;Download Vista beta ISO image&lt;br /&gt;Download and run &lt;a href="http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe"&gt;Virtual CD Control Panel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Create a new virtual machine and specify "Other" for the operating system&lt;br /&gt;Specify at least 1 GB of RAM for the virtual machine&lt;br /&gt;Create a new Virtual Hard Disk&lt;br /&gt;Run the virtual machine&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image1.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image2.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image3.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image4.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image4.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image5.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image6.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image6.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image7.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you run the virtual machine you should get the following message:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reboot and Select proper Boot device or Insert Boot Media in selected Boot device&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Run the Virtual CD Control Panel and mount the longhorn beta ISO to a drive letter&lt;br /&gt;(I used Z: )&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image8.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image8.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select the CD-&gt;Capture ISO image menu option and select drive letter that is mapped to the vista beta ISO image (in this case Z:)&lt;br /&gt;&lt;br /&gt;Issue a CTRL-ALT-DELETE from the Action menu option - this will cause the virtual mchine to reboot and&lt;br /&gt;&lt;br /&gt;The Vista install will run and display an initial screen that has an "Install" option&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image9.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image9.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select to install but make sure you click SHIFT-F10 right afterward to invoke the command window, the Vista beta will not install on a RAW hard drive – so you’ll need to create a partition using the DiskPart utility which can be run from the command window.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image10.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image10.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Issue the following commands to create a partition on the vm hard drive&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Select disk=0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Then&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create Partition Primary&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Then type “Exit” to close the DiskPart, type “Exit” again to close the command window&lt;br /&gt;&lt;br /&gt;Then click the “Install now” button to complete the install&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/1166/890/1600/image11.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/1166/890/320/image11.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After the Vista install is complete install the “Virtual Machine Additions” (from the Action menu) otherwise you will be stuck with a default resolution of 800x600&lt;br /&gt;&lt;br /&gt;You may need a special version of "Virtual Machine Additions" which for the time being can be downloaded from &lt;a href="http://commnet.microsoftpdc.com/content/vmadditions.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hope that helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-113039105046282553?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/113039105046282553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=113039105046282553' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113039105046282553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/113039105046282553'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/10/installing-vista-on-virtual-pc.html' title='Installing Vista on Virtual PC'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-112707488609221912</id><published>2005-09-18T16:18:00.000-04:00</published><updated>2005-09-18T17:22:11.456-04:00</updated><title type='text'>PDC 2005 Highlights</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Language Integrated Query (LINKQ)&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;Query any data source (relational, xml, memory) from within the C# or VB.NET language&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=114680"&gt;http://channel9.msdn.com/Showpost.aspx?postid=114680&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Atlas&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;Create ASP.NET applications that use AJAX without having to write a ton of Javascript&lt;br /&gt;&lt;a href="http://beta.asp.net/default.aspx?tabindex=7&amp;tabid=47"&gt;http://beta.asp.net/default.aspx?tabindex=7&amp;amp;tabid=47&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Microsoft Office 12&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;New version of office that has a new UI that makes it easier to do the things you want to do&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=114720"&gt;http://channel9.msdn.com/Showpost.aspx?postid=114720&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Windows Workflow Foundation (WWF)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Create your own work flow applications in windows Vista&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=115366"&gt;http://channel9.msdn.com/Showpost.aspx?postid=115366&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Microsoft Expression Designer (codename "Sparkle")&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Easily create web applications that developers and graphic designers can work on together&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=115387"&gt;http://channel9.msdn.com/Showpost.aspx?postid=115387&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2005/09/14/425216.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2005/09/14/425216.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/products/expression/en/web_designer/default.aspx"&gt;MS Article&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-112707488609221912?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/112707488609221912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=112707488609221912' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/112707488609221912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/112707488609221912'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/09/pdc-2005-highlights_18.html' title='PDC 2005 Highlights'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111324597132409831</id><published>2005-06-13T15:02:00.000-04:00</published><updated>2005-06-13T09:23:41.463-04:00</updated><title type='text'>VS2005 DevCon</title><content type='html'>&lt;p&gt;On June 16th I'll be presenting at the Visual Studio 2005 developer's conference in Detroit. I'll be speaking about the new features in ASP.NET 2.0 - primarily MasterPages, Themes and Skins, and the new controls (Menu, TreeView, SiteMap, Login, etc...)&lt;/p&gt;&lt;p&gt;There's going to be 3 development tracks ASP.NET V2.0, Team System, and Smart Client. The registration &lt;a href="https://www.chrysalisevents.com/vs2005devcon" target="_blank"&gt;web site&lt;/a&gt; is now open and the fee is a nominal $99 for this all day event. The format of the event is similar to last year's DevDays. There's going to be free stuff, free food and drinks, think of it as a mini &lt;a href="http://msdn.microsoft.com/events/pdc" target="_blank"&gt;PDC&lt;/a&gt; :)&lt;/p&gt;&lt;p&gt;The agenda is summarized below:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Opening Keynote – Tim Landgrave and Drew Robbins&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ASP.NET v2.0&lt;/strong&gt;&lt;br /&gt;What’s New in ASP.NET 2.0 – Steven Smith&lt;br /&gt;Building the Look and Feel with ASP.NET 2.0 – &lt;strong&gt;&lt;a href="#" title="MasterPages are really cool!"&gt;Jorge Matos&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Leveraging Data in ASP.NET 2.0 – Bill Steele&lt;br /&gt;Personalization and Membership – Darryl Hogan&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Visual Studio Team System&lt;/strong&gt;&lt;br /&gt;Project Initiation: Implementing Process – Alex Lowe&lt;br /&gt;Analysis and Design: Visually Designing Your Application – Martin Shoemaker&lt;br /&gt;Development: Writing Quality Code – Dave Donaldson&lt;br /&gt;Test: Validating the Project – Bill Maurer&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Building Smart Clients with Visual Studio 2005&lt;/strong&gt;&lt;br /&gt;Building Databound WinForms Apps – Jim Wilt&lt;br /&gt;Deploying Apps w/ ClickOnce – Bill Wagner&lt;br /&gt;Building Office Apps with VSTO 2005 – Drew Robbins&lt;br /&gt;.NET CF Tools and Platform Overview – Josh Holmes&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Closing Keynote – David White&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111324597132409831?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111324597132409831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111324597132409831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111324597132409831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111324597132409831'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/06/vs2005-devcon.html' title='VS2005 DevCon'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111640460719874905</id><published>2005-05-18T04:14:00.000-04:00</published><updated>2005-05-18T04:23:27.203-04:00</updated><title type='text'>VSTS Pricing Change</title><content type='html'>Microsoft has changed its pricing plan for Visual Studio Team System.&lt;br /&gt;Check it out:&lt;br /&gt;&lt;a href="http://www.theserverside.net/news/thread.tss?thread_id=33974" target="_blank"&gt;http://www.theserverside.net/news/thread.tss?thread_id=33974&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111640460719874905?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111640460719874905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111640460719874905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111640460719874905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111640460719874905'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/05/vsts-pricing-change.html' title='VSTS Pricing Change'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111463643298665030</id><published>2005-04-27T17:17:00.000-04:00</published><updated>2005-04-27T17:17:51.963-04:00</updated><title type='text'>Rocky's Take on SOA</title><content type='html'>Rocky has a good article on SOA, and he makes some interesting points about the issues concerning web service versioning, but he doesn't offer any solutions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://theserverside.net/articles/showarticle.tss?id=SOAVersioningCovenant" target="_blank"&gt;http://theserverside.net/articles/showarticle.tss?id=SOAVersioningCovenant&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What I find most interesting is that he once said that "SOA was nothing but Cobol over the internet", it was obvious that his opinion on SOA at the time was not very flattering. My theory is that his previous books on "Business Objects" are probably not selling so well anymore and so he's decided to jump on the SOA bandwagon. Geez, I wonder if his next book will be called "Expert C# SOA" or "CSLA SOA"?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111463643298665030?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111463643298665030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111463643298665030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111463643298665030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111463643298665030'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/04/rockys-take-on-soa.html' title='Rocky&apos;s Take on SOA'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111419013651289119</id><published>2005-04-22T13:11:00.000-04:00</published><updated>2005-04-22T13:19:04.523-04:00</updated><title type='text'>Cloning made easy</title><content type='html'>Cloning an object is simple if you use serialization.&lt;pre&gt;&lt;br /&gt;[Serializable]&lt;br /&gt;public class Sheep : ICloneable&lt;br /&gt;{&lt;br /&gt;  private string _name;&lt;br /&gt;&lt;br /&gt;  public Sheep()&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public string Name&lt;br /&gt;  {&lt;br /&gt;    get { return _name; }&lt;br /&gt;    set { _name = value; }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public object Clone()&lt;br /&gt;  {&lt;br /&gt;    BinaryFormatter formatter = new BinaryFormatter();&lt;br /&gt;    MemoryStream ms = new MemoryStream();&lt;br /&gt;    formatter.Serialize(ms, this);&lt;br /&gt;    ms.Position = 0;&lt;br /&gt;    return formatter.Deserialize(ms);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111419013651289119?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111419013651289119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111419013651289119' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111419013651289119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111419013651289119'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/04/cloning-made-easy.html' title='Cloning made easy'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111229034459314950</id><published>2005-03-31T12:20:00.000-05:00</published><updated>2005-03-31T12:32:24.593-05:00</updated><title type='text'>MS Certifications</title><content type='html'>The ServerSide.NET currently has a forum &lt;a href="http://theserverside.net/news/thread.tss?thread_id=32963" target="_blank"&gt;Ask TheServerSide: Does Microsoft Certification Matter?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm amazed at how some people can take the position that certifications are of no use. I've recently achieved MCSD status and I'm studying for my MCDBA and I doing it to increase my breath of knowledge and at the same time to differentiate myself from other developers who don't have certifications.  The certification in and of itself does not mean that the person who has the cert is an expert but it does show that the person has a desire to learn new technology.  Having a certification is not a substitute for real-world experience, but it does mean something.  &lt;br /&gt;&lt;br /&gt;Bottom line:&lt;br /&gt;It can't hurt you to have certification, it can only help you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111229034459314950?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111229034459314950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111229034459314950' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111229034459314950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111229034459314950'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/ms-certifications.html' title='MS Certifications'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111203322031637129</id><published>2005-03-28T12:57:00.000-05:00</published><updated>2005-03-28T13:07:00.320-05:00</updated><title type='text'>Exception Handling</title><content type='html'>Brad Abrams summarized a &lt;a href="http://blogs.msdn.com/brada/archive/2005/03/27/402801.aspx" target="_blank"&gt;nice list of Exceptions&lt;/a&gt; that might be useful for anyone developing applications that need to handle exceptions.&lt;br /&gt;&lt;br /&gt;He also lists a presentation he did on &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7421bca5-1efc-41fc-989f-d112144f5561&amp;displaylang=en" target="_blank"&gt;Exception Management&lt;/a&gt; best practices.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111203322031637129?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111203322031637129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111203322031637129' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111203322031637129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111203322031637129'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/exception-handling.html' title='Exception Handling'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111168675760494845</id><published>2005-03-24T12:50:00.000-05:00</published><updated>2005-03-24T12:52:37.606-05:00</updated><title type='text'>Coding Slave</title><content type='html'>I've always intended to read Bob's book &lt;a href="http://codingslave.blogspot.com/2005/03/q-wheres-it-going.html" target="_blank"&gt;Coding Slave&lt;/a&gt; but never got around to buying it, but now its free and I have no excuse now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111168675760494845?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111168675760494845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111168675760494845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111168675760494845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111168675760494845'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/coding-slave.html' title='Coding Slave'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111168569069090945</id><published>2005-03-24T12:32:00.000-05:00</published><updated>2006-02-08T12:46:08.473-05:00</updated><title type='text'>VS2005 &amp; SQL Server 2005</title><content type='html'>Looks like the ship date has been delayed till later in the year.&lt;br /&gt;&lt;br /&gt;Read the news.com &lt;a href="http://news.com.com/Microsoft+delays+tool,+database+updates/2100-1007_3-5628166.html?tag=nefd.top" target="_blank"&gt;article&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111168569069090945?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111168569069090945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111168569069090945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111168569069090945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111168569069090945'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/vs2005-sql-server-2005.html' title='VS2005 &amp; SQL Server 2005'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111160273708821536</id><published>2005-03-23T13:31:00.000-05:00</published><updated>2005-03-23T13:34:58.573-05:00</updated><title type='text'>AvPad</title><content type='html'>Chris Anderson has just come out with a new tool for learning &lt;a href="http://www.simplegeek.com/PermaLink.aspx/1e20c034-8df1-4511-9cb8-91b4694a2040" target="_blank"&gt;Xaml&lt;/a&gt;.  Check it out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111160273708821536?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111160273708821536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111160273708821536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111160273708821536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111160273708821536'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/avpad.html' title='AvPad'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111142339948314878</id><published>2005-03-22T15:03:00.000-05:00</published><updated>2005-03-22T12:05:53.843-05:00</updated><title type='text'>Visual Studio 2005 Pricing</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;a href="http://callmealex.com/cs/"&gt;Alex Lowe&lt;/a&gt; presented at the &lt;a href="http://www.bennettadelson.com/technicalresources/presentations.aspx"&gt;Cleveland .NET SIG&lt;/a&gt; a few months back and he told us about how VS2005 was going to be split into 3 versions based on the role you are playing in your organization. The 3 roles are:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Software Architects&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Software Developers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Software Testers&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;There is also a version of VS2005 that contains all 3 roles and you have to get the Team Foundation Server as a separate product if you want to use the collaboration features of Team System.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;All existing MSDN subscribers will get a free upgrade to one role-based version of VS2005. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;For more information:&lt;br /&gt;&lt;a href="http://www.microsoft.com/presspass/press/2005/mar05/03-21VS2005PR.asp" target="_blank"&gt;http://www.microsoft.com/presspass/press/2005/mar05/03-21VS2005PR.asp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/howtobuy/vs2005/compare" target="_blank"&gt;http://msdn.microsoft.com/howtobuy/vs2005/compare&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111142339948314878?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111142339948314878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111142339948314878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111142339948314878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111142339948314878'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/visual-studio-2005-pricing.html' title='Visual Studio 2005 Pricing'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111141609841520585</id><published>2005-03-21T14:50:00.000-05:00</published><updated>2005-03-21T11:50:23.910-05:00</updated><title type='text'>Resharper</title><content type='html'>I've been using a Visual Studio.Net add-in called &lt;a href="http://www.jetbrains.com/resharper/index.html"&gt;Resharper&lt;/a&gt; for the last 2 months now and I have to say I really like the product, it makes developing so much easier, the ability to quickly search for classses by pressing CTRL-N and typing a few characters and the ability to find all usages of a method throughout the solution are two of my favorite features.&lt;br /&gt;&lt;br /&gt;That being said, I do have a couple of issues with the product:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;There is no feature to extract a pubic interface from a class &lt;/li&gt;&lt;li&gt;The product slows down the initial load time of a solution to perform caching&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Overall, I think the benefits of Resharper far outweigh the issues I have with the product. I highly recommend that you check this out, there's a free 30 day eval download for it&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111141609841520585?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111141609841520585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111141609841520585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111141609841520585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111141609841520585'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/resharper.html' title='Resharper'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111051210810157292</id><published>2005-03-10T22:33:00.000-05:00</published><updated>2005-03-10T22:35:08.103-05:00</updated><title type='text'>VB6 Revolt</title><content type='html'>&lt;a href="http://www.hanselman.com/blog/YouHaveGOTToBeKiddingMe.aspx"&gt;Scott Hanselman&lt;/a&gt; sums it very nicely: &lt;strong&gt;Set VB6 = Nothing&lt;br /&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111051210810157292?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111051210810157292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111051210810157292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111051210810157292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111051210810157292'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/vb6-revolt.html' title='VB6 Revolt'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111039709782722821</id><published>2005-03-09T14:32:00.000-05:00</published><updated>2005-03-09T14:40:25.800-05:00</updated><title type='text'>SQL Server Broker (SSB)</title><content type='html'>I just saw a presentation last night on SSB given by Brian Jackson (MCS) and I think Brian did a great job talking about this new feature of SQL Server 2005. I've seen more than one project treat the database as a "queue" and I think SSB will make it much easier to write distributed applications that involve the database.&lt;br /&gt;&lt;br /&gt;The presentation slides and demo code will soon be made available &lt;a href="http://www.bennettadelson.com/technicalresources/presentations.aspx" target="_blank"&gt;here:&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111039709782722821?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111039709782722821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111039709782722821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111039709782722821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111039709782722821'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/sql-server-broker-ssb.html' title='SQL Server Broker (SSB)'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111038988608526508</id><published>2005-03-09T12:24:00.000-05:00</published><updated>2005-03-09T12:39:30.993-05:00</updated><title type='text'>VB MVP Revolt</title><content type='html'>I can understand why some people are upset about Microsoft's decision to stop supporting VB6 at the end of this month, but in my opinion I would have done the exact same thing.  It's not easy to add new OO improvements and remain completely backward compatible.  It would take so much longer for new language features to be added to VB6 if complete backward compatibility had to be maintained, and I think MS has given VB6 developers enough advanced notice to prepare for this. Bear in mind that this comment is from someone who'd rather shoot himself in the foot then write VB6 code.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rblevin.blogspot.com/2005/03/microsoft-mvps-revolt.html" target="_blank"&gt;The Blah Blah Blog&lt;/a&gt;&lt;br /&gt;&lt;a href="http://radio.weblogs.com/0001011/2005/03/08.html#a9568" target="_blank"&gt;Robert Scoble&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.danappleman.com/index.php?p=35" target="_blank"&gt;Dan Appleman&lt;/a&gt;&lt;br /&gt;&lt;a href="http://callmealex.com/cs/archive/2005/03/09/72.aspx" target="_blank"&gt;Alex Lowe&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111038988608526508?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111038988608526508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111038988608526508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111038988608526508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111038988608526508'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/vb-mvp-revolt.html' title='VB MVP Revolt'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111038895303102496</id><published>2005-03-09T12:21:00.000-05:00</published><updated>2005-03-09T12:22:33.033-05:00</updated><title type='text'>SQL Server @@Identity</title><content type='html'>Most developers when writing an insert statement for a table that has an identity column will use the @@Identity function to return the value of the newly inserted column.&lt;br /&gt;&lt;br /&gt;A better practice is to use the SCOPE_IDENTITY() function instead. The reason is that sometimes @@Identity may return back the wrong value. If you happen to have an INSERT trigger on the table that you are inserting data into that also happens inserts a row in a different table (auditing?) then @@Identity will return the identity value from the other table instead of the first table. SCOPE_IDENTITY() always returns the new identity value from the closest scoped operation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111038895303102496?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111038895303102496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111038895303102496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111038895303102496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111038895303102496'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/sql-server-identity.html' title='SQL Server @@Identity'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-111021772270552700</id><published>2005-03-07T12:31:00.000-05:00</published><updated>2005-03-07T12:50:19.056-05:00</updated><title type='text'>Best Practices</title><content type='html'>My job as a .NET consultant takes me to a lot of different companies and sometimes I'm asked to fix an existing performance problem. 99% of the time, the performance problem is related to a poorly written stored procedure, trigger or sql statement.&lt;br /&gt;&lt;br /&gt;I'm amazed how often I see stored procedures and triggers that are &gt; 1000 lines, which in and of itself is not the worst practice, but definitely a flag that maybe there's too much business logic in the stored procedure/trigger.&lt;br /&gt;&lt;br /&gt;The other thing I see quite often are excessive use of cursors and temporary tables. I can understand this trend because it's really easy to create and use cursors and temporary tables in SQL Server.&lt;br /&gt;&lt;br /&gt;Whenever I have to fix a problem at a client and I find it's related to poorly written SQL Server stored procs/triggers, I make it a priority to educate the developers who wrote the original code and show them alternative options.&lt;br /&gt;&lt;br /&gt;For example, most cursors can be re-written with a while loop and temporary tables can (most of the time) be replaced with Table variables instead. Sometimes, its just a matter of re-writing the SQL statements to use a sub-select.&lt;br /&gt;&lt;br /&gt;I don't understand why more developers don't know these basic best practices for SQL Server:&lt;br /&gt;&lt;br /&gt;Bottom Line:&lt;br /&gt;&lt;b&gt;Avoid cursors when you can: &lt;/b&gt;they cause locking and server resources are consumed&lt;br /&gt;&lt;b&gt;Avoid temporary tables: &lt;/b&gt;they cause more locking and more stored procedure recompiles&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-111021772270552700?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/111021772270552700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=111021772270552700' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111021772270552700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/111021772270552700'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/best-practices.html' title='Best Practices'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-110992046344966887</id><published>2005-03-04T00:46:00.000-05:00</published><updated>2005-03-04T10:09:32.796-05:00</updated><title type='text'>Resources to help jump-start your .NET Development</title><content type='html'>&lt;span style="font-size:130%;"&gt;General .NET Resources&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;The .NET Home Page - The best “jump off” point for all things .NET&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;a href="http://www.microsoft.com/net/default.asp"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/net/default.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;What is .NET? Here you will find a basic description of .NET services and functions &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/theshow/EPISODE011/default.asp"&gt;&lt;span style="font-size:85%;"&gt;http://msdn.microsoft.com/theshow/EPISODE011/default.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Frequently Asked Questions about Microsoft® .NET Framework&lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/library/techart/faq111700.htm"&gt;&lt;span style="font-size:85%;"&gt;http://msdn.microsoft.com/library/techart/faq111700.htm&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;The GotDotNet Home Page - An excellent site to find more information about .NET with samples and real-world examples of .NET applications&lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.gotdotnet.com/"&gt;&lt;span style="font-size:85%;"&gt;http://www.gotdotnet.com/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;An Introduction to the .NET Framework - A concise introduction to the .NET Framework &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.gotdotnet.com/team/framework/default.aspx"&gt;&lt;span style="font-size:85%;"&gt;http://www.gotdotnet.com/team/framework/default.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Microsoft® .NET Framework 1.1 Class Library Reference Volumes 1-4 &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/mspress/books/6075.asp"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/mspress/books/6075.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Best Practices for .Net Development &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/seminar/shared/asp/view.asp?url=/Seminar/en/20020531devt1-47/manifest.xml"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/seminar/shared/asp/view.asp?url=/Seminar/en/20020531devt1-47/manifest.xml&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Exception Management&lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/exceptdotnet.asp"&gt;&lt;span style="font-size:85%;"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/exceptdotnet.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Visual Studio .Net Home Page &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/vstudio/default.asp"&gt;&lt;span style="font-size:85%;"&gt;http://msdn.microsoft.com/vstudio/default.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Inside Information for Developer Tools &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/mspress/devtools/vstudio.net/"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/mspress/devtools/vstudio.net/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Microsoft VS.Net Technical Resources &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/vstudio/techinfo/default.asp"&gt;&lt;span style="font-size:85%;"&gt;http://msdn.microsoft.com/vstudio/techinfo/default.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;Visual Basic .Net books &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/mspress/devtools/vstudio.net/vbasic.net/default.asp"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/mspress/devtools/vstudio.net/vbasic.net/default.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;C++ Books&lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/mspress/devtools/vstudio.net/visualc.net/default.asp"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/mspress/devtools/vstudio.net/visualc.net/default.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;em&gt;The Visual Basic .NET Upgrade Guide&lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/vbasic/techinfo/articles/upgrade/guide.asp"&gt;&lt;span style="font-size:85%;"&gt;http://msdn.microsoft.com/vbasic/techinfo/articles/upgrade/guide.asp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-110992046344966887?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/110992046344966887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=110992046344966887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/110992046344966887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/110992046344966887'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/resources-to-help-jump-start-your-net.html' title='Resources to help jump-start your .NET Development'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-110973100333756512</id><published>2005-03-02T00:44:00.000-05:00</published><updated>2005-03-01T21:46:12.260-05:00</updated><title type='text'>Agile Programming</title><content type='html'>I've been involved in an Agile project for the last 6 weeks and this hits too close to home.&lt;br /&gt;&lt;img src="http://members.cox.net/jmatos/images/unit_testing.bmp" width="100%" height="100%"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-110973100333756512?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/110973100333756512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=110973100333756512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/110973100333756512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/110973100333756512'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/03/agile-programming_01.html' title='Agile Programming'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11129572.post-110956102564477448</id><published>2005-02-28T01:23:00.000-05:00</published><updated>2005-02-27T22:23:45.646-05:00</updated><title type='text'>My First Blog Post</title><content type='html'>This is my very first blog post. I've been putting off creating my own blog for a long time, but I now I'm part of the Blogsphere. If you're reading this I apologize for my lack of creativity, I can't think of anything interesting to write about! I did see a couple of movies this weekend, the first one was the new Keanu Reeves movie &lt;strong&gt;Constantine&lt;/strong&gt; - it wasn't bad but its definitely a movie you should wait and see when it comes out on video, speaking of video, I just rented another movie called &lt;strong&gt;The Grudge&lt;/strong&gt; it was very good. I enjoy horror movies, and this one reminded me of how scared I felt when I first saw "The Exorcist". The woman from the "Buffy the Vampire Slayer" tv show was in the movie (Sarah Michelle Gellar?) as well as Bill Pullman, but as far as I was concerned the real star of the movie was the story itself, check it out at a video store near you (if you dare).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11129572-110956102564477448?l=jorgelmatos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgelmatos.blogspot.com/feeds/110956102564477448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11129572&amp;postID=110956102564477448' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/110956102564477448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11129572/posts/default/110956102564477448'/><link rel='alternate' type='text/html' href='http://jorgelmatos.blogspot.com/2005/02/my-first-blog-post.html' title='My First Blog Post'/><author><name>Jorge Matos</name><uri>http://www.blogger.com/profile/09643831519639771845</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://photos1.blogger.com/blogger/1166/890/320/Paris100A.jpg'/></author><thr:total>1</thr:total></entry></feed>
